Skip to content

Implement Immunization Module and Vaccination updates #13976

Description

@raulbob

Situation Description & Motivation

The SORMAS Immunization Module currently uses a legacy "monotonic propagation" mechanism where vaccination status on Cases, Contacts, and Event Participants can only be elevated to Vaccinated based on qualifying dose entries, but cannot be demoted. It also does not support:

  • Evaluation of immunization validity periods (validFrom / validUntil) for status selection
  • Derivation of Had the disease, Other, or Unknown status values automatically
  • Dose-count differentiation in status values
  • A configurable, event-driven recalculation framework that always re-derives status from current data

Several SORMAS deployments (starting with Luxembourg) require a more robust, deterministic vaccination status engine that ensures immunization information is captured, displayed, and used consistently across all relevant records.

Objective

This epic aims to enhance the SORMAS Immunization Module with a generalized vaccination status framework, covering:

  1. Vaccination Status Calculation Engine - deterministic business rules for immunization selection, status mapping, and fallback
  2. Recalculation Triggers - comprehensive event-driven status re-derivation whenever relevant data changes
  3. Immunization Side Panel - read-only vaccination status display on Cases, Contacts, and Event Participants
  4. Quick Immunization Entry - simplified dialog for rapid immunization data capture
  5. Number of Doses & Information Reliability - propagation to dependent entities for reporting
  6. Country-Specific Configuration - pluggable rules for jurisdictions with unique requirements (starting with Luxembourg)

Use cases

  • Case workers need to see a person's vaccination status and immunization details in a dedicated side panel when working on a case, contact, or event participant.
  • Epidemiologists need the number of doses and information reliability (Trusted / Unreliable / Unknown) for EU-level reporting (e.g. EpiPulse).
  • Field staff need a simplified Quick Immunization Entry form to record immunization data without navigating the full immunization form.
  • National deployments (starting with Luxembourg) need automatic recalculation of vaccination status whenever immunization or dependent-entity data changes, with country-specific defaults and validity rules.

High-Level Explanation

The implementation will:

  1. Vaccination Status Values - Replace legacy "Vaccinated one dose" / "Vaccinated two doses" with the standard set: Vaccinated, Unvaccinated, Had the disease, Other.
    Luxembourg-specific: An additional Unknown status value is required when no immunization entries exist for the person and disease (BR0080LU).

  2. Status Calculation Engine - Only consider Immunization records with ImmunizationStatus = ACQUIRED. Select the immunization whose validFrom is closest to (but not after) the reference date and whose validUntil covers the reference period. Map MeansOfImmunization to the appropriate status value.

  3. Recalculation Triggers - Recalculate when immunizations are saved/deleted, when vaccinations are saved/deleted, and when dependent entities (Case, Contact, Event Participant) are saved.

  4. Immunization Side Panel - Display vaccination status, number of doses, date of last dose, information reliability, reference date/period, and last-updated timestamp as read-only information on Cases, Contacts, and Event Participants. The vaccination status is removed from the main case form.

  5. Quick Immunization Entry - Provide a simplified form with reportDate, meansOfImmunization, numberOfDoses, dateOfMostRecentDose, validFrom, validUntil, and vaccinationInfoSource. On completion, create an immunization record with ImmunizationManagementStatus = COMPLETED and ImmunizationStatus = ACQUIRED, generate one Vaccination entry per dose, and display a confirmation message.
    Luxembourg-specific: Uses a disease-specific validity calculator for validFrom/validUntil suggestions based on national schedules (Annex B).

Timeline

Tasks

Alternatives

Risks

Additional Information

Refer to "Business requirements - Immunization Module - Luxembourg v1.0" for detailed specifications, including Annex A (Business Rules Reference) and Annex B (Disease Immunization Reference).

Metadata

Metadata

Labels

epicA high level ticket with subtickets for development (ticket type)immunizations

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions