Motivation
Intent reports: support fixed filter: expressions only, and the report page renders on screen only. Operational reporting in any business application needs (a) user-set parameters - a from/to date range, a counterparty, an amount threshold - and (b) export (XLSX at minimum; PDF/print next). Without them, every list a bookkeeper needs to hand to an auditor is a screenshot.
Proposal (discussion-first)
reports.parameters: - declared user parameters ({ name, type: date|number|string|relation, target: <dimension/field>, op: ge|le|eq|like }) rendered as inputs above the report; the generated query binds them.
- Export: an XLSX (and CSV) download of the current result set - a generic endpoint on the generated report service + a button on the report page.
- Computed bucket columns: a declarative
bucket: column kind - bucket(CURRENT_DATE - due, [30, 60, 90]) - so ageing reports (receivables 0-30/31-60/61-90/90+) are report definitions instead of hand SQL.
Why upstream
(1) and (2) benefit every generated report immediately; (3) makes the standard financial ageing family expressible. All three are template/generator work with no model migration.
Motivation
Intent
reports:support fixedfilter:expressions only, and the report page renders on screen only. Operational reporting in any business application needs (a) user-set parameters - a from/to date range, a counterparty, an amount threshold - and (b) export (XLSX at minimum; PDF/print next). Without them, every list a bookkeeper needs to hand to an auditor is a screenshot.Proposal (discussion-first)
reports.parameters:- declared user parameters ({ name, type: date|number|string|relation, target: <dimension/field>, op: ge|le|eq|like }) rendered as inputs above the report; the generated query binds them.bucket:column kind -bucket(CURRENT_DATE - due, [30, 60, 90])- so ageing reports (receivables 0-30/31-60/61-90/90+) are report definitions instead of hand SQL.Why upstream
(1) and (2) benefit every generated report immediately; (3) makes the standard financial ageing family expressible. All three are template/generator work with no model migration.