SGHI FHIR Profile Implementation Guide
0.1.0 - ci-build

SGHI FHIR Profile Implementation Guide, published by Kathurima Kimathi. This guide is not an authorized publication; it is the continuous build for version 0.1.0 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/savannahghi/sil_fhir_profile_ig/ and changes regularly. See the Directory of published versions

: Procedure Consent Extraction - JSON Representation

Active as of 2026-09-14

Raw json | Download

{
  "resourceType" : "StructureMap",
  "id" : "ExtractProcedureConsent",
  "text" : {
    "status" : "generated",
    "div" : "<div xmlns=\"http://www.w3.org/1999/xhtml\"><p class=\"res-header-id\"><b>Generated Narrative: StructureMap ExtractProcedureConsent</b></p><a name=\"ExtractProcedureConsent\"> </a><a name=\"hcExtractProcedureConsent\"> </a><pre class=\"fml\">\r\n<span style=\"color: #cc00cc\">/// <b>url</b> = </span><span style=\"color: blue\">'https://fhir.slade360.co.ke/fhir/StructureMap/ExtractProcedureConsent'</span>\r\n<span style=\"color: #cc00cc\">/// <b>name</b> = </span><span style=\"color: blue\">'ExtractProcedureConsent'</span>\r\n<span style=\"color: #cc00cc\">/// <b>title</b> = </span><span style=\"color: blue\">'Procedure Consent Extraction'</span>\r\n<span style=\"color: #cc00cc\">/// <b>status</b> = </span><span style=\"color: blue\">'active'</span>\r\n<span style=\"color: #cc00cc\">/// <b>description</b> = </span><span style=\"color: blue\">'The three consent forms out as one Consent, with a provision per authorisation actually given: the procedure itself, the further-measures clause, the anaesthesia clause, and on an endoscopy form the tissue-disposal clause and each procedure ticked. Each provision is written only when its box was answered yes, so a consent nobody gave never appears as one. An Observation records whether the explanation was given in a language the person consenting understood, because that is what makes the consent informed and what an audit or a complaint turns on.'</span>\r\n\r\n<b>uses</b><span style=\"color: navy\"> &quot;</span><a href=\"http://hl7.org/fhir/R5/questionnaireresponse.html\" title=\"QuestionnaireResponse\">http://hl7.org/fhir/StructureDefinition/QuestionnaireResponse</a><span style=\"color: navy\">&quot; </span><b>alias </b>QR <b>as </b><b>source</b>\r\n<b>uses</b><span style=\"color: navy\"> &quot;</span><a href=\"http://hl7.org/fhir/R5/bundle.html\" title=\"Bundle\">http://hl7.org/fhir/StructureDefinition/Bundle</a><span style=\"color: navy\">&quot; </span><b>alias </b>Bundle <b>as </b><b>target</b>\r\n<b>uses</b><span style=\"color: navy\"> &quot;</span><a href=\"http://hl7.org/fhir/R5/consent.html\" title=\"Consent\">http://hl7.org/fhir/StructureDefinition/Consent</a><span style=\"color: navy\">&quot; </span><b>alias </b>Consent <b>as </b><b>target</b>\r\n<b>uses</b><span style=\"color: navy\"> &quot;</span><a href=\"http://hl7.org/fhir/R5/observation.html\" title=\"Observation\">http://hl7.org/fhir/StructureDefinition/Observation</a><span style=\"color: navy\">&quot; </span><b>alias </b>Observation <b>as </b><b>target</b>\r\n\r\n<b>group </b>ExtractProcedureConsent<span style=\"color: navy\">(</span><b>source</b> <span style=\"color: maroon\">qr</span><span style=\"color: navy\"> : </span>QR, <b>target</b> <span style=\"color: maroon\">bundle</span><span style=\"color: navy\"> : </span>Bundle<span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span>  qr<span style=\"color: navy\"><b> -&gt; </b></span>bundle.type = <span style=\"color: blue\">'transaction'</span> <i>&quot;setBundleType&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">── The Consent ─────────────────────────────────────────────────────────</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">Guarded on the person consenting having actually signed. Everything below</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">hangs off that signature, and a Consent built from a half-filled form</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">asserts a permission that was never given.</span>\r\n  qr<b> where </b><span style=\"color: navy\">(</span>item.where(linkId = 'signatures').item.where(linkId = 'signatures/consenter-signed').answer.value = true<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -&gt; </b></span> bundle.entry<b> as </b><span style=\"color: maroon\">entry</span><span style=\"color: navy\">, </span> entry.resource = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'Consent'</span><span style=\"color: navy\">)</span><b> as </b><span style=\"color: maroon\">consent</span><b> then</b><span style=\"color: navy\"> {\r\n</span>    qr<span style=\"color: navy\"><b> -&gt; </b></span> consent<span style=\"color: navy\">, </span> entry<b> then </b>BuildConsentBase<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">consent</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span> <i>&quot;base&quot;</i><span style=\"color: navy\">;</span>\r\n    qr<span style=\"color: navy\"><b> -&gt; </b></span>consent.status = <span style=\"color: blue\">'active'</span> <i>&quot;status&quot;</i><span style=\"color: navy\">;</span>\r\n    qr<span style=\"color: navy\"><b> -&gt; </b></span>consent.decision = <span style=\"color: blue\">'permit'</span> <i>&quot;decision&quot;</i><span style=\"color: navy\">;</span>\r\n    qr<span style=\"color: navy\"><b> -&gt; </b></span>consent.category<b> as </b><span style=\"color: maroon\">cat</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      qr<span style=\"color: navy\"><b> -&gt; </b></span>cat.coding<b> as </b><span style=\"color: maroon\">cg</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        qr<span style=\"color: navy\"><b> -&gt; </b></span>cg.system = <span style=\"color: blue\">'http://loinc.org'</span> <i>&quot;sys&quot;</i><span style=\"color: navy\">;</span>\r\n        qr<span style=\"color: navy\"><b> -&gt; </b></span>cg.code = <span style=\"color: blue\">'64293-4'</span> <i>&quot;cd&quot;</i><span style=\"color: navy\">;</span>\r\n        qr<span style=\"color: navy\"><b> -&gt; </b></span>cg.display = <span style=\"color: blue\">'Procedure consent Document'</span> <i>&quot;dsp&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;coding&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;category&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">// </span><span style=\"color: green\">The signing time, from the form. Not qr.authored: a consent taken the</span>\r\n    <span style=\"color: navy\">// </span><span style=\"color: green\">evening before an operation and transcribed the next morning would</span>\r\n    <span style=\"color: navy\">// </span><span style=\"color: green\">otherwise be dated to the transcription, which is the one date a dispute</span>\r\n    <span style=\"color: navy\">// </span><span style=\"color: green\">about consent turns on.</span>\r\n    qr.item<b> as </b><span style=\"color: maroon\">sg</span><b> where </b><span style=\"color: navy\">(</span>linkId = 'signatures'<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      sg.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'signatures/consenter-signed-at') and answer.value.exists()<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        it.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          <span style=\"color: navy\">// </span><span style=\"color: green\">The form asks for a date *and time* signed, and Consent.date is a</span>\r\n          <span style=\"color: navy\">// </span><span style=\"color: green\">`date`. The timestamp goes to Consent.period.start, which keeps it:</span>\r\n          <span style=\"color: navy\">// </span><span style=\"color: green\">a consent taken the evening before theatre and one taken in the</span>\r\n          <span style=\"color: navy\">// </span><span style=\"color: green\">anaesthetic room are hours apart and share a date.</span>\r\n          a.value<b> as </b><span style=\"color: maroon\">t</span><span style=\"color: navy\"><b> -&gt; </b></span> consent.period<b> as </b><span style=\"color: maroon\">per</span><span style=\"color: navy\">, </span> per.start = <span style=\"color: maroon\">t</span> <i>&quot;signedPeriodStart&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;signedAtRule&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;signaturesGroup&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">// </span><span style=\"color: green\">Who explained it becomes the verifier -- they attested that the</span>\r\n    <span style=\"color: navy\">// </span><span style=\"color: green\">discussion happened -- and who consented becomes the grantor.</span>\r\n    qr.item<b> as </b><span style=\"color: maroon\">eg</span><b> where </b><span style=\"color: navy\">(</span>linkId = 'explained-by'<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      eg.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'explained-by/clinician') and answer.value.exists()<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        it.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          a.value<b> as </b><span style=\"color: maroon\">ref</span><span style=\"color: navy\"><b> -&gt; </b></span>consent.verification<b> as </b><span style=\"color: maroon\">ver</span><b> then</b><span style=\"color: navy\"> {\r\n</span>            ref<span style=\"color: navy\"><b> -&gt; </b></span>ver.verified = <span style=\"color: blue\">true</span> <i>&quot;verified&quot;</i><span style=\"color: navy\">;</span>\r\n            ref<span style=\"color: navy\"><b> -&gt; </b></span>ver.verifiedBy = <span style=\"color: maroon\">ref</span> <i>&quot;verifiedBy&quot;</i><span style=\"color: navy\">;</span>\r\n          <span style=\"color: navy\">}</span> <i>&quot;verification&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;clinicianRule&quot;</i><span style=\"color: navy\">;</span>\r\n      eg.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'explained-by/what-was-explained') and answer.value.exists()<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        it.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          a.value<b> as </b><span style=\"color: maroon\">txt</span><span style=\"color: navy\"><b> -&gt; </b></span> consent.provision<b> as </b><span style=\"color: maroon\">prov</span><span style=\"color: navy\">, </span> prov.code<b> as </b><span style=\"color: maroon\">pc</span><span style=\"color: navy\">, </span> pc.text = <span style=\"color: maroon\">txt</span> <i>&quot;explanationProvision&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;explanationRule&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;explainedByGroup&quot;</i><span style=\"color: navy\">;</span>\r\n    qr.item<b> as </b><span style=\"color: maroon\">cg2</span><b> where </b><span style=\"color: navy\">(</span>linkId = 'consenter'<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      cg2.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'consenter/name') and answer.value.exists()<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        it.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          a.value<b> as </b><span style=\"color: maroon\">txt</span><span style=\"color: navy\"><b> -&gt; </b></span> consent.grantor = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'Reference'</span><span style=\"color: navy\">)</span><b> as </b><span style=\"color: maroon\">ref</span><span style=\"color: navy\">, </span> ref.display = <span style=\"color: maroon\">txt</span> <i>&quot;grantorDisplay&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;consenterNameRule&quot;</i><span style=\"color: navy\">;</span>\r\n      cg2.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'consenter/relationship') and answer.value.exists()<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        it.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          a.value<b> as </b><span style=\"color: maroon\">txt</span><span style=\"color: navy\"><b> -&gt; </b></span> consent.grantor = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'Reference'</span><span style=\"color: navy\">)</span><b> as </b><span style=\"color: maroon\">ref</span><span style=\"color: navy\">, </span> ref.display = <span style=\"color: maroon\">txt</span> <i>&quot;relationshipDisplay&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;relationshipRule&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;consenterGroup&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">// </span><span style=\"color: green\">── The provisions ────────────────────────────────────────────────────</span>\r\n    <span style=\"color: navy\">// </span><span style=\"color: green\">One per authorisation. The procedure itself is always a provision, since</span>\r\n    <span style=\"color: navy\">// </span><span style=\"color: green\">it is what the form exists for; the rest appear only where their own box</span>\r\n    <span style=\"color: navy\">// </span><span style=\"color: green\">was answered yes.</span>\r\n    qr.item<b> as </b><span style=\"color: maroon\">g</span><b> where </b><span style=\"color: navy\">(</span>linkId = 'consent-for'<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      g.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'consent-for/procedure') and answer.value.exists()<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -&gt; </b></span>consent.provision<b> as </b><span style=\"color: maroon\">prov</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        it.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          a.value<b> as </b><span style=\"color: maroon\">txt</span><span style=\"color: navy\"><b> -&gt; </b></span> prov.code<b> as </b><span style=\"color: maroon\">pc</span><span style=\"color: navy\">, </span> pc.text = <span style=\"color: maroon\">txt</span> <i>&quot;procedureText&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;procedureProvision&quot;</i><span style=\"color: navy\">;</span>\r\n      g.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'consent-for/planned-for') and answer.value.exists()<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        it.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          a.value<b> as </b><span style=\"color: maroon\">d</span><span style=\"color: navy\"><b> -&gt; </b></span> consent.period<b> as </b><span style=\"color: maroon\">per</span><span style=\"color: navy\">, </span> per.start = <b>cast</b><span style=\"color: navy\">(</span><span style=\"color: maroon\">d</span><span style=\"color: navy\">, </span><span style=\"color: blue\">'dateTime'</span><span style=\"color: navy\">)</span> <i>&quot;plannedPeriodStart&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;plannedForRule&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;consentForGroup&quot;</i><span style=\"color: navy\">;</span>\r\n    qr.item<b> as </b><span style=\"color: maroon\">g</span><b> where </b><span style=\"color: navy\">(</span>linkId = 'additional-authorisations'<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      g.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'additional-authorisations/further-measures') and (answer.value.ofType(Coding).code = 'Y')<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -&gt; </b></span>consent.provision<b> as </b><span style=\"color: maroon\">prov</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        it<span style=\"color: navy\"><b> -&gt; </b></span> prov.code<b> as </b><span style=\"color: maroon\">pc</span><span style=\"color: navy\">, </span> pc.text = <span style=\"color: blue\">'Further alternative operative measures or treatment found necessary during the procedure'</span> <i>&quot;furtherMeasuresText&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;furtherMeasuresProvision&quot;</i><span style=\"color: navy\">;</span>\r\n      g.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'additional-authorisations/anaesthesia') and (answer.value.ofType(Coding).code = 'Y')<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -&gt; </b></span>consent.provision<b> as </b><span style=\"color: maroon\">prov</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        it<span style=\"color: navy\"><b> -&gt; </b></span> prov.code<b> as </b><span style=\"color: maroon\">pc</span><span style=\"color: navy\">, </span> pc.text = <span style=\"color: blue\">'Administration of general or other anaesthesia'</span> <i>&quot;anaesthesiaText&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;anaesthesiaProvision&quot;</i><span style=\"color: navy\">;</span>\r\n      g.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'additional-authorisations/no-named-practitioner') and (answer.value.ofType(Coding).code = 'Y')<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        it<span style=\"color: navy\"><b> -&gt; </b></span> consent.provision<b> as </b><span style=\"color: maroon\">prov</span><span style=\"color: navy\">, </span> prov.code<b> as </b><span style=\"color: maroon\">pc</span><span style=\"color: navy\">, </span> pc.text = <span style=\"color: blue\">'The person consenting understands no assurance has been given that a particular practitioner will perform the procedure.'</span> <i>&quot;noNamedPractitionerNote&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;noNamedPractitionerRule&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;additionalAuthorisationsGroup&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">// </span><span style=\"color: green\">Endoscopy: one provision per procedure ticked, so a consent for an upper</span>\r\n    <span style=\"color: navy\">// </span><span style=\"color: green\">GI endoscopy alone cannot be read as covering a colonoscopy.</span>\r\n    qr.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>linkId = 'endoscopy-procedures'<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      it.answer<b> as </b><span style=\"color: maroon\">a</span><span style=\"color: navy\"><b> -&gt; </b></span>consent.provision<b> as </b><span style=\"color: maroon\">prov</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        a.value<b> as </b><span style=\"color: maroon\">cv</span><span style=\"color: navy\"><b> -&gt; </b></span>prov.code<b> as </b><span style=\"color: maroon\">pc</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          cv<span style=\"color: navy\"><b> -&gt; </b></span>pc.coding = <span style=\"color: maroon\">cv</span> <i>&quot;coding&quot;</i><span style=\"color: navy\">;</span>\r\n          cv.display<b> as </b><span style=\"color: maroon\">d</span><span style=\"color: navy\"><b> -&gt; </b></span>pc.text = <span style=\"color: maroon\">d</span> <i>&quot;text&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span> <i>&quot;endoscopyCode&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;endoscopyProvision&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;endoscopyProceduresGroup&quot;</i><span style=\"color: navy\">;</span>\r\n    qr.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'endoscopy-tissue-disposal') and (answer.value.ofType(Coding).code = 'Y')<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -&gt; </b></span>consent.provision<b> as </b><span style=\"color: maroon\">prov</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      it<span style=\"color: navy\"><b> -&gt; </b></span> prov.code<b> as </b><span style=\"color: maroon\">pc</span><span style=\"color: navy\">, </span> pc.text = <span style=\"color: blue\">'Examination, preservation or disposal of tissues and body fluids removed, and of X-ray or photographic records taken'</span> <i>&quot;tissueDisposalText&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;tissueDisposalProvision&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">// </span><span style=\"color: green\">Systemic anti-cancer therapy: the regimen is the provision, and the</span>\r\n    <span style=\"color: navy\">// </span><span style=\"color: green\">purpose and side effects explained are notes on the consent -- they are</span>\r\n    <span style=\"color: navy\">// </span><span style=\"color: green\">what was said, not what was permitted.</span>\r\n    qr.item<b> as </b><span style=\"color: maroon\">g</span><b> where </b><span style=\"color: navy\">(</span>linkId = 'anti-cancer-therapy'<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      g.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'anti-cancer-therapy/regimen') and answer.value.exists()<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -&gt; </b></span>consent.provision<b> as </b><span style=\"color: maroon\">prov</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        it.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          a.value<b> as </b><span style=\"color: maroon\">txt</span><span style=\"color: navy\"><b> -&gt; </b></span> prov.code<b> as </b><span style=\"color: maroon\">pc</span><span style=\"color: navy\">, </span> pc.text = <span style=\"color: maroon\">txt</span> <i>&quot;regimenText&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;regimenProvision&quot;</i><span style=\"color: navy\">;</span>\r\n      g.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'anti-cancer-therapy/intended-purpose') and answer.value.exists()<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        it.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          a.value<b> as </b><span style=\"color: maroon\">txt</span><span style=\"color: navy\"><b> -&gt; </b></span> consent.provision<b> as </b><span style=\"color: maroon\">prov</span><span style=\"color: navy\">, </span> prov.code<b> as </b><span style=\"color: maroon\">pc</span><span style=\"color: navy\">, </span> pc.text = <span style=\"color: maroon\">txt</span> <i>&quot;purposeProvision&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;purposeRule&quot;</i><span style=\"color: navy\">;</span>\r\n      g.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'anti-cancer-therapy/side-effects-and-risks') and answer.value.exists()<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        it.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          a.value<b> as </b><span style=\"color: maroon\">txt</span><span style=\"color: navy\"><b> -&gt; </b></span> consent.provision<b> as </b><span style=\"color: maroon\">prov</span><span style=\"color: navy\">, </span> prov.code<b> as </b><span style=\"color: maroon\">pc</span><span style=\"color: navy\">, </span> pc.text = <span style=\"color: maroon\">txt</span> <i>&quot;sideEffectsProvision&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;sideEffectsRule&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;antiCancerGroup&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;createConsent&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">── Was it explained in a language they understood? ─────────────────────</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">Its own Observation. It is not a permission, so it is not a provision; but</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">it is the fact that makes the consent informed, and a complaint or an</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">inquest turns on it. An interpreter's name, where one was used, rides</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">alongside as a note.</span>\r\n  qr.item<b> as </b><span style=\"color: maroon\">g</span><b> where </b><span style=\"color: navy\">(</span>linkId = 'explained-by'<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>    g.item<b> as </b><span style=\"color: maroon\">it</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'explained-by/language-understood') and answer.value.exists()<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -&gt; </b></span> bundle.entry<b> as </b><span style=\"color: maroon\">entry</span><span style=\"color: navy\">, </span> entry.resource = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'Observation'</span><span style=\"color: navy\">)</span><b> as </b><span style=\"color: maroon\">obs</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      qr<span style=\"color: navy\"><b> -&gt; </b></span> obs<span style=\"color: navy\">, </span> entry<b> then </b>BuildObsBase<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obs</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span> <i>&quot;base&quot;</i><span style=\"color: navy\">;</span>\r\n      qr<span style=\"color: navy\"><b> -&gt; </b></span>obs<b> then </b>SetSurveyCategory<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obs</span><span style=\"color: navy\">)</span> <i>&quot;category&quot;</i><span style=\"color: navy\">;</span>\r\n      it<span style=\"color: navy\"><b> -&gt; </b></span>obs.code<b> as </b><span style=\"color: maroon\">cc</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        it<span style=\"color: navy\"><b> -&gt; </b></span>cc.coding<b> as </b><span style=\"color: maroon\">cg</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          it<span style=\"color: navy\"><b> -&gt; </b></span>cg.system = <span style=\"color: blue\">'https://fhir.slade360.co.ke/fhir/CodeSystem/inpatient-clinical-concept-codesystem'</span> <i>&quot;sys&quot;</i><span style=\"color: navy\">;</span>\r\n          it<span style=\"color: navy\"><b> -&gt; </b></span>cg.code = <span style=\"color: blue\">'capacity-to-consent'</span> <i>&quot;cd&quot;</i><span style=\"color: navy\">;</span>\r\n          it<span style=\"color: navy\"><b> -&gt; </b></span>cg.display = <span style=\"color: blue\">'Capacity to consent'</span> <i>&quot;dsp&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span> <i>&quot;coding&quot;</i><span style=\"color: navy\">;</span>\r\n        it<span style=\"color: navy\"><b> -&gt; </b></span>cc.text = <span style=\"color: blue\">'Explained in a language the person consenting fully understands'</span> <i>&quot;codeText&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;code&quot;</i><span style=\"color: navy\">;</span>\r\n      it.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        a.value<b> as </b><span style=\"color: maroon\">cv</span><span style=\"color: navy\"><b> -&gt; </b></span>obs.value = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'CodeableConcept'</span><span style=\"color: navy\">)</span><b> as </b><span style=\"color: maroon\">vc</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          cv<span style=\"color: navy\"><b> -&gt; </b></span>vc.coding = <span style=\"color: maroon\">cv</span> <i>&quot;valueCoding&quot;</i><span style=\"color: navy\">;</span>\r\n          cv.display<b> as </b><span style=\"color: maroon\">d</span><span style=\"color: navy\"><b> -&gt; </b></span>vc.text = <span style=\"color: maroon\">d</span> <i>&quot;valueText&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span> <i>&quot;codedValue&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n      it.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        a.value<b> as </b><span style=\"color: maroon\">cv</span><b> where </b><span style=\"color: navy\">(</span>code = 'N'<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -&gt; </b></span>obs.interpretation<b> as </b><span style=\"color: maroon\">interp</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          cv<span style=\"color: navy\"><b> -&gt; </b></span>interp.coding<b> as </b><span style=\"color: maroon\">icg</span><b> then</b><span style=\"color: navy\"> {\r\n</span>            cv<span style=\"color: navy\"><b> -&gt; </b></span>icg.system = <span style=\"color: blue\">'http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation'</span> <i>&quot;sys&quot;</i><span style=\"color: navy\">;</span>\r\n            cv<span style=\"color: navy\"><b> -&gt; </b></span>icg.code = <span style=\"color: blue\">'A'</span> <i>&quot;cd&quot;</i><span style=\"color: navy\">;</span>\r\n            cv<span style=\"color: navy\"><b> -&gt; </b></span>icg.display = <span style=\"color: blue\">'Abnormal'</span> <i>&quot;dsp&quot;</i><span style=\"color: navy\">;</span>\r\n          <span style=\"color: navy\">}</span> <i>&quot;coding&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span> <i>&quot;notUnderstoodInterp&quot;</i><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;languageInterpretation&quot;</i><span style=\"color: navy\">;</span>\r\n      g.item<b> as </b><span style=\"color: maroon\">ip</span><b> where </b><span style=\"color: navy\">(</span>(linkId = 'explained-by/interpreter-name') and answer.value.exists()<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>        ip.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span>          a.value<b> as </b><span style=\"color: maroon\">txt</span><span style=\"color: navy\"><b> -&gt; </b></span> obs.note<b> as </b><span style=\"color: maroon\">n</span><span style=\"color: navy\">, </span> n.text = <span style=\"color: maroon\">txt</span> <i>&quot;interpreterNote&quot;</i><span style=\"color: navy\">;</span>\r\n        <span style=\"color: navy\">}</span><span style=\"color: navy\">;</span>\r\n      <span style=\"color: navy\">}</span> <i>&quot;interpreterRule&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;languageObservation&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;languageGroup&quot;</i><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span><span style=\"color: navy\">// </span><span style=\"color: green\">─────────────────────────────────────────────────────────────────────────────</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">Shared scaffolding. Repeated in each map rather than imported: the transform</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">engine resolves `imports` against whatever StructureMaps happen to be on the</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">server, and a form that stops extracting because a shared map was not</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">uploaded is a worse failure than a duplicated group.</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">Two notes on what the publisher's StructureMap validator says about this file.</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">Source parameters below are left untyped on purpose. Writing `: Element` makes</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">the validator compare QuestionnaireResponse.item against the literal 'Element'</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">and report them as incompatible with each other, which is noise, not a finding.</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">`evaluate(context, expression)` is flagged as &quot;takes 1 parameter but 2 were</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">found&quot;. Leave it. The FML parser in the same jar refuses the one-argument form</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">outright -- it wants a parameter, a comma, then the FHIRPath -- so the</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">publisher is objecting to what its own compiler emits. Two arguments is the</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">only form that compiles, and it is what the R5 transform engine executes.</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">─────────────────────────────────────────────────────────────────────────────</span>\r\n<b>group </b>BuildObsBase<span style=\"color: navy\">(</span><b>source</b> <span style=\"color: maroon\">qr</span><span style=\"color: navy\"> : </span>QR, <b>target</b> <span style=\"color: maroon\">obs</span><span style=\"color: navy\"> : </span>Observation, <b>target</b> <span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span>  qr<span style=\"color: navy\"><b> -&gt; </b></span>obs<b> then </b>SetResponseProvenance<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">obs</span><span style=\"color: navy\">)</span> <i>&quot;responseProvenance&quot;</i><span style=\"color: navy\">;</span>\r\n  qr<span style=\"color: navy\"><b> -&gt; </b></span>obs.id = <b>uuid</b><span style=\"color: navy\">(</span><span style=\"color: navy\">)</span><b> then </b>SetObservationFullUrl<span style=\"color: navy\">(</span><span style=\"color: maroon\">obs</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span> <i>&quot;idAndFullUrl&quot;</i><span style=\"color: navy\">;</span>\r\n  qr<span style=\"color: navy\"><b> -&gt; </b></span>entry.request<b> as </b><span style=\"color: maroon\">request</span><b> then</b><span style=\"color: navy\"> {\r\n</span>    qr<span style=\"color: navy\"><b> -&gt; </b></span>request.method = <span style=\"color: blue\">'POST'</span> <i>&quot;requestMethod&quot;</i><span style=\"color: navy\">;</span>\r\n    qr<span style=\"color: navy\"><b> -&gt; </b></span>request.url = <span style=\"color: blue\">'Observation'</span> <i>&quot;requestUrl&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;entryRequest&quot;</i><span style=\"color: navy\">;</span>\r\n  qr<span style=\"color: navy\"><b> -&gt; </b></span>obs.status = <span style=\"color: blue\">'final'</span> <i>&quot;status&quot;</i><span style=\"color: navy\">;</span>\r\n  qr.subject<b> as </b><span style=\"color: maroon\">s</span><span style=\"color: navy\"><b> -&gt; </b></span>obs.subject = <span style=\"color: maroon\">s</span><span style=\"color: navy\">;</span>\r\n  qr.encounter<b> as </b><span style=\"color: maroon\">e</span><span style=\"color: navy\"><b> -&gt; </b></span>obs.encounter = <span style=\"color: maroon\">e</span><span style=\"color: navy\">;</span>\r\n  qr.authored<b> as </b><span style=\"color: maroon\">t</span><span style=\"color: navy\"><b> -&gt; </b></span>obs.effective = <span style=\"color: maroon\">t</span> <i>&quot;effective&quot;</i><span style=\"color: navy\">;</span>\r\n  qr.source<b> as </b><span style=\"color: maroon\">src</span><span style=\"color: navy\"><b> -&gt; </b></span>obs.performer = <span style=\"color: maroon\">src</span> <i>&quot;performerFromSource&quot;</i><span style=\"color: navy\">;</span>\r\n  qr<b> where </b><span style=\"color: navy\">(</span>source.exists().not()<span style=\"color: navy\">)</span><b> then</b><span style=\"color: navy\"> {\r\n</span>    qr.author<b> as </b><span style=\"color: maroon\">a</span><span style=\"color: navy\"><b> -&gt; </b></span>obs.performer = <span style=\"color: maroon\">a</span> <i>&quot;performerFromAuthor&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;performerFallback&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">A stored response's id already reads &quot;QuestionnaireResponse/&lt;id&gt;&quot;, so it is</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">a relative reference as it stands. The hasValue() guard is what stops an</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">unsaved response -- one posted straight to $extract rather than saved first</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">-- from writing &quot;QuestionnaireResponse/null&quot; into the record.</span>\r\n  qr.id<b> as </b><span style=\"color: maroon\">qid</span><b> where </b><span style=\"color: navy\">(</span>$this.hasValue()<span style=\"color: navy\">)</span><span style=\"color: navy\"><b> -&gt; </b></span> obs.derivedFrom = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'Reference'</span><span style=\"color: navy\">)</span><b> as </b><span style=\"color: maroon\">ref</span><span style=\"color: navy\">, </span> ref.reference = <span style=\"color: maroon\">qid</span> <i>&quot;linkQuestionnaireResponse&quot;</i><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span><b>group </b>SetObservationFullUrl<span style=\"color: navy\">(</span><b>source</b> <span style=\"color: maroon\">obs</span><span style=\"color: navy\"> : </span>Observation, <b>target</b> <span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span>  obs.id<b> as </b><span style=\"color: maroon\">id</span><span style=\"color: navy\"><b> -&gt; </b></span>entry.fullUrl = <b>append</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'https://fhir.slade360.co.ke/fhir/Observation/'</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">id</span><span style=\"color: navy\">)</span> <i>&quot;assignFullUrl&quot;</i><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span><span style=\"color: navy\">// </span><span style=\"color: green\">The two answer shapes a component can carry. Both read the answer through the</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">untyped `.value` accessor: reading `valueCoding` or `valueQuantity` by its</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">typed property name fails at transform time on HAPI R5 with &quot;Attempt to read</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">invalid property ... on QuestionnaireResponse.item.answer&quot;.</span>\r\n<b>group </b>SetComponentCodedValue<span style=\"color: navy\">(</span><b>source</b> <span style=\"color: maroon\">it</span>, <b>target</b> <span style=\"color: maroon\">comp</span><span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span>  it.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span>    a.value<b> as </b><span style=\"color: maroon\">cv</span><span style=\"color: navy\"><b> -&gt; </b></span>comp.value = <b>create</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'CodeableConcept'</span><span style=\"color: navy\">)</span><b> as </b><span style=\"color: maroon\">cc</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      cv<span style=\"color: navy\"><b> -&gt; </b></span>cc.coding = <span style=\"color: maroon\">cv</span> <i>&quot;valueCoding&quot;</i><span style=\"color: navy\">;</span>\r\n      cv.display<b> as </b><span style=\"color: maroon\">d</span><span style=\"color: navy\"><b> -&gt; </b></span>cc.text = <span style=\"color: maroon\">d</span> <i>&quot;valueText&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;codedValue&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;componentAnswer&quot;</i><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span><b>group </b>SetComponentValue<span style=\"color: navy\">(</span><b>source</b> <span style=\"color: maroon\">it</span>, <b>target</b> <span style=\"color: maroon\">comp</span><span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span>  it.answer first<b> as </b><span style=\"color: maroon\">a</span><b> then</b><span style=\"color: navy\"> {\r\n</span>    a.value<b> as </b><span style=\"color: maroon\">v</span><span style=\"color: navy\"><b> -&gt; </b></span>comp.value = <span style=\"color: maroon\">v</span> <i>&quot;plainValue&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;componentAnswer&quot;</i><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span><b>group </b>SetSurveyCategory<span style=\"color: navy\">(</span><b>source</b> <span style=\"color: maroon\">qr</span><span style=\"color: navy\"> : </span>QR, <b>target</b> <span style=\"color: maroon\">obs</span><span style=\"color: navy\"> : </span>Observation<span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span>  qr<span style=\"color: navy\"><b> -&gt; </b></span>obs.category<b> as </b><span style=\"color: maroon\">cat</span><b> then</b><span style=\"color: navy\"> {\r\n</span>    qr<span style=\"color: navy\"><b> -&gt; </b></span>cat.coding<b> as </b><span style=\"color: maroon\">coding</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      qr<span style=\"color: navy\"><b> -&gt; </b></span>coding.system = <span style=\"color: blue\">'http://terminology.hl7.org/CodeSystem/observation-category'</span> <i>&quot;categorySystem&quot;</i><span style=\"color: navy\">;</span>\r\n      qr<span style=\"color: navy\"><b> -&gt; </b></span>coding.code = <span style=\"color: blue\">'survey'</span> <i>&quot;categoryCode&quot;</i><span style=\"color: navy\">;</span>\r\n      qr<span style=\"color: navy\"><b> -&gt; </b></span>coding.display = <span style=\"color: blue\">'Survey'</span> <i>&quot;categoryDisplay&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;categoryCoding&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;category&quot;</i><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span><b>group </b>BuildConsentBase<span style=\"color: navy\">(</span><b>source</b> <span style=\"color: maroon\">qr</span><span style=\"color: navy\"> : </span>QR, <b>target</b> <span style=\"color: maroon\">r</span><span style=\"color: navy\"> : </span>Consent, <b>target</b> <span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span>  qr<span style=\"color: navy\"><b> -&gt; </b></span>r<b> then </b>SetResponseProvenance<span style=\"color: navy\">(</span><span style=\"color: maroon\">qr</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">r</span><span style=\"color: navy\">)</span> <i>&quot;responseProvenance&quot;</i><span style=\"color: navy\">;</span>\r\n  qr<span style=\"color: navy\"><b> -&gt; </b></span>r.id = <b>uuid</b><span style=\"color: navy\">(</span><span style=\"color: navy\">)</span><b> then </b>SetConsentFullUrl<span style=\"color: navy\">(</span><span style=\"color: maroon\">r</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span> <i>&quot;idAndFullUrl&quot;</i><span style=\"color: navy\">;</span>\r\n  qr<span style=\"color: navy\"><b> -&gt; </b></span>entry.request<b> as </b><span style=\"color: maroon\">request</span><b> then</b><span style=\"color: navy\"> {\r\n</span>    qr<span style=\"color: navy\"><b> -&gt; </b></span>request.method = <span style=\"color: blue\">'POST'</span> <i>&quot;requestMethod&quot;</i><span style=\"color: navy\">;</span>\r\n    qr<span style=\"color: navy\"><b> -&gt; </b></span>request.url = <span style=\"color: blue\">'Consent'</span> <i>&quot;requestUrl&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;entryRequest&quot;</i><span style=\"color: navy\">;</span>\r\n  qr.subject<b> as </b><span style=\"color: maroon\">s</span><span style=\"color: navy\"><b> -&gt; </b></span>r.subject = <span style=\"color: maroon\">s</span><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span><b>group </b>SetConsentFullUrl<span style=\"color: navy\">(</span><b>source</b> <span style=\"color: maroon\">r</span><span style=\"color: navy\"> : </span>Consent, <b>target</b> <span style=\"color: maroon\">entry</span><span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span>  r.id<b> as </b><span style=\"color: maroon\">id</span><span style=\"color: navy\"><b> -&gt; </b></span>entry.fullUrl = <b>append</b><span style=\"color: navy\">(</span><span style=\"color: blue\">'https://fhir.slade360.co.ke/fhir/Consent/'</span><span style=\"color: navy\">, </span><span style=\"color: maroon\">id</span><span style=\"color: navy\">)</span> <i>&quot;assignFullUrl&quot;</i><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span><span style=\"color: navy\">// </span><span style=\"color: green\">── Provenance and tenancy ───────────────────────────────────────────────────</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">Two tags on everything this map creates. The first says which questionnaire</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">produced it, so a form that reopens mid-admission recalls its own earlier</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">entries and not another form's. The second copies the tenant tags off the</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">response, because nothing else on the path puts them there.</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">The code is the form's document type, not the questionnaire's id: every</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">environment mints its own ids, and there is only one set of maps, so an id</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">here would tie the tag to whichever environment stamped it.</span>\r\n<span style=\"color: navy\">// </span><span style=\"color: green\">── Provenance and tenancy ───────────────────────────────────────────────────</span>\r\n<b>group </b>SetResponseProvenance<span style=\"color: navy\">(</span><b>source</b> <span style=\"color: maroon\">qr</span><span style=\"color: navy\"> : </span>QR, <b>target</b> <span style=\"color: maroon\">r</span><span style=\"color: navy\">)</span><span style=\"color: navy\"> {\r\n</span>  qr<span style=\"color: navy\"><b> -&gt; </b></span>r.meta<b> as </b><span style=\"color: maroon\">m</span><b> then</b><span style=\"color: navy\"> {\r\n</span>    qr<span style=\"color: navy\"><b> -&gt; </b></span>m.tag<b> as </b><span style=\"color: maroon\">t</span><b> then</b><span style=\"color: navy\"> {\r\n</span>      qr<span style=\"color: navy\"><b> -&gt; </b></span>t.system = <span style=\"color: blue\">'http://slade360edi.com/questionnaire-provenance'</span> <i>&quot;provenanceSystem&quot;</i><span style=\"color: navy\">;</span>\r\n      qr<span style=\"color: navy\"><b> -&gt; </b></span>t.code = <span style=\"color: blue\">'procedure-consent'</span> <i>&quot;provenanceCode&quot;</i><span style=\"color: navy\">;</span>\r\n      qr<span style=\"color: navy\"><b> -&gt; </b></span>t.display = <span style=\"color: blue\">'Consent for a procedure or treatment'</span> <i>&quot;provenanceDisplay&quot;</i><span style=\"color: navy\">;</span>\r\n    <span style=\"color: navy\">}</span> <i>&quot;provenanceTag&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;provenanceMeta&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">Every tag the response carries, onto the resource. `meta` is 0..1, so this</span>\r\n  <span style=\"color: navy\">// </span><span style=\"color: green\">lands on the same meta the rule above created rather than a second one.</span>\r\n  qr.meta<b> as </b><span style=\"color: maroon\">qm</span><b> then</b><span style=\"color: navy\"> {\r\n</span>    qm.tag<b> as </b><span style=\"color: maroon\">qt</span><span style=\"color: navy\"><b> -&gt; </b></span> r.meta<b> as </b><span style=\"color: maroon\">m</span><span style=\"color: navy\">, </span> m.tag = <span style=\"color: maroon\">qt</span> <i>&quot;copyTag&quot;</i><span style=\"color: navy\">;</span>\r\n  <span style=\"color: navy\">}</span> <i>&quot;tenantTags&quot;</i><span style=\"color: navy\">;</span>\r\n<span style=\"color: navy\">}\r\n\r\n</span></pre></div>"
  },
  "url" : "https://fhir.slade360.co.ke/fhir/StructureMap/ExtractProcedureConsent",
  "version" : "0.1.0",
  "name" : "ExtractProcedureConsent",
  "title" : "Procedure Consent Extraction",
  "status" : "active",
  "date" : "2026-09-14T06:31:13+00:00",
  "publisher" : "Kathurima Kimathi",
  "contact" : [
    {
      "name" : "Kathurima Kimathi",
      "telecom" : [
        {
          "system" : "url",
          "value" : "https://www.linkedin.com/in/kathurima-kimathi/"
        },
        {
          "system" : "email",
          "value" : "kathurimakimathi415@gmail.com"
        }
      ]
    },
    {
      "name" : "Oscar John",
      "telecom" : [
        {
          "system" : "email",
          "value" : "oscarjohnotieno@gmail.com",
          "use" : "work"
        }
      ]
    },
    {
      "name" : "Kennedy Omondi",
      "telecom" : [
        {
          "system" : "email",
          "value" : "kennankole@gmail.com",
          "use" : "work"
        }
      ]
    }
  ],
  "description" : "The three consent forms out as one Consent, with a provision per authorisation actually given: the procedure itself, the further-measures clause, the anaesthesia clause, and on an endoscopy form the tissue-disposal clause and each procedure ticked. Each provision is written only when its box was answered yes, so a consent nobody gave never appears as one. An Observation records whether the explanation was given in a language the person consenting understood, because that is what makes the consent informed and what an audit or a complaint turns on.",
  "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/Consent",
      "mode" : "target",
      "alias" : "Consent"
    },
    {
      "url" : "http://hl7.org/fhir/StructureDefinition/Observation",
      "mode" : "target",
      "alias" : "Observation"
    }
  ],
  "group" : [
    {
      "name" : "ExtractProcedureConsent",
      "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" : "createConsent",
          "source" : [
            {
              "context" : "qr",
              "condition" : "item.where(linkId = 'signatures').item.where(linkId = 'signatures/consenter-signed').answer.value = true"
            }
          ],
          "target" : [
            {
              "context" : "bundle",
              "element" : "entry",
              "variable" : "entry"
            },
            {
              "context" : "entry",
              "element" : "resource",
              "variable" : "consent",
              "transform" : "create",
              "parameter" : [
                {
                  "valueString" : "Consent"
                }
              ]
            }
          ],
          "rule" : [
            {
              "name" : "base",
              "source" : [
                {
                  "context" : "qr"
                }
              ],
              "target" : [
                {
                  "context" : "consent"
                },
                {
                  "context" : "entry"
                }
              ],
              "dependent" : [
                {
                  "name" : "BuildConsentBase",
                  "parameter" : [
                    {
                      "valueId" : "qr"
                    },
                    {
                      "valueId" : "consent"
                    },
                    {
                      "valueId" : "entry"
                    }
                  ]
                }
              ]
            },
            {
              "name" : "status",
              "source" : [
                {
                  "context" : "qr"
                }
              ],
              "target" : [
                {
                  "context" : "consent",
                  "element" : "status",
                  "transform" : "copy",
                  "parameter" : [
                    {
                      "valueString" : "active"
                    }
                  ]
                }
              ]
            },
            {
              "name" : "decision",
              "source" : [
                {
                  "context" : "qr"
                }
              ],
              "target" : [
                {
                  "context" : "consent",
                  "element" : "decision",
                  "transform" : "copy",
                  "parameter" : [
                    {
                      "valueString" : "permit"
                    }
                  ]
                }
              ]
            },
            {
              "name" : "category",
              "source" : [
                {
                  "context" : "qr"
                }
              ],
              "target" : [
                {
                  "context" : "consent",
                  "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://loinc.org"
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "name" : "cd",
                      "source" : [
                        {
                          "context" : "qr"
                        }
                      ],
                      "target" : [
                        {
                          "context" : "cg",
                          "element" : "code",
                          "transform" : "copy",
                          "parameter" : [
                            {
                              "valueString" : "64293-4"
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "name" : "dsp",
                      "source" : [
                        {
                          "context" : "qr"
                        }
                      ],
                      "target" : [
                        {
                          "context" : "cg",
                          "element" : "display",
                          "transform" : "copy",
                          "parameter" : [
                            {
                              "valueString" : "Procedure consent Document"
                            }
                          ]
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "name" : "signaturesGroup",
              "source" : [
                {
                  "context" : "qr",
                  "element" : "item",
                  "variable" : "sg",
                  "condition" : "linkId = 'signatures'"
                }
              ],
              "rule" : [
                {
                  "name" : "signedAtRule",
                  "source" : [
                    {
                      "context" : "sg",
                      "element" : "item",
                      "variable" : "it",
                      "condition" : "(linkId = 'signatures/consenter-signed-at') and answer.value.exists()"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "answer",
                      "source" : [
                        {
                          "context" : "it",
                          "element" : "answer",
                          "listMode" : "first",
                          "variable" : "a"
                        }
                      ],
                      "rule" : [
                        {
                          "name" : "signedPeriodStart",
                          "source" : [
                            {
                              "context" : "a",
                              "element" : "value",
                              "variable" : "t"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "consent",
                              "element" : "period",
                              "variable" : "per"
                            },
                            {
                              "context" : "per",
                              "element" : "start",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueId" : "t"
                                }
                              ]
                            }
                          ],
                          "documentation" : "The form asks for a date *and time* signed, and Consent.date is a\r\n`date`. The timestamp goes to Consent.period.start, which keeps it:\r\na consent taken the evening before theatre and one taken in the\r\nanaesthetic room are hours apart and share a date."
                        }
                      ]
                    }
                  ]
                }
              ],
              "documentation" : "The signing time, from the form. Not qr.authored: a consent taken the\r\nevening before an operation and transcribed the next morning would\r\notherwise be dated to the transcription, which is the one date a dispute\r\nabout consent turns on."
            },
            {
              "name" : "explainedByGroup",
              "source" : [
                {
                  "context" : "qr",
                  "element" : "item",
                  "variable" : "eg",
                  "condition" : "linkId = 'explained-by'"
                }
              ],
              "rule" : [
                {
                  "name" : "clinicianRule",
                  "source" : [
                    {
                      "context" : "eg",
                      "element" : "item",
                      "variable" : "it",
                      "condition" : "(linkId = 'explained-by/clinician') and answer.value.exists()"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "answer",
                      "source" : [
                        {
                          "context" : "it",
                          "element" : "answer",
                          "listMode" : "first",
                          "variable" : "a"
                        }
                      ],
                      "rule" : [
                        {
                          "name" : "verification",
                          "source" : [
                            {
                              "context" : "a",
                              "element" : "value",
                              "variable" : "ref"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "consent",
                              "element" : "verification",
                              "variable" : "ver"
                            }
                          ],
                          "rule" : [
                            {
                              "name" : "verified",
                              "source" : [
                                {
                                  "context" : "ref"
                                }
                              ],
                              "target" : [
                                {
                                  "context" : "ver",
                                  "element" : "verified",
                                  "transform" : "copy",
                                  "parameter" : [
                                    {
                                      "valueBoolean" : true
                                    }
                                  ]
                                }
                              ]
                            },
                            {
                              "name" : "verifiedBy",
                              "source" : [
                                {
                                  "context" : "ref"
                                }
                              ],
                              "target" : [
                                {
                                  "context" : "ver",
                                  "element" : "verifiedBy",
                                  "transform" : "copy",
                                  "parameter" : [
                                    {
                                      "valueId" : "ref"
                                    }
                                  ]
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "explanationRule",
                  "source" : [
                    {
                      "context" : "eg",
                      "element" : "item",
                      "variable" : "it",
                      "condition" : "(linkId = 'explained-by/what-was-explained') and answer.value.exists()"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "answer",
                      "source" : [
                        {
                          "context" : "it",
                          "element" : "answer",
                          "listMode" : "first",
                          "variable" : "a"
                        }
                      ],
                      "rule" : [
                        {
                          "name" : "explanationProvision",
                          "source" : [
                            {
                              "context" : "a",
                              "element" : "value",
                              "variable" : "txt"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "consent",
                              "element" : "provision",
                              "variable" : "prov"
                            },
                            {
                              "context" : "prov",
                              "element" : "code",
                              "variable" : "pc"
                            },
                            {
                              "context" : "pc",
                              "element" : "text",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueId" : "txt"
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    }
                  ]
                }
              ],
              "documentation" : "Who explained it becomes the verifier -- they attested that the\r\ndiscussion happened -- and who consented becomes the grantor."
            },
            {
              "name" : "consenterGroup",
              "source" : [
                {
                  "context" : "qr",
                  "element" : "item",
                  "variable" : "cg2",
                  "condition" : "linkId = 'consenter'"
                }
              ],
              "rule" : [
                {
                  "name" : "consenterNameRule",
                  "source" : [
                    {
                      "context" : "cg2",
                      "element" : "item",
                      "variable" : "it",
                      "condition" : "(linkId = 'consenter/name') and answer.value.exists()"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "answer",
                      "source" : [
                        {
                          "context" : "it",
                          "element" : "answer",
                          "listMode" : "first",
                          "variable" : "a"
                        }
                      ],
                      "rule" : [
                        {
                          "name" : "grantorDisplay",
                          "source" : [
                            {
                              "context" : "a",
                              "element" : "value",
                              "variable" : "txt"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "consent",
                              "element" : "grantor",
                              "variable" : "ref",
                              "transform" : "create",
                              "parameter" : [
                                {
                                  "valueString" : "Reference"
                                }
                              ]
                            },
                            {
                              "context" : "ref",
                              "element" : "display",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueId" : "txt"
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "relationshipRule",
                  "source" : [
                    {
                      "context" : "cg2",
                      "element" : "item",
                      "variable" : "it",
                      "condition" : "(linkId = 'consenter/relationship') and answer.value.exists()"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "answer",
                      "source" : [
                        {
                          "context" : "it",
                          "element" : "answer",
                          "listMode" : "first",
                          "variable" : "a"
                        }
                      ],
                      "rule" : [
                        {
                          "name" : "relationshipDisplay",
                          "source" : [
                            {
                              "context" : "a",
                              "element" : "value",
                              "variable" : "txt"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "consent",
                              "element" : "grantor",
                              "variable" : "ref",
                              "transform" : "create",
                              "parameter" : [
                                {
                                  "valueString" : "Reference"
                                }
                              ]
                            },
                            {
                              "context" : "ref",
                              "element" : "display",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueId" : "txt"
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "name" : "consentForGroup",
              "source" : [
                {
                  "context" : "qr",
                  "element" : "item",
                  "variable" : "g",
                  "condition" : "linkId = 'consent-for'"
                }
              ],
              "rule" : [
                {
                  "name" : "procedureProvision",
                  "source" : [
                    {
                      "context" : "g",
                      "element" : "item",
                      "variable" : "it",
                      "condition" : "(linkId = 'consent-for/procedure') and answer.value.exists()"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "consent",
                      "element" : "provision",
                      "variable" : "prov"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "answer",
                      "source" : [
                        {
                          "context" : "it",
                          "element" : "answer",
                          "listMode" : "first",
                          "variable" : "a"
                        }
                      ],
                      "rule" : [
                        {
                          "name" : "procedureText",
                          "source" : [
                            {
                              "context" : "a",
                              "element" : "value",
                              "variable" : "txt"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "prov",
                              "element" : "code",
                              "variable" : "pc"
                            },
                            {
                              "context" : "pc",
                              "element" : "text",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueId" : "txt"
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "plannedForRule",
                  "source" : [
                    {
                      "context" : "g",
                      "element" : "item",
                      "variable" : "it",
                      "condition" : "(linkId = 'consent-for/planned-for') and answer.value.exists()"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "answer",
                      "source" : [
                        {
                          "context" : "it",
                          "element" : "answer",
                          "listMode" : "first",
                          "variable" : "a"
                        }
                      ],
                      "rule" : [
                        {
                          "name" : "plannedPeriodStart",
                          "source" : [
                            {
                              "context" : "a",
                              "element" : "value",
                              "variable" : "d"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "consent",
                              "element" : "period",
                              "variable" : "per"
                            },
                            {
                              "context" : "per",
                              "element" : "start",
                              "transform" : "cast",
                              "parameter" : [
                                {
                                  "valueId" : "d"
                                },
                                {
                                  "valueString" : "dateTime"
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    }
                  ]
                }
              ],
              "documentation" : "── The provisions ────────────────────────────────────────────────────\r\nOne per authorisation. The procedure itself is always a provision, since\r\nit is what the form exists for; the rest appear only where their own box\r\nwas answered yes."
            },
            {
              "name" : "additionalAuthorisationsGroup",
              "source" : [
                {
                  "context" : "qr",
                  "element" : "item",
                  "variable" : "g",
                  "condition" : "linkId = 'additional-authorisations'"
                }
              ],
              "rule" : [
                {
                  "name" : "furtherMeasuresProvision",
                  "source" : [
                    {
                      "context" : "g",
                      "element" : "item",
                      "variable" : "it",
                      "condition" : "(linkId = 'additional-authorisations/further-measures') and (answer.value.ofType(Coding).code = 'Y')"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "consent",
                      "element" : "provision",
                      "variable" : "prov"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "furtherMeasuresText",
                      "source" : [
                        {
                          "context" : "it"
                        }
                      ],
                      "target" : [
                        {
                          "context" : "prov",
                          "element" : "code",
                          "variable" : "pc"
                        },
                        {
                          "context" : "pc",
                          "element" : "text",
                          "transform" : "copy",
                          "parameter" : [
                            {
                              "valueString" : "Further alternative operative measures or treatment found necessary during the procedure"
                            }
                          ]
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "anaesthesiaProvision",
                  "source" : [
                    {
                      "context" : "g",
                      "element" : "item",
                      "variable" : "it",
                      "condition" : "(linkId = 'additional-authorisations/anaesthesia') and (answer.value.ofType(Coding).code = 'Y')"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "consent",
                      "element" : "provision",
                      "variable" : "prov"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "anaesthesiaText",
                      "source" : [
                        {
                          "context" : "it"
                        }
                      ],
                      "target" : [
                        {
                          "context" : "prov",
                          "element" : "code",
                          "variable" : "pc"
                        },
                        {
                          "context" : "pc",
                          "element" : "text",
                          "transform" : "copy",
                          "parameter" : [
                            {
                              "valueString" : "Administration of general or other anaesthesia"
                            }
                          ]
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "noNamedPractitionerRule",
                  "source" : [
                    {
                      "context" : "g",
                      "element" : "item",
                      "variable" : "it",
                      "condition" : "(linkId = 'additional-authorisations/no-named-practitioner') and (answer.value.ofType(Coding).code = 'Y')"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "noNamedPractitionerNote",
                      "source" : [
                        {
                          "context" : "it"
                        }
                      ],
                      "target" : [
                        {
                          "context" : "consent",
                          "element" : "provision",
                          "variable" : "prov"
                        },
                        {
                          "context" : "prov",
                          "element" : "code",
                          "variable" : "pc"
                        },
                        {
                          "context" : "pc",
                          "element" : "text",
                          "transform" : "copy",
                          "parameter" : [
                            {
                              "valueString" : "The person consenting understands no assurance has been given that a particular practitioner will perform the procedure."
                            }
                          ]
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "name" : "endoscopyProceduresGroup",
              "source" : [
                {
                  "context" : "qr",
                  "element" : "item",
                  "variable" : "it",
                  "condition" : "linkId = 'endoscopy-procedures'"
                }
              ],
              "rule" : [
                {
                  "name" : "endoscopyProvision",
                  "source" : [
                    {
                      "context" : "it",
                      "element" : "answer",
                      "variable" : "a"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "consent",
                      "element" : "provision",
                      "variable" : "prov"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "endoscopyCode",
                      "source" : [
                        {
                          "context" : "a",
                          "element" : "value",
                          "variable" : "cv"
                        }
                      ],
                      "target" : [
                        {
                          "context" : "prov",
                          "element" : "code",
                          "variable" : "pc"
                        }
                      ],
                      "rule" : [
                        {
                          "name" : "coding",
                          "source" : [
                            {
                              "context" : "cv"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "pc",
                              "element" : "coding",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueId" : "cv"
                                }
                              ]
                            }
                          ]
                        },
                        {
                          "name" : "text",
                          "source" : [
                            {
                              "context" : "cv",
                              "element" : "display",
                              "variable" : "d"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "pc",
                              "element" : "text",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueId" : "d"
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    }
                  ]
                }
              ],
              "documentation" : "Endoscopy: one provision per procedure ticked, so a consent for an upper\r\nGI endoscopy alone cannot be read as covering a colonoscopy."
            },
            {
              "name" : "tissueDisposalProvision",
              "source" : [
                {
                  "context" : "qr",
                  "element" : "item",
                  "variable" : "it",
                  "condition" : "(linkId = 'endoscopy-tissue-disposal') and (answer.value.ofType(Coding).code = 'Y')"
                }
              ],
              "target" : [
                {
                  "context" : "consent",
                  "element" : "provision",
                  "variable" : "prov"
                }
              ],
              "rule" : [
                {
                  "name" : "tissueDisposalText",
                  "source" : [
                    {
                      "context" : "it"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "prov",
                      "element" : "code",
                      "variable" : "pc"
                    },
                    {
                      "context" : "pc",
                      "element" : "text",
                      "transform" : "copy",
                      "parameter" : [
                        {
                          "valueString" : "Examination, preservation or disposal of tissues and body fluids removed, and of X-ray or photographic records taken"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "name" : "antiCancerGroup",
              "source" : [
                {
                  "context" : "qr",
                  "element" : "item",
                  "variable" : "g",
                  "condition" : "linkId = 'anti-cancer-therapy'"
                }
              ],
              "rule" : [
                {
                  "name" : "regimenProvision",
                  "source" : [
                    {
                      "context" : "g",
                      "element" : "item",
                      "variable" : "it",
                      "condition" : "(linkId = 'anti-cancer-therapy/regimen') and answer.value.exists()"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "consent",
                      "element" : "provision",
                      "variable" : "prov"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "answer",
                      "source" : [
                        {
                          "context" : "it",
                          "element" : "answer",
                          "listMode" : "first",
                          "variable" : "a"
                        }
                      ],
                      "rule" : [
                        {
                          "name" : "regimenText",
                          "source" : [
                            {
                              "context" : "a",
                              "element" : "value",
                              "variable" : "txt"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "prov",
                              "element" : "code",
                              "variable" : "pc"
                            },
                            {
                              "context" : "pc",
                              "element" : "text",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueId" : "txt"
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "purposeRule",
                  "source" : [
                    {
                      "context" : "g",
                      "element" : "item",
                      "variable" : "it",
                      "condition" : "(linkId = 'anti-cancer-therapy/intended-purpose') and answer.value.exists()"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "answer",
                      "source" : [
                        {
                          "context" : "it",
                          "element" : "answer",
                          "listMode" : "first",
                          "variable" : "a"
                        }
                      ],
                      "rule" : [
                        {
                          "name" : "purposeProvision",
                          "source" : [
                            {
                              "context" : "a",
                              "element" : "value",
                              "variable" : "txt"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "consent",
                              "element" : "provision",
                              "variable" : "prov"
                            },
                            {
                              "context" : "prov",
                              "element" : "code",
                              "variable" : "pc"
                            },
                            {
                              "context" : "pc",
                              "element" : "text",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueId" : "txt"
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "sideEffectsRule",
                  "source" : [
                    {
                      "context" : "g",
                      "element" : "item",
                      "variable" : "it",
                      "condition" : "(linkId = 'anti-cancer-therapy/side-effects-and-risks') and answer.value.exists()"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "answer",
                      "source" : [
                        {
                          "context" : "it",
                          "element" : "answer",
                          "listMode" : "first",
                          "variable" : "a"
                        }
                      ],
                      "rule" : [
                        {
                          "name" : "sideEffectsProvision",
                          "source" : [
                            {
                              "context" : "a",
                              "element" : "value",
                              "variable" : "txt"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "consent",
                              "element" : "provision",
                              "variable" : "prov"
                            },
                            {
                              "context" : "prov",
                              "element" : "code",
                              "variable" : "pc"
                            },
                            {
                              "context" : "pc",
                              "element" : "text",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueId" : "txt"
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    }
                  ]
                }
              ],
              "documentation" : "Systemic anti-cancer therapy: the regimen is the provision, and the\r\npurpose and side effects explained are notes on the consent -- they are\r\nwhat was said, not what was permitted."
            }
          ],
          "documentation" : "── The Consent ─────────────────────────────────────────────────────────\r\nGuarded on the person consenting having actually signed. Everything below\r\nhangs off that signature, and a Consent built from a half-filled form\r\nasserts a permission that was never given."
        },
        {
          "name" : "languageGroup",
          "source" : [
            {
              "context" : "qr",
              "element" : "item",
              "variable" : "g",
              "condition" : "linkId = 'explained-by'"
            }
          ],
          "rule" : [
            {
              "name" : "languageObservation",
              "source" : [
                {
                  "context" : "g",
                  "element" : "item",
                  "variable" : "it",
                  "condition" : "(linkId = 'explained-by/language-understood') 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/inpatient-clinical-concept-codesystem"
                                }
                              ]
                            }
                          ]
                        },
                        {
                          "name" : "cd",
                          "source" : [
                            {
                              "context" : "it"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "cg",
                              "element" : "code",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueString" : "capacity-to-consent"
                                }
                              ]
                            }
                          ]
                        },
                        {
                          "name" : "dsp",
                          "source" : [
                            {
                              "context" : "it"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "cg",
                              "element" : "display",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueString" : "Capacity to consent"
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "name" : "codeText",
                      "source" : [
                        {
                          "context" : "it"
                        }
                      ],
                      "target" : [
                        {
                          "context" : "cc",
                          "element" : "text",
                          "transform" : "copy",
                          "parameter" : [
                            {
                              "valueString" : "Explained in a language the person consenting fully understands"
                            }
                          ]
                        }
                      ]
                    }
                  ]
                },
                {
                  "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" : "vc",
                          "transform" : "create",
                          "parameter" : [
                            {
                              "valueString" : "CodeableConcept"
                            }
                          ]
                        }
                      ],
                      "rule" : [
                        {
                          "name" : "valueCoding",
                          "source" : [
                            {
                              "context" : "cv"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "vc",
                              "element" : "coding",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueId" : "cv"
                                }
                              ]
                            }
                          ]
                        },
                        {
                          "name" : "valueText",
                          "source" : [
                            {
                              "context" : "cv",
                              "element" : "display",
                              "variable" : "d"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "vc",
                              "element" : "text",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueId" : "d"
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "languageInterpretation",
                  "source" : [
                    {
                      "context" : "it",
                      "element" : "answer",
                      "listMode" : "first",
                      "variable" : "a"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "notUnderstoodInterp",
                      "source" : [
                        {
                          "context" : "a",
                          "element" : "value",
                          "variable" : "cv",
                          "condition" : "code = 'N'"
                        }
                      ],
                      "target" : [
                        {
                          "context" : "obs",
                          "element" : "interpretation",
                          "variable" : "interp"
                        }
                      ],
                      "rule" : [
                        {
                          "name" : "coding",
                          "source" : [
                            {
                              "context" : "cv"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "interp",
                              "element" : "coding",
                              "variable" : "icg"
                            }
                          ],
                          "rule" : [
                            {
                              "name" : "sys",
                              "source" : [
                                {
                                  "context" : "cv"
                                }
                              ],
                              "target" : [
                                {
                                  "context" : "icg",
                                  "element" : "system",
                                  "transform" : "copy",
                                  "parameter" : [
                                    {
                                      "valueString" : "http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation"
                                    }
                                  ]
                                }
                              ]
                            },
                            {
                              "name" : "cd",
                              "source" : [
                                {
                                  "context" : "cv"
                                }
                              ],
                              "target" : [
                                {
                                  "context" : "icg",
                                  "element" : "code",
                                  "transform" : "copy",
                                  "parameter" : [
                                    {
                                      "valueString" : "A"
                                    }
                                  ]
                                }
                              ]
                            },
                            {
                              "name" : "dsp",
                              "source" : [
                                {
                                  "context" : "cv"
                                }
                              ],
                              "target" : [
                                {
                                  "context" : "icg",
                                  "element" : "display",
                                  "transform" : "copy",
                                  "parameter" : [
                                    {
                                      "valueString" : "Abnormal"
                                    }
                                  ]
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "interpreterRule",
                  "source" : [
                    {
                      "context" : "g",
                      "element" : "item",
                      "variable" : "ip",
                      "condition" : "(linkId = 'explained-by/interpreter-name') and answer.value.exists()"
                    }
                  ],
                  "rule" : [
                    {
                      "name" : "answer",
                      "source" : [
                        {
                          "context" : "ip",
                          "element" : "answer",
                          "listMode" : "first",
                          "variable" : "a"
                        }
                      ],
                      "rule" : [
                        {
                          "name" : "interpreterNote",
                          "source" : [
                            {
                              "context" : "a",
                              "element" : "value",
                              "variable" : "txt"
                            }
                          ],
                          "target" : [
                            {
                              "context" : "obs",
                              "element" : "note",
                              "variable" : "n"
                            },
                            {
                              "context" : "n",
                              "element" : "text",
                              "transform" : "copy",
                              "parameter" : [
                                {
                                  "valueId" : "txt"
                                }
                              ]
                            }
                          ]
                        }
                      ]
                    }
                  ]
                }
              ]
            }
          ],
          "documentation" : "── Was it explained in a language they understood? ─────────────────────\r\nIts own Observation. It is not a permission, so it is not a provision; but\r\nit is the fact that makes the consent informed, and a complaint or an\r\ninquest turns on it. An interpreter's name, where one was used, rides\r\nalongside as a note."
        }
      ]
    },
    {
      "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" : "BuildConsentBase",
      "input" : [
        {
          "name" : "qr",
          "type" : "QR",
          "mode" : "source"
        },
        {
          "name" : "r",
          "type" : "Consent",
          "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" : "SetConsentFullUrl",
              "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" : "Consent"
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "name" : "subject",
          "source" : [
            {
              "context" : "qr",
              "element" : "subject",
              "variable" : "s"
            }
          ],
          "target" : [
            {
              "context" : "r",
              "element" : "subject",
              "transform" : "copy",
              "parameter" : [
                {
                  "valueId" : "s"
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "name" : "SetConsentFullUrl",
      "input" : [
        {
          "name" : "r",
          "type" : "Consent",
          "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/Consent/"
                },
                {
                  "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" : "procedure-consent"
                        }
                      ]
                    }
                  ]
                },
                {
                  "name" : "provenanceDisplay",
                  "source" : [
                    {
                      "context" : "qr"
                    }
                  ],
                  "target" : [
                    {
                      "context" : "t",
                      "element" : "display",
                      "transform" : "copy",
                      "parameter" : [
                        {
                          "valueString" : "Consent for a procedure or treatment"
                        }
                      ]
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "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."
        }
      ]
    }
  ]
}