<?xml version='1.0' encoding='UTF-8'?>
<Library xmlns="http://hl7.org/fhir" xmlns:html="http://www.w3.org/1999/xhtml">
  <id value="IMMZD2DTRubellaHighIncidenceLogic" />
  <meta>
    <profile value="http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-shareablelibrary" />
    <profile value="http://hl7.org/fhir/uv/crmi/StructureDefinition/crmi-publishablelibrary" />
    <profile value="http://hl7.org/fhir/uv/cql/StructureDefinition/cql-library" />
    <profile value="http://hl7.org/fhir/uv/cql/StructureDefinition/cql-module" />
  </meta>
  <text>
    <status value="extensions" /><html:div>
<html:div>
    <html:table class="grid dict">
        
        
        <html:tr>
            <html:th scope="row"><html:b>Title: </html:b></html:th>
            <html:td style="padding-left: 4px;">IMMZD2DTRubellaHighIncidenceLogic</html:td>
        </html:tr>
        

        
        
        <html:tr>
            <html:th scope="row"><html:b>Id: </html:b></html:th>
            <html:td style="padding-left: 4px;">IMMZD2DTRubellaHighIncidenceLogic</html:td>
        </html:tr>
        

        
        
        <html:tr>
            <html:th scope="row"><html:b>Version: </html:b></html:th>
            <html:td style="padding-left: 4px;">0.2.0</html:td>
        </html:tr>
        

        
        <html:tr>
            <html:th scope="row"><html:b>Url: </html:b></html:th>
            <html:td style="padding-left: 4px;"><html:a href="Library-IMMZD2DTRubellaHighIncidenceLogic.html">IMMZD2DTRubellaHighIncidenceLogic</html:a></html:td>
        </html:tr>
        

        

        

        
        <html:tr>
            <html:th scope="row"><html:b>Status: </html:b></html:th>
            <html:td style="padding-left: 4px;">draft</html:td>
        </html:tr>
        

        

        
        <html:tr>
            <html:th scope="row"><html:b>Type: </html:b></html:th>
            <html:td style="padding-left: 4px;">
                
                    
                        
                        <html:p style="margin-bottom: 5px;">
                            <html:b>system: </html:b> <html:span><html:a href="http://terminology.hl7.org/7.1.0/CodeSystem-library-type.html">http://terminology.hl7.org/CodeSystem/library-type</html:a></html:span>
                        </html:p>
                        
                        
                        <html:p style="margin-bottom: 5px;">
                            <html:b>code: </html:b> <html:span>logic-library</html:span>
                        </html:p>
                        
                        
                    
                
                
            </html:td>
        </html:tr>
        

        

        
        <html:tr>
            <html:th scope="row"><html:b>Date: </html:b></html:th>
            <html:td style="padding-left: 4px;">2026-03-29 17:23:09+0000</html:td>
        </html:tr>
        

        
        <html:tr>
            <html:th scope="row"><html:b>Publisher: </html:b></html:th>
            <html:td style="padding-left: 4px;">WHO</html:td>
        </html:tr>
        

        
        <html:tr>
            <html:th scope="row"><html:b>Description: </html:b></html:th>
            <html:td style="padding-left: 4px;"><html:div><html:p>This library defines decision support logic for the IMMZ.D2.DT.Rubella.High incidence decision table in the Immunization CPG</html:p>
