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

: ExtractMedicationRequest - XML Representation

Draft as of 2026-10-06

Raw xml | Download


<StructureMap xmlns="http://hl7.org/fhir">
  <id value="ExtractMedicationRequest"/>
  <text>
    <status value="generated"/>
    <div xmlns="http://www.w3.org/1999/xhtml"><p class="res-header-id"><b>Generated Narrative: StructureMap ExtractMedicationRequest</b></p><a name="ExtractMedicationRequest"> </a><a name="hcExtractMedicationRequest"> </a><pre class="fml">
<span style="color: #cc00cc">/// <b>url</b> = </span><span style="color: blue">'https://fhir.slade360.co.ke/fhir/StructureMap/ExtractMedicationRequest'</span>
<span style="color: #cc00cc">/// <b>name</b> = </span><span style="color: blue">'ExtractMedicationRequest'</span>
<span style="color: #cc00cc">/// <b>status</b> = </span><span style="color: blue">'draft'</span>

<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>
<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>
<b>uses</b><span style="color: navy"> &quot;</span><a href="http://hl7.org/fhir/R5/medicationrequest.html" title="MedicationRequest">http://hl7.org/fhir/StructureDefinition/MedicationRequest</a><span style="color: navy">&quot; </span><b>alias </b>MedicationRequest <b>as </b><b>target</b>
<b>uses</b><span style="color: navy"> &quot;</span><a href="http://hl7.org/fhir/R5/medication.html" title="Medication">http://hl7.org/fhir/StructureDefinition/Medication</a><span style="color: navy">&quot; </span><b>alias </b>Medication <b>as </b><b>target</b>

<b>group </b>ExtractMedicationRequest<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"> {
</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>
  qr.item<b> as </b><span style="color: maroon">prescriptionGroup</span><b> where </b><span style="color: navy">(</span>linkId = 'prescription-form'<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span>    prescriptionGroup<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">'MedicationRequest'</span><span style="color: navy">)</span><b> as </b><span style="color: maroon">medReq</span><b> then</b><span style="color: navy"> {
</span>      qr<span style="color: navy"><b> -&gt; </b></span>medReq<b> then </b>CopyResponseTags<span style="color: navy">(</span><span style="color: maroon">qr</span><span style="color: navy">, </span><span style="color: maroon">medReq</span><span style="color: navy">)</span> <i>&quot;responseTags&quot;</i><span style="color: navy">;</span>
      qr<span style="color: navy"><b> -&gt; </b></span> medReq<span style="color: navy">, </span> entry<b> then </b>BuildMedicationRequest<span style="color: navy">(</span><span style="color: maroon">qr</span><span style="color: navy">, </span><span style="color: maroon">prescriptionGroup</span><span style="color: navy">, </span><span style="color: maroon">medReq</span><span style="color: navy">, </span><span style="color: maroon">entry</span><span style="color: navy">)</span> <i>&quot;buildMedReq&quot;</i><span style="color: navy">;</span>
    <span style="color: navy">}</span> <i>&quot;createMedReq&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">}</span> <i>&quot;findPrescriptionGroup&quot;</i><span style="color: navy">;</span>
<span style="color: navy">}

