<?xml version="1.0" encoding="UTF-8"?>
<library xmlns="urn:hl7-org:elm:r1" xmlns:t="urn:hl7-org:elm-types:r1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:fhir="http://hl7.org/fhir" xmlns:qdm43="urn:healthit-gov:qdm:v4_3" xmlns:qdm53="urn:healthit-gov:qdm:v5_3" xmlns:a="urn:hl7-org:cql-annotations:r1" localId="0">
   <annotation translatorOptions="EnableAnnotations,EnableLocators,DisableListDemotion,DisableListPromotion" signatureLevel="Overloads" xsi:type="a:CqlToElmInfo"/>
   <annotation message="An operand identifier reference is hiding another identifier of the same name." errorType="semantic" errorSeverity="warning" xsi:type="a:CqlToElmError"/>
   <annotation message="An operand identifier reference is hiding another identifier of the same name." errorType="semantic" errorSeverity="warning" xsi:type="a:CqlToElmError"/>
   <annotation message="An operand identifier reference is hiding another identifier of the same name." errorType="semantic" errorSeverity="warning" xsi:type="a:CqlToElmError"/>
   <annotation xsi:type="a:Annotation">
      <a:s r="759">
         <a:s>library IMMZCommon</a:s>
      </a:s>
   </annotation>
   <identifier id="IMMZCommon" system="http://smart.who.int/immunizations"/>
   <schemaIdentifier id="urn:hl7-org:elm" version="r1"/>
   <usings>
      <def localId="1" localIdentifier="System" uri="urn:hl7-org:elm-types:r1" version="1.0.0"/>
      <def localId="206" locator="3:1-3:26" localIdentifier="FHIR" uri="http://hl7.org/fhir" version="4.0.1">
         <annotation xsi:type="a:Annotation">
            <a:s r="206">
               <a:s>using </a:s>
               <a:s>
                  <a:s>FHIR</a:s>
               </a:s>
               <a:s> version '4.0.1'</a:s>
            </a:s>
         </annotation>
      </def>
   </usings>
   <includes>
      <def localId="208" locator="5:1-5:35" localIdentifier="FHIRHelpers" path="http://hl7.org/fhir/FHIRHelpers" version="4.0.1">
         <annotation xsi:type="a:Annotation">
            <a:s r="208">
               <a:s>include </a:s>
               <a:s>
                  <a:s>FHIRHelpers</a:s>
               </a:s>
               <a:s> version '4.0.1'</a:s>
            </a:s>
         </annotation>
      </def>
      <def localId="210" locator="6:1-6:27" localIdentifier="WC" path="http://smart.who.int/immunizations/WHOCommon">
         <annotation xsi:type="a:Annotation">
            <a:s r="210">
               <a:s>include </a:s>
               <a:s>
                  <a:s>WHOCommon</a:s>
               </a:s>
               <a:s> called WC</a:s>
            </a:s>
         </annotation>
      </def>
   </includes>
   <statements>
      <def localId="212" locator="12:1-13:26" name="Only" context="Unfiltered" accessLevel="Public" xsi:type="FunctionDef">
         <annotation xsi:type="a:Annotation">
            <a:s r="212">
               <a:s>/**
 * @description Fetches a singleton protocol applied from an immunization
 * @comment The protocol list from the immunization
 */
define function Only(protocols List&lt;FHIR.Immunization.ProtocolApplied>):
  </a:s>
               <a:s r="218">
                  <a:s r="218">
                     <a:s>singleton from </a:s>
                     <a:s r="219">
                        <a:s>protocols</a:s>
                     </a:s>
                  </a:s>
               </a:s>
            </a:s>
         </annotation>
         <expression localId="218" locator="13:3-13:26" xsi:type="SingletonFrom">
            <operand localId="219" locator="13:18-13:26" name="protocols" xsi:type="OperandRef"/>
         </expression>
         <operand localId="215" name="protocols">
            <operandTypeSpecifier localId="213" locator="12:32-12:70" xsi:type="ListTypeSpecifier">
               <elementType localId="214" locator="12:37-12:69" name="fhir:Immunization.ProtocolApplied" xsi:type="NamedTypeSpecifier"/>
            </operandTypeSpecifier>
         </operand>
      </def>
      <def localId="220" locator="19:1-20:26" name="only" context="Unfiltered" accessLevel="Public" fluent="true" xsi:type="FunctionDef">
         <annotation xsi:type="a:Annotation">
            <a:s r="220">
               <a:s>/**
 * @description Fetches a singleton protocol applied from an immunization
 * @comment The protocol list from the immunization
 */
define fluent function only(protocols List&lt;FHIR.Immunization.ProtocolApplied>):
  </a:s>
               <a:s r="226">
                  <a:s r="226">
                     <a:s>singleton from </a:s>
                     <a:s r="227">
                        <a:s>protocols</a:s>
                     </a:s>
                  </a:s>
               </a:s>
            </a:s>
         </annotation>
         <expression localId="226" locator="20:3-20:26" xsi:type="SingletonFrom">
            <operand localId="227" locator="20:18-20:26" name="protocols" xsi:type="OperandRef"/>
         </expression>
         <operand localId="223" name="protocols">
            <operandTypeSpecifier localId="221" locator="19:39-19:77" xsi:type="ListTypeSpecifier">
               <elementType localId="222" locator="19:44-19:76" name="fhir:Immunization.ProtocolApplied" xsi:type="NamedTypeSpecifier"/>
            </operandTypeSpecifier>
         </operand>
      </def>
      <def localId="228" locator="25:1-31:4" name="ToDate" context="Unfiltered" accessLevel="Public" xsi:type="FunctionDef">
         <annotation xsi:type="a:Annotation">
            <a:s r="228">
               <a:s>/**
 * @description Takes the date choice of a date/string choice (for Immunization date)
 */
define function ToDate(choice Choice&lt;FHIR.date, FHIR.string>):
  </a:s>
               <a:s r="235">
                  <a:s r="235">
                     <a:s>case
	  </a:s>
                     <a:s r="236">
                        <a:s>when </a:s>
                        <a:s r="237">
                           <a:s r="238">
                              <a:s>choice</a:s>
                           </a:s>
                           <a:s> is </a:s>
                           <a:s r="239">
                              <a:s>FHIR.date</a:s>
                           </a:s>
                        </a:s>
                        <a:s> then
    	</a:s>
                        <a:s r="240">
                           <a:s r="241">
                              <a:s>choice</a:s>
                           </a:s>
                           <a:s> as </a:s>
                           <a:s r="242">
                              <a:s>FHIR.date</a:s>
                           </a:s>
                        </a:s>
                     </a:s>
                     <a:s>
		else
      </a:s>
                     <a:s r="255">
                        <a:s>Message(</a:s>
                        <a:s r="243">
                           <a:s r="244">null as </a:s>
                           <a:s r="245">
                              <a:s>FHIR.date</a:s>
                           </a:s>
                        </a:s>
                        <a:s r="246">, true, </a:s>
                        <a:s r="247">
                           <a:s>'1'</a:s>
                        </a:s>
                        <a:s>, </a:s>
                        <a:s r="249">
                           <a:s>'Error'</a:s>
                        </a:s>
                        <a:s>, </a:s>
                        <a:s r="251">
                           <a:s>'Cannot compute a date from a String value'</a:s>
                        </a:s>
                        <a:s>)</a:s>
                     </a:s>
                     <a:s>
	end</a:s>
                  </a:s>
               </a:s>
            </a:s>
         </annotation>
         <expression localId="235" locator="26:3-31:4" xsi:type="Case">
            <caseItem localId="236" locator="27:4-28:24">
               <when localId="237" locator="27:9-27:27" xsi:type="Is">
                  <operand localId="238" locator="27:9-27:14" name="choice" xsi:type="OperandRef"/>
                  <isTypeSpecifier localId="239" locator="27:19-27:27" name="fhir:date" xsi:type="NamedTypeSpecifier"/>
               </when>
               <then localId="240" locator="28:6-28:24" strict="false" xsi:type="As">
                  <operand localId="241" locator="28:6-28:11" name="choice" xsi:type="OperandRef"/>
                  <asTypeSpecifier localId="242" locator="28:16-28:24" name="fhir:date" xsi:type="NamedTypeSpecifier"/>
               </then>
            </caseItem>
            <else localId="255" locator="30:7-30:97" xsi:type="Message">
               <source localId="243" locator="30:15-30:31" strict="false" xsi:type="As">
                  <operand localId="244" locator="30:15-30:18" xsi:type="Null"/>
                  <asTypeSpecifier localId="245" locator="30:23-30:31" name="fhir:date" xsi:type="NamedTypeSpecifier"/>
               </source>
               <condition localId="246" locator="30:34-30:37" valueType="t:Boolean" value="true" xsi:type="Literal"/>
               <code localId="247" locator="30:40-30:42" valueType="t:String" value="1" xsi:type="Literal"/>
               <severity localId="249" locator="30:45-30:51" valueType="t:String" value="Error" xsi:type="Literal"/>
               <message localId="251" locator="30:54-30:96" valueType="t:String" value="Cannot compute a date from a String value" xsi:type="Literal"/>
            </else>
         </expression>
         <operand localId="232" name="choice">
            <operandTypeSpecifier localId="231" locator="25:31-25:60" xsi:type="ChoiceTypeSpecifier">
               <choice localId="229" locator="25:38-25:46" name="fhir:date" xsi:type="NamedTypeSpecifier"/>
               <choice localId="230" locator="25:49-25:59" name="fhir:string" xsi:type="NamedTypeSpecifier"/>
            </operandTypeSpecifier>
         </operand>
      </def>
      <def localId="256" locator="36:1-42:4" name="ToDateTime" context="Unfiltered" accessLevel="Public" xsi:type="FunctionDef">
         <annotation xsi:type="a:Annotation">
            <a:s r="256">
               <a:s>/**
 * @description Takes the date choice of a date/string choice (for Immunization date)
 */