</html:div></html:td>
        </html:tr>
        

        

        

        

        

        

        

        

        

        

        

        
        <html:tr>
            <html:th scope="row"><html:b>Related Artifacts: </html:b></html:th>
            <html:td style="padding-left: 4px;">
                
                
                
                <html:p><html:b>Dependencies</html:b></html:p>
                <html:ul>
                  
                    <html:li><html:a href="Library-IMMZD2DTRubellaEncounterElements.html">IMMZD2DTRubellaEncounterElements</html:a></html:li>
                  
                </html:ul>
                
                
                
                
                
            </html:td>
        </html:tr>
        

        
        <html:tr>
          <html:th scope="row"><html:b>Parameters: </html:b></html:th>
          <html:td style="padding-left: 4px;">
            <html:table class="grid-dict">
              <html:tr><html:th><html:b>Name</html:b></html:th><html:th><html:b>Type</html:b></html:th><html:th><html:b>Min</html:b></html:th><html:th><html:b>Max</html:b></html:th><html:th><html:b>In/Out</html:b></html:th></html:tr>
              
                <html:tr><html:th>Today</html:th><html:th>date</html:th><html:th>0</html:th><html:th>1</html:th><html:th>In</html:th></html:tr>
              
                <html:tr><html:th>Patient</html:th><html:th>Patient</html:th><html:th>0</html:th><html:th>1</html:th><html:th>Out</html:th></html:tr>
              
                <html:tr><html:th>Client is not due for rubella vaccination Case 1</html:th><html:th>boolean</html:th><html:th>0</html:th><html:th>1</html:th><html:th>Out</html:th></html:tr>
              
                <html:tr><html:th>Client is not due for rubella vaccination Case 2</html:th><html:th>boolean</html:th><html:th>0</html:th><html:th>1</html:th><html:th>Out</html:th></html:tr>
              
                <html:tr><html:th>Client is not due for rubella vaccination</html:th><html:th>boolean</html:th><html:th>0</html:th><html:th>1</html:th><html:th>Out</html:th></html:tr>
              
                <html:tr><html:th>Client is not due for rubella vaccination Guidance</html:th><html:th>string</html:th><html:th>0</html:th><html:th>1</html:th><html:th>Out</html:th></html:tr>
              
                <html:tr><html:th>Client is due for rubella vaccination</html:th><html:th>boolean</html:th><html:th>0</html:th><html:th>1</html:th><html:th>Out</html:th></html:tr>
              
                <html:tr><html:th>Client is due for rubella vaccination Guidance</html:th><html:th>string</html:th><html:th>0</html:th><html:th>1</html:th><html:th>Out</html:th></html:tr>
              
                <html:tr><html:th>Rubella immunization schedule is complete</html:th><html:th>boolean</html:th><html:th>0</html:th><html:th>1</html:th><html:th>Out</html:th></html:tr>
              
                <html:tr><html:th>Rubella immunization schedule is complete Guidance</html:th><html:th>string</html:th><html:th>0</html:th><html:th>1</html:th><html:th>Out</html:th></html:tr>
              
                <html:tr><html:th>Guidance</html:th><html:th>string</html:th><html:th>0</html:th><html:th>1</html:th><html:th>Out</html:th></html:tr>
              
                <html:tr><html:th>Has Guidance</html:th><html:th>boolean</html:th><html:th>0</html:th><html:th>1</html:th><html:th>Out</html:th></html:tr>
              
                <html:tr><html:th>Test Validation</html:th><html:th>Resource</html:th><html:th>0</html:th><html:th>1</html:th><html:th>Out</html:th></html:tr>
              
            </html:table>
          </html:td>
        </html:tr>
        

        

        
        
        <html:tr>
          <html:td colspan="2">
            <html:table>
              <html:tr><html:th><html:a id="cql-content"><html:b>Content: </html:b></html:a> text/cql</html:th></html:tr>
              <html:tr><html:td><html:pre><html:code class="language-cql">/*
 * Library: IMMZD2DTRubellaHighIncidenceLogic (IMMZ.D2.DT.Rubella.High incidence)
 * Rule: Determine if the client is due for a rubella vaccination according to the national immunization schedule
 * Decision Table: Countries with high incidence and mortality from rubella
 * Trigger: IMMZ.D2 Determine required vaccination(s) if any
 */
library IMMZD2DTRubellaHighIncidenceLogic

using FHIR version '4.0.1'
include FHIRHelpers version '4.0.1'

include IMMZD2DTRubellaEncounterElements called Encounter

parameter Today Date default Today()

context Patient


/*
@dynamicValue: Guidance
*/
define "Guidance":
  case 
    when "Client is not due for rubella vaccination" then "Client is not due for rubella vaccination Guidance"
    when "Client is due for rubella vaccination" then "Client is due for rubella vaccination Guidance"
    when "Rubella immunization schedule is complete" then "Rubella immunization schedule is complete Guidance" 
    else ''
  end
  
define "Has Guidance":
  "Guidance" is not null and "Guidance" != ''

/*
@output: Client is not due for rubella vaccination Case 1
@pseudocode: "Immunization recommendation status" = "Not due"
*/
define "Client is not due for rubella vaccination Case 1":
  Encounter."Client's age is less than 9 months"

