Id: IMMZD2DTHepatitisBBirthDose Url: IMMZ.D2.DT.Hepatitis B.Birth dose Version: 1.0.0 Title: IMMZ.D2.DT.Hepatitis B.Birth dose Status: draft Type: system: http://terminology.hl7.org/CodeSystem/plan-definition-type code: eca-rule Date: 2026-03-31 13:54:17+0000 Publisher: WHO Description: IMMZ.D2.DT.Hepatitis B.Birth dose Birth dose administration Knowledge Capability: computable Related Artifacts: References WHO recommendations for routine immunization - summary tables (January 2025) Libraries: IMMZD2DTHepatitisBBirthDoseLogic Actions: Determine if the client is due for a hepatitis B vaccination according to the national immunization schedule: Determine if the client is due for a hepatitis B vaccination according to the national immunization schedule Birth dose administration If: Applicability: Client is due for hepatitis B monovalent vaccine (Client is due for hepatitis B monovalent vaccine) Then: Definition: IMMZD2DTMR Dynamic Values: status: ('draft') intent: ('proposal') medication: (Concept { codes: { Code { system: 'http://smart.who.int/immunizations/CodeSystem/IMMZ.Z', code: 'DE6', display: 'Hepatitis B-containing vaccines' } }, display: 'Hepatitis B-containing vaccines' }) Check for Guidance for the patient regarding IMMZ.D2.DT.Hepatitis B.Birth dose.: Show Guidance for the patient regarding IMMZ.D2.DT.Hepatitis B.Birth dose. If: Applicability: Has Guidance (Has Guidance) Then: Definition: IMMZ.D2.DT.CR Dynamic Values: status: ('active') payload.contentString: (Guidance) 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
Hepatitis B Doses Administered to Patient
/* @internal: Hepatitis B containing Doses Administered to Patient */ define "Hepatitis B Doses Administered to Patient": Elements."Doses Administered to Patient" I where I.vaccineCode in Concepts."Hepatitis B-containing vaccines"
Hepatitis B Dose 0 Doses Administered to Patient
/* @internal: Hepatitis B Dose 0 Doses Administered to Patient */ define "Hepatitis B Dose 0 Doses Administered to Patient": "Hepatitis B Doses Administered to Patient".seriesDose0()
/* @internal: Hepatitis B Dose 0 Doses Administered to Patient */ define "Hepatitis B Dose 0 Doses Administered to Patient": HepatitisBElements."Hepatitis B Dose 0 Doses Administered to Patient".onOrBefore(Today)
Number of Hepatitis B Dose 0 Doses Administered
/* @internal: Number of Hepatitis B Dose 0 Doses Administered */ define "Number of Hepatitis B Dose 0 Doses Administered": Count("Hepatitis B Dose 0 Doses Administered to Patient")
Hepatitis B birth dose was not administered
/* @input: Hepatitis B birth dose was not administered @pseudocode: Count of vaccines administered (where "Vaccine type" = "Hepatitis B-containing vaccines" and "Birth dose" = TRUE) = 0 @code: Hepatitis B birth dose was not administered-117 @decision: IMMZ.D2.DT.Hepatitis B.Birth dose: Birth dose administration */ define "Hepatitis B birth dose was not administered": "Number of Hepatitis B Dose 0 Doses Administered" = 0
/** * @dataElement Patient age in days */ define "Current Patient Age In Days": AgeInDaysAt(Today)
Client's age is less than {Member States defined upper limit}
/* @input: Client's age is less than {Member States defined upper limit} @pseudocode: Today's date − "Date of birth" < Member States defined upper limit @code: Client's age is less than {Member States defined upper limit}-66 @decision: IMMZ.D2.DT.Hepatitis B.Birth dose: Birth dose administration */ define "Client's age is less than {Member States defined upper limit}": Encounter."Current Patient Age In Days" < HepBBirthDoseAgeLimitDays
Client is due for hepatitis B monovalent vaccine
/* @output: Client is due for hepatitis B monovalent vaccine @pseudocode: "Immunization recommendation status" = "Due" (where "Type of hepatitis B dose" = "Hepatitis B monovalent vaccine") */ define "Client is due for hepatitis B monovalent vaccine": Encounter."Hepatitis B birth dose was not administered" and Encounter."Client's age is less than {Member States defined upper limit}"
Client is due for hepatitis B monovalent vaccine Guidance
/* @output: Client is due for hepatitis B monovalent vaccine Guidance @guidance: Should vaccinate client with hepatitis B birth dose, as a monovalent dose. Check for contraindications. */ define "Client is due for hepatitis B monovalent vaccine Guidance": 'Should vaccinate client with hepatitis B birth dose, as a monovalent dose. Check for contraindications.'
Client's age is more than {Member States defined upper limit}
/* @input: Client's age is more than {Member States defined upper limit} @pseudocode: Today's date - "Date of birth" > Member States defined upper limit @code: Client's age is more than {Member States defined upper limit}-66 @decision: IMMZ.D2.DT.Hepatitis B.Birth dose: Birth dose administration */ define "Client's age is more than {Member States defined upper limit}": Encounter."Current Patient Age In Days" >= HepBBirthDoseAgeLimitDays
Client should follow delayed-start decision logic
/* @output: Client should follow delayed-start decision logic @pseudocode: */ define "Client should follow delayed-start decision logic": Encounter."Hepatitis B birth dose was not administered" and Encounter."Client's age is more than {Member States defined upper limit}"
Client should follow delayed-start decision logic Guidance
/* @output: Client should follow delayed-start decision logic Guidance @guidance: The client has a delayed start. Please follow the delayed start schedule. */ define "Client should follow delayed-start decision logic Guidance": 'The client has a delayed start. Please follow the delayed start schedule.'
/* @input: Hepatitis B birth dose was administered @pseudocode: Count of vaccines administered (where "Vaccine type" = "Hepatitis B-containing vaccines" and "Birth dose" = TRUE) = 1 @code: Hepatitis B birth dose was administered-117 @decision: IMMZ.D2.DT.Hepatitis B.Birth dose: Birth dose administration */ define "Hepatitis B birth dose was administered": "Number of Hepatitis B Dose 0 Doses Administered" = 1
Client is not due for the hepatitis B birth dose
/* @output: Client is not due for the hepatitis B birth dose @pseudocode: "Immunization recommendation status" = "Not due" */ define "Client is not due for the hepatitis B birth dose": Encounter."Hepatitis B birth dose was administered"
Client is not due for the hepatitis B birth dose Guidance
/* @output: Client is not due for the hepatitis B birth dose Guidance @guidance: Hepatitis B birth dose was already administered. Check hepatitis B immunization schedule. */ define "Client is not due for the hepatitis B birth dose Guidance": 'Hepatitis B birth dose was already administered. Check hepatitis B immunization schedule.'
/* @dynamicValue: Guidance */ define "Guidance": case when "Client is due for hepatitis B monovalent vaccine" then "Client is due for hepatitis B monovalent vaccine Guidance" when "Client should follow delayed-start decision logic" then "Client should follow delayed-start decision logic Guidance" when "Client is not due for the hepatitis B birth dose" then "Client is not due for the hepatitis B birth dose Guidance" else '' end
define "Has Guidance": "Guidance" is not null and "Guidance" != ''
/** * @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
/* From FHIRCommon 4.1.0: */ /* @description: Normalizes a value that is a choice of timing-valued types to an equivalent interval @comment: Normalizes a choice type of FHIR.dateTime, FHIR.Period, FHIR.Timing, FHIR.instance, FHIR.string, FHIR.Age, or FHIR.Range types to an equivalent interval. This selection of choice types is a superset of the majority of choice types that are used as possible representations for timing-valued elements in FHIR, allowing this function to be used across any resource. The input can be provided as a dateTime, Period, Timing, instant, string, Age, or Range. The intent of this function is to provide a clear and concise mechanism to treat single elements that have multiple possible representations as intervals so that logic doesn't have to account for the variability. More complex calculations (such as medication request period or dispense period calculation) need specific guidance and consideration. That guidance may make use of this function, but the focus of this function is on single element calculations where the semantics are unambiguous. If the input is a dateTime, the result a DateTime Interval beginning and ending on that dateTime. If the input is a Period, the result is a DateTime Interval. If the input is a Timing, an error is raised indicating a single interval cannot be computed from a Timing. If the input is an instant, the result is a DateTime Interval beginning and ending on that instant. If the input is a string, an error is raised indicating a single interval cannot be computed from a string. If the input is an Age, the result is a DateTime Interval beginning when the patient was the given Age, and ending immediately prior to when the patient was the given Age plus one year. If the input is a Range, the result is a DateTime Interval beginning when the patient was the Age given by the low end of the Range, and ending immediately prior to when the patient was the Age given by the high end of the Range plus one year. NOTE: Due to the complexity of determining a single interval from a Timing or String type, this function will throw a run-time exception if it is used with a Timing or String. */ define fluent function toInterval(choice Choice<FHIR.dateTime, FHIR.Period, FHIR.Timing, FHIR.instant, FHIR.string, FHIR.Age, FHIR.Range>): case when choice is FHIR.dateTime then Interval[FHIRHelpers.ToDateTime(choice as FHIR.dateTime), FHIRHelpers.ToDateTime(choice as FHIR.dateTime)] when choice is FHIR.Period then FHIRHelpers.ToInterval(choice as FHIR.Period) when choice is FHIR.instant then Interval[FHIRHelpers.ToDateTime(choice as FHIR.instant), FHIRHelpers.ToDateTime(choice as FHIR.instant)] when choice is FHIR.Age then Interval[FHIRHelpers.ToDate(Patient.birthDate) + FHIRHelpers.ToQuantity(choice as FHIR.Age), FHIRHelpers.ToDate(Patient.birthDate) + FHIRHelpers.ToQuantity(choice as FHIR.Age) + 1 year) when choice is FHIR.Range then Interval[FHIRHelpers.ToDate(Patient.birthDate) + FHIRHelpers.ToQuantity((choice as FHIR.Range).low), FHIRHelpers.ToDate(Patient.birthDate) + FHIRHelpers.ToQuantity((choice as FHIR.Range).high) + 1 year) when choice is FHIR.Timing then Message(null as Interval<DateTime>, true, 'NOT_IMPLEMENTED', 'Error', 'Calculation of an interval from a Timing value is not supported') when choice is FHIR.string then Message(null as Interval<DateTime>, true, 'NOT_IMPLEMENTED', 'Error', 'Calculation of an interval from a String value is not supported') else null as Interval<DateTime> end
define function ToDateTime(value dateTime): value.value
define function ToInterval(period FHIR.Period): if period is null then null else if period."start" is null then Interval(period."start".value, period."end".value] else Interval[period."start".value, period."end".value]
define function ToDateTime(value instant): value.value
define function ToDate(value date): value.value
define function ToQuantity(quantity FHIR.Quantity): case when quantity is null then null when quantity.value is null then null when quantity.comparator is not null then Message(null, true, 'FHIRHelpers.ToQuantity.ComparatorQuantityNotSupported', 'Error', 'FHIR Quantity value has a comparator and cannot be converted to a System.Quantity value.') when quantity.system is null or quantity.system.value = 'http://unitsofmeasure.org' or quantity.system.value = 'http://hl7.org/fhirpath/CodeSystem/calendar-units' then System.Quantity { value: quantity.value.value, unit: ToCalendarUnit(Coalesce(quantity.code.value, quantity.unit.value, '1')) } else Message(null, true, 'FHIRHelpers.ToQuantity.InvalidFHIRQuantity', 'Error', 'Invalid FHIR Quantity code: ' & quantity.unit.value & ' (' & quantity.system.value & '|' & quantity.code.value & ')') end
define function ToCalendarUnit(unit System.String): case unit when 'ms' then 'millisecond' when 's' then 'second' when 'min' then 'minute' when 'h' then 'hour' when 'd' then 'day' when 'wk' then 'week' when 'mo' then 'month' when 'a' then 'year' else unit end
/** * @description: Gets the doses from the dose 0 series */ define fluent function seriesDose0(immunizations List<Immunization>): immunizations I where exists( I.protocolApplied pa where pa.series = 'Dose 0' )
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 }
Value set Hepatitis B-containing vaccines
IMMZ.D2.DT.Hepatitis B.Birth dose Birth dose administration
WHO recommendations for routine immunization - summary tables (January 2025)
Hepatitis B vaccination is recommended for all children worldwide. Since perinatal or early postnatal transmission is the most important source of chronic hepatitis B virus infection globally, all infants (including low-birth-weight and premature infants) should receive their first dose of hepatitis B-containing vaccine as soon as possible after birth, ideally within 24 hours. If administration within 24 hours is not feasible, a late birth dose has some effectiveness. WHO recommends that all infants receive the late birth dose during the first contact with health-care providers at any time up to the time of the next dose of the primary schedule.
Determine if the client is due for a hepatitis B vaccination according to the national immunization schedule
Determine if the client is due for a hepatitis B vaccination according to the national immunization schedule Birth dose administration
Concept { codes: { Code { system: 'http://smart.who.int/immunizations/CodeSystem/IMMZ.Z', code: 'DE6', display: 'Hepatitis B-containing vaccines' } }, display: 'Hepatitis B-containing vaccines' }
Check for Guidance for the patient regarding IMMZ.D2.DT.Hepatitis B.Birth dose.
Show Guidance for the patient regarding IMMZ.D2.DT.Hepatitis B.Birth dose.
Code { system: 'http://terminology.hl7.org/CodeSystem/communication-category', code: 'alert' }
Code { system: 'http://hl7.org/fhir/request-priority', code: 'routine' }