My name is Rakesh Honawad, and I’m currently preparing for GSoC 2026 with OpenMRS.
I’ve successfully set up OpenMRS locally and cloned the openmrs-core repository. I’ve started exploring how the platform handles soft deletion using the voided flag in classes like BaseOpenmrsData, Obs, and Encounter.
I’m particularly interested in the Archiving Voided Data project idea. From what I understand, OpenMRS currently keeps voided records in the database indefinitely, which can cause tables to grow very large over time.
I’m trying to understand:
How voided records are currently filtered across services and queries.
Whether there have been previous discussions or approaches about archiving old voided data.
Which parts of the codebase would be the best starting point for exploring this feature.
Any guidance on where to start exploring or areas of the codebase that would be helpful to read would be greatly appreciated.
Thanks @wedson, I appreciate the guidance!
I’ve already set up the OpenMRS platform locally and started exploring the openmrs-core codebase, especially the BaseOpenmrsData class to understand how the voided mechanism works.
I’ll go through the developer guide you shared as well. Thanks again!
I am currently exploring the OpenMRS core codebase while waiting for my JIRA access. My goal is to better understand the program workflow and how patient states are managed in the system.
So far, I have been reading and tracing the following classes in the openmrs-core API module:
PatientProgram
PatientState
ProgramWorkflow
ProgramWorkflowState
From what I understand, the workflow structure looks like this:
A patient can be enrolled in a program (for example HIV treatment), and within that program they transition through different workflow states such as Enrolled, On Treatment, and Completed. These states are represented by PatientState objects.
I also noticed that OpenMRS uses voiding instead of deleting records. When a state is voided, it remains in the database for audit/history purposes but should not appear in the active workflow or UI.
For example, methods like:
transitionToState()
voidLastState()
getCurrentState()
statesInWorkflow()
in PatientProgram seem to control how patient states change and how voided states are handled.
While waiting for JIRA access, I plan to continue exploring how these methods are used and reviewing related tests to better understand the expected behavior.
If there are any specific areas in the program workflow or patient state management that would be good for beginners to investigate, I would appreciate any guidance.