Financial Dashboard
Live cash, receivables, payables and period P and L tiles that reconcile to the trial balance to the cent, with click-through to the underlying lines.
Real-time Financial KPIs at 100k AMLCash, AR, AP and period P&L, recomputed in under 20 ms even on a tenant with 100,000+ journal lines.
Why this module
Financial Dashboard
Reconciles to the cent
Cash, AR, AP and period P and L run off the same MoveLineQuery SQL engine as the suite's trial balance and financial reports. The dashboard does not re-derive the numbers a second, slightly different way, so what you see on a tile matches the report behind it exactly.
SQL, not row loops
Every KPI is one parameterised SQL pass per tile, with no per-row ORM materialisation of open AR or AP lines. The posted-only toggle and the period selector bust the cache and re-run cleanly, so a flipped switch never leaves a stale figure on screen.
Tiles that know your suite
Six core tiles always show; up to eight optional tiles light up only when the matching module is present, detected by probing the live registry. Absent modules contribute zero and never raise, so the same dashboard works on a base install or the full suite.
Day in the life
Monday morning, before the standup
You open one screen. Cash position, what is owed to you and overdue, what you owe and overdue, and the month-to-date revenue, expense and net, each with a delta badge against the prior month and a 30-day trend line. The oldest unpaid invoice's age is right on the receivables tile. A budget tile shows two of your active budgets are in overrun; you click through to them. Nothing was exported, nothing was reconciled by hand, and every figure ties to the trial balance you will pull later.
Edge cases
The cases most modules quietly ignore.
In the shipped code today, each one a place where a cheaper module silently does the wrong thing.
Flipping the posted-only toggle, or switching period mode and back, busts the transaction cache and re-runs every KPI. The dashboard invalidates its recordset before returning a fresh snapshot, so a changed setting never leaves a stale cached value on a tile.
The cash sparkline reconstructs an actual running balance. Entries dated before the 30-day window roll into an opening balance instead of being dropped, so the sparkline's endpoint equals the cash position scalar exactly rather than drifting from it.
When the prior-period baseline is zero, the delta badge returns 'no comparable baseline' instead of a divide-by-zero or a misleading percentage. The comparison window is always an equal-length trailing slice ending the day before the period starts.
Payable balances are stored signed (credit-side negative). The dashboard takes the absolute value so the payables tile shows the positive figure a user expects, not a negative number.
A credit-override drill honours the dashboard's chosen period window rather than the fixed last-30-day slice the KPI itself uses, and its upper bound is inclusive to end of day so items dated on the last day are not silently excluded.
Optional-module detection probes the live registry, not ir.module.module, so a module marked installed but absent during a partial reload simply contributes zero rather than raising an error on the whole dashboard.
A sparkline with fewer than two points renders nothing, and a zero-range (flat) series draws a horizontal mid-line instead of dividing by its zero range. The trend visual degrades gracefully on sparse or constant data.
What is inside
Built to do the job, end to end.
- Six core tiles, always on. Cash position (closing balance across bank and cash journals at the as-of date), receivables (total open and overdue, plus days overdue on the oldest item), payables (total open and overdue), and period revenue, expense and net for the selected window.
- Up to eight optional suite tiles. When the source module is installed, tiles surface pending approvals, active collections cases with total overdue, budgets in overrun (count of active budgets whose total actual exceeds total budgeted), credit-limit override signals, SEPA mandate dormancy, and year-end, period-close and FX revaluation runs.
- Needs-attention rail. Beside the trend charts, a rail surfaces day-to-day accounting hygiene from standard Odoo tables: overdue customer invoices and vendor bills, bank statement lines still to reconcile, posted entries flagged for review, the draft invoice and bill backlog, sequence gaps in posted journals, and entries posted without an inalterable hash. Each row that maps to records drills straight to them.
- Period selector and posted-only. Month, quarter or year to date, trailing 30 or 90 days, or a custom date range. A posted-only toggle restricts every figure to posted entries. Both re-run all tiles on change, with the cache busted so nothing stays stale.
- Sparklines and prior-period deltas. Thirty-day cash, revenue and expense trend lines, with the cash line built as a true cumulative running balance. Each money KPI carries a vs-prior-period delta badge computed over an equal-length trailing window with safe handling of a zero baseline.
- Period-context drill-throughs. Click a tile to open the lines behind it. Revenue, expense and override drills scope to the dashboard's date window rather than all-time, so the list you land on matches the number you clicked.
- Per-user, per-company record. The dashboard is a stored model, not a transient, so each user keeps one record per company and computed fields recompute live on read. Figures are always current; the selection persists between visits.
Honest about the edges
What this does not do, so nothing surprises you.
- Read-only. The dashboard posts no journal entries and changes no accounting state. It does not write its own audit rows; audit logging lives in the suite modules that change state.
- Overdue means anything past its maturity date as of today. There is no configurable cut-off, grace-day setting or aging-bucket parameter; the receivables tile does surface the oldest open item's age.
- The budget tile shows a count of active budgets in overrun (total actual above total budgeted), not a variance amount or percentage, and there is no per-line variance-threshold logic in this module.
- Tile counts are exactly six core tiles plus up to eight optional tiles for installed modules. There is no published render-time benchmark or timing guarantee.
- Optional tiles appear only when the matching suite module is installed. On a base install you get the six core financial tiles and nothing more.
odoo 19 community financial dashboard, accounting KPI dashboard odoo, cash position receivables payables dashboard, accounts receivable aging dashboard odoo, period P&L dashboard odoo community, CFO financial dashboard odoo, cash flow sparkline trend odoo, drill-down accounting dashboard, multi-company KPI dashboard odoo
Needs-Attention Rail, One Click to DrillOverdue invoices and bills, the bank reconcile and review backlog, and ledger-integrity signals on one rail, click any row through to the underlying records.
Control-Tower SignalsPending approvals, active collections, overrun budgets, expiring mandates and period-close runs, all on one screen.
Proven at scale
Validated on a tenant with 100,180 account.move.line rows and 50,000 posted invoices: every headline KPI renders in 10 ms (median) and 13 ms (p95), well under the 200 ms UI-response budget.
Languages
Available in 19 languages
The interface ships translated out of the box. Switch language in Odoo and the fields, menus, and messages follow.
Please log in to comment on this module