My name is Akhil, and I am an Undergraduate (B.Tech) student interested in contributing to OpenELIS Global through GSoC 2026.
I am particularly excited about the Generic Reporting Framework project — building a UI-based ad-hoc reporting system that empowers lab workers to generate patient reports without developer intervention is a real and meaningful problem, and I’d love to work on it.
My skills:
HTML, CSS, JavaScript (frontend)
Java + Spring Boot (backend REST APIs)
PostgreSQL, Docker, AWS (EC2, RDS, ECR)
GitHub Actions (CI/CD pipelines)
I am committed to learning and contributing actively. I have already cloned the repository and am exploring the codebase.
This experience gave me hands-on familiarity with Java Spring Boot REST APIs and full-stack architecture — which I believe directly applies to the reporting framework project.
hi @AkhilKumar thanks for bringing this up, so we have really had our hands lay down some good foundation onto the reporting framework you can take a look here
Currently OpenELIS currently relies on hard-coded, pre-designed reports. Any request for a new report or slight modification requires a developer to alter SQL queries and deploy a new version. This project aims to decouple report generation from the core codebase by introducing a Generic Robust Reporting Framework. The framework will empower administrative users to create, configure and execute dynamic patient ad-hoc reports directly from the UI using metadata-driven definitions without writing any code.
Nice to see your interest in the reporting framework!
Since you’re starting to explore the codebase, I tried to map out the current reporting flow in a simple way while going through it sharing it here in case it helps you as well.
At a high level, the flow looks like this:
The UI sends a request (with filters) to the backend.
ReportRestController receives the request.
It uses ReportImplementationFactory to decide which report class to use (based on report name).
A specific implementation (like PatientClinicalReport) is selected.
That class:
fetches data (patients, samples, analyses, results)
processes and maps it into a flat structure (report beans)
Finally, the data is passed to JasperReports to generate a PDF.
One thing that stood out to me while exploring this is:
Each report requires its own Java class
Data fetching + transformation + formatting are tightly coupled
Extending the system often means adding new classes and logic
This seems to be one of the reasons why a more flexible / generic reporting approach is being discussed.
If you haven’t already, you might want to look into:
ReportImplementationFactory
PatientClinicalReport
PatientReport (base class)
Understanding these gives a pretty good picture of how things currently work.
Happy to discuss more if you dive deeper into this — I’m also exploring this area and still learning