WHO Immunization Implementation Guide
0.2.0 - ci-build

WHO Immunization Implementation Guide, published by WHO. This guide is not an authorized publication; it is the continuous build for version 0.2.0 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/WorldHealthOrganization/smart-immunizations/ and changes regularly. See the Directory of published versions

Library: IMMZD18SPolioIPVLogic

Official URL: http://smart.who.int/immunizations/Library/IMMZD18SPolioIPVLogic Version: 0.2.0
Draft as of 2025-09-17 Computable Name: IMMZD18SPolioIPVLogic

This library defines decision support logic for the IMMZ.D18.S.Polio.IPV-only schedule table in the Immunization CPG

Title: IMMZD18SPolioIPVLogic
Id: IMMZD18SPolioIPVLogic
Version: 0.2.0
Url: IMMZD18SPolioIPVLogic
Status: draft
Type:

system: http://terminology.hl7.org/CodeSystem/library-type

code: logic-library

Date: 2025-09-17 23:03:28+0000
Publisher: WHO
Description:

This library defines decision support logic for the IMMZ.D18.S.Polio.IPV-only schedule table in the Immunization CPG

Related Artifacts:

Dependencies

Parameters:
NameTypeMinMaxIn/Out
Todaydate01In
PatientPatient01Out
First IPV dose from the primary series was administeredboolean01Out
IPV dose 1boolean01Out
IPV dose 1 Due Datedate01Out
IPV dose 1 Createstring01Out
IPV dose 1 OverdueResource01Out
IPV dose 1 ExpirationResource01Out
Second IPV dose from the primary series was administeredboolean01Out
IPV dose 2boolean01Out
IPV dose 2 Due Datedate01Out
IPV dose 2 Createstring01Out
IPV dose 2 OverdueResource01Out
IPV dose 2 ExpirationResource01Out
Third IPV dose from the primary series was administered. The primary series has been completedboolean01Out
IPV dose 3boolean01Out
IPV dose 3 Due Datedate01Out
IPV dose 3 Createstring01Out
IPV dose 3 OverdueResource01Out
IPV dose 3 ExpirationResource01Out
Booster IPV dose was administered. Polio immunization schedule has been completedboolean01Out
IPV boosterboolean01Out
IPV booster Due Datedate01Out
IPV booster Createstring01Out
IPV booster OverdueResource01Out
IPV booster ExpirationResource01Out
Test ValidationResource01Out
Content: text/cql

/*
 * Library: IMMZD18SPolioIPVLogic (IMMZ.D18.S.Polio.IPV-only schedule)
 * Schedule Table: Inactivated polio vaccine (IPV)-only schedule
 */
library IMMZD18SPolioIPVLogic

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

include WHOCommon called WC

include IMMZCommon called Common
include IMMZConcepts called Concepts

include IMMZEncounterElements called IE
include IMMZD2DTPolioEncounterElements called Encounter

parameter Today Date default Today()

context Patient


/*
@output: IPV dose 1
@description: Provision of IPV dose 1
@trigger: Child's birth
@triggerDate: "Date of birth"
*/
define "IPV dose 1":
  not "First IPV dose from the primary series was administered"

/*
@output: IPV dose 1 Create
@create: A primary 3-dose series of IPV administered beginning at 6 or 8 weeks of age, with a minimum 4 week-interval between doses, is recommended.
*/
define "IPV dose 1 Create":
  if "IPV dose 1" 
  then 'A primary 3-dose series of IPV administered beginning at 6 or 8 weeks of age, with a minimum 4 week-interval between doses, is recommended.' + '
Due Date: ' + ToString("IPV dose 1 Due Date")
  else ''

/*
@dynamicValue: IPV dose 1 Due Date
@pseudocode: "Date of birth" + 6 weeks
*/
define "IPV dose 1 Due Date":
  if "IPV dose 1" then Patient.birthDate + 6 weeks
  else null

/*
@dynamicValue: IPV dose 1 Overdue
@pseudocode: To be determined by Member States; however, there is no recommended overdue date and individuals are always eligible to be vaccinated.
*/
define "IPV dose 1 Overdue":
  null