define function ToDateTime(choice Choice&lt;FHIR.dateTime, FHIR.string>):
  </a:s>
               <a:s r="263">
                  <a:s r="263">
                     <a:s>case
	  </a:s>
                     <a:s r="264">
                        <a:s>when </a:s>
                        <a:s r="265">
                           <a:s r="266">
                              <a:s>choice</a:s>
                           </a:s>
                           <a:s> is </a:s>
                           <a:s r="267">
                              <a:s>FHIR.dateTime</a:s>
                           </a:s>
                        </a:s>
                        <a:s> then
    	</a:s>
                        <a:s r="268">
                           <a:s r="269">
                              <a:s>choice</a:s>
                           </a:s>
                           <a:s> as </a:s>
                           <a:s r="270">
                              <a:s>FHIR.dateTime</a:s>
                           </a:s>
                        </a:s>
                     </a:s>
                     <a:s>
		else
      </a:s>
                     <a:s r="288">
                        <a:s>Message(</a:s>
                        <a:s r="271">
                           <a:s r="272">null as </a:s>
                           <a:s r="273">
                              <a:s>FHIR.dateTime</a:s>
                           </a:s>
                        </a:s>
                        <a:s r="274">, true, </a:s>
                        <a:s r="275">
                           <a:s>'1'</a:s>
                        </a:s>
                        <a:s>, </a:s>
                        <a:s r="277">
                           <a:s>'Error'</a:s>
                        </a:s>
                        <a:s>, </a:s>
                        <a:s r="279">
                           <a:s>'Cannot compute a date from a String value'</a:s>
                        </a:s>
                        <a:s>)</a:s>
                     </a:s>
                     <a:s>
	end</a:s>
                  </a:s>
               </a:s>
            </a:s>
         </annotation>
         <expression localId="263" locator="37:3-42:4" xsi:type="Case">
            <caseItem localId="264" locator="38:4-39:28">
               <when localId="265" locator="38:9-38:31" xsi:type="Is">
                  <operand localId="266" locator="38:9-38:14" name="choice" xsi:type="OperandRef"/>
                  <isTypeSpecifier localId="267" locator="38:19-38:31" name="fhir:dateTime" xsi:type="NamedTypeSpecifier"/>
               </when>
               <then localId="268" locator="39:6-39:28" strict="false" xsi:type="As">
                  <operand localId="269" locator="39:6-39:11" name="choice" xsi:type="OperandRef"/>
                  <asTypeSpecifier localId="270" locator="39:16-39:28" name="fhir:dateTime" xsi:type="NamedTypeSpecifier"/>
               </then>
            </caseItem>
            <else localId="288" locator="41:7-41:101" xsi:type="Message">
               <signature localId="289" name="fhir:dateTime" xsi:type="NamedTypeSpecifier"/>
               <signature localId="290" name="t:Boolean" xsi:type="NamedTypeSpecifier"/>
               <signature localId="291" name="t:String" xsi:type="NamedTypeSpecifier"/>
               <signature localId="292" name="t:String" xsi:type="NamedTypeSpecifier"/>
               <signature localId="293" name="t:String" xsi:type="NamedTypeSpecifier"/>
               <source localId="271" locator="41:15-41:35" strict="false" xsi:type="As">
                  <operand localId="272" locator="41:15-41:18" xsi:type="Null"/>
                  <asTypeSpecifier localId="273" locator="41:23-41:35" name="fhir:dateTime" xsi:type="NamedTypeSpecifier"/>
               </source>
               <condition localId="274" locator="41:38-41:41" valueType="t:Boolean" value="true" xsi:type="Literal"/>
               <code localId="275" locator="41:44-41:46" valueType="t:String" value="1" xsi:type="Literal"/>
               <severity localId="277" locator="41:49-41:55" valueType="t:String" value="Error" xsi:type="Literal"/>
               <message localId="279" locator="41:58-41:100" valueType="t:String" value="Cannot compute a date from a String value" xsi:type="Literal"/>
            </else>
         </expression>
         <operand localId="260" name="choice">
            <operandTypeSpecifier localId="259" locator="36:35-36:68" xsi:type="ChoiceTypeSpecifier">
               <choice localId="257" locator="36:42-36:54" name="fhir:dateTime" xsi:type="NamedTypeSpecifier"/>
               <choice localId="258" locator="36:57-36:67" name="fhir:string" xsi:type="NamedTypeSpecifier"/>
            </operandTypeSpecifier>
         </operand>
      </def>
      <def localId="294" locator="48:1-54:4" name="ToPositiveInt" context="Unfiltered" accessLevel="Public" xsi:type="FunctionDef">
         <annotation xsi:type="a:Annotation">
            <a:s r="294">
               <a:s>/**
 * @description Takes a choice of FHIR.string and FHIR.positiveInt and ensures the result is a FHIR.positiveInt
 */
define function ToPositiveInt(choice Choice&lt;FHIR.positiveInt, FHIR.string>):
  </a:s>
               <a:s r="301">
                  <a:s r="301">
                     <a:s>case
	  </a:s>
                     <a:s r="302">
                        <a:s>when </a:s>
                        <a:s r="303">
                           <a:s r="304">
                              <a:s>choice</a:s>
                           </a:s>
                           <a:s> is </a:s>
                           <a:s r="305">
                              <a:s>FHIR.positiveInt</a:s>
                           </a:s>
                        </a:s>
                        <a:s> then
    	</a:s>
                        <a:s r="306">
                           <a:s r="307">
                              <a:s>choice</a:s>
                           </a:s>
                           <a:s> as </a:s>
                           <a:s r="308">
                              <a:s>FHIR.positiveInt</a:s>
                           </a:s>
                        </a:s>
                     </a:s>
                     <a:s>
		else
      </a:s>
                     <a:s r="326">
                        <a:s>Message(</a:s>
                        <a:s r="309">
                           <a:s r="310">null as </a:s>
                           <a:s r="311">
                              <a:s>FHIR.positiveInt</a:s>
                           </a:s>
                        </a:s>
                        <a:s r="312">, true, </a:s>
                        <a:s r="313">
                           <a:s>'1'</a:s>
                        </a:s>
                        <a:s>, </a:s>
                        <a:s r="315">
                           <a:s>'Error'</a:s>
                        </a:s>
                        <a:s>, </a:s>
                        <a:s r="317">
                           <a:s>'Cannot compute a positive from a String value'</a:s>
                        </a:s>
                        <a:s>)</a:s>
                     </a:s>
                     <a:s> // TODO: I'm sure that this is supported somehow?
	end</a:s>
                  </a:s>
               </a:s>
            </a:s>
         </annotation>
         <expression localId="301" locator="49:3-54:4" xsi:type="Case">
            <caseItem localId="302" locator="50:4-51:31">
               <when localId="303" locator="50:9-50:34" xsi:type="Is">
                  <operand localId="304" locator="50:9-50:14" name="choice" xsi:type="OperandRef"/>
                  <isTypeSpecifier localId="305" locator="50:19-50:34" name="fhir:positiveInt" xsi:type="NamedTypeSpecifier"/>
               </when>
               <then localId="306" locator="51:6-51:31" strict="false" xsi:type="As">
                  <operand localId="307" locator="51:6-51:11" name="choice" xsi:type="OperandRef"/>
                  <asTypeSpecifier localId="308" locator="51:16-51:31" name="fhir:positiveInt" xsi:type="NamedTypeSpecifier"/>
               </then>
            </caseItem>
            <else localId="326" locator="53:7-53:108" xsi:type="Message">
               <signature localId="327" name="fhir:positiveInt" xsi:type="NamedTypeSpecifier"/>
               <signature localId="328" name="t:Boolean" xsi:type="NamedTypeSpecifier"/>
               <signature localId="329" name="t:String" xsi:type="NamedTypeSpecifier"/>
               <signature localId="330" name="t:String" xsi:type="NamedTypeSpecifier"/>
               <signature localId="331" name="t:String" xsi:type="NamedTypeSpecifier"/>
               <source localId="309" locator="53:15-53:38" strict="false" xsi:type="As">
                  <operand localId="310" locator="53:15-53:18" xsi:type="Null"/>
                  <asTypeSpecifier localId="311" locator="53:23-53:38" name="fhir:positiveInt" xsi:type="NamedTypeSpecifier"/>
               </source>
               <condition localId="312" locator="53:41-53:44" valueType="t:Boolean" value="true" xsi:type="Literal"/>
               <code localId="313" locator="53:47-53:49" valueType="t:String" value="1" xsi:type="Literal"/>
               <severity localId="315" locator="53:52-53:58" valueType="t:String" value="Error" xsi:type="Literal"/>
               <message localId="317" locator="53:61-53:107" valueType="t:String" value="Cannot compute a positive from a String value" xsi:type="Literal"/>
            </else>
         </expression>
         <operand localId="298" name="choice">
            <operandTypeSpecifier localId="297" locator="48:38-48:74" xsi:type="ChoiceTypeSpecifier">
               <choice localId="295" locator="48:45-48:60" name="fhir:positiveInt" xsi:type="NamedTypeSpecifier"/>
               <choice localId="296" locator="48:63-48:73" name="fhir:string" xsi:type="NamedTypeSpecifier"/>
            </operandTypeSpecifier>
         </operand>
      </def>
      <def localId="332" locator="60:1-70:4" name="ExtractMedicationCode" context="Unfiltered" accessLevel="Public" xsi:type="FunctionDef">
         <annotation xsi:type="a:Annotation">
            <a:s r="332">
               <a:s>/**
 * @description Takes a choice between a Medication and a CodeableConcept and returns just the code of the medication
 */
