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:
- Vaccination Status Calculation Engine - deterministic business rules for immunization selection, status mapping, and fallback
- Recalculation Triggers - comprehensive event-driven status re-derivation whenever relevant data changes
- Immunization Side Panel - read-only vaccination status display on Cases, Contacts, and Event Participants
- Quick Immunization Entry - simplified dialog for rapid immunization data capture
- Number of Doses & Information Reliability - propagation to dependent entities for reporting
- 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:
-
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).
-
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.
-
Recalculation Triggers - Recalculate when immunizations are saved/deleted, when vaccinations are saved/deleted, and when dependent entities (Case, Contact, Event Participant) are saved.
-
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.
-
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).
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:
validFrom/validUntil) for status selectionSeveral 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:
Use cases
High-Level Explanation
The implementation will:
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).
Status Calculation Engine - Only consider Immunization records with
ImmunizationStatus = ACQUIRED. Select the immunization whosevalidFromis closest to (but not after) the reference date and whosevalidUntilcovers the reference period. MapMeansOfImmunizationto the appropriate status value.Recalculation Triggers - Recalculate when immunizations are saved/deleted, when vaccinations are saved/deleted, and when dependent entities (Case, Contact, Event Participant) are saved.
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.
Quick Immunization Entry - Provide a simplified form with reportDate, meansOfImmunization, numberOfDoses, dateOfMostRecentDose, validFrom, validUntil, and vaccinationInfoSource. On completion, create an immunization record with
ImmunizationManagementStatus = COMPLETEDandImmunizationStatus = 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).