/*
@dynamicValue: IPV dose 1 Expiration
@pseudocode: To be determined by Member States; however, there is no recommended overdue date and individuals are always eligible to be vaccinated.
*/
define "IPV dose 1 Expiration":
  null

/*
@complete: First IPV dose from the primary series was administered
@pseudocode: Count of vaccines administered (where "Vaccine type" = "Poliovirus-containing vaccines") = 1
*/
define "First IPV dose from the primary series was administered":
  Encounter."Number of Polio IPV Primary Series Doses Administered" >= 1


/*
@output: IPV dose 2
@description: Provision of IPV dose 2
@trigger: First IPV dose from the primary series was administered
Count of vaccines administered (where "Vaccine type" = "Poliovirus-containing vaccines") = 1
@triggerDate: Latest "Date and time of vaccination" (where "Vaccine type" = "Poliovirus-containing vaccines")
*/
define "IPV dose 2":
  "First IPV dose from the primary series was administered" and not "Second IPV dose from the primary series was administered"

/*
@output: IPV dose 2 Create
@create: A primary 3-dose series of IPV administered beginning at 6 or 8 weeks of age, with a minimum 4 week-interval between doses, is recommended.
*/
define "IPV dose 2 Create":
  if "IPV dose 2" 
  then 'A primary 3-dose series of IPV administered beginning at 6 or 8 weeks of age, with a minimum 4 week-interval between doses, is recommended.' + '
Due Date: ' + ToString("IPV dose 2 Due Date")
  else ''

/*
@dynamicValue: IPV dose 2 Due Date
@pseudocode: Latest "Date and time of vaccination" (where "Type of poliovirus dose" = "IPV") + 4 weeks
*/
define "IPV dose 2 Due Date":
  if "IPV dose 2" then Encounter."Date of Latest IPV Dose" + 4 weeks
  else null

/*
@dynamicValue: IPV dose 2 Overdue
@pseudocode: To be determined by Member States; however, there is no recommended overdue date and individuals are always eligible to be vaccinated.
*/
define "IPV dose 2 Overdue":
  null

/*
@dynamicValue: IPV dose 2 Expiration
@pseudocode: To be determined by Member States; however, there is no recommended overdue date and individuals are always eligible to be vaccinated.
*/
define "IPV dose 2 Expiration":
  null

/*
@complete: Second IPV dose from the primary series was administered
@pseudocode: Count of vaccines administered (where "Vaccine type" = "Poliovirus-containing vaccines") = 2
*/
define "Second IPV dose from the primary series was administered":
  Encounter."Number of Polio IPV Primary Series Doses Administered" >= 2

/*
@output: IPV dose 3
@description: Provision of IPV dose 3
@trigger: Second IPV dose from the primary series was administered
Count of vaccines administered (where "Vaccine type" = "Poliovirus-containing vaccines") = 2
@triggerDate: Latest "Date and time of vaccination" (where "Vaccine type" = "Poliovirus-containing vaccines")
*/
define "IPV dose 3":
  "Second IPV dose from the primary series was administered" and not "Third IPV dose from the primary series was administered. The primary series has been completed"

/*
@output: IPV dose 3 Create
@create: A primary 3-dose series of IPV administered beginning at 6 or 8 weeks of age, with a minimum 4 week-interval between doses, is recommended.
*/
define "IPV dose 3 Create":
  if "IPV dose 3" 
  then 'A primary 3-dose series of IPV administered beginning at 6 or 8 weeks of age, with a minimum 4 week-interval between doses, is recommended.' + '
Due Date: ' + ToString("IPV dose 3 Due Date")
  else ''

/*
@dynamicValue: IPV dose 3 Due Date
@pseudocode: Latest "Date and time of vaccination" (where "Type of poliovirus dose" = "IPV") + 4 weeks
*/
define "IPV dose 3 Due Date":
  if "IPV dose 2" then Encounter."Date of Latest IPV Dose" + 4 weeks
  else null

