FHIR IG analytics| Package | silfhirprofileig |
| Resource Type | StructureMap |
| Id | StructureMap-ExtractInpatientFallsAndPressureUlcerRiskAssessment.json |
| FHIR Version | R5 |
| Source | https://build.fhir.org/ig/savannahghi/sil_fhir_profile_ig/StructureMap-ExtractInpatientFallsAndPressureUlcerRiskAssessment.html |
| URL | https://fhir.slade360.co.ke/fhir/StructureMap/ExtractInpatientFallsAndPressureUlcerRiskAssessment |
| Version | 0.1.0 |
| Status | active |
| Date | 2026-09-11T12:18:36+00:00 |
| Name | ExtractInpatientFallsAndPressureUlcerRiskAssessment |
| Title | Inpatient Falls and Pressure Ulcer Risk Assessment Extraction |
| Description | Two scored instruments out. Braden becomes one Observation carrying the total with its six sub-scores as components, plus a RiskAssessment for the band; the falls score -- which is the Morse Fall Scale item for item -- becomes the same shape against the LOINC Morse panel. The measures put in place become a CarePlan. A total is only emitted when every sub-score has been answered: a Braden computed from four of six items is not a Braden score, and banding one would put a number a nurse can act on next to a risk tier that is wrong. |
No resources found
No resources found
Note: links and images are rebased to the (stated) source
Generated Narrative: StructureMap ExtractInpatientFallsAndPressureUlcerRiskAssessment
/// url = 'https://fhir.slade360.co.ke/fhir/StructureMap/ExtractInpatientFallsAndPressureUlcerRiskAssessment' /// name = 'ExtractInpatientFallsAndPressureUlcerRiskAssessment' /// title = 'Inpatient Falls and Pressure Ulcer Risk Assessment Extraction' /// status = 'active' /// description = 'Two scored instruments out. Braden becomes one Observation carrying the total with its six sub-scores as components, plus a RiskAssessment for the band; the falls score -- which is the Morse Fall Scale item for item -- becomes the same shape against the LOINC Morse panel. The measures put in place become a CarePlan. A total is only emitted when every sub-score has been answered: a Braden computed from four of six items is not a Braden score, and banding one would put a number a nurse can act on next to a risk tier that is wrong.' 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 group ExtractInpatientFallsAndPressureUlcerRiskAssessment(source qr : QR, target bundle : Bundle) { qr -> bundle.type = 'transaction' "setBundleType"; // ── Braden pressure ulcer risk ───────────────────────────────────────────── qr.item as gB where ((linkId = 'braden') and item.answer.value.ofType(Coding).exists()) then { gB -> bundle.entry as entryB, entryB.resource = create('Observation') as obsB then { qr -> obsB, entryB then BuildObsBase(qr, obsB, entryB) "bradenBase"; qr -> obsB then SetSurveyCategory(qr, obsB) "bradenCategory"; qr -> obsB.code as code then { qr -> code.coding as coding then { qr -> coding.system = 'http://loinc.org' "codeSystem"; qr -> coding.code = '38227-5' "codeCode"; qr -> coding.display = 'Braden scale total score' "codeDisplay"; } "codeCoding"; } "bradenCode"; // The submitted total wins; otherwise sum the answers. Every scored answer // in SGHIClinicalScoreCodeSystem ends in its own weight -- braden-sensory-3 // is worth 3 -- so the fallback reads the weight off the code. Both paths // are the arithmetic the questionnaire's calculatedExpression performs, so // they cannot disagree. Guarded on all six sub-scores being present. gB where (item.answer.value.ofType(Coding).count() = 6) then { gB -> obsB.value = evaluate(gB, iif(item.where(linkId = 'braden.total').answer.value.exists(), item.where(linkId = 'braden.total').answer.value, item.answer.value.ofType(Coding).code.select($this.split('-').last().toInteger()).aggregate($this + $total, 0))) "bradenTotalValue"; } "bradenTotalRule"; gB.item as it where ((linkId = 'braden.sensory') and answer.value.exists()) -> obsB.component as comp then { it -> comp.code as code then { it -> code.coding as coding then { it -> coding.system = 'http://loinc.org' "codeSystem"; it -> coding.code = '38222-6' "codeCode"; it -> coding.display = 'Sensory perception Braden scale' "codeDisplay"; } "codeCoding"; } "sensoryCode"; it -> comp then SetComponentCodedValue(it, comp) "sensoryValue"; } "bradenSensoryRule"; gB.item as it where ((linkId = 'braden.moisture') and answer.value.exists()) -> obsB.component as comp then { it -> comp.code as code then { it -> code.coding as coding then { it -> coding.system = 'http://loinc.org' "codeSystem"; it -> coding.code = '38229-1' "codeCode"; it -> coding.display = 'Moisture exposure Braden scale' "codeDisplay"; } "codeCoding"; } "moistureCode"; it -> comp then SetComponentCodedValue(it, comp) "moistureValue"; } "bradenMoistureRule"; gB.item as it where ((linkId = 'braden.activity') and answer.value.exists()) -> obsB.component as comp then { it -> comp.code as code then { it -> code.coding as coding then { it -> coding.system = 'http://loinc.org' "codeSystem"; it -> coding.code = '38223-4' "codeCode"; it -> coding.display = 'Physical activity Braden scale' "codeDisplay"; } "codeCoding"; } "activityCode"; it -> comp then SetComponentCodedValue(it, comp) "activityValue"; } "bradenActivityRule"; gB.item as it where ((linkId = 'braden.mobility') and answer.value.exists()) -> obsB.component as comp then { it -> comp.code as code then { it -> code.coding as coding then { it -> coding.system = 'http://loinc.org' "codeSystem"; it -> coding.code = '38224-2' "codeCode"; it -> coding.display = 'Physical mobility Braden scale' "codeDisplay"; } "codeCoding"; } "mobilityCode"; it -> comp then SetComponentCodedValue(it, comp) "mobilityValue"; } "bradenMobilityRule"; gB.item as it where ((linkId = 'braden.nutrition') and answer.value.exists()) -> obsB.component as comp then { it -> comp.code as code then { it -> code.coding as coding then { it -> coding.system = 'http://loinc.org' "codeSystem"; it -> coding.code = '38225-9' "codeCode"; it -> coding.display = 'Nutrition intake pattern Braden scale' "codeDisplay"; } "codeCoding"; } "nutritionCode"; it -> comp then SetComponentCodedValue(it, comp) "nutritionValue"; } "bradenNutritionRule"; gB.item as it where ((linkId = 'braden.friction') and answer.value.exists()) -> obsB.component as comp then { it -> comp.code as code then { it -> code.coding as coding then { it -> coding.system = 'http://loinc.org' "codeSystem"; it -> coding.code = '38226-7' "codeCode"; it -> coding.display = 'Friction and shear Braden scale' "codeDisplay"; } "codeCoding"; } "frictionCode"; it -> comp then SetComponentCodedValue(it, comp) "frictionValue"; } "bradenFrictionRule"; qr -> obsB, bundle then AddBradenRiskAssessment(obsB, qr, bundle) "bradenBand"; } "bradenObservation"; } "bradenRule"; // ── Falls risk (Morse Fall Scale) ────────────────────────────────────────── qr.item as gF where ((linkId = 'fallsRisk') and item.answer.value.ofType(Coding).exists()) then { gF -> bundle.entry as entryF, entryF.resource = create('Observation') as obsF then { qr -> obsF, entryF then BuildObsBase(qr, obsF, entryF) "fallsBase"; qr -> obsF then SetSurveyCategory(qr, obsF) "fallsCategory"; qr -> obsF.code as code then { qr -> code.coding as coding then { qr -> coding.system = 'http://loinc.org' "codeSystem"; qr -> coding.code = '59460-6' "codeCode"; qr -> coding.display = 'Fall risk total [Morse Fall Scale]' "codeDisplay"; } "codeCoding"; } "fallsCode"; gF where (item.answer.value.ofType(Coding).count() = 6) then { gF -> obsF.value = evaluate(gF, iif(item.where(linkId = 'fallsRisk.total').answer.value.exists(), item.where(linkId = 'fallsRisk.total').answer.value, item.answer.value.ofType(Coding).code.select($this.split('-').last().toInteger()).aggregate($this + $total, 0))) "fallsTotalValue"; } "fallsTotalRule"; gF.item as it where ((linkId = 'fallsRisk.history') and answer.value.exists()) -> obsF.component as comp then { it -> comp.code as code then { it -> code.coding as coding then { it -> coding.system = 'http://loinc.org' "codeSystem"; it -> coding.code = '59454-9' "codeCode"; it -> coding.display = 'History of falling; immediate or within 3 months [Morse Fall Scale]' "codeDisplay"; } "codeCoding"; } "historyCode"; it -> comp then SetComponentCodedValue(it, comp) "historyValue"; } "fallsHistoryRule"; gF.item as it where ((linkId = 'fallsRisk.diagnoses') and answer.value.exists()) -> obsF.component as comp then { it -> comp.code as code then { it -> code.coding as coding then { it -> coding.system = 'http://loinc.org' "codeSystem"; it -> coding.code = '59455-6' "codeCode"; it -> coding.display = 'Secondary diagnosis is present' "codeDisplay"; } "codeCoding"; } "diagnosesCode"; it -> comp then SetComponentCodedValue(it, comp) "diagnosesValue"; } "fallsDiagnosesRule"; gF.item as it where ((linkId = 'fallsRisk.aid') and answer.value.exists()) -> obsF.component as comp then { it -> comp.code as code then { it -> code.coding as coding then { it -> coding.system = 'http://loinc.org' "codeSystem"; it -> coding.code = '59456-4' "codeCode"; it -> coding.display = 'Ambulatory aid [Morse Fall Scale]' "codeDisplay"; } "codeCoding"; } "aidCode"; it -> comp then SetComponentCodedValue(it, comp) "aidValue"; } "fallsAidRule"; gF.item as it where ((linkId = 'fallsRisk.iv') and answer.value.exists()) -> obsF.component as comp then { it -> comp.code as code then { it -> code.coding as coding then { it -> coding.system = 'http://loinc.org' "codeSystem"; it -> coding.code = '59457-2' "codeCode"; it -> coding.display = 'Intravenous apparatus [Morse Fall Scale]' "codeDisplay"; } "codeCoding"; } "ivCode"; it -> comp then SetComponentCodedValue(it, comp) "ivValue"; } "fallsIvRule"; gF.item as it where ((linkId = 'fallsRisk.gait') and answer.value.exists()) -> obsF.component as comp then { it -> comp.code as code then { it -> code.coding as coding then { it -> coding.system = 'http://loinc.org' "codeSystem"; it -> coding.code = '59458-0' "codeCode"; it -> coding.display = 'Gait [Morse Fall Scale]' "codeDisplay"; } "codeCoding"; } "gaitCode"; it -> comp then SetComponentCodedValue(it, comp) "gaitValue"; } "fallsGaitRule"; gF.item as it where ((linkId = 'fallsRisk.mental') and answer.value.exists()) -> obsF.component as comp then { it -> comp.code as code then { it -> code.coding as coding then { it -> coding.system = 'http://loinc.org' "codeSystem"; it -> coding.code = '59459-8' "codeCode"; it -> coding.display = 'Mental status [Morse Fall Scale]' "codeDisplay"; } "codeCoding"; } "mentalCode"; it -> comp then SetComponentCodedValue(it, comp) "mentalValue"; } "fallsMentalRule"; qr -> obsF, bundle then AddFallsRiskAssessment(obsF, qr, bundle) "fallsBand"; } "fallsObservation"; } "fallsRiskRule"; // ── Measures in place ────────────────────────────────────────────────────── qr.item as itM where ((linkId = 'measures') and answer.value.exists()) then { itM.answer first as aM then { aM -> 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 = 'falls-prevention-plan' "categoryCode"; qr -> coding.display = 'Falls and pressure ulcer prevention measures' "categoryDisplay"; } "categoryCoding"; } "category"; qr -> plan.title = 'Falls and pressure ulcer prevention measures' "title"; aM.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"; } "measuresAnswer"; } "measuresRule"; } // ───────────────────────────────────────────────────────────────────────────── // Risk bands // Braden (Bergstrom): 19 and over no risk, 15-18 mild, 13-14 moderate, 10-12 // high, 9 and under very high. Lower is worse. // Morse (Morse, Preventing Patient Falls): 0-24 no risk, 25-50 low, 51 and over // high. Higher is worse. // The published band is the text; the coding is HL7's risk-probability, which // has five concepts and so collapses Braden's "very high" and "high" onto one // code. Consumers that need the exact tier read the text, consumers that need // to escalate read the code. // ───────────────────────────────────────────────────────────────────────────── group AddBradenRiskAssessment(source obs : Observation, source qr : QR, target bundle : Bundle) { obs where (value.ofType(integer) <= 9) -> bundle.entry as entry, entry.resource = create('RiskAssessment') as ra then { qr -> ra, entry then BuildRiskBase(qr, obs, ra, entry) "riskBase"; qr -> ra then SetBradenRiskCode(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 = 'Very high risk' "riskText"; } "qualitativeRisk"; } "prediction"; } "bradenVeryHigh"; obs where ((value.ofType(integer) >= 10) and (value.ofType(integer) <= 12)) -> bundle.entry as entry, entry.resource = create('RiskAssessment') as ra then { qr -> ra, entry then BuildRiskBase(qr, obs, ra, entry) "riskBase"; qr -> ra then SetBradenRiskCode(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"; } "bradenHigh"; obs where ((value.ofType(integer) >= 13) and (value.ofType(integer) <= 14)) -> bundle.entry as entry, entry.resource = create('RiskAssessment') as ra then { qr -> ra, entry then BuildRiskBase(qr, obs, ra, entry) "riskBase"; qr -> ra then SetBradenRiskCode(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 = 'Moderate risk' "riskText"; } "qualitativeRisk"; } "prediction"; } "bradenModerate"; obs where ((value.ofType(integer) >= 15) and (value.ofType(integer) <= 18)) -> bundle.entry as entry, entry.resource = create('RiskAssessment') as ra then { qr -> ra, entry then BuildRiskBase(qr, obs, ra, entry) "riskBase"; qr -> ra then SetBradenRiskCode(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 = 'Mild risk' "riskText"; } "qualitativeRisk"; } "prediction"; } "bradenMild"; obs where (value.ofType(integer) >= 19) -> bundle.entry as entry, entry.resource = create('RiskAssessment') as ra then { qr -> ra, entry then BuildRiskBase(qr, obs, ra, entry) "riskBase"; qr -> ra then SetBradenRiskCode(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 = 'negligible' "riskCode"; qr -> coding.display = 'Negligible likelihood' "riskDisplay"; } "riskCoding"; qr -> risk.text = 'No risk identified' "riskText"; } "qualitativeRisk"; } "prediction"; } "bradenNoRisk"; } group SetBradenRiskCode(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 = '81636-3' "codeCode"; qr -> coding.display = 'Pressure injury risk level Braden scale' "codeDisplay"; } "codeCoding"; } "code"; } group AddFallsRiskAssessment(source obs : Observation, source qr : QR, target bundle : Bundle) { obs where (value.ofType(integer) <= 24) -> bundle.entry as entry, entry.resource = create('RiskAssessment') as ra then { qr -> ra, entry then BuildRiskBase(qr, obs, ra, entry) "riskBase"; qr -> ra then SetFallsRiskCode(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 = 'negligible' "riskCode"; qr -> coding.display = 'Negligible likelihood' "riskDisplay"; } "riskCoding"; qr -> risk.text = 'No risk' "riskText"; } "qualitativeRisk"; } "prediction"; } "fallsNoRisk"; obs where ((value.ofType(integer) >= 25) and (value.ofType(integer) <= 50)) -> bundle.entry as entry, entry.resource = create('RiskAssessment') as ra then { qr -> ra, entry then BuildRiskBase(qr, obs, ra, entry) "riskBase"; qr -> ra then SetFallsRiskCode(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"; } "fallsLow"; obs where (value.ofType(integer) >= 51) -> bundle.entry as entry, entry.resource = create('RiskAssessment') as ra then { qr -> ra, entry then BuildRiskBase(qr, obs, ra, entry) "riskBase"; qr -> ra then SetFallsRiskCode(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"; } "fallsHigh"; } group SetFallsRiskCode(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 = '59461-4' "codeCode"; qr -> coding.display = 'Fall risk level [Morse Fall Scale]' "codeDisplay"; } "codeCoding"; } "code"; } // ───────────────────────────────────────────────────────────────────────────── // 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"; } // The RiskAssessment stands on two things: the response that was filled in and // the Observation that holds the number. Both go in basis, which is what the // SGHI RiskAssessment profile binds to a QuestionnaireResponse. 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"; }
{
"resourceType": "StructureMap",
"id": "ExtractInpatientFallsAndPressureUlcerRiskAssessment",
"text": {
"status": "generated",
"div": "<!-- snip (see above) -->"
},
"url": "https://fhir.slade360.co.ke/fhir/StructureMap/ExtractInpatientFallsAndPressureUlcerRiskAssessment",
"version": "0.1.0",
"name": "ExtractInpatientFallsAndPressureUlcerRiskAssessment",
"title": "Inpatient Falls and Pressure Ulcer Risk Assessment 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": "Two scored instruments out. Braden becomes one Observation carrying the total with its six sub-scores as components, plus a RiskAssessment for the band; the falls score -- which is the Morse Fall Scale item for item -- becomes the same shape against the LOINC Morse panel. The measures put in place become a CarePlan. A total is only emitted when every sub-score has been answered: a Braden computed from four of six items is not a Braden score, and banding one would put a number a nurse can act on next to a risk tier that is wrong.",
"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"
}
],
"group": [
{
"name": "ExtractInpatientFallsAndPressureUlcerRiskAssessment",
"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": "bradenRule",
"source": [
{
"context": "qr",
"element": "item",
"variable": "gB",
"condition": "(linkId = 'braden') and item.answer.value.ofType(Coding).exists()"
}
],
"rule": [
{
"name": "bradenObservation",
"source": [
{
"context": "gB"
}
],
"target": [
{
"context": "bundle",
"element": "entry",
"variable": "entryB"
},
{
"context": "entryB",
"element": "resource",
"variable": "obsB",
"transform": "create",
"parameter": [
{
"valueString": "Observation"
}
]
}
],
"rule": [
{
"name": "bradenBase",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "obsB"
},
{
"context": "entryB"
}
],
"dependent": [
{
"name": "BuildObsBase",
"parameter": [
{
"valueId": "qr"
},
{
"valueId": "obsB"
},
{
"valueId": "entryB"
}
]
}
]
},
{
"name": "bradenCategory",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "obsB"
}
],
"dependent": [
{
"name": "SetSurveyCategory",
"parameter": [
{
"valueId": "qr"
},
{
"valueId": "obsB"
}
]
}
]
},
{
"name": "bradenCode",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "obsB",
"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": "38227-5"
}
]
}
]
},
{
"name": "codeDisplay",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "coding",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "Braden scale total score"
}
]
}
]
}
]
}
]
},
{
"name": "bradenTotalRule",
"source": [
{
"context": "gB",
"condition": "item.answer.value.ofType(Coding).count() = 6"
}
],
"rule": [
{
"name": "bradenTotalValue",
"source": [
{
"context": "gB"
}
],
"target": [
{
"context": "obsB",
"element": "value",
"transform": "evaluate",
"parameter": [
{
"valueId": "gB"
},
{
"valueString": "iif(item.where(linkId = 'braden.total').answer.value.exists(), item.where(linkId = 'braden.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. Every scored answer\r\nin SGHIClinicalScoreCodeSystem ends in its own weight -- braden-sensory-3\r\nis worth 3 -- so the fallback reads the weight off the code. Both paths\r\nare the arithmetic the questionnaire's calculatedExpression performs, so\r\nthey cannot disagree. Guarded on all six sub-scores being present."
},
{
"name": "bradenSensoryRule",
"source": [
{
"context": "gB",
"element": "item",
"variable": "it",
"condition": "(linkId = 'braden.sensory') and answer.value.exists()"
}
],
"target": [
{
"context": "obsB",
"element": "component",
"variable": "comp"
}
],
"rule": [
{
"name": "sensoryCode",
"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": "http://loinc.org"
}
]
}
]
},
{
"name": "codeCode",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "coding",
"element": "code",
"transform": "copy",
"parameter": [
{
"valueString": "38222-6"
}
]
}
]
},
{
"name": "codeDisplay",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "coding",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "Sensory perception Braden scale"
}
]
}
]
}
]
}
]
},
{
"name": "sensoryValue",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "comp"
}
],
"dependent": [
{
"name": "SetComponentCodedValue",
"parameter": [
{
"valueId": "it"
},
{
"valueId": "comp"
}
]
}
]
}
]
},
{
"name": "bradenMoistureRule",
"source": [
{
"context": "gB",
"element": "item",
"variable": "it",
"condition": "(linkId = 'braden.moisture') and answer.value.exists()"
}
],
"target": [
{
"context": "obsB",
"element": "component",
"variable": "comp"
}
],
"rule": [
{
"name": "moistureCode",
"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": "http://loinc.org"
}
]
}
]
},
{
"name": "codeCode",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "coding",
"element": "code",
"transform": "copy",
"parameter": [
{
"valueString": "38229-1"
}
]
}
]
},
{
"name": "codeDisplay",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "coding",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "Moisture exposure Braden scale"
}
]
}
]
}
]
}
]
},
{
"name": "moistureValue",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "comp"
}
],
"dependent": [
{
"name": "SetComponentCodedValue",
"parameter": [
{
"valueId": "it"
},
{
"valueId": "comp"
}
]
}
]
}
]
},
{
"name": "bradenActivityRule",
"source": [
{
"context": "gB",
"element": "item",
"variable": "it",
"condition": "(linkId = 'braden.activity') and answer.value.exists()"
}
],
"target": [
{
"context": "obsB",
"element": "component",
"variable": "comp"
}
],
"rule": [
{
"name": "activityCode",
"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": "http://loinc.org"
}
]
}
]
},
{
"name": "codeCode",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "coding",
"element": "code",
"transform": "copy",
"parameter": [
{
"valueString": "38223-4"
}
]
}
]
},
{
"name": "codeDisplay",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "coding",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "Physical activity Braden scale"
}
]
}
]
}
]
}
]
},
{
"name": "activityValue",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "comp"
}
],
"dependent": [
{
"name": "SetComponentCodedValue",
"parameter": [
{
"valueId": "it"
},
{
"valueId": "comp"
}
]
}
]
}
]
},
{
"name": "bradenMobilityRule",
"source": [
{
"context": "gB",
"element": "item",
"variable": "it",
"condition": "(linkId = 'braden.mobility') and answer.value.exists()"
}
],
"target": [
{
"context": "obsB",
"element": "component",
"variable": "comp"
}
],
"rule": [
{
"name": "mobilityCode",
"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": "http://loinc.org"
}
]
}
]
},
{
"name": "codeCode",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "coding",
"element": "code",
"transform": "copy",
"parameter": [
{
"valueString": "38224-2"
}
]
}
]
},
{
"name": "codeDisplay",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "coding",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "Physical mobility Braden scale"
}
]
}
]
}
]
}
]
},
{
"name": "mobilityValue",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "comp"
}
],
"dependent": [
{
"name": "SetComponentCodedValue",
"parameter": [
{
"valueId": "it"
},
{
"valueId": "comp"
}
]
}
]
}
]
},
{
"name": "bradenNutritionRule",
"source": [
{
"context": "gB",
"element": "item",
"variable": "it",
"condition": "(linkId = 'braden.nutrition') and answer.value.exists()"
}
],
"target": [
{
"context": "obsB",
"element": "component",
"variable": "comp"
}
],
"rule": [
{
"name": "nutritionCode",
"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": "http://loinc.org"
}
]
}
]
},
{
"name": "codeCode",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "coding",
"element": "code",
"transform": "copy",
"parameter": [
{
"valueString": "38225-9"
}
]
}
]
},
{
"name": "codeDisplay",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "coding",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "Nutrition intake pattern Braden scale"
}
]
}
]
}
]
}
]
},
{
"name": "nutritionValue",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "comp"
}
],
"dependent": [
{
"name": "SetComponentCodedValue",
"parameter": [
{
"valueId": "it"
},
{
"valueId": "comp"
}
]
}
]
}
]
},
{
"name": "bradenFrictionRule",
"source": [
{
"context": "gB",
"element": "item",
"variable": "it",
"condition": "(linkId = 'braden.friction') and answer.value.exists()"
}
],
"target": [
{
"context": "obsB",
"element": "component",
"variable": "comp"
}
],
"rule": [
{
"name": "frictionCode",
"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": "http://loinc.org"
}
]
}
]
},
{
"name": "codeCode",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "coding",
"element": "code",
"transform": "copy",
"parameter": [
{
"valueString": "38226-7"
}
]
}
]
},
{
"name": "codeDisplay",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "coding",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "Friction and shear Braden scale"
}
]
}
]
}
]
}
]
},
{
"name": "frictionValue",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "comp"
}
],
"dependent": [
{
"name": "SetComponentCodedValue",
"parameter": [
{
"valueId": "it"
},
{
"valueId": "comp"
}
]
}
]
}
]
},
{
"name": "bradenBand",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "obsB"
},
{
"context": "bundle"
}
],
"dependent": [
{
"name": "AddBradenRiskAssessment",
"parameter": [
{
"valueId": "obsB"
},
{
"valueId": "qr"
},
{
"valueId": "bundle"
}
]
}
]
}
]
}
],
"documentation": "── Braden pressure ulcer risk ─────────────────────────────────────────────"
},
{
"name": "fallsRiskRule",
"source": [
{
"context": "qr",
"element": "item",
"variable": "gF",
"condition": "(linkId = 'fallsRisk') and item.answer.value.ofType(Coding).exists()"
}
],
"rule": [
{
"name": "fallsObservation",
"source": [
{
"context": "gF"
}
],
"target": [
{
"context": "bundle",
"element": "entry",
"variable": "entryF"
},
{
"context": "entryF",
"element": "resource",
"variable": "obsF",
"transform": "create",
"parameter": [
{
"valueString": "Observation"
}
]
}
],
"rule": [
{
"name": "fallsBase",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "obsF"
},
{
"context": "entryF"
}
],
"dependent": [
{
"name": "BuildObsBase",
"parameter": [
{
"valueId": "qr"
},
{
"valueId": "obsF"
},
{
"valueId": "entryF"
}
]
}
]
},
{
"name": "fallsCategory",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "obsF"
}
],
"dependent": [
{
"name": "SetSurveyCategory",
"parameter": [
{
"valueId": "qr"
},
{
"valueId": "obsF"
}
]
}
]
},
{
"name": "fallsCode",
"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": "59460-6"
}
]
}
]
},
{
"name": "codeDisplay",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "coding",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "Fall risk total [Morse Fall Scale]"
}
]
}
]
}
]
}
]
},
{
"name": "fallsTotalRule",
"source": [
{
"context": "gF",
"condition": "item.answer.value.ofType(Coding).count() = 6"
}
],
"rule": [
{
"name": "fallsTotalValue",
"source": [
{
"context": "gF"
}
],
"target": [
{
"context": "obsF",
"element": "value",
"transform": "evaluate",
"parameter": [
{
"valueId": "gF"
},
{
"valueString": "iif(item.where(linkId = 'fallsRisk.total').answer.value.exists(), item.where(linkId = 'fallsRisk.total').answer.value, item.answer.value.ofType(Coding).code.select($this.split('-').last().toInteger()).aggregate($this + $total, 0))"
}
]
}
]
}
]
},
{
"name": "fallsHistoryRule",
"source": [
{
"context": "gF",
"element": "item",
"variable": "it",
"condition": "(linkId = 'fallsRisk.history') and answer.value.exists()"
}
],
"target": [
{
"context": "obsF",
"element": "component",
"variable": "comp"
}
],
"rule": [
{
"name": "historyCode",
"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": "http://loinc.org"
}
]
}
]
},
{
"name": "codeCode",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "coding",
"element": "code",
"transform": "copy",
"parameter": [
{
"valueString": "59454-9"
}
]
}
]
},
{
"name": "codeDisplay",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "coding",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "History of falling; immediate or within 3 months [Morse Fall Scale]"
}
]
}
]
}
]
}
]
},
{
"name": "historyValue",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "comp"
}
],
"dependent": [
{
"name": "SetComponentCodedValue",
"parameter": [
{
"valueId": "it"
},
{
"valueId": "comp"
}
]
}
]
}
]
},
{
"name": "fallsDiagnosesRule",
"source": [
{
"context": "gF",
"element": "item",
"variable": "it",
"condition": "(linkId = 'fallsRisk.diagnoses') and answer.value.exists()"
}
],
"target": [
{
"context": "obsF",
"element": "component",
"variable": "comp"
}
],
"rule": [
{
"name": "diagnosesCode",
"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": "http://loinc.org"
}
]
}
]
},
{
"name": "codeCode",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "coding",
"element": "code",
"transform": "copy",
"parameter": [
{
"valueString": "59455-6"
}
]
}
]
},
{
"name": "codeDisplay",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "coding",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "Secondary diagnosis is present"
}
]
}
]
}
]
}
]
},
{
"name": "diagnosesValue",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "comp"
}
],
"dependent": [
{
"name": "SetComponentCodedValue",
"parameter": [
{
"valueId": "it"
},
{
"valueId": "comp"
}
]
}
]
}
]
},
{
"name": "fallsAidRule",
"source": [
{
"context": "gF",
"element": "item",
"variable": "it",
"condition": "(linkId = 'fallsRisk.aid') and answer.value.exists()"
}
],
"target": [
{
"context": "obsF",
"element": "component",
"variable": "comp"
}
],
"rule": [
{
"name": "aidCode",
"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": "http://loinc.org"
}
]
}
]
},
{
"name": "codeCode",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "coding",
"element": "code",
"transform": "copy",
"parameter": [
{
"valueString": "59456-4"
}
]
}
]
},
{
"name": "codeDisplay",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "coding",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "Ambulatory aid [Morse Fall Scale]"
}
]
}
]
}
]
}
]
},
{
"name": "aidValue",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "comp"
}
],
"dependent": [
{
"name": "SetComponentCodedValue",
"parameter": [
{
"valueId": "it"
},
{
"valueId": "comp"
}
]
}
]
}
]
},
{
"name": "fallsIvRule",
"source": [
{
"context": "gF",
"element": "item",
"variable": "it",
"condition": "(linkId = 'fallsRisk.iv') and answer.value.exists()"
}
],
"target": [
{
"context": "obsF",
"element": "component",
"variable": "comp"
}
],
"rule": [
{
"name": "ivCode",
"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": "http://loinc.org"
}
]
}
]
},
{
"name": "codeCode",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "coding",
"element": "code",
"transform": "copy",
"parameter": [
{
"valueString": "59457-2"
}
]
}
]
},
{
"name": "codeDisplay",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "coding",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "Intravenous apparatus [Morse Fall Scale]"
}
]
}
]
}
]
}
]
},
{
"name": "ivValue",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "comp"
}
],
"dependent": [
{
"name": "SetComponentCodedValue",
"parameter": [
{
"valueId": "it"
},
{
"valueId": "comp"
}
]
}
]
}
]
},
{
"name": "fallsGaitRule",
"source": [
{
"context": "gF",
"element": "item",
"variable": "it",
"condition": "(linkId = 'fallsRisk.gait') and answer.value.exists()"
}
],
"target": [
{
"context": "obsF",
"element": "component",
"variable": "comp"
}
],
"rule": [
{
"name": "gaitCode",
"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": "http://loinc.org"
}
]
}
]
},
{
"name": "codeCode",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "coding",
"element": "code",
"transform": "copy",
"parameter": [
{
"valueString": "59458-0"
}
]
}
]
},
{
"name": "codeDisplay",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "coding",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "Gait [Morse Fall Scale]"
}
]
}
]
}
]
}
]
},
{
"name": "gaitValue",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "comp"
}
],
"dependent": [
{
"name": "SetComponentCodedValue",
"parameter": [
{
"valueId": "it"
},
{
"valueId": "comp"
}
]
}
]
}
]
},
{
"name": "fallsMentalRule",
"source": [
{
"context": "gF",
"element": "item",
"variable": "it",
"condition": "(linkId = 'fallsRisk.mental') and answer.value.exists()"
}
],
"target": [
{
"context": "obsF",
"element": "component",
"variable": "comp"
}
],
"rule": [
{
"name": "mentalCode",
"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": "http://loinc.org"
}
]
}
]
},
{
"name": "codeCode",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "coding",
"element": "code",
"transform": "copy",
"parameter": [
{
"valueString": "59459-8"
}
]
}
]
},
{
"name": "codeDisplay",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "coding",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "Mental status [Morse Fall Scale]"
}
]
}
]
}
]
}
]
},
{
"name": "mentalValue",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "comp"
}
],
"dependent": [
{
"name": "SetComponentCodedValue",
"parameter": [
{
"valueId": "it"
},
{
"valueId": "comp"
}
]
}
]
}
]
},
{
"name": "fallsBand",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "obsF"
},
{
"context": "bundle"
}
],
"dependent": [
{
"name": "AddFallsRiskAssessment",
"parameter": [
{
"valueId": "obsF"
},
{
"valueId": "qr"
},
{
"valueId": "bundle"
}
]
}
]
}
]
}
],
"documentation": "── Falls risk (Morse Fall Scale) ──────────────────────────────────────────"
},
{
"name": "measuresRule",
"source": [
{
"context": "qr",
"element": "item",
"variable": "itM",
"condition": "(linkId = 'measures') and answer.value.exists()"
}
],
"rule": [
{
"name": "measuresAnswer",
"source": [
{
"context": "itM",
"element": "answer",
"listMode": "first",
"variable": "aM"
}
],
"rule": [
{
"name": "carePlan",
"source": [
{
"context": "aM"
}
],
"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": "falls-prevention-plan"
}
]
}
]
},
{
"name": "categoryDisplay",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "coding",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "Falls and pressure ulcer prevention measures"
}
]
}
]
}
]
}
]
},
{
"name": "title",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "plan",
"element": "title",
"transform": "copy",
"parameter": [
{
"valueString": "Falls and pressure ulcer prevention measures"
}
]
}
]
},
{
"name": "description",
"source": [
{
"context": "aM",
"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": "── Measures in place ──────────────────────────────────────────────────────"
}
]
},
{
"name": "AddBradenRiskAssessment",
"documentation": "─────────────────────────────────────────────────────────────────────────────\r\nRisk bands\r\nBraden (Bergstrom): 19 and over no risk, 15-18 mild, 13-14 moderate, 10-12\r\nhigh, 9 and under very high. Lower is worse.\r\nMorse (Morse, Preventing Patient Falls): 0-24 no risk, 25-50 low, 51 and over\r\nhigh. Higher is worse.\r\nThe published band is the text; the coding is HL7's risk-probability, which\r\nhas five concepts and so collapses Braden's \"very high\" and \"high\" onto one\r\ncode. Consumers that need the exact tier read the text, consumers that need\r\nto escalate read the code.\r\n─────────────────────────────────────────────────────────────────────────────",
"input": [
{
"name": "obs",
"type": "Observation",
"mode": "source"
},
{
"name": "qr",
"type": "QR",
"mode": "source"
},
{
"name": "bundle",
"type": "Bundle",
"mode": "target"
}
],
"rule": [
{
"name": "bradenVeryHigh",
"source": [
{
"context": "obs",
"condition": "value.ofType(integer) <= 9"
}
],
"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": "SetBradenRiskCode",
"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": "Very high risk"
}
]
}
]
}
]
}
]
}
]
},
{
"name": "bradenHigh",
"source": [
{
"context": "obs",
"condition": "(value.ofType(integer) >= 10) and (value.ofType(integer) <= 12)"
}
],
"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": "SetBradenRiskCode",
"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": "bradenModerate",
"source": [
{
"context": "obs",
"condition": "(value.ofType(integer) >= 13) and (value.ofType(integer) <= 14)"
}
],
"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": "SetBradenRiskCode",
"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": "Moderate risk"
}
]
}
]
}
]
}
]
}
]
},
{
"name": "bradenMild",
"source": [
{
"context": "obs",
"condition": "(value.ofType(integer) >= 15) and (value.ofType(integer) <= 18)"
}
],
"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": "SetBradenRiskCode",
"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": "Mild risk"
}
]
}
]
}
]
}
]
}
]
},
{
"name": "bradenNoRisk",
"source": [
{
"context": "obs",
"condition": "value.ofType(integer) >= 19"
}
],
"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": "SetBradenRiskCode",
"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": "negligible"
}
]
}
]
},
{
"name": "riskDisplay",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "coding",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "Negligible likelihood"
}
]
}
]
}
]
},
{
"name": "riskText",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "risk",
"element": "text",
"transform": "copy",
"parameter": [
{
"valueString": "No risk identified"
}
]
}
]
}
]
}
]
}
]
}
]
},
{
"name": "SetBradenRiskCode",
"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": "81636-3"
}
]
}
]
},
{
"name": "codeDisplay",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "coding",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "Pressure injury risk level Braden scale"
}
]
}
]
}
]
}
]
}
]
},
{
"name": "AddFallsRiskAssessment",
"input": [
{
"name": "obs",
"type": "Observation",
"mode": "source"
},
{
"name": "qr",
"type": "QR",
"mode": "source"
},
{
"name": "bundle",
"type": "Bundle",
"mode": "target"
}
],
"rule": [
{
"name": "fallsNoRisk",
"source": [
{
"context": "obs",
"condition": "value.ofType(integer) <= 24"
}
],
"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": "SetFallsRiskCode",
"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": "negligible"
}
]
}
]
},
{
"name": "riskDisplay",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "coding",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "Negligible likelihood"
}
]
}
]
}
]
},
{
"name": "riskText",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "risk",
"element": "text",
"transform": "copy",
"parameter": [
{
"valueString": "No risk"
}
]
}
]
}
]
}
]
}
]
},
{
"name": "fallsLow",
"source": [
{
"context": "obs",
"condition": "(value.ofType(integer) >= 25) and (value.ofType(integer) <= 50)"
}
],
"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": "SetFallsRiskCode",
"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": "fallsHigh",
"source": [
{
"context": "obs",
"condition": "value.ofType(integer) >= 51"
}
],
"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": "SetFallsRiskCode",
"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": "SetFallsRiskCode",
"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": "59461-4"
}
]
}
]
},
{
"name": "codeDisplay",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "coding",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "Fall risk level [Morse Fall Scale]"
}
]
}
]
}
]
}
]
}
]
},
{
"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",
"documentation": "The RiskAssessment stands on two things: the response that was filled in and\r\nthe Observation that holds the number. Both go in basis, which is what the\r\nSGHI RiskAssessment profile binds to a QuestionnaireResponse.",
"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"
}
]
}
]
}
]
}
]
}