Id: IMMZD18SPolioBOPVPlusIPV Url: IMMZ.D18.S.Polio.bOPV plus IPV schedule Version: 0.2.0 Title: IMMZ.D18.S.Polio.bOPV plus IPV schedule Status: draft Type: system: http://terminology.hl7.org/CodeSystem/plan-definition-type code: eca-rule Date: 2026-03-29 17:23:09+0000 Publisher: WHO Description: IMMZ.D18.S.Polio.bOPV plus IPV schedule Bivalent oral polio vaccine (bOPV) plus inactivated polio vaccine (IPV) schedule Knowledge Capability: computable Related Artifacts: References WHO recommendations for routine immunization - summary tables (January 2025) Libraries: IMMZD18SPolioBOPVPlusIPVLogic Actions: bOPV dose 1: Provision of bOPV dose 1 Trigger event: Child's birth Trigger pseudo: Trigger date: "Date of birth" Create condition: The preferred schedule is to administer the 3 doses of bOPV starting from the minimum age of 6 weeks, with at least a 4 week-interval between doses. If: Applicability: bOPV dose 1 (bOPV dose 1) Then: Definition: IMMZ.D2.DT.CR Dynamic Values: status: ('active') payload.contentString: (bOPV dose 1 Create) category.coding: (Code { system: 'http://terminology.hl7.org/CodeSystem/communication-category', code: 'alert' }) priority: (Code { system: 'http://hl7.org/fhir/request-priority', code: 'routine' }) IPV dose 1: Provision of IPV dose 1 Trigger event: Child's birth Trigger pseudo: Trigger date: "Date of birth" Create condition: The first IPV dose should be administered from a minimum of 14 weeks of age. If: Applicability: IPV dose 1 (IPV dose 1) Then: Definition: IMMZ.D2.DT.CR Dynamic Values: status: ('active') payload.contentString: (IPV dose 1 Create) category.coding: (Code { system: 'http://terminology.hl7.org/CodeSystem/communication-category', code: 'alert' }) priority: (Code { system: 'http://hl7.org/fhir/request-priority', code: 'routine' }) bOPV dose 2: Provision of bOPV dose 2 Trigger event: First bOPV dose from the primary series was administered Trigger pseudo: Count of vaccines administered (where "Type of dose" = "Primary series" and "Type of poliovirus dose" = "bOPV") = 1 Trigger date: Latest "Date and time of vaccination" (where "Type of poliovirus dose" = "bOPV") Create condition: The preferred schedule is to administer the 3 doses of bOPV starting from the minimum age of 6 weeks, with at least a 4 week-interval between doses. If: Applicability: bOPV dose 2 (bOPV dose 2) Then: Definition: IMMZ.D2.DT.CR Dynamic Values: status: ('active') payload.contentString: (bOPV dose 2 Create) category.coding: (Code { system: 'http://terminology.hl7.org/CodeSystem/communication-category', code: 'alert' }) priority: (Code { system: 'http://hl7.org/fhir/request-priority', code: 'routine' }) IPV dose 2: Provision of IPV dose 2 Trigger event: First IPV dose from the primary series was administered Trigger pseudo: Count of vaccines administered (where "Type of poliovirus dose" = "IPV") = 1 Trigger date: Latest "Date and time of vaccination" (where "Type of poliovirus dose" = "IPV") Create condition: The first IPV dose should be administered from a minimum of 14 weeks of age (with the third dose of the diphtheria–tetanus–pertussis vaccine [DTP3] or pentavalent vaccine [penta3]), with the second IPV dose being given at least 4 months later (possibly coinciding with other vaccines administered at 9 months of age). If: Applicability: IPV dose 2 (IPV dose 2) Then: Definition: IMMZ.D2.DT.CR Dynamic Values: status: ('active') payload.contentString: (IPV dose 2 Create) category.coding: (Code { system: 'http://terminology.hl7.org/CodeSystem/communication-category', code: 'alert' }) priority: (Code { system: 'http://hl7.org/fhir/request-priority', code: 'routine' }) bOPV dose 3: Provision of bOPV dose 3 Trigger event: Second bOPV dose from the primary series was administered Trigger pseudo: Count of vaccines administered (where "Type of dose" = "Primary series" and "Type of poliovirus dose" = "bOPV") = 2 Trigger date: Latest "Date and time of vaccination" (where "Type of poliovirus dose" = "bOPV") Create condition: The preferred schedule is to administer the 3 doses of bOPV starting from the minimum age of 6 weeks, with at least a 4 week-interval between doses. If: Applicability: bOPV dose 3 (bOPV dose 3) Then: Definition: IMMZ.D2.DT.CR Dynamic Values: status: ('active') payload.contentString: (bOPV dose 3 Create) category.coding: (Code { system: 'http://terminology.hl7.org/CodeSystem/communication-category', code: 'alert' }) priority: (Code { system: 'http://hl7.org/fhir/request-priority', code: 'routine' })
/** * @dataElement All Doses Administered to Patient */ define "Doses Administered to Patient": [Immunization] I where I.status = 'completed' and I.isSubpotent is not true
/* @internal: Polio containing Doses Administered to Patient */ define "Polio Doses Administered to Patient": Elements."Doses Administered to Patient" I where I.vaccineCode in Concepts."Poliovirus-containing vaccines"
Polio Primary Series Doses Administered to Patient
/* @internal: Polio containing Doses Administered to Patient that are in the Primary series */ define "Polio Primary Series Doses Administered to Patient": "Polio Doses Administered to Patient".seriesPrimary()
/* @internal: Polio containing Doses Administered to Patient that are in the Primary series */ define "Polio Primary Series Doses Administered to Patient": PolioElements."Polio Primary Series Doses Administered to Patient".onOrBefore(Today)
Polio bOPV Primary Series Doses Administered to Patient
/* @internal: Polio bOPV Primary Series Doses Administered to Patient */ define "Polio bOPV Primary Series Doses Administered to Patient": "Polio Primary Series Doses Administered to Patient" I where I.typeOfDose() ~ Concepts."bOPV"
Number of Polio bOPV Primary Series Doses Administered
/* @internal: Number of Polio bOPV Primary Series Doses Administered */ define "Number of Polio bOPV Primary Series Doses Administered": Count("Polio bOPV Primary Series Doses Administered to Patient")
First bOPV dose from the primary series was administered
/* @complete: First bOPV dose from the primary series was administered @pseudocode: Count of vaccines administered (where "Type of dose" = "Primary series" and "Type of poliovirus dose" = "bOPV") = 1 */ define "First bOPV dose from the primary series was administered": Encounter."Number of Polio bOPV Primary Series Doses Administered" >= 1
Second bOPV dose from the primary series was administered
/* @complete: Second bOPV dose from the primary series was administered @pseudocode: Count of vaccines administered (where "Type of dose" = "Primary series" and "Type of poliovirus dose" = "bOPV") = 2 */ define "Second bOPV dose from the primary series was administered": Encounter."Number of Polio bOPV Primary Series Doses Administered" >= 2
/* @output: bOPV dose 2 @description: Provision of bOPV dose 2 @trigger: First bOPV dose from the primary series was administered @pseudo: Count of vaccines administered (where "Type of dose" = "Primary series" and "Type of poliovirus dose" = "bOPV") = 1 @triggerDate: Latest "Date and time of vaccination" (where "Type of poliovirus dose" = "bOPV") */ define "bOPV dose 2": "First bOPV dose from the primary series was administered" and not "Second bOPV dose from the primary series was administered"
Third bOPV dose from the primary series was administered. The primary series has been completed
/* @complete: Third bOPV 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 bOPV dose from the primary series was administered. The primary series has been completed": Encounter."Number of Polio bOPV Primary Series Doses Administered" >= 3
/* @output: bOPV dose 3 @description: Provision of bOPV dose 3 @trigger: Second bOPV dose from the primary series was administered @pseudo: Count of vaccines administered (where "Type of dose" = "Primary series" and "Type of poliovirus dose" = "bOPV") = 2 @triggerDate: Latest "Date and time of vaccination" (where "Type of poliovirus dose" = "bOPV") */ define "bOPV dose 3": "Second bOPV dose from the primary series was administered" and not "Third bOPV dose from the primary series was administered. The primary series has been completed"
/* @internal: Polio containing Doses Administered to Patient */ define "Polio Doses Administered to Patient": PolioElements."Polio Doses Administered to Patient".onOrBefore(Today)
/* @internal: bOPV Doses Administered to Patient */ define "bOPV Doses Administered to Patient": "Polio Doses Administered to Patient" I where I.typeOfDose() ~ Concepts."bOPV"
/* @internal: Date of Latest bOPV Dose */ define "Date of Latest bOPV Dose": date from start of "bOPV Doses Administered to Patient".mostRecent().occurrence.toInterval()
/* @dynamicValue: bOPV dose 3 Due Date @pseudocode: Latest "Date and time of vaccination" (where "Type of poliovirus dose" = "bOPV") + 4 weeks */ define "bOPV dose 3 Due Date": if "bOPV dose 3" then Encounter."Date of Latest bOPV Dose" + 4 weeks else null
/* @output: bOPV dose 3 Create @create: The preferred schedule is to administer the 3 doses of bOPV starting from the minimum age of 6 weeks, with at least a 4 week-interval between doses. */ define "bOPV dose 3 Create": if "bOPV dose 3" then 'The preferred schedule is to administer the 3 doses of bOPV starting from the minimum age of 6 weeks, with at least a 4 week-interval between doses.' + ' Due Date: ' + ToString("bOPV dose 3 Due Date") else ''
Polio IPV Primary Series Doses Administered to Patient
/* @internal: Polio IPV Primary Series Doses Administered to Patient */ define "Polio IPV Primary Series Doses Administered to Patient": "Polio Primary Series Doses Administered to Patient" I where I.typeOfDose() ~ Concepts."IPV"
Number of Polio IPV Primary Series Doses Administered
/* @internal: Number of Polio IPV Primary Series Doses Administered */ define "Number of Polio IPV Primary Series Doses Administered": Count("Polio IPV Primary Series Doses Administered to Patient")
First IPV dose from the primary series was administered
/* @complete: First IPV dose from the primary series was administered @pseudocode: Count of vaccines administered (where "Type of poliovirus dose" = "IPV") = 1 */ define "First IPV dose from the primary series was administered": Encounter."Number of Polio IPV Primary Series Doses Administered" >= 1
/* @output: IPV dose 1 @description: Provision of IPV dose 1 @trigger: Child's birth @pseudo: @triggerDate: "Date of birth" */ define "IPV dose 1": not "First IPV dose from the primary series was administered"
/* @dynamicValue: IPV dose 1 Due Date @pseudocode: "Date of birth" + 14 weeks */ define "IPV dose 1 Due Date": if "IPV dose 1" then Patient.birthDate + 14 weeks else null
/* @output: IPV dose 1 Create @create: The first IPV dose should be administered from a minimum of 14 weeks of age. */ define "IPV dose 1 Create": if "IPV dose 1" then 'The first IPV dose should be administered from a minimum of 14 weeks of age.' + ' Due Date: ' + ToString("IPV dose 1 Due Date") else ''
Second IPV dose from the primary series was administered
/* @complete: Second IPV dose from the primary series was administered @pseudocode: Count of vaccines administered (where "Type of poliovirus dose" = "IPV") = 2 */ define "Second IPV dose from the primary series was administered": Encounter."Number of Polio IPV Primary Series Doses Administered" >= 2
/* @output: IPV dose 2 @description: Provision of IPV dose 2 @trigger: First IPV dose from the primary series was administered @pseudo: Count of vaccines administered (where "Type of poliovirus dose" = "IPV") = 1 @triggerDate: Latest "Date and time of vaccination" (where "Type of poliovirus dose" = "IPV") */ define "IPV dose 2": "First IPV dose from the primary series was administered" and not "Second IPV dose from the primary series was administered"
/* @internal: IPV Doses Administered to Patient */ define "IPV Doses Administered to Patient": "Polio Doses Administered to Patient" I where I.typeOfDose() ~ Concepts."IPV"
/* @internal: Date of Latest IPV Dose */ define "Date of Latest IPV Dose": date from start of "IPV Doses Administered to Patient".mostRecent().occurrence.toInterval()
/* @dynamicValue: IPV dose 2 Due Date @pseudocode: Latest "Date and time of vaccination" (where "Type of poliovirus dose" = "IPV") + 4 months */ define "IPV dose 2 Due Date": if "IPV dose 2" then Encounter."Date of Latest IPV Dose" + 4 months else null
/* @output: IPV dose 2 Create @create: The first IPV dose should be administered from a minimum of 14 weeks of age (with the third dose of the diphtheria–tetanus–pertussis vaccine [DTP3] or pentavalent vaccine [penta3]), with the second IPV dose being given at least 4 months later (possibly coinciding with other vaccines administered at 9 months of age). */ define "IPV dose 2 Create": if "IPV dose 2" then 'The first IPV dose should be administered from a minimum of 14 weeks of age (with the third dose of the diphtheria–tetanus–pertussis vaccine [DTP3] or pentavalent vaccine [penta3]), with the second IPV dose being given at least 4 months later (possibly coinciding with other vaccines administered at 9 months of age).' + ' Due Date: ' + ToString("IPV dose 2 Due Date") else ''
/* @output: bOPV dose 1 @description: Provision of bOPV dose 1 @trigger: Child's birth @pseudo: @triggerDate: "Date of birth" */ define "bOPV dose 1": not "First bOPV dose from the primary series was administered"
/* @dynamicValue: bOPV dose 1 Due Date @pseudocode: "Date of birth" + 6 weeks */ define "bOPV dose 1 Due Date": if "bOPV dose 1" then Patient.birthDate + 6 weeks else null
/* @output: bOPV dose 1 Create @create: The preferred schedule is to administer the 3 doses of bOPV starting from the minimum age of 6 weeks, with at least a 4 week-interval between doses. */ define "bOPV dose 1 Create": if "bOPV dose 1" then 'The preferred schedule is to administer the 3 doses of bOPV starting from the minimum age of 6 weeks, with at least a 4 week-interval between doses.' + ' Due Date: ' + ToString("bOPV dose 1 Due Date") else ''
/* @dynamicValue: bOPV dose 2 Due Date @pseudocode: Latest "Date and time of vaccination" (where "Type of poliovirus dose" = "bOPV") + 4 weeks */ define "bOPV dose 2 Due Date": if "bOPV dose 2" then Encounter."Date of Latest bOPV Dose" + 4 weeks else null
/* @output: bOPV dose 2 Create @create: The preferred schedule is to administer the 3 doses of bOPV starting from the minimum age of 6 weeks, with at least a 4 week-interval between doses. */ define "bOPV dose 2 Create": if "bOPV dose 2" then 'The preferred schedule is to administer the 3 doses of bOPV starting from the minimum age of 6 weeks, with at least a 4 week-interval between doses.' + ' Due Date: ' + ToString("bOPV dose 2 Due Date") else ''
/** * @description: Gets immunizations on or before a date */ define fluent function onOrBefore(immunizations List<Immunization>, beforeDate Date): immunizations I where I.occurrence.toInterval() same day or before beforeDate
/** * @description: Gets the doses from the primary series */ define fluent function seriesPrimary(immunizations List<Immunization>): immunizations I where exists( I.protocolApplied pa where pa.series = 'Primary series' )
define function ToString(value string): value.value
define function ToString(value ImmunizationStatus): value.value
define function ToBoolean(value boolean): value.value
define function ToConcept(concept FHIR.CodeableConcept): if concept is null then null else System.Concept { codes: concept.coding C return ToCode(C), display: concept.text.value }
define function ToCode(coding FHIR.Coding): if coding is null then null else System.Code { code: coding.code.value, system: coding.system.value, version: coding.version.value, display: coding.display.value }
/** * @description: Gets the type of antigen dose extension value from an Immunization */ define fluent function typeOfDose(immz Immunization): (First( immz.extension E where E.url = 'http://smart.who.int/immunizations/StructureDefinition/IMMZTypeOfDose' )).value as FHIR.CodeableConcept
define function ToString(value uri): value.value
define fluent function mostRecent(immunizations List<Immunization>): Last( immunizations I sort by start of occurrence.toInterval() )
define function ToDate(value date): value.value
Value set Poliovirus-containing vaccines
IMMZ.D18.S.Polio.bOPV plus IPV schedule Bivalent oral polio vaccine (bOPV) plus inactivated polio vaccine (IPV) schedule
WHO recommendations for routine immunization - summary tables (January 2025)
Provision of bOPV dose 1 Trigger event: Child's birth Trigger pseudo: Trigger date: "Date of birth" Create condition: The preferred schedule is to administer the 3 doses of bOPV starting from the minimum age of 6 weeks, with at least a 4 week-interval between doses.
Code { system: 'http://terminology.hl7.org/CodeSystem/communication-category', code: 'alert' }
Code { system: 'http://hl7.org/fhir/request-priority', code: 'routine' }
Provision of IPV dose 1 Trigger event: Child's birth Trigger pseudo: Trigger date: "Date of birth" Create condition: The first IPV dose should be administered from a minimum of 14 weeks of age.
Provision of bOPV dose 2 Trigger event: First bOPV dose from the primary series was administered Trigger pseudo: Count of vaccines administered (where "Type of dose" = "Primary series" and "Type of poliovirus dose" = "bOPV") = 1 Trigger date: Latest "Date and time of vaccination" (where "Type of poliovirus dose" = "bOPV") Create condition: The preferred schedule is to administer the 3 doses of bOPV starting from the minimum age of 6 weeks, with at least a 4 week-interval between doses.
Provision of IPV dose 2 Trigger event: First IPV dose from the primary series was administered Trigger pseudo: Count of vaccines administered (where "Type of poliovirus dose" = "IPV") = 1 Trigger date: Latest "Date and time of vaccination" (where "Type of poliovirus dose" = "IPV") Create condition: The first IPV dose should be administered from a minimum of 14 weeks of age (with the third dose of the diphtheria–tetanus–pertussis vaccine [DTP3] or pentavalent vaccine [penta3]), with the second IPV dose being given at least 4 months later (possibly coinciding with other vaccines administered at 9 months of age).
Provision of bOPV dose 3 Trigger event: Second bOPV dose from the primary series was administered Trigger pseudo: Count of vaccines administered (where "Type of dose" = "Primary series" and "Type of poliovirus dose" = "bOPV") = 2 Trigger date: Latest "Date and time of vaccination" (where "Type of poliovirus dose" = "bOPV") Create condition: The preferred schedule is to administer the 3 doses of bOPV starting from the minimum age of 6 weeks, with at least a 4 week-interval between doses.