Id: IMMZD2DTHPV2Doses Url: IMMZ.D2.DT.HPV.2 doses Version: 1.0.0 Title: IMMZ.D2.DT.HPV.2 doses 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.HPV.2 doses 2-dose schedule Knowledge Capability: computable Related Artifacts: References WHO recommendations for routine immunization - summary tables (January 2025) Libraries: IMMZD2DTHPV2DosesLogic Actions: Determine if the client is due for HPV.: Determine if the client is due for HPV vaccine according to the national immunization protocol. 2-dose schedule If: Applicability: Client is due for HPV vaccination (Client is due for HPV vaccination) Then: Definition: IMMZD2DTMR Dynamic Values: status: ('draft') intent: ('proposal') medication: (Concept { codes: { Code { system: 'http://smart.who.int/immunizations/CodeSystem/IMMZ.Z', code: 'DE7', display: 'HPV vaccines' } }, display: 'HPV vaccines' }) Check for Guidance for the patient regarding IMMZ.D2.DT.HPV.2 doses.: Show Guidance for the patient regarding IMMZ.D2.DT.HPV.2 doses. 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 Patient age in years */ define "Current Patient Age In Years": AgeInYearsAt(Today)
/* @input: Client's age is less than 9 years @pseudocode: Today's date − "Date of birth" < 9 years @code: Client's age is less than 9 years-40 @decision: IMMZ.D2.DT.HPV.2 doses: 2-dose schedule @decision: IMMZ.D2.DT.HPV.Single dose: Alternative single-dose schedule */ define "Client's age is less than 9 years": Encounter."Current Patient Age In Years" < 9
Client is not due for HPV vaccination Case 1
/* @output: Client is not due for HPV vaccination Case 1 @pseudocode: "Immunization recommendation status" = "Not due" */ define "Client is not due for HPV vaccination Case 1": Encounter."Client's age is less than 9 years"
/** * @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")
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
/* @internal: Date of Latest HPV Dose */ define "Date of Latest HPV Dose": date from start of "HPV Doses Administered to Patient".mostRecent().occurrence.toInterval()
The latest HPV dose was administered less than 6 months ago
/* @input: The latest HPV dose was administered less than 6 months ago @pseudocode: Today's date − latest "Date and time of vaccination" (where "Vaccine type" = "HPV vaccines") < 6 months @code: The latest HPV dose was administered less than 6 months ago-103 @decision: IMMZ.D2.DT.HPV.2 doses: 2-dose schedule @decision: IMMZ.D2.DT.HPV.Single dose: Alternative single-dose schedule */ define "The latest HPV dose was administered less than 6 months ago": "Date of Latest HPV Dose" is not null and duration in months between "Date of Latest HPV Dose" and Today < 6
Client is not due for HPV vaccination Case 2
/* @output: Client is not due for HPV vaccination Case 2 @pseudocode: "Immunization recommendation status" = "Not due" */ define "Client is not due for HPV vaccination Case 2": Encounter."One HPV primary series dose was administered" and Encounter."The latest HPV dose was administered less than 6 months ago"
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
/* @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"
Client is not due for HPV vaccination Case 3
/* @output: Client is not due for HPV vaccination Case 3 @pseudocode: "Immunization recommendation status" = "Not due" */ define "Client is not due for HPV vaccination Case 3": Encounter."Two HPV primary series doses were administered" and Encounter."The latest HPV dose was administered less than 6 months ago" and 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"
Client is not due for HPV vaccination Case 4
/* @output: Client is not due for HPV vaccination Case 4 @pseudocode: "Immunization recommendation status" = "Not due" */ define "Client is not due for HPV vaccination Case 4": Encounter."Two HPV primary series doses were administered" and Encounter."The latest HPV dose was administered less than 6 months ago" and Encounter."Client is immunocompromised"
/* @output: Client is not due for HPV vaccination @pseudocode: "Immunization recommendation status" = "Not due" */ define "Client is not due for HPV vaccination": "Client is not due for HPV vaccination Case 1" or "Client is not due for HPV vaccination Case 2" or "Client is not due for HPV vaccination Case 3" or "Client is not due for HPV vaccination Case 4"
Client is not due for HPV vaccination Guidance
/* @output: Client is not due for HPV vaccination Guidance @guidance = Should not vaccinate client with first HPV dose as client's age is less than 9 years. Check for any vaccines due and inform the caregiver of when to come back for the next dose. @guidance = Should not vaccinate client with second HPV dose as the latest HPV dose was administered less than 6 months ago. Check for any vaccines due and inform the caregiver of when to come back for the second dose. @guidance = Should not vaccinate for third HPV dose as the latest HPV dose was administered less than 6 months ago. Check for any vaccines due and inform the caregiver of when to come back for the next dose. @guidance = Should not vaccinate for third HPV dose as the latest HPV dose was administered less than 6 months ago. Check for any vaccines due and inform the caregiver of when to come back for the next dose. */ define "Client is not due for HPV vaccination Guidance": case when "Client is not due for HPV vaccination Case 1" then 'Should not vaccinate client with first HPV dose as client\'s age is less than 9 years. Check for any vaccines due and inform the caregiver of when to come back for the next dose.' when "Client is not due for HPV vaccination Case 2" then 'Should not vaccinate client with second HPV dose as the latest HPV dose was administered less than 6 months ago. Check for any vaccines due and inform the caregiver of when to come back for the second dose.' when "Client is not due for HPV vaccination Case 3" then 'Should not vaccinate for third HPV dose as the latest HPV dose was administered less than 6 months ago. Check for any vaccines due and inform the caregiver of when to come back for the next dose.' when "Client is not due for HPV vaccination Case 4" then 'Should not vaccinate for third HPV dose as the latest HPV dose was administered less than 6 months ago. Check for any vaccines due and inform the caregiver of when to come back for the next dose.' else '' end
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
/* @input: Client's age is between 9 and 14 years @pseudocode: 9 years ≤ Today's date − "Date of birth" ≤ 14 years @code: Client's age is between 9 and 14 years-51 @decision: IMMZ.D2.DT.HPV.2 doses: 2-dose schedule */ define "Client's age is between 9 and 14 years": 9 <= Encounter."Current Patient Age In Years" and Encounter."Current Patient Age In Years" <= 14
/* @input: Client's biological sex is female @pseudocode: "Sex" = "Female" @code: Client's biological sex is female-16 @decision: IMMZ.D2.DT.HPV.2 doses: 2-dose schedule */ define "Client's biological sex is female": Patient.gender = 'female'
Client is due for HPV vaccination Case 1
/* @output: Client is due for HPV vaccination Case 1 @pseudocode: "Immunization recommendation status" = "Due" */ define "Client is due for HPV vaccination Case 1": Encounter."No HPV primary series doses were administered" and Encounter."Client's age is between 9 and 14 years" and Encounter."Client's biological sex is female"
The latest HPV dose was administered more than 6 months ago
/* @input: The latest HPV dose was administered more than 6 months ago @pseudocode: Today's date − latest "Date and time of vaccination" (where "Vaccine type" = "HPV vaccines") ≥ 6 months @code: The latest HPV dose was administered more than 6 months ago-103 @decision: IMMZ.D2.DT.HPV.2 doses: 2-dose schedule @decision: IMMZ.D2.DT.HPV.Single dose: Alternative single-dose schedule */ define "The latest HPV dose was administered more than 6 months ago": not "The latest HPV dose was administered less than 6 months ago"
Client is due for HPV vaccination Case 2
/* @output: Client is due for HPV vaccination Case 2 @pseudocode: "Immunization recommendation status" = "Due" */ define "Client is due for HPV vaccination Case 2": Encounter."One HPV primary series dose was administered" and Encounter."The latest HPV dose was administered more than 6 months ago"
Client is due for HPV vaccination Case 3
/* @output: Client is due for HPV vaccination Case 3 @pseudocode: "Immunization recommendation status" = "Due" */ define "Client is due for HPV vaccination Case 3": Encounter."Two HPV primary series doses were administered" and Encounter."The latest HPV dose was administered more than 6 months ago" and Encounter."Client's HIV status is positive"
Client is due for HPV vaccination Case 4
/* @output: Client is due for HPV vaccination Case 4 @pseudocode: "Immunization recommendation status" = "Due" */ define "Client is due for HPV vaccination Case 4": Encounter."Two HPV primary series doses were administered" and Encounter."The latest HPV dose was administered more than 6 months ago" and Encounter."Client is immunocompromised"
/* @output: Client is due for HPV vaccination @pseudocode: "Immunization recommendation status" = "Due" */ define "Client is due for HPV vaccination": "Client is due for HPV vaccination Case 1" or "Client is due for HPV vaccination Case 2" or "Client is due for HPV vaccination Case 3" or "Client is due for HPV vaccination Case 4"
Client is due for HPV vaccination Guidance
/* @output: Client is due for HPV vaccination Guidance @guidance = Should vaccinate client with first HPV dose as no HPV doses were administered, client is female and within appropriate age range. Check for contraindications. @guidance = Should vaccinate client with second HPV dose as the latest HPV dose was administered more than 6 months ago. Check for contraindications. @guidance = Should vaccinate for third HPV dose as client is HIV positive and the latest HPV dose was administered more than 6 months ago. Check for contraindications. @guidance = Should vaccinate for third HPV dose as client is immunocompromised and the latest HPV dose was administered more than 6 months ago. Check for contraindications. */ define "Client is due for HPV vaccination Guidance": case when "Client is due for HPV vaccination Case 1" then 'Should vaccinate client with first HPV dose as no HPV doses were administered, client is female and within appropriate age range. Check for contraindications.' when "Client is due for HPV vaccination Case 2" then 'Should vaccinate client with second HPV dose as the latest HPV dose was administered more than 6 months ago. Check for contraindications.' when "Client is due for HPV vaccination Case 3" then 'Should vaccinate for third HPV dose as client is HIV positive and the latest HPV dose was administered more than 6 months ago. Check for contraindications.' when "Client is due for HPV vaccination Case 4" then 'Should vaccinate for third HPV dose as client is immunocompromised and the latest HPV dose was administered more than 6 months ago. Check for contraindications.' else '' end
Client's age more than or equal to 15 years
/* @input: Client's age more than or equal to 15 years @pseudocode: Today's date − "Date of birth" ≥ 15 years @code: Client's age more than or equal to 15 years-41 @decision: IMMZ.D2.DT.HPV.2 doses: 2-dose schedule */ define "Client's age more than or equal to 15 years": Encounter."Current Patient Age In Years" >= 15
Clinical judgement is required. Create a clinical note. Case 1
/* @output: Clinical judgement is required. Create a clinical note. Case 1 @pseudocode: "Immunization recommendation status" = "Further evaluation needed" */ define "Clinical judgement is required. Create a clinical note. Case 1": Encounter."No HPV primary series doses were administered" and Encounter."Client's age more than or equal to 15 years" and Encounter."Client's biological sex is female"
/* @input: Client's biological sex is not female @pseudocode: "Sex" ≠ "Female" @code: Client's biological sex is not female-16 @decision: IMMZ.D2.DT.HPV.2 doses: 2-dose schedule */ define "Client's biological sex is not female": not "Client's biological sex is female"
Clinical judgement is required. Create a clinical note. Case 2
/* @output: Clinical judgement is required. Create a clinical note. Case 2 @pseudocode: "Immunization recommendation status" = "Further evaluation needed" */ define "Clinical judgement is required. Create a clinical note. Case 2": Encounter."No HPV primary series doses were administered" and Encounter."Client's biological sex is not female"
Clinical judgement is required. Create a clinical note.
/* @output: Clinical judgement is required. Create a clinical note. @pseudocode: "Immunization recommendation status" = "Further evaluation needed" */ define "Clinical judgement is required. Create a clinical note.": "Clinical judgement is required. Create a clinical note. Case 1" or "Clinical judgement is required. Create a clinical note. Case 2"
Clinical judgement is required. Create a clinical note. Guidance
/* @output: Clinical judgement is required. Create a clinical note. Guidance @guidance = Member States should update this guidance according to the national immunization programme. @guidance = Member States should update this guidance according to the national immunization programme. */ define "Clinical judgement is required. Create a clinical note. Guidance": case when "Clinical judgement is required. Create a clinical note. Case 1" then 'Member States should update this guidance according to the national immunization programme.' when "Clinical judgement is required. Create a clinical note. Case 2" then 'Member States should update this guidance according to the national immunization programme.' else '' end
/* @input: Client is not immunocompromised @pseudocode: "Immunocompromised" ≠ TRUE */ define "Client is not immunocompromised": not "Client is immunocompromised"
/* @input: Client is not immunocompromised @pseudocode: "Immunocompromised" ≠ TRUE @code: Client is not 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 not immunocompromised": Encounter."Client is not immunocompromised"
Client's HIV status is negative or unknown
/* @input: Client's HIV status is negative or unknown @pseudocode: "HIV status" ≠ "HIV-positive" */ define "Client's HIV status is negative or unknown": not "Client's HIV status is positive"
/* @input: Client's HIV status is negative or unknown @pseudocode: "HIV status" ≠ "HIV-positive" @code: Client's HIV status is negative or unknown-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 negative or unknown": Encounter."Client's HIV status is negative or unknown"
HPV immunization schedule is complete Case 1
/* @output: HPV immunization schedule is complete Case 1 @pseudocode: "Immunization recommendation status" = "Complete" */ define "HPV immunization schedule is complete Case 1": Encounter."Two HPV primary series doses were administered" and Encounter."Client is not immunocompromised" and Encounter."Client's HIV status is negative or unknown"
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
HPV immunization schedule is complete Case 2
/* @output: HPV immunization schedule is complete Case 2 @pseudocode: "Immunization recommendation status" = "Complete" */ define "HPV immunization schedule is complete Case 2": Encounter."Three HPV primary series doses were administered"
/* @output: HPV immunization schedule is complete @pseudocode: "Immunization recommendation status" = "Complete" */ define "HPV immunization schedule is complete": "HPV immunization schedule is complete Case 1" or "HPV immunization schedule is complete Case 2"
HPV immunization schedule is complete Guidance
/* @output: HPV immunization schedule is complete Guidance @guidance = HPV immunization schedule is complete. Two HPV primary series doses were administered. Check for any other vaccines due. @guidance = HPV immunization schedule is complete. Three HPV primary series doses were administered. Check for any other vaccines due. */ define "HPV immunization schedule is complete Guidance": case when "HPV immunization schedule is complete Case 1" then 'HPV immunization schedule is complete. Two HPV primary series doses were administered. Check for any other vaccines due.' when "HPV immunization schedule is complete Case 2" then 'HPV immunization schedule is complete. Three HPV primary series doses were administered. Check for any other vaccines due.' else '' end
/* @dynamicValue: Guidance */ define "Guidance": case when "Client is not due for HPV vaccination" then "Client is not due for HPV vaccination Guidance" when "Client is due for HPV vaccination" then "Client is due for HPV vaccination Guidance" when "Clinical judgement is required. Create a clinical note." then "Clinical judgement is required. Create a clinical note. Guidance" when "HPV immunization schedule is complete" then "HPV immunization schedule is complete Guidance" else '' end
define "Has Guidance": "Guidance" is not null and "Guidance" != ''
/** * @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
/* 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
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 }
define fluent function mostRecent(immunizations List<Immunization>): Last( immunizations I sort by start of occurrence.toInterval() )
/** * @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 function ToString(value AdministrativeGender): value.value
WHO recommendations for routine immunization - summary tables (January 2025)
The current evidence supports the recommendation that a 2-dose schedule be used in the primary target group from 9 years of age and for all older age groups for which HPV vaccines are licensed.
Determine if the client is due for HPV vaccine according to the national immunization protocol. 2-dose schedule
Concept { codes: { Code { system: 'http://smart.who.int/immunizations/CodeSystem/IMMZ.Z', code: 'DE7', display: 'HPV vaccines' } }, display: 'HPV vaccines' }
Check for Guidance for the patient regarding IMMZ.D2.DT.HPV.2 doses.
Show Guidance for the patient regarding IMMZ.D2.DT.HPV.2 doses.
Code { system: 'http://terminology.hl7.org/CodeSystem/communication-category', code: 'alert' }
Code { system: 'http://hl7.org/fhir/request-priority', code: 'routine' }