</span><b>group </b>BuildMedicationRequest<span style="color: navy">(</span><b>source</b> <span style="color: maroon">qr</span><span style="color: navy"> : </span>QR, <b>source</b> <span style="color: maroon">prescriptionGroup</span>, <b>target</b> <span style="color: maroon">medReq</span><span style="color: navy"> : </span>MedicationRequest, <b>target</b> <span style="color: maroon">entry</span><span style="color: navy">)</span><span style="color: navy"> {
</span>  <span style="color: navy">// </span><span style="color: green">status will always be draft until medication has been signed off</span>
  qr<span style="color: navy"><b> -&gt; </b></span>medReq.status = <span style="color: blue">'draft'</span> <i>&quot;setStatus&quot;</i><span style="color: navy">;</span>
  qr<span style="color: navy"><b> -&gt; </b></span>medReq.intent = <span style="color: blue">'order'</span> <i>&quot;setIntent&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">// </span><span style="color: green">Subject from QuestionnaireResponse</span>
  qr.subject<b> as </b><span style="color: maroon">s</span><b> where </b><span style="color: navy">(</span>(reference.exists() and (reference.startsWith('Patient/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Patient')))<span style="color: navy">)</span><span style="color: navy"><b> -&gt; </b></span>medReq.subject = <span style="color: maroon">s</span> <i>&quot;setSubject&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">// </span><span style="color: green">Encounter from QuestionnaireResponse</span>
  qr.encounter<b> as </b><span style="color: maroon">enc</span><b> where </b><span style="color: navy">(</span>(reference.exists() and (reference.startsWith('Encounter/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Encounter')))<span style="color: navy">)</span><span style="color: navy"><b> -&gt; </b></span>medReq.encounter = <span style="color: maroon">enc</span> <i>&quot;setEncounter&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">// </span><span style="color: green">AuthoredOn from QuestionnaireResponse.authored</span>
  qr.authored<b> as </b><span style="color: maroon">authored</span><span style="color: navy"><b> -&gt; </b></span>medReq.authoredOn = <span style="color: maroon">authored</span> <i>&quot;setAuthoredOn&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">// </span><span style="color: green">Requester from QuestionnaireResponse.source (the Organization)</span>
  qr.source<b> as </b><span style="color: maroon">src</span><b> where </b><span style="color: navy">(</span>(reference.exists() and (reference.startsWith('Patient/') or reference.startsWith('Organization/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Patient') or ('/' + type).endsWith('/Organization')))<span style="color: navy">)</span><span style="color: navy"><b> -&gt; </b></span>medReq.requester = <span style="color: maroon">src</span> <i>&quot;setRequester&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">// </span><span style="color: green">Performer from QuestionnaireResponse.source (the Organization)</span>
  qr.source<b> as </b><span style="color: maroon">src</span><b> where </b><span style="color: navy">(</span>(reference.exists() and (reference.startsWith('Patient/') or reference.startsWith('Organization/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Patient') or ('/' + type).endsWith('/Organization')))<span style="color: navy">)</span><span style="color: navy"><b> -&gt; </b></span>medReq.performer = <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">perf</span><b> then</b><span style="color: navy"> {
</span>    src.reference<b> as </b><span style="color: maroon">ref</span><span style="color: navy"><b> -&gt; </b></span>perf.reference = <span style="color: maroon">ref</span> <i>&quot;perfRef&quot;</i><span style="color: navy">;</span>
    src.display<b> as </b><span style="color: maroon">disp</span><span style="color: navy"><b> -&gt; </b></span>perf.display = <span style="color: maroon">disp</span> <i>&quot;perfDisplay&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">}</span> <i>&quot;performer&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">// </span><span style="color: green">Copy identifier from QuestionnaireResponse to MedicationRequest, unless its</span>
  <span style="color: navy">// </span><span style="color: green">assigner is something an identifier cannot be assigned by.</span>
  qr.identifier first<b> as </b><span style="color: maroon">qrIdent</span><b> where </b><span style="color: navy">(</span>assigner.empty() or assigner.where(((reference.exists() and (reference.startsWith('Organization/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Organization'))))).exists()<span style="color: navy">)</span><span style="color: navy"><b> -&gt; </b></span>medReq.identifier = <span style="color: maroon">qrIdent</span> <i>&quot;copyIdentifier&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">// </span><span style="color: green">Medication as CodeableReference from the medication-reference extension, which</span>
  <span style="color: navy">// </span><span style="color: green">the platform writes under either canonical. Assigning the whole CodeableConcept</span>
  <span style="color: navy">// </span><span style="color: green">carries its codings and their systems, so there is nothing further to copy.</span>
  <span style="color: navy">// </span><span style="color: green">R5's engine reads a choice as `value`: `valueCodeableConcept`, and every</span>
  <span style="color: navy">// </span><span style="color: green">`valueX` below, is an invalid property here and failed the whole extraction.</span>
  qr.extension<b> as </b><span style="color: maroon">ext</span><b> where </b><span style="color: navy">(</span>url.endsWith('/StructureDefinition/medication-reference')<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span>    ext.value<b> as </b><span style="color: maroon">medCC</span><b> where </b><span style="color: navy">(</span>$this is CodeableConcept<span style="color: navy">)</span><span style="color: navy"><b> -&gt; </b></span>medReq.medication<b> as </b><span style="color: maroon">med</span><b> then</b><span style="color: navy"> {
</span>      medCC<span style="color: navy"><b> -&gt; </b></span>med.concept = <span style="color: maroon">medCC</span> <i>&quot;setMedConcept&quot;</i><span style="color: navy">;</span>
    <span style="color: navy">}</span> <i>&quot;accessMedication&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">}</span> <i>&quot;findMedicationExt&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">// </span><span style="color: green">Priority</span>
  prescriptionGroup.item<b> as </b><span style="color: maroon">priorityItem</span><b> where </b><span style="color: navy">(</span>linkId = 'priority'<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span>    priorityItem.answer first<b> as </b><span style="color: maroon">priorityAns</span><b> then</b><span style="color: navy"> {
</span>      <span style="color: navy">// </span><span style="color: green">MedicationRequest.priority is a code, not a Coding: it holds the code</span>
      <span style="color: navy">// </span><span style="color: green">alone and has nowhere to put the system it came from.</span>
      priorityAns.value<b> as </b><span style="color: maroon">priorityCoding</span><b> where </b><span style="color: navy">(</span>$this is Coding<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span>        priorityCoding.code<b> as </b><span style="color: maroon">pCode</span><span style="color: navy"><b> -&gt; </b></span>medReq.priority = <span style="color: maroon">pCode</span> <i>&quot;setPriorityCode&quot;</i><span style="color: navy">;</span>
      <span style="color: navy">}</span> <i>&quot;extractPriorityCode&quot;</i><span style="color: navy">;</span>
    <span style="color: navy">}</span> <i>&quot;extractPriority&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">}</span> <i>&quot;findPriority&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">// </span><span style="color: green">Dosage Instruction</span>
  qr<span style="color: navy"><b> -&gt; </b></span>medReq.dosageInstruction = <b>create</b><span style="color: navy">(</span><span style="color: blue">'Dosage'</span><span style="color: navy">)</span><b> as </b><span style="color: maroon">dosage</span><b> then</b><span style="color: navy"> {
</span>    prescriptionGroup<span style="color: navy"><b> -&gt; </b></span>dosage<b> then </b>BuildDosage<span style="color: navy">(</span><span style="color: maroon">prescriptionGroup</span><span style="color: navy">, </span><span style="color: maroon">dosage</span><span style="color: navy">)</span> <i>&quot;buildDosage&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">}</span> <i>&quot;createDosage&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">// </span><span style="color: green">Substitution</span>
  prescriptionGroup.item<b> as </b><span style="color: maroon">substItem</span><b> where </b><span style="color: navy">(</span>linkId = 'substitutable'<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span>    substItem.answer first<b> as </b><span style="color: maroon">substAns</span><b> then</b><span style="color: navy"> {
</span>      substAns.value<b> as </b><span style="color: maroon">substBool</span><b> where </b><span style="color: navy">(</span>$this is boolean<span style="color: navy">)</span><span style="color: navy"><b> -&gt; </b></span>medReq.substitution<b> as </b><span style="color: maroon">subst</span><b> then</b><span style="color: navy"> {
</span>        <span style="color: navy">// </span><span style="color: green">allowed[x] is written as `allowed`; the engine picks the type from the value.</span>
        substBool<span style="color: navy"><b> -&gt; </b></span>subst.allowed = <span style="color: maroon">substBool</span> <i>&quot;setSubstValue&quot;</i><span style="color: navy">;</span>
      <span style="color: navy">}</span> <i>&quot;createSubst&quot;</i><span style="color: navy">;</span>
    <span style="color: navy">}</span> <i>&quot;extractSubst&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">}</span> <i>&quot;findSubst&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">// </span><span style="color: green">Dispense Request</span>
  qr<span style="color: navy"><b> -&gt; </b></span>medReq.dispenseRequest<b> as </b><span style="color: maroon">dispReq</span><b> then</b><span style="color: navy"> {
</span>    prescriptionGroup<span style="color: navy"><b> -&gt; </b></span>dispReq<b> then </b>BuildDispenseRequest<span style="color: navy">(</span><span style="color: maroon">qr</span><span style="color: navy">, </span><span style="color: maroon">prescriptionGroup</span><span style="color: navy">, </span><span style="color: maroon">dispReq</span><span style="color: navy">)</span> <i>&quot;buildDispReq&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">}</span> <i>&quot;createDispReq&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">// </span><span style="color: green">Set ID and FullUrl</span>
  qr<span style="color: navy"><b> -&gt; </b></span>medReq.id = <b>uuid</b><span style="color: navy">(</span><span style="color: navy">)</span><b> then </b>SetMedicationRequestFullUrl<span style="color: navy">(</span><span style="color: maroon">medReq</span><span style="color: navy">, </span><span style="color: maroon">entry</span><span style="color: navy">)</span> <i>&quot;setMedReqIdAndFullUrl&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">// </span><span style="color: green">Entry request for transaction bundle</span>
  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"> {
</span>    qr<span style="color: navy"><b> -&gt; </b></span>request.method = <span style="color: blue">'POST'</span> <i>&quot;reqMethod&quot;</i><span style="color: navy">;</span>
    qr<span style="color: navy"><b> -&gt; </b></span>request.url = <span style="color: blue">'MedicationRequest'</span> <i>&quot;reqUrl&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">}</span> <i>&quot;entryRequest&quot;</i><span style="color: navy">;</span>
<span style="color: navy">}

</span><b>group </b>BuildDosage<span style="color: navy">(</span><b>source</b> <span style="color: maroon">prescriptionGroup</span>, <b>target</b> <span style="color: maroon">dosage</span><span style="color: navy"> : </span>Dosage<span style="color: navy">)</span><span style="color: navy"> {
</span>  prescriptionGroup<span style="color: navy"><b> -&gt; </b></span>dosage.timing<b> as </b><span style="color: maroon">timing</span><b> then</b><span style="color: navy"> {
</span>    prescriptionGroup<span style="color: navy"><b> -&gt; </b></span>timing.repeat<b> as </b><span style="color: maroon">repeat</span><b> then</b><span style="color: navy"> {
</span>      <span style="color: navy">// </span><span style="color: green">Frequency (OD, BD, TID, QID). A positiveInt, which an integer is not converted</span>
      <span style="color: navy">// </span><span style="color: green">to, so each is cast.</span>
      prescriptionGroup.item<b> as </b><span style="color: maroon">freqItem</span><b> where </b><span style="color: navy">(</span>linkId = 'frequency'<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span>        freqItem.answer first<b> as </b><span style="color: maroon">freqAns</span><b> then</b><span style="color: navy"> {
</span>          freqAns.value<b> as </b><span style="color: maroon">freqCoding</span><b> where </b><span style="color: navy">(</span>($this is Coding) and (code = 'OD')<span style="color: navy">)</span><span style="color: navy"><b> -&gt; </b></span>repeat.frequency = <b>cast</b><span style="color: navy">(</span><span style="color: blue">'1'</span><span style="color: navy">, </span><span style="color: blue">'positiveInt'</span><span style="color: navy">)</span> <i>&quot;setFreqOD&quot;</i><span style="color: navy">;</span>
          freqAns.value<b> as </b><span style="color: maroon">freqCoding</span><b> where </b><span style="color: navy">(</span>($this is Coding) and (code = 'BD')<span style="color: navy">)</span><span style="color: navy"><b> -&gt; </b></span>repeat.frequency = <b>cast</b><span style="color: navy">(</span><span style="color: blue">'2'</span><span style="color: navy">, </span><span style="color: blue">'positiveInt'</span><span style="color: navy">)</span> <i>&quot;setFreqBD&quot;</i><span style="color: navy">;</span>
          freqAns.value<b> as </b><span style="color: maroon">freqCoding</span><b> where </b><span style="color: navy">(</span>($this is Coding) and (code = 'TID')<span style="color: navy">)</span><span style="color: navy"><b> -&gt; </b></span>repeat.frequency = <b>cast</b><span style="color: navy">(</span><span style="color: blue">'3'</span><span style="color: navy">, </span><span style="color: blue">'positiveInt'</span><span style="color: navy">)</span> <i>&quot;setFreqTID&quot;</i><span style="color: navy">;</span>
          freqAns.value<b> as </b><span style="color: maroon">freqCoding</span><b> where </b><span style="color: navy">(</span>($this is Coding) and (code = 'QID')<span style="color: navy">)</span><span style="color: navy"><b> -&gt; </b></span>repeat.frequency = <b>cast</b><span style="color: navy">(</span><span style="color: blue">'4'</span><span style="color: navy">, </span><span style="color: blue">'positiveInt'</span><span style="color: navy">)</span> <i>&quot;setFreqQID&quot;</i><span style="color: navy">;</span>
        <span style="color: navy">}</span> <i>&quot;extractFreq&quot;</i><span style="color: navy">;</span>
      <span style="color: navy">}</span> <i>&quot;findFreq&quot;</i><span style="color: navy">;</span>
      <span style="color: navy">// </span><span style="color: green">Period (1 day)</span>
      prescriptionGroup<span style="color: navy"><b> -&gt; </b></span>repeat.period = <span style="color: blue">1</span> <i>&quot;setPeriod&quot;</i><span style="color: navy">;</span>
      prescriptionGroup<span style="color: navy"><b> -&gt; </b></span>repeat.periodUnit = <span style="color: blue">'d'</span> <i>&quot;setPeriodUnit&quot;</i><span style="color: navy">;</span>
      <span style="color: navy">// </span><span style="color: green">Duration</span>
      prescriptionGroup.item<b> as </b><span style="color: maroon">durItem</span><b> where </b><span style="color: navy">(</span>linkId = 'duration'<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span>        durItem.answer first<b> as </b><span style="color: maroon">durAns</span><b> then</b><span style="color: navy"> {
</span>          durAns.value<b> as </b><span style="color: maroon">durValue</span><b> where </b><span style="color: navy">(</span>$this is integer<span style="color: navy">)</span><span style="color: navy"><b> -&gt; </b></span>repeat.duration = <span style="color: maroon">durValue</span> <i>&quot;setDuration&quot;</i><span style="color: navy">;</span>
        <span style="color: navy">}</span> <i>&quot;extractDuration&quot;</i><span style="color: navy">;</span>
      <span style="color: navy">}</span> <i>&quot;findDuration&quot;</i><span style="color: navy">;</span>
      <span style="color: navy">// </span><span style="color: green">Duration UOM - directly use the code from unitsofmeasure.org (h, d, wk, mo, a)</span>
      prescriptionGroup.item<b> as </b><span style="color: maroon">durUomItem</span><b> where </b><span style="color: navy">(</span>linkId = 'duration-uom'<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span>        durUomItem.answer first<b> as </b><span style="color: maroon">durUomAns</span><b> then</b><span style="color: navy"> {
</span>          durUomAns.value<b> as </b><span style="color: maroon">durUomCoding</span><b> where </b><span style="color: navy">(</span>$this is Coding<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span>            durUomCoding.code<b> as </b><span style="color: maroon">durUomCode</span><span style="color: navy"><b> -&gt; </b></span>repeat.durationUnit = <span style="color: maroon">durUomCode</span> <i>&quot;setDurationUnit&quot;</i><span style="color: navy">;</span>
          <span style="color: navy">}</span> <i>&quot;extractDurUomCode&quot;</i><span style="color: navy">;</span>
        <span style="color: navy">}</span> <i>&quot;extractDurUom&quot;</i><span style="color: navy">;</span>
      <span style="color: navy">}</span> <i>&quot;findDurUom&quot;</i><span style="color: navy">;</span>
      <span style="color: navy">// </span><span style="color: green">When to take - directly use the code (AC, PC, ACM, ACD, ACV, PCM, PCD, PCV, etc.)</span>
      <span style="color: navy">// </span><span style="color: green">Handles both single answer and array of answers</span>
      prescriptionGroup.item<b> as </b><span style="color: maroon">whenItem</span><b> where </b><span style="color: navy">(</span>linkId = 'when-to-take'<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span>        whenItem.answer<b> as </b><span style="color: maroon">whenAns</span><b> then</b><span style="color: navy"> {
</span>          whenAns.value<b> as </b><span style="color: maroon">whenCoding</span><b> where </b><span style="color: navy">(</span>$this is Coding<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span>            whenCoding.code<b> as </b><span style="color: maroon">whenCode</span><span style="color: navy"><b> -&gt; </b></span>repeat.when = <span style="color: maroon">whenCode</span> <i>&quot;setWhenCode&quot;</i><span style="color: navy">;</span>
          <span style="color: navy">}</span> <i>&quot;extractWhenCode&quot;</i><span style="color: navy">;</span>
        <span style="color: navy">}</span> <i>&quot;extractWhen&quot;</i><span style="color: navy">;</span>
      <span style="color: navy">}</span> <i>&quot;findWhen&quot;</i><span style="color: navy">;</span>
      <span style="color: navy">// </span><span style="color: green">Bounds Period from start-date and end-date</span>
      prescriptionGroup.item<b> as </b><span style="color: maroon">startItem</span><b> where </b><span style="color: navy">(</span>linkId = 'start-date'<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span>        startItem.answer first<b> as </b><span style="color: maroon">startAns</span><b> then</b><span style="color: navy"> {
</span>          startAns.value<b> as </b><span style="color: maroon">startDate</span><b> where </b><span style="color: navy">(</span>$this is date<span style="color: navy">)</span><span style="color: navy"><b> -&gt; </b></span>repeat.bounds = <b>create</b><span style="color: navy">(</span><span style="color: blue">'Period'</span><span style="color: navy">)</span><b> as </b><span style="color: maroon">boundsPeriod</span><b> then</b><span style="color: navy"> {
</span>            startDate<span style="color: navy"><b> -&gt; </b></span>boundsPeriod.start = <span style="color: maroon">startDate</span> <i>&quot;setBoundsStart&quot;</i><span style="color: navy">;</span>
            prescriptionGroup.item<b> as </b><span style="color: maroon">endItem</span><b> where </b><span style="color: navy">(</span>linkId = 'end-date'<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span>              endItem.answer first<b> as </b><span style="color: maroon">endAns</span><b> then</b><span style="color: navy"> {
</span>                endAns.value<b> as </b><span style="color: maroon">endDate</span><b> where </b><span style="color: navy">(</span>$this is date<span style="color: navy">)</span><span style="color: navy"><b> -&gt; </b></span>boundsPeriod.end = <span style="color: maroon">endDate</span> <i>&quot;setBoundsEnd&quot;</i><span style="color: navy">;</span>
              <span style="color: navy">}</span> <i>&quot;extractEndDate&quot;</i><span style="color: navy">;</span>
            <span style="color: navy">}</span> <i>&quot;findEndDate&quot;</i><span style="color: navy">;</span>
          <span style="color: navy">}</span> <i>&quot;createBoundsPeriod&quot;</i><span style="color: navy">;</span>
        <span style="color: navy">}</span> <i>&quot;extractStartDate&quot;</i><span style="color: navy">;</span>
      <span style="color: navy">}</span> <i>&quot;findStartDate&quot;</i><span style="color: navy">;</span>
    <span style="color: navy">}</span> <i>&quot;accessRepeat&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">}</span> <i>&quot;accessTiming&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">// </span><span style="color: green">Route</span>
  prescriptionGroup.item<b> as </b><span style="color: maroon">routeItem</span><b> where </b><span style="color: navy">(</span>linkId = 'route'<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span>    routeItem.answer first<b> as </b><span style="color: maroon">routeAns</span><b> then</b><span style="color: navy"> {
</span>      routeAns.value<b> as </b><span style="color: maroon">routeCoding</span><b> where </b><span style="color: navy">(</span>$this is Coding<span style="color: navy">)</span><span style="color: navy"><b> -&gt; </b></span>dosage.route = <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">routeCC</span><b> then</b><span style="color: navy"> {
</span>        routeCoding<span style="color: navy"><b> -&gt; </b></span>routeCC.coding = <span style="color: maroon">routeCoding</span> <i>&quot;setRouteCoding&quot;</i><span style="color: navy">;</span>
        routeCoding.display<b> as </b><span style="color: maroon">disp</span><span style="color: navy"><b> -&gt; </b></span>routeCC.text = <span style="color: maroon">disp</span> <i>&quot;setRouteText&quot;</i><span style="color: navy">;</span>
      <span style="color: navy">}</span> <i>&quot;setRouteCC&quot;</i><span style="color: navy">;</span>
    <span style="color: navy">}</span> <i>&quot;extractRoute&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">}</span> <i>&quot;findRoute&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">// </span><span style="color: green">Dose and Rate. A dose can be a fraction (half a tablet, 2.5 ml), so a decimal</span>
  <span style="color: navy">// </span><span style="color: green">answer is read as well as the integer ones already stored.</span>
  prescriptionGroup.item<b> as </b><span style="color: maroon">doseItem</span><b> where </b><span style="color: navy">(</span>linkId = 'dose'<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span>    doseItem.answer first<b> as </b><span style="color: maroon">doseAns</span><b> then</b><span style="color: navy"> {
</span>      doseAns.value<b> as </b><span style="color: maroon">doseValue</span><b> where </b><span style="color: navy">(</span>($this is integer) or ($this is decimal)<span style="color: navy">)</span><span style="color: navy"><b> -&gt; </b></span> dosage.doseAndRate<b> as </b><span style="color: maroon">doseRate</span><span style="color: navy">, </span> doseRate.dose = <b>create</b><span style="color: navy">(</span><span style="color: blue">'Quantity'</span><span style="color: navy">)</span><b> as </b><span style="color: maroon">doseQty</span><b> then</b><span style="color: navy"> {
</span>        doseValue<span style="color: navy"><b> -&gt; </b></span>doseQty.value = <span style="color: maroon">doseValue</span> <i>&quot;setDoseValue&quot;</i><span style="color: navy">;</span>
        prescriptionGroup.item<b> as </b><span style="color: maroon">doseUnitItem</span><b> where </b><span style="color: navy">(</span>linkId = 'dosage-unit'<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span>          doseUnitItem.answer first<b> as </b><span style="color: maroon">doseUnitAns</span><b> then</b><span style="color: navy"> {
</span>            doseUnitAns.value<b> as </b><span style="color: maroon">unitCoding</span><b> where </b><span style="color: navy">(</span>$this is Coding<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span>              unitCoding.display<b> as </b><span style="color: maroon">unitDisp</span><span style="color: navy"><b> -&gt; </b></span>doseQty.unit = <span style="color: maroon">unitDisp</span> <i>&quot;setDoseUnit&quot;</i><span style="color: navy">;</span>
              unitCoding.code<b> as </b><span style="color: maroon">unitCode</span><span style="color: navy"><b> -&gt; </b></span>doseQty.code = <span style="color: maroon">unitCode</span> <i>&quot;setDoseCode&quot;</i><span style="color: navy">;</span>
              unitCoding.system<b> as </b><span style="color: maroon">unitSys</span><span style="color: navy"><b> -&gt; </b></span>doseQty.system = <span style="color: maroon">unitSys</span> <i>&quot;setDoseSystem&quot;</i><span style="color: navy">;</span>
            <span style="color: navy">}</span> <i>&quot;extractUnitCoding&quot;</i><span style="color: navy">;</span>
          <span style="color: navy">}</span> <i>&quot;extractDoseUnitAns&quot;</i><span style="color: navy">;</span>
        <span style="color: navy">}</span> <i>&quot;findDoseUnit&quot;</i><span style="color: navy">;</span>
      <span style="color: navy">}</span> <i>&quot;createDoseAndRate&quot;</i><span style="color: navy">;</span>
    <span style="color: navy">}</span> <i>&quot;extractDoseAns&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">}</span> <i>&quot;findDose&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">// </span><span style="color: green">Dosage Instructions (patient instruction)</span>
  prescriptionGroup.item<b> as </b><span style="color: maroon">instrItem</span><b> where </b><span style="color: navy">(</span>linkId = 'dosage-instructions'<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span>    instrItem.answer first<b> as </b><span style="color: maroon">instrAns</span><b> then</b><span style="color: navy"> {
</span>      instrAns.value<b> as </b><span style="color: maroon">instrText</span><b> where </b><span style="color: navy">(</span>$this is string<span style="color: navy">)</span><span style="color: navy"><b> -&gt; </b></span>dosage.patientInstruction = <span style="color: maroon">instrText</span> <i>&quot;setPatientInstruction&quot;</i><span style="color: navy">;</span>
    <span style="color: navy">}</span> <i>&quot;extractInstr&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">}</span> <i>&quot;findDosageInstr&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">// </span><span style="color: green">Additional Instructions (text)</span>
  prescriptionGroup.item<b> as </b><span style="color: maroon">addInstrItem</span><b> where </b><span style="color: navy">(</span>linkId = 'additional-instructions'<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span>    addInstrItem.answer first<b> as </b><span style="color: maroon">addInstrAns</span><b> then</b><span style="color: navy"> {
</span>      addInstrAns.value<b> as </b><span style="color: maroon">addInstrText</span><b> where </b><span style="color: navy">(</span>$this is string<span style="color: navy">)</span><span style="color: navy"><b> -&gt; </b></span>dosage.text = <span style="color: maroon">addInstrText</span> <i>&quot;setDosageText&quot;</i><span style="color: navy">;</span>
    <span style="color: navy">}</span> <i>&quot;extractAddInstr&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">}</span> <i>&quot;findAddInstr&quot;</i><span style="color: navy">;</span>
<span style="color: navy">}

</span><b>group </b>BuildDispenseRequest<span style="color: navy">(</span><b>source</b> <span style="color: maroon">qr</span><span style="color: navy"> : </span>QR, <b>source</b> <span style="color: maroon">prescriptionGroup</span>, <b>target</b> <span style="color: maroon">dispReq</span><span style="color: navy">)</span><span style="color: navy"> {
</span>  <span style="color: navy">// </span><span style="color: green">Refills</span>
  prescriptionGroup.item<b> as </b><span style="color: maroon">refillsItem</span><b> where </b><span style="color: navy">(</span>linkId = 'refills'<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span>    refillsItem.answer first<b> as </b><span style="color: maroon">refillsAns</span><b> then</b><span style="color: navy"> {
</span>      <span style="color: navy">// </span><span style="color: green">An unsignedInt, which an integer is not converted to: cast, and only from zero up.</span>
      refillsAns.value<b> as </b><span style="color: maroon">refillsValue</span><b> where </b><span style="color: navy">(</span>($this is integer) and ($this &gt;= 0)<span style="color: navy">)</span><span style="color: navy"><b> -&gt; </b></span>dispReq.numberOfRepeatsAllowed = <b>cast</b><span style="color: navy">(</span><span style="color: maroon">refillsValue</span><span style="color: navy">, </span><span style="color: blue">'unsignedInt'</span><span style="color: navy">)</span> <i>&quot;setRefills&quot;</i><span style="color: navy">;</span>
    <span style="color: navy">}</span> <i>&quot;extractRefills&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">}</span> <i>&quot;findRefills&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">// </span><span style="color: green">Validity Period from start-date and end-date</span>
  prescriptionGroup.item<b> as </b><span style="color: maroon">startItem</span><b> where </b><span style="color: navy">(</span>linkId = 'start-date'<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span>    startItem.answer first<b> as </b><span style="color: maroon">startAns</span><b> then</b><span style="color: navy"> {
</span>      startAns.value<b> as </b><span style="color: maroon">startDate</span><b> where </b><span style="color: navy">(</span>$this is date<span style="color: navy">)</span><span style="color: navy"><b> -&gt; </b></span>dispReq.validityPeriod<b> as </b><span style="color: maroon">validPeriod</span><b> then</b><span style="color: navy"> {
</span>        startDate<span style="color: navy"><b> -&gt; </b></span>validPeriod.start = <span style="color: maroon">startDate</span> <i>&quot;setValidityStart&quot;</i><span style="color: navy">;</span>
        prescriptionGroup.item<b> as </b><span style="color: maroon">endItem</span><b> where </b><span style="color: navy">(</span>linkId = 'end-date'<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span>          endItem.answer first<b> as </b><span style="color: maroon">endAns</span><b> then</b><span style="color: navy"> {
</span>            endAns.value<b> as </b><span style="color: maroon">endDate</span><b> where </b><span style="color: navy">(</span>$this is date<span style="color: navy">)</span><span style="color: navy"><b> -&gt; </b></span>validPeriod.end = <span style="color: maroon">endDate</span> <i>&quot;setValidityEnd&quot;</i><span style="color: navy">;</span>
          <span style="color: navy">}</span> <i>&quot;extractValidityEnd&quot;</i><span style="color: navy">;</span>
        <span style="color: navy">}</span> <i>&quot;findValidityEnd&quot;</i><span style="color: navy">;</span>
      <span style="color: navy">}</span> <i>&quot;createValidityPeriod&quot;</i><span style="color: navy">;</span>
    <span style="color: navy">}</span> <i>&quot;extractValidityStart&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">}</span> <i>&quot;findValidityStart&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">// </span><span style="color: green">Expected Supply Duration</span>
  prescriptionGroup.item<b> as </b><span style="color: maroon">durItem</span><b> where </b><span style="color: navy">(</span>linkId = 'duration'<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span>    durItem.answer first<b> as </b><span style="color: maroon">durAns</span><b> then</b><span style="color: navy"> {
</span>      durAns.value<b> as </b><span style="color: maroon">durValue</span><b> where </b><span style="color: navy">(</span>$this is integer<span style="color: navy">)</span><span style="color: navy"><b> -&gt; </b></span>dispReq.expectedSupplyDuration<b> as </b><span style="color: maroon">supplyDur</span><b> then</b><span style="color: navy"> {
</span>        durValue<span style="color: navy"><b> -&gt; </b></span>supplyDur.value = <span style="color: maroon">durValue</span> <i>&quot;setSupplyDurValue&quot;</i><span style="color: navy">;</span>
        prescriptionGroup.item<b> as </b><span style="color: maroon">durUomItem</span><b> where </b><span style="color: navy">(</span>linkId = 'duration-uom'<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span>          durUomItem.answer first<b> as </b><span style="color: maroon">durUomAns</span><b> then</b><span style="color: navy"> {
</span>            durUomAns.value<b> as </b><span style="color: maroon">durUomCoding</span><b> where </b><span style="color: navy">(</span>$this is Coding<span style="color: navy">)</span><b> then</b><span style="color: navy"> {
</span>              durUomCoding.code<b> as </b><span style="color: maroon">uomCode</span><span style="color: navy"><b> -&gt; </b></span>supplyDur.code = <span style="color: maroon">uomCode</span> <i>&quot;setSupplyDurCode&quot;</i><span style="color: navy">;</span>
              durUomCoding.display<b> as </b><span style="color: maroon">uomDisplay</span><span style="color: navy"><b> -&gt; </b></span>supplyDur.unit = <span style="color: maroon">uomDisplay</span> <i>&quot;setSupplyDurUnit&quot;</i><span style="color: navy">;</span>
              durUomCoding.system<b> as </b><span style="color: maroon">uomSystem</span><span style="color: navy"><b> -&gt; </b></span>supplyDur.system = <span style="color: maroon">uomSystem</span> <i>&quot;setSupplyDurSystem&quot;</i><span style="color: navy">;</span>
            <span style="color: navy">}</span> <i>&quot;extractSupplyDurUom&quot;</i><span style="color: navy">;</span>
          <span style="color: navy">}</span> <i>&quot;extractSupplyDurUomAns&quot;</i><span style="color: navy">;</span>
        <span style="color: navy">}</span> <i>&quot;findSupplyDurUom&quot;</i><span style="color: navy">;</span>
      <span style="color: navy">}</span> <i>&quot;createSupplyDuration&quot;</i><span style="color: navy">;</span>
    <span style="color: navy">}</span> <i>&quot;extractSupplyDuration&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">}</span> <i>&quot;findSupplyDuration&quot;</i><span style="color: navy">;</span>
  <span style="color: navy">// </span><span style="color: green">Dispenser - from QuestionnaireResponse.source (Organization)</span>
  qr.source<b> as </b><span style="color: maroon">src</span><b> where </b><span style="color: navy">(</span>(reference.exists() and (reference.startsWith('Organization/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Organization')))<span style="color: navy">)</span><span style="color: navy"><b> -&gt; </b></span>dispReq.dispenser = <span style="color: maroon">src</span> <i>&quot;setDispenser&quot;</i><span style="color: navy">;</span>
<span style="color: navy">}

</span><b>group </b>SetMedicationRequestFullUrl<span style="color: navy">(</span><b>source</b> <span style="color: maroon">medReq</span><span style="color: navy"> : </span>MedicationRequest, <b>target</b> <span style="color: maroon">entry</span><span style="color: navy">)</span><span style="color: navy"> {
</span>  medReq.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/MedicationRequest/'</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>
<span style="color: navy">}

</span><span style="color: navy">// </span><span style="color: green">── Tenancy ──────────────────────────────────────────────────────────────────</span>
<span style="color: navy">// </span><span style="color: green">Whose this is. The platform says which tenant a response belongs to with a</span>
<span style="color: navy">// </span><span style="color: green">tag on the response, and every tag the response carries is copied onto</span>
<span style="color: navy">// </span><span style="color: green">everything this map creates, as it is. Copied rather than named here, so the</span>
<span style="color: navy">// </span><span style="color: green">map never has to know which tenant it is running for, nor which system the</span>
<span style="color: navy">// </span><span style="color: green">tag is under: that system has moved more than once.</span>
<b>group </b>CopyResponseTags<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"> {
</span>  qr.meta<b> as </b><span style="color: maroon">qm</span><b> then</b><span style="color: navy"> {
</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>
  <span style="color: navy">}</span> <i>&quot;tenantTags&quot;</i><span style="color: navy">;</span>
<span style="color: navy">}

</span></pre></div>
  </text>
  <url
       value="https://fhir.slade360.co.ke/fhir/StructureMap/ExtractMedicationRequest"/>
  <version value="0.1.0"/>
  <name value="ExtractMedicationRequest"/>
  <status value="draft"/>
  <date value="2026-10-06T18:48:22+00:00"/>
  <publisher value="Kathurima Kimathi"/>
  <contact>
    <name value="Kathurima Kimathi"/>
    <telecom>
      <system value="url"/>
      <value value="https://www.linkedin.com/in/kathurima-kimathi/"/>
    </telecom>
    <telecom>
      <system value="email"/>
      <value value="kathurimakimathi415@gmail.com"/>
    </telecom>
  </contact>
  <contact>
    <name value="Oscar John"/>
    <telecom>
      <system value="email"/>
      <value value="oscarjohnotieno@gmail.com"/>
      <use value="work"/>
    </telecom>
  </contact>
  <contact>
    <name value="Kennedy Omondi"/>
    <telecom>
      <system value="email"/>
      <value value="kennankole@gmail.com"/>
      <use value="work"/>
    </telecom>
  </contact>
  <structure>
    <url
         value="http://hl7.org/fhir/StructureDefinition/QuestionnaireResponse"/>
    <mode value="source"/>
    <alias value="QR"/>
  </structure>
  <structure>
    <url value="http://hl7.org/fhir/StructureDefinition/Bundle"/>
    <mode value="target"/>
    <alias value="Bundle"/>
  </structure>
  <structure>
    <url value="http://hl7.org/fhir/StructureDefinition/MedicationRequest"/>
    <mode value="target"/>
    <alias value="MedicationRequest"/>
  </structure>
  <structure>
    <url value="http://hl7.org/fhir/StructureDefinition/Medication"/>
    <mode value="target"/>
    <alias value="Medication"/>
  </structure>
  <group>
    <name value="ExtractMedicationRequest"/>
    <input>
      <name value="qr"/>
      <type value="QR"/>
      <mode value="source"/>
    </input>
    <input>
      <name value="bundle"/>
      <type value="Bundle"/>
      <mode value="target"/>
    </input>
    <rule>
      <name value="setBundleType"/>
      <source>
        <context value="qr"/>
      </source>
      <target>
        <context value="bundle"/>
        <element value="type"/>
        <transform value="copy"/>
        <parameter>
          <valueString value="transaction"/>
        </parameter>
      </target>
    </rule>
    <rule>
      <name value="findPrescriptionGroup"/>
      <source>
        <context value="qr"/>
        <element value="item"/>
        <variable value="prescriptionGroup"/>
        <condition value="linkId = 'prescription-form'"/>
      </source>
      <rule>
        <name value="createMedReq"/>
        <source>
          <context value="prescriptionGroup"/>
        </source>
        <target>
          <context value="bundle"/>
          <element value="entry"/>
          <variable value="entry"/>
        </target>
        <target>
          <context value="entry"/>
          <element value="resource"/>
          <variable value="medReq"/>
          <transform value="create"/>
          <parameter>
            <valueString value="MedicationRequest"/>
          </parameter>
        </target>
        <rule>
          <name value="responseTags"/>
          <source>
            <context value="qr"/>
          </source>
          <target>
            <context value="medReq"/>
          </target>
          <dependent>
            <name value="CopyResponseTags"/>
            <parameter>
              <valueId value="qr"/>
            </parameter>
            <parameter>
              <valueId value="medReq"/>
            </parameter>
          </dependent>
        </rule>
        <rule>
          <name value="buildMedReq"/>
          <source>
            <context value="qr"/>
          </source>
          <target>
            <context value="medReq"/>
          </target>
          <target>
            <context value="entry"/>
          </target>
          <dependent>
            <name value="BuildMedicationRequest"/>
            <parameter>
              <valueId value="qr"/>
            </parameter>
            <parameter>
              <valueId value="prescriptionGroup"/>
            </parameter>
            <parameter>
              <valueId value="medReq"/>
            </parameter>
            <parameter>
              <valueId value="entry"/>
            </parameter>
          </dependent>
        </rule>
      </rule>
    </rule>
  </group>
  <group>
    <name value="BuildMedicationRequest"/>
    <input>
      <name value="qr"/>
      <type value="QR"/>
      <mode value="source"/>
    </input>
    <input>
      <name value="prescriptionGroup"/>
      <mode value="source"/>
    </input>
    <input>
      <name value="medReq"/>
      <type value="MedicationRequest"/>
      <mode value="target"/>
    </input>
    <input>
      <name value="entry"/>
      <mode value="target"/>
    </input>
    <rule>
      <name value="setStatus"/>
      <source>
        <context value="qr"/>
      </source>
      <target>
        <context value="medReq"/>
        <element value="status"/>
        <transform value="copy"/>
        <parameter>
          <valueString value="draft"/>
        </parameter>
      </target>
      <documentation
                     value="status will always be draft until medication has been signed off"/>
    </rule>
    <rule>
      <name value="setIntent"/>
      <source>
        <context value="qr"/>
      </source>
      <target>
        <context value="medReq"/>
        <element value="intent"/>
        <transform value="copy"/>
        <parameter>
          <valueString value="order"/>
        </parameter>
      </target>
    </rule>
    <rule>
      <name value="setSubject"/>
      <source>
        <context value="qr"/>
        <element value="subject"/>
        <variable value="s"/>
        <condition
                   value="(reference.exists() and (reference.startsWith('Patient/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Patient')))"/>
      </source>
      <target>
        <context value="medReq"/>
        <element value="subject"/>
        <transform value="copy"/>
        <parameter>
          <valueId value="s"/>
        </parameter>
      </target>
      <documentation value="Subject from QuestionnaireResponse"/>
    </rule>
    <rule>
      <name value="setEncounter"/>
      <source>
        <context value="qr"/>
        <element value="encounter"/>
        <variable value="enc"/>
        <condition
                   value="(reference.exists() and (reference.startsWith('Encounter/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Encounter')))"/>
      </source>
      <target>
        <context value="medReq"/>
        <element value="encounter"/>
        <transform value="copy"/>
        <parameter>
          <valueId value="enc"/>
        </parameter>
      </target>
      <documentation value="Encounter from QuestionnaireResponse"/>
    </rule>
    <rule>
      <name value="setAuthoredOn"/>
      <source>
        <context value="qr"/>
        <element value="authored"/>
        <variable value="authored"/>
      </source>
      <target>
        <context value="medReq"/>
        <element value="authoredOn"/>
        <transform value="copy"/>
        <parameter>
          <valueId value="authored"/>
        </parameter>
      </target>
      <documentation value="AuthoredOn from QuestionnaireResponse.authored"/>
    </rule>
    <rule>
      <name value="setRequester"/>
      <source>
        <context value="qr"/>
        <element value="source"/>
        <variable value="src"/>
        <condition
                   value="(reference.exists() and (reference.startsWith('Patient/') or reference.startsWith('Organization/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Patient') or ('/' + type).endsWith('/Organization')))"/>
      </source>
      <target>
        <context value="medReq"/>
        <element value="requester"/>
        <transform value="copy"/>
        <parameter>
          <valueId value="src"/>
        </parameter>
      </target>
      <documentation
                     value="Requester from QuestionnaireResponse.source (the Organization)"/>
    </rule>
    <rule>
      <name value="performer"/>
      <source>
        <context value="qr"/>
        <element value="source"/>
        <variable value="src"/>
        <condition
                   value="(reference.exists() and (reference.startsWith('Patient/') or reference.startsWith('Organization/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Patient') or ('/' + type).endsWith('/Organization')))"/>
      </source>
      <target>
        <context value="medReq"/>
        <element value="performer"/>
        <variable value="perf"/>
        <transform value="create"/>
        <parameter>
          <valueString value="Reference"/>
        </parameter>
      </target>
      <rule>
        <name value="perfRef"/>
        <source>
          <context value="src"/>
          <element value="reference"/>
          <variable value="ref"/>
        </source>
        <target>
          <context value="perf"/>
          <element value="reference"/>
          <transform value="copy"/>
          <parameter>
            <valueId value="ref"/>
          </parameter>
        </target>
      </rule>
      <rule>
        <name value="perfDisplay"/>
        <source>
          <context value="src"/>
          <element value="display"/>
          <variable value="disp"/>
        </source>
        <target>
          <context value="perf"/>
          <element value="display"/>
          <transform value="copy"/>
          <parameter>
            <valueId value="disp"/>
          </parameter>
        </target>
      </rule>
      <documentation
                     value="Performer from QuestionnaireResponse.source (the Organization)"/>
    </rule>
    <rule>
      <name value="copyIdentifier"/>
      <source>
        <context value="qr"/>
        <element value="identifier"/>
        <listMode value="first"/>
        <variable value="qrIdent"/>
        <condition
                   value="assigner.empty() or assigner.where(((reference.exists() and (reference.startsWith('Organization/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Organization'))))).exists()"/>
      </source>
      <target>
        <context value="medReq"/>
        <element value="identifier"/>
        <transform value="copy"/>
        <parameter>
          <valueId value="qrIdent"/>
        </parameter>
      </target>
      <documentation
                     value="Copy identifier from QuestionnaireResponse to MedicationRequest, unless its
assigner is something an identifier cannot be assigned by."/>
    </rule>
    <rule>
      <name value="findMedicationExt"/>
      <source>
        <context value="qr"/>
        <element value="extension"/>
        <variable value="ext"/>
        <condition
                   value="url.endsWith('/StructureDefinition/medication-reference')"/>
      </source>
      <rule>
        <name value="accessMedication"/>
        <source>
          <context value="ext"/>
          <element value="value"/>
          <variable value="medCC"/>
          <condition value="$this is CodeableConcept"/>
        </source>
        <target>
          <context value="medReq"/>
          <element value="medication"/>
          <variable value="med"/>
        </target>
        <rule>
          <name value="setMedConcept"/>
          <source>
            <context value="medCC"/>
          </source>
          <target>
            <context value="med"/>
            <element value="concept"/>
            <transform value="copy"/>
            <parameter>
              <valueId value="medCC"/>
            </parameter>
          </target>
        </rule>
      </rule>
      <documentation
                     value="Medication as CodeableReference from the medication-reference extension, which
the platform writes under either canonical. Assigning the whole CodeableConcept
carries its codings and their systems, so there is nothing further to copy.
R5's engine reads a choice as `value`: `valueCodeableConcept`, and every
`valueX` below, is an invalid property here and failed the whole extraction."/>
    </rule>
    <rule>
      <name value="findPriority"/>
      <source>
        <context value="prescriptionGroup"/>
        <element value="item"/>
        <variable value="priorityItem"/>
        <condition value="linkId = 'priority'"/>
      </source>
      <rule>
        <name value="extractPriority"/>
        <source>
          <context value="priorityItem"/>
          <element value="answer"/>
          <listMode value="first"/>
          <variable value="priorityAns"/>
        </source>
        <rule>
          <name value="extractPriorityCode"/>
          <source>
            <context value="priorityAns"/>
            <element value="value"/>
            <variable value="priorityCoding"/>
            <condition value="$this is Coding"/>
          </source>
          <rule>
            <name value="setPriorityCode"/>
            <source>
              <context value="priorityCoding"/>
              <element value="code"/>
              <variable value="pCode"/>
            </source>
            <target>
              <context value="medReq"/>
              <element value="priority"/>
              <transform value="copy"/>
              <parameter>
                <valueId value="pCode"/>
              </parameter>
            </target>
          </rule>
          <documentation
                         value="MedicationRequest.priority is a code, not a Coding: it holds the code
alone and has nowhere to put the system it came from."/>
        </rule>
      </rule>
      <documentation value="Priority"/>
    </rule>
    <rule>
      <name value="createDosage"/>
      <source>
        <context value="qr"/>
      </source>
      <target>
        <context value="medReq"/>
        <element value="dosageInstruction"/>
        <variable value="dosage"/>
        <transform value="create"/>
        <parameter>
          <valueString value="Dosage"/>
        </parameter>
      </target>
      <rule>
        <name value="buildDosage"/>
        <source>
          <context value="prescriptionGroup"/>
        </source>
        <target>
          <context value="dosage"/>
        </target>
        <dependent>
          <name value="BuildDosage"/>
          <parameter>
            <valueId value="prescriptionGroup"/>
          </parameter>
          <parameter>
            <valueId value="dosage"/>
          </parameter>
        </dependent>
      </rule>
      <documentation value="Dosage Instruction"/>
    </rule>
    <rule>
      <name value="findSubst"/>
      <source>
        <context value="prescriptionGroup"/>
        <element value="item"/>
        <variable value="substItem"/>
        <condition value="linkId = 'substitutable'"/>
      </source>
      <rule>
        <name value="extractSubst"/>
        <source>
          <context value="substItem"/>
          <element value="answer"/>
          <listMode value="first"/>
          <variable value="substAns"/>
        </source>
        <rule>
          <name value="createSubst"/>
          <source>
            <context value="substAns"/>
            <element value="value"/>
            <variable value="substBool"/>
            <condition value="$this is boolean"/>
          </source>
          <target>
            <context value="medReq"/>
            <element value="substitution"/>
            <variable value="subst"/>
          </target>
          <rule>
            <name value="setSubstValue"/>
            <source>
              <context value="substBool"/>
            </source>
            <target>
              <context value="subst"/>
              <element value="allowed"/>
              <transform value="copy"/>
              <parameter>
                <valueId value="substBool"/>
              </parameter>
            </target>
            <documentation
                           value="allowed[x] is written as `allowed`; the engine picks the type from the value."/>
          </rule>
        </rule>
      </rule>
      <documentation value="Substitution"/>
    </rule>
    <rule>
      <name value="createDispReq"/>
      <source>
        <context value="qr"/>
      </source>
      <target>
        <context value="medReq"/>
        <element value="dispenseRequest"/>
        <variable value="dispReq"/>
      </target>
      <rule>
        <name value="buildDispReq"/>
        <source>
          <context value="prescriptionGroup"/>
        </source>
        <target>
          <context value="dispReq"/>
        </target>
        <dependent>
          <name value="BuildDispenseRequest"/>
          <parameter>
            <valueId value="qr"/>
          </parameter>
          <parameter>
            <valueId value="prescriptionGroup"/>
          </parameter>
          <parameter>
            <valueId value="dispReq"/>
          </parameter>
        </dependent>
      </rule>
      <documentation value="Dispense Request"/>
    </rule>
    <rule>
      <name value="setMedReqIdAndFullUrl"/>
      <source>
        <context value="qr"/>
      </source>
      <target>
        <context value="medReq"/>
        <element value="id"/>
        <transform value="uuid"/>
      </target>
      <dependent>
        <name value="SetMedicationRequestFullUrl"/>
        <parameter>
          <valueId value="medReq"/>
        </parameter>
        <parameter>
          <valueId value="entry"/>
        </parameter>
      </dependent>
      <documentation value="Set ID and FullUrl"/>
    </rule>
    <rule>
      <name value="entryRequest"/>
      <source>
        <context value="qr"/>
      </source>
      <target>
        <context value="entry"/>
        <element value="request"/>
        <variable value="request"/>
      </target>
      <rule>
        <name value="reqMethod"/>
        <source>
          <context value="qr"/>
        </source>
        <target>
          <context value="request"/>
          <element value="method"/>
          <transform value="copy"/>
          <parameter>
            <valueString value="POST"/>
          </parameter>
        </target>
      </rule>
      <rule>
        <name value="reqUrl"/>
        <source>
          <context value="qr"/>
        </source>
        <target>
          <context value="request"/>
          <element value="url"/>
          <transform value="copy"/>
          <parameter>
            <valueString value="MedicationRequest"/>
          </parameter>
        </target>
      </rule>
      <documentation value="Entry request for transaction bundle"/>
    </rule>
  </group>
  <group>
    <name value="BuildDosage"/>
    <input>
      <name value="prescriptionGroup"/>
      <mode value="source"/>
    </input>
    <input>
      <name value="dosage"/>
      <type value="Dosage"/>
      <mode value="target"/>
    </input>
    <rule>
      <name value="accessTiming"/>
      <source>
        <context value="prescriptionGroup"/>
      </source>
      <target>
        <context value="dosage"/>
        <element value="timing"/>
        <variable value="timing"/>
      </target>
      <rule>
        <name value="accessRepeat"/>
        <source>
          <context value="prescriptionGroup"/>
        </source>
        <target>
          <context value="timing"/>
          <element value="repeat"/>
          <variable value="repeat"/>
        </target>
        <rule>
          <name value="findFreq"/>
          <source>
            <context value="prescriptionGroup"/>
            <element value="item"/>
            <variable value="freqItem"/>
            <condition value="linkId = 'frequency'"/>
          </source>
          <rule>
            <name value="extractFreq"/>
            <source>
              <context value="freqItem"/>
              <element value="answer"/>
              <listMode value="first"/>
              <variable value="freqAns"/>
            </source>
            <rule>
              <name value="setFreqOD"/>
              <source>
                <context value="freqAns"/>
                <element value="value"/>
                <variable value="freqCoding"/>
                <condition value="($this is Coding) and (code = 'OD')"/>
              </source>
              <target>
                <context value="repeat"/>
                <element value="frequency"/>
                <transform value="cast"/>
                <parameter>
                  <valueString value="1"/>
                </parameter>
                <parameter>
                  <valueString value="positiveInt"/>
                </parameter>
              </target>
            </rule>
            <rule>
              <name value="setFreqBD"/>
              <source>
                <context value="freqAns"/>
                <element value="value"/>
                <variable value="freqCoding"/>
                <condition value="($this is Coding) and (code = 'BD')"/>
              </source>
              <target>
                <context value="repeat"/>
                <element value="frequency"/>
                <transform value="cast"/>
                <parameter>
                  <valueString value="2"/>
                </parameter>
                <parameter>
                  <valueString value="positiveInt"/>
                </parameter>
              </target>
            </rule>
            <rule>
              <name value="setFreqTID"/>
              <source>
                <context value="freqAns"/>
                <element value="value"/>
                <variable value="freqCoding"/>
                <condition value="($this is Coding) and (code = 'TID')"/>
              </source>
              <target>
                <context value="repeat"/>
                <element value="frequency"/>
                <transform value="cast"/>
                <parameter>
                  <valueString value="3"/>
                </parameter>
                <parameter>
                  <valueString value="positiveInt"/>
                </parameter>
              </target>
            </rule>
            <rule>
              <name value="setFreqQID"/>
              <source>
                <context value="freqAns"/>
                <element value="value"/>
                <variable value="freqCoding"/>
                <condition value="($this is Coding) and (code = 'QID')"/>
              </source>
              <target>
                <context value="repeat"/>
                <element value="frequency"/>
                <transform value="cast"/>
                <parameter>
                  <valueString value="4"/>
                </parameter>
                <parameter>
                  <valueString value="positiveInt"/>
                </parameter>
              </target>
            </rule>
          </rule>
          <documentation
                         value="Frequency (OD, BD, TID, QID). A positiveInt, which an integer is not converted
to, so each is cast."/>
        </rule>
        <rule>
          <name value="setPeriod"/>
          <source>
            <context value="prescriptionGroup"/>
          </source>
          <target>
            <context value="repeat"/>
            <element value="period"/>
            <transform value="copy"/>
            <parameter>
              <valueInteger value="1"/>
            </parameter>
          </target>
          <documentation value="Period (1 day)"/>
        </rule>
        <rule>
          <name value="setPeriodUnit"/>
          <source>
            <context value="prescriptionGroup"/>
          </source>
          <target>
            <context value="repeat"/>
            <element value="periodUnit"/>
            <transform value="copy"/>
            <parameter>
              <valueString value="d"/>
            </parameter>
          </target>
        </rule>
        <rule>
          <name value="findDuration"/>
          <source>
            <context value="prescriptionGroup"/>
            <element value="item"/>
            <variable value="durItem"/>
            <condition value="linkId = 'duration'"/>
          </source>
          <rule>
            <name value="extractDuration"/>
            <source>
              <context value="durItem"/>
              <element value="answer"/>
              <listMode value="first"/>
              <variable value="durAns"/>
            </source>
            <rule>
              <name value="setDuration"/>
              <source>
                <context value="durAns"/>
                <element value="value"/>
                <variable value="durValue"/>
                <condition value="$this is integer"/>
              </source>
              <target>
                <context value="repeat"/>
                <element value="duration"/>
                <transform value="copy"/>
                <parameter>
                  <valueId value="durValue"/>
                </parameter>
              </target>
            </rule>
          </rule>
          <documentation value="Duration"/>
        </rule>
        <rule>
          <name value="findDurUom"/>
          <source>
            <context value="prescriptionGroup"/>
            <element value="item"/>
            <variable value="durUomItem"/>
            <condition value="linkId = 'duration-uom'"/>
          </source>
          <rule>
            <name value="extractDurUom"/>
            <source>
              <context value="durUomItem"/>
              <element value="answer"/>
              <listMode value="first"/>
              <variable value="durUomAns"/>
            </source>
            <rule>
              <name value="extractDurUomCode"/>
              <source>
                <context value="durUomAns"/>
                <element value="value"/>
                <variable value="durUomCoding"/>
                <condition value="$this is Coding"/>
              </source>
              <rule>
                <name value="setDurationUnit"/>
                <source>
                  <context value="durUomCoding"/>
                  <element value="code"/>
                  <variable value="durUomCode"/>
                </source>
                <target>
                  <context value="repeat"/>
                  <element value="durationUnit"/>
                  <transform value="copy"/>
                  <parameter>
                    <valueId value="durUomCode"/>
                  </parameter>
                </target>
              </rule>
            </rule>
          </rule>
          <documentation
                         value="Duration UOM - directly use the code from unitsofmeasure.org (h, d, wk, mo, a)"/>
        </rule>
        <rule>
          <name value="findWhen"/>
          <source>
            <context value="prescriptionGroup"/>
            <element value="item"/>
            <variable value="whenItem"/>
            <condition value="linkId = 'when-to-take'"/>
          </source>
          <rule>
            <name value="extractWhen"/>
            <source>
              <context value="whenItem"/>
              <element value="answer"/>
              <variable value="whenAns"/>
            </source>
            <rule>
              <name value="extractWhenCode"/>
              <source>
                <context value="whenAns"/>
                <element value="value"/>
                <variable value="whenCoding"/>
                <condition value="$this is Coding"/>
              </source>
              <rule>
                <name value="setWhenCode"/>
                <source>
                  <context value="whenCoding"/>
                  <element value="code"/>
                  <variable value="whenCode"/>
                </source>
                <target>
                  <context value="repeat"/>
                  <element value="when"/>
                  <transform value="copy"/>
                  <parameter>
                    <valueId value="whenCode"/>
                  </parameter>
                </target>
              </rule>
            </rule>
          </rule>
          <documentation
                         value="When to take - directly use the code (AC, PC, ACM, ACD, ACV, PCM, PCD, PCV, etc.)
Handles both single answer and array of answers"/>
        </rule>
        <rule>
          <name value="findStartDate"/>
          <source>
            <context value="prescriptionGroup"/>
            <element value="item"/>
            <variable value="startItem"/>
            <condition value="linkId = 'start-date'"/>
          </source>
          <rule>
            <name value="extractStartDate"/>
            <source>
              <context value="startItem"/>
              <element value="answer"/>
              <listMode value="first"/>
              <variable value="startAns"/>
            </source>
            <rule>
              <name value="createBoundsPeriod"/>
              <source>
                <context value="startAns"/>
                <element value="value"/>
                <variable value="startDate"/>
                <condition value="$this is date"/>
              </source>
              <target>
                <context value="repeat"/>
                <element value="bounds"/>
                <variable value="boundsPeriod"/>
                <transform value="create"/>
                <parameter>
                  <valueString value="Period"/>
                </parameter>
              </target>
              <rule>
                <name value="setBoundsStart"/>
                <source>
                  <context value="startDate"/>
                </source>
                <target>
                  <context value="boundsPeriod"/>
                  <element value="start"/>
                  <transform value="copy"/>
                  <parameter>
                    <valueId value="startDate"/>
                  </parameter>
                </target>
              </rule>
              <rule>
                <name value="findEndDate"/>
                <source>
                  <context value="prescriptionGroup"/>
                  <element value="item"/>
                  <variable value="endItem"/>
                  <condition value="linkId = 'end-date'"/>
                </source>
                <rule>
                  <name value="extractEndDate"/>
                  <source>
                    <context value="endItem"/>
                    <element value="answer"/>
                    <listMode value="first"/>
                    <variable value="endAns"/>
                  </source>
                  <rule>
                    <name value="setBoundsEnd"/>
                    <source>
                      <context value="endAns"/>
                      <element value="value"/>
                      <variable value="endDate"/>
                      <condition value="$this is date"/>
                    </source>
                    <target>
                      <context value="boundsPeriod"/>
                      <element value="end"/>
                      <transform value="copy"/>
                      <parameter>
                        <valueId value="endDate"/>
                      </parameter>
                    </target>
                  </rule>
                </rule>
              </rule>
            </rule>
          </rule>
          <documentation value="Bounds Period from start-date and end-date"/>
        </rule>
      </rule>
    </rule>
    <rule>
      <name value="findRoute"/>
      <source>
        <context value="prescriptionGroup"/>
        <element value="item"/>
        <variable value="routeItem"/>
        <condition value="linkId = 'route'"/>
      </source>
      <rule>
        <name value="extractRoute"/>
        <source>
          <context value="routeItem"/>
          <element value="answer"/>
          <listMode value="first"/>
          <variable value="routeAns"/>
        </source>
        <rule>
          <name value="setRouteCC"/>
          <source>
            <context value="routeAns"/>
            <element value="value"/>
            <variable value="routeCoding"/>
            <condition value="$this is Coding"/>
          </source>
          <target>
            <context value="dosage"/>
            <element value="route"/>
            <variable value="routeCC"/>
            <transform value="create"/>
            <parameter>
              <valueString value="CodeableConcept"/>
            </parameter>
          </target>
          <rule>
            <name value="setRouteCoding"/>
            <source>
              <context value="routeCoding"/>
            </source>
            <target>
              <context value="routeCC"/>
              <element value="coding"/>
              <transform value="copy"/>
              <parameter>
                <valueId value="routeCoding"/>
              </parameter>
            </target>
          </rule>
          <rule>
            <name value="setRouteText"/>
            <source>
              <context value="routeCoding"/>
              <element value="display"/>
              <variable value="disp"/>
            </source>
            <target>
              <context value="routeCC"/>
              <element value="text"/>
              <transform value="copy"/>
              <parameter>
                <valueId value="disp"/>
              </parameter>
            </target>
          </rule>
        </rule>
      </rule>
      <documentation value="Route"/>
    </rule>
    <rule>
      <name value="findDose"/>
      <source>
        <context value="prescriptionGroup"/>
        <element value="item"/>
        <variable value="doseItem"/>
        <condition value="linkId = 'dose'"/>
      </source>
      <rule>
        <name value="extractDoseAns"/>
        <source>
          <context value="doseItem"/>
          <element value="answer"/>
          <listMode value="first"/>
          <variable value="doseAns"/>
        </source>
        <rule>
          <name value="createDoseAndRate"/>
          <source>
            <context value="doseAns"/>
            <element value="value"/>
            <variable value="doseValue"/>
            <condition value="($this is integer) or ($this is decimal)"/>
          </source>
          <target>
            <context value="dosage"/>
            <element value="doseAndRate"/>
            <variable value="doseRate"/>
          </target>
          <target>
            <context value="doseRate"/>
            <element value="dose"/>
            <variable value="doseQty"/>
            <transform value="create"/>
            <parameter>
              <valueString value="Quantity"/>
            </parameter>
          </target>
          <rule>
            <name value="setDoseValue"/>
            <source>
              <context value="doseValue"/>
            </source>
            <target>
              <context value="doseQty"/>
              <element value="value"/>
              <transform value="copy"/>
              <parameter>
                <valueId value="doseValue"/>
              </parameter>
            </target>
          </rule>
          <rule>
            <name value="findDoseUnit"/>
            <source>
              <context value="prescriptionGroup"/>
              <element value="item"/>
              <variable value="doseUnitItem"/>
              <condition value="linkId = 'dosage-unit'"/>
            </source>
            <rule>
              <name value="extractDoseUnitAns"/>
              <source>
                <context value="doseUnitItem"/>
                <element value="answer"/>
                <listMode value="first"/>
                <variable value="doseUnitAns"/>
              </source>
              <rule>
                <name value="extractUnitCoding"/>
                <source>
                  <context value="doseUnitAns"/>
                  <element value="value"/>
                  <variable value="unitCoding"/>
                  <condition value="$this is Coding"/>
                </source>
                <rule>
                  <name value="setDoseUnit"/>
                  <source>
                    <context value="unitCoding"/>
                    <element value="display"/>
                    <variable value="unitDisp"/>
                  </source>
                  <target>
                    <context value="doseQty"/>
                    <element value="unit"/>
                    <transform value="copy"/>
                    <parameter>
                      <valueId value="unitDisp"/>
                    </parameter>
                  </target>
                </rule>
                <rule>
                  <name value="setDoseCode"/>
                  <source>
                    <context value="unitCoding"/>
                    <element value="code"/>
                    <variable value="unitCode"/>
                  </source>
                  <target>
                    <context value="doseQty"/>
                    <element value="code"/>
                    <transform value="copy"/>
                    <parameter>
                      <valueId value="unitCode"/>
                    </parameter>
                  </target>
                </rule>
                <rule>
                  <name value="setDoseSystem"/>
                  <source>
                    <context value="unitCoding"/>
                    <element value="system"/>
                    <variable value="unitSys"/>
                  </source>
                  <target>
                    <context value="doseQty"/>
                    <element value="system"/>
                    <transform value="copy"/>
                    <parameter>
                      <valueId value="unitSys"/>
                    </parameter>
                  </target>
                </rule>
              </rule>
            </rule>
          </rule>
        </rule>
      </rule>
      <documentation
                     value="Dose and Rate. A dose can be a fraction (half a tablet, 2.5 ml), so a decimal
answer is read as well as the integer ones already stored."/>
    </rule>
    <rule>
      <name value="findDosageInstr"/>
      <source>
        <context value="prescriptionGroup"/>
        <element value="item"/>
        <variable value="instrItem"/>
        <condition value="linkId = 'dosage-instructions'"/>
      </source>
      <rule>
        <name value="extractInstr"/>
        <source>
          <context value="instrItem"/>
          <element value="answer"/>
          <listMode value="first"/>
          <variable value="instrAns"/>
        </source>
        <rule>
          <name value="setPatientInstruction"/>
          <source>
            <context value="instrAns"/>
            <element value="value"/>
            <variable value="instrText"/>
            <condition value="$this is string"/>
          </source>
          <target>
            <context value="dosage"/>
            <element value="patientInstruction"/>
            <transform value="copy"/>
            <parameter>
              <valueId value="instrText"/>
            </parameter>
          </target>
        </rule>
      </rule>
      <documentation value="Dosage Instructions (patient instruction)"/>
    </rule>
    <rule>
      <name value="findAddInstr"/>
      <source>
        <context value="prescriptionGroup"/>
        <element value="item"/>
        <variable value="addInstrItem"/>
        <condition value="linkId = 'additional-instructions'"/>
      </source>
      <rule>
        <name value="extractAddInstr"/>
        <source>
          <context value="addInstrItem"/>
          <element value="answer"/>
          <listMode value="first"/>
          <variable value="addInstrAns"/>
        </source>
        <rule>
          <name value="setDosageText"/>
          <source>
            <context value="addInstrAns"/>
            <element value="value"/>
            <variable value="addInstrText"/>
            <condition value="$this is string"/>
          </source>
          <target>
            <context value="dosage"/>
            <element value="text"/>
            <transform value="copy"/>
            <parameter>
              <valueId value="addInstrText"/>
            </parameter>
          </target>
        </rule>
      </rule>
      <documentation value="Additional Instructions (text)"/>
    </rule>
  </group>
  <group>
    <name value="BuildDispenseRequest"/>
    <input>
      <name value="qr"/>
      <type value="QR"/>
      <mode value="source"/>
    </input>
    <input>
      <name value="prescriptionGroup"/>
      <mode value="source"/>
    </input>
    <input>
      <name value="dispReq"/>
      <mode value="target"/>
    </input>
    <rule>
      <name value="findRefills"/>
      <source>
        <context value="prescriptionGroup"/>
        <element value="item"/>
        <variable value="refillsItem"/>
        <condition value="linkId = 'refills'"/>
      </source>
      <rule>
        <name value="extractRefills"/>
        <source>
          <context value="refillsItem"/>
          <element value="answer"/>
          <listMode value="first"/>
          <variable value="refillsAns"/>
        </source>
        <rule>
          <name value="setRefills"/>
          <source>
            <context value="refillsAns"/>
            <element value="value"/>
            <variable value="refillsValue"/>
            <condition value="($this is integer) and ($this &gt;= 0)"/>
          </source>
          <target>
            <context value="dispReq"/>
            <element value="numberOfRepeatsAllowed"/>
            <transform value="cast"/>
            <parameter>
              <valueId value="refillsValue"/>
            </parameter>
            <parameter>
              <valueString value="unsignedInt"/>
            </parameter>
          </target>
          <documentation
                         value="An unsignedInt, which an integer is not converted to: cast, and only from zero up."/>
        </rule>
      </rule>
      <documentation value="Refills"/>
    </rule>
    <rule>
      <name value="findValidityStart"/>
      <source>
        <context value="prescriptionGroup"/>
        <element value="item"/>
        <variable value="startItem"/>
        <condition value="linkId = 'start-date'"/>
      </source>
      <rule>
        <name value="extractValidityStart"/>
        <source>
          <context value="startItem"/>
          <element value="answer"/>
          <listMode value="first"/>
          <variable value="startAns"/>
        </source>
        <rule>
          <name value="createValidityPeriod"/>
          <source>
            <context value="startAns"/>
            <element value="value"/>
            <variable value="startDate"/>
            <condition value="$this is date"/>
          </source>
          <target>
            <context value="dispReq"/>
            <element value="validityPeriod"/>
            <variable value="validPeriod"/>
          </target>
          <rule>
            <name value="setValidityStart"/>
            <source>
              <context value="startDate"/>
            </source>
            <target>
              <context value="validPeriod"/>
              <element value="start"/>
              <transform value="copy"/>
              <parameter>
                <valueId value="startDate"/>
              </parameter>
            </target>
          </rule>
          <rule>
            <name value="findValidityEnd"/>
            <source>
              <context value="prescriptionGroup"/>
              <element value="item"/>
              <variable value="endItem"/>
              <condition value="linkId = 'end-date'"/>
            </source>
            <rule>
              <name value="extractValidityEnd"/>
              <source>
                <context value="endItem"/>
                <element value="answer"/>
                <listMode value="first"/>
                <variable value="endAns"/>
              </source>
              <rule>
                <name value="setValidityEnd"/>
                <source>
                  <context value="endAns"/>
                  <element value="value"/>
                  <variable value="endDate"/>
                  <condition value="$this is date"/>
                </source>
                <target>
                  <context value="validPeriod"/>
                  <element value="end"/>
                  <transform value="copy"/>
                  <parameter>
                    <valueId value="endDate"/>
                  </parameter>
                </target>
              </rule>
            </rule>
          </rule>
        </rule>
      </rule>
      <documentation value="Validity Period from start-date and end-date"/>
    </rule>
    <rule>
      <name value="findSupplyDuration"/>
      <source>
        <context value="prescriptionGroup"/>
        <element value="item"/>
        <variable value="durItem"/>
        <condition value="linkId = 'duration'"/>
      </source>
      <rule>
        <name value="extractSupplyDuration"/>
        <source>
          <context value="durItem"/>
          <element value="answer"/>
          <listMode value="first"/>
          <variable value="durAns"/>
        </source>
        <rule>
          <name value="createSupplyDuration"/>
          <source>
            <context value="durAns"/>
            <element value="value"/>
            <variable value="durValue"/>
            <condition value="$this is integer"/>
          </source>
          <target>
            <context value="dispReq"/>
            <element value="expectedSupplyDuration"/>
            <variable value="supplyDur"/>
          </target>
          <rule>
            <name value="setSupplyDurValue"/>
            <source>
              <context value="durValue"/>
            </source>
            <target>
              <context value="supplyDur"/>
              <element value="value"/>
              <transform value="copy"/>
              <parameter>
                <valueId value="durValue"/>
              </parameter>
            </target>
          </rule>
          <rule>
            <name value="findSupplyDurUom"/>
            <source>
              <context value="prescriptionGroup"/>
              <element value="item"/>
              <variable value="durUomItem"/>
              <condition value="linkId = 'duration-uom'"/>
            </source>
            <rule>
              <name value="extractSupplyDurUomAns"/>
              <source>
                <context value="durUomItem"/>
                <element value="answer"/>
                <listMode value="first"/>
                <variable value="durUomAns"/>
              </source>
              <rule>
                <name value="extractSupplyDurUom"/>
                <source>
                  <context value="durUomAns"/>
                  <element value="value"/>
                  <variable value="durUomCoding"/>
                  <condition value="$this is Coding"/>
                </source>
                <rule>
                  <name value="setSupplyDurCode"/>
                  <source>
                    <context value="durUomCoding"/>
                    <element value="code"/>
                    <variable value="uomCode"/>
                  </source>
                  <target>
                    <context value="supplyDur"/>
                    <element value="code"/>
                    <transform value="copy"/>
                    <parameter>
                      <valueId value="uomCode"/>
                    </parameter>
                  </target>
                </rule>
                <rule>
                  <name value="setSupplyDurUnit"/>
                  <source>
                    <context value="durUomCoding"/>
                    <element value="display"/>
                    <variable value="uomDisplay"/>
                  </source>
                  <target>
                    <context value="supplyDur"/>
                    <element value="unit"/>
                    <transform value="copy"/>
                    <parameter>
                      <valueId value="uomDisplay"/>
                    </parameter>
                  </target>
                </rule>
                <rule>
                  <name value="setSupplyDurSystem"/>
                  <source>
                    <context value="durUomCoding"/>
                    <element value="system"/>
                    <variable value="uomSystem"/>
                  </source>
                  <target>
                    <context value="supplyDur"/>
                    <element value="system"/>
                    <transform value="copy"/>
                    <parameter>
                      <valueId value="uomSystem"/>
                    </parameter>
                  </target>
                </rule>
              </rule>
            </rule>
          </rule>
        </rule>
      </rule>
      <documentation value="Expected Supply Duration"/>
    </rule>
    <rule>
      <name value="setDispenser"/>
      <source>
        <context value="qr"/>
        <element value="source"/>
        <variable value="src"/>
        <condition
                   value="(reference.exists() and (reference.startsWith('Organization/'))) or (reference.empty() and (type.empty() or ('/' + type).endsWith('/Organization')))"/>
      </source>
      <target>
        <context value="dispReq"/>
        <element value="dispenser"/>
        <transform value="copy"/>
        <parameter>
          <valueId value="src"/>
        </parameter>
      </target>
      <documentation
                     value="Dispenser - from QuestionnaireResponse.source (Organization)"/>
    </rule>
  </group>
  <group>
    <name value="SetMedicationRequestFullUrl"/>
    <input>
      <name value="medReq"/>
      <type value="MedicationRequest"/>
      <mode value="source"/>
    </input>
    <input>
      <name value="entry"/>
      <mode value="target"/>
    </input>
    <rule>
      <name value="assignFullUrl"/>
      <source>
        <context value="medReq"/>
        <element value="id"/>
        <variable value="id"/>
      </source>
      <target>
        <context value="entry"/>
        <element value="fullUrl"/>
        <transform value="append"/>
        <parameter>
          <valueString
                       value="https://fhir.slade360.co.ke/fhir/MedicationRequest/"/>
        </parameter>
        <parameter>
          <valueId value="id"/>
        </parameter>
      </target>
    </rule>
  </group>
  <group>
    <name value="CopyResponseTags"/>
    <documentation
                   value="── Tenancy ──────────────────────────────────────────────────────────────────
Whose this is. The platform says which tenant a response belongs to with a
tag on the response, and every tag the response carries is copied onto
everything this map creates, as it is. Copied rather than named here, so the
map never has to know which tenant it is running for, nor which system the
tag is under: that system has moved more than once."/>
    <input>
      <name value="qr"/>
      <type value="QR"/>
      <mode value="source"/>
    </input>
    <input>
      <name value="r"/>
      <mode value="target"/>
    </input>
    <rule>
      <name value="tenantTags"/>
      <source>
        <context value="qr"/>
        <element value="meta"/>
        <variable value="qm"/>
      </source>
      <rule>
        <name value="copyTag"/>
        <source>
          <context value="qm"/>
          <element value="tag"/>
          <variable value="qt"/>
        </source>
        <target>
          <context value="r"/>
          <element value="meta"/>
          <variable value="m"/>
        </target>
        <target>
          <context value="m"/>
          <element value="tag"/>
          <transform value="copy"/>
          <parameter>
            <valueId value="qt"/>
          </parameter>
        </target>
      </rule>
    </rule>
  </group>
</StructureMap>