/*
@dynamicValue: IPV dose 3 Overdue
@pseudocode: To be determined by Member States; however, there is no recommended overdue date and individuals are always eligible to be vaccinated.
*/
define "IPV dose 3 Overdue":
  null

/*
@dynamicValue: IPV dose 3 Expiration
@pseudocode: To be determined by Member States; however, there is no recommended overdue date and individuals are always eligible to be vaccinated.
*/
define "IPV dose 3 Expiration":
  null

/*
@complete: Third IPV dose from the primary series was administered. The primary series has been completed
@pseudocode: "Completed the primary vaccination series" = TRUE (where "Vaccine type" = "Poliovirus-containing vaccines")
*/
define "Third IPV dose from the primary series was administered. The primary series has been completed":
  Encounter."Number of Polio IPV Primary Series Doses Administered" >= 3

/*
@output: IPV booster
@description: Provision of IPV booster
@trigger: Third IPV dose from the primary series was administered and the client's age was 6 weeks when the primary series was started
Count of vaccines administered (where "Vaccine type" = "Poliovirus-containing vaccines") = 3 AND "Date and time of vaccination" (where "Vaccine type" = "Poliovirus-containing vaccines" AND "Dose number" = 1) − "Date of birth" = 6 weeks
@triggerDate: Latest "Date and time of vaccination" (where "Vaccine type" = "Poliovirus-containing vaccines")
*/
define "IPV booster":
  "Third IPV dose from the primary series was administered. The primary series has been completed" and not "Booster IPV dose was administered. Polio immunization schedule has been completed"

/*
@output: IPV booster Create
@create: If the primary series begins at 6 weeks, a booster dose should be given 6 months or more after the third dose
*/
define "IPV booster Create":
  if "IPV booster" 
  then 'If the primary series begins at 6 weeks, a booster dose should be given 6 months or more after the third dose' + '
Due Date: ' + ToString("IPV booster Due Date")
  else ''

/*
@dynamicValue: IPV booster Due Date
@pseudocode: Latest "Date and time of vaccination" (where "Vaccine type" = "Poliovirus-containing vaccines") + 6 months
*/
define "IPV booster Due Date":
  if "IPV dose 2" then Encounter."Date of Latest Polio Dose" + 6 months
  else null

/*
@dynamicValue: IPV booster Overdue
@pseudocode: To be determined by Member States; however, there is no recommended overdue date and individuals are always eligible to be vaccinated.
*/
define "IPV booster Overdue":
  null

/*
@dynamicValue: IPV booster Expiration
@pseudocode: To be determined by Member States; however, there is no recommended overdue date and individuals are always eligible to be vaccinated.
*/
define "IPV booster Expiration":
  null

/*
@complete: Booster IPV dose was administered. Polio immunization schedule has been completed
@pseudocode: Count of vaccines administered (where "Type of poliovirus dose" = "IPV" and "Type of dose" = "Booster dose") = 1
*/
define "Booster IPV dose was administered. Polio immunization schedule has been completed":
  Encounter."Number of Polio Booster Series Doses Administered" >= 1

/*
@test: Test expected results based on example patients
*/
define "Test Validation":
  case
    when Patient.id = '71.Alt6w' then "IPV dose 1"
    when Patient.id = '72.Agt6w' then "IPV dose 1"
    when Patient.id = '73.D1PDlt4w' then "IPV dose 2"
    when Patient.id = '74.D1PDgt4w' then "IPV dose 2"
    when Patient.id = '75.D2PDlt4w' then "IPV dose 3"
    when Patient.id = '76.D2PDgt4w' then "IPV dose 3"
    when Patient.id = '77.D3FDAgt6w' then "IPV booster"
    when Patient.id = '78.D3FDA6wPDlt6m' then "IPV booster"
    when Patient.id = '79.D3FDA6wPDgt6mBF' then "IPV booster"
    when Patient.id = '80.D3FDA6wPDgt6mBT' then "Booster IPV dose was administered. Polio immunization schedule has been completed"
    else 'No test case set'
  end
Content: application/elm+xml
Encoded data (100060 characters)