Financial Reports
Goal
Run core financial statements from the ledger: trial balance, balance sheet, profit & loss, general-ledger drill-down, and (when permitted) receivables / payables aging. Optionally Publish run to snapshot TB / BS / P&L.
Who it is for
Finance managers and accountants with accounting.view. Aging tabs additionally need sales.view (receivables) or purchasing.view (payables) and those modules enabled.
Preconditions
- Permission
accounting.viewon the route (no separate module meta key; missing permission redirects to Dashboard). - Chart of accounts and posted activity for meaningful balances.
- Open or historical dates that match the period you intend to analyze.
Open the screen
Accounting → Reporting → Financial Reports (path /reports). Title: Financial Reports. Subtitle: Trial balance, P&L, balance sheet and aging. Query ?tab= selects a tab id.
Steps
- Choose a tab:
- Always: Trial balance, Balance sheet, Profit & loss, GL drill-down.
- Conditional (probe succeeds): Receivables aging, Payables aging.
- Trial balance — review Code, Name, Debit, Credit, Total (hierarchical accounts).
- Balance sheet — Assets / Liabilities / Equity plus current earnings. Banner: Balance sheet is balanced. or Balance sheet does not balance.
- Profit & loss — basis Accrual or Cash; Income / Expenses / Net profit.
- GL drill-down — pick an account (All accounts or a lookup), then read Date, Code, Reference, Debit, Credit, Balance.
- Aging — total outstanding, as-of date, buckets Current / 1–30 / 31–60 / 61–90 / 90+, plus party detail.
- On TB / BS / P&L, use Publish run to store a versioned snapshot (Version · Generated · Hash; Stale icon when superseded). Toast: Report run published.
Result
Tables refresh from GET /reports/trial-balance|balance-sheet|profit-loss|ledger and aging endpoints. Empty: No data for this report yet.
Hard stops
- No
accounting.view→ Dashboard redirect. - Aging probe 403/404 → tab hidden silently.
- Unbalanced balance sheet still shows figures with an error-styled message.
- Cash-flow and CSV export exist in API/i18n but are not tabs on this Vue screen.