define function ExtractMedicationCode(choice Choice&lt;FHIR.CodeableConcept, FHIR.Reference>):
  </a:s>
               <a:s r="339">
                  <a:s r="339">
                     <a:s>case
	  </a:s>
                     <a:s r="340">
                        <a:s>when </a:s>
                        <a:s r="341">
                           <a:s r="342">
                              <a:s>choice</a:s>
                           </a:s>
                           <a:s> is </a:s>
                           <a:s r="343">
                              <a:s>FHIR.CodeableConcept</a:s>
                           </a:s>
                        </a:s>
                        <a:s> then
    	</a:s>
                        <a:s r="344">
                           <a:s r="345">
                              <a:s>choice</a:s>
                           </a:s>
                           <a:s> as </a:s>
                           <a:s r="346">
                              <a:s>FHIR.CodeableConcept</a:s>
                           </a:s>
                        </a:s>
                     </a:s>
                     <a:s>
    </a:s>
                     <a:s r="347">
                        <a:s>when </a:s>
                        <a:s r="348">
                           <a:s r="349">
                              <a:s>choice</a:s>
                           </a:s>
                           <a:s> is </a:s>
                           <a:s r="350">
                              <a:s>FHIR.Reference</a:s>
                           </a:s>
                        </a:s>
                        <a:s> then
      </a:s>
                        <a:s r="383">
                           <a:s>First(</a:s>
                           <a:s r="380">
                              <a:s>
                                 <a:s r="351">
                                    <a:s r="352">
                                       <a:s r="352">
                                          <a:s>[Medication]</a:s>
                                       </a:s>
                                    </a:s>
                                    <a:s> M</a:s>
                                 </a:s>
                              </a:s>
                              <a:s> 
        </a:s>
                              <a:s r="354">
                                 <a:s>where </a:s>
                                 <a:s r="354">
                                    <a:s r="356">
                                       <a:s r="355">
                                          <a:s>M</a:s>
                                       </a:s>
                                       <a:s>.</a:s>
                                       <a:s r="356">
                                          <a:s>id</a:s>
                                       </a:s>
                                    </a:s>
                                    <a:s> = </a:s>
                                    <a:s r="370">
                                       <a:s>Last(</a:s>
                                       <a:s r="365">
                                          <a:s>Split(</a:s>
                                          <a:s r="358">
                                             <a:s r="357">
                                                <a:s>choice</a:s>
                                             </a:s>
                                             <a:s>.</a:s>
                                             <a:s r="358">
                                                <a:s>reference</a:s>
                                             </a:s>
                                          </a:s>
                                          <a:s>, </a:s>
                                          <a:s r="359">
                                             <a:s>'/'</a:s>
                                          </a:s>
                                          <a:s>)</a:s>
                                       </a:s>
                                       <a:s>)</a:s>
                                    </a:s>
                                 </a:s>
                              </a:s>
                              <a:s>
        </a:s>
                              <a:s r="375">
                                 <a:s>return </a:s>
                                 <a:s r="376">
                                    <a:s r="378">
                                       <a:s r="377">
                                          <a:s>M</a:s>
                                       </a:s>
                                       <a:s>.</a:s>
                                       <a:s r="378">
                                          <a:s>code</a:s>
                                       </a:s>
                                    </a:s>
                                    <a:s> as </a:s>
                                    <a:s r="379">
                                       <a:s>FHIR.CodeableConcept</a:s>
                                    </a:s>
                                 </a:s>
                              </a:s>
                           </a:s>
                           <a:s>)</a:s>
                        </a:s>
                     </a:s>
                     <a:s>
		else
      </a:s>
                     <a:s r="401">
                        <a:s>Message(</a:s>
                        <a:s r="384">
                           <a:s r="385">null as </a:s>
                           <a:s r="386">
                              <a:s>FHIR.CodeableConcept</a:s>
                           </a:s>
                        </a:s>
                        <a:s r="387">, true, </a:s>
                        <a:s r="388">
                           <a:s>'1'</a:s>
                        </a:s>
                        <a:s>, </a:s>
                        <a:s r="390">
                           <a:s>'Error'</a:s>
                        </a:s>
                        <a:s>, </a:s>
                        <a:s r="392">
                           <a:s>'Cannot compute a medication code'</a:s>
                        </a:s>
                        <a:s>)</a:s>
                     </a:s>
                     <a:s> // TODO: I'm sure that this is supported somehow?
	end</a:s>
                  </a:s>
               </a:s>
            </a:s>
         </annotation>
         <expression localId="339" locator="61:3-70:4" xsi:type="Case">
            <caseItem localId="340" locator="62:4-63:35">
               <when localId="341" locator="62:9-62:38" xsi:type="Is">
                  <operand localId="342" locator="62:9-62:14" name="choice" xsi:type="OperandRef"/>
                  <isTypeSpecifier localId="343" locator="62:19-62:38" name="fhir:CodeableConcept" xsi:type="NamedTypeSpecifier"/>
               </when>
               <then localId="344" locator="63:6-63:35" strict="false" xsi:type="As">
                  <operand localId="345" locator="63:6-63:11" name="choice" xsi:type="OperandRef"/>
                  <asTypeSpecifier localId="346" locator="63:16-63:35" name="fhir:CodeableConcept" xsi:type="NamedTypeSpecifier"/>
               </then>
            </caseItem>
            <caseItem localId="347" locator="64:5-67:46">
               <when localId="348" locator="64:10-64:33" xsi:type="Is">
                  <operand localId="349" locator="64:10-64:15" name="choice" xsi:type="OperandRef"/>
                  <isTypeSpecifier localId="350" locator="64:20-64:33" name="fhir:Reference" xsi:type="NamedTypeSpecifier"/>
               </when>
               <then localId="383" locator="65:7-67:46" xsi:type="First">
                  <source localId="380" locator="65:13-67:45" xsi:type="Query">
                     <source localId="351" locator="65:13-65:26" alias="M">
                        <expression localId="352" locator="65:13-65:24" dataType="fhir:Medication" templateId="http://hl7.org/fhir/StructureDefinition/Medication" xsi:type="Retrieve"/>
                     </source>
                     <where localId="354" locator="66:9-66:55" xsi:type="Equal">
                        <signature localId="373" name="t:String" xsi:type="NamedTypeSpecifier"/>
                        <signature localId="374" name="t:String" xsi:type="NamedTypeSpecifier"/>
                        <operand localId="371" name="ToString" libraryName="FHIRHelpers" xsi:type="FunctionRef">
                           <signature localId="372" name="fhir:string" xsi:type="NamedTypeSpecifier"/>
                           <operand localId="356" locator="66:15-66:18" path="id" scope="M" xsi:type="Property"/>
                        </operand>
                        <operand localId="370" locator="66:22-66:55" xsi:type="Last">
                           <source localId="365" locator="66:27-66:54" xsi:type="Split">
                              <stringToSplit localId="366" name="ToString" libraryName="FHIRHelpers" xsi:type="FunctionRef">
                                 <signature localId="367" name="fhir:string" xsi:type="NamedTypeSpecifier"/>
                                 <operand localId="358" locator="66:33-66:48" path="reference" xsi:type="Property">
                                    <source localId="357" locator="66:33-66:38" name="choice" xsi:type="OperandRef"/>
                                 </operand>
                              </stringToSplit>
                              <separator localId="359" locator="66:51-66:53" valueType="t:String" value="/" xsi:type="Literal"/>
                           </source>
                        </operand>
                     </where>
                     <return localId="375" locator="67:9-67:45">
                        <expression localId="376" locator="67:16-67:45" strict="false" xsi:type="As">
                           <operand localId="378" locator="67:16-67:21" path="code" scope="M" xsi:type="Property"/>
                           <asTypeSpecifier localId="379" locator="67:26-67:45" name="fhir:CodeableConcept" xsi:type="NamedTypeSpecifier"/>
                        </expression>
                     </return>
                  </source>
               </then>
            </caseItem>
            <else localId="401" locator="69:7-69:99" xsi:type="Message">
               <signature localId="402" name="fhir:CodeableConcept" xsi:type="NamedTypeSpecifier"/>
               <signature localId="403" name="t:Boolean" xsi:type="NamedTypeSpecifier"/>
               <signature localId="404" name="t:String" xsi:type="NamedTypeSpecifier"/>
               <signature localId="405" name="t:String" xsi:type="NamedTypeSpecifier"/>
               <signature localId="406" name="t:String" xsi:type="NamedTypeSpecifier"/>
               <source localId="384" locator="69:15-69:42" strict="false" xsi:type="As">
                  <operand localId="385" locator="69:15-69:18" xsi:type="Null"/>
                  <asTypeSpecifier localId="386" locator="69:23-69:42" name="fhir:CodeableConcept" xsi:type="NamedTypeSpecifier"/>
               </source>
               <condition localId="387" locator="69:45-69:48" valueType="t:Boolean" value="true" xsi:type="Literal"/>
               <code localId="388" locator="69:51-69:53" valueType="t:String" value="1" xsi:type="Literal"/>
               <severity localId="390" locator="69:56-69:62" valueType="t:String" value="Error" xsi:type="Literal"/>
               <message localId="392" locator="69:65-69:98" valueType="t:String" value="Cannot compute a medication code" xsi:type="Literal"/>
            </else>
         </expression>
         <operand localId="336" name="choice">
            <operandTypeSpecifier localId="335" locator="60:46-60:89" xsi:type="ChoiceTypeSpecifier">
               <choice localId="333" locator="60:53-60:72" name="fhir:CodeableConcept" xsi:type="NamedTypeSpecifier"/>
               <choice localId="334" locator="60:75-60:88" name="fhir:Reference" xsi:type="NamedTypeSpecifier"/>
            </operandTypeSpecifier>
         </operand>
      </def>
      <def localId="407" locator="76:1-84:4" name="ExtractMedicationInitiationDate" context="Unfiltered" accessLevel="Public" xsi:type="FunctionDef">
         <annotation xsi:type="a:Annotation">
            <a:s r="407">
               <a:s>/**
 * @description Takes a choice between a Medication and a CodeableConcept and returns just the code of the medication
 */
