FHIR IG analytics| Package | silfhirprofileig |
| Resource Type | StructureMap |
| Id | StructureMap-ExtractInpatientMentalHealthRiskAssessment.json |
| FHIR Version | R5 |
| Source | https://build.fhir.org/ig/savannahghi/sil_fhir_profile_ig/StructureMap-ExtractInpatientMentalHealthRiskAssessment.html |
| URL | https://fhir.slade360.co.ke/fhir/StructureMap/ExtractInpatientMentalHealthRiskAssessment |
| Version | 0.1.0 |
| Status | active |
| Date | 2026-09-11T12:18:36+00:00 |
| Name | ExtractInpatientMentalHealthRiskAssessment |
| Title | Inpatient Mental Health Risk Assessment Extraction |
| Description | Mood and capacity become Observations, the risk of self-harm becomes a RiskAssessment carrying what the patient said as its note, and a safeguarding concern becomes a Flag on the patient. This is the one instrument here that is not scored: the band comes from which of four answers was picked, not from arithmetic, so each answer is banded explicitly. The answer's own coding and wording ride along in qualitativeRisk, so a reader never has to infer what was said from a risk tier. |
No resources found
No resources found
Note: links and images are rebased to the (stated) source
Generated Narrative: StructureMap ExtractInpatientMentalHealthRiskAssessment
/// url = 'https://fhir.slade360.co.ke/fhir/StructureMap/ExtractInpatientMentalHealthRiskAssessment' /// name = 'ExtractInpatientMentalHealthRiskAssessment' /// title = 'Inpatient Mental Health Risk Assessment Extraction' /// status = 'active' /// description = 'Mood and capacity become Observations, the risk of self-harm becomes a RiskAssessment carrying what the patient said as its note, and a safeguarding concern becomes a Flag on the patient. This is the one instrument here that is not scored: the band comes from which of four answers was picked, not from arithmetic, so each answer is banded explicitly. The answer\'s own coding and wording ride along in qualitativeRisk, so a reader never has to infer what was said from a risk tier.' 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/Flag" alias Flag as target group ExtractInpatientMentalHealthRiskAssessment(source qr : QR, target bundle : Bundle) { qr -> bundle.type = 'transaction' "setBundleType"; // ── Mood and affect ──────────────────────────────────────────────────────── // No LOINC concept for the mood and affect line of a mental state // examination, so a local code. See SGHIInpatientClinicalConceptCodeSystem. qr.item as itM where ((linkId = 'mood') and answer.value.exists()) then { itM.answer first as aM then { aM -> bundle.entry as entryM, entryM.resource = create('Observation') as obsM then { qr -> obsM, entryM then BuildObsBase(qr, obsM, entryM) "moodBase"; qr -> obsM then SetExamCategory(qr, obsM) "moodCategory"; qr -> obsM.code as code then { qr -> code.coding as coding then { qr -> coding.system = 'https://fhir.slade360.co.ke/fhir/CodeSystem/inpatient-clinical-concept-codesystem' "codeSystem"; qr -> coding.code = 'mood-and-affect' "codeCode"; qr -> coding.display = 'Mood and affect' "codeDisplay"; } "codeCoding"; qr -> code.text = 'Mood and affect' "codeText"; } "moodCode"; aM.value as v -> obsM.value = v "moodValue"; } "moodObservation"; } "moodAnswer"; } "moodRule"; // ── Capacity to consent ──────────────────────────────────────────────────── qr.item as itC where ((linkId = 'capacity') and answer.value.exists()) then { itC.answer first as aC then { aC -> bundle.entry as entryC, entryC.resource = create('Observation') as obsC then { qr -> obsC, entryC then BuildObsBase(qr, obsC, entryC) "capacityBase"; qr -> obsC then SetExamCategory(qr, obsC) "capacityCategory"; qr -> obsC.code as code then { qr -> code.coding as coding then { qr -> coding.system = 'https://fhir.slade360.co.ke/fhir/CodeSystem/inpatient-clinical-concept-codesystem' "codeSystem"; qr -> coding.code = 'capacity-to-consent' "codeCode"; qr -> coding.display = 'Capacity to consent' "codeDisplay"; } "codeCoding"; qr -> code.text = 'Capacity to consent' "codeText"; } "capacityCode"; aC -> obsC then SetCodedValue(aC, obsC) "capacityValue"; } "capacityObservation"; } "capacityAnswer"; } "capacityRule"; // ── Risk of self-harm ────────────────────────────────────────────────────── // Four answers, four bands. Passive ideation is banded `moderate` rather than // `low`: on a ward, thoughts of self-harm without a plan still warrant // observation, and the cost of over-flagging here is smaller than the cost of // under-flagging. qr.item as itS where ((linkId = 'selfHarm') and (answer.value.ofType(Coding).code = 'self-harm-none')) -> bundle.entry as entry, entry.resource = create('RiskAssessment') as ra then { qr -> ra, entry then BuildRiskBase(qr, ra, entry) "riskBase"; qr -> ra.prediction as pred then { qr -> pred.outcome as outcome then { qr -> outcome.text = 'Self-harm' "outcomeText"; } "outcome"; 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"; itS -> risk then AddAnswerCodingAndText(itS, risk) "answerCoding"; } "qualitativeRisk"; } "prediction"; } "selfHarmNoneRule"; qr.item as itS where ((linkId = 'selfHarm') and (answer.value.ofType(Coding).code = 'self-harm-passive')) -> bundle.entry as entry, entry.resource = create('RiskAssessment') as ra then { qr -> ra, entry then BuildRiskBase(qr, ra, entry) "riskBase"; qr -> ra.prediction as pred then { qr -> pred.outcome as outcome then { qr -> outcome.text = 'Self-harm' "outcomeText"; } "outcome"; 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"; itS -> risk then AddAnswerCodingAndText(itS, risk) "answerCoding"; } "qualitativeRisk"; } "prediction"; } "selfHarmPassiveRule"; qr.item as itS where ((linkId = 'selfHarm') and (answer.value.ofType(Coding).code = 'self-harm-active-plan')) -> bundle.entry as entry, entry.resource = create('RiskAssessment') as ra then { qr -> ra, entry then BuildRiskBase(qr, ra, entry) "riskBase"; qr -> ra.prediction as pred then { qr -> pred.outcome as outcome then { qr -> outcome.text = 'Self-harm' "outcomeText"; } "outcome"; 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"; itS -> risk then AddAnswerCodingAndText(itS, risk) "answerCoding"; } "qualitativeRisk"; } "prediction"; } "selfHarmActivePlanRule"; qr.item as itS where ((linkId = 'selfHarm') and (answer.value.ofType(Coding).code = 'self-harm-recent-act')) -> bundle.entry as entry, entry.resource = create('RiskAssessment') as ra then { qr -> ra, entry then BuildRiskBase(qr, ra, entry) "riskBase"; qr -> ra.prediction as pred then { qr -> pred.outcome as outcome then { qr -> outcome.text = 'Self-harm' "outcomeText"; } "outcome"; 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"; itS -> risk then AddAnswerCodingAndText(itS, risk) "answerCoding"; } "qualitativeRisk"; } "prediction"; } "selfHarmRecentActRule"; // ── Safeguarding ─────────────────────────────────────────────────────────── // Flag has no element that points back at the response it came from, so this // is the one resource the map emits with no link home. Category `safety` is // what makes it show up wherever the ward surfaces safety flags. qr.item as itSg where ((linkId = 'safeguarding') and answer.value.exists()) then { itSg.answer first as aSg then { aSg -> bundle.entry as entryF, entryF.resource = create('Flag') as flag then { qr -> flag.id = uuid() then SetFlagFullUrl(flag, entryF) "idAndFullUrl"; qr -> entryF.request as request then { qr -> request.method = 'POST' "requestMethod"; qr -> request.url = 'Flag' "requestUrl"; } "entryRequest"; qr -> flag.status = 'active' "status"; qr -> flag.category as cat then { qr -> cat.coding as coding then { qr -> coding.system = 'http://terminology.hl7.org/CodeSystem/flag-category' "categorySystem"; qr -> coding.code = 'safety' "categoryCode"; qr -> coding.display = 'Safety' "categoryDisplay"; } "categoryCoding"; } "category"; // The concern as written. Flag.code is 1..1 and there is no code system // for "what a nurse is worried about", so the wording is the concept. aSg.value as v -> flag.code as code then { v -> code.text = v "codeText"; } "flagCode"; qr.subject as s -> flag.subject = s; qr.encounter as e -> flag.encounter = e; qr.authored as t -> flag.period as period then { t -> period.start = t "periodStart"; } "period"; qr.author as a -> flag.author = a "authorFromAuthor"; qr where (author.exists().not()) then { qr.source as src -> flag.author = src "authorFromSource"; } "authorFallback"; } "flag"; } "safeguardingAnswer"; } "safeguardingRule"; } // The chosen answer, coding and wording intact, alongside the risk-probability // code. risk-probability has five concepts and the form has four answers, so // two of them share `high`; the answer coding is what tells them apart. group AddAnswerCodingAndText(source it, target risk) { it.answer first as a then { a.value as cv -> risk.coding = cv "answerCoding"; a.value as cv then { cv.display as d -> risk.text = d "answerText"; } "answerDisplay"; }; } // ───────────────────────────────────────────────────────────────────────────── // 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. // ───────────────────────────────────────────────────────────────────────────── // Source parameters are left untyped on purpose. Writing `: Element` makes the // publisher's StructureMap 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. 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"; } // No Observation to stand on here -- the self-harm answer is a judgement, not a // measurement -- so basis carries the response alone, and "What was said" comes // through as the assessment's note. group BuildRiskBase(source qr : QR, 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 -> ra.code as code then { qr -> code.coding as coding then { qr -> coding.system = 'https://fhir.slade360.co.ke/fhir/CodeSystem/inpatient-clinical-concept-codesystem' "codeSystem"; qr -> coding.code = 'self-harm-risk' "codeCode"; qr -> coding.display = 'Risk of self-harm' "codeDisplay"; } "codeCoding"; qr -> code.text = 'Risk of self-harm' "codeText"; } "code"; 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"; qr.item as itD where ((linkId = 'selfHarmDetail') and answer.value.exists()) then { itD.answer first as aD then { aD.value as v -> ra.note as note then { v -> note.text = v "noteText"; } "note"; } "detailAnswer"; } "whatWasSaidRule"; } group SetCodedValue(source a, target obs : Observation) { a.value as cv -> obs.value = create('CodeableConcept') as cc then { cv -> cc.coding = cv "valueCoding"; cv.display as d -> cc.text = d "valueText"; } "codedValue"; } group SetExamCategory(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 = 'exam' "categoryCode"; qr -> coding.display = 'Exam' "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 SetFlagFullUrl(source flag : Flag, target entry) { flag.id as id -> entry.fullUrl = append('https://fhir.slade360.co.ke/fhir/Flag/', id) "assignFullUrl"; }
{
"resourceType": "StructureMap",
"id": "ExtractInpatientMentalHealthRiskAssessment",
"text": {
"status": "generated",
"div": "<!-- snip (see above) -->"
},
"url": "https://fhir.slade360.co.ke/fhir/StructureMap/ExtractInpatientMentalHealthRiskAssessment",
"version": "0.1.0",
"name": "ExtractInpatientMentalHealthRiskAssessment",
"title": "Inpatient Mental Health 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": "Mood and capacity become Observations, the risk of self-harm becomes a RiskAssessment carrying what the patient said as its note, and a safeguarding concern becomes a Flag on the patient. This is the one instrument here that is not scored: the band comes from which of four answers was picked, not from arithmetic, so each answer is banded explicitly. The answer's own coding and wording ride along in qualitativeRisk, so a reader never has to infer what was said from a risk tier.",
"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/Flag",
"mode": "target",
"alias": "Flag"
}
],
"group": [
{
"name": "ExtractInpatientMentalHealthRiskAssessment",
"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": "moodRule",
"source": [
{
"context": "qr",
"element": "item",
"variable": "itM",
"condition": "(linkId = 'mood') and answer.value.exists()"
}
],
"rule": [
{
"name": "moodAnswer",
"source": [
{
"context": "itM",
"element": "answer",
"listMode": "first",
"variable": "aM"
}
],
"rule": [
{
"name": "moodObservation",
"source": [
{
"context": "aM"
}
],
"target": [
{
"context": "bundle",
"element": "entry",
"variable": "entryM"
},
{
"context": "entryM",
"element": "resource",
"variable": "obsM",
"transform": "create",
"parameter": [
{
"valueString": "Observation"
}
]
}
],
"rule": [
{
"name": "moodBase",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "obsM"
},
{
"context": "entryM"
}
],
"dependent": [
{
"name": "BuildObsBase",
"parameter": [
{
"valueId": "qr"
},
{
"valueId": "obsM"
},
{
"valueId": "entryM"
}
]
}
]
},
{
"name": "moodCategory",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "obsM"
}
],
"dependent": [
{
"name": "SetExamCategory",
"parameter": [
{
"valueId": "qr"
},
{
"valueId": "obsM"
}
]
}
]
},
{
"name": "moodCode",
"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": "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": "mood-and-affect"
}
]
}
]
},
{
"name": "codeDisplay",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "coding",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "Mood and affect"
}
]
}
]
}
]
},
{
"name": "codeText",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "code",
"element": "text",
"transform": "copy",
"parameter": [
{
"valueString": "Mood and affect"
}
]
}
]
}
]
},
{
"name": "moodValue",
"source": [
{
"context": "aM",
"element": "value",
"variable": "v"
}
],
"target": [
{
"context": "obsM",
"element": "value",
"transform": "copy",
"parameter": [
{
"valueId": "v"
}
]
}
]
}
]
}
]
}
],
"documentation": "── Mood and affect ────────────────────────────────────────────────────────\r\nNo LOINC concept for the mood and affect line of a mental state\r\nexamination, so a local code. See SGHIInpatientClinicalConceptCodeSystem."
},
{
"name": "capacityRule",
"source": [
{
"context": "qr",
"element": "item",
"variable": "itC",
"condition": "(linkId = 'capacity') and answer.value.exists()"
}
],
"rule": [
{
"name": "capacityAnswer",
"source": [
{
"context": "itC",
"element": "answer",
"listMode": "first",
"variable": "aC"
}
],
"rule": [
{
"name": "capacityObservation",
"source": [
{
"context": "aC"
}
],
"target": [
{
"context": "bundle",
"element": "entry",
"variable": "entryC"
},
{
"context": "entryC",
"element": "resource",
"variable": "obsC",
"transform": "create",
"parameter": [
{
"valueString": "Observation"
}
]
}
],
"rule": [
{
"name": "capacityBase",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "obsC"
},
{
"context": "entryC"
}
],
"dependent": [
{
"name": "BuildObsBase",
"parameter": [
{
"valueId": "qr"
},
{
"valueId": "obsC"
},
{
"valueId": "entryC"
}
]
}
]
},
{
"name": "capacityCategory",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "obsC"
}
],
"dependent": [
{
"name": "SetExamCategory",
"parameter": [
{
"valueId": "qr"
},
{
"valueId": "obsC"
}
]
}
]
},
{
"name": "capacityCode",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "obsC",
"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": "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": "capacity-to-consent"
}
]
}
]
},
{
"name": "codeDisplay",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "coding",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "Capacity to consent"
}
]
}
]
}
]
},
{
"name": "codeText",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "code",
"element": "text",
"transform": "copy",
"parameter": [
{
"valueString": "Capacity to consent"
}
]
}
]
}
]
},
{
"name": "capacityValue",
"source": [
{
"context": "aC"
}
],
"target": [
{
"context": "obsC"
}
],
"dependent": [
{
"name": "SetCodedValue",
"parameter": [
{
"valueId": "aC"
},
{
"valueId": "obsC"
}
]
}
]
}
]
}
]
}
],
"documentation": "── Capacity to consent ────────────────────────────────────────────────────"
},
{
"name": "selfHarmNoneRule",
"source": [
{
"context": "qr",
"element": "item",
"variable": "itS",
"condition": "(linkId = 'selfHarm') and (answer.value.ofType(Coding).code = 'self-harm-none')"
}
],
"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": "ra"
},
{
"valueId": "entry"
}
]
}
]
},
{
"name": "prediction",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "ra",
"element": "prediction",
"variable": "pred"
}
],
"rule": [
{
"name": "outcome",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "pred",
"element": "outcome",
"variable": "outcome"
}
],
"rule": [
{
"name": "outcomeText",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "outcome",
"element": "text",
"transform": "copy",
"parameter": [
{
"valueString": "Self-harm"
}
]
}
]
}
]
},
{
"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": "answerCoding",
"source": [
{
"context": "itS"
}
],
"target": [
{
"context": "risk"
}
],
"dependent": [
{
"name": "AddAnswerCodingAndText",
"parameter": [
{
"valueId": "itS"
},
{
"valueId": "risk"
}
]
}
]
}
]
}
]
}
],
"documentation": "── Risk of self-harm ──────────────────────────────────────────────────────\r\nFour answers, four bands. Passive ideation is banded `moderate` rather than\r\n`low`: on a ward, thoughts of self-harm without a plan still warrant\r\nobservation, and the cost of over-flagging here is smaller than the cost of\r\nunder-flagging."
},
{
"name": "selfHarmPassiveRule",
"source": [
{
"context": "qr",
"element": "item",
"variable": "itS",
"condition": "(linkId = 'selfHarm') and (answer.value.ofType(Coding).code = 'self-harm-passive')"
}
],
"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": "ra"
},
{
"valueId": "entry"
}
]
}
]
},
{
"name": "prediction",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "ra",
"element": "prediction",
"variable": "pred"
}
],
"rule": [
{
"name": "outcome",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "pred",
"element": "outcome",
"variable": "outcome"
}
],
"rule": [
{
"name": "outcomeText",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "outcome",
"element": "text",
"transform": "copy",
"parameter": [
{
"valueString": "Self-harm"
}
]
}
]
}
]
},
{
"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": "answerCoding",
"source": [
{
"context": "itS"
}
],
"target": [
{
"context": "risk"
}
],
"dependent": [
{
"name": "AddAnswerCodingAndText",
"parameter": [
{
"valueId": "itS"
},
{
"valueId": "risk"
}
]
}
]
}
]
}
]
}
]
},
{
"name": "selfHarmActivePlanRule",
"source": [
{
"context": "qr",
"element": "item",
"variable": "itS",
"condition": "(linkId = 'selfHarm') and (answer.value.ofType(Coding).code = 'self-harm-active-plan')"
}
],
"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": "ra"
},
{
"valueId": "entry"
}
]
}
]
},
{
"name": "prediction",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "ra",
"element": "prediction",
"variable": "pred"
}
],
"rule": [
{
"name": "outcome",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "pred",
"element": "outcome",
"variable": "outcome"
}
],
"rule": [
{
"name": "outcomeText",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "outcome",
"element": "text",
"transform": "copy",
"parameter": [
{
"valueString": "Self-harm"
}
]
}
]
}
]
},
{
"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": "answerCoding",
"source": [
{
"context": "itS"
}
],
"target": [
{
"context": "risk"
}
],
"dependent": [
{
"name": "AddAnswerCodingAndText",
"parameter": [
{
"valueId": "itS"
},
{
"valueId": "risk"
}
]
}
]
}
]
}
]
}
]
},
{
"name": "selfHarmRecentActRule",
"source": [
{
"context": "qr",
"element": "item",
"variable": "itS",
"condition": "(linkId = 'selfHarm') and (answer.value.ofType(Coding).code = 'self-harm-recent-act')"
}
],
"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": "ra"
},
{
"valueId": "entry"
}
]
}
]
},
{
"name": "prediction",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "ra",
"element": "prediction",
"variable": "pred"
}
],
"rule": [
{
"name": "outcome",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "pred",
"element": "outcome",
"variable": "outcome"
}
],
"rule": [
{
"name": "outcomeText",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "outcome",
"element": "text",
"transform": "copy",
"parameter": [
{
"valueString": "Self-harm"
}
]
}
]
}
]
},
{
"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": "answerCoding",
"source": [
{
"context": "itS"
}
],
"target": [
{
"context": "risk"
}
],
"dependent": [
{
"name": "AddAnswerCodingAndText",
"parameter": [
{
"valueId": "itS"
},
{
"valueId": "risk"
}
]
}
]
}
]
}
]
}
]
},
{
"name": "safeguardingRule",
"source": [
{
"context": "qr",
"element": "item",
"variable": "itSg",
"condition": "(linkId = 'safeguarding') and answer.value.exists()"
}
],
"rule": [
{
"name": "safeguardingAnswer",
"source": [
{
"context": "itSg",
"element": "answer",
"listMode": "first",
"variable": "aSg"
}
],
"rule": [
{
"name": "flag",
"source": [
{
"context": "aSg"
}
],
"target": [
{
"context": "bundle",
"element": "entry",
"variable": "entryF"
},
{
"context": "entryF",
"element": "resource",
"variable": "flag",
"transform": "create",
"parameter": [
{
"valueString": "Flag"
}
]
}
],
"rule": [
{
"name": "idAndFullUrl",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "flag",
"element": "id",
"transform": "uuid"
}
],
"dependent": [
{
"name": "SetFlagFullUrl",
"parameter": [
{
"valueId": "flag"
},
{
"valueId": "entryF"
}
]
}
]
},
{
"name": "entryRequest",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "entryF",
"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": "Flag"
}
]
}
]
}
]
},
{
"name": "status",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "flag",
"element": "status",
"transform": "copy",
"parameter": [
{
"valueString": "active"
}
]
}
]
},
{
"name": "category",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "flag",
"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/flag-category"
}
]
}
]
},
{
"name": "categoryCode",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "coding",
"element": "code",
"transform": "copy",
"parameter": [
{
"valueString": "safety"
}
]
}
]
},
{
"name": "categoryDisplay",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "coding",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "Safety"
}
]
}
]
}
]
}
]
},
{
"name": "flagCode",
"source": [
{
"context": "aSg",
"element": "value",
"variable": "v"
}
],
"target": [
{
"context": "flag",
"element": "code",
"variable": "code"
}
],
"rule": [
{
"name": "codeText",
"source": [
{
"context": "v"
}
],
"target": [
{
"context": "code",
"element": "text",
"transform": "copy",
"parameter": [
{
"valueId": "v"
}
]
}
]
}
],
"documentation": "The concern as written. Flag.code is 1..1 and there is no code system\r\nfor \"what a nurse is worried about\", so the wording is the concept."
},
{
"name": "subject",
"source": [
{
"context": "qr",
"element": "subject",
"variable": "s"
}
],
"target": [
{
"context": "flag",
"element": "subject",
"transform": "copy",
"parameter": [
{
"valueId": "s"
}
]
}
]
},
{
"name": "encounter",
"source": [
{
"context": "qr",
"element": "encounter",
"variable": "e"
}
],
"target": [
{
"context": "flag",
"element": "encounter",
"transform": "copy",
"parameter": [
{
"valueId": "e"
}
]
}
]
},
{
"name": "period",
"source": [
{
"context": "qr",
"element": "authored",
"variable": "t"
}
],
"target": [
{
"context": "flag",
"element": "period",
"variable": "period"
}
],
"rule": [
{
"name": "periodStart",
"source": [
{
"context": "t"
}
],
"target": [
{
"context": "period",
"element": "start",
"transform": "copy",
"parameter": [
{
"valueId": "t"
}
]
}
]
}
]
},
{
"name": "authorFromAuthor",
"source": [
{
"context": "qr",
"element": "author",
"variable": "a"
}
],
"target": [
{
"context": "flag",
"element": "author",
"transform": "copy",
"parameter": [
{
"valueId": "a"
}
]
}
]
},
{
"name": "authorFallback",
"source": [
{
"context": "qr",
"condition": "author.exists().not()"
}
],
"rule": [
{
"name": "authorFromSource",
"source": [
{
"context": "qr",
"element": "source",
"variable": "src"
}
],
"target": [
{
"context": "flag",
"element": "author",
"transform": "copy",
"parameter": [
{
"valueId": "src"
}
]
}
]
}
]
}
]
}
]
}
],
"documentation": "── Safeguarding ───────────────────────────────────────────────────────────\r\nFlag has no element that points back at the response it came from, so this\r\nis the one resource the map emits with no link home. Category `safety` is\r\nwhat makes it show up wherever the ward surfaces safety flags."
}
]
},
{
"name": "AddAnswerCodingAndText",
"documentation": "The chosen answer, coding and wording intact, alongside the risk-probability\r\ncode. risk-probability has five concepts and the form has four answers, so\r\ntwo of them share `high`; the answer coding is what tells them apart.",
"input": [
{
"name": "it",
"mode": "source"
},
{
"name": "risk",
"mode": "target"
}
],
"rule": [
{
"name": "answer",
"source": [
{
"context": "it",
"element": "answer",
"listMode": "first",
"variable": "a"
}
],
"rule": [
{
"name": "answerCoding",
"source": [
{
"context": "a",
"element": "value",
"variable": "cv"
}
],
"target": [
{
"context": "risk",
"element": "coding",
"transform": "copy",
"parameter": [
{
"valueId": "cv"
}
]
}
]
},
{
"name": "answerDisplay",
"source": [
{
"context": "a",
"element": "value",
"variable": "cv"
}
],
"rule": [
{
"name": "answerText",
"source": [
{
"context": "cv",
"element": "display",
"variable": "d"
}
],
"target": [
{
"context": "risk",
"element": "text",
"transform": "copy",
"parameter": [
{
"valueId": "d"
}
]
}
]
}
]
}
]
}
]
},
{
"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\nSource parameters are left untyped on purpose. Writing `: Element` makes the\r\npublisher's StructureMap validator compare QuestionnaireResponse.item against\r\nthe literal 'Element' and report them as incompatible with each other, which is\r\nnoise, not a finding. Untyped, it says only that it cannot check the paths.",
"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": "No Observation to stand on here -- the self-harm answer is a judgement, not a\r\nmeasurement -- so basis carries the response alone, and \"What was said\" comes\r\nthrough as the assessment's note.",
"input": [
{
"name": "qr",
"type": "QR",
"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": "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": "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": "self-harm-risk"
}
]
}
]
},
{
"name": "codeDisplay",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "coding",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "Risk of self-harm"
}
]
}
]
}
]
},
{
"name": "codeText",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "code",
"element": "text",
"transform": "copy",
"parameter": [
{
"valueString": "Risk of self-harm"
}
]
}
]
}
]
},
{
"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": "whatWasSaidRule",
"source": [
{
"context": "qr",
"element": "item",
"variable": "itD",
"condition": "(linkId = 'selfHarmDetail') and answer.value.exists()"
}
],
"rule": [
{
"name": "detailAnswer",
"source": [
{
"context": "itD",
"element": "answer",
"listMode": "first",
"variable": "aD"
}
],
"rule": [
{
"name": "note",
"source": [
{
"context": "aD",
"element": "value",
"variable": "v"
}
],
"target": [
{
"context": "ra",
"element": "note",
"variable": "note"
}
],
"rule": [
{
"name": "noteText",
"source": [
{
"context": "v"
}
],
"target": [
{
"context": "note",
"element": "text",
"transform": "copy",
"parameter": [
{
"valueId": "v"
}
]
}
]
}
]
}
]
}
]
}
]
},
{
"name": "SetCodedValue",
"input": [
{
"name": "a",
"mode": "source"
},
{
"name": "obs",
"type": "Observation",
"mode": "target"
}
],
"rule": [
{
"name": "codedValue",
"source": [
{
"context": "a",
"element": "value",
"variable": "cv"
}
],
"target": [
{
"context": "obs",
"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": "SetExamCategory",
"input": [
{
"name": "qr",
"type": "QR",
"mode": "source"
},
{
"name": "obs",
"type": "Observation",
"mode": "target"
}
],
"rule": [
{
"name": "category",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "obs",
"element": "category",
"variable": "cat"
}
],
"rule": [
{
"name": "categoryCoding",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "cat",
"element": "coding",
"variable": "coding"
}
],
"rule": [
{
"name": "categorySystem",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "coding",
"element": "system",
"transform": "copy",
"parameter": [
{
"valueString": "http://terminology.hl7.org/CodeSystem/observation-category"
}
]
}
]
},
{
"name": "categoryCode",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "coding",
"element": "code",
"transform": "copy",
"parameter": [
{
"valueString": "exam"
}
]
}
]
},
{
"name": "categoryDisplay",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "coding",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "Exam"
}
]
}
]
}
]
}
]
}
]
},
{
"name": "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": "SetFlagFullUrl",
"input": [
{
"name": "flag",
"type": "Flag",
"mode": "source"
},
{
"name": "entry",
"mode": "target"
}
],
"rule": [
{
"name": "assignFullUrl",
"source": [
{
"context": "flag",
"element": "id",
"variable": "id"
}
],
"target": [
{
"context": "entry",
"element": "fullUrl",
"transform": "append",
"parameter": [
{
"valueString": "https://fhir.slade360.co.ke/fhir/Flag/"
},
{
"valueId": "id"
}
]
}
]
}
]
}
]
}