/*
@output: Client is not due for rubella vaccination Case 2
@pseudocode: "Immunization recommendation status" = "Not due"
*/
define "Client is not due for rubella vaccination Case 2":
  Encounter."No rubella primary series dose was administered"
    and Encounter."Client's age is more than or equal to 9 months"
    and Encounter."Live vaccine was administered in the last 4 weeks"

/*
@output: Client is not due for rubella vaccination
@pseudocode: "Immunization recommendation status" = "Not due"
*/
define "Client is not due for rubella vaccination":
  "Client is not due for rubella vaccination Case 1"
    or "Client is not due for rubella vaccination Case 2"

/*
@output: Client is not due for rubella vaccination Guidance
@guidance = Should not vaccinate client with rubella dose as client's age is less than 9 months.
Check for any vaccines due and inform the caregiver of when to come back for the first dose.
@guidance = Should not vaccinate client with rubella dose as live vaccine was administered in the last 4 weeks.
Check for any other vaccines due.
*/
define "Client is not due for rubella vaccination Guidance":
  case
    when "Client is not due for rubella vaccination Case 1" then 'Should not vaccinate client with rubella dose as client\'s age is less than 9 months.
Check for any vaccines due and inform the caregiver of when to come back for the first dose.'
    when "Client is not due for rubella vaccination Case 2" then 'Should not vaccinate client with rubella dose as live vaccine was administered in the last 4 weeks.
Check for any other vaccines due.'
    else ''
  end

/*
@output: Client is due for rubella vaccination
@pseudocode: "Immunization recommendation status" = "Due"
*/
define "Client is due for rubella vaccination":
  Encounter."No rubella primary series dose was administered"
    and Encounter."Client's age is more than or equal to 9 months"
    and Encounter."No live vaccine was administered in the last 4 weeks"

/*
@output: Client is due for rubella vaccination Guidance
@guidance: Should vaccinate client with rubella dose as no rubella doses were administered, client is within the appropriate age range and no live vaccine was administered in the last 4 weeks.
Check for contraindications.
*/
define "Client is due for rubella vaccination Guidance":
  'Should vaccinate client with rubella dose as no rubella doses were administered, client is within the appropriate age range and no live vaccine was administered in the last 4 weeks.
Check for contraindications.'

/*
@output: Rubella immunization schedule is complete
@pseudocode: "Immunization recommendation status" = "Complete"
"Completed the primary vaccination series" = TRUE (where "Vaccine type" = "Rubella-containing vaccines")
*/
define "Rubella immunization schedule is complete":
  Encounter."One rubella primary series dose was administered"

/*
@output: Rubella immunization schedule is complete Guidance
@guidance: Rubella immunization schedule is complete. One rubella primary series dose was administered.
Check for any other vaccines due.
*/
define "Rubella immunization schedule is complete Guidance":
  'Rubella immunization schedule is complete. One rubella primary series dose was administered.
Check for any other vaccines due.'


/*
@test: Test expected results based on example patients
*/
define "Test Validation":
  case
    when Patient.id = 'Rubella08.1' then "Client is not due for rubella vaccination Case 1" and "Guidance" = 'Should not vaccinate client with rubella dose as client\'s age is less than 9 months.
Check for any vaccines due and inform the caregiver of when to come back for the first dose.'
    when Patient.id = 'Rubella09.3' then "Client is due for rubella vaccination" and "Guidance" = 'Should vaccinate client with rubella dose as no rubella doses were administered, client is within the appropriate age range and no live vaccine was administered in the last 4 weeks.
Check for contraindications.'
    when Patient.id = 'Rubella10.3' then "Client is not due for rubella vaccination Case 2" and "Guidance" = 'Should not vaccinate client with rubella dose as live vaccine was administered in the last 4 weeks.
Check for any other vaccines due.'
    when Patient.id = 'Rubella11.1' then "Rubella immunization schedule is complete" and "Guidance" = 'Rubella immunization schedule is complete. One rubella primary series dose was administered.
Check for any other vaccines due.'
    else 'No test case set'
  end
