Skip to content

Back office

Reports & analytics

The 57 reports, what the numbers mean and exporting files.

8 min read

On this page

For owners, managers, accountants and anyone given Reports (reports.view). Reports (/reports, in the sidebar under Management, and from the dashboard’s Sales today card) gathers 57 reports in nine sections. Each section also needs its own permission, and some reports one more (below). Files (PDF, Excel, CSV) need reports.export.

The overview

/reports opens on the business at a glance, for the branches you can see:

  • Today against the same weekday last week, and this month so far against the same days of last month: net sales, bills, covers, average bill.
  • Sales by hour today against that weekday, and the last four weeks day by day.
  • This month’s top items (What sells), the branches side by side and how people paid.
  • To act on: items to reorder, batches expiring within three days, kitchen tickets late today, supplier invoices to review. Each number is the row count of the report it opens.
  • Freshness: when the sales summaries were last brought up to date.
  • The sections you may open, each with its reports.

A report page

  • Period: quick choices (today, yesterday, last 7 / 30 / 90 days, this and last month, this year, last 12 months; for events also the next 90 days and the last and next 90) or two dates. Reports of now (stock on hand, low stock) have no period; the balance sheet takes one date.
  • Branch: every branch where you may see that report, or one. Your role counts branch by branch: if you manage one branch and wait tables at another, the reports show the branch you manage. The balance sheet, cash flow and loyalty cover the whole business and take no branch.
  • Filters where they apply: store, station, ingredient, days, event type, group by.
  • Compare with the period before (sales by day, hour, week, month, branches, order types; supplier spend; profit & loss): the same number of days just before, shown on every KPI and as extra columns.
  • KPIs at the top, then the chart (hover or tab to it and use the arrow keys to read each point), then the table — sortable by any column, totals at the foot, the first 100 rows with Show all (the page holds 500; a file holds every row).
  • Checks: where a figure can be proved against another record, the proof is shown — Ties out to the ledger (sales), Agrees with the ledger (stock valuation against the inventory accounts — for every branch, to those who may see the accounts), Balances (balance sheet), Ties to the cash accounts (cash flow). A failed check says by how much.
  • Notes: the definitions the figures use.
  • Freshness under the title: From the sales summaries, refreshed … or Live, whether it came from the cache, how long it took. Refresh takes in the latest sales and recomputes.

Long periods (more than about three months) and the heaviest reports (retention, purchase trends) are prepared in the background: the page says so and fills itself when ready — you can leave and come back.

What “net sales” means

The same everywhere, and the same as the accounts: what the items sold for, net of VAT included in the price, less discounts, before service charge and delivery fees, on the day the sale was closed (or captured offline, or invoiced with a tax invoice before it closed) in the business’s time zone. A refund is reported on the day it was paid and never changes the day of the sale. Payments taken exclude tips; tips have their own column. Sales reports refresh within about ten seconds of a sale closing (at most a minute).

The sections

Section Needs (with reports.view) Reports
Sales — By day · by hour (with a week-by-hour map) · by week · by month · products · categories · branch comparison · by cashier● · by waiter● · by table · by order type (and channel) · payment methods
Inventory inventory.view Stock on hand · valuation · movement · low stock · fast movers · slow movers · dead stock · expiring soon · expired · variance · consumption
Kitchen production.view Tickets by day · preparation times (by station or dish) · delays · re-fires · station performance
Bar beverage.reports Drink sales · bottle usage · spirit usage · wine · kegs · bar variance · bartender performance
Café cafe.reports Coffee sales · beans · milk · yield · café waste · barista performance
Procurement procurement.view Supplier spend · purchase trends · price history · supplier delivery performance
Customers customers.view Visits · lifetime spend · average spend · retention · loyalty (loyalty.view and every branch — members and points belong to the whole business)
Events events.reports Event profitability · events by type and month
Accounting reports.financial + accounting.view, every branch Profit & loss · balance sheet · cash flow · expenses · cost of sales

● Sales by cashier and by waiter show other people’s figures and need performance.view. Product and category cost and margin need menu.costs; without it those columns are not there. Stock values and costs in the inventory reports need menu.costs or inventory.manage, as on the inventory screens; without them the reports show quantities. On a shared till signed in by PIN, the sensitive permissions are not used, whoever you are — sign in with your password to see them.

Reading some of them

  • Margins are over the sales that have a recipe cost, day by day. An item without a recipe shows its sales and no margin; a recipe added mid-month counts from its first day; staff meals and gifts are not the cost of these sales (they are in Consumption). The KPI says how much of the period’s sales were costed.
  • Low stock lists items below their reorder level or minimum, among items with levels set or used in the last four weeks, with days of cover at the recent rate of use.
  • Dead stock and Expiring soon take a number of days.
  • Kitchen delays count tickets past their station’s target time; preparation time is fire to ready.
  • Price history opens on the ingredient with the most price changes; prices are per stock unit, one line per supplier.
  • Supplier delivery performance: on time against the promised date, fill rate (received against ordered), rejected goods, lead time and the supplier’s rating.
  • Customers count only guests known by name (a walk-in cannot be followed); lists show the guest’s name and code, never contact details.
  • Events show functions held and those booked to come; a function with no costs yet says so rather than showing a 100 % margin.
  • Profit & loss, expenses, cost of sales read the posted ledger, so a sale shows there once the accounting has posted it (usually at once).

Files: PDF, Excel, CSV

Export on any report (with reports.export) prepares the file in the background with exactly the period, branch and filters on screen, and every row. Two files leave the system only as their module allows: the list of named guests (Lifetime spend) needs customers.export, and cashier and waiter figures need performance.export. You can have five files being prepared at a time. My exports (/reports/exports) lists your files as they are prepared; you are also notified when one is ready.

  • PDF — for reading and printing: the business, report, period and filters, KPIs, checks, the chart, the table with its header on every page, totals, notes and page numbers. Wide tables print landscape.
  • Excel — for working with: real numbers and dates, currency formats, a frozen header with filters, a totals row, and an About sheet with the filters, who ran it, when and the checks.
  • CSV — for other systems: UTF-8 (opens correctly in Excel), amounts in the currency’s units, units in the headers.

Download works while you are signed in, with the permissions the report needs at every branch the file covers — including what shaped it (a product file with costs needs menu.costs). Copy link makes a link that works for 24 hours without signing in (less when the file is removed sooner) — for your accountant or a partner; anyone with the link can download that one file, so share it with care. Files are kept 30 days, then removed. Every export, download and link is recorded in the audit log.

The files are stored in your hosting under public_html/jupitapos/reports/, but the web server refuses them there: they leave only through the application.

For the administrator

  • node ace reports:rebuild [--business=<slug|id>] [--from=YYYY-MM-DD] [--to=YYYY-MM-DD] recomputes the sales summaries (safe at any time).
  • The worker must run the analytics, reports and exports queues; the drain runs every minute and a nightly refresh at 01:40.
  • Without Redis the pages still work, computed on request and not cached, but nothing runs on the queues: the summaries catch up when Redis is back (or with Refresh), and an export cannot be asked for until then.
  • Reports open for the branch you are working in: if you see not allowed, switch to a branch where your role includes reports.