Reports Module
Financial Reports & Statements
Where you read the numbers that every other module already recorded — a live Overview, real double-entry financial statements, a simple-mode Income vs Expense view, and a manual log for tracking reports you’ve shared.
Start here
Before you start
Reports doesn’t hold any bookkeeping data of its own. Every number on every screen here is read live from whatever’s already recorded elsewhere — Sales invoices, Purchase bills, Expense claims, Receivables, and (for companies on double-entry books) the real General Ledger via Accounting.
That means there’s no setup to do before Reports “works” — if you have any recorded transactions anywhere in the app, the Overview tab already has something to show you. The one thing that changes what you see is your company’s accounting mode (set on the company record, not here): double-entry companies get the four real financial statements below; simple-mode companies get a document-basis Income vs Expense view instead.
What’s in here
Overview
The default tab — a real dashboard for the month you pick, not a static summary. It shows:
- Revenue, Operating Margin, Net Cash Flow, Receivables (AR) KPI cards, each with a %-change against the prior month.
- A Revenue vs Expenses trend chart and a Net Cash Flow chart, both trailing 6 months.
- Expense by Category — for double-entry companies this reuses Accounting’s own Profit & Loss expense lines (each Chart-of-Accounts expense account is a category); for simple-mode companies it sums the real
categoryfield already on Purchase order lines and Expense claim lines. - Receivables Aging — real, unpaid Sales invoices bucketed by how overdue they are, regardless of accounting mode.
- Operational Performance — real expenses grouped by department. Only Expense claims carry a department field anywhere in the schema, so this table is expense-only; revenue-by-department isn’t shown because there’s no real data to attribute it from.
Net Cash Flow is always the real cash-movement figure (bank inflow/outflow) no matter what basis you’re viewing — switching the basis filter only changes how the Revenue/Expenses KPI itself is read, not what actually moved through the bank.
Report Log
A manual tracking log, not a report generator — think of it as a filing record for reports you’ve already produced somewhere else (a board deck, an exported statement, a one-off analysis) and want a shared record of.
Click New Report and fill in a title, a type (Financial, Receivables, Payables, Projects, Expenses, or Sales), a period label, a status, an owner, and optionally which module/reference it relates to, a tracked amount, a variance %, and notes. Saving stamps last_run_at to now. There’s no computation behind this — every field is exactly what you typed.
Financial statements Double-entry companies
Companies with double-entry books get four extra tabs, each a real statement pulled straight from Accounting’s own ledger logic — Reports doesn’t recompute any of this itself, it just gives them a home alongside the Overview.
| Tab | What it shows |
|---|---|
| Profit & Loss | Income and expense accounts for a date range, with the net result. |
| Balance Sheet | Assets, Liabilities, and Equity as of a chosen date. |
| Statement of Equity | Opening balance, net income, and other equity movements reconciling to a closing balance, per range. |
| Cash Flow | The indirect-method Statement of Cash Flows — net income plus balance-sheet changes, classified into Operating, Investing, and Financing. |
Pick a date range (or as-of date for the Balance Sheet) and click the tab’s run button. These are read-only — there’s no save/export step here beyond what your browser’s print/copy tools already give you.
Income vs Expense Simple-mode companies
The equivalent view for companies with no ledger. There’s no Chart of Accounts to summarize, so this is built directly from real completed transactions instead:
- Income — Sales invoices with status Paid, dated within the range.
- Expense — Purchase orders with status Billed, plus Expense claims with status Reimbursed, both dated within the range.
These are the same “counted” statuses those modules already use elsewhere in the app — nothing in Draft, Pending, or unpaid/unbilled state shows up here.
Common tasks
Logging a report you generated
You ran the month-end Profit & Loss, sent it to a stakeholder, and want a record that it happened.
Open Report Log and click New Report
Give it a title like “March P&L — Board Copy.”
Set Type, Period, and Owner
Type “Financial,” period label “March 2026,” owner whoever’s responsible for it.
Set Status
Draft while you’re still preparing it, In Review while someone’s checking it, Published once it’s final and sent.
Save
It now shows up in the Report Log table for anyone else with access to this module, searchable by owner, type, or status.
Combining more than one company
Every tab above (Overview, all four statements, and Income vs Expense) has a Consolidated (include subsidiaries) toggle. Turn it on and pick which companies to combine — figures are summed together into one report. If any of the companies you’re combining use a different currency than the active one, you’re prompted to enter an exchange rate for each mismatched currency before it will run; there’s no automatic FX lookup.
Reference
Report Log statuses
| Status | Meaning |
|---|---|
| Draft | Being prepared — not yet ready to share. |
| In Review | Pending someone’s approval or sign-off. |
| Published | Final and shared. |
These statuses are self-managed — nothing in the app enforces a Draft → In Review → Published order, and any status can be set at any time.
What this module doesn’t do
Creating an entry there is bookkeeping about a report, not a computation. The actual numbers live in Overview, the four statements, or Income vs Expense — Report Log’s own amount_total/variance_percent fields are whatever you typed by hand.
Every screen here is read-only inside the app — there’s no built-in “export to PDF,” “email this report,” or recurring-schedule feature. Sharing a report means using your browser, or logging it manually in Report Log.
Operational Performance only ever shows expenses by department, because Sales invoices and Purchase orders don’t carry a department field in the schema — this isn’t a filter you can turn on, the data genuinely isn’t tracked that way.