OpenELIS Reporting Prototype – Feedback Request
Hi everyone,
I wanted to share a small prototype I’ve been working on for the OpenELIS reporting framework and get your feedback on whether this direction makes sense.
Over the past few weeks, I’ve been trying to understand how the current reporting system is structured and how reports are generated. Based on that, I explored a metadata-driven approach, where reports are defined as database records instead of Java classes.
Prototype Scope
- Dynamic query construction using JPA Criteria API
- Metadata-driven report definition:
- datasets
- fields
- filters
- columns
- Basic separation between:
- query definition
- query execution
- output rendering (CSV)
Supported Features
- FIXED filters (applied silently)
- PROMPT_USER filters (validated at runtime)
- Basic whitelist/validation to keep query construction safe
The goal here was mainly to validate the core query-building approach and safety model, not to fully generalize everything yet.
Feedback I’m Looking For
- Does this approach align with the future direction of the OpenELIS reporting framework?
- Are there any suggestions on how I could better adapt this to fit upcoming plans or architectural goals?
I’d really appreciate any guidance or advice. I’m happy to learn from feedback and iterate on this further.
Context from Yesterday’s Meeting (16th April)
I found the suggestions around:
- FHIR analytics / data pipelines
- CQRS
really useful, and I’ve started exploring how this design could align with those ideas.
At a high level, I’m thinking of this as:
- a potential read-model layer (in line with CQRS concepts)
- something that could later integrate with pipeline-based analytics systems
But I’m still exploring this, so any guidance here would be really helpful.
Flow Explanation (Simple)
At a high level, the prototype follows this flow:
-
A report is defined using metadata(db record):
- datasets
- fields
- filters
- columns
-
The system dynamically builds a query using the JPA Criteria API
- FIXED filters are enforced automatically
- PROMPT_USER filters are taken as input and validated
-
The query is executed against the database
-
Results are formatted into CSV output
The idea is to keep report logic outside of Java code and instead drive everything through structured metadata, making it easier to extend and modify reports without code changes.
Links
- Prototype: https://dynamicreportengine-709628627841.europe-west1.run.app/
- Repository: GitHub - Junaidarmaan/DynamicReportEngine · GitHub
Note
This is a minimal prototype intended to demonstrate the core idea. Some parts (such as field path resolution and join handling) are intentionally hardcoded or simplified to validate the approach against the OpenELIS entity model.