Skip to content

[Reports] Epic: Module Reports #506

Description

@nielsdrost7

Parent epic for all reporting features: income vs expenses, VAT reports, tax reports, profit/loss reports, invoice group reports, and report builder. V1 parity required before launch.


Three tracks

Track Scope Issues Notes
A — Report Builder Band-based designer (header / group header / details / group footer / footer) with code-defined mason Bricks; configs stored as files in storage/, deliver-and-clone model; PDF generation for invoices & quotes consumes these templates Master story #130 → sub-tasks #521, #528 (Phase 1), #523, #519, #525 (Phase 2); then per-document template selection #411 (Phase 4); page-break support (#95) lands inside Phase 3 Status 2026-07-13: Phases 0–4 implemented on feature/130-report-builder (PR) — see #130 for as-built notes
B — Tabular reports v1-parity report pages: payment history, invoicing history, invoiced amount by client, sales by date, invoices per client — Filament pages + CSV export #145 Status 2026-07-13: implemented (PR)
C — Small items Email template variable for the invoicing contact #363 Status 2026-07-13: implemented (PR)

Phased roadmap (Track A detail)

Phase Work Issue(s) Depends on Acceptance criteria
0 ✅ Merge PR #575 (dompdf driver + invoice blade) PR #575 merged to develop
1 ✅ Pure-file storage service, manifest/bands schema, reports:sync-system command, brick registry harvest #521, #528 Storage round-trip test passes; clone copies folder + rewrites manifest; ../ in a slug is rejected; Company A cannot load Company B's template; sync command is idempotent
2 ✅ Builder UI: list/clone pages, five-band builder page, band-filtered bricks, brick config slide-over, move-to-band action #519, #523, #525 Phase 1 Builder page loads per band; save persists bands.json; band filtering excludes disallowed bricks; system templates are not editable or deletable
3 ✅ ReportRenderer, default invoice/quote system templates, page-break support #130 (master), #95 (portion) Phases 0, 1 Renderer output contains HTML for configured bricks and omits toggled-off fields; PDF bytes are non-empty via the dompdf driver; page-break-inside: avoid present when band "keep together" is on; golden-file HTML snapshot matches for invoice/default
4 ✅ Per-document template selection #411 Phase 3 Per #411's existing five test scenarios (adapted to disk-based slug resolution)
5 ✅ (parallel) Tabular reports (payment history, sales by date, invoiced-by-client, etc.) #145 Per #145's existing three Livewire test scenarios (naui95's spec, unchanged)
6 ✅ (parallel) Invoicing-contact variables in email templates #363 Scoped test criteria per #363, independent of the rendering pipeline

Architecture, storage layout, and security constraints are specified in #130. Key decisions (2026-07-04): pure-file storage, no DB tables; bricks defined only in code; one Mason canvas per band; fresh branch feature/130-report-builder, harvesting the old feature/145-report-builder branch (PR #532 closed, branch kept for harvesting).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    epicrefinedRefined with SMART plan / test suggestions

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions