FHIR IG analytics| Package | silfhirprofileig |
| Resource Type | StructureMap |
| Id | StructureMap-ExtractCoagulationProfileRequisition.json |
| FHIR Version | R5 |
| Source | https://build.fhir.org/ig/savannahghi/sil_fhir_profile_ig/StructureMap-ExtractCoagulationProfileRequisition.html |
| URL | https://fhir.slade360.co.ke/fhir/StructureMap/ExtractCoagulationProfileRequisition |
| Version | 0.1.0 |
| Status | active |
| Date | 2026-09-11T12:18:36+00:00 |
| Name | ExtractCoagulationProfileRequisition |
| Title | Coagulation Profile Requisition Extraction |
| Description | PT under LOINC 5964-2, INR under 6301-6 and APTT under 3173-2, each carrying the reference range printed on the form. The INR range is the reason this map needs a question answered: the printed 2.0 to 3.5 applies only to a patient on stabilised oral anticoagulant therapy, so it is attached only when the form says yes. Attaching it unconditionally would flag every patient not on warfarin as out of range, which is the opposite of useful. |
No resources found
No resources found
Note: links and images are rebased to the (stated) source
Generated Narrative: StructureMap ExtractCoagulationProfileRequisition
/// url = 'https://fhir.slade360.co.ke/fhir/StructureMap/ExtractCoagulationProfileRequisition' /// name = 'ExtractCoagulationProfileRequisition' /// title = 'Coagulation Profile Requisition Extraction' /// status = 'active' /// description = 'PT under LOINC 5964-2, INR under 6301-6 and APTT under 3173-2, each carrying the reference range printed on the form. The INR range is the reason this map needs a question answered: the printed 2.0 to 3.5 applies only to a patient on stabilised oral anticoagulant therapy, so it is attached only when the form says yes. Attaching it unconditionally would flag every patient not on warfarin as out of range, which is the opposite of useful.' 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/ServiceRequest" alias ServiceRequest as target group ExtractCoagulationProfileRequisition(source qr : QR, target bundle : Bundle) { qr -> bundle.type = 'transaction' "setBundleType"; qr -> bundle.entry as entry, entry.resource = create('ServiceRequest') as sr then { qr -> sr, entry then BuildServiceRequestBase(qr, sr, entry) "base"; qr -> sr.status = 'active' "status"; qr -> sr.intent = 'order' "intent"; qr.encounter as e -> sr.encounter = e; qr.authored as t -> sr.authoredOn = t "authoredOn"; qr -> sr.category as cat then { qr -> cat.coding as cg then { qr -> cg.system = 'http://snomed.info/sct' "sys"; qr -> cg.code = '108252007' "cd"; qr -> cg.display = 'Laboratory procedure' "dsp"; } "coding"; } "category"; // A local code. LOINC publishes every individual coagulation analyte but // nothing for the profile as ordered -- the panel codes that look right // (34530-4, 34530-6) are an ABO and Rh group panel -- and a guessed panel // code on a laboratory order is worse than a local one that says exactly // what the form asks for. qr -> sr.code as cr, cr.concept as cc then { qr -> cc.coding as cg then { qr -> cg.system = 'https://fhir.slade360.co.ke/fhir/CodeSystem/concept-codesystem' "sys"; qr -> cg.code = 'anticoagulation-coagulation-profile' "cd"; qr -> cg.display = 'Coagulation profile' "dsp"; } "coding"; } "code"; qr.item as g where (linkId = 'request') then { g.item as it where ((linkId = 'request/requester') and answer.value.exists()) then { it.answer first as a then { a.value as ref -> sr.requester = ref "requester"; }; } "requesterRule"; g.item as it where ((linkId = 'request/urgency') and answer.value.exists()) then { it.answer first as a then { a.value as cv where (code = 'lab-urgency-desperate') -> sr.priority = 'stat' "stat"; } "desperateRule"; it.answer first as a then { a.value as cv where (code = 'lab-urgency-urgent') -> sr.priority = 'urgent' "urgent"; } "urgentRule"; it.answer first as a then { a.value as cv where (code = 'lab-urgency-routine') -> sr.priority = 'routine' "routine"; } "routineRule"; } "urgencyRule"; g.item as it where ((linkId = 'request/specimen') and answer.value.exists()) then { it.answer first as a then { a.value as txt -> sr.specimen = create('Reference') as spref, spref.display = txt "specimen"; }; } "specimenRule"; } "requestGroup"; qr.item as it where ((linkId = 'clinical-history') and answer.value.exists()) then { it.answer first as a then { a.value as txt -> sr.note as n, n.text = txt "historyNote"; }; } "historyRule"; } "coagulationRequest"; qr.item as g where (linkId = 'results') then { // ── Prothrombin time ────────────────────────────────────────────────── g.item as it where ((linkId = 'results/prothrombin-time') and answer.value.ofType(Quantity).exists()) -> bundle.entry as entry, entry.resource = create('Observation') as obs then { qr -> obs, entry then BuildObsBase(qr, obs, entry) "base"; qr -> obs then SetLaboratoryCategory(qr, obs) "category"; it -> obs.code as cc then { it -> cc.coding as cg then { it -> cg.system = 'http://loinc.org' "sys"; it -> cg.code = '5964-2' "cd"; it -> cg.display = 'Prothrombin time (PT) in Blood by Coagulation assay' "dsp"; } "coding"; } "code"; it.answer first as a then { a.value as v -> obs.value = v; }; it -> obs.referenceRange as rr then { it -> rr.low = create('Quantity') as lo then { it -> lo.value = '11' "loValue"; it -> lo.unit = 'seconds' "loUnit"; it -> lo.system = 'http://unitsofmeasure.org' "loSystem"; it -> lo.code = 's' "loCode"; } "low"; it -> rr.high = create('Quantity') as hi then { it -> hi.value = '16' "hiValue"; it -> hi.unit = 'seconds' "hiUnit"; it -> hi.system = 'http://unitsofmeasure.org' "hiSystem"; it -> hi.code = 's' "hiCode"; } "high"; it -> rr.text = 'Reference range printed on the coagulation profile form' "rrText"; } "referenceRange"; qr -> obs then SetCoagulationContext(qr, obs) "context"; } "prothrombinTime"; // ── APTT ────────────────────────────────────────────────────────────── g.item as it where ((linkId = 'results/aptt') and answer.value.ofType(Quantity).exists()) -> bundle.entry as entry, entry.resource = create('Observation') as obs then { qr -> obs, entry then BuildObsBase(qr, obs, entry) "base"; qr -> obs then SetLaboratoryCategory(qr, obs) "category"; it -> obs.code as cc then { it -> cc.coding as cg then { it -> cg.system = 'http://loinc.org' "sys"; it -> cg.code = '3173-2' "cd"; it -> cg.display = 'aPTT in Blood by Coagulation assay' "dsp"; } "coding"; } "code"; it.answer first as a then { a.value as v -> obs.value = v; }; it -> obs.referenceRange as rr then { it -> rr.low = create('Quantity') as lo then { it -> lo.value = '26.1' "loValue"; it -> lo.unit = 'seconds' "loUnit"; it -> lo.system = 'http://unitsofmeasure.org' "loSystem"; it -> lo.code = 's' "loCode"; } "low"; it -> rr.high = create('Quantity') as hi then { it -> hi.value = '36.3' "hiValue"; it -> hi.unit = 'seconds' "hiUnit"; it -> hi.system = 'http://unitsofmeasure.org' "hiSystem"; it -> hi.code = 's' "hiCode"; } "high"; it -> rr.text = 'Reference range printed on the coagulation profile form' "rrText"; } "referenceRange"; qr -> obs then SetCoagulationContext(qr, obs) "context"; } "aptt"; // ── INR ─────────────────────────────────────────────────────────────── // Observation.value[x] has no decimal choice, so the INR -- a bare ratio // with no unit -- has to be built as a Quantity with UCUM's unity code. g.item as it where ((linkId = 'results/inr') and answer.value.exists()) -> bundle.entry as entry, entry.resource = create('Observation') as obs then { qr -> obs, entry then BuildObsBase(qr, obs, entry) "base"; qr -> obs then SetLaboratoryCategory(qr, obs) "category"; it -> obs.code as cc then { it -> cc.coding as cg then { it -> cg.system = 'http://loinc.org' "sys"; it -> cg.code = '6301-6' "cd"; it -> cg.display = 'INR in Platelet poor plasma by Coagulation assay' "dsp"; } "coding"; } "code"; it.answer first as a then { a.value as v -> obs.value = create('Quantity') as q then { v -> q.value = v "qValue"; v -> q.unit = 'ratio' "qUnit"; v -> q.system = 'http://unitsofmeasure.org' "qSystem"; v -> q.code = '1' "qCode"; } "quantity"; }; // The printed 2.0-3.5 range attaches only where the patient is on // stabilised oral anticoagulants. For anyone else it is not a target and // attaching it would mark every unanticoagulated patient abnormal. qr.item as ac where (linkId = 'anticoagulation') then { ac.item as oa where ((linkId = 'anticoagulation/on-oral-anticoagulant') and (answer.value.ofType(Coding).code = 'Y')) then { oa -> obs.referenceRange as rr then { oa -> rr.low = create('Quantity') as lo then { oa -> lo.value = '2.0' "loValue"; oa -> lo.unit = 'ratio' "loUnit"; oa -> lo.system = 'http://unitsofmeasure.org' "loSystem"; oa -> lo.code = '1' "loCode"; } "low"; oa -> rr.high = create('Quantity') as hi then { oa -> hi.value = '3.5' "hiValue"; oa -> hi.unit = 'ratio' "hiUnit"; oa -> hi.system = 'http://unitsofmeasure.org' "hiSystem"; oa -> hi.code = '1' "hiCode"; } "high"; oa -> rr.text = 'Therapeutic range for a patient on stabilised oral anticoagulant therapy, as printed on the form' "rrText"; } "referenceRange"; } "onAnticoagulantRule"; } "anticoagulationGroup"; qr -> obs then SetCoagulationContext(qr, obs) "context"; } "inr"; } "resultsGroup"; qr.item as it where ((linkId = 'clinical-history') and answer.value.exists()) -> bundle.entry as entry, entry.resource = create('Observation') as obs then { qr -> obs, entry then BuildObsBase(qr, obs, entry) "base"; qr -> obs then SetSurveyCategory(qr, obs) "category"; it -> obs.code as cc then { it -> cc.coding as cg then { it -> cg.system = 'http://loinc.org' "sys"; it -> cg.code = '55752-0' "cd"; it -> cg.display = 'Clinical information' "dsp"; } "coding"; it -> cc.text = 'Clinical history given to the coagulation laboratory' "codeText"; } "code"; it.answer first as a then { a.value as txt -> obs.note as n, n.text = txt "text"; }; } "narr_55752_0"; qr.item as g where (linkId = 'anticoagulation') then { g.item as it where ((linkId = 'anticoagulation/on-oral-anticoagulant') and answer.value.exists()) -> bundle.entry as entry, entry.resource = create('Observation') as obs then { qr -> obs, entry then BuildObsBase(qr, obs, entry) "base"; qr -> obs then SetSurveyCategory(qr, obs) "category"; it -> obs.code as cc then { it -> cc.coding as cg then { it -> cg.system = 'https://fhir.slade360.co.ke/fhir/CodeSystem/concept-codesystem' "sys"; it -> cg.code = 'anticoagulation-on-stabilised-oral-anticoagulant-therapy' "cd"; it -> cg.display = 'On stabilised oral anticoagulant therapy' "dsp"; } "coding"; } "code"; it.answer first as a then { 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"; }; } "coded_anticoagulation"; g.item as it where ((linkId = 'anticoagulation/agent') and answer.value.exists()) -> bundle.entry as entry, entry.resource = create('Observation') as obs then { qr -> obs, entry then BuildObsBase(qr, obs, entry) "base"; qr -> obs then SetSurveyCategory(qr, obs) "category"; it -> obs.code as cc then { it -> cc.coding as cg then { it -> cg.system = 'https://fhir.slade360.co.ke/fhir/CodeSystem/concept-codesystem' "sys"; it -> cg.code = 'anticoagulation-anticoagulant-agent-and-dose' "cd"; it -> cg.display = 'Anticoagulant agent and dose' "dsp"; } "coding"; } "code"; it.answer first as a then { a.value as txt -> obs.note as n, n.text = txt "text"; }; } "narr_anticoagulation_anticoagulant_agent_and_dose"; } "anticoagulationObs"; } group SetCoagulationContext(source qr : QR, target obs : Observation) { qr.item as g where (linkId = 'laboratory') then { g.item as it where ((linkId = 'laboratory/collected-at') and answer.value.exists()) then { it.answer first as a then { a.value as v -> obs.effective = v "effective"; }; } "collectedAtRule"; g.item as it where ((linkId = 'laboratory/tested-by') and answer.value.exists()) then { it.answer first as a then { a.value as ref -> obs.performer = ref "testedBy"; }; } "testedByRule"; g.item as it where ((linkId = 'laboratory/dispatched-at') and answer.value.exists()) then { it.answer first as a then { a.value as v -> obs.issued = cast(v, 'instant') "issued"; }; } "dispatchedRule"; g.item as it where ((linkId = 'laboratory/lab-registration-number') and answer.value.exists()) then { it.answer first as a then { a.value as txt -> obs.identifier as ident then { txt -> ident.system = 'https://fhir.slade360.co.ke/fhir/identifier/lab-registration' "identSystem"; txt -> ident.value = txt "identValue"; } "identifier"; }; } "labRegRule"; } "laboratoryGroup"; } // ───────────────────────────────────────────────────────────────────────────── // 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. // `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 then SetResponseProvenance(qr, obs) "responseProvenance"; 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"; // A stored response's id already reads "QuestionnaireResponse/<id>", so it is // a relative reference as it stands. The hasValue() guard is what stops an // unsaved response -- one posted straight to $extract rather than saved first // -- from writing "QuestionnaireResponse/null" into the record. qr.id as qid where ($this.hasValue()) -> obs.derivedFrom = create('Reference') as ref, ref.reference = qid "linkQuestionnaireResponse"; } group SetObservationFullUrl(source obs : Observation, target entry) { obs.id as id -> entry.fullUrl = append('https://fhir.slade360.co.ke/fhir/Observation/', id) "assignFullUrl"; } // The two answer shapes a component can carry. Both read the answer through the // untyped `.value` accessor: reading `valueCoding` or `valueQuantity` by its // typed property name fails at transform time on HAPI R5 with "Attempt to read // invalid property ... on QuestionnaireResponse.item.answer". 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 SetComponentValue(source it, target comp) { it.answer first as a then { a.value as v -> comp.value = v "plainValue"; } "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 SetLaboratoryCategory(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 = 'laboratory' "categoryCode"; qr -> coding.display = 'Laboratory' "categoryDisplay"; } "categoryCoding"; } "category"; } group BuildServiceRequestBase(source qr : QR, target r : ServiceRequest, target entry) { qr -> r then SetResponseProvenance(qr, r) "responseProvenance"; qr -> r.id = uuid() then SetServiceRequestFullUrl(r, entry) "idAndFullUrl"; qr -> entry.request as request then { qr -> request.method = 'POST' "requestMethod"; qr -> request.url = 'ServiceRequest' "requestUrl"; } "entryRequest"; qr.subject as s -> r.subject = s; } group SetServiceRequestFullUrl(source r : ServiceRequest, target entry) { r.id as id -> entry.fullUrl = append('https://fhir.slade360.co.ke/fhir/ServiceRequest/', id) "assignFullUrl"; } // ── Provenance and tenancy ─────────────────────────────────────────────────── // Two tags on everything this map creates. The first says which questionnaire // produced it, so a form that reopens mid-admission recalls its own earlier // entries and not another form's. The second copies the tenant tags off the // response, because nothing else on the path puts them there. // The code is the form's document type, not the questionnaire's id: every // environment mints its own ids, and there is only one set of maps, so an id // here would tie the tag to whichever environment stamped it. // ── Provenance and tenancy ─────────────────────────────────────────────────── group SetResponseProvenance(source qr : QR, target r) { qr -> r.meta as m then { qr -> m.tag as t then { qr -> t.system = 'http://slade360edi.com/questionnaire-provenance' "provenanceSystem"; qr -> t.code = 'coagulation-profile-requisition' "provenanceCode"; qr -> t.display = 'Coagulation profile requisition' "provenanceDisplay"; } "provenanceTag"; } "provenanceMeta"; // Every tag the response carries, onto the resource. `meta` is 0..1, so this // lands on the same meta the rule above created rather than a second one. qr.meta as qm then { qm.tag as qt -> r.meta as m, m.tag = qt "copyTag"; } "tenantTags"; }
{
"resourceType": "StructureMap",
"id": "ExtractCoagulationProfileRequisition",
"text": {
"status": "generated",
"div": "<!-- snip (see above) -->"
},
"url": "https://fhir.slade360.co.ke/fhir/StructureMap/ExtractCoagulationProfileRequisition",
"version": "0.1.0",
"name": "ExtractCoagulationProfileRequisition",
"title": "Coagulation Profile Requisition 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": "PT under LOINC 5964-2, INR under 6301-6 and APTT under 3173-2, each carrying the reference range printed on the form. The INR range is the reason this map needs a question answered: the printed 2.0 to 3.5 applies only to a patient on stabilised oral anticoagulant therapy, so it is attached only when the form says yes. Attaching it unconditionally would flag every patient not on warfarin as out of range, which is the opposite of useful.",
"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/ServiceRequest",
"mode": "target",
"alias": "ServiceRequest"
}
],
"group": [
{
"name": "ExtractCoagulationProfileRequisition",
"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": "coagulationRequest",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "bundle",
"element": "entry",
"variable": "entry"
},
{
"context": "entry",
"element": "resource",
"variable": "sr",
"transform": "create",
"parameter": [
{
"valueString": "ServiceRequest"
}
]
}
],
"rule": [
{
"name": "base",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "sr"
},
{
"context": "entry"
}
],
"dependent": [
{
"name": "BuildServiceRequestBase",
"parameter": [
{
"valueId": "qr"
},
{
"valueId": "sr"
},
{
"valueId": "entry"
}
]
}
]
},
{
"name": "status",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "sr",
"element": "status",
"transform": "copy",
"parameter": [
{
"valueString": "active"
}
]
}
]
},
{
"name": "intent",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "sr",
"element": "intent",
"transform": "copy",
"parameter": [
{
"valueString": "order"
}
]
}
]
},
{
"name": "encounter",
"source": [
{
"context": "qr",
"element": "encounter",
"variable": "e"
}
],
"target": [
{
"context": "sr",
"element": "encounter",
"transform": "copy",
"parameter": [
{
"valueId": "e"
}
]
}
]
},
{
"name": "authoredOn",
"source": [
{
"context": "qr",
"element": "authored",
"variable": "t"
}
],
"target": [
{
"context": "sr",
"element": "authoredOn",
"transform": "copy",
"parameter": [
{
"valueId": "t"
}
]
}
]
},
{
"name": "category",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "sr",
"element": "category",
"variable": "cat"
}
],
"rule": [
{
"name": "coding",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "cat",
"element": "coding",
"variable": "cg"
}
],
"rule": [
{
"name": "sys",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "cg",
"element": "system",
"transform": "copy",
"parameter": [
{
"valueString": "http://snomed.info/sct"
}
]
}
]
},
{
"name": "cd",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "cg",
"element": "code",
"transform": "copy",
"parameter": [
{
"valueString": "108252007"
}
]
}
]
},
{
"name": "dsp",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "cg",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "Laboratory procedure"
}
]
}
]
}
]
}
]
},
{
"name": "code",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "sr",
"element": "code",
"variable": "cr"
},
{
"context": "cr",
"element": "concept",
"variable": "cc"
}
],
"rule": [
{
"name": "coding",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "cc",
"element": "coding",
"variable": "cg"
}
],
"rule": [
{
"name": "sys",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "cg",
"element": "system",
"transform": "copy",
"parameter": [
{
"valueString": "https://fhir.slade360.co.ke/fhir/CodeSystem/concept-codesystem"
}
]
}
]
},
{
"name": "cd",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "cg",
"element": "code",
"transform": "copy",
"parameter": [
{
"valueString": "anticoagulation-coagulation-profile"
}
]
}
]
},
{
"name": "dsp",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "cg",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "Coagulation profile"
}
]
}
]
}
]
}
],
"documentation": "A local code. LOINC publishes every individual coagulation analyte but\r\nnothing for the profile as ordered -- the panel codes that look right\r\n(34530-4, 34530-6) are an ABO and Rh group panel -- and a guessed panel\r\ncode on a laboratory order is worse than a local one that says exactly\r\nwhat the form asks for."
},
{
"name": "requestGroup",
"source": [
{
"context": "qr",
"element": "item",
"variable": "g",
"condition": "linkId = 'request'"
}
],
"rule": [
{
"name": "requesterRule",
"source": [
{
"context": "g",
"element": "item",
"variable": "it",
"condition": "(linkId = 'request/requester') and answer.value.exists()"
}
],
"rule": [
{
"name": "answer",
"source": [
{
"context": "it",
"element": "answer",
"listMode": "first",
"variable": "a"
}
],
"rule": [
{
"name": "requester",
"source": [
{
"context": "a",
"element": "value",
"variable": "ref"
}
],
"target": [
{
"context": "sr",
"element": "requester",
"transform": "copy",
"parameter": [
{
"valueId": "ref"
}
]
}
]
}
]
}
]
},
{
"name": "urgencyRule",
"source": [
{
"context": "g",
"element": "item",
"variable": "it",
"condition": "(linkId = 'request/urgency') and answer.value.exists()"
}
],
"rule": [
{
"name": "desperateRule",
"source": [
{
"context": "it",
"element": "answer",
"listMode": "first",
"variable": "a"
}
],
"rule": [
{
"name": "stat",
"source": [
{
"context": "a",
"element": "value",
"variable": "cv",
"condition": "code = 'lab-urgency-desperate'"
}
],
"target": [
{
"context": "sr",
"element": "priority",
"transform": "copy",
"parameter": [
{
"valueString": "stat"
}
]
}
]
}
]
},
{
"name": "urgentRule",
"source": [
{
"context": "it",
"element": "answer",
"listMode": "first",
"variable": "a"
}
],
"rule": [
{
"name": "urgent",
"source": [
{
"context": "a",
"element": "value",
"variable": "cv",
"condition": "code = 'lab-urgency-urgent'"
}
],
"target": [
{
"context": "sr",
"element": "priority",
"transform": "copy",
"parameter": [
{
"valueString": "urgent"
}
]
}
]
}
]
},
{
"name": "routineRule",
"source": [
{
"context": "it",
"element": "answer",
"listMode": "first",
"variable": "a"
}
],
"rule": [
{
"name": "routine",
"source": [
{
"context": "a",
"element": "value",
"variable": "cv",
"condition": "code = 'lab-urgency-routine'"
}
],
"target": [
{
"context": "sr",
"element": "priority",
"transform": "copy",
"parameter": [
{
"valueString": "routine"
}
]
}
]
}
]
}
]
},
{
"name": "specimenRule",
"source": [
{
"context": "g",
"element": "item",
"variable": "it",
"condition": "(linkId = 'request/specimen') and answer.value.exists()"
}
],
"rule": [
{
"name": "answer",
"source": [
{
"context": "it",
"element": "answer",
"listMode": "first",
"variable": "a"
}
],
"rule": [
{
"name": "specimen",
"source": [
{
"context": "a",
"element": "value",
"variable": "txt"
}
],
"target": [
{
"context": "sr",
"element": "specimen",
"variable": "spref",
"transform": "create",
"parameter": [
{
"valueString": "Reference"
}
]
},
{
"context": "spref",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueId": "txt"
}
]
}
]
}
]
}
]
}
]
},
{
"name": "historyRule",
"source": [
{
"context": "qr",
"element": "item",
"variable": "it",
"condition": "(linkId = 'clinical-history') and answer.value.exists()"
}
],
"rule": [
{
"name": "answer",
"source": [
{
"context": "it",
"element": "answer",
"listMode": "first",
"variable": "a"
}
],
"rule": [
{
"name": "historyNote",
"source": [
{
"context": "a",
"element": "value",
"variable": "txt"
}
],
"target": [
{
"context": "sr",
"element": "note",
"variable": "n"
},
{
"context": "n",
"element": "text",
"transform": "copy",
"parameter": [
{
"valueId": "txt"
}
]
}
]
}
]
}
]
}
]
},
{
"name": "resultsGroup",
"source": [
{
"context": "qr",
"element": "item",
"variable": "g",
"condition": "linkId = 'results'"
}
],
"rule": [
{
"name": "prothrombinTime",
"source": [
{
"context": "g",
"element": "item",
"variable": "it",
"condition": "(linkId = 'results/prothrombin-time') and answer.value.ofType(Quantity).exists()"
}
],
"target": [
{
"context": "bundle",
"element": "entry",
"variable": "entry"
},
{
"context": "entry",
"element": "resource",
"variable": "obs",
"transform": "create",
"parameter": [
{
"valueString": "Observation"
}
]
}
],
"rule": [
{
"name": "base",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "obs"
},
{
"context": "entry"
}
],
"dependent": [
{
"name": "BuildObsBase",
"parameter": [
{
"valueId": "qr"
},
{
"valueId": "obs"
},
{
"valueId": "entry"
}
]
}
]
},
{
"name": "category",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "obs"
}
],
"dependent": [
{
"name": "SetLaboratoryCategory",
"parameter": [
{
"valueId": "qr"
},
{
"valueId": "obs"
}
]
}
]
},
{
"name": "code",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "obs",
"element": "code",
"variable": "cc"
}
],
"rule": [
{
"name": "coding",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "cc",
"element": "coding",
"variable": "cg"
}
],
"rule": [
{
"name": "sys",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "cg",
"element": "system",
"transform": "copy",
"parameter": [
{
"valueString": "http://loinc.org"
}
]
}
]
},
{
"name": "cd",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "cg",
"element": "code",
"transform": "copy",
"parameter": [
{
"valueString": "5964-2"
}
]
}
]
},
{
"name": "dsp",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "cg",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "Prothrombin time (PT) in Blood by Coagulation assay"
}
]
}
]
}
]
}
]
},
{
"name": "answer",
"source": [
{
"context": "it",
"element": "answer",
"listMode": "first",
"variable": "a"
}
],
"rule": [
{
"name": "value",
"source": [
{
"context": "a",
"element": "value",
"variable": "v"
}
],
"target": [
{
"context": "obs",
"element": "value",
"transform": "copy",
"parameter": [
{
"valueId": "v"
}
]
}
]
}
]
},
{
"name": "referenceRange",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "obs",
"element": "referenceRange",
"variable": "rr"
}
],
"rule": [
{
"name": "low",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "rr",
"element": "low",
"variable": "lo",
"transform": "create",
"parameter": [
{
"valueString": "Quantity"
}
]
}
],
"rule": [
{
"name": "loValue",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "lo",
"element": "value",
"transform": "copy",
"parameter": [
{
"valueString": "11"
}
]
}
]
},
{
"name": "loUnit",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "lo",
"element": "unit",
"transform": "copy",
"parameter": [
{
"valueString": "seconds"
}
]
}
]
},
{
"name": "loSystem",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "lo",
"element": "system",
"transform": "copy",
"parameter": [
{
"valueString": "http://unitsofmeasure.org"
}
]
}
]
},
{
"name": "loCode",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "lo",
"element": "code",
"transform": "copy",
"parameter": [
{
"valueString": "s"
}
]
}
]
}
]
},
{
"name": "high",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "rr",
"element": "high",
"variable": "hi",
"transform": "create",
"parameter": [
{
"valueString": "Quantity"
}
]
}
],
"rule": [
{
"name": "hiValue",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "hi",
"element": "value",
"transform": "copy",
"parameter": [
{
"valueString": "16"
}
]
}
]
},
{
"name": "hiUnit",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "hi",
"element": "unit",
"transform": "copy",
"parameter": [
{
"valueString": "seconds"
}
]
}
]
},
{
"name": "hiSystem",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "hi",
"element": "system",
"transform": "copy",
"parameter": [
{
"valueString": "http://unitsofmeasure.org"
}
]
}
]
},
{
"name": "hiCode",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "hi",
"element": "code",
"transform": "copy",
"parameter": [
{
"valueString": "s"
}
]
}
]
}
]
},
{
"name": "rrText",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "rr",
"element": "text",
"transform": "copy",
"parameter": [
{
"valueString": "Reference range printed on the coagulation profile form"
}
]
}
]
}
]
},
{
"name": "context",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "obs"
}
],
"dependent": [
{
"name": "SetCoagulationContext",
"parameter": [
{
"valueId": "qr"
},
{
"valueId": "obs"
}
]
}
]
}
],
"documentation": "── Prothrombin time ──────────────────────────────────────────────────"
},
{
"name": "aptt",
"source": [
{
"context": "g",
"element": "item",
"variable": "it",
"condition": "(linkId = 'results/aptt') and answer.value.ofType(Quantity).exists()"
}
],
"target": [
{
"context": "bundle",
"element": "entry",
"variable": "entry"
},
{
"context": "entry",
"element": "resource",
"variable": "obs",
"transform": "create",
"parameter": [
{
"valueString": "Observation"
}
]
}
],
"rule": [
{
"name": "base",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "obs"
},
{
"context": "entry"
}
],
"dependent": [
{
"name": "BuildObsBase",
"parameter": [
{
"valueId": "qr"
},
{
"valueId": "obs"
},
{
"valueId": "entry"
}
]
}
]
},
{
"name": "category",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "obs"
}
],
"dependent": [
{
"name": "SetLaboratoryCategory",
"parameter": [
{
"valueId": "qr"
},
{
"valueId": "obs"
}
]
}
]
},
{
"name": "code",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "obs",
"element": "code",
"variable": "cc"
}
],
"rule": [
{
"name": "coding",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "cc",
"element": "coding",
"variable": "cg"
}
],
"rule": [
{
"name": "sys",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "cg",
"element": "system",
"transform": "copy",
"parameter": [
{
"valueString": "http://loinc.org"
}
]
}
]
},
{
"name": "cd",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "cg",
"element": "code",
"transform": "copy",
"parameter": [
{
"valueString": "3173-2"
}
]
}
]
},
{
"name": "dsp",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "cg",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "aPTT in Blood by Coagulation assay"
}
]
}
]
}
]
}
]
},
{
"name": "answer",
"source": [
{
"context": "it",
"element": "answer",
"listMode": "first",
"variable": "a"
}
],
"rule": [
{
"name": "value",
"source": [
{
"context": "a",
"element": "value",
"variable": "v"
}
],
"target": [
{
"context": "obs",
"element": "value",
"transform": "copy",
"parameter": [
{
"valueId": "v"
}
]
}
]
}
]
},
{
"name": "referenceRange",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "obs",
"element": "referenceRange",
"variable": "rr"
}
],
"rule": [
{
"name": "low",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "rr",
"element": "low",
"variable": "lo",
"transform": "create",
"parameter": [
{
"valueString": "Quantity"
}
]
}
],
"rule": [
{
"name": "loValue",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "lo",
"element": "value",
"transform": "copy",
"parameter": [
{
"valueString": "26.1"
}
]
}
]
},
{
"name": "loUnit",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "lo",
"element": "unit",
"transform": "copy",
"parameter": [
{
"valueString": "seconds"
}
]
}
]
},
{
"name": "loSystem",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "lo",
"element": "system",
"transform": "copy",
"parameter": [
{
"valueString": "http://unitsofmeasure.org"
}
]
}
]
},
{
"name": "loCode",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "lo",
"element": "code",
"transform": "copy",
"parameter": [
{
"valueString": "s"
}
]
}
]
}
]
},
{
"name": "high",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "rr",
"element": "high",
"variable": "hi",
"transform": "create",
"parameter": [
{
"valueString": "Quantity"
}
]
}
],
"rule": [
{
"name": "hiValue",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "hi",
"element": "value",
"transform": "copy",
"parameter": [
{
"valueString": "36.3"
}
]
}
]
},
{
"name": "hiUnit",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "hi",
"element": "unit",
"transform": "copy",
"parameter": [
{
"valueString": "seconds"
}
]
}
]
},
{
"name": "hiSystem",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "hi",
"element": "system",
"transform": "copy",
"parameter": [
{
"valueString": "http://unitsofmeasure.org"
}
]
}
]
},
{
"name": "hiCode",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "hi",
"element": "code",
"transform": "copy",
"parameter": [
{
"valueString": "s"
}
]
}
]
}
]
},
{
"name": "rrText",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "rr",
"element": "text",
"transform": "copy",
"parameter": [
{
"valueString": "Reference range printed on the coagulation profile form"
}
]
}
]
}
]
},
{
"name": "context",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "obs"
}
],
"dependent": [
{
"name": "SetCoagulationContext",
"parameter": [
{
"valueId": "qr"
},
{
"valueId": "obs"
}
]
}
]
}
],
"documentation": "── APTT ──────────────────────────────────────────────────────────────"
},
{
"name": "inr",
"source": [
{
"context": "g",
"element": "item",
"variable": "it",
"condition": "(linkId = 'results/inr') and answer.value.exists()"
}
],
"target": [
{
"context": "bundle",
"element": "entry",
"variable": "entry"
},
{
"context": "entry",
"element": "resource",
"variable": "obs",
"transform": "create",
"parameter": [
{
"valueString": "Observation"
}
]
}
],
"rule": [
{
"name": "base",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "obs"
},
{
"context": "entry"
}
],
"dependent": [
{
"name": "BuildObsBase",
"parameter": [
{
"valueId": "qr"
},
{
"valueId": "obs"
},
{
"valueId": "entry"
}
]
}
]
},
{
"name": "category",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "obs"
}
],
"dependent": [
{
"name": "SetLaboratoryCategory",
"parameter": [
{
"valueId": "qr"
},
{
"valueId": "obs"
}
]
}
]
},
{
"name": "code",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "obs",
"element": "code",
"variable": "cc"
}
],
"rule": [
{
"name": "coding",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "cc",
"element": "coding",
"variable": "cg"
}
],
"rule": [
{
"name": "sys",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "cg",
"element": "system",
"transform": "copy",
"parameter": [
{
"valueString": "http://loinc.org"
}
]
}
]
},
{
"name": "cd",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "cg",
"element": "code",
"transform": "copy",
"parameter": [
{
"valueString": "6301-6"
}
]
}
]
},
{
"name": "dsp",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "cg",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "INR in Platelet poor plasma by Coagulation assay"
}
]
}
]
}
]
}
]
},
{
"name": "answer",
"source": [
{
"context": "it",
"element": "answer",
"listMode": "first",
"variable": "a"
}
],
"rule": [
{
"name": "quantity",
"source": [
{
"context": "a",
"element": "value",
"variable": "v"
}
],
"target": [
{
"context": "obs",
"element": "value",
"variable": "q",
"transform": "create",
"parameter": [
{
"valueString": "Quantity"
}
]
}
],
"rule": [
{
"name": "qValue",
"source": [
{
"context": "v"
}
],
"target": [
{
"context": "q",
"element": "value",
"transform": "copy",
"parameter": [
{
"valueId": "v"
}
]
}
]
},
{
"name": "qUnit",
"source": [
{
"context": "v"
}
],
"target": [
{
"context": "q",
"element": "unit",
"transform": "copy",
"parameter": [
{
"valueString": "ratio"
}
]
}
]
},
{
"name": "qSystem",
"source": [
{
"context": "v"
}
],
"target": [
{
"context": "q",
"element": "system",
"transform": "copy",
"parameter": [
{
"valueString": "http://unitsofmeasure.org"
}
]
}
]
},
{
"name": "qCode",
"source": [
{
"context": "v"
}
],
"target": [
{
"context": "q",
"element": "code",
"transform": "copy",
"parameter": [
{
"valueString": "1"
}
]
}
]
}
]
}
]
},
{
"name": "anticoagulationGroup",
"source": [
{
"context": "qr",
"element": "item",
"variable": "ac",
"condition": "linkId = 'anticoagulation'"
}
],
"rule": [
{
"name": "onAnticoagulantRule",
"source": [
{
"context": "ac",
"element": "item",
"variable": "oa",
"condition": "(linkId = 'anticoagulation/on-oral-anticoagulant') and (answer.value.ofType(Coding).code = 'Y')"
}
],
"rule": [
{
"name": "referenceRange",
"source": [
{
"context": "oa"
}
],
"target": [
{
"context": "obs",
"element": "referenceRange",
"variable": "rr"
}
],
"rule": [
{
"name": "low",
"source": [
{
"context": "oa"
}
],
"target": [
{
"context": "rr",
"element": "low",
"variable": "lo",
"transform": "create",
"parameter": [
{
"valueString": "Quantity"
}
]
}
],
"rule": [
{
"name": "loValue",
"source": [
{
"context": "oa"
}
],
"target": [
{
"context": "lo",
"element": "value",
"transform": "copy",
"parameter": [
{
"valueString": "2.0"
}
]
}
]
},
{
"name": "loUnit",
"source": [
{
"context": "oa"
}
],
"target": [
{
"context": "lo",
"element": "unit",
"transform": "copy",
"parameter": [
{
"valueString": "ratio"
}
]
}
]
},
{
"name": "loSystem",
"source": [
{
"context": "oa"
}
],
"target": [
{
"context": "lo",
"element": "system",
"transform": "copy",
"parameter": [
{
"valueString": "http://unitsofmeasure.org"
}
]
}
]
},
{
"name": "loCode",
"source": [
{
"context": "oa"
}
],
"target": [
{
"context": "lo",
"element": "code",
"transform": "copy",
"parameter": [
{
"valueString": "1"
}
]
}
]
}
]
},
{
"name": "high",
"source": [
{
"context": "oa"
}
],
"target": [
{
"context": "rr",
"element": "high",
"variable": "hi",
"transform": "create",
"parameter": [
{
"valueString": "Quantity"
}
]
}
],
"rule": [
{
"name": "hiValue",
"source": [
{
"context": "oa"
}
],
"target": [
{
"context": "hi",
"element": "value",
"transform": "copy",
"parameter": [
{
"valueString": "3.5"
}
]
}
]
},
{
"name": "hiUnit",
"source": [
{
"context": "oa"
}
],
"target": [
{
"context": "hi",
"element": "unit",
"transform": "copy",
"parameter": [
{
"valueString": "ratio"
}
]
}
]
},
{
"name": "hiSystem",
"source": [
{
"context": "oa"
}
],
"target": [
{
"context": "hi",
"element": "system",
"transform": "copy",
"parameter": [
{
"valueString": "http://unitsofmeasure.org"
}
]
}
]
},
{
"name": "hiCode",
"source": [
{
"context": "oa"
}
],
"target": [
{
"context": "hi",
"element": "code",
"transform": "copy",
"parameter": [
{
"valueString": "1"
}
]
}
]
}
]
},
{
"name": "rrText",
"source": [
{
"context": "oa"
}
],
"target": [
{
"context": "rr",
"element": "text",
"transform": "copy",
"parameter": [
{
"valueString": "Therapeutic range for a patient on stabilised oral anticoagulant therapy, as printed on the form"
}
]
}
]
}
]
}
]
}
],
"documentation": "The printed 2.0-3.5 range attaches only where the patient is on\r\nstabilised oral anticoagulants. For anyone else it is not a target and\r\nattaching it would mark every unanticoagulated patient abnormal."
},
{
"name": "context",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "obs"
}
],
"dependent": [
{
"name": "SetCoagulationContext",
"parameter": [
{
"valueId": "qr"
},
{
"valueId": "obs"
}
]
}
]
}
],
"documentation": "── INR ───────────────────────────────────────────────────────────────\r\nObservation.value[x] has no decimal choice, so the INR -- a bare ratio\r\nwith no unit -- has to be built as a Quantity with UCUM's unity code."
}
]
},
{
"name": "narr_55752_0",
"source": [
{
"context": "qr",
"element": "item",
"variable": "it",
"condition": "(linkId = 'clinical-history') and answer.value.exists()"
}
],
"target": [
{
"context": "bundle",
"element": "entry",
"variable": "entry"
},
{
"context": "entry",
"element": "resource",
"variable": "obs",
"transform": "create",
"parameter": [
{
"valueString": "Observation"
}
]
}
],
"rule": [
{
"name": "base",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "obs"
},
{
"context": "entry"
}
],
"dependent": [
{
"name": "BuildObsBase",
"parameter": [
{
"valueId": "qr"
},
{
"valueId": "obs"
},
{
"valueId": "entry"
}
]
}
]
},
{
"name": "category",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "obs"
}
],
"dependent": [
{
"name": "SetSurveyCategory",
"parameter": [
{
"valueId": "qr"
},
{
"valueId": "obs"
}
]
}
]
},
{
"name": "code",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "obs",
"element": "code",
"variable": "cc"
}
],
"rule": [
{
"name": "coding",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "cc",
"element": "coding",
"variable": "cg"
}
],
"rule": [
{
"name": "sys",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "cg",
"element": "system",
"transform": "copy",
"parameter": [
{
"valueString": "http://loinc.org"
}
]
}
]
},
{
"name": "cd",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "cg",
"element": "code",
"transform": "copy",
"parameter": [
{
"valueString": "55752-0"
}
]
}
]
},
{
"name": "dsp",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "cg",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "Clinical information"
}
]
}
]
}
]
},
{
"name": "codeText",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "cc",
"element": "text",
"transform": "copy",
"parameter": [
{
"valueString": "Clinical history given to the coagulation laboratory"
}
]
}
]
}
]
},
{
"name": "answer",
"source": [
{
"context": "it",
"element": "answer",
"listMode": "first",
"variable": "a"
}
],
"rule": [
{
"name": "text",
"source": [
{
"context": "a",
"element": "value",
"variable": "txt"
}
],
"target": [
{
"context": "obs",
"element": "note",
"variable": "n"
},
{
"context": "n",
"element": "text",
"transform": "copy",
"parameter": [
{
"valueId": "txt"
}
]
}
]
}
]
}
]
},
{
"name": "anticoagulationObs",
"source": [
{
"context": "qr",
"element": "item",
"variable": "g",
"condition": "linkId = 'anticoagulation'"
}
],
"rule": [
{
"name": "coded_anticoagulation",
"source": [
{
"context": "g",
"element": "item",
"variable": "it",
"condition": "(linkId = 'anticoagulation/on-oral-anticoagulant') and answer.value.exists()"
}
],
"target": [
{
"context": "bundle",
"element": "entry",
"variable": "entry"
},
{
"context": "entry",
"element": "resource",
"variable": "obs",
"transform": "create",
"parameter": [
{
"valueString": "Observation"
}
]
}
],
"rule": [
{
"name": "base",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "obs"
},
{
"context": "entry"
}
],
"dependent": [
{
"name": "BuildObsBase",
"parameter": [
{
"valueId": "qr"
},
{
"valueId": "obs"
},
{
"valueId": "entry"
}
]
}
]
},
{
"name": "category",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "obs"
}
],
"dependent": [
{
"name": "SetSurveyCategory",
"parameter": [
{
"valueId": "qr"
},
{
"valueId": "obs"
}
]
}
]
},
{
"name": "code",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "obs",
"element": "code",
"variable": "cc"
}
],
"rule": [
{
"name": "coding",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "cc",
"element": "coding",
"variable": "cg"
}
],
"rule": [
{
"name": "sys",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "cg",
"element": "system",
"transform": "copy",
"parameter": [
{
"valueString": "https://fhir.slade360.co.ke/fhir/CodeSystem/concept-codesystem"
}
]
}
]
},
{
"name": "cd",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "cg",
"element": "code",
"transform": "copy",
"parameter": [
{
"valueString": "anticoagulation-on-stabilised-oral-anticoagulant-therapy"
}
]
}
]
},
{
"name": "dsp",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "cg",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "On stabilised oral anticoagulant therapy"
}
]
}
]
}
]
}
]
},
{
"name": "answer",
"source": [
{
"context": "it",
"element": "answer",
"listMode": "first",
"variable": "a"
}
],
"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": "narr_anticoagulation_anticoagulant_agent_and_dose",
"source": [
{
"context": "g",
"element": "item",
"variable": "it",
"condition": "(linkId = 'anticoagulation/agent') and answer.value.exists()"
}
],
"target": [
{
"context": "bundle",
"element": "entry",
"variable": "entry"
},
{
"context": "entry",
"element": "resource",
"variable": "obs",
"transform": "create",
"parameter": [
{
"valueString": "Observation"
}
]
}
],
"rule": [
{
"name": "base",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "obs"
},
{
"context": "entry"
}
],
"dependent": [
{
"name": "BuildObsBase",
"parameter": [
{
"valueId": "qr"
},
{
"valueId": "obs"
},
{
"valueId": "entry"
}
]
}
]
},
{
"name": "category",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "obs"
}
],
"dependent": [
{
"name": "SetSurveyCategory",
"parameter": [
{
"valueId": "qr"
},
{
"valueId": "obs"
}
]
}
]
},
{
"name": "code",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "obs",
"element": "code",
"variable": "cc"
}
],
"rule": [
{
"name": "coding",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "cc",
"element": "coding",
"variable": "cg"
}
],
"rule": [
{
"name": "sys",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "cg",
"element": "system",
"transform": "copy",
"parameter": [
{
"valueString": "https://fhir.slade360.co.ke/fhir/CodeSystem/concept-codesystem"
}
]
}
]
},
{
"name": "cd",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "cg",
"element": "code",
"transform": "copy",
"parameter": [
{
"valueString": "anticoagulation-anticoagulant-agent-and-dose"
}
]
}
]
},
{
"name": "dsp",
"source": [
{
"context": "it"
}
],
"target": [
{
"context": "cg",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "Anticoagulant agent and dose"
}
]
}
]
}
]
}
]
},
{
"name": "answer",
"source": [
{
"context": "it",
"element": "answer",
"listMode": "first",
"variable": "a"
}
],
"rule": [
{
"name": "text",
"source": [
{
"context": "a",
"element": "value",
"variable": "txt"
}
],
"target": [
{
"context": "obs",
"element": "note",
"variable": "n"
},
{
"context": "n",
"element": "text",
"transform": "copy",
"parameter": [
{
"valueId": "txt"
}
]
}
]
}
]
}
]
}
]
}
]
},
{
"name": "SetCoagulationContext",
"input": [
{
"name": "qr",
"type": "QR",
"mode": "source"
},
{
"name": "obs",
"type": "Observation",
"mode": "target"
}
],
"rule": [
{
"name": "laboratoryGroup",
"source": [
{
"context": "qr",
"element": "item",
"variable": "g",
"condition": "linkId = 'laboratory'"
}
],
"rule": [
{
"name": "collectedAtRule",
"source": [
{
"context": "g",
"element": "item",
"variable": "it",
"condition": "(linkId = 'laboratory/collected-at') and answer.value.exists()"
}
],
"rule": [
{
"name": "answer",
"source": [
{
"context": "it",
"element": "answer",
"listMode": "first",
"variable": "a"
}
],
"rule": [
{
"name": "effective",
"source": [
{
"context": "a",
"element": "value",
"variable": "v"
}
],
"target": [
{
"context": "obs",
"element": "effective",
"transform": "copy",
"parameter": [
{
"valueId": "v"
}
]
}
]
}
]
}
]
},
{
"name": "testedByRule",
"source": [
{
"context": "g",
"element": "item",
"variable": "it",
"condition": "(linkId = 'laboratory/tested-by') and answer.value.exists()"
}
],
"rule": [
{
"name": "answer",
"source": [
{
"context": "it",
"element": "answer",
"listMode": "first",
"variable": "a"
}
],
"rule": [
{
"name": "testedBy",
"source": [
{
"context": "a",
"element": "value",
"variable": "ref"
}
],
"target": [
{
"context": "obs",
"element": "performer",
"transform": "copy",
"parameter": [
{
"valueId": "ref"
}
]
}
]
}
]
}
]
},
{
"name": "dispatchedRule",
"source": [
{
"context": "g",
"element": "item",
"variable": "it",
"condition": "(linkId = 'laboratory/dispatched-at') and answer.value.exists()"
}
],
"rule": [
{
"name": "answer",
"source": [
{
"context": "it",
"element": "answer",
"listMode": "first",
"variable": "a"
}
],
"rule": [
{
"name": "issued",
"source": [
{
"context": "a",
"element": "value",
"variable": "v"
}
],
"target": [
{
"context": "obs",
"element": "issued",
"transform": "cast",
"parameter": [
{
"valueId": "v"
},
{
"valueString": "instant"
}
]
}
]
}
]
}
]
},
{
"name": "labRegRule",
"source": [
{
"context": "g",
"element": "item",
"variable": "it",
"condition": "(linkId = 'laboratory/lab-registration-number') and answer.value.exists()"
}
],
"rule": [
{
"name": "answer",
"source": [
{
"context": "it",
"element": "answer",
"listMode": "first",
"variable": "a"
}
],
"rule": [
{
"name": "identifier",
"source": [
{
"context": "a",
"element": "value",
"variable": "txt"
}
],
"target": [
{
"context": "obs",
"element": "identifier",
"variable": "ident"
}
],
"rule": [
{
"name": "identSystem",
"source": [
{
"context": "txt"
}
],
"target": [
{
"context": "ident",
"element": "system",
"transform": "copy",
"parameter": [
{
"valueString": "https://fhir.slade360.co.ke/fhir/identifier/lab-registration"
}
]
}
]
},
{
"name": "identValue",
"source": [
{
"context": "txt"
}
],
"target": [
{
"context": "ident",
"element": "value",
"transform": "copy",
"parameter": [
{
"valueId": "txt"
}
]
}
]
}
]
}
]
}
]
}
]
}
]
},
{
"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\nTwo notes on what the publisher's StructureMap validator says about this file.\r\nSource parameters below are left untyped on purpose. Writing `: Element` makes\r\nthe validator compare QuestionnaireResponse.item against the literal 'Element'\r\nand report them as incompatible with each other, which is noise, not a finding.\r\n`evaluate(context, expression)` is flagged as \"takes 1 parameter but 2 were\r\nfound\". Leave it. The FML parser in the same jar refuses the one-argument form\r\noutright -- it wants a parameter, a comma, then the FHIRPath -- so the\r\npublisher is objecting to what its own compiler emits. Two arguments is the\r\nonly form that compiles, and it is what the R5 transform engine executes.\r\n─────────────────────────────────────────────────────────────────────────────",
"input": [
{
"name": "qr",
"type": "QR",
"mode": "source"
},
{
"name": "obs",
"type": "Observation",
"mode": "target"
},
{
"name": "entry",
"mode": "target"
}
],
"rule": [
{
"name": "responseProvenance",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "obs"
}
],
"dependent": [
{
"name": "SetResponseProvenance",
"parameter": [
{
"valueId": "qr"
},
{
"valueId": "obs"
}
]
}
]
},
{
"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",
"element": "id",
"variable": "qid",
"condition": "$this.hasValue()"
}
],
"target": [
{
"context": "obs",
"element": "derivedFrom",
"variable": "ref",
"transform": "create",
"parameter": [
{
"valueString": "Reference"
}
]
},
{
"context": "ref",
"element": "reference",
"transform": "copy",
"parameter": [
{
"valueId": "qid"
}
]
}
],
"documentation": "A stored response's id already reads \"QuestionnaireResponse/<id>\", so it is\r\na relative reference as it stands. The hasValue() guard is what stops an\r\nunsaved response -- one posted straight to $extract rather than saved first\r\n-- from writing \"QuestionnaireResponse/null\" into the record."
}
]
},
{
"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": "SetComponentCodedValue",
"documentation": "The two answer shapes a component can carry. Both read the answer through the\r\nuntyped `.value` accessor: reading `valueCoding` or `valueQuantity` by its\r\ntyped property name fails at transform time on HAPI R5 with \"Attempt to read\r\ninvalid property ... on QuestionnaireResponse.item.answer\".",
"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": "SetComponentValue",
"input": [
{
"name": "it",
"mode": "source"
},
{
"name": "comp",
"mode": "target"
}
],
"rule": [
{
"name": "componentAnswer",
"source": [
{
"context": "it",
"element": "answer",
"listMode": "first",
"variable": "a"
}
],
"rule": [
{
"name": "plainValue",
"source": [
{
"context": "a",
"element": "value",
"variable": "v"
}
],
"target": [
{
"context": "comp",
"element": "value",
"transform": "copy",
"parameter": [
{
"valueId": "v"
}
]
}
]
}
]
}
]
},
{
"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": "SetLaboratoryCategory",
"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": "laboratory"
}
]
}
]
},
{
"name": "categoryDisplay",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "coding",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "Laboratory"
}
]
}
]
}
]
}
]
}
]
},
{
"name": "BuildServiceRequestBase",
"input": [
{
"name": "qr",
"type": "QR",
"mode": "source"
},
{
"name": "r",
"type": "ServiceRequest",
"mode": "target"
},
{
"name": "entry",
"mode": "target"
}
],
"rule": [
{
"name": "responseProvenance",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "r"
}
],
"dependent": [
{
"name": "SetResponseProvenance",
"parameter": [
{
"valueId": "qr"
},
{
"valueId": "r"
}
]
}
]
},
{
"name": "idAndFullUrl",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "r",
"element": "id",
"transform": "uuid"
}
],
"dependent": [
{
"name": "SetServiceRequestFullUrl",
"parameter": [
{
"valueId": "r"
},
{
"valueId": "entry"
}
]
}
]
},
{
"name": "entryRequest",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "entry",
"element": "request",
"variable": "request"
}
],
"rule": [
{
"name": "requestMethod",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "request",
"element": "method",
"transform": "copy",
"parameter": [
{
"valueString": "POST"
}
]
}
]
},
{
"name": "requestUrl",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "request",
"element": "url",
"transform": "copy",
"parameter": [
{
"valueString": "ServiceRequest"
}
]
}
]
}
]
},
{
"name": "subject",
"source": [
{
"context": "qr",
"element": "subject",
"variable": "s"
}
],
"target": [
{
"context": "r",
"element": "subject",
"transform": "copy",
"parameter": [
{
"valueId": "s"
}
]
}
]
}
]
},
{
"name": "SetServiceRequestFullUrl",
"input": [
{
"name": "r",
"type": "ServiceRequest",
"mode": "source"
},
{
"name": "entry",
"mode": "target"
}
],
"rule": [
{
"name": "assignFullUrl",
"source": [
{
"context": "r",
"element": "id",
"variable": "id"
}
],
"target": [
{
"context": "entry",
"element": "fullUrl",
"transform": "append",
"parameter": [
{
"valueString": "https://fhir.slade360.co.ke/fhir/ServiceRequest/"
},
{
"valueId": "id"
}
]
}
]
}
]
},
{
"name": "SetResponseProvenance",
"documentation": "── Provenance and tenancy ───────────────────────────────────────────────────\r\nTwo tags on everything this map creates. The first says which questionnaire\r\nproduced it, so a form that reopens mid-admission recalls its own earlier\r\nentries and not another form's. The second copies the tenant tags off the\r\nresponse, because nothing else on the path puts them there.\r\nThe code is the form's document type, not the questionnaire's id: every\r\nenvironment mints its own ids, and there is only one set of maps, so an id\r\nhere would tie the tag to whichever environment stamped it.\r\n── Provenance and tenancy ───────────────────────────────────────────────────",
"input": [
{
"name": "qr",
"type": "QR",
"mode": "source"
},
{
"name": "r",
"mode": "target"
}
],
"rule": [
{
"name": "provenanceMeta",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "r",
"element": "meta",
"variable": "m"
}
],
"rule": [
{
"name": "provenanceTag",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "m",
"element": "tag",
"variable": "t"
}
],
"rule": [
{
"name": "provenanceSystem",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "t",
"element": "system",
"transform": "copy",
"parameter": [
{
"valueString": "http://slade360edi.com/questionnaire-provenance"
}
]
}
]
},
{
"name": "provenanceCode",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "t",
"element": "code",
"transform": "copy",
"parameter": [
{
"valueString": "coagulation-profile-requisition"
}
]
}
]
},
{
"name": "provenanceDisplay",
"source": [
{
"context": "qr"
}
],
"target": [
{
"context": "t",
"element": "display",
"transform": "copy",
"parameter": [
{
"valueString": "Coagulation profile requisition"
}
]
}
]
}
]
}
]
},
{
"name": "tenantTags",
"source": [
{
"context": "qr",
"element": "meta",
"variable": "qm"
}
],
"rule": [
{
"name": "copyTag",
"source": [
{
"context": "qm",
"element": "tag",
"variable": "qt"
}
],
"target": [
{
"context": "r",
"element": "meta",
"variable": "m"
},
{
"context": "m",
"element": "tag",
"transform": "copy",
"parameter": [
{
"valueId": "qt"
}
]
}
]
}
],
"documentation": "Every tag the response carries, onto the resource. `meta` is 0..1, so this\r\nlands on the same meta the rule above created rather than a second one."
}
]
}
]
}