KPIs
Status
Stable — KPIs are fetched live from your tenant on every refresh.
The KPI tiles at the top of the Dashboard summarise the state of your business in four numbers.
The four tiles
| Tile | Source | Default colour rule |
|---|---|---|
| Revenue MTD | Sum of posted customer invoices, current month-to-date | Green ≥ target / Yellow 80–100% / Red < 80% |
| Cash position | Sum of bank journal balances + cash-on-hand | Green ≥ threshold / Yellow / Red |
| Open alerts | Count of open alerts by severity | Always shows Critical count if > 0 |
| Gross margin | Revenue MTD – COGS MTD, as percentage | Green ≥ target / Yellow / Red |
Each tile is clickable — opens a detailed drill-down view.
How values are computed
Revenue MTD
SELECT COALESCE(SUM(amount_untaxed_signed), 0)
FROM account_move
WHERE move_type IN ('out_invoice', 'out_receipt')
AND state = 'posted'
AND invoice_date >= date_trunc('month', CURRENT_DATE)The "MTD" reset happens at midnight in the workspace's time zone (set in Settings → Workspace). Customers in Europe/Sofia see the reset at 00:00 EET / EEST.
Cash position
SELECT COALESCE(SUM(aml.balance), 0)
FROM account_move_line aml
JOIN account_account aa ON aa.id = aml.account_id
WHERE aa.account_type = 'asset_cash'
AND aml.parent_state = 'posted'Sums every cash and bank account. Multi-currency tenants see the value converted to the workspace's display currency at the daily rate.
Open alerts
Count of alerts where state = 'open'. Critical alerts are shown prominently; Warning + Info are grouped.
Gross margin
SELECT
(SUM(CASE WHEN move_type IN ('out_invoice','out_receipt') THEN amount_untaxed_signed END) -
SUM(CASE WHEN move_type IN ('in_invoice','in_receipt') THEN amount_untaxed_signed END))
/ NULLIF(SUM(CASE WHEN move_type IN ('out_invoice','out_receipt') THEN amount_untaxed_signed END), 0) * 100 AS pct
FROM account_move
WHERE state = 'posted'
AND invoice_date >= date_trunc('month', CURRENT_DATE)A simple revenue-minus-direct-cost calculation. Customers with more sophisticated cost accounting (analytic accounts, separate COGS) see a configurable variant.
Refresh
The tiles refresh:
- Every 60 seconds in the background while the Dashboard is open
- Immediately on a relevant event (invoice posted → revenue updates; payment posted → cash updates)
- On manual refresh — pull-to-refresh on mobile, F5 on desktop
The numbers are live, not cached. There is no overnight batch.
Setting targets
Some tiles show a target line ("revenue track" — are we on pace for the month?). Configure these in Settings → Workspace → KPI targets:
| Target | Set how |
|---|---|
| Monthly revenue | Manual, set per month or as a recurring pattern |
| Cash threshold | One number; triggers the colour change at 80% / 50% |
| Gross margin target | One percent; triggers colour at 80% / 50% of target |
Without targets, the tiles still show the numbers, just without colour coding.
Drill-down
Click any tile for the detail:
- Revenue MTD → daily revenue chart for the month + top 10 invoices contributing
- Cash position → per-journal balance breakdown + last 30 days series (see Cashflow chart)
- Open alerts → opens the Alerts view filtered to open
- Gross margin → expense-category breakdown + trend
Multi-tenant or holding-company
If you have multiple workspaces (group of companies), each workspace shows its own KPIs. There is no consolidated view across workspaces today; it's on the roadmap.
For a workaround, use PLANA Business Cloud's multi-company features within a single tenant (Pro and Enterprise editions support multi-company chart of accounts).