</html:code></html:pre></html:td></html:tr>
            </html:table>
          </html:td>
        </html:tr>
        
        
        
        
        
        <html:tr>
          <html:td colspan="2">
            <html:table>
              <html:tr><html:th><html:b>Content: </html:b> application/elm+xml</html:th></html:tr>
              <html:tr><html:td><html:pre><html:code>Encoded data (55876 characters)</html:code></html:pre></html:td></html:tr>
            </html:table>
          </html:td>
        </html:tr>
        
        
    </html:table>
</html:div>
</html:div>
  </text>
  <extension url="http://hl7.org/fhir/StructureDefinition/cqf-knowledgeCapability">
    <valueCode value="computable" />
  </extension>
  <url value="http://smart.who.int/immunizations/Library/IMMZD2DTRubellaHighIncidenceLogic" />
  <version value="0.2.0" />
  <name value="IMMZD2DTRubellaHighIncidenceLogic" />
  <title value="IMMZD2DTRubellaHighIncidenceLogic" />
  <status value="draft" />
  <experimental value="false" />
  <type>
    <coding>
      <system value="http://terminology.hl7.org/CodeSystem/library-type" />
      <code value="logic-library" />
    </coding>
  </type>
  <date value="2026-03-29T17:23:09+00:00" />
  <publisher value="WHO" />
  <contact>
    <name value="WHO" />
    <telecom>
      <system value="url" />
      <value value="http://who.int" />
    </telecom>
  </contact>
  <description value="This library defines decision support logic for the IMMZ.D2.DT.Rubella.High incidence decision table in the Immunization CPG" />
  <relatedArtifact>
    <type value="depends-on" />
    <display value="Library Encounter" />
    <resource value="http://smart.who.int/immunizations/Library/IMMZD2DTRubellaEncounterElements" />
  </relatedArtifact>
  <parameter>
    <name value="Today" />
    <use value="in" />
    <min value="0" />
    <max value="1" />
    <type value="date" />
  </parameter>
  <parameter>
    <name value="Patient" />
    <use value="out" />
    <min value="0" />
    <max value="1" />
    <type value="Patient" />
  </parameter>
  <parameter>
    <name value="Client is not due for rubella vaccination Case 1" />
    <use value="out" />
    <min value="0" />
    <max value="1" />
    <type value="boolean" />
  </parameter>
  <parameter>
    <name value="Client is not due for rubella vaccination Case 2" />
    <use value="out" />
    <min value="0" />
    <max value="1" />
    <type value="boolean" />
  </parameter>
  <parameter>
    <name value="Client is not due for rubella vaccination" />
    <use value="out" />
    <min value="0" />
    <max value="1" />
    <type value="boolean" />
  </parameter>
  <parameter>
    <name value="Client is not due for rubella vaccination Guidance" />
    <use value="out" />
    <min value="0" />
    <max value="1" />
    <type value="string" />
  </parameter>
  <parameter>
    <name value="Client is due for rubella vaccination" />
    <use value="out" />
    <min value="0" />
    <max value="1" />
    <type value="boolean" />
  </parameter>
  <parameter>
    <name value="Client is due for rubella vaccination Guidance" />
    <use value="out" />
    <min value="0" />
    <max value="1" />
    <type value="string" />
  </parameter>
  <parameter>
    <name value="Rubella immunization schedule is complete" />
    <use value="out" />
    <min value="0" />
    <max value="1" />
    <type value="boolean" />
  </parameter>
  <parameter>
    <name value="Rubella immunization schedule is complete Guidance" />
    <use value="out" />
    <min value="0" />
    <max value="1" />
    <type value="string" />
  </parameter>
  <parameter>
    <name value="Guidance" />
    <use value="out" />
    <min value="0" />
    <max value="1" />
    <type value="string" />
  </parameter>
  <parameter>
    <name value="Has Guidance" />
    <use value="out" />
    <min value="0" />
    <max value="1" />
    <type value="boolean" />
  </parameter>
  <parameter>
    <name value="Test Validation" />
    <use value="out" />
    <min value="0" />
    <max value="1" />
    <type value="Resource" />
  </parameter>
  <content>
    <contentType value="text/cql" />
    <url value="Library-IMMZD2DTRubellaHighIncidenceLogic.cql" /></content>
  <content>
    <contentType value="application/elm+xml" />
    <url value="Library-IMMZD2DTRubellaHighIncidenceLogic.elm.xml" /></content>
</Library>