P&L report

Income statement by month / quarter / year, PDF + CSV export.

The Profit & Loss report is Kiravy's first financial-statement output. It produces an income statement for any client in the same three-column layout an LHDN-style P&L uses: revenue → COGS → gross profit → expenses → net profit.

Open from any client → ReportsP&L.

What it covers

  • Revenue — every account_type = 'revenue' line in the period
  • Cost of goods soldaccount_type = 'cogs'
  • Gross profit — derived (revenue − COGS)
  • Expensesaccount_type = 'expense'
  • Net profit / loss — derived (gross profit − expenses)

Balance-sheet accounts (asset / liability / equity / tax) aren't shown here — the P&L only does the income statement. Those accounts already appear in the Trial balance report (which proves debits equal credits); a full Balance Sheet report is still to come.

Transactions with type = 'transfer' are excluded from the P&L. They aren't revenue or expense — just same-client cash movement.

Picking the period

Top of the page: a period selector with three granularities:

  • Month2026-05
  • Quarter2026-Q2
  • Year2026

Defaults to the current month. Use the arrow buttons to step backward / forward, or type a token directly into the URL (?period=2026-Q1) for a shareable link.

[Screenshot pending] P&L period selector with month/quarter/year toggle and prev/next arrows

Period-over-period comparison

If the prior period has data, Kiravy automatically shows two extra columns on screen:

  • Previous — the same period one cycle ago
  • Δ % — percentage change, colour-coded (green up, red down)

The deltas help spot anomalies at a glance — "why is rent up 80% from last month?"

Comparison columns are NOT included in exports (PDF / CSV) — they're a screen-only convenience. If you need them in a deliverable, take a screenshot or export both periods separately and join.

How amounts are computed

  • The P&L is read straight from the journal (the ledger), not from the raw transaction list — see How Kiravy's general ledger works
  • Because every entry posts SST to its own tax account, SST is never double-counted as revenue or expense — the P&L only ever sums the tax-exclusive (net) revenue and expense amounts
  • Cancelled and voided entries are excluded (their reversals net them to zero)
  • Soft-deleted transactions are excluded

The layout

Three columns, LHDN-style:

Col 1Col 2Col 3
Line item amount (account code + name)Subtotal for the sectionNet contribution to the section above

So for Revenue, each account's amount lives in col 3, and the section's total lives in col 3 too. For COGS, line items go in col 1, subtotal in col 2, and the deduction (subtracted from revenue to get gross profit) shows in col 3. Same shape for Expenses.

[Screenshot pending] Filled-in P&L showing three-column layout with revenue lines, gross profit divider, expense lines, and net profit footer

Warnings the report surfaces

Two banner alerts appear at the top when relevant:

Unclassified transactions

Transactions in the period that don't have an account_code set. The report shows you a count and the total RM amount, with a link to Settings → Categorisation (or open an engagement) to fix them.

These are excluded from the P&L totals until categorised — so the numbers below the warning aren't lying, they're just incomplete by that amount.

Deductibility flags

A count of transactions flagged by tax deductibility as non-deductible or partial. These rows stay in the P&L totals (they're still expenses, just not deductible for tax). The warning links out to a filtered transaction view so you can review what'll be disallowed at year-end.

Exporting

Two formats, both via buttons at the top:

FormatWhat you get
PDFA4-sized rendered statement, suitable for client deliverables. Comparison columns dropped.
CSVOne row per line item with columns Section / Code / Account / Amount. UTF-8 BOM included so Windows Excel opens cleanly.

File names are auto-generated as pnl_[client-slug]_[period].pdf (or .csv).

PDF generation can take 20–30s on the first export after the server's been idle (cold start of the renderer). Subsequent exports in the same session are sub-second.

Drill-down

Currently none. Clicking a line in the P&L doesn't navigate to the transactions making it up. If you need to see the underlying entries for 500-200 Rent in May:

  1. Note the account code from the P&L
  2. Go to Transactions
  3. Filter by Account = 500-200 + Date range = May

A native drill-down link is on the roadmap.

Permissions

RoleCan do
Partner / ManagerEverything — view, export, switch period
StaffView + export for assigned clients
ViewerView only — the export buttons are hidden

What's coming

  • Drill-down from line items into the transactions
  • Balance Sheet report — assets / liabilities / equity (the Trial balance is live today)
  • Cash flow statement
  • Custom date ranges (today only month / quarter / year)
  • Multi-client consolidation (for portfolio reporting)

What's next