define function ExtractMedicationInitiationDate(choice Choice&lt;FHIR.dateTime, FHIR.Period>):
  </a:s>
               <a:s r="414">
                  <a:s r="414">
                     <a:s>case
	  </a:s>
                     <a:s r="415">
                        <a:s>when </a:s>
                        <a:s r="416">
                           <a:s r="417">
                              <a:s>choice</a:s>
                           </a:s>
                           <a:s> is </a:s>
                           <a:s r="418">
                              <a:s>FHIR.Period</a:s>
                           </a:s>
                        </a:s>
                        <a:s> then
    	</a:s>
                        <a:s r="419">
                           <a:s>start of </a:s>
                           <a:s r="420">
                              <a:s>(</a:s>
                              <a:s r="420">
                                 <a:s r="421">
                                    <a:s>choice</a:s>
                                 </a:s>
                                 <a:s> as </a:s>
                                 <a:s r="422">
                                    <a:s>FHIR.Period</a:s>
                                 </a:s>
                              </a:s>
                              <a:s>)</a:s>
                           </a:s>
                        </a:s>
                     </a:s>
                     <a:s>
    </a:s>
                     <a:s r="425">
                        <a:s>when </a:s>
                        <a:s r="426">
                           <a:s r="427">
                              <a:s>choice</a:s>
                           </a:s>
                           <a:s> is </a:s>
                           <a:s r="428">
                              <a:s>FHIR.dateTime</a:s>
                           </a:s>
                        </a:s>
                        <a:s> then
      </a:s>
                        <a:s r="429">
                           <a:s r="430">
                              <a:s>choice</a:s>
                           </a:s>
                           <a:s> as </a:s>
                           <a:s r="431">
                              <a:s>FHIR.dateTime</a:s>
                           </a:s>
                        </a:s>
                     </a:s>
                     <a:s>
		else
      </a:s>
                     <a:s r="449">
                        <a:s>Message(</a:s>
                        <a:s r="432">
                           <a:s r="433">null as </a:s>
                           <a:s r="434">
                              <a:s>FHIR.dateTime</a:s>
                           </a:s>
                        </a:s>
                        <a:s r="435">, true, </a:s>
                        <a:s r="436">
                           <a:s>'1'</a:s>
                        </a:s>
                        <a:s>, </a:s>
                        <a:s r="438">
                           <a:s>'Error'</a:s>
                        </a:s>
                        <a:s>, </a:s>
                        <a:s r="440">
                           <a:s>'Cannot compute medication treatment initiation date'</a:s>
                        </a:s>
                        <a:s>)</a:s>
                     </a:s>
                     <a:s> // TODO: I'm sure that this is supported somehow?
	end</a:s>
                  </a:s>
               </a:s>
            </a:s>
         </annotation>
         <expression localId="414" locator="77:3-84:4" xsi:type="Case">
            <caseItem localId="415" locator="78:4-79:37">
               <when localId="416" locator="78:9-78:29" xsi:type="Is">
                  <operand localId="417" locator="78:9-78:14" name="choice" xsi:type="OperandRef"/>
                  <isTypeSpecifier localId="418" locator="78:19-78:29" name="fhir:Period" xsi:type="NamedTypeSpecifier"/>
               </when>
               <then localId="419" locator="79:6-79:37" xsi:type="Start">
                  <operand localId="423" name="ToInterval" libraryName="FHIRHelpers" xsi:type="FunctionRef">
                     <signature localId="424" name="fhir:Period" xsi:type="NamedTypeSpecifier"/>
                     <operand localId="420" locator="79:15-79:37" strict="false" xsi:type="As">
                        <operand localId="421" locator="79:16-79:21" name="choice" xsi:type="OperandRef"/>
                        <asTypeSpecifier localId="422" locator="79:26-79:36" name="fhir:Period" xsi:type="NamedTypeSpecifier"/>
                     </operand>
                  </operand>
               </then>
            </caseItem>
            <caseItem localId="425" locator="80:5-81:29">
               <when localId="426" locator="80:10-80:32" xsi:type="Is">
                  <operand localId="427" locator="80:10-80:15" name="choice" xsi:type="OperandRef"/>
                  <isTypeSpecifier localId="428" locator="80:20-80:32" name="fhir:dateTime" xsi:type="NamedTypeSpecifier"/>
               </when>
               <then localId="455" name="ToDateTime" libraryName="FHIRHelpers" xsi:type="FunctionRef">
                  <signature localId="456" name="fhir:dateTime" xsi:type="NamedTypeSpecifier"/>
                  <operand localId="429" locator="81:7-81:29" strict="false" xsi:type="As">
                     <operand localId="430" locator="81:7-81:12" name="choice" xsi:type="OperandRef"/>
                     <asTypeSpecifier localId="431" locator="81:17-81:29" name="fhir:dateTime" xsi:type="NamedTypeSpecifier"/>
                  </operand>
               </then>
            </caseItem>
            <else localId="457" name="ToDateTime" libraryName="FHIRHelpers" xsi:type="FunctionRef">
               <signature localId="458" name="fhir:dateTime" xsi:type="NamedTypeSpecifier"/>
               <operand localId="449" locator="83:7-83:111" xsi:type="Message">
                  <signature localId="450" name="fhir:dateTime" xsi:type="NamedTypeSpecifier"/>
                  <signature localId="451" name="t:Boolean" xsi:type="NamedTypeSpecifier"/>
                  <signature localId="452" name="t:String" xsi:type="NamedTypeSpecifier"/>
                  <signature localId="453" name="t:String" xsi:type="NamedTypeSpecifier"/>
                  <signature localId="454" name="t:String" xsi:type="NamedTypeSpecifier"/>
                  <source localId="432" locator="83:15-83:35" strict="false" xsi:type="As">
                     <operand localId="433" locator="83:15-83:18" xsi:type="Null"/>
                     <asTypeSpecifier localId="434" locator="83:23-83:35" name="fhir:dateTime" xsi:type="NamedTypeSpecifier"/>
                  </source>
                  <condition localId="435" locator="83:38-83:41" valueType="t:Boolean" value="true" xsi:type="Literal"/>
                  <code localId="436" locator="83:44-83:46" valueType="t:String" value="1" xsi:type="Literal"/>
                  <severity localId="438" locator="83:49-83:55" valueType="t:String" value="Error" xsi:type="Literal"/>
                  <message localId="440" locator="83:58-83:110" valueType="t:String" value="Cannot compute medication treatment initiation date" xsi:type="Literal"/>
               </operand>
            </else>
         </expression>
         <operand localId="411" name="choice">
            <operandTypeSpecifier localId="410" locator="76:56-76:89" xsi:type="ChoiceTypeSpecifier">
               <choice localId="408" locator="76:63-76:75" name="fhir:dateTime" xsi:type="NamedTypeSpecifier"/>
               <choice localId="409" locator="76:78-76:88" name="fhir:Period" xsi:type="NamedTypeSpecifier"/>
            </operandTypeSpecifier>
         </operand>
      </def>
      <def localId="459" locator="89:1-92:34" name="typeOfDose" context="Unfiltered" accessLevel="Public" fluent="true" xsi:type="FunctionDef">
         <annotation xsi:type="a:Annotation">
            <a:t name="description" value="Gets the type of antigen dose extension value from an Immunization"/>
            <a:s r="459">
               <a:s>/**
 * @description: Gets the type of antigen dose extension value from an Immunization
 */
define fluent function typeOfDose(immz Immunization):
  </a:s>
               <a:s r="464">
                  <a:s r="464">
                     <a:s r="486">
                        <a:s r="483">
                           <a:s>(</a:s>
                           <a:s r="483">
                              <a:s>First(
    </a:s>
                              <a:s r="478">
                                 <a:s>
                                    <a:s r="465">
                                       <a:s r="467">
                                          <a:s>
                                             <a:s>immz.extension</a:s>
                                          </a:s>
                                       </a:s>
                                       <a:s> E</a:s>
                                    </a:s>
                                 </a:s>
                                 <a:s> </a:s>
                                 <a:s r="469">
                                    <a:s>where </a:s>
                                    <a:s r="469">
                                       <a:s r="471">
                                          <a:s r="470">
                                             <a:s>E</a:s>
                                          </a:s>
                                          <a:s>.</a:s>
                                          <a:s r="471">
                                             <a:s>url</a:s>
                                          </a:s>
                                       </a:s>
                                       <a:s> = </a:s>
                                       <a:s r="472">
                                          <a:s>'http://smart.who.int/immunizations/StructureDefinition/IMMZTypeOfDose'</a:s>
                                       </a:s>
                                    </a:s>
                                 </a:s>
                              </a:s>
                              <a:s>
  )</a:s>
                           </a:s>
                           <a:s>)</a:s>
                        </a:s>
                        <a:s>.</a:s>
                        <a:s r="486">
                           <a:s>value</a:s>
                        </a:s>
                     </a:s>
                     <a:s> as </a:s>
                     <a:s r="487">
                        <a:s>FHIR.CodeableConcept</a:s>
                     </a:s>
                  </a:s>
               </a:s>
            </a:s>
         </annotation>
         <expression localId="464" locator="90:3-92:34" strict="false" xsi:type="As">
            <operand localId="486" locator="90:3-92:10" path="value" xsi:type="Property">
               <source localId="483" locator="90:3-92:4" xsi:type="First">
                  <signature localId="484" xsi:type="ListTypeSpecifier">
                     <elementType localId="485" name="fhir:Extension" xsi:type="NamedTypeSpecifier"/>
                  </signature>
                  <source localId="478" locator="91:5-91:106" xsi:type="Query">
                     <source localId="465" locator="91:5-91:20" alias="E">
                        <expression localId="467" locator="91:5-91:18" path="extension" xsi:type="Property">
                           <source localId="466" name="immz" xsi:type="OperandRef"/>
                        </expression>
                     </source>
                     <where localId="469" locator="91:22-91:106" xsi:type="Equal">
                        <signature localId="476" name="t:String" xsi:type="NamedTypeSpecifier"/>
                        <signature localId="477" name="t:String" xsi:type="NamedTypeSpecifier"/>
                        <operand localId="474" name="ToString" libraryName="FHIRHelpers" xsi:type="FunctionRef">
                           <signature localId="475" name="fhir:uri" xsi:type="NamedTypeSpecifier"/>
                           <operand localId="471" locator="91:28-91:32" path="url" scope="E" xsi:type="Property"/>
                        </operand>
                        <operand localId="472" locator="91:36-91:106" valueType="t:String" value="http://smart.who.int/immunizations/StructureDefinition/IMMZTypeOfDose" xsi:type="Literal"/>
                     </where>
                  </source>
               </source>
            </operand>
            <asTypeSpecifier localId="487" locator="92:15-92:34" name="fhir:CodeableConcept" xsi:type="NamedTypeSpecifier"/>
         </expression>
         <operand localId="461" name="immz">
            <operandTypeSpecifier localId="460" locator="89:40-89:51" name="fhir:Immunization" xsi:type="NamedTypeSpecifier"/>
         </operand>
      </def>
      <def localId="488" locator="97:1-100:34" name="brand" context="Unfiltered" accessLevel="Public" fluent="true" xsi:type="FunctionDef">
         <annotation xsi:type="a:Annotation">
            <a:t name="description" value="Gets the type of antigen dose extension value from an Immunization"/>
            <a:s r="488">
               <a:s>/**
 * @description: Gets the type of antigen dose extension value from an Immunization
 */
