Skip to content

2.7.0

Released: TBD

Highlights

  • A new Financial KPI dashboard answers the three questions owners actually ask — will I run out of cash, how efficiently am I running, are sales converting? — as a single query of ready-to-render tiles, each with a period-over-period trend and a health flag. No new tables; it's computed from the ledger and sales pipeline that already exist.

Added

  • financialKpis(startDate, endDate) query returning six KPI groups (profitability, liquidity, working-capital efficiency, receivables & payables, growth, sales conversion) — 23 KPIs including DSO/DPO/DIO, the cash conversion cycle, current/quick ratio, gross/net margin, revenue & net-income growth, quote win rate, and order fulfillment rate. Each tile carries a value, format, previousValue, changePct, trend, and health. See Financial KPI Dashboard.
  • New GraphQL types FinancialKpis, FinancialKpiGroup, FinancialKpi and enums KpiFormat, KpiTrendDirection, KpiHealth.

Changed

  • Nothing changed in existing behaviour — this release is purely additive.

Fixed

  • N/A.

Migrations

  • None. The KPIs are computed from posted ledger entries, the quote/order report repositories, and the aged receivable/payable summaries. No new tables, no backfill, and no new RBAC Path (the query reuses Path.DASHBOARD, the same permission as getNetIncomeKpi).

Frontend impact

  • Call financialKpis(startDate, endDate) once per dashboard load (default the range to the current month / the dashboard date picker).
  • Render one section per group (group.label), one tile per kpi.
  • Render kpi.value by kpi.format: CURRENCY → money, PERCENTAGEvalue%, RATIOvalue×, DAYSvalue days, NUMBER → plain.
  • kpi.value == null means "not enough data" (e.g. a ratio with a zero denominator) — render a muted dash, not 0.
  • Show a trend chip from kpi.trend + kpi.changePct. Colour the tile from kpi.health (GOOD/WARNING/BAD/NEUTRAL), not from trend direction — for lower-is-better KPIs (DSO, DIO, CCC, overdue %, opex ratio) a downward trend is good and health already encodes that.
  • kpi.description is a ready-made one-line tooltip.

Versioning notes

  • Bumped with uv run python scripts/bump_version.py 2.7.0 --changelog-stub.
  • Deploy order: none — additive schema only, no migration. Frontend can adopt the query whenever it's ready; the getNetIncomeKpi tile keeps working.
  • This is Feature 1 of a two-part analytics push; the heavier standalone reports (cash-flow forecast, customer profitability, project P&L, AR collections effectiveness, inventory turnover / dead stock, ITBMS liability) are the planned fast-follow — see the Future additions section of the feature page.