Home / Help Center / pos-app / Reports / Key Reports
📊 Reports

Key Reports

Key Reports is the fastest place to check business health — one page with four tabs (Sales, Stock, GST, Profit) covering revenue trends, stock value, GST liability and profit margins, switchable without leaving the page.

📍 Menu path: Reports → Key Reports
👤 Who uses it: Roles with Reports permission (Export button and download links additionally need Export permission)
🏷️ Plan tier: advanced+

Overview

Key Reports is a single page with four tabs — Sales Report, Stock Report, GST Report and Profit Analysis — selected with the tab strip at the top. Each tab keeps its own filters and data independently of the others.

The active tab is written to the page URL as a ?tab= query parameter (?tab=sales, ?tab=stock, ?tab=gst, ?tab=profit), so you can bookmark or share a link straight to, say, the GST tab and it will open there directly.

The GST and Profit Analysis tabs are wrapped in a plan-tier gate: they only render for stores on the Advanced plan or above. Sales Report and Stock Report are available to any tier that can see the Reports menu at all.

Before You Start

Step-by-Step Guide

1 Sales Report tab — revenue, discounts and payment mix

The default tab when the page loads (?tab=sales).

  1. Pick a date range with the From/To date pickers, or use the This Month, Last Month or This Year quick-range buttons in the Period bar.
  2. Choose how the trend chart is bucketed with the Daily / Weekly / Monthly dropdown next to the date pickers.
  3. Click Refresh to reload; the button shows a spinning icon while loading.
  4. Read the four stat cards — Total Revenue, Avg Order Value, Total Discount, Total Tax — then scroll to the Revenue Trend bar chart (Revenue/Tax/Discount per bucket).
  5. Check the Payment Method Breakdown donut chart and the Top Customers table (rank, name, orders, revenue) below it.

2 Stock Report tab — live inventory health

  1. Use the All Products / Low Stock / Out of Stock filter buttons to switch which product list is shown.
  2. Type in the search box to filter by product name or SKU.
  3. Click any column header (Product, SKU, Category, Stock Qty, Min Level, Stock Value, Cost, Price) to sort by that column; click again to reverse the sort direction.
  4. Read the five summary cards — Total Products, Total Items, Inventory Value, Low Stock count, Out of Stock count — above the table.
  5. Scroll to Recent Stock Movements (last 20) to see recent restocks, sales, adjustments and their before/after quantities.
  6. If you have Export permission, click Export to download the currently filtered/sorted product list as a spreadsheet.

3 GST Report tab — output tax and GSTR-1 export

Only visible on the Advanced plan or above; requires the gst feature.

  1. Set the date range (defaults to the current month) and click Refresh.
  2. Review the six stat cards: Taxable Amount, Total GST, CGST, SGST, IGST, Invoices.
  3. Scroll to Tax Rate Summary — GST collected grouped by rate slab (0/5/12/18/28%).
  4. Scroll to HSN-wise Summary (GSTR-1) — taxable value, CGST/SGST/IGST and total tax per HSN code; this table stays empty until you assign HSN codes to your products.
  5. Scroll to B2B Invoice Register (GSTR-1 Table 4) — only customers with a GSTIN on file appear here; it stays empty until you add GSTIN to customer profiles.
  6. Check the B2C Summary (GSTR-1 Table 7) card, then click Download GSTR-1 JSON to get a JSON payload (B2B invoices, B2C summary, HSN details) formatted for upload to the GST portal.

4 Profit Analysis tab — margins and cost of goods sold

Only visible on the Advanced plan or above; requires the reports feature.

  1. Set the date range, or use the This Month / This Year / Last Year quick-range buttons, then Refresh.
  2. Review the six stat cards: Revenue, COGS, Gross Profit (with margin %), Expenses, Net Profit (with margin %), Discount Given.
  3. Read the Monthly Profit Trend bar chart comparing Revenue, COGS and Gross Profit over time.
  4. Check Top Profitable Products (revenue and gross profit per product — this table stays empty until Cost Price is set on your products) and Profit by Category side by side, each with its own Export button.

Every Field & Button, Explained

Field / ButtonWhat it does
Tab strip (Sales / Stock / GST / Profit)Switches the active report; the choice is written to the URL as ?tab= so each tab is directly bookmarkable/shareable.
Period / date range + quick-range buttonsFrom/To date pickers plus This Month, Last Month, This Year (and Last Year on Profit) one-click presets shared across the Sales, GST and Profit tabs.
Daily / Weekly / Monthly dropdownSales Report only — controls how the Revenue Trend chart buckets data.
All Products / Low Stock / Out of Stock filtersStock Report only — switches which product subset the table and export show.
Search box (Stock Report)Client-side filter on the currently selected product subset, matched against name or SKU.
Sortable column headers (Stock Report)Click a header to sort ascending, click again to reverse; sort state is kept in the page while you filter or search.
Refresh buttonRe-runs the active tab's API call immediately; disabled and spinning while a request is in flight.
Export buttonDownloads the current tab's table (Stock Report products, GST rate/HSN/B2B tables, Profit top-products/category tables) as a spreadsheet; only shown to roles with Export permission.
Download GSTR-1 JSONGST tab only — direct download link (not a table export) that produces a JSON payload with B2B invoices, B2C summary and HSN details, formatted for the GST portal's JSON upload.
Recent Stock Movements tableStock Report only — last 20 inventory movements with type, quantity change, before/after quantity and note.

Tips & Best Practices

Troubleshooting & FAQ

Why don't I see the GST or Profit Analysis tab content?
Both tabs are gated to the Advanced plan tier or above (GST also needs the gst feature, Profit needs the reports feature). Upgrade your plan if you need them.
The HSN-wise Summary table on the GST tab is empty.
It only shows rows for products that have an HSN code assigned. Go to Products and add HSN codes, then refresh the report.
The B2B Invoice Register is empty even though I sell to businesses.
That table only includes customers who have a GSTIN saved on their profile. Add GSTIN under the customer's details to have their invoices appear there.
Top Profitable Products on the Profit tab shows "No data — ensure costPrice is set on products".
Gross profit can only be calculated when a product has a Cost Price. Edit the product and fill in Cost Price, then refresh.

🧑‍💻 Developer Notes

Source component(s):

  • frontend-app/packages/pos-react-lib/src/pages/Reports.jsx

Backend endpoints used:

  • GET /reports/sales (params: from, to, groupBy)
  • GET /reports/stock
  • GET /reports/gst (params: from, to) — gated by TierGate feature="gst"
  • GET /reports/gst/gstr1 (direct download link, params: from, to)
  • GET /reports/profit (params: from, to) — gated by TierGate feature="reports"

Related tables (db-core repositories):

  • Sale
  • SaleItem
  • Product
  • Inventory
  • InventoryMovement
  • Customer

Redux slices:

  • scope (selectCurrentScope / getScopeQueryParams)

Feature flag key: reports (requires advanced plan tier or above)

Tab state is synced to the URL via React Router's useSearchParams, so the active tab survives a page refresh. GST and Profit tabs are each wrapped in a TierGate component that checks a different feature key ("gst" vs "reports") but the same "advanced" minimum tier. Each tab manages its own AbortController so switching tabs quickly cancels any in-flight request instead of racing it.