define fluent function brand(immz Immunization):
  </a:s>
               <a:s r="493">
                  <a:s r="493">
                     <a:s r="515">
                        <a:s r="512">
                           <a:s>(</a:s>
                           <a:s r="512">
                              <a:s>First(
    </a:s>
                              <a:s r="507">
                                 <a:s>
                                    <a:s r="494">
                                       <a:s r="496">
                                          <a:s>
                                             <a:s>immz.extension</a:s>
                                          </a:s>
                                       </a:s>
                                       <a:s> E</a:s>
                                    </a:s>
                                 </a:s>
                                 <a:s> </a:s>
                                 <a:s r="498">
                                    <a:s>where </a:s>
                                    <a:s r="498">
                                       <a:s r="500">
                                          <a:s r="499">
                                             <a:s>E</a:s>
                                          </a:s>
                                          <a:s>.</a:s>
                                          <a:s r="500">
                                             <a:s>url</a:s>
                                          </a:s>
                                       </a:s>
                                       <a:s> = </a:s>
                                       <a:s r="501">
                                          <a:s>'http://smart.who.int/immunizations/StructureDefinition/IMMZVaccineBrand'</a:s>
                                       </a:s>
                                    </a:s>
                                 </a:s>
                              </a:s>
                              <a:s>
  )</a:s>
                           </a:s>
                           <a:s>)</a:s>
                        </a:s>
                        <a:s>.</a:s>
                        <a:s r="515">
                           <a:s>value</a:s>
                        </a:s>
                     </a:s>
                     <a:s> as </a:s>
                     <a:s r="516">
                        <a:s>FHIR.CodeableConcept</a:s>
                     </a:s>
                  </a:s>
               </a:s>
            </a:s>
         </annotation>
         <expression localId="493" locator="98:3-100:34" strict="false" xsi:type="As">
            <operand localId="515" locator="98:3-100:10" path="value" xsi:type="Property">
               <source localId="512" locator="98:3-100:4" xsi:type="First">
                  <signature localId="513" xsi:type="ListTypeSpecifier">
                     <elementType localId="514" name="fhir:Extension" xsi:type="NamedTypeSpecifier"/>
                  </signature>
                  <source localId="507" locator="99:5-99:108" xsi:type="Query">
                     <source localId="494" locator="99:5-99:20" alias="E">
                        <expression localId="496" locator="99:5-99:18" path="extension" xsi:type="Property">
                           <source localId="495" name="immz" xsi:type="OperandRef"/>
                        </expression>
                     </source>
                     <where localId="498" locator="99:22-99:108" xsi:type="Equal">
                        <signature localId="505" name="t:String" xsi:type="NamedTypeSpecifier"/>
                        <signature localId="506" name="t:String" xsi:type="NamedTypeSpecifier"/>
                        <operand localId="503" name="ToString" libraryName="FHIRHelpers" xsi:type="FunctionRef">
                           <signature localId="504" name="fhir:uri" xsi:type="NamedTypeSpecifier"/>
                           <operand localId="500" locator="99:28-99:32" path="url" scope="E" xsi:type="Property"/>
                        </operand>
                        <operand localId="501" locator="99:36-99:108" valueType="t:String" value="http://smart.who.int/immunizations/StructureDefinition/IMMZVaccineBrand" xsi:type="Literal"/>
                     </where>
                  </source>
               </source>
            </operand>
            <asTypeSpecifier localId="516" locator="100:15-100:34" name="fhir:CodeableConcept" xsi:type="NamedTypeSpecifier"/>
         </expression>
         <operand localId="490" name="immz">
            <operandTypeSpecifier localId="489" locator="97:35-97:46" name="fhir:Immunization" xsi:type="NamedTypeSpecifier"/>
         </operand>
      </def>
      <def localId="517" locator="105:1-107:67" name="getDose" context="Unfiltered" accessLevel="Public" fluent="true" xsi:type="FunctionDef">
         <annotation xsi:type="a:Annotation">
            <a:t name="description" value="Gets a given immunization from a list that matches the dose number"/>
            <a:s r="517">
               <a:s>/**
 * @description: Gets a given immunization from a list that matches the dose number
 */
define fluent function getDose(immunizations List&lt;Immunization>, doseNumber String):
  </a:s>
               <a:s r="544">
                  <a:s r="544">
                     <a:s>
                        <a:s r="526">
                           <a:s r="527">
                              <a:s>
                                 <a:s>immunizations</a:s>
                              </a:s>
                           </a:s>
                           <a:s> I</a:s>
                        </a:s>
                     </a:s>
                     <a:s> </a:s>
                     <a:s r="529">
                        <a:s>where
    </a:s>
                        <a:s r="529">
                           <a:s>exists</a:s>
                           <a:s r="543">
                              <a:s>( </a:s>
                              <a:s r="543">
                                 <a:s>
                                    <a:s r="530">
                                       <a:s r="532">
                                          <a:s>
                                             <a:s>I.protocolApplied</a:s>
                                          </a:s>
                                       </a:s>
                                       <a:s> pa</a:s>
                                    </a:s>
                                 </a:s>
                                 <a:s> </a:s>
                                 <a:s r="534">
                                    <a:s>where </a:s>
                                    <a:s r="534">
                                       <a:s r="536">
                                          <a:s r="535">
                                             <a:s>pa</a:s>
                                          </a:s>
                                          <a:s>.</a:s>
                                          <a:s r="536">
                                             <a:s>doseNumber</a:s>
                                          </a:s>
                                       </a:s>
                                       <a:s> = </a:s>
                                       <a:s r="537">
                                          <a:s>doseNumber</a:s>
                                       </a:s>
                                    </a:s>
                                 </a:s>
                              </a:s>
                              <a:s> )</a:s>
                           </a:s>
                        </a:s>
                     </a:s>
                  </a:s>
               </a:s>
            </a:s>
         </annotation>
         <expression localId="544" locator="106:3-107:67" xsi:type="Query">
            <source localId="526" locator="106:3-106:17" alias="I">
               <expression localId="527" locator="106:3-106:15" name="immunizations" xsi:type="OperandRef"/>
            </source>
            <where localId="529" locator="106:19-107:67" xsi:type="Exists">
               <operand localId="543" locator="107:11-107:67" xsi:type="Query">
                  <source localId="530" locator="107:13-107:32" alias="pa">
                     <expression localId="532" locator="107:13-107:29" path="protocolApplied" scope="I" xsi:type="Property"/>
                  </source>
                  <where localId="534" locator="107:34-107:65" xsi:type="Equal">
                     <signature localId="541" name="t:String" xsi:type="NamedTypeSpecifier"/>
                     <signature localId="542" name="t:String" xsi:type="NamedTypeSpecifier"/>
                     <operand localId="539" name="ToString" libraryName="FHIRHelpers" xsi:type="FunctionRef">
                        <signature localId="540" name="fhir:string" xsi:type="NamedTypeSpecifier"/>
                        <operand localId="538" asType="fhir:string" xsi:type="As">
                           <operand localId="536" locator="107:40-107:52" path="doseNumber" scope="pa" xsi:type="Property"/>
                        </operand>
                     </operand>
                     <operand localId="537" locator="107:56-107:65" name="doseNumber" xsi:type="OperandRef"/>
                  </where>
               </operand>
            </where>
         </expression>
         <operand localId="520" name="immunizations">
            <operandTypeSpecifier localId="518" locator="105:46-105:63" xsi:type="ListTypeSpecifier">
               <elementType localId="519" locator="105:51-105:62" name="fhir:Immunization" xsi:type="NamedTypeSpecifier"/>
            </operandTypeSpecifier>
         </operand>
         <operand localId="522" name="doseNumber">
            <operandTypeSpecifier localId="521" locator="105:77-105:82" name="t:String" xsi:type="NamedTypeSpecifier"/>
         </operand>
      </def>
      <def localId="545" locator="112:1-114:67" name="getDose" context="Unfiltered" accessLevel="Public" fluent="true" xsi:type="FunctionDef">
         <annotation xsi:type="a:Annotation">
            <a:t name="description" value="Gets a given immunization from a list that matches the dose number"/>
            <a:s r="545">
               <a:s>/**
 * @description: Gets a given immunization from a list that matches the dose number
 */
define fluent function getDose(immunization Immunization, doseNumber String):
  </a:s>
               <a:s r="571">
                  <a:s r="571">
                     <a:s>
                        <a:s r="553">
                           <a:s r="554">
                              <a:s>
                                 <a:s>immunization</a:s>
                              </a:s>
                           </a:s>
                           <a:s> I</a:s>
                        </a:s>
                     </a:s>
                     <a:s> </a:s>
                     <a:s r="556">
                        <a:s>where
    </a:s>
                        <a:s r="556">
                           <a:s>exists</a:s>
                           <a:s r="570">
                              <a:s>( </a:s>
                              <a:s r="570">
                                 <a:s>
                                    <a:s r="557">
                                       <a:s r="559">
                                          <a:s>
                                             <a:s>I.protocolApplied</a:s>
                                          </a:s>
                                       </a:s>
                                       <a:s> pa</a:s>
                                    </a:s>
                                 </a:s>
                                 <a:s> </a:s>
                                 <a:s r="561">
                                    <a:s>where </a:s>
                                    <a:s r="561">
                                       <a:s r="563">
                                          <a:s r="562">
                                             <a:s>pa</a:s>
                                          </a:s>
                                          <a:s>.</a:s>
                                          <a:s r="563">
                                             <a:s>doseNumber</a:s>
                                          </a:s>
                                       </a:s>
                                       <a:s> = </a:s>
                                       <a:s r="564">
                                          <a:s>doseNumber</a:s>
                                       </a:s>
                                    </a:s>
                                 </a:s>
                              </a:s>
                              <a:s> )</a:s>
                           </a:s>
                        </a:s>
                     </a:s>
                  </a:s>
               </a:s>
            </a:s>
         </annotation>
         <expression localId="571" locator="113:3-114:67" xsi:type="Query">
            <source localId="553" locator="113:3-113:16" alias="I">
               <expression localId="554" locator="113:3-113:14" name="immunization" xsi:type="OperandRef"/>
            </source>
            <where localId="556" locator="113:18-114:67" xsi:type="Exists">
               <operand localId="570" locator="114:11-114:67" xsi:type="Query">
                  <source localId="557" locator="114:13-114:32" alias="pa">
                     <expression localId="559" locator="114:13-114:29" path="protocolApplied" scope="I" xsi:type="Property"/>
                  </source>
                  <where localId="561" locator="114:34-114:65" xsi:type="Equal">
                     <signature localId="568" name="t:String" xsi:type="NamedTypeSpecifier"/>
                     <signature localId="569" name="t:String" xsi:type="NamedTypeSpecifier"/>
                     <operand localId="566" name="ToString" libraryName="FHIRHelpers" xsi:type="FunctionRef">
                        <signature localId="567" name="fhir:string" xsi:type="NamedTypeSpecifier"/>
                        <operand localId="565" asType="fhir:string" xsi:type="As">
                           <operand localId="563" locator="114:40-114:52" path="doseNumber" scope="pa" xsi:type="Property"/>
                        </operand>
                     </operand>
                     <operand localId="564" locator="114:56-114:65" name="doseNumber" xsi:type="OperandRef"/>
                  </where>
               </operand>
            </where>
         </expression>
         <operand localId="547" name="immunization">
            <operandTypeSpecifier localId="546" locator="112:45-112:56" name="fhir:Immunization" xsi:type="NamedTypeSpecifier"/>
         </operand>
         <operand localId="549" name="doseNumber">
            <operandTypeSpecifier localId="548" locator="112:70-112:75" name="t:String" xsi:type="NamedTypeSpecifier"/>
         </operand>
      </def>
      <def localId="572" locator="119:1-121:59" name="onOrBefore" context="Unfiltered" accessLevel="Public" fluent="true" xsi:type="FunctionDef">
         <annotation xsi:type="a:Annotation">
            <a:t name="description" value="Gets immunizations on or before a date"/>
            <a:s r="572">
               <a:s>/**
 * @description: Gets immunizations on or before a date
 */
