# Gsoc 2025 : Immunization and Vaccination Schedule in O3 - Final Presentation

**URL:** https://talk.openmrs.org/t/gsoc-2025-immunization-and-vaccination-schedule-in-o3-final-presentation/46980
**Category:** GSoC
**Tags:** o3
**Created:** [August 31, 2025, 9:26am UTC](https://talk.openmrs.org/t/gsoc-2025-immunization-and-vaccination-schedule-in-o3-final-presentation/46980 "2025-08-31T09:26:37Z")
**Posts on this page:** 3
**Page:** 1

<div class="post-metadata">

### Author: ![chintu](https://talk.openmrs.org/letter_avatar/chintu/32/5_5575768a8748004e209b776fc1b2916d.png) [@chintu](https://talk.openmrs.org/u/chintu)
#### Post date: [August 31, 2025, 9:26am UTC](https://talk.openmrs.org/t/gsoc-2025-immunization-and-vaccination-schedule-in-o3-final-presentation/46980/1 "2025-08-31T09:26:37Z")

</div>

# GSoC 2025: Immunization and Vaccination Schedule in O3 - Final Presentation

## Project Details

**Project title** : Immunization and Vaccination Schedule in O3

**Primary mentor** : @dennis

**Backup mentor** : @grace

**Project link** : [GSOC 2025: Immunization and Vaccination Schedule in O3](https://openmrs.atlassian.net/wiki/spaces/projects/pages/355008710/Immunizations+Vaccination+Schedule+in+O3+GSOC+2025)

## Overview

Over the past 12 weeks, I’ve worked on enhancing the **Immunization and Vaccination module** in the OpenMRS O3 patient chart. This project focused on creating a visual, intuitive system that helps clinicians track immunization schedules, monitor vaccination status, and ensure patients (especially children) receive timely immunizations.

Immunization schedules are critical for preventing infectious diseases. The goal was to make it easier for clinicians to:

- See the status of what’s been administered
- Get reminders about what’s due or missing
- Identify upcoming vaccinations during patient visits
- Maintain comprehensive vaccination records

## Contribution

**Github repository** : [openmrs-esm-patient-chart/packages/esm-patient-immunizations-app](https://github.com/openmrs/openmrs-esm-patient-chart/tree/main/packages/esm-patient-immunizations-app)

### Issues and PRs

**Main Epic** : Immunization and Vaccination Schedule in O3

> **[Jira](https://openmrs.atlassian.net/browse/O3-4791)**

**Pull requests** : PRs with comprehensive enhancements:

> <https://github.com/openmrs/openmrs-esm-patient-chart/pull/2600>
>
> \## Requirements
> 
> \- \[x\] This PR has a title that briefly describes the work don…e including the ticket number. If there is a ticket, make sure your PR title includes a \[conventional commit\](https://o3-docs.openmrs.org/docs/frontend-modules/contributing.en-US#contributing-guidelines) label. See existing PR titles for inspiration.
> \- \[x\] My work conforms to the \[OpenMRS 3.0 Styleguide\](https://om.rs/styleguide) and \[design documentation\](https://om.rs/o3ui).
> \- \[x\] My work includes tests or is validated by existing tests.
> 
> \## Summary
> 
> This PR simplifies the immunization form by removing the time input fields (\`vaccinationTime\` and \`timeFormat\`) from both the UI and form logic. The immunization's \`vaccinationDate\` will now only capture the date without specifying a time.
> 
> \## Screenshots
> 
> 
> \## Before
> \<img width="375" height="761" alt="Screenshot 2025-07-24 at 3 01 35 PM" src="https://github.com/user-attachments/assets/82b1a6ce-253d-4ffb-83d0-bc2d1d60fb20" /\>
> 
> 
> \## After 
> \<img width="327" height="767" alt="Screenshot 2025-07-24 at 3 00 24 PM" src="https://github.com/user-attachments/assets/5e47f49b-1a15-4e06-b7e1-a25a33366935" /\>
> 
> \## immunization summary table 
> \<img width="947" height="203" alt="Screenshot 2025-07-24 at 5 52 16 PM" src="https://github.com/user-attachments/assets/1669acd1-c484-4b88-bed9-b3d94ab1984b" /\>
> 
> 
> 
> \## Related Issue
> 
> 
> \[jira ticket\](https://openmrs.atlassian.net/browse/O3-4907)
> 
> \## Other

> <https://github.com/openmrs/openmrs-esm-patient-chart/pull/2553>
>
> \## Requirements
> 
> \- \[x\] This PR has a title that briefly describes the work don…e including the ticket number. If there is a ticket, make sure your PR title includes a \[conventional commit\](https://o3-docs.openmrs.org/docs/frontend-modules/contributing.en-US#contributing-guidelines) label. See existing PR titles for inspiration.
> \- \[\] My work conforms to the \[OpenMRS 3.0 Styleguide\](https://om.rs/styleguide) and \[design documentation\](https://om.rs/o3ui).
> \- \[x\] My work includes tests or is validated by existing tests.
> 
> \## Summary
> 
> 
> This PR adds comprehensive unit tests for the \`\<DeleteImmunizationModal /\>\` component in the immunizations app. The tests cover the following scenarios:
> \- Rendering the modal with the correct elements, including the heading, confirmation message, and action buttons.
> \- Ensuring that clicking the "Cancel" button closes the modal by calling the \`close\` prop.
> \- Verifying that clicking the "Delete" button triggers the immunization deletion logic, calls the appropriate API, and shows a success snackbar notification.
> \- Handling error scenarios by displaying an error snackbar notification when the deletion fails.
> 
> 
> \## Screenshots
> 
> 
> \## Related Issue
> 
> 
> \[jira ticket\](https://openmrs.atlassian.net/browse/O3-4857)
> 
> \## Other

> <https://github.com/openmrs/openmrs-esm-patient-chart/pull/2600>
>
> \## Requirements
> 
> \- \[x\] This PR has a title that briefly describes the work don…e including the ticket number. If there is a ticket, make sure your PR title includes a \[conventional commit\](https://o3-docs.openmrs.org/docs/frontend-modules/contributing.en-US#contributing-guidelines) label. See existing PR titles for inspiration.
> \- \[x\] My work conforms to the \[OpenMRS 3.0 Styleguide\](https://om.rs/styleguide) and \[design documentation\](https://om.rs/o3ui).
> \- \[x\] My work includes tests or is validated by existing tests.
> 
> \## Summary
> 
> This PR simplifies the immunization form by removing the time input fields (\`vaccinationTime\` and \`timeFormat\`) from both the UI and form logic. The immunization's \`vaccinationDate\` will now only capture the date without specifying a time.
> 
> \## Screenshots
> 
> 
> \## Before
> \<img width="375" height="761" alt="Screenshot 2025-07-24 at 3 01 35 PM" src="https://github.com/user-attachments/assets/82b1a6ce-253d-4ffb-83d0-bc2d1d60fb20" /\>
> 
> 
> \## After 
> \<img width="327" height="767" alt="Screenshot 2025-07-24 at 3 00 24 PM" src="https://github.com/user-attachments/assets/5e47f49b-1a15-4e06-b7e1-a25a33366935" /\>
> 
> \## immunization summary table 
> \<img width="947" height="203" alt="Screenshot 2025-07-24 at 5 52 16 PM" src="https://github.com/user-attachments/assets/1669acd1-c484-4b88-bed9-b3d94ab1984b" /\>
> 
> 
> 
> \## Related Issue
> 
> 
> \[jira ticket\](https://openmrs.atlassian.net/browse/O3-4907)
> 
> \## Other

> <https://github.com/openmrs/openmrs-esm-patient-chart/pull/2612>
>
> \## Requirements
> 
> \- \[x\] This PR has a title that briefly describes the work don…e including the ticket number. If there is a ticket, make sure your PR title includes a \[conventional commit\](https://o3-docs.openmrs.org/docs/frontend-modules/contributing.en-US#contributing-guidelines) label. See existing PR titles for inspiration.
> \- \[\] My work conforms to the \[OpenMRS 3.0 Styleguide\](https://om.rs/styleguide) and \[design documentation\](https://om.rs/o3ui).
> \- \[\] My work includes tests or is validated by existing tests.
> 
> \## Summary
> 
> This Pr Fixes an issue where only the first 10 immunizations were returned due to FHIR pagination.
> \- Replaced useSWR + openmrsFetch with useFhirFetchAll to fetch all pages of immunization data.
> \- Updated mapFromFHIRImmunizationBundle to support both FHIR bundles and resource arrays.
> \- Renamed mapToImmunizationDose → mapToImmunizationDoseFromResource for clarity.
> 
> 
> \## Screenshots
> 
> 
> \## Related Issue
> 
> 
> \[jira ticket \](https://openmrs.atlassian.net/browse/O3-4890)
> 
> \## Other

> <https://github.com/openmrs/openmrs-esm-patient-chart/pull/2614>
>
> \## Requirements
> 
> \- \[x\] This PR has a title that briefly describes the work don…e including the ticket number. If there is a ticket, make sure your PR title includes a \[conventional commit\](https://o3-docs.openmrs.org/docs/frontend-modules/contributing.en-US#contributing-guidelines) label. See existing PR titles for inspiration.
> \- \[x\] My work conforms to the \[OpenMRS 3.0 Styleguide\](https://om.rs/styleguide) and \[design documentation\](https://om.rs/o3ui).
> \- \[x\] My work includes tests or is validated by existing tests.
> 
> \## Summary
> 
> This PR introduces support for recording a free-text note in the immunization workspace. The note data is persisted in FHIR-compliant format (note: \[{ text: string }\]) using the immunization resource. This PR also updates unit tests to:
> 
> - Include note input in form interaction tests
> - Assert that note values are correctly saved and rendered
> 
> Other changes are:
> 
> - The zod schema has been updated to allow an optional string note field
> - Types have been updated across the codebase (\`FHIRImmunizationResource\`, \`ImmunizationFormState\`, \`ExistingDoses\`) to include the note string property.
> 
> \## Screenshots
> https://github.com/user-attachments/assets/e24db5df-1e27-4941-9f0f-f054f802ef02
> 
> \## Related Issue
> \[jira ticket\](https://openmrs.atlassian.net/browse/O3-4920)
> 
> \## Other

> <https://github.com/openmrs/openmrs-esm-patient-chart/pull/2648>
>
> \## Requirements
> 
> \- \[x\] This PR has a title that briefly describes the work don…e including the ticket number. If there is a ticket, make sure your PR title includes a \[conventional commit\](https://o3-docs.openmrs.org/docs/frontend-modules/contributing.en-US#contributing-guidelines) label. See existing PR titles for inspiration.
> \- \[x\] My work conforms to the \[OpenMRS 3.0 Styleguide\](https://om.rs/styleguide) and \[design documentation\](https://om.rs/o3ui).
> \- \[\] My work includes tests or is validated by existing tests.
> 
> \## Summary
> 
> This PR enhances the tablet layout and responsiveness for the Immunization module by:
> 
> \- Using useLayoutType() to detect tablet view and apply appropriate table sizing.
> \- Updating SCSS in immunization-history-card.scss
> 
> \## Screenshots
> 
> 
> https://github.com/user-attachments/assets/8b79855b-eba4-4984-98c7-5ee708ce1a28
> 
> 
> 
> \## Related Issue
> 
> 
> 
> \## Other

> <https://github.com/openmrs/openmrs-esm-patient-chart/pull/2663>
>
> \## Requirements
> 
> \- \[x\] This PR has a title that briefly describes the work don…e including the ticket number. If there is a ticket, make sure your PR title includes a \[conventional commit\](https://o3-docs.openmrs.org/docs/frontend-modules/contributing.en-US#contributing-guidelines) label. See existing PR titles for inspiration.
> \- \[\] My work conforms to the \[OpenMRS 3.0 Styleguide\](https://om.rs/styleguide) and \[design documentation\](https://om.rs/o3ui).
> \- \[x\] My work includes tests or is validated by existing tests.
> 
> \## Summary
> 
> This PR enhances the immunizations.spec.ts Playwright test to cover the full lifecycle of an immunization record:
> 
> \- Add step coverage for Immunization History card
> 
> \- Verifies correct headers and row data after adding a new immunization.
> 
> \- Improve summary table checks
> 
> \- Confirms correct headers and updated dose/date details after editing.
> 
> \- Add delete flow verification
> 
> \- Clicks delete action, validates confirmation modal, confirms deletion.
> 
> \- Verifies success notification and empty state message.
> 
> \- Refactor date input filling
> 
> 
> \## Screenshots
> 
> 
> \## Related Issue
> 
> 
> \[jira ticket \](https://openmrs.atlassian.net/browse/O3-4944?focusedCommentId=158244)
> 
> \## Other

> <https://github.com/openmrs/openmrs-esm-patient-chart/pull/2702>
>
> \## Requirements
> 
> \- \[x\] This PR has a title that briefly describes the work don…e including the ticket number. If there is a ticket, make sure your PR title includes a \[conventional commit\](https://o3-docs.openmrs.org/docs/frontend-modules/contributing.en-US#contributing-guidelines) label. See existing PR titles for inspiration.
> \- \[\] My work conforms to the \[OpenMRS 3.0 Styleguide\](https://om.rs/styleguide) and \[design documentation\](https://om.rs/o3ui).
> \- \[x\] My work includes tests or is validated by existing tests.
> 
> \## Summary
> 
> This PR cleans up unused code and improves test quality in the immunization app.
> 
> \- Removes unused imports, types, helper functions, and mock data.
> \- Cleaned up test files by removing outdated TODO comments and unused \`data-testid\` attributes.
> \- Improves test selectors from \`getByTestId\` to \`getByLabelText\` for better accessibility.
> 
> No functional changes, just code cleanup and simplification.
> 
> \## Screenshots
> 
> 
> \## Related Issue
> 
> 
> \[jira ticket\](https://openmrs.atlassian.net/browse/O3-4990)
> 
> \## Other

> <https://github.com/openmrs/openmrs-esm-patient-chart/pull/2679>
>
> \## Requirements
> 
> \- \[x\] This PR has a title that briefly describes the work don…e including the ticket number. If there is a ticket, make sure your PR title includes a \[conventional commit\](https://o3-docs.openmrs.org/docs/frontend-modules/contributing.en-US#contributing-guidelines) label. See existing PR titles for inspiration.
> \- \[x\] My work conforms to the \[OpenMRS 3.0 Styleguide\](https://om.rs/styleguide) and \[design documentation\](https://om.rs/o3ui).
> \- \[x\] My work includes tests or is validated by existing tests.
> 
> \## Summary
> 
> This PR adds support for capturing, storing, and displaying the Next Dose Date (nextDoseDate) field in the immunizations flow. It enhances both the UI and backend data structure to accommodate this optional field, improving immunization tracking and scheduling.
> 
> \* \*\*UI updates\*\*
> 
> \* Added \`Next dose date\` column in the immunizations sequence table.
> \* Displayed \`Next dose date\` on the immunization history card, with a \*\*color-coded status\*\*:
> 
> \* 🔴 \*\*Red\*\* → Next dose is due (\`todayDate \>= nextDoseDate\`)
> \* 🟢 \*\*Green\*\* → Next dose is not due yet
> \* Updated detailed summary and form UI to include \`Next dose date\` as an optional field.
> \* Added validation so \`nextDoseDate\` cannot be set before the vaccination date.
> 
> \* \*\*Backend / Data handling\*\*
> 
> \* Extended FHIR Immunization resource mapping to support \`nextDoseDate\` via an \`extension\` field.
> \* Updated TypeScript types (\`Immunization\`, \`ImmunizationFormState\`, \`ExistingDoses\`) to include \`nextDoseDate\`.
> \* Updated form submission logic and tests to handle this new field.
> 
> \* \*\*Styling\*\*
> 
> \* Introduced styles for \`nextDoseDate\` flag labels with Carbon color tokens (red/green) to visually indicate due status.
> 
> \* \*\*Translations\*\*
> 
> \* Added English translation for \`"nextDoseDate": "Next dose date"\`.
> 
> \### Why
> 
> \* Helps clinicians and patients track upcoming doses within the immunization schedule.
> \* Provides \*\*visual flags\*\* (color indicators) for due/overdue next doses.
> \* Only color-based flagging is included
> 
> 
> \## Screenshots
> 
> \## Immunization History card
> 
> \<img width="1317" height="403" alt="Screenshot 2025-09-02 at 3 48 32 PM" src="https://github.com/user-attachments/assets/3baf1bca-b7e8-422d-ab34-0b667d067be4" /\>
> 
> 
> \# Immunization workspace
> \<img width="1710" height="1112" alt="Screenshot 2025-09-02 at 3 44 52 PM" src="https://github.com/user-attachments/assets/eb0920e8-33f2-4402-bb70-e3ebad2be7b2" /\>
> 
> 
> \# Immunization Detailed summary
> !\[Uploading Screenshot 2025-09-02 at 3.47.41 PM.png…\]()
> 
> 
> 
> \## ScreenRecording
> 
> 
> https://github.com/user-attachments/assets/447de0d5-9a79-4bc3-85f4-359c7f244e74
> 
> 
> 
> 
> 
> 
> 
> \## Related Issue
> 
> 
> \[jira ticket\](https://openmrs.atlassian.net/browse/O3-4954)
> 
> \## Other

> <https://github.com/openmrs/openmrs-esm-patient-chart/pull/2711>
>
> \## Requirements
> 
> \- \[x\] This PR has a title that briefly describes the work don…e including the ticket number. If there is a ticket, make sure your PR title includes a \[conventional commit\](https://o3-docs.openmrs.org/docs/frontend-modules/contributing.en-US#contributing-guidelines) label. See existing PR titles for inspiration.
> \- \[x\] My work conforms to the \[OpenMRS 3.0 Styleguide\](https://om.rs/styleguide) and \[design documentation\](https://om.rs/o3ui).
> \- \[\] My work includes tests or is validated by existing tests.
> 
> \## Summary
> 
> This PR updates the Immunizations Overview component and related configurations to improve navigation, date formatting, and integration with the patient chart.
> 
> \## Screenshots
> 
> \<img width="1686" height="954" alt="Screenshot 2025-08-26 at 10 21 37 AM" src="https://github.com/user-attachments/assets/f12dce12-7e02-4609-8039-9fef11b15d36" /\>
> 
> 
> \## Related Issue
> 
> 
> 
> \## Other

> <https://github.com/openmrs/openmrs-esm-patient-chart/pull/2712>
>
> \## Requirements
> 
> \- \[x\] This PR has a title that briefly describes the work don…e including the ticket number. If there is a ticket, make sure your PR title includes a \[conventional commit\](https://o3-docs.openmrs.org/docs/frontend-modules/contributing.en-US#contributing-guidelines) label. See existing PR titles for inspiration.
> \- \[\] My work conforms to the \[OpenMRS 3.0 Styleguide\](https://om.rs/styleguide) and \[design documentation\](https://om.rs/o3ui).
> \- \[x\] My work includes tests or is validated by existing tests.
> 
> \## Summary
> 
> This PR introduces unit tests for the ImmunizationsDetailedSummary component to ensure correct rendering of immunizations data across different states (empty, error, and populated).
> 
> \## Screenshots
> 
> 
> \## Related Issue
> 
> 
> 
> \## Other

> <https://github.com/openmrs/openmrs-esm-patient-chart/pull/2367>
>
> \## Requirements
> 
> \- \[x\] This PR has a title that briefly describes the work don…e including the ticket number. If there is a ticket, make sure your PR title includes a \[conventional commit\](https://o3-docs.openmrs.org/docs/frontend-modules/contributing.en-US#contributing-guidelines) label. See existing PR titles for inspiration.
> \- \[x\] My work conforms to the \[OpenMRS 3.0 Styleguide\](https://om.rs/styleguide) and \[design documentation\](https://om.rs/o3ui).
> \- \[\] My work includes tests or is validated by existing tests.
> 
> \## Summary
> 
> \- Resolved Date and Time Picker overflow in the Immunization Form by updating styling to prevent layout break and horizontal scroll.
> 
> 
> \## Screenshots
> 
> \## Before
> \<img width="420" alt="Screenshot 2025-04-10 at 9 23 06 AM" src="https://github.com/user-attachments/assets/47a522d2-d984-4db8-a6d1-b6ca673578fe" /\>
> 
> \## After
> \<img width="419" alt="Screenshot 2025-04-10 at 9 22 38 AM" src="https://github.com/user-attachments/assets/0a1ec655-41aa-4e6c-ae16-fc07f4b5fc36" /\>
> 
> 
> \## Related Issue
> 
> 
> \[jira ticket\](https://openmrs.atlassian.net/browse/O3-4625)
> 
> \## Other

> <https://github.com/openmrs/openmrs-esm-patient-chart/pull/2494>
>
> \## Requirements
> 
> \- \[x\] This PR has a title that briefly describes the work don…e including the ticket number. If there is a ticket, make sure your PR title includes a \[conventional commit\](https://o3-docs.openmrs.org/docs/frontend-modules/contributing.en-US#contributing-guidelines) label. See existing PR titles for inspiration.
> \- \[x\] My work conforms to the \[OpenMRS 3.0 Styleguide\](https://om.rs/styleguide) and \[design documentation\](https://om.rs/o3ui).
> \- \[x\] My work includes tests or is validated by existing tests.
> 
> \## Summary
> 
> This pr updates to the Immunizations workspace Form component to improve functionality and UI:
> 
> \## UI Improvements
> \- Added "Vaccine Batch Information" heading with new styling
> \- Added loading spinner during form submission
> \- Improved error message display using form validation
> \- Disabled vaccine selection field when editing existing immunization
> \## Form Validation Updates
> \- Added validation to prevent vaccination dates before patient birth date
> \- Added validation to prevent future vaccination dates
> \- Improved error message display using form field validation instead of notifications
> Code Quality
> \- Improved error handling in form submission
> \- Removed unused InlineNotification import
> \- Updated test cases to match new validation behavior
> 
> 
> \## Screenshots
> 
> \<img width="1470" alt="Screenshot 2025-06-11 at 9 19 03 PM" src="https://github.com/user-attachments/assets/79c28309-72ed-4dc4-ac68-44061fe5155e" /\>
> 
> \<img width="1470" alt="Screenshot 2025-06-11 at 9 19 31 PM" src="https://github.com/user-attachments/assets/076ebb2c-be83-47da-aecb-4e174c1831f7" /\>
> 
> 
> \## Related Issue
> 
> 
> \[jira ticket\](https://openmrs.atlassian.net/browse/O3-4792)
> 
> \## Other

> <https://github.com/openmrs/openmrs-esm-patient-chart/pull/2513>
>
> \## Requirements
> 
> \- \[x\] This PR has a title that briefly describes the work don…e including the ticket number. If there is a ticket, make sure your PR title includes a \[conventional commit\](https://o3-docs.openmrs.org/docs/frontend-modules/contributing.en-US#contributing-guidelines) label. See existing PR titles for inspiration.
> \- \[x\] My work conforms to the \[OpenMRS 3.0 Styleguide\](https://om.rs/styleguide) and \[design documentation\](https://om.rs/o3ui).
> \- \[\] My work includes tests or is validated by existing tests.
> 
> \## Summary
> 
> This PR adds the ability to delete immunizations in the patient chart, including:
> 
> \### Added features:
> \- New delete button in immunizations sequence table
> \- Delete confirmation modal with safety checks
> \- Backend integration for immunization deletion
> \- Loading state during deletion
> \- Success/error notifications
> \### Technical changes:
> \- Added deletePatientImmunization API function
> \- Created new DeleteImmunization modal component
> \- Updated table headers to include delete column
> \- Added translations for new deletion-related strings
> \- Registered new modal in routes.json
> \- Updated styling for delete button and loading state
> 
> \## Screenshots
> 
> \<img width="999" alt="Screenshot 2025-06-18 at 9 33 13 PM" src="https://github.com/user-attachments/assets/6201adc8-4b8f-4627-a7aa-484b2b4424ef" /\>
> 
> \<img width="1017" alt="Screenshot 2025-06-18 at 9 33 22 PM" src="https://github.com/user-attachments/assets/8189c435-929f-4f6f-90d7-5df00a01cf6f" /\>
> 
> 
> \<img width="1013" alt="Screenshot 2025-06-18 at 9 33 36 PM" src="https://github.com/user-attachments/assets/a2db5eb1-400a-41d1-ab8d-bf2dd4dece31" /\>
> 
> 
> \## Related Issue
> 
> \[jira ticket\](https://openmrs.atlassian.net/browse/O3-4801)
> 
> 
> \## Other

> <https://github.com/openmrs/openmrs-esm-patient-chart/pull/2539>
>
> \## Requirements
> 
> \- \[x\] This PR has a title that briefly describes the work don…e including the ticket number. If there is a ticket, make sure your PR title includes a \[conventional commit\](https://o3-docs.openmrs.org/docs/frontend-modules/contributing.en-US#contributing-guidelines) label. See existing PR titles for inspiration.
> \- \[x\] My work conforms to the \[OpenMRS 3.0 Styleguide\](https://om.rs/styleguide) and \[design documentation\](https://om.rs/o3ui).
> \- \[x\] My work includes tests or is validated by existing tests.
> 
> \## Summary
> 
> 
> This PR introduces a new \*\*Immunization History\*\* card to the patient immunizations dashboard. The main enhancements include:
> 
> 
> \* \*\*\`ImmunizationHistoryCard\` component\*\*:
> 
> \* Displays vaccine names and their respective dose history.
> \* Supports pagination (5 items per page).
> \* Doses are chronologically sorted.
> \* \*\*\`ImmunizationHistorySummary\` component\*\*:
> 
> \* Conditionally renders either an empty state or the new history card.
> \* Includes “Add” button to launch immunization form.
> \* \*\*Styling via SCSS\*\*:
> 
> \* Fixed-width sticky headers and columns for better readability.
> \* \*\*Routing and Lifecycle Integration\*\*:
> 
> \* Registered the new widget in \`routes.json\` and \`index.ts\`.
> 
> 
> 
> \## Screenshots
> 
> 
> \## If immunization is not recorded 
> \- To avoid confusion, the empty state for the Immunization History Card has been removed, and only the single empty state from the Immunization Summary is now used
> 
> \<img width="1710" height="1112" alt="Screenshot 2025-07-28 at 10 07 39 AM" src="https://github.com/user-attachments/assets/3990e446-f61b-484a-bb7a-0c6a015eda85" /\>
> 
> 
> \## video
> 
> https://github.com/user-attachments/assets/4ff99f70-d9f4-4c2b-b558-50b06152f227
> 
> 
> 
> 
> \## Related Issue
> 
> 
> \[jira ticket\](https://openmrs.atlassian.net/browse/O3-4802)
> 
> \## Other

## Weekly Blog Posts

| Week | Blog Post |
| --- | --- |
| Community Bonding | [GSoC Community Bonding Period](https://medium.com/@praneeth7077/gsoc-community-bonding-period-efc04d3f6dee) |
| Week 01 | [Week 1 GSoC 2025: Getting Started with the Immunization Workspace](https://medium.com/@praneeth7077/week-1-gsoc-2025-getting-started-with-the-immunization-workspace-765754a99053) |
| Week 02 | [Week 2 GSoC 2025: Refactoring and Field Mapping Progress](https://medium.com/@praneeth7077/week-2-gsoc-2025-refactoring-and-field-mapping-progress-54bf87f8fc20) |
| Week 03 | [Week 3 Blog: Deleting Doses, Enhancing Immunization Summary](https://medium.com/@praneeth7077/week-3-blog-deleting-doses-enhancing-immunization-summary-ec6c1b21e8d7) |
| Week 04 | [GSoC Week 4: Enhancing Immunization UI ⚡](https://medium.com/@praneeth7077/%EF%B8%8F-gsoc-week-4-enhancing-immunization-ui-e8f5a85469d4) |
| Week 05 | [Week 5: Progress on Immunization Module](https://medium.com/@praneeth7077/week-5-progress-on-immunization-module-c23cabc75a21) |
| Week 06 | [Week 6: Limited Progress Due to Travel, but Backend Work Underway](https://medium.com/@praneeth7077/week-6-limited-progress-due-to-travel-but-backend-work-underway-220ebae9c515) |
| Week 07 | [GSoC 2025 with OpenMRS Week 07](https://medium.com/@praneeth7077/gsoc-2025-with-openmrs-week-07-5d5993e39483) |
| Week 08 | [GSoC 2025 Week 8 Update: Valuable Feedback from the Community](https://medium.com/@praneeth7077/gsoc-2025-week-8-update-valuable-feedback-from-the-community-4e0c0f7d8e80) |
| Week 09 | [GSoC Week 9 Progress: Immunization Module, Playwright Testing Ahead](https://medium.com/@praneeth7077/gsoc-week-9-progress-on-immunization-module-playwright-testing-ahead-3a68d52e5a08) |
| Week 10 | [Week 10 GSoC Update](https://medium.com/@praneeth7077/week-10-gsoc-update-e1121753fcc4) |
| Week 11 | [GSoC Week 11 Update: Adding NextDoseDate Field to Immunization Workspace](https://medium.com/@praneeth7077/gsoc-week-11-update-adding-nextdosedate-field-to-immunization-workspace-9f163ab12a6d) |
| Week 12 | [GSoC Week 12: NextDoseDate in Immunization Work](https://medium.com/@praneeth7077/gsoc-week-12-nextdosedate-in-immunization-work-98d3c20864a1) |

## Key Features Delivered

### 🎯 **Enhanced Immunization Form**

- Fixed Date & Time Picker overflow issues preventing layout breaks
- Added comprehensive validation (birth date, future date checks)
- Implemented vaccine batch information section with proper styling
- Added loading states during form submission
- Enhanced error handling with form validation
- Introduced free-text note support for additional documentation

### 📊 **Immunization History Visualization**

- Created new History Card component displaying vaccines and dose sequences
- Implemented chronological sorting of doses
- Added horizontal scrolling support for vaccines with 10+ doses
- Enabled pagination (5 items per page) for efficient data handling
- Optimized responsive design for desktop and tablet layouts

### 🚨 **Next Dose Tracking System**

- Added Next Dose Date field with smart validation
- Implemented visual status indicators:
  - 🔴 Red flag for overdue/due vaccinations
  - 🟢 Green flag for upcoming vaccinations

- Integrated across all immunization components
- Prevents scheduling next doses before vaccination dates

### ✏ **Complete Record Management**

- **Edit Functionality** : Full editing capability with workspace integration and form pre-population
- **Delete Functionality** : Safe deletion with confirmation modals and safety checks
- **Form State Management** : Seamless transitions between add/edit modes
- **User Feedback** : Success/error notifications for all operations

### 📋 **Enhanced Detailed Summary Table**

- Comprehensive overview with vaccine name, last dose number, and dates
- Smart Add button with pre-filled vaccine data
- Expandable rows revealing detailed sequence information:
  - Dose number within series
  - Vaccination date, Next dose date, Expiration date
  - Notes and Actions (Edit/Delete buttons)

## Technical Achievements

### 🔧 **Backend Improvements**

- **FHIR Compliance** : All data structures follow FHIR Immunization resource standards
- **Pagination Fix** : Resolved limitation where only first 10 immunizations were displayed
- **Extension Support** : Added custom fields via FHIR extensions
- **API Enhancements** : Improved error handling and data fetching with `useFhirFetchAll`

### 🧪 **Testing & Code Quality**

- **Unit Tests** : Comprehensive testing for all major components
- **Playwright E2E** : Complete test coverage for immunization lifecycle
- **TypeScript** : Enhanced type safety across the codebase
- **Code Cleanup** : Removed unused imports, improved accessibility selectors

### 📱 **User Experience**

- **Responsive Design** : Optimized for tablet and mobile devices
- **Accessibility** : Improved screen reader support and keyboard navigation
- **Performance** : Efficient data loading and state management
- **Modern UI** : Clean interface following OpenMRS design patterns

## Impact

### For Clinicians

- ⚡ **Faster Decision Making** : Visual indicators show vaccination status at-a-glance
- 🛡 **Reduced Errors** : Smart validation prevents common data entry mistakes
- 📅 **Better Scheduling** : Next dose tracking improves appointment planning
- 📊 **Comprehensive Records** : Complete immunization history in one view

### For Patients

- 🔒 **Improved Safety** : Better tracking ensures timely vaccinations
- 📈 **Better Care** : Reduced risk of missed or delayed immunizations
- 📋 **Clear Records** : Transparent vaccination history

### For OpenMRS Community

- 🚀 **Modern Codebase** : Clean, tested, maintainable implementation
- 🌍 **Global Impact** : Ready for deployment in healthcare facilities worldwide
- 🔧 **FHIR Standards** : Compliant implementation for interoperability

## Resources

### Final Presentation

[![](https://img.youtube.com/vi/u9VGt1Dn5MY/maxresdefault.jpg "Google Summer of Code 2025 – Final Demo (OpenMRS Immunization & Vaccination Project)") ](https://www.youtube.com/watch?v=u9VGt1Dn5MY)

### Talk Thread

Project update thread: _To be created for community discussion_

> [@Gsoc 2025 : Immunization and Vaccination Schedule in O3 - Project weekly Updates & Discussion](https://talk.openmrs.org/t/gsoc-2025-immunization-and-vaccination-schedule-in-o3-project-weekly-updates-discussion/46100):
>
> Excited to Announce: GSoC 2025 Selection! heart I’m thrilled to share that I’ve been selected for Google Summer of Code 2025 with OpenMRS! tadamicroscope Project Title: Immunization and Vaccination Schedule in O3 teacher Primary Mentor: [@dennis] mechanic Backup Mentor: [@grace] This thread will be the space where I post updates and discussions throughout the summer. Feel free to engage, give feedback, or just follow along! glowing_starhammer_and_wrench Project Goals Enha…

### Final Evaluation Report

[Complete project evaluation and reflection](https://medium.com/@praneeth7077) - _Final evaluation blog post link_

## Future Work

Looking ahead, there are exciting opportunities to build on this foundation:

### 🔮 **Potential Enhancements**

- **Automated Reminders** : Integration with notification systems for upcoming vaccinations
- **Analytics Dashboard** : Population-level immunization coverage reporting
- **Appointment Integration** : Link next dose dates with scheduling systems

### 🤝 **Community Expansion**

- Bringing more contributors on board to enhance features
- Performance improvements for large datasets
- Integration with national immunization registries
- Advanced reporting and analytics capabilities

## Thoughts on GSoC

GSoC 2025 has been an incredible journey of growth, learning, and contribution to global healthcare. Working with the OpenMRS community has taught me the power of open-source collaboration in solving real-world healthcare challenges.

I’m deeply grateful to my mentors @dennis and @grace for their guidance, patience, and continuous support throughout this project. Special thanks to the entire OpenMRS community for their feedback, code reviews, and encouragement that helped shape this immunization module. And also special mentions to mentors of mentor @ibacher@dkayiwa and through out this Gsoc journey i would like to thank @mherman22@veronica @fanderson @jayasanka @beryl

This experience has not only improved my technical skills in React, TypeScript, FHIR standards, and healthcare software development, but also reinforced my commitment to contributing to open-source projects that make a real difference in people’s lives.

Looking forward, I’m excited to continue contributing to OpenMRS and helping improve healthcare delivery worldwide through technology.

* * *

**Repository** : [GitHub - OpenMRS ESM Patient Chart](https://github.com/openmrs/openmrs-esm-patient-chart/tree/main/packages/esm-patient-immunizations-app)

**Documentation** : [Complete weekly blog series](https://medium.com/@praneeth7077) 📚

---

<div class="post-metadata">

### Author: ![kmuiruri](https://talk.openmrs.org/letter_avatar/kmuiruri/32/5_5575768a8748004e209b776fc1b2916d.png) [@kmuiruri](https://talk.openmrs.org/u/kmuiruri)
#### Post date: [September 11, 2025, 2:04pm UTC](https://talk.openmrs.org/t/gsoc-2025-immunization-and-vaccination-schedule-in-o3-final-presentation/46980/2 "2025-09-11T14:04:59Z")

</div>

Great work on the immunization.

Two questions

1. Can the eleigibility alert be derived from the age of the patient versus the age as per the schedule. Where a prior dose is missed then the user is notified to start with that
2. Can we link immunization with stock module? Manufacturer, lot number and expiry would therefore be pulled from the stock module. This would also see to it that the vaccines are tracked via the commodity module

---

<div class="post-metadata">

### Author: ![chintu](https://talk.openmrs.org/letter_avatar/chintu/32/5_5575768a8748004e209b776fc1b2916d.png) [@chintu](https://talk.openmrs.org/u/chintu)
#### Post date: [December 11, 2025, 2:01pm UTC](https://talk.openmrs.org/t/gsoc-2025-immunization-and-vaccination-schedule-in-o3-final-presentation/46980/3 "2025-12-11T14:01:37Z")

</div>

> **[Table of Contents - SMART DAK IMMZ v1.1.0](https://smart.who.int/dak-immz/toc.html)**
