Id: IMMZD18STyphoidTy21a Url: IMMZ.D18.S.Typhoid.Ty21a schedule Version: 0.2.0 Title: IMMZ.D18.S.Typhoid.Ty21a schedule Status: draft Type: system: http://terminology.hl7.org/CodeSystem/plan-definition-type code: eca-rule Date: 2026-03-25 23:30:34+0000 Publisher: WHO Description: IMMZ.D18.S.Typhoid.Ty21a schedule Live attenuated Ty21a vaccine, 3-dose schedule Knowledge Capability: computable Related Artifacts: References WHO recommendations for routine immunization - summary tables (January 2025) Libraries: IMMZD18STyphoidTy21aLogic Actions: Typhoid Ty21a primary series: Provision of the typhoid Ty21a, 3-dose oral primary series immunization Trigger event: Child's birth Trigger pseudo: Trigger date: "Date of birth" Create condition: Ty21a – 3-doses to be administered orally every second day from 6 years of age. If: Applicability: Typhoid Ty21a primary series (Typhoid Ty21a primary series) Then: Definition: IMMZ.D2.DT.CR Dynamic Values: status: ('active') payload.contentString: (Typhoid Ty21a primary series 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' }) Typhoid booster dose(s) repeat 3-doses series: Provision of the typhoid booster dose(s): revaccination Trigger event: The primary series has been completed Trigger pseudo: "Completed the primary vaccination series" = TRUE (where "Vaccine type" = "Typhoid vaccines") Trigger date: Latest "Date and time of vaccination" (where "Vaccine type" = "Typhoid vaccines") Create condition: Revaccination (3-doses) is recommended every 3–7 years for Ty21a. If: Applicability: Typhoid booster dose(s) repeat 3-doses series (Typhoid booster dose(s) repeat 3-doses series) Then: Definition: IMMZ.D2.DT.CR Dynamic Values: status: ('active') payload.contentString: (Typhoid booster dose(s) repeat 3-doses series 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' })
Completed the primary vaccination series
/** * @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: Typhoid containing Doses Administered to Patient */ define "Typhoid Doses Administered to Patient": Encounter."Doses Administered to Patient" I where I.vaccineCode in Concepts."Typhoid vaccines"
Typhoid Primary Series Doses Administered to Patient
/* @internal: Typhoid containing Doses Administered to Patient that are in the Primary series */ define "Typhoid Primary Series Doses Administered to Patient": "Typhoid Doses Administered to Patient".seriesPrimary()
Number of Typhoid Primary Series Doses Administered
/* @internal: Number of Typhoid Primary Series doses */ define "Number of Typhoid Primary Series Doses Administered": Count("Typhoid Primary Series Doses Administered to Patient")
One typhoid primary series dose was administered
/* @input: One typhoid primary series dose was administered @pseudocode: Count of vaccines administered (where "Vaccine type" = "Typhoid vaccines" and "Type of dose" = "Primary series") = 1 @code: One typhoid primary series dose was administered-116 @decision: IMMZ.D2.DT.Typhoid.TCV: Typhoid conjugate vaccine (TCV) schedule @decision: IMMZ.D2.DT.Typhoid.ViPS: Unconjugated Vi polysaccharide (ViPS) schedule */ define "One typhoid primary series dose was administered": "Number of Typhoid Primary Series Doses Administered" = 1
Completed the primary vaccination series Observation
/* @internal: Completed the primary vaccination series Observation */ define "Completed the primary vaccination series Observation": ([Observation: Concepts."Completed the primary vaccination series"]).complete()
/* @internal: Completed the primary vaccination series Observation */ define "Completed the primary vaccination series Observation": Elements."Completed the primary vaccination series Observation".encounterOrOnBefore(EncounterId, Today)
/* @input: Primary series is complete @pseudocode: "Completed the primary vaccination series" (where "Vaccine type" = "Typhoid vaccines") = TRUE @code: Primary series is complete-93 @decision: IMMZ.D2.DT.Typhoid.Ty21a: Live attenuated Ty21a vaccine schedule */ define "Primary series is complete": "One typhoid primary series dose was administered" or Coalesce( "Typhoid Doses Administered to Patient" Dose aggregate Result: Encounter."Completed the primary vaccination series Observation".partOf.references(Dose) or Result, false )
/* @complete: The primary series has been completed @pseudocode: "Completed the primary vaccination series" = TRUE (where "Vaccine type" = "Typhoid vaccines") */ define "The primary series has been completed": Encounter."Primary series is complete"
Typhoid booster dose(s) repeat 3-doses series
/* @output: Typhoid booster dose(s) repeat 3-doses series @description: Provision of the typhoid booster dose(s): revaccination @trigger: The primary series has been completed @pseudo: "Completed the primary vaccination series" = TRUE (where "Vaccine type" = "Typhoid vaccines") @triggerDate: Latest "Date and time of vaccination" (where "Vaccine type" = "Typhoid vaccines") */ define "Typhoid booster dose(s) repeat 3-doses series": "The primary series has been completed"
/* @internal: Date of Latest Typhoid Dose */ define "Date of Latest Typhoid Dose": date from start of "Typhoid Doses Administered to Patient".mostRecent().occurrence.toInterval()
Typhoid booster dose(s) repeat 3-doses series Due Date
/* @dynamicValue: Typhoid booster dose(s) repeat 3-doses series Due Date @pseudocode: Latest "Date and time of vaccination" (where "Vaccine type" = "Typhoid vaccines") + 3 years */ define "Typhoid booster dose(s) repeat 3-doses series Due Date": if "Typhoid booster dose(s) repeat 3-doses series" then Encounter."Date of Latest Typhoid Dose" + 3 years else null
Typhoid booster dose(s) repeat 3-doses series Overdue
/* @dynamicValue: Typhoid booster dose(s) repeat 3-doses series Overdue @pseudocode: Latest "Date and time of vaccination" (where "Vaccine type" = "Typhoid vaccines") + 7 years */ define "Typhoid booster dose(s) repeat 3-doses series Overdue": if "Typhoid booster dose(s) repeat 3-doses series" then Encounter."Date of Latest Typhoid Dose" + 7 years else null
Typhoid booster dose(s) repeat 3-doses series Create
/* @output: Typhoid booster dose(s) repeat 3-doses series Create @create: Revaccination (3-doses) is recommended every 3–7 years for Ty21a. */ define "Typhoid booster dose(s) repeat 3-doses series Create": if "Typhoid booster dose(s) repeat 3-doses series" then 'Revaccination (3-doses) is recommended every 3–7 years for Ty21a.' + ' Due Date: ' + ToString("Typhoid booster dose(s) repeat 3-doses series Due Date") + ' Overdue: ' + ToString("Typhoid booster dose(s) repeat 3-doses series Overdue") else ''
No typhoid primary series doses were administered
/* @input: No typhoid primary series doses were administered @pseudocode: Count of vaccines administered (where "Vaccine type" = "Typhoid vaccines" and "Type of dose" = "Primary series") = 0 @code: No typhoid primary series doses were administered-116 @decision: IMMZ.D2.DT.Typhoid.TCV: Typhoid conjugate vaccine (TCV) schedule @decision: IMMZ.D2.DT.Typhoid.ViPS: Unconjugated Vi polysaccharide (ViPS) schedule */ define "No typhoid primary series doses were administered": "Number of Typhoid Primary Series Doses Administered" = 0
/* @output: Typhoid Ty21a primary series @description: Provision of the typhoid Ty21a, 3-dose oral primary series immunization @trigger: Child's birth @pseudo: @triggerDate: "Date of birth" */ define "Typhoid Ty21a primary series": Encounter."No typhoid primary series doses were administered" and not "The primary series has been completed"
/* @dynamicValue: Typhoid Ty21a primary series Due Date @pseudocode: "Date of birth" + 6 years */ define "Typhoid Ty21a primary series Due Date": if "Typhoid Ty21a primary series" then Patient.birthDate + 6 years else null
/* @output: Typhoid Ty21a primary series Create @create: Ty21a – 3-doses to be administered orally every second day from 6 years of age. */ define "Typhoid Ty21a primary series Create": if "Typhoid Ty21a primary series" then 'Ty21a – 3-doses to be administered orally every second day from 6 years of age.' + ' Due Date: ' + ToString("Typhoid Ty21a primary series 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: Returns true if any of the given references are to the given resource @comment: Returns true if the `id` element of the given resource exactly equals the tail of any of the given references. NOTE: This function assumes resources from the same source server. */ define fluent function references(references List<FHIR.Reference>, resource FHIR.Resource): exists (references R where R.references(resource))
/* @description: Returns true if the given reference is to the given resource @comment: Returns true if the `id` element of the given resource 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, resource FHIR.Resource): resource.id = Last(Split(reference.reference, '/'))
/** * @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.Typhoid.Ty21a schedule Live attenuated Ty21a vaccine, 3-dose schedule
WHO recommendations for routine immunization - summary tables (January 2025)
Provision of the typhoid Ty21a, 3-dose oral primary series immunization Trigger event: Child's birth Trigger pseudo: Trigger date: "Date of birth" Create condition: Ty21a – 3-doses to be administered orally every second day from 6 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 typhoid booster dose(s): revaccination Trigger event: The primary series has been completed Trigger pseudo: "Completed the primary vaccination series" = TRUE (where "Vaccine type" = "Typhoid vaccines") Trigger date: Latest "Date and time of vaccination" (where "Vaccine type" = "Typhoid vaccines") Create condition: Revaccination (3-doses) is recommended every 3–7 years for Ty21a.