define fluent function onOrBefore(immunizations List&lt;Immunization>, beforeDate Date):
  </a:s>
               <a:s r="602">
                  <a:s r="602">
                     <a:s>
                        <a:s r="581">
                           <a:s r="582">
                              <a:s>
                                 <a:s>immunizations</a:s>
                              </a:s>
                           </a:s>
                           <a:s> I</a:s>
                        </a:s>
                     </a:s>
                     <a:s> </a:s>
                     <a:s r="588">
                        <a:s>where
    </a:s>
                        <a:s r="588">
                           <a:s r="586">
                              <a:s r="585">
                                 <a:s r="584">
                                    <a:s>I</a:s>
                                 </a:s>
                                 <a:s>.</a:s>
                                 <a:s r="585">
                                    <a:s>occurrence</a:s>
                                 </a:s>
                              </a:s>
                              <a:s>.</a:s>
                              <a:s r="586">
                                 <a:s>toInterval()</a:s>
                              </a:s>
                           </a:s>
                           <a:s r="588"> same day or before </a:s>
                           <a:s r="587">
                              <a:s>beforeDate</a:s>
                           </a:s>
                        </a:s>
                     </a:s>
                  </a:s>
               </a:s>
            </a:s>
         </annotation>
         <expression localId="602" locator="120:3-121:59" xsi:type="Query">
            <source localId="581" locator="120:3-120:17" alias="I">
               <expression localId="582" locator="120:3-120:15" name="immunizations" xsi:type="OperandRef"/>
            </source>
            <where localId="588" locator="120:19-121:59" precision="Day" xsi:type="SameOrBefore">
               <signature localId="598" xsi:type="IntervalTypeSpecifier">
                  <pointType localId="599" name="t:DateTime" xsi:type="NamedTypeSpecifier"/>
               </signature>
               <signature localId="600" xsi:type="IntervalTypeSpecifier">
                  <pointType localId="601" name="t:DateTime" xsi:type="NamedTypeSpecifier"/>
               </signature>
               <operand localId="586" locator="121:5-121:29" name="toInterval" libraryName="WC" xsi:type="FunctionRef">
                  <operand localId="585" locator="121:5-121:16" path="occurrence" scope="I" xsi:type="Property"/>
               </operand>
               <operand localId="592" xsi:type="If">
                  <condition localId="593" xsi:type="IsNull">
                     <operand localId="590" xsi:type="ToDateTime">
                        <signature localId="591" name="t:Date" xsi:type="NamedTypeSpecifier"/>
                        <operand localId="587" locator="121:50-121:59" name="beforeDate" xsi:type="OperandRef"/>
                     </operand>
                  </condition>
                  <then localId="594" xsi:type="Null"/>
                  <else localId="597" lowClosed="true" highClosed="true" xsi:type="Interval">
                     <low localId="590" xsi:type="ToDateTime">
                        <signature localId="591" name="t:Date" xsi:type="NamedTypeSpecifier"/>
                        <operand localId="587" locator="121:50-121:59" name="beforeDate" xsi:type="OperandRef"/>
                     </low>
                     <high localId="590" xsi:type="ToDateTime">
                        <signature localId="591" name="t:Date" xsi:type="NamedTypeSpecifier"/>
                        <operand localId="587" locator="121:50-121:59" name="beforeDate" xsi:type="OperandRef"/>
                     </high>
                  </else>
               </operand>
            </where>
         </expression>
         <operand localId="575" name="immunizations">
            <operandTypeSpecifier localId="573" locator="119:49-119:66" xsi:type="ListTypeSpecifier">
               <elementType localId="574" locator="119:54-119:65" name="fhir:Immunization" xsi:type="NamedTypeSpecifier"/>
            </operandTypeSpecifier>
         </operand>
         <operand localId="577" name="beforeDate">
            <operandTypeSpecifier localId="576" locator="119:80-119:83" name="t:Date" xsi:type="NamedTypeSpecifier"/>
         </operand>
      </def>
      <def localId="603" locator="126:1-127:85" name="seriesDoses" context="Unfiltered" accessLevel="Public" fluent="true" xsi:type="FunctionDef">
         <annotation xsi:type="a:Annotation">
            <a:t name="description" value="Gets the series doses from an immunization"/>
            <a:s r="603">
               <a:s>/**
 * @description: Gets the series doses from an immunization
 */
define fluent function seriesDoses(immunization Immunization):
  </a:s>
               <a:s r="624">
                  <a:s r="624">
                     <a:s r="621">
                        <a:s>First(</a:s>
                        <a:s r="616">
                           <a:s>
                              <a:s r="608">
                                 <a:s r="610">
                                    <a:s>
                                       <a:s>immunization.protocolApplied</a:s>
                                    </a:s>
                                 </a:s>
                                 <a:s> pa</a:s>
                              </a:s>
                           </a:s>
                           <a:s> </a:s>
                           <a:s r="615">
                              <a:s>where </a:s>
                              <a:s r="615">
                                 <a:s r="613">
                                    <a:s r="612">
                                       <a:s>pa</a:s>
                                    </a:s>
                                    <a:s>.</a:s>
                                    <a:s r="613">
                                       <a:s>seriesDoses</a:s>
                                    </a:s>
                                 </a:s>
                                 <a:s> is not null</a:s>
                              </a:s>
                           </a:s>
                        </a:s>
                        <a:s>)</a:s>
                     </a:s>
                     <a:s>.</a:s>
                     <a:s r="624">
                        <a:s>seriesDoses</a:s>
                     </a:s>
                  </a:s>
               </a:s>
            </a:s>
         </annotation>
         <expression localId="624" locator="127:3-127:85" path="seriesDoses" xsi:type="Property">
            <source localId="621" locator="127:3-127:73" xsi:type="First">
               <signature localId="622" xsi:type="ListTypeSpecifier">
                  <elementType localId="623" name="fhir:Immunization.ProtocolApplied" xsi:type="NamedTypeSpecifier"/>
               </signature>
               <source localId="616" locator="127:9-127:72" xsi:type="Query">
                  <source localId="608" locator="127:9-127:39" alias="pa">
                     <expression localId="610" locator="127:9-127:36" path="protocolApplied" xsi:type="Property">
                        <source localId="609" name="immunization" xsi:type="OperandRef"/>
                     </expression>
                  </source>
                  <where localId="615" locator="127:41-127:72" xsi:type="Not">
                     <operand localId="614" locator="127:47-127:72" xsi:type="IsNull">
                        <operand localId="613" locator="127:47-127:60" path="seriesDoses" scope="pa" xsi:type="Property"/>
                     </operand>
                  </where>
               </source>
            </source>
         </expression>
         <operand localId="605" name="immunization">
            <operandTypeSpecifier localId="604" locator="126:49-126:60" name="fhir:Immunization" xsi:type="NamedTypeSpecifier"/>
         </operand>
      </def>
      <def localId="625" locator="132:1-135:71" name="encounterOrOnBefore" context="Unfiltered" accessLevel="Public" fluent="true" xsi:type="FunctionDef">
         <annotation xsi:type="a:Annotation">
            <a:t name="description" value="Gets observation from an encounter or on or before a date"/>
            <a:s r="625">
               <a:s>/**
 * @description: Gets observation from an encounter or on or before a date
 */
define fluent function encounterOrOnBefore(observations List&lt;Observation>, EncounterId String, beforeDate Date):
  </a:s>
               <a:s r="658">
                  <a:s r="658">
                     <a:s>
                        <a:s r="637">
                           <a:s r="638">
                              <a:s>
                                 <a:s>observations</a:s>
                              </a:s>
                           </a:s>
                           <a:s> O</a:s>
                        </a:s>
                     </a:s>
                     <a:s> </a:s>
                     <a:s r="640">
                        <a:s>where
    </a:s>
                        <a:s r="640">
                           <a:s>(</a:s>
                           <a:s r="640">
                              <a:s r="644">
                                 <a:s r="642">
                                    <a:s r="641">
                                       <a:s>O</a:s>
                                    </a:s>
                                    <a:s>.</a:s>
                                    <a:s r="642">
                                       <a:s>encounter</a:s>
                                    </a:s>
                                 </a:s>
                                 <a:s>.</a:s>
                                 <a:s r="644">
                                    <a:s>references(</a:s>
                                    <a:s r="643">
                                       <a:s>EncounterId</a:s>
                                    </a:s>
                                    <a:s>)</a:s>
                                 </a:s>
                              </a:s>
                              <a:s>
      or </a:s>
                              <a:s r="652">
                                 <a:s r="649">
                                    <a:s r="648">
                                       <a:s r="647">
                                          <a:s>O</a:s>
                                       </a:s>
                                       <a:s>.</a:s>
                                       <a:s r="648">
                                          <a:s>effective</a:s>
                                       </a:s>
                                    </a:s>
                                    <a:s>.</a:s>
                                    <a:s r="649">
                                       <a:s>toInterval()</a:s>
                                    </a:s>
                                 </a:s>
                                 <a:s r="652"> starts same day or before </a:s>
                                 <a:s r="650">
                                    <a:s>beforeDate</a:s>
                                 </a:s>
                              </a:s>
                           </a:s>
                           <a:s>)</a:s>
                        </a:s>
                     </a:s>
                  </a:s>
               </a:s>
            </a:s>
         </annotation>
         <expression localId="658" locator="133:3-135:71" xsi:type="Query">
            <source localId="637" locator="133:3-133:16" alias="O">
               <expression localId="638" locator="133:3-133:14" name="observations" xsi:type="OperandRef"/>
            </source>
            <where localId="640" locator="133:18-135:71" xsi:type="Or">
               <operand localId="644" locator="134:6-134:40" name="references" libraryName="WC" xsi:type="FunctionRef">
                  <signature localId="645" name="fhir:Reference" xsi:type="NamedTypeSpecifier"/>
                  <signature localId="646" name="t:String" xsi:type="NamedTypeSpecifier"/>
                  <operand localId="642" locator="134:6-134:16" path="encounter" scope="O" xsi:type="Property"/>
                  <operand localId="643" locator="134:29-134:39" name="EncounterId" xsi:type="OperandRef"/>
               </operand>
               <operand localId="652" locator="135:10-135:70" precision="Day" xsi:type="SameOrBefore">
                  <signature localId="656" name="t:DateTime" xsi:type="NamedTypeSpecifier"/>
                  <signature localId="657" name="t:DateTime" xsi:type="NamedTypeSpecifier"/>
                  <operand localId="651" locator="135:35-135:40" xsi:type="Start">
                     <operand localId="649" locator="135:10-135:33" name="toInterval" libraryName="WC" xsi:type="FunctionRef">
                        <operand localId="648" locator="135:10-135:20" path="effective" scope="O" xsi:type="Property"/>
                     </operand>
                  </operand>
                  <operand localId="654" xsi:type="ToDateTime">
                     <signature localId="655" name="t:Date" xsi:type="NamedTypeSpecifier"/>
                     <operand localId="650" locator="135:61-135:70" name="beforeDate" xsi:type="OperandRef"/>
                  </operand>
               </operand>
            </where>
         </expression>
         <operand localId="628" name="observations">
            <operandTypeSpecifier localId="626" locator="132:57-132:73" xsi:type="ListTypeSpecifier">
               <elementType localId="627" locator="132:62-132:72" name="fhir:Observation" xsi:type="NamedTypeSpecifier"/>
            </operandTypeSpecifier>
         </operand>
         <operand localId="630" name="EncounterId">
            <operandTypeSpecifier localId="629" locator="132:88-132:93" name="t:String" xsi:type="NamedTypeSpecifier"/>
         </operand>
         <operand localId="632" name="beforeDate">
            <operandTypeSpecifier localId="631" locator="132:107-132:110" name="t:Date" xsi:type="NamedTypeSpecifier"/>
         </operand>
      </def>
      <def localId="659" locator="140:1-142:69" name="seriesPrimary" context="Unfiltered" accessLevel="Public" fluent="true" xsi:type="FunctionDef">
         <annotation xsi:type="a:Annotation">
            <a:t name="description" value="Gets the doses from the primary series"/>
            <a:s r="659">
               <a:s>/**
 * @description: Gets the doses from the primary series
 */
