Id: IMMZD18SHPVSingleDose Url: IMMZ.D18.S.Single-dose schedule Version: 0.2.0 Title: IMMZ.D18.S.Single-dose schedule Status: draft Type: system: http://terminology.hl7.org/CodeSystem/plan-definition-type code: eca-rule Date: 2026-03-03 13:07:11+0000 Publisher: WHO Description: IMMZ.D18.S.Single-dose schedule Alternative single-dose schedule Knowledge Capability: computable Related Artifacts: References WHO recommendations for routine immunization - summary tables (January 2025) Libraries: IMMZD18SHPVSingleDoseLogic Actions: Human papillomavirus (HPV) dose 1: Provision of the HPV dose 1 Trigger event: Child's birth Trigger pseudo: Trigger date: "Date of birth" Create condition: HPV dose 1 should be provided if the client is older than 9 years of age. If: Applicability: Human papillomavirus (HPV) dose 1 (Human papillomavirus (HPV) dose 1) Then: Definition: IMMZ.D2.DT.CR Dynamic Values: status: ('active') payload.contentString: (Human papillomavirus (HPV) 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' }) HPV dose 2 (Immunocompromised or HIV-positive): Provision of the HPV dose 2 for individuals immunocompromised or infected with HIV Trigger event: First HPV dose from the primary series was administered and client's HIV status is positive or client is immunocompromised Trigger pseudo: Count of vaccines administered (where "Vaccine type" = "HPV vaccines") = 1 AND ("HIV status" = "HIV-positive" OR "Immunocompromised" = TRUE) Trigger date: "Date and time of vaccination" (where "Vaccine type" = "HPV vaccines") Create condition: Individuals known to be immunocompromised or infected with HIV should receive at least two HPV vaccine doses. If: Applicability: HPV dose 2 (Immunocompromised or HIV-positive) (HPV dose 2 (Immunocompromised or HIV-positive)) Then: Definition: IMMZ.D2.DT.CR Dynamic Values: status: ('active') payload.contentString: (HPV dose 2 (Immunocompromised or HIV-positive) 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' }) HPV dose 3 (Immunocompromised or HIV-positive): Provision of the HPV dose 3 for individuals immunocompromised or infected with HIV Trigger event: Second HPV dose from the primary series was administered and client's HIV status is positive or client is immunocompromised Trigger pseudo: Count of vaccines administered (where "Vaccine type" = "HPV vaccines") = 2 AND ("HIV status" = "HIV-positive" OR "Immunocompromised" = TRUE) Trigger date: Latest "Date and time of vaccination" (where "Vaccine type" = "HPV vaccines") Create condition: Where possible, three HPV doses should be provided to individuals known to be immunocompromised or infected with HIV. If: Applicability: HPV dose 3 (Immunocompromised or HIV-positive) (HPV dose 3 (Immunocompromised or HIV-positive)) Then: Definition: IMMZ.D2.DT.CR Dynamic Values: status: ('active') payload.contentString: (HPV dose 3 (Immunocompromised or HIV-positive) 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
/** * @dataElement All Doses Administered to Patient */ define "Doses Administered to Patient": Elements."Doses Administered to Patient" I where I.occurrence.toInterval() same day or before Today
/* @internal: HPV containing Doses Administered to Patient */ define "HPV Doses Administered to Patient": Encounter."Doses Administered to Patient" I where I.vaccineCode in Concepts."HPV vaccines"
HPV Primary Series Doses Administered to Patient
/* @internal: HPV containing Doses Administered to Patient that are in the Primary series */ define "HPV Primary Series Doses Administered to Patient": "HPV Doses Administered to Patient".seriesPrimary()
Number of HPV Primary Series Doses Administered
/* @internal: Number of HPV Primary Series doses */ define "Number of HPV Primary Series Doses Administered": Count("HPV Primary Series Doses Administered to Patient")
Two HPV primary series doses were administered
/* @input: Two HPV primary series doses were administered @pseudocode: Count of vaccines administered (where "Vaccine type" = "HPV vaccines" and "Type of dose" = "Primary series") = 2 @code: Two HPV primary series doses were administered-112 @decision: IMMZ.D2.DT.HPV.2 doses: 2-dose schedule @decision: IMMZ.D2.DT.HPV.Single dose: Alternative single-dose schedule */ define "Two HPV primary series doses were administered": "Number of HPV Primary Series Doses Administered" = 2
Second HPV dose from the primary series was administered
/* @complete: Second HPV dose from the primary series was administered @pseudocode: Count of vaccines administered (where "Vaccine type" = "HPV vaccines") = 2 */ define "Second HPV dose from the primary series was administered": Encounter."Two HPV primary series doses were administered"
/* @internal: HIV Status Observation */ define "HIV status Observation": ([Observation: Concepts."HIV status"]).complete()
/* @input: Client's HIV status is positive @pseudocode: "HIV status" = "HIV-positive" */ define "Client's HIV status is positive": exists( (Elements."HIV status Observation".encounterOrOnBefore(EncounterId, Today)) O where O.value ~ Concepts."HIV-positive" )
/* @input: Client's HIV status is positive @pseudocode: "HIV status" = "HIV-positive" @code: Client's HIV status is positive-29 @decision: IMMZ.D2.DT.HPV.2 doses: 2-dose schedule @decision: IMMZ.D2.DT.HPV.Single dose: Alternative single-dose schedule */ define "Client's HIV status is positive": Encounter."Client's HIV status is positive"
/* @internal: Immunocompromised Observation */ define "Immunocompromised Observation": ([Observation: Concepts."Immunocompromised"] O sort by end of effective.toInterval() desc).complete()
/* @input: Client is immunocompromised @pseudocode: "Immunocompromised" = TRUE */ define "Client is immunocompromised": exists( "Immunocompromised Observation" ) and First( "Immunocompromised Observation" ).value = true
/* @input: Client is immunocompromised @pseudocode: "Immunocompromised" = TRUE @code: Client is immunocompromised-26 @decision: IMMZ.D2.DT.HPV.2 doses: 2-dose schedule @decision: IMMZ.D2.DT.HPV.Single dose: Alternative single-dose schedule */ define "Client is immunocompromised": Encounter."Client is immunocompromised"
Three HPV primary series doses were administered
/* @input: Three HPV primary series doses were administered @pseudocode: Count of vaccines administered (where "Vaccine type" = "HPV vaccines" and "Type of dose" = "Primary series") = 3 @code: Three HPV primary series doses were administered-112 @decision: IMMZ.D2.DT.HPV.2 doses: 2-dose schedule @decision: IMMZ.D2.DT.HPV.Single dose: Alternative single-dose schedule */ define "Three HPV primary series doses were administered": "Number of HPV Primary Series Doses Administered" = 3
Third HPV dose from the primary series was administered
/* @complete: Third HPV dose from the primary series was administered @pseudocode: Count of vaccines administered (where "Vaccine type" = "HPV vaccines") = 3 */ define "Third HPV dose from the primary series was administered": Encounter."Three HPV primary series doses were administered"
HPV dose 3 (Immunocompromised or HIV-positive)
/* @output: HPV dose 3 (Immunocompromised or HIV-positive) @description: Provision of the HPV dose 3 for individuals immunocompromised or infected with HIV @trigger: Second HPV dose from the primary series was administered and client's HIV status is positive or client is immunocompromised @pseudo: Count of vaccines administered (where "Vaccine type" = "HPV vaccines") = 2 AND ("HIV status" = "HIV-positive" OR "Immunocompromised" = TRUE) @triggerDate: Latest "Date and time of vaccination" (where "Vaccine type" = "HPV vaccines") */ define "HPV dose 3 (Immunocompromised or HIV-positive)": "Second HPV dose from the primary series was administered" and ( Encounter."Client's HIV status is positive" or Encounter."Client is immunocompromised" ) and not "Third HPV dose from the primary series was administered"
/* @internal: Date of Latest HPV Dose */ define "Date of Latest HPV Dose": date from start of "HPV Doses Administered to Patient".mostRecent().occurrence.toInterval()
HPV dose 3 (Immunocompromised or HIV-positive) Due Date
/* @dynamicValue: HPV dose 3 (Immunocompromised or HIV-positive) Due Date @pseudocode: Latest "Date and time of vaccination" (where "Vaccine type" = "HPV vaccines") + 6 months */ define "HPV dose 3 (Immunocompromised or HIV-positive) Due Date": if "HPV dose 3 (Immunocompromised or HIV-positive)" then Encounter."Date of Latest HPV Dose" + 6 months else null
HPV dose 3 (Immunocompromised or HIV-positive) Create
/* @output: HPV dose 3 (Immunocompromised or HIV-positive) Create @create: Where possible, three HPV doses should be provided to individuals known to be immunocompromised or infected with HIV. */ define "HPV dose 3 (Immunocompromised or HIV-positive) Create": if "HPV dose 3 (Immunocompromised or HIV-positive)" then 'Where possible, three HPV doses should be provided to individuals known to be immunocompromised or infected with HIV.' + ' Due Date: ' + ToString("HPV dose 3 (Immunocompromised or HIV-positive) Due Date") else ''
No HPV primary series doses were administered
/* @input: No HPV primary series doses were administered @pseudocode: Count of vaccines administered (where "Vaccine type" = "HPV vaccines" and "Type of dose" = "Primary series") = 0 @code: No HPV primary series doses were administered-112 @decision: IMMZ.D2.DT.HPV.2 doses: 2-dose schedule @decision: IMMZ.D2.DT.HPV.Single dose: Alternative single-dose schedule */ define "No HPV primary series doses were administered": "Number of HPV Primary Series Doses Administered" = 0
One HPV primary series dose was administered
/* @input: One HPV primary series dose was administered @pseudocode: Count of vaccines administered (where "Vaccine type" = "HPV vaccines" and "Type of dose" = "Primary series") = 1 @code: One HPV primary series dose was administered-112 @decision: IMMZ.D2.DT.HPV.2 doses: 2-dose schedule @decision: IMMZ.D2.DT.HPV.Single dose: Alternative single-dose schedule */ define "One HPV primary series dose was administered": "Number of HPV Primary Series Doses Administered" = 1
First HPV dose from the primary series was administered
/* @complete: First HPV dose from the primary series was administered @pseudocode: Count of vaccines administered (where "Vaccine type" = "HPV vaccines") = 1 */ define "First HPV dose from the primary series was administered": Encounter."One HPV primary series dose was administered"
/* @output: Human papillomavirus (HPV) dose 1 @description: Provision of the HPV dose 1 @trigger: Child's birth @pseudo: @triggerDate: "Date of birth" */ define "Human papillomavirus (HPV) dose 1": Encounter."No HPV primary series doses were administered" and not "First HPV dose from the primary series was administered"
Human papillomavirus (HPV) dose 1 Due Date
/* @dynamicValue: Human papillomavirus (HPV) dose 1 Due Date @pseudocode: "Date of birth" + 9 years */ define "Human papillomavirus (HPV) dose 1 Due Date": if "Human papillomavirus (HPV) dose 1" then Patient.birthDate + 9 years else null
Human papillomavirus (HPV) dose 1 Overdue
/* @dynamicValue: Human papillomavirus (HPV) dose 1 Overdue @pseudocode: "Date of birth" + 20 years */ define "Human papillomavirus (HPV) dose 1 Overdue": if "Human papillomavirus (HPV) dose 1" then Patient.birthDate + 20 years else null
Human papillomavirus (HPV) dose 1 Create
/* @output: Human papillomavirus (HPV) dose 1 Create @create: HPV dose 1 should be provided if the client is older than 9 years of age. */ define "Human papillomavirus (HPV) dose 1 Create": if "Human papillomavirus (HPV) dose 1" then 'HPV dose 1 should be provided if the client is older than 9 years of age.' + ' Due Date: ' + ToString("Human papillomavirus (HPV) dose 1 Due Date") + ' Overdue: ' + ToString("Human papillomavirus (HPV) dose 1 Overdue") else ''
HPV dose 2 (Immunocompromised or HIV-positive)
/* @output: HPV dose 2 (Immunocompromised or HIV-positive) @description: Provision of the HPV dose 2 for individuals immunocompromised or infected with HIV @trigger: First HPV dose from the primary series was administered and client's HIV status is positive or client is immunocompromised @pseudo: Count of vaccines administered (where "Vaccine type" = "HPV vaccines") = 1 AND ("HIV status" = "HIV-positive" OR "Immunocompromised" = TRUE) @triggerDate: "Date and time of vaccination" (where "Vaccine type" = "HPV vaccines") */ define "HPV dose 2 (Immunocompromised or HIV-positive)": "First HPV dose from the primary series was administered" and ( Encounter."Client's HIV status is positive" or Encounter."Client is immunocompromised" ) and not "Second HPV dose from the primary series was administered"
HPV dose 2 (Immunocompromised or HIV-positive) Due Date
/* @dynamicValue: HPV dose 2 (Immunocompromised or HIV-positive) Due Date @pseudocode: "Date and time of vaccination" (where "Vaccine type" = "HPV vaccines") + 6 months */ define "HPV dose 2 (Immunocompromised or HIV-positive) Due Date": if "HPV dose 2 (Immunocompromised or HIV-positive)" then Encounter."Date of Latest HPV Dose" + 6 months else null
HPV dose 2 (Immunocompromised or HIV-positive) Create
/* @output: HPV dose 2 (Immunocompromised or HIV-positive) Create @create: Individuals known to be immunocompromised or infected with HIV should receive at least two HPV vaccine doses. */ define "HPV dose 2 (Immunocompromised or HIV-positive) Create": if "HPV dose 2 (Immunocompromised or HIV-positive)" then 'Individuals known to be immunocompromised or infected with HIV should receive at least two HPV vaccine doses.' + ' Due Date: ' + ToString("HPV dose 2 (Immunocompromised or HIV-positive) Due Date") else ''
/** * @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 observation from an encounter or on or before a date */ define fluent function encounterOrOnBefore(observations List<Observation>, EncounterId String, beforeDate Date): observations O where (O.encounter.references(EncounterId) or O.effective.toInterval() starts same day or before beforeDate)
/* @description: Returns true if the given reference is to the given resourceId @comment: Returns true if the `resourceId` parameter exactly equals the tail of the given reference. NOTE: This function assumes resources from the same source server. */ define fluent function references(reference FHIR.Reference, resourceId String): resourceId = Last(Split(reference.reference, '/'))
define fluent function complete(observations List<Observation>): observations O where O.status in { 'final', 'amended', 'corrected' }
define function ToString(value ObservationStatus): 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
IMMZ.D18.S.Single-dose schedule Alternative single-dose schedule
WHO recommendations for routine immunization - summary tables (January 2025)
Provision of the HPV dose 1 Trigger event: Child's birth Trigger pseudo: Trigger date: "Date of birth" Create condition: HPV dose 1 should be provided if the client is older than 9 years of age.
Code { system: 'http://terminology.hl7.org/CodeSystem/communication-category', code: 'alert' }
Code { system: 'http://hl7.org/fhir/request-priority', code: 'routine' }
Provision of the HPV dose 2 for individuals immunocompromised or infected with HIV Trigger event: First HPV dose from the primary series was administered and client's HIV status is positive or client is immunocompromised Trigger pseudo: Count of vaccines administered (where "Vaccine type" = "HPV vaccines") = 1 AND ("HIV status" = "HIV-positive" OR "Immunocompromised" = TRUE) Trigger date: "Date and time of vaccination" (where "Vaccine type" = "HPV vaccines") Create condition: Individuals known to be immunocompromised or infected with HIV should receive at least two HPV vaccine doses.
Provision of the HPV dose 3 for individuals immunocompromised or infected with HIV Trigger event: Second HPV dose from the primary series was administered and client's HIV status is positive or client is immunocompromised Trigger pseudo: Count of vaccines administered (where "Vaccine type" = "HPV vaccines") = 2 AND ("HIV status" = "HIV-positive" OR "Immunocompromised" = TRUE) Trigger date: Latest "Date and time of vaccination" (where "Vaccine type" = "HPV vaccines") Create condition: Where possible, three HPV doses should be provided to individuals known to be immunocompromised or infected with HIV.