Configuration and data models
Configuration and Data Models
JasperWho is built around a small set of interconnected models. Understanding them is the key to understanding everything else — from how reports are set up, to how renderings are stored, to how print jobs are dispatched.
This page is the reference you will come back to.
The Model Hierarchy
ReportContext
ReportConnectionConfig
ReportConfig
├── ReportParameter
├── ReportField
└── ReportResource ──(optional link)── CommonReportResource
ReportHistoryRecord
└── ReportPrintTask
Each level builds on the previous. A ReportConfig is the central entity — it connects a .jrxml template with a context, an optional data source, and all its parameters, fields and resources. Every time a report is rendered, a ReportHistoryRecord is created. If that rendering is sent to a printer, a ReportPrintTask is created on top of it.
ReportContext
A context is a label and visual tag you assign to report configurations to group and identify them. It carries no functional logic — it is purely organisational.
context_name
Display name of the context
context_description
Short description
context_text_color
Hex color for the label text
context_badge_color
Hex color for the badge background
context_border_color
Hex color for the badge border
Every ReportConfig requires a context. A context can be shared across any number of report configurations.
ReportConnectionConfig
A connection config represents a database connection that JasperWho can use as a live data source when rendering a report. If a report uses a SQL query defined in its .jrxml, JasperWho executes that query against this connection at render time and passes the result rows to JasperReports as field data.
connection_name
Friendly name for this connection
connection_driver
Database driver (see below)
connection_host
Hostname or IP
connection_port
Port (defaults to driver standard if empty)
connection_database
Database / schema name
connection_username
Username (stored encrypted)
connection_password
Password (stored encrypted)
connection_test_query
Optional SQL query used to verify the connection
connection_tested
Whether the connection has been successfully tested
Supported drivers:
mysql
MySQL
mariadb
MariaDB
pgsql
PostgreSQL
sqlsrv
Microsoft SQL Server
Connection status is derived from connection_tested:
approved
Connection has been tested successfully
unapproved
Never tested, or last test failed
A ReportConnectionConfig is optional per ReportConfig. Reports that use static example data or no SQL query at all do not require one.
ReportConfig
The ReportConfig is the core entity of JasperWho. It represents a single JasperReports template — the .jrxml file — together with everything JasperWho knows about it.
report_name
Display name of the report
report_description
Optional description
report_file_name
Internal filename of the stored .jrxml
report_width
Width extracted from the .jrxml
report_height
Height extracted from the .jrxml
report_query
SQL query extracted from the .jrxml (if any)
report_has_detail_band
Whether the template contains a detail band
report_context_id
FK → ReportContext
report_connection_config_id
FK → ReportConnectionConfig (nullable)
report_preview_base64
Base64-encoded preview image
report_thumbnail_base64
Base64-encoded thumbnail image
When a .jrxml file is uploaded, JasperWho automatically analyses it and creates the associated ReportParameter, ReportField, and ReportResource records. You then review and complete the auto-generated data (e.g. set example values, upload resource files).
ReportParameter
Parameters are the inputs passed into a report at render time — dates, IDs, filter values, flags, and so on.
parameter_name
Parameter name as defined in the .jrxml
parameter_data_type
Data type (e.g. String, Integer, Date)
parameter_required
Whether this parameter must be supplied
parameter_evaluation
Evaluation time from the .jrxml
parameter_example_value
Example value used for preview rendering
ReportField
Fields represent the columns returned by the report's SQL query — the data that populates the detail rows of a report.
field_name
Field name as defined in the .jrxml
field_data_type
Data type (e.g. String, BigDecimal, Date)
field_example_value
Example value used for preview rendering (when no live DB connection is used)
ReportResource
Resources are binary file assets embedded in the report template — custom fonts, images, sub-report .jrxml files, and similar.
parameter_name
Resource parameter name as referenced in the .jrxml
resource_file_name
Internal filename of the uploaded resource file
common_report_resource_id
FK → CommonReportResource (nullable)
A resource can either be uploaded directly for a specific report, or it can be linked to a CommonReportResource — a shared asset that can be reused across multiple report configurations.
CommonReportResource
A CommonReportResource is a shared file asset that can be linked to multiple report configurations. This is useful for assets that appear in many reports — a company logo, a shared font, a standard header sub-report.
resource_name
Display name
resource_description
Optional description
resource_file_name
Internal filename of the stored file
When a ReportResource is linked to a CommonReportResource, it uses the common file instead of its own. Updating the common resource automatically applies to all linked report configurations.
ReportHistoryRecord
Every time a report is rendered through JasperWho — via the frontend or the API — a ReportHistoryRecord is created. This record captures the full context of the rendering: what was requested, what JasperReports responded, and whether it succeeded.
report_config_id
FK → ReportConfig
trace_id
Unique identifier for this rendering run
output_type
How the PDF was returned (see below)
report_api_payload
The exact payload sent to JasperReports
report_api_response
The raw response from JasperReports
report_pdf_base64
Base64-encoded PDF (if stored)
report_pdf_file_name
Filename on disk (if stored as file)
report_thumbnail_base64
Base64-encoded thumbnail of the first page
status
Outcome of the rendering (see below)
Output types (output_type):
base64
PDF returned as Base64 string in the response
url
PDF stored as a file, URL returned
preview
Rendered for preview purposes only
none
PDF not returned (e.g. print-only flows)
Status values (status):
ok
Rendering succeeded, PDF received
render_fail
No errors reported but no PDF received
error
JasperReports returned one or more errors
unknown
Status cannot be determined
History records are retained for a configurable number of days (see Environment Configuration below). Thumbnails are generated asynchronously after the rendering completes.
ReportPrintTask
A ReportPrintTask is created when a rendered PDF is dispatched to a physical printer. It is always linked to a ReportHistoryRecord — you print a specific past rendering, not a report config directly.
report_config_id
FK → ReportConfig
report_history_record_id
FK → ReportHistoryRecord
trace_id
Unique identifier for this print run
broadcast_id
WebSocket broadcast channel ID
printer_name
Target printer name
copies
Number of copies to print
output_file_name
Filename of the PDF sent to the printer
output_base64_string
Base64 PDF (used by the print service)
error_message
Error detail if printing failed
status
Current print status (see below)
Status values (status):
pending
Task created, waiting for the print service to pick it up
printed
Successfully printed
error
Printing failed
unknown
Status cannot be determined
When a print task is created, its ID is broadcast over WebSocket (via Laravel Reverb). The C# print service receives this event, pulls the task data via the API, executes the print job, and updates the status back.
Audit Trail
Every model in JasperWho tracks who created and last updated a record, and with which API token. This information is available on all records via the withAudit query parameter in the API.
created_at
Timestamp of creation
created_by
User ID of the creator
created_by_token_id
API token ID used for creation (if via API)
updated_at
Timestamp of last update
updated_by
User ID of the last updater
updated_by_token_id
API token ID used for the last update (if via API)
Environment Configuration
JasperWho exposes several runtime settings via environment variables. These can be set in .env or as container environment variables.
APP_SCHEME
http
URL scheme used for generated links (http or https)
API_RATE_LIMIT_PER_MINUTE
10
Maximum API requests per minute per token
PURGE_HISTORY_DAYS
30
Age (in days) after which history records are purged
PURGE_PRINTTASKS_DAYS
30
Age (in days) after which print tasks are purged
PURGE_ORPHANED_FILES_DAYS
30
Age (in days) after which orphaned files on disk are purged
PAGINATION_DEFAULT_COUNT
25
Default number of results returned per API response