FHIR IG analytics| Package | silfhirprofileig |
| Resource Type | StructureMap |
| Id | StructureMap-ExtractInpatientNutritionScreening.json |
| FHIR Version | R5 |
| Source | https://build.fhir.org/ig/savannahghi/sil_fhir_profile_ig/StructureMap-ExtractInpatientNutritionScreening.html |
| URL | https://fhir.slade360.co.ke/fhir/StructureMap/ExtractInpatientNutritionScreening |
| Version | 0.1.0 |
| Status | active |
| Date | 2026-09-11T12:18:36+00:00 |
| Name | ExtractInpatientNutritionScreening |
| Title | Inpatient Nutrition Screening (MUST) Extraction |
| Description | The MUST score becomes one Observation carrying the total with its three steps as components, plus a RiskAssessment for the band. The nutritional plan becomes a CarePlan, and a score in the high-risk band raises a dietitian referral. That referral is intent `proposal` and status `draft` deliberately: a map should not put an active order in a dietitian's queue on its own, so it arrives as something a clinician signs. |
No resources found
No resources found
Note: links and images are rebased to the (stated) source
Generated Narrative: StructureMap ExtractInpatientNutritionScreening
/// url = 'https://fhir.slade360.co.ke/fhir/StructureMap/ExtractInpatientNutritionScreening' /// name = 'ExtractInpatientNutritionScreening' /// title = 'Inpatient Nutrition Screening (MUST) Extraction' /// status = 'active' /// description = 'The MUST score becomes one Observation carrying the total with its three steps as components, plus a RiskAssessment for the band. The nutritional plan becomes a CarePlan, and a score in the high-risk band raises a dietitian referral. That referral is intent `proposal` and status `draft` deliberately: a map should not put an active order in a dietitian\'s queue on its own, so it arrives as something a clinician signs.' uses "http://hl7.org/fhir/StructureDefinition/QuestionnaireResponse" alias QR as source uses "http://hl7.org/fhir/StructureDefinition/Bundle" alias Bundle as target uses "http://hl7.org/fhir/StructureDefinition/Observation" alias Observation as target uses "http://hl7.org/fhir/StructureDefinition/RiskAssessment" alias RiskAssessment as target uses "http://hl7.org/fhir/StructureDefinition/CarePlan" alias CarePlan as target uses "http://hl7.org/fhir/StructureDefinition/ServiceRequest" alias ServiceRequest as target group ExtractInpatientNutritionScreening(source qr : QR, target bundle : Bundle) { qr -> bundle.type = 'transaction' "setBundleType"; // ── MUST score ───────────────────────────────────────────────────────────── // LOINC has 101789-6 for the screening itself and 101807-6 for its result // indicator, but nothing for the three steps, so those carry local codes. qr.item as gM where ((linkId = 'must') and item.answer.value.ofType(Coding).exists()) then { gM -> bundle.entry as entryM, entryM.resource = create('Observation') as obsM then { qr -> obsM, entryM then BuildObsBase(qr, obsM, entryM) "mustBase"; qr -> obsM then SetSurveyCategory(qr, obsM) "mustCategory"; qr -> obsM.code as code then { qr -> code.coding as coding then { qr -> coding.system = 'http://loinc.org' "codeSystem"; qr -> coding.code = '101789-6' "codeCode"; qr -> coding.display = 'Malnutrition risk screening' "codeDisplay"; } "codeCoding"; qr -> code.text = 'MUST score' "codeText"; } "mustCode"; // The submitted total wins; otherwise sum the answers, reading each // weight off the tail of its code (must-loss-2 is worth 2). Guarded on // all three steps being answered -- MUST is a sum of three, and a sum of // two banded as low risk would send a wasting patient home. gM where (item.answer.value.ofType(Coding).count() = 3) then { gM -> obsM.value = evaluate(gM, iif(item.where(linkId = 'must.total').answer.value.exists(), item.where(linkId = 'must.total').answer.value, item.answer.value.ofType(Coding).code.select($this.split('-').last().toInteger()).aggregate($this + $total, 0))) "mustTotalValue"; } "mustTotalRule"; gM.item as it where ((linkId = 'must.bmi') and answer.value.exists()) -> obsM.component as comp then { it -> comp.code as code then { it -> code.coding as coding then { it -> coding.system = 'https://fhir.slade360.co.ke/fhir/CodeSystem/inpatient-clinical-concept-codesystem' "codeSystem"; it -> coding.code = 'must-bmi-score' "codeCode"; it -> coding.display = 'BMI score (MUST)' "codeDisplay"; } "codeCoding"; } "bmiCode"; it -> comp then SetComponentCodedValue(it, comp) "bmiValue"; } "mustBmiRule"; gM.item as it where ((linkId = 'must.loss') and answer.value.exists()) -> obsM.component as comp then { it -> comp.code as code then { it -> code.coding as coding then { it -> coding.system = 'https://fhir.slade360.co.ke/fhir/CodeSystem/inpatient-clinical-concept-codesystem' "codeSystem"; it -> coding.code = 'must-weight-loss-score' "codeCode"; it -> coding.display = 'Unplanned weight loss score (MUST)' "codeDisplay"; } "codeCoding"; } "lossCode"; it -> comp then SetComponentCodedValue(it, comp) "lossValue"; } "mustLossRule"; gM.item as it where ((linkId = 'must.acute') and answer.value.exists()) -> obsM.component as comp then { it -> comp.code as code then { it -> code.coding as coding then { it -> coding.system = 'https://fhir.slade360.co.ke/fhir/CodeSystem/inpatient-clinical-concept-codesystem' "codeSystem"; it -> coding.code = 'must-acute-disease-score' "codeCode"; it -> coding.display = 'Acute disease effect score (MUST)' "codeDisplay"; } "codeCoding"; } "acuteCode"; it -> comp then SetComponentCodedValue(it, comp) "acuteValue"; } "mustAcuteRule"; qr -> obsM, bundle then AddMustRiskAssessment(obsM, qr, bundle) "mustBand"; // BAPEN's management guidance for a MUST of 2 or more is to refer to a // dietitian, so a high-risk score raises the referral rather than leaving // it to be remembered. Draft and proposal: it needs a signature. qr -> obsM, bundle then AddDietitianReferral(obsM, qr, bundle) "dietitianReferral"; } "mustObservation"; } "mustRule"; // ── Nutritional plan ─────────────────────────────────────────────────────── qr.item as itP where ((linkId = 'plan') and answer.value.exists()) then { itP.answer first as aP then { aP -> bundle.entry as entryC, entryC.resource = create('CarePlan') as plan then { qr -> plan.id = uuid() then SetCarePlanFullUrl(plan, entryC) "idAndFullUrl"; qr -> entryC.request as request then { qr -> request.method = 'POST' "requestMethod"; qr -> request.url = 'CarePlan' "requestUrl"; } "entryRequest"; qr -> plan.status = 'active' "status"; qr -> plan.intent = 'plan' "intent"; qr -> plan.category as cat then { qr -> cat.coding as coding then { qr -> coding.system = 'https://fhir.slade360.co.ke/fhir/CodeSystem/inpatient-clinical-concept-codesystem' "categorySystem"; qr -> coding.code = 'nutrition-care-plan' "categoryCode"; qr -> coding.display = 'Nutritional plan' "categoryDisplay"; } "categoryCoding"; } "category"; qr -> plan.title = 'Nutritional plan' "title"; aP.value as v -> plan.description = v "description"; qr.subject as s -> plan.subject = s; qr.encounter as e -> plan.encounter = e; qr.authored as t -> plan.created = t "created"; qr.author as a -> plan.contributor = a "contributorFromAuthor"; qr where (author.exists().not()) then { qr.source as src -> plan.contributor = src "contributorFromSource"; } "contributorFallback"; qr -> plan.supportingInfo = create('Reference') as ref then { qr.id as qid -> ref.reference = qid "supportingInfoRef"; } "linkQuestionnaireResponse"; } "carePlan"; } "planAnswer"; } "planRule"; } // ───────────────────────────────────────────────────────────────────────────── // MUST bands (BAPEN): 0 low risk, 1 medium risk, 2 or more high risk. // ───────────────────────────────────────────────────────────────────────────── group AddMustRiskAssessment(source obs : Observation, source qr : QR, target bundle : Bundle) { obs where (value.ofType(integer) = 0) -> bundle.entry as entry, entry.resource = create('RiskAssessment') as ra then { qr -> ra, entry then BuildRiskBase(qr, obs, ra, entry) "riskBase"; qr -> ra then SetMustRiskCode(qr, ra) "riskCode"; qr -> ra.prediction as pred then { qr -> pred.qualitativeRisk as risk then { qr -> risk.coding as coding then { qr -> coding.system = 'http://terminology.hl7.org/CodeSystem/risk-probability' "riskSystem"; qr -> coding.code = 'low' "riskCode"; qr -> coding.display = 'Low likelihood' "riskDisplay"; } "riskCoding"; qr -> risk.text = 'Low risk' "riskText"; } "qualitativeRisk"; } "prediction"; } "mustLow"; obs where (value.ofType(integer) = 1) -> bundle.entry as entry, entry.resource = create('RiskAssessment') as ra then { qr -> ra, entry then BuildRiskBase(qr, obs, ra, entry) "riskBase"; qr -> ra then SetMustRiskCode(qr, ra) "riskCode"; qr -> ra.prediction as pred then { qr -> pred.qualitativeRisk as risk then { qr -> risk.coding as coding then { qr -> coding.system = 'http://terminology.hl7.org/CodeSystem/risk-probability' "riskSystem"; qr -> coding.code = 'moderate' "riskCode"; qr -> coding.display = 'Moderate likelihood' "riskDisplay"; } "riskCoding"; qr -> risk.text = 'Medium risk' "riskText"; } "qualitativeRisk"; } "prediction"; } "mustMedium"; obs where (value.ofType(integer) >= 2) -> bundle.entry as entry, entry.resource = create('RiskAssessment') as ra then { qr -> ra, entry then BuildRiskBase(qr, obs, ra, entry) "riskBase"; qr -> ra then SetMustRiskCode(qr, ra) "riskCode"; qr -> ra.prediction as pred then { qr -> pred.qualitativeRisk as risk then { qr -> risk.coding as coding then { qr -> coding.system = 'http://terminology.hl7.org/CodeSystem/risk-probability' "riskSystem"; qr -> coding.code = 'high' "riskCode"; qr -> coding.display = 'High likelihood' "riskDisplay"; } "riskCoding"; qr -> risk.text = 'High risk' "riskText"; } "qualitativeRisk"; } "prediction"; } "mustHigh"; } group SetMustRiskCode(source qr : QR, target ra : RiskAssessment) { qr -> ra.code as code then { qr -> code.coding as coding then { qr -> coding.system = 'http://loinc.org' "codeSystem"; qr -> coding.code = '101807-6' "codeCode"; qr -> coding.display = 'Malnutrition risk screen results indicator' "codeDisplay"; } "codeCoding"; } "code"; } group AddDietitianReferral(source obs : Observation, source qr : QR, target bundle : Bundle) { obs where (value.ofType(integer) >= 2) -> bundle.entry as entry, entry.resource = create('ServiceRequest') as sr then { qr -> sr.id = uuid() then SetServiceRequestFullUrl(sr, entry) "idAndFullUrl"; qr -> entry.request as request then { qr -> request.method = 'POST' "requestMethod"; qr -> request.url = 'ServiceRequest' "requestUrl"; } "entryRequest"; qr -> sr.status = 'draft' "status"; qr -> sr.intent = 'proposal' "intent"; qr -> sr.priority = 'routine' "priority"; // R5 ServiceRequest.code is a CodeableReference, so the concept sits one // level down. qr -> sr.code as codeRef then { qr -> codeRef.concept as concept then { qr -> concept.coding as coding then { qr -> coding.system = 'https://fhir.slade360.co.ke/fhir/CodeSystem/inpatient-clinical-concept-codesystem' "codeSystem"; qr -> coding.code = 'dietitian-referral' "codeCode"; qr -> coding.display = 'Referral to a dietitian' "codeDisplay"; } "codeCoding"; qr -> concept.text = 'Referral to a dietitian' "codeText"; } "codeConcept"; } "serviceRequestCode"; qr -> sr.performerType as pt then { qr -> pt.coding as coding then { qr -> coding.system = 'https://fhir.slade360.co.ke/fhir/CodeSystem/practitioner-specialty-codesystem' "performerTypeSystem"; qr -> coding.code = 'nutritionist' "performerTypeCode"; } "performerTypeCoding"; qr -> pt.text = 'Nutritionist' "performerTypeText"; } "performerType"; qr.subject as s -> sr.subject = s; qr.encounter as e -> sr.encounter = e; qr.authored as t -> sr.authoredOn = t "authoredOn"; qr.author as a -> sr.requester = a "requesterFromAuthor"; qr where (author.exists().not()) then { qr.source as src -> sr.requester = src "requesterFromSource"; } "requesterFallback"; // Why this referral exists: the score that triggered it. obs.id as oid -> sr.reason as reason then { oid -> reason.reference = create('Reference') as ref then { oid -> ref.reference = append('Observation/', oid) "reasonRef"; } "reasonTarget"; } "reason"; qr -> sr.supportingInfo as si then { qr -> si.reference = create('Reference') as ref then { qr.id as qid -> ref.reference = qid "supportingInfoRef"; } "supportingInfoTarget"; } "linkQuestionnaireResponse"; } "dietitianReferral"; } // ───────────────────────────────────────────────────────────────────────────── // Shared scaffolding. Repeated in each map rather than imported: the transform // engine resolves `imports` against whatever StructureMaps happen to be on the // server, and a form that stops extracting because a shared map was not // uploaded is a worse failure than a duplicated group. // ───────────────────────────────────────────────────────────────────────────── // Two notes on what the publisher's StructureMap validator says about this file. // Source parameters below are left untyped on purpose. Writing `: Element` makes // the validator compare QuestionnaireResponse.item against the literal 'Element' // and report them as incompatible with each other, which is noise, not a finding. // Untyped, it says only that it cannot check the paths. // `evaluate(context, expression)` is flagged as "takes 1 parameter but 2 were // found". Leave it. The FML parser in the same jar refuses the one-argument form // outright -- it wants a parameter, a comma, then the FHIRPath -- so the publisher // is objecting to what its own compiler emits. Two arguments is the only form that // compiles, and it is what the R5 transform engine executes. group BuildObsBase(source qr : QR, target obs : Observation, target entry) { qr -> obs.id = uuid() then SetObservationFullUrl(obs, entry) "idAndFullUrl"; qr -> entry.request as request then { qr -> request.method = 'POST' "requestMethod"; qr -> request.url = 'Observation' "requestUrl"; } "entryRequest"; qr -> obs.status = 'final' "status"; qr.subject as s -> obs.subject = s; qr.encounter as e -> obs.encounter = e; qr.authored as t -> obs.effective = t "effective"; qr.source as src -> obs.performer = src "performerFromSource"; qr where (source.exists().not()) then { qr.author as a -> obs.performer = a "performerFromAuthor"; } "performerFallback"; qr -> obs.derivedFrom = create('Reference') as ref then { qr.id as qid -> ref.reference = qid "derivedFromRef"; } "linkQuestionnaireResponse"; } group BuildRiskBase(source qr : QR, source obs : Observation, target ra : RiskAssessment, target entry) { qr -> ra.id = uuid() then SetRiskAssessmentFullUrl(ra, entry) "idAndFullUrl"; qr -> entry.request as request then { qr -> request.method = 'POST' "requestMethod"; qr -> request.url = 'RiskAssessment' "requestUrl"; } "entryRequest"; qr -> ra.status = 'final' "status"; qr.subject as s -> ra.subject = s; qr.encounter as e -> ra.encounter = e; qr.authored as t -> ra.occurrence = t "occurrence"; qr.author as a -> ra.performer = a "performerFromAuthor"; qr where (author.exists().not()) then { qr.source as src -> ra.performer = src "performerFromSource"; } "performerFallback"; qr -> ra.basis = create('Reference') as qref then { qr.id as qid -> qref.reference = qid "basisQuestionnaireResponse"; } "basisResponse"; obs.id as oid -> ra.basis = create('Reference') as oref then { oid -> oref.reference = append('Observation/', oid) "basisObservationRef"; } "basisObservation"; } group SetComponentCodedValue(source it, target comp) { it.answer first as a then { a.value as cv -> comp.value = create('CodeableConcept') as cc then { cv -> cc.coding = cv "valueCoding"; cv.display as d -> cc.text = d "valueText"; } "codedValue"; } "componentAnswer"; } group SetSurveyCategory(source qr : QR, target obs : Observation) { qr -> obs.category as cat then { qr -> cat.coding as coding then { qr -> coding.system = 'http://terminology.hl7.org/CodeSystem/observation-category' "categorySystem"; qr -> coding.code = 'survey' "categoryCode"; qr -> coding.display = 'Survey' "categoryDisplay"; } "categoryCoding"; } "category"; } group SetObservationFullUrl(source obs : Observation, target entry) { obs.id as id -> entry.fullUrl = append('https://fhir.slade360.co.ke/fhir/Observation/', id) "assignFullUrl"; } group SetRiskAssessmentFullUrl(source ra : RiskAssessment, target entry) { ra.id as id -> entry.fullUrl = append('https://fhir.slade360.co.ke/fhir/RiskAssessment/', id) "assignFullUrl"; } group SetCarePlanFullUrl(source plan : CarePlan, target entry) { plan.id as id -> entry.fullUrl = append('https://fhir.slade360.co.ke/fhir/CarePlan/', id) "assignFullUrl"; } group SetServiceRequestFullUrl(source sr : ServiceRequest, target entry) { sr.id as id -> entry.fullUrl = append('https://fhir.slade360.co.ke/fhir/ServiceRequest/', id) "assignFullUrl"; }
{
"resourceType": "StructureMap",
"id": "ExtractInpatientNutritionScreening",
"text": {
"status": "generated",
"div": "<!-- snip (see above) -->"
},
"url": "https://fhir.slade360.co.ke/fhir/StructureMap/ExtractInpatientNutritionScreening",
"version": "0.1.0",
"name": "ExtractInpatientNutritionScreening",
"title": "Inpatient Nutrition Screening (MUST) Extraction",
"status": "active",
"date": "2026-09-11T12:18:36+00:00",
"publisher": "Kathurima Kimathi",
"contact": [
{
"name": "Kathurima Kimathi",
"telecom": [
{
"system": "url",
"value": "https://www.linkedin.com/in/kathurima-kimathi/"
},
{
"system": "email",
"value": "kathurimakimathi415@gmail.com"
}
]
},
{
"name": "Oscar John",
"telecom": [
{
"system": "email",
"value": "oscarjohnotieno@gmail.com",
"use": "work"
}
]
},
{
"name": "Kennedy Omondi",
"telecom": [
{
"system": "email",
"value": "kennankole@gmail.com",
"use": "work"
}
]
}
],
"description": "The MUST score becomes one Observation carrying the total with its three steps as components, plus a RiskAssessment for the band. The nutritional plan becomes a CarePlan, and a score in the high-risk band raises a dietitian referral. That referral is intent `proposal` and status `draft` deliberately: a map should not put an active order in a dietitian's queue on its own, so it arrives as something a clinician signs.",
"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"
},
{
"url": "http://hl7.org/fhir/StructureDefinition/RiskAssessment",
"mode": "target",
"alias": "RiskAssessment"
},
{
"url": "http://hl7.org/fhir/StructureDefinition/CarePlan",
"mode": "target",
"alias": "CarePlan"
},
{
"url": "http://hl7.org/fhir/StructureDefinition/ServiceRequest",
"mode": "target",
"alias": "ServiceRequest"
}
],
"group": [
{
"name": "ExtractInpatientNutritionScreening",
"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": "mustRule",
"source": [
{
"context": "qr",
"element": "item",
"variable": "gM",
"condition": "(linkId = 'must') and item.answer.value.ofType(Coding).exists()"
}
],
"rule": [
{
"name": "mustObservation",
"source": [
{
"context": "gM"
}
],
"target": [
{
"context": "bundle",
"element": "entry",
"variable": "entryM"
},
{
"context": "entryM",
"element": "resource",
"variable": "obsM",
"transform": "create",
"parameter": [
{
"valueString": "Observation"
}
]
}
],
"rule": [
{
"name": "mustBase",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "obsM"
},
{
"context": "entryM"
}
],
"dependent": [
{
"name": "BuildObsBase",
"parameter": [
{
"valueId": "qr"
},
{
"valueId": "obsM"
},
{
"valueId": "entryM"
}
]
}
]
},
{
"name": "mustCategory",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "obsM"
}
],
"dependent": [
{
"name": "SetSurveyCategory",
"parameter": [
{
"valueId": "qr"
},
{
"valueId": "obsM"
}
]
}
]
},
{
"name": "mustCode",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "obsM",
"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": "101789-6"
}
]
}
]
},
{
"name": "codeDisplay",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "coding",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "Malnutrition risk screening"
}
]
}
]
}
]
},
{
"name": "codeText",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "code",
"element": "text",
"transform": "copy",
"parameter": [
{
"valueString": "MUST score"
}
]
}
]
}
]
},
{
"name": "mustTotalRule",
"source": [
{
"context": "gM",
"condition": "item.answer.value.ofType(Coding).count() = 3"
}
],
"rule": [
{
"name": "mustTotalValue",
"source": [
{
"context": "gM"
}
],
"target": [
{
"context": "obsM",
"element": "value",
"transform": "evaluate",
"parameter": [
{
"valueId": "gM"
},
{
"valueString": "iif(item.where(linkId = 'must.total').answer.value.exists(), item.where(linkId = 'must.total').answer.value, item.answer.value.ofType(Coding).code.select($this.split('-').last().toInteger()).aggregate($this + $total, 0))"
}
]
}
]
}
],
"documentation": "The submitted total wins; otherwise sum the answers, reading each\r\nweight off the tail of its code (must-loss-2 is worth 2). Guarded on\r\nall three steps being answered -- MUST is a sum of three, and a sum of\r\ntwo banded as low risk would send a wasting patient home."
},
{
"name": "mustBmiRule",
"source": [
{
"context": "gM",
"element": "item",
"variable": "it",
"condition": "(linkId = 'must.bmi') and answer.value.exists()"
}
],
"target": [
{
"context": "obsM",
"element": "component",
"variable": "comp"
}
],
"rule": [
{
"name": "bmiCode",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "comp",
"element": "code",
"variable": "code"
}
],
"rule": [
{
"name": "codeCoding",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "code",
"element": "coding",
"variable": "coding"
}
],
"rule": [
{
"name": "codeSystem",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "coding",
"element": "system",
"transform": "copy",
"parameter": [
{
"valueString": "https://fhir.slade360.co.ke/fhir/CodeSystem/inpatient-clinical-concept-codesystem"
}
]
}
]
},
{
"name": "codeCode",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "coding",
"element": "code",
"transform": "copy",
"parameter": [
{
"valueString": "must-bmi-score"
}
]
}
]
},
{
"name": "codeDisplay",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "coding",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "BMI score (MUST)"
}
]
}
]
}
]
}
]
},
{
"name": "bmiValue",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "comp"
}
],
"dependent": [
{
"name": "SetComponentCodedValue",
"parameter": [
{
"valueId": "it"
},
{
"valueId": "comp"
}
]
}
]
}
]
},
{
"name": "mustLossRule",
"source": [
{
"context": "gM",
"element": "item",
"variable": "it",
"condition": "(linkId = 'must.loss') and answer.value.exists()"
}
],
"target": [
{
"context": "obsM",
"element": "component",
"variable": "comp"
}
],
"rule": [
{
"name": "lossCode",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "comp",
"element": "code",
"variable": "code"
}
],
"rule": [
{
"name": "codeCoding",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "code",
"element": "coding",
"variable": "coding"
}
],
"rule": [
{
"name": "codeSystem",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "coding",
"element": "system",
"transform": "copy",
"parameter": [
{
"valueString": "https://fhir.slade360.co.ke/fhir/CodeSystem/inpatient-clinical-concept-codesystem"
}
]
}
]
},
{
"name": "codeCode",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "coding",
"element": "code",
"transform": "copy",
"parameter": [
{
"valueString": "must-weight-loss-score"
}
]
}
]
},
{
"name": "codeDisplay",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "coding",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "Unplanned weight loss score (MUST)"
}
]
}
]
}
]
}
]
},
{
"name": "lossValue",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "comp"
}
],
"dependent": [
{
"name": "SetComponentCodedValue",
"parameter": [
{
"valueId": "it"
},
{
"valueId": "comp"
}
]
}
]
}
]
},
{
"name": "mustAcuteRule",
"source": [
{
"context": "gM",
"element": "item",
"variable": "it",
"condition": "(linkId = 'must.acute') and answer.value.exists()"
}
],
"target": [
{
"context": "obsM",
"element": "component",
"variable": "comp"
}
],
"rule": [
{
"name": "acuteCode",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "comp",
"element": "code",
"variable": "code"
}
],
"rule": [
{
"name": "codeCoding",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "code",
"element": "coding",
"variable": "coding"
}
],
"rule": [
{
"name": "codeSystem",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "coding",
"element": "system",
"transform": "copy",
"parameter": [
{
"valueString": "https://fhir.slade360.co.ke/fhir/CodeSystem/inpatient-clinical-concept-codesystem"
}
]
}
]
},
{
"name": "codeCode",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "coding",
"element": "code",
"transform": "copy",
"parameter": [
{
"valueString": "must-acute-disease-score"
}
]
}
]
},
{
"name": "codeDisplay",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "coding",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "Acute disease effect score (MUST)"
}
]
}
]
}
]
}
]
},
{
"name": "acuteValue",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "comp"
}
],
"dependent": [
{
"name": "SetComponentCodedValue",
"parameter": [
{
"valueId": "it"
},
{
"valueId": "comp"
}
]
}
]
}
]
},
{
"name": "mustBand",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "obsM"
},
{
"context": "bundle"
}
],
"dependent": [
{
"name": "AddMustRiskAssessment",
"parameter": [
{
"valueId": "obsM"
},
{
"valueId": "qr"
},
{
"valueId": "bundle"
}
]
}
]
},
{
"name": "dietitianReferral",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "obsM"
},
{
"context": "bundle"
}
],
"dependent": [
{
"name": "AddDietitianReferral",
"parameter": [
{
"valueId": "obsM"
},
{
"valueId": "qr"
},
{
"valueId": "bundle"
}
]
}
],
"documentation": "BAPEN's management guidance for a MUST of 2 or more is to refer to a\r\ndietitian, so a high-risk score raises the referral rather than leaving\r\nit to be remembered. Draft and proposal: it needs a signature."
}
]
}
],
"documentation": "── MUST score ─────────────────────────────────────────────────────────────\r\nLOINC has 101789-6 for the screening itself and 101807-6 for its result\r\nindicator, but nothing for the three steps, so those carry local codes."
},
{
"name": "planRule",
"source": [
{
"context": "qr",
"element": "item",
"variable": "itP",
"condition": "(linkId = 'plan') and answer.value.exists()"
}
],
"rule": [
{
"name": "planAnswer",
"source": [
{
"context": "itP",
"element": "answer",
"listMode": "first",
"variable": "aP"
}
],
"rule": [
{
"name": "carePlan",
"source": [
{
"context": "aP"
}
],
"target": [
{
"context": "bundle",
"element": "entry",
"variable": "entryC"
},
{
"context": "entryC",
"element": "resource",
"variable": "plan",
"transform": "create",
"parameter": [
{
"valueString": "CarePlan"
}
]
}
],
"rule": [
{
"name": "idAndFullUrl",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "plan",
"element": "id",
"transform": "uuid"
}
],
"dependent": [
{
"name": "SetCarePlanFullUrl",
"parameter": [
{
"valueId": "plan"
},
{
"valueId": "entryC"
}
]
}
]
},
{
"name": "entryRequest",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "entryC",
"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": "CarePlan"
}
]
}
]
}
]
},
{
"name": "status",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "plan",
"element": "status",
"transform": "copy",
"parameter": [
{
"valueString": "active"
}
]
}
]
},
{
"name": "intent",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "plan",
"element": "intent",
"transform": "copy",
"parameter": [
{
"valueString": "plan"
}
]
}
]
},
{
"name": "category",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "plan",
"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": "https://fhir.slade360.co.ke/fhir/CodeSystem/inpatient-clinical-concept-codesystem"
}
]
}
]
},
{
"name": "categoryCode",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "coding",
"element": "code",
"transform": "copy",
"parameter": [
{
"valueString": "nutrition-care-plan"
}
]
}
]
},
{
"name": "categoryDisplay",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "coding",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "Nutritional plan"
}
]
}
]
}
]
}
]
},
{
"name": "title",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "plan",
"element": "title",
"transform": "copy",
"parameter": [
{
"valueString": "Nutritional plan"
}
]
}
]
},
{
"name": "description",
"source": [
{
"context": "aP",
"element": "value",
"variable": "v"
}
],
"target": [
{
"context": "plan",
"element": "description",
"transform": "copy",
"parameter": [
{
"valueId": "v"
}
]
}
]
},
{
"name": "subject",
"source": [
{
"context": "qr",
"element": "subject",
"variable": "s"
}
],
"target": [
{
"context": "plan",
"element": "subject",
"transform": "copy",
"parameter": [
{
"valueId": "s"
}
]
}
]
},
{
"name": "encounter",
"source": [
{
"context": "qr",
"element": "encounter",
"variable": "e"
}
],
"target": [
{
"context": "plan",
"element": "encounter",
"transform": "copy",
"parameter": [
{
"valueId": "e"
}
]
}
]
},
{
"name": "created",
"source": [
{
"context": "qr",
"element": "authored",
"variable": "t"
}
],
"target": [
{
"context": "plan",
"element": "created",
"transform": "copy",
"parameter": [
{
"valueId": "t"
}
]
}
]
},
{
"name": "contributorFromAuthor",
"source": [
{
"context": "qr",
"element": "author",
"variable": "a"
}
],
"target": [
{
"context": "plan",
"element": "contributor",
"transform": "copy",
"parameter": [
{
"valueId": "a"
}
]
}
]
},
{
"name": "contributorFallback",
"source": [
{
"context": "qr",
"condition": "author.exists().not()"
}
],
"rule": [
{
"name": "contributorFromSource",
"source": [
{
"context": "qr",
"element": "source",
"variable": "src"
}
],
"target": [
{
"context": "plan",
"element": "contributor",
"transform": "copy",
"parameter": [
{
"valueId": "src"
}
]
}
]
}
]
},
{
"name": "linkQuestionnaireResponse",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "plan",
"element": "supportingInfo",
"variable": "ref",
"transform": "create",
"parameter": [
{
"valueString": "Reference"
}
]
}
],
"rule": [
{
"name": "supportingInfoRef",
"source": [
{
"context": "qr",
"element": "id",
"variable": "qid"
}
],
"target": [
{
"context": "ref",
"element": "reference",
"transform": "copy",
"parameter": [
{
"valueId": "qid"
}
]
}
]
}
]
}
]
}
]
}
],
"documentation": "── Nutritional plan ───────────────────────────────────────────────────────"
}
]
},
{
"name": "AddMustRiskAssessment",
"documentation": "─────────────────────────────────────────────────────────────────────────────\r\nMUST bands (BAPEN): 0 low risk, 1 medium risk, 2 or more high risk.\r\n─────────────────────────────────────────────────────────────────────────────",
"input": [
{
"name": "obs",
"type": "Observation",
"mode": "source"
},
{
"name": "qr",
"type": "QR",
"mode": "source"
},
{
"name": "bundle",
"type": "Bundle",
"mode": "target"
}
],
"rule": [
{
"name": "mustLow",
"source": [
{
"context": "obs",
"condition": "value.ofType(integer) = 0"
}
],
"target": [
{
"context": "bundle",
"element": "entry",
"variable": "entry"
},
{
"context": "entry",
"element": "resource",
"variable": "ra",
"transform": "create",
"parameter": [
{
"valueString": "RiskAssessment"
}
]
}
],
"rule": [
{
"name": "riskBase",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "ra"
},
{
"context": "entry"
}
],
"dependent": [
{
"name": "BuildRiskBase",
"parameter": [
{
"valueId": "qr"
},
{
"valueId": "obs"
},
{
"valueId": "ra"
},
{
"valueId": "entry"
}
]
}
]
},
{
"name": "riskCode",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "ra"
}
],
"dependent": [
{
"name": "SetMustRiskCode",
"parameter": [
{
"valueId": "qr"
},
{
"valueId": "ra"
}
]
}
]
},
{
"name": "prediction",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "ra",
"element": "prediction",
"variable": "pred"
}
],
"rule": [
{
"name": "qualitativeRisk",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "pred",
"element": "qualitativeRisk",
"variable": "risk"
}
],
"rule": [
{
"name": "riskCoding",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "risk",
"element": "coding",
"variable": "coding"
}
],
"rule": [
{
"name": "riskSystem",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "coding",
"element": "system",
"transform": "copy",
"parameter": [
{
"valueString": "http://terminology.hl7.org/CodeSystem/risk-probability"
}
]
}
]
},
{
"name": "riskCode",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "coding",
"element": "code",
"transform": "copy",
"parameter": [
{
"valueString": "low"
}
]
}
]
},
{
"name": "riskDisplay",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "coding",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "Low likelihood"
}
]
}
]
}
]
},
{
"name": "riskText",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "risk",
"element": "text",
"transform": "copy",
"parameter": [
{
"valueString": "Low risk"
}
]
}
]
}
]
}
]
}
]
},
{
"name": "mustMedium",
"source": [
{
"context": "obs",
"condition": "value.ofType(integer) = 1"
}
],
"target": [
{
"context": "bundle",
"element": "entry",
"variable": "entry"
},
{
"context": "entry",
"element": "resource",
"variable": "ra",
"transform": "create",
"parameter": [
{
"valueString": "RiskAssessment"
}
]
}
],
"rule": [
{
"name": "riskBase",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "ra"
},
{
"context": "entry"
}
],
"dependent": [
{
"name": "BuildRiskBase",
"parameter": [
{
"valueId": "qr"
},
{
"valueId": "obs"
},
{
"valueId": "ra"
},
{
"valueId": "entry"
}
]
}
]
},
{
"name": "riskCode",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "ra"
}
],
"dependent": [
{
"name": "SetMustRiskCode",
"parameter": [
{
"valueId": "qr"
},
{
"valueId": "ra"
}
]
}
]
},
{
"name": "prediction",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "ra",
"element": "prediction",
"variable": "pred"
}
],
"rule": [
{
"name": "qualitativeRisk",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "pred",
"element": "qualitativeRisk",
"variable": "risk"
}
],
"rule": [
{
"name": "riskCoding",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "risk",
"element": "coding",
"variable": "coding"
}
],
"rule": [
{
"name": "riskSystem",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "coding",
"element": "system",
"transform": "copy",
"parameter": [
{
"valueString": "http://terminology.hl7.org/CodeSystem/risk-probability"
}
]
}
]
},
{
"name": "riskCode",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "coding",
"element": "code",
"transform": "copy",
"parameter": [
{
"valueString": "moderate"
}
]
}
]
},
{
"name": "riskDisplay",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "coding",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "Moderate likelihood"
}
]
}
]
}
]
},
{
"name": "riskText",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "risk",
"element": "text",
"transform": "copy",
"parameter": [
{
"valueString": "Medium risk"
}
]
}
]
}
]
}
]
}
]
},
{
"name": "mustHigh",
"source": [
{
"context": "obs",
"condition": "value.ofType(integer) >= 2"
}
],
"target": [
{
"context": "bundle",
"element": "entry",
"variable": "entry"
},
{
"context": "entry",
"element": "resource",
"variable": "ra",
"transform": "create",
"parameter": [
{
"valueString": "RiskAssessment"
}
]
}
],
"rule": [
{
"name": "riskBase",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "ra"
},
{
"context": "entry"
}
],
"dependent": [
{
"name": "BuildRiskBase",
"parameter": [
{
"valueId": "qr"
},
{
"valueId": "obs"
},
{
"valueId": "ra"
},
{
"valueId": "entry"
}
]
}
]
},
{
"name": "riskCode",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "ra"
}
],
"dependent": [
{
"name": "SetMustRiskCode",
"parameter": [
{
"valueId": "qr"
},
{
"valueId": "ra"
}
]
}
]
},
{
"name": "prediction",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "ra",
"element": "prediction",
"variable": "pred"
}
],
"rule": [
{
"name": "qualitativeRisk",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "pred",
"element": "qualitativeRisk",
"variable": "risk"
}
],
"rule": [
{
"name": "riskCoding",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "risk",
"element": "coding",
"variable": "coding"
}
],
"rule": [
{
"name": "riskSystem",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "coding",
"element": "system",
"transform": "copy",
"parameter": [
{
"valueString": "http://terminology.hl7.org/CodeSystem/risk-probability"
}
]
}
]
},
{
"name": "riskCode",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "coding",
"element": "code",
"transform": "copy",
"parameter": [
{
"valueString": "high"
}
]
}
]
},
{
"name": "riskDisplay",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "coding",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "High likelihood"
}
]
}
]
}
]
},
{
"name": "riskText",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "risk",
"element": "text",
"transform": "copy",
"parameter": [
{
"valueString": "High risk"
}
]
}
]
}
]
}
]
}
]
}
]
},
{
"name": "SetMustRiskCode",
"input": [
{
"name": "qr",
"type": "QR",
"mode": "source"
},
{
"name": "ra",
"type": "RiskAssessment",
"mode": "target"
}
],
"rule": [
{
"name": "code",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "ra",
"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": "101807-6"
}
]
}
]
},
{
"name": "codeDisplay",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "coding",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "Malnutrition risk screen results indicator"
}
]
}
]
}
]
}
]
}
]
},
{
"name": "AddDietitianReferral",
"input": [
{
"name": "obs",
"type": "Observation",
"mode": "source"
},
{
"name": "qr",
"type": "QR",
"mode": "source"
},
{
"name": "bundle",
"type": "Bundle",
"mode": "target"
}
],
"rule": [
{
"name": "dietitianReferral",
"source": [
{
"context": "obs",
"condition": "value.ofType(integer) >= 2"
}
],
"target": [
{
"context": "bundle",
"element": "entry",
"variable": "entry"
},
{
"context": "entry",
"element": "resource",
"variable": "sr",
"transform": "create",
"parameter": [
{
"valueString": "ServiceRequest"
}
]
}
],
"rule": [
{
"name": "idAndFullUrl",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "sr",
"element": "id",
"transform": "uuid"
}
],
"dependent": [
{
"name": "SetServiceRequestFullUrl",
"parameter": [
{
"valueId": "sr"
},
{
"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": "ServiceRequest"
}
]
}
]
}
]
},
{
"name": "status",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "sr",
"element": "status",
"transform": "copy",
"parameter": [
{
"valueString": "draft"
}
]
}
]
},
{
"name": "intent",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "sr",
"element": "intent",
"transform": "copy",
"parameter": [
{
"valueString": "proposal"
}
]
}
]
},
{
"name": "priority",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "sr",
"element": "priority",
"transform": "copy",
"parameter": [
{
"valueString": "routine"
}
]
}
]
},
{
"name": "serviceRequestCode",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "sr",
"element": "code",
"variable": "codeRef"
}
],
"rule": [
{
"name": "codeConcept",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "codeRef",
"element": "concept",
"variable": "concept"
}
],
"rule": [
{
"name": "codeCoding",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "concept",
"element": "coding",
"variable": "coding"
}
],
"rule": [
{
"name": "codeSystem",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "coding",
"element": "system",
"transform": "copy",
"parameter": [
{
"valueString": "https://fhir.slade360.co.ke/fhir/CodeSystem/inpatient-clinical-concept-codesystem"
}
]
}
]
},
{
"name": "codeCode",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "coding",
"element": "code",
"transform": "copy",
"parameter": [
{
"valueString": "dietitian-referral"
}
]
}
]
},
{
"name": "codeDisplay",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "coding",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "Referral to a dietitian"
}
]
}
]
}
]
},
{
"name": "codeText",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "concept",
"element": "text",
"transform": "copy",
"parameter": [
{
"valueString": "Referral to a dietitian"
}
]
}
]
}
]
}
],
"documentation": "R5 ServiceRequest.code is a CodeableReference, so the concept sits one\r\nlevel down."
},
{
"name": "performerType",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "sr",
"element": "performerType",
"variable": "pt"
}
],
"rule": [
{
"name": "performerTypeCoding",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "pt",
"element": "coding",
"variable": "coding"
}
],
"rule": [
{
"name": "performerTypeSystem",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "coding",
"element": "system",
"transform": "copy",
"parameter": [
{
"valueString": "https://fhir.slade360.co.ke/fhir/CodeSystem/practitioner-specialty-codesystem"
}
]
}
]
},
{
"name": "performerTypeCode",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "coding",
"element": "code",
"transform": "copy",
"parameter": [
{
"valueString": "nutritionist"
}
]
}
]
}
]
},
{
"name": "performerTypeText",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "pt",
"element": "text",
"transform": "copy",
"parameter": [
{
"valueString": "Nutritionist"
}
]
}
]
}
]
},
{
"name": "subject",
"source": [
{
"context": "qr",
"element": "subject",
"variable": "s"
}
],
"target": [
{
"context": "sr",
"element": "subject",
"transform": "copy",
"parameter": [
{
"valueId": "s"
}
]
}
]
},
{
"name": "encounter",
"source": [
{
"context": "qr",
"element": "encounter",
"variable": "e"
}
],
"target": [
{
"context": "sr",
"element": "encounter",
"transform": "copy",
"parameter": [
{
"valueId": "e"
}
]
}
]
},
{
"name": "authoredOn",
"source": [
{
"context": "qr",
"element": "authored",
"variable": "t"
}
],
"target": [
{
"context": "sr",
"element": "authoredOn",
"transform": "copy",
"parameter": [
{
"valueId": "t"
}
]
}
]
},
{
"name": "requesterFromAuthor",
"source": [
{
"context": "qr",
"element": "author",
"variable": "a"
}
],
"target": [
{
"context": "sr",
"element": "requester",
"transform": "copy",
"parameter": [
{
"valueId": "a"
}
]
}
]
},
{
"name": "requesterFallback",
"source": [
{
"context": "qr",
"condition": "author.exists().not()"
}
],
"rule": [
{
"name": "requesterFromSource",
"source": [
{
"context": "qr",
"element": "source",
"variable": "src"
}
],
"target": [
{
"context": "sr",
"element": "requester",
"transform": "copy",
"parameter": [
{
"valueId": "src"
}
]
}
]
}
]
},
{
"name": "reason",
"source": [
{
"context": "obs",
"element": "id",
"variable": "oid"
}
],
"target": [
{
"context": "sr",
"element": "reason",
"variable": "reason"
}
],
"rule": [
{
"name": "reasonTarget",
"source": [
{
"context": "oid"
}
],
"target": [
{
"context": "reason",
"element": "reference",
"variable": "ref",
"transform": "create",
"parameter": [
{
"valueString": "Reference"
}
]
}
],
"rule": [
{
"name": "reasonRef",
"source": [
{
"context": "oid"
}
],
"target": [
{
"context": "ref",
"element": "reference",
"transform": "append",
"parameter": [
{
"valueString": "Observation/"
},
{
"valueId": "oid"
}
]
}
]
}
]
}
],
"documentation": "Why this referral exists: the score that triggered it."
},
{
"name": "linkQuestionnaireResponse",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "sr",
"element": "supportingInfo",
"variable": "si"
}
],
"rule": [
{
"name": "supportingInfoTarget",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "si",
"element": "reference",
"variable": "ref",
"transform": "create",
"parameter": [
{
"valueString": "Reference"
}
]
}
],
"rule": [
{
"name": "supportingInfoRef",
"source": [
{
"context": "qr",
"element": "id",
"variable": "qid"
}
],
"target": [
{
"context": "ref",
"element": "reference",
"transform": "copy",
"parameter": [
{
"valueId": "qid"
}
]
}
]
}
]
}
]
}
]
}
]
},
{
"name": "BuildObsBase",
"documentation": "─────────────────────────────────────────────────────────────────────────────\r\nShared scaffolding. Repeated in each map rather than imported: the transform\r\nengine resolves `imports` against whatever StructureMaps happen to be on the\r\nserver, and a form that stops extracting because a shared map was not\r\nuploaded is a worse failure than a duplicated group.\r\n─────────────────────────────────────────────────────────────────────────────\r\nTwo notes on what the publisher's StructureMap validator says about this file.\r\nSource parameters below are left untyped on purpose. Writing `: Element` makes\r\nthe validator compare QuestionnaireResponse.item against the literal 'Element'\r\nand report them as incompatible with each other, which is noise, not a finding.\r\nUntyped, it says only that it cannot check the paths.\r\n`evaluate(context, expression)` is flagged as \"takes 1 parameter but 2 were\r\nfound\". Leave it. The FML parser in the same jar refuses the one-argument form\r\noutright -- it wants a parameter, a comma, then the FHIRPath -- so the publisher\r\nis objecting to what its own compiler emits. Two arguments is the only form that\r\ncompiles, and it is what the R5 transform engine executes.",
"input": [
{
"name": "qr",
"type": "QR",
"mode": "source"
},
{
"name": "obs",
"type": "Observation",
"mode": "target"
},
{
"name": "entry",
"mode": "target"
}
],
"rule": [
{
"name": "idAndFullUrl",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "obs",
"element": "id",
"transform": "uuid"
}
],
"dependent": [
{
"name": "SetObservationFullUrl",
"parameter": [
{
"valueId": "obs"
},
{
"valueId": "entry"
}
]
}
]
},
{
"name": "entryRequest",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "entry",
"element": "request",
"variable": "request"
}
],
"rule": [
{
"name": "requestMethod",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "request",
"element": "method",
"transform": "copy",
"parameter": [
{
"valueString": "POST"
}
]
}
]
},
{
"name": "requestUrl",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "request",
"element": "url",
"transform": "copy",
"parameter": [
{
"valueString": "Observation"
}
]
}
]
}
]
},
{
"name": "status",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "obs",
"element": "status",
"transform": "copy",
"parameter": [
{
"valueString": "final"
}
]
}
]
},
{
"name": "subject",
"source": [
{
"context": "qr",
"element": "subject",
"variable": "s"
}
],
"target": [
{
"context": "obs",
"element": "subject",
"transform": "copy",
"parameter": [
{
"valueId": "s"
}
]
}
]
},
{
"name": "encounter",
"source": [
{
"context": "qr",
"element": "encounter",
"variable": "e"
}
],
"target": [
{
"context": "obs",
"element": "encounter",
"transform": "copy",
"parameter": [
{
"valueId": "e"
}
]
}
]
},
{
"name": "effective",
"source": [
{
"context": "qr",
"element": "authored",
"variable": "t"
}
],
"target": [
{
"context": "obs",
"element": "effective",
"transform": "copy",
"parameter": [
{
"valueId": "t"
}
]
}
]
},
{
"name": "performerFromSource",
"source": [
{
"context": "qr",
"element": "source",
"variable": "src"
}
],
"target": [
{
"context": "obs",
"element": "performer",
"transform": "copy",
"parameter": [
{
"valueId": "src"
}
]
}
]
},
{
"name": "performerFallback",
"source": [
{
"context": "qr",
"condition": "source.exists().not()"
}
],
"rule": [
{
"name": "performerFromAuthor",
"source": [
{
"context": "qr",
"element": "author",
"variable": "a"
}
],
"target": [
{
"context": "obs",
"element": "performer",
"transform": "copy",
"parameter": [
{
"valueId": "a"
}
]
}
]
}
]
},
{
"name": "linkQuestionnaireResponse",
"source": [
{
"context": "qr"
}
],
"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": "BuildRiskBase",
"input": [
{
"name": "qr",
"type": "QR",
"mode": "source"
},
{
"name": "obs",
"type": "Observation",
"mode": "source"
},
{
"name": "ra",
"type": "RiskAssessment",
"mode": "target"
},
{
"name": "entry",
"mode": "target"
}
],
"rule": [
{
"name": "idAndFullUrl",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "ra",
"element": "id",
"transform": "uuid"
}
],
"dependent": [
{
"name": "SetRiskAssessmentFullUrl",
"parameter": [
{
"valueId": "ra"
},
{
"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": "RiskAssessment"
}
]
}
]
}
]
},
{
"name": "status",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "ra",
"element": "status",
"transform": "copy",
"parameter": [
{
"valueString": "final"
}
]
}
]
},
{
"name": "subject",
"source": [
{
"context": "qr",
"element": "subject",
"variable": "s"
}
],
"target": [
{
"context": "ra",
"element": "subject",
"transform": "copy",
"parameter": [
{
"valueId": "s"
}
]
}
]
},
{
"name": "encounter",
"source": [
{
"context": "qr",
"element": "encounter",
"variable": "e"
}
],
"target": [
{
"context": "ra",
"element": "encounter",
"transform": "copy",
"parameter": [
{
"valueId": "e"
}
]
}
]
},
{
"name": "occurrence",
"source": [
{
"context": "qr",
"element": "authored",
"variable": "t"
}
],
"target": [
{
"context": "ra",
"element": "occurrence",
"transform": "copy",
"parameter": [
{
"valueId": "t"
}
]
}
]
},
{
"name": "performerFromAuthor",
"source": [
{
"context": "qr",
"element": "author",
"variable": "a"
}
],
"target": [
{
"context": "ra",
"element": "performer",
"transform": "copy",
"parameter": [
{
"valueId": "a"
}
]
}
]
},
{
"name": "performerFallback",
"source": [
{
"context": "qr",
"condition": "author.exists().not()"
}
],
"rule": [
{
"name": "performerFromSource",
"source": [
{
"context": "qr",
"element": "source",
"variable": "src"
}
],
"target": [
{
"context": "ra",
"element": "performer",
"transform": "copy",
"parameter": [
{
"valueId": "src"
}
]
}
]
}
]
},
{
"name": "basisResponse",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "ra",
"element": "basis",
"variable": "qref",
"transform": "create",
"parameter": [
{
"valueString": "Reference"
}
]
}
],
"rule": [
{
"name": "basisQuestionnaireResponse",
"source": [
{
"context": "qr",
"element": "id",
"variable": "qid"
}
],
"target": [
{
"context": "qref",
"element": "reference",
"transform": "copy",
"parameter": [
{
"valueId": "qid"
}
]
}
]
}
]
},
{
"name": "basisObservation",
"source": [
{
"context": "obs",
"element": "id",
"variable": "oid"
}
],
"target": [
{
"context": "ra",
"element": "basis",
"variable": "oref",
"transform": "create",
"parameter": [
{
"valueString": "Reference"
}
]
}
],
"rule": [
{
"name": "basisObservationRef",
"source": [
{
"context": "oid"
}
],
"target": [
{
"context": "oref",
"element": "reference",
"transform": "append",
"parameter": [
{
"valueString": "Observation/"
},
{
"valueId": "oid"
}
]
}
]
}
]
}
]
},
{
"name": "SetComponentCodedValue",
"input": [
{
"name": "it",
"mode": "source"
},
{
"name": "comp",
"mode": "target"
}
],
"rule": [
{
"name": "componentAnswer",
"source": [
{
"context": "it",
"element": "answer",
"listMode": "first",
"variable": "a"
}
],
"rule": [
{
"name": "codedValue",
"source": [
{
"context": "a",
"element": "value",
"variable": "cv"
}
],
"target": [
{
"context": "comp",
"element": "value",
"variable": "cc",
"transform": "create",
"parameter": [
{
"valueString": "CodeableConcept"
}
]
}
],
"rule": [
{
"name": "valueCoding",
"source": [
{
"context": "cv"
}
],
"target": [
{
"context": "cc",
"element": "coding",
"transform": "copy",
"parameter": [
{
"valueId": "cv"
}
]
}
]
},
{
"name": "valueText",
"source": [
{
"context": "cv",
"element": "display",
"variable": "d"
}
],
"target": [
{
"context": "cc",
"element": "text",
"transform": "copy",
"parameter": [
{
"valueId": "d"
}
]
}
]
}
]
}
]
}
]
},
{
"name": "SetSurveyCategory",
"input": [
{
"name": "qr",
"type": "QR",
"mode": "source"
},
{
"name": "obs",
"type": "Observation",
"mode": "target"
}
],
"rule": [
{
"name": "category",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "obs",
"element": "category",
"variable": "cat"
}
],
"rule": [
{
"name": "categoryCoding",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "cat",
"element": "coding",
"variable": "coding"
}
],
"rule": [
{
"name": "categorySystem",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "coding",
"element": "system",
"transform": "copy",
"parameter": [
{
"valueString": "http://terminology.hl7.org/CodeSystem/observation-category"
}
]
}
]
},
{
"name": "categoryCode",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "coding",
"element": "code",
"transform": "copy",
"parameter": [
{
"valueString": "survey"
}
]
}
]
},
{
"name": "categoryDisplay",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "coding",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "Survey"
}
]
}
]
}
]
}
]
}
]
},
{
"name": "SetObservationFullUrl",
"input": [
{
"name": "obs",
"type": "Observation",
"mode": "source"
},
{
"name": "entry",
"mode": "target"
}
],
"rule": [
{
"name": "assignFullUrl",
"source": [
{
"context": "obs",
"element": "id",
"variable": "id"
}
],
"target": [
{
"context": "entry",
"element": "fullUrl",
"transform": "append",
"parameter": [
{
"valueString": "https://fhir.slade360.co.ke/fhir/Observation/"
},
{
"valueId": "id"
}
]
}
]
}
]
},
{
"name": "SetRiskAssessmentFullUrl",
"input": [
{
"name": "ra",
"type": "RiskAssessment",
"mode": "source"
},
{
"name": "entry",
"mode": "target"
}
],
"rule": [
{
"name": "assignFullUrl",
"source": [
{
"context": "ra",
"element": "id",
"variable": "id"
}
],
"target": [
{
"context": "entry",
"element": "fullUrl",
"transform": "append",
"parameter": [
{
"valueString": "https://fhir.slade360.co.ke/fhir/RiskAssessment/"
},
{
"valueId": "id"
}
]
}
]
}
]
},
{
"name": "SetCarePlanFullUrl",
"input": [
{
"name": "plan",
"type": "CarePlan",
"mode": "source"
},
{
"name": "entry",
"mode": "target"
}
],
"rule": [
{
"name": "assignFullUrl",
"source": [
{
"context": "plan",
"element": "id",
"variable": "id"
}
],
"target": [
{
"context": "entry",
"element": "fullUrl",
"transform": "append",
"parameter": [
{
"valueString": "https://fhir.slade360.co.ke/fhir/CarePlan/"
},
{
"valueId": "id"
}
]
}
]
}
]
},
{
"name": "SetServiceRequestFullUrl",
"input": [
{
"name": "sr",
"type": "ServiceRequest",
"mode": "source"
},
{
"name": "entry",
"mode": "target"
}
],
"rule": [
{
"name": "assignFullUrl",
"source": [
{
"context": "sr",
"element": "id",
"variable": "id"
}
],
"target": [
{
"context": "entry",
"element": "fullUrl",
"transform": "append",
"parameter": [
{
"valueString": "https://fhir.slade360.co.ke/fhir/ServiceRequest/"
},
{
"valueId": "id"
}
]
}
]
}
]
}
]
}