define fluent function seriesPrimary(immunizations List&lt;Immunization>):
  </a:s>
               <a:s r="683">
                  <a:s r="683">
                     <a:s>
                        <a:s r="665">
                           <a:s r="666">
                              <a:s>
                                 <a:s>immunizations</a:s>
                              </a:s>
                           </a:s>
                           <a:s> I</a:s>
                        </a:s>
                     </a:s>
                     <a:s> </a:s>
                     <a:s r="668">
                        <a:s>where
    </a:s>
                        <a:s r="668">
                           <a:s>exists</a:s>
                           <a:s r="682">
                              <a:s>( </a:s>
                              <a:s r="682">
                                 <a:s>
                                    <a:s r="669">
                                       <a:s r="671">
                                          <a:s>
                                             <a:s>I.protocolApplied</a:s>
                                          </a:s>
                                       </a:s>
                                       <a:s> pa</a:s>
                                    </a:s>
                                 </a:s>
                                 <a:s> </a:s>
                                 <a:s r="673">
                                    <a:s>where </a:s>
                                    <a:s r="673">
                                       <a:s r="675">
                                          <a:s r="674">
                                             <a:s>pa</a:s>
                                          </a:s>
                                          <a:s>.</a:s>
                                          <a:s r="675">
                                             <a:s>series</a:s>
                                          </a:s>
                                       </a:s>
                                       <a:s> = </a:s>
                                       <a:s r="676">
                                          <a:s>'Primary series'</a:s>
                                       </a:s>
                                    </a:s>
                                 </a:s>
                              </a:s>
                              <a:s> )</a:s>
                           </a:s>
                        </a:s>
                     </a:s>
                  </a:s>
               </a:s>
            </a:s>
         </annotation>
         <expression localId="683" locator="141:3-142:69" xsi:type="Query">
            <source localId="665" locator="141:3-141:17" alias="I">
               <expression localId="666" locator="141:3-141:15" name="immunizations" xsi:type="OperandRef"/>
            </source>
            <where localId="668" locator="141:19-142:69" xsi:type="Exists">
               <operand localId="682" locator="142:11-142:69" xsi:type="Query">
                  <source localId="669" locator="142:13-142:32" alias="pa">
                     <expression localId="671" locator="142:13-142:29" path="protocolApplied" scope="I" xsi:type="Property"/>
                  </source>
                  <where localId="673" locator="142:34-142:67" xsi:type="Equal">
                     <signature localId="680" name="t:String" xsi:type="NamedTypeSpecifier"/>
                     <signature localId="681" name="t:String" xsi:type="NamedTypeSpecifier"/>
                     <operand localId="678" name="ToString" libraryName="FHIRHelpers" xsi:type="FunctionRef">
                        <signature localId="679" name="fhir:string" xsi:type="NamedTypeSpecifier"/>
                        <operand localId="675" locator="142:40-142:48" path="series" scope="pa" xsi:type="Property"/>
                     </operand>
                     <operand localId="676" locator="142:52-142:67" valueType="t:String" value="Primary series" xsi:type="Literal"/>
                  </where>
               </operand>
            </where>
         </expression>
         <operand localId="662" name="immunizations">
            <operandTypeSpecifier localId="660" locator="140:52-140:69" xsi:type="ListTypeSpecifier">
               <elementType localId="661" locator="140:57-140:68" name="fhir:Immunization" xsi:type="NamedTypeSpecifier"/>
            </operandTypeSpecifier>
         </operand>
      </def>
      <def localId="684" locator="147:1-149:61" name="seriesDose0" context="Unfiltered" accessLevel="Public" fluent="true" xsi:type="FunctionDef">
         <annotation xsi:type="a:Annotation">
            <a:t name="description" value="Gets the doses from the dose 0 series"/>
            <a:s r="684">
               <a:s>/**
 * @description: Gets the doses from the dose 0 series
 */
define fluent function seriesDose0(immunizations List&lt;Immunization>):
  </a:s>
               <a:s r="708">
                  <a:s r="708">
                     <a:s>
                        <a:s r="690">
                           <a:s r="691">
                              <a:s>
                                 <a:s>immunizations</a:s>
                              </a:s>
                           </a:s>
                           <a:s> I</a:s>
                        </a:s>
                     </a:s>
                     <a:s> </a:s>
                     <a:s r="693">
                        <a:s>where
    </a:s>
                        <a:s r="693">
                           <a:s>exists</a:s>
                           <a:s r="707">
                              <a:s>( </a:s>
                              <a:s r="707">
                                 <a:s>
                                    <a:s r="694">
                                       <a:s r="696">
                                          <a:s>
                                             <a:s>I.protocolApplied</a:s>
                                          </a:s>
                                       </a:s>
                                       <a:s> pa</a:s>
                                    </a:s>
                                 </a:s>
                                 <a:s> </a:s>
                                 <a:s r="698">
                                    <a:s>where </a:s>
                                    <a:s r="698">
                                       <a:s r="700">
                                          <a:s r="699">
                                             <a:s>pa</a:s>
                                          </a:s>
                                          <a:s>.</a:s>
                                          <a:s r="700">
                                             <a:s>series</a:s>
                                          </a:s>
                                       </a:s>
                                       <a:s> = </a:s>
                                       <a:s r="701">
                                          <a:s>'Dose 0'</a:s>
                                       </a:s>
                                    </a:s>
                                 </a:s>
                              </a:s>
                              <a:s> )</a:s>
                           </a:s>
                        </a:s>
                     </a:s>
                  </a:s>
               </a:s>
            </a:s>
         </annotation>
         <expression localId="708" locator="148:3-149:61" xsi:type="Query">
            <source localId="690" locator="148:3-148:17" alias="I">
               <expression localId="691" locator="148:3-148:15" name="immunizations" xsi:type="OperandRef"/>
            </source>
            <where localId="693" locator="148:19-149:61" xsi:type="Exists">
               <operand localId="707" locator="149:11-149:61" xsi:type="Query">
                  <source localId="694" locator="149:13-149:32" alias="pa">
                     <expression localId="696" locator="149:13-149:29" path="protocolApplied" scope="I" xsi:type="Property"/>
                  </source>
                  <where localId="698" locator="149:34-149:59" xsi:type="Equal">
                     <signature localId="705" name="t:String" xsi:type="NamedTypeSpecifier"/>
                     <signature localId="706" name="t:String" xsi:type="NamedTypeSpecifier"/>
                     <operand localId="703" name="ToString" libraryName="FHIRHelpers" xsi:type="FunctionRef">
                        <signature localId="704" name="fhir:string" xsi:type="NamedTypeSpecifier"/>
                        <operand localId="700" locator="149:40-149:48" path="series" scope="pa" xsi:type="Property"/>
                     </operand>
                     <operand localId="701" locator="149:52-149:59" valueType="t:String" value="Dose 0" xsi:type="Literal"/>
                  </where>
               </operand>
            </where>
         </expression>
         <operand localId="687" name="immunizations">
            <operandTypeSpecifier localId="685" locator="147:50-147:67" xsi:type="ListTypeSpecifier">
               <elementType localId="686" locator="147:55-147:66" name="fhir:Immunization" xsi:type="NamedTypeSpecifier"/>
            </operandTypeSpecifier>
         </operand>
      </def>
      <def localId="709" locator="154:1-156:67" name="seriesBooster" context="Unfiltered" accessLevel="Public" fluent="true" xsi:type="FunctionDef">
         <annotation xsi:type="a:Annotation">
            <a:t name="description" value="Gets the doses from the Booster series"/>
            <a:s r="709">
               <a:s>/**
 * @description: Gets the doses from the Booster series
 */
define fluent function seriesBooster(immunizations List&lt;Immunization>):
  </a:s>
               <a:s r="733">
                  <a:s r="733">
                     <a:s>
                        <a:s r="715">
                           <a:s r="716">
                              <a:s>
                                 <a:s>immunizations</a:s>
                              </a:s>
                           </a:s>
                           <a:s> I</a:s>
                        </a:s>
                     </a:s>
                     <a:s> </a:s>
                     <a:s r="718">
                        <a:s>where
    </a:s>
                        <a:s r="718">
                           <a:s>exists</a:s>
                           <a:s r="732">
                              <a:s>( </a:s>
                              <a:s r="732">
                                 <a:s>
                                    <a:s r="719">
                                       <a:s r="721">
                                          <a:s>
                                             <a:s>I.protocolApplied</a:s>
                                          </a:s>
                                       </a:s>
                                       <a:s> pa</a:s>
                                    </a:s>
                                 </a:s>
                                 <a:s> </a:s>
                                 <a:s r="723">
                                    <a:s>where </a:s>
                                    <a:s r="723">
                                       <a:s r="725">
                                          <a:s r="724">
                                             <a:s>pa</a:s>
                                          </a:s>
                                          <a:s>.</a:s>
                                          <a:s r="725">
                                             <a:s>series</a:s>
                                          </a:s>
                                       </a:s>
                                       <a:s> = </a:s>
                                       <a:s r="726">
                                          <a:s>'Booster dose'</a:s>
                                       </a:s>
                                    </a:s>
                                 </a:s>
                              </a:s>
                              <a:s> )</a:s>
                           </a:s>
                        </a:s>
                     </a:s>
                  </a:s>
               </a:s>
            </a:s>
         </annotation>
         <expression localId="733" locator="155:3-156:67" xsi:type="Query">
            <source localId="715" locator="155:3-155:17" alias="I">
               <expression localId="716" locator="155:3-155:15" name="immunizations" xsi:type="OperandRef"/>
            </source>
            <where localId="718" locator="155:19-156:67" xsi:type="Exists">
               <operand localId="732" locator="156:11-156:67" xsi:type="Query">
                  <source localId="719" locator="156:13-156:32" alias="pa">
                     <expression localId="721" locator="156:13-156:29" path="protocolApplied" scope="I" xsi:type="Property"/>
                  </source>
                  <where localId="723" locator="156:34-156:65" xsi:type="Equal">
                     <signature localId="730" name="t:String" xsi:type="NamedTypeSpecifier"/>
                     <signature localId="731" name="t:String" xsi:type="NamedTypeSpecifier"/>
                     <operand localId="728" name="ToString" libraryName="FHIRHelpers" xsi:type="FunctionRef">
                        <signature localId="729" name="fhir:string" xsi:type="NamedTypeSpecifier"/>
                        <operand localId="725" locator="156:40-156:48" path="series" scope="pa" xsi:type="Property"/>
                     </operand>
                     <operand localId="726" locator="156:52-156:65" valueType="t:String" value="Booster dose" xsi:type="Literal"/>
                  </where>
               </operand>
            </where>
         </expression>
         <operand localId="712" name="immunizations">
            <operandTypeSpecifier localId="710" locator="154:52-154:69" xsi:type="ListTypeSpecifier">
               <elementType localId="711" locator="154:57-154:68" name="fhir:Immunization" xsi:type="NamedTypeSpecifier"/>
            </operandTypeSpecifier>
         </operand>
      </def>
      <def localId="734" locator="161:1-163:73" name="seriesSupplementary" context="Unfiltered" accessLevel="Public" fluent="true" xsi:type="FunctionDef">
         <annotation xsi:type="a:Annotation">
            <a:t name="description" value="Gets the doses from the Supplementary series"/>
            <a:s r="734">
               <a:s>/**
 * @description: Gets the doses from the Supplementary series
 */
define fluent function seriesSupplementary(immunizations List&lt;Immunization>):
  </a:s>
               <a:s r="758">
                  <a:s r="758">
                     <a:s>
                        <a:s r="740">
                           <a:s r="741">
                              <a:s>
                                 <a:s>immunizations</a:s>
                              </a:s>
                           </a:s>
                           <a:s> I</a:s>
                        </a:s>
                     </a:s>
                     <a:s> </a:s>
                     <a:s r="743">
                        <a:s>where
    </a:s>
                        <a:s r="743">
                           <a:s>exists</a:s>
                           <a:s r="757">
                              <a:s>( </a:s>
                              <a:s r="757">
                                 <a:s>
                                    <a:s r="744">
                                       <a:s r="746">
                                          <a:s>
                                             <a:s>I.protocolApplied</a:s>
                                          </a:s>
                                       </a:s>
                                       <a:s> pa</a:s>
                                    </a:s>
                                 </a:s>
                                 <a:s> </a:s>
                                 <a:s r="748">
                                    <a:s>where </a:s>
                                    <a:s r="748">
                                       <a:s r="750">
                                          <a:s r="749">
                                             <a:s>pa</a:s>
                                          </a:s>
                                          <a:s>.</a:s>
                                          <a:s r="750">
                                             <a:s>series</a:s>
                                          </a:s>
                                       </a:s>
                                       <a:s> = </a:s>
                                       <a:s r="751">
                                          <a:s>'Supplementary dose'</a:s>
                                       </a:s>
                                    </a:s>
                                 </a:s>
                              </a:s>
                              <a:s> )</a:s>
                           </a:s>
                        </a:s>
                     </a:s>
                  </a:s>
               </a:s>
            </a:s>
         </annotation>
         <expression localId="758" locator="162:3-163:73" xsi:type="Query">
            <source localId="740" locator="162:3-162:17" alias="I">
               <expression localId="741" locator="162:3-162:15" name="immunizations" xsi:type="OperandRef"/>
            </source>
            <where localId="743" locator="162:19-163:73" xsi:type="Exists">
               <operand localId="757" locator="163:11-163:73" xsi:type="Query">
                  <source localId="744" locator="163:13-163:32" alias="pa">
                     <expression localId="746" locator="163:13-163:29" path="protocolApplied" scope="I" xsi:type="Property"/>
                  </source>
                  <where localId="748" locator="163:34-163:71" xsi:type="Equal">
                     <signature localId="755" name="t:String" xsi:type="NamedTypeSpecifier"/>
                     <signature localId="756" name="t:String" xsi:type="NamedTypeSpecifier"/>
                     <operand localId="753" name="ToString" libraryName="FHIRHelpers" xsi:type="FunctionRef">
                        <signature localId="754" name="fhir:string" xsi:type="NamedTypeSpecifier"/>
                        <operand localId="750" locator="163:40-163:48" path="series" scope="pa" xsi:type="Property"/>
                     </operand>
                     <operand localId="751" locator="163:52-163:71" valueType="t:String" value="Supplementary dose" xsi:type="Literal"/>
                  </where>
               </operand>
            </where>
         </expression>
         <operand localId="737" name="immunizations">
            <operandTypeSpecifier localId="735" locator="161:58-161:75" xsi:type="ListTypeSpecifier">
               <elementType localId="736" locator="161:63-161:74" name="fhir:Immunization" xsi:type="NamedTypeSpecifier"/>
            </operandTypeSpecifier>
         </operand>
      </def>
      <def localId="759" locator="168:1-171:11" name="sortedIndex" context="Unfiltered" accessLevel="Public" fluent="true" xsi:type="FunctionDef">
         <annotation xsi:type="a:Annotation">
            <a:t name="description" value="Sorts a list and returns the requested index"/>
            <a:s r="759">
               <a:s>/**
 * @description: Sorts a list and returns the requested index
 */
define fluent function sortedIndex(immunizations List&lt;Immunization>, idx Integer):
  </a:s>
               <a:s r="768">
                  <a:s r="768">
                     <a:s>if </a:s>
                     <a:s r="769">
                        <a:s>exists</a:s>
                        <a:s r="770">
                           <a:s>( </a:s>
                           <a:s r="770">
                              <a:s>immunizations</a:s>
                           </a:s>
                           <a:s> )</a:s>
                        </a:s>
                     </a:s>
                     <a:s> then
    </a:s>
                     <a:s r="773">
                        <a:s r="787">
                           <a:s>(</a:s>
                           <a:s r="787">
                              <a:s>
                                 <a:s r="774">
                                    <a:s r="775">
                                       <a:s>
                                          <a:s>immunizations</a:s>
                                       </a:s>
                                    </a:s>
                                    <a:s> I</a:s>
                                 </a:s>
                              </a:s>
                              <a:s> </a:s>
                              <a:s r="781">
                                 <a:s>sort by </a:s>
                                 <a:s r="780">
                                    <a:s r="777">
                                       <a:s>start of </a:s>
                                       <a:s r="779">
                                          <a:s r="778">
                                             <a:s>occurrence</a:s>
                                          </a:s>
                                          <a:s>.</a:s>
                                          <a:s r="779">
                                             <a:s>toInterval()</a:s>
                                          </a:s>
                                       </a:s>
                                    </a:s>
                                 </a:s>
                              </a:s>
                           </a:s>
                           <a:s>)</a:s>
                        </a:s>
                        <a:s>[</a:s>
                        <a:s r="788">
                           <a:s>idx</a:s>
                        </a:s>
                        <a:s>]</a:s>
                     </a:s>
                     <a:s r="792">
  else null</a:s>
                  </a:s>
               </a:s>
            </a:s>
         </annotation>
         <expression localId="768" locator="169:3-171:11" xsi:type="If">
            <condition localId="769" locator="169:6-169:28" xsi:type="Exists">
               <signature localId="771" xsi:type="ListTypeSpecifier">
                  <elementType localId="772" name="fhir:Immunization" xsi:type="NamedTypeSpecifier"/>
               </signature>
               <operand localId="770" locator="169:12-169:28" name="immunizations" xsi:type="OperandRef"/>
            </condition>
            <then localId="773" locator="170:5-170:67" xsi:type="Indexer">
               <signature localId="789" xsi:type="ListTypeSpecifier">
                  <elementType localId="790" name="fhir:Immunization" xsi:type="NamedTypeSpecifier"/>
               </signature>
               <signature localId="791" name="t:Integer" xsi:type="NamedTypeSpecifier"/>
               <operand localId="787" locator="170:5-170:62" xsi:type="Query">
                  <source localId="774" locator="170:6-170:20" alias="I">
                     <expression localId="775" locator="170:6-170:18" name="immunizations" xsi:type="OperandRef"/>
                  </source>
                  <sort localId="781" locator="170:22-170:61">
                     <by localId="780" locator="170:30-170:61" direction="asc" xsi:type="ByExpression">
                        <expression localId="777" locator="170:30-170:61" xsi:type="Start">
                           <operand localId="779" locator="170:39-170:61" name="toInterval" libraryName="WC" xsi:type="FunctionRef">
                              <operand localId="778" locator="170:39-170:48" name="occurrence" xsi:type="IdentifierRef"/>
                           </operand>
                        </expression>
                     </by>
                  </sort>
               </operand>
               <operand localId="788" locator="170:64-170:66" name="idx" xsi:type="OperandRef"/>
            </then>
            <else localId="793" asType="fhir:Immunization" xsi:type="As">
               <operand localId="792" locator="171:8-171:11" xsi:type="Null"/>
            </else>
         </expression>
         <operand localId="762" name="immunizations">
            <operandTypeSpecifier localId="760" locator="168:50-168:67" xsi:type="ListTypeSpecifier">
               <elementType localId="761" locator="168:55-168:66" name="fhir:Immunization" xsi:type="NamedTypeSpecifier"/>
            </operandTypeSpecifier>
         </operand>
         <operand localId="764" name="idx">
            <operandTypeSpecifier localId="763" locator="168:74-168:80" name="t:Integer" xsi:type="NamedTypeSpecifier"/>
         </operand>
      </def>
   </statements>
</library>
