---
title: Sales report
order: 1
updated: 2026-07-12
---

# Sales report

The *Sales* tab is the default view of the dashboard — the one that opens when you land there. It merges what used to be a lightweight "Sales overview" and a separate "Sales report" into one purpose-built page: a single KPI strip, the full visual core (funnel, pipeline pulse, status flow, cycle-time, mode / revision / discount breakdowns, and the status / mode / outcome / queue donuts), the four analysis tables, and the recent-activity tables. Every number on the tab is scoped to the *From* / *To* date range set in the dashboard header, and everything is re-derived on the server from your enquiries, orders, deliveries, and quotation-send history — the browser only draws what the server returns.

This page explains every KPI, chart, table, filter, and the *Export PDF* / freshness controls, plus exactly how each figure is calculated so you can trust (and reconcile) the numbers.

## Open the Sales report

1. Open the *Dashboard* from the main navigation. The *Sales* tab is selected by default and is the first tab in the strip.
2. Set the window with the two date fields at the top of the header:
   - *From* — start date (interpreted as `00:00:00.000` on that day).
   - *To* — end date (interpreted as `23:59:59.999` on that day, so the end day is fully included).
3. The tab fetches once for the chosen `[From, To]` window and renders. Flipping the window back to a range you already viewed this session is instant (the result is cached in the browser).

The date fields guard against an inverted range: pick a *From* later than the current *To* and the *To* snaps forward to match; pick a *To* earlier than the current *From* and the *From* snaps back. Dates display and enter as `dd/mm/yy`.

### Which window it opens on

The dashboard opens on the *Default Date Range* saved in your personal settings — one of `Current Month`, `Past 30 Days`, `This Year`, `This Financial Year`, or `Last 365 Days`. Existing users who never set one default to *This Financial Year* (the Indian FY, 1 April → 31 March). Change the default under *Settings → Personalisation* — see [Personalisation](/docs/settings/personalisation#what-you-can-adjust). You can still pick any other window by hand from the *From* / *To* fields; the saved default only decides where the dashboard starts each time.

### Who can see it

The tab needs two permissions, both re-checked on the server for every request (a forged request without them gets a `403`):

- *View Dashboard* (`dashboard.view`) — access to the dashboard at all. Without it you get a plain "hello" greeting page and no data is fetched.
- *Sales report* (`dashboard.salesReport`) — the Sales tab itself.

Some of the value KPIs and recent-activity tables are additionally gated (see [Value KPIs](#value-kpis-so-delivered-pending) and [Recent activity](#recent-activity)). Permissions are managed under [Users & permissions](/docs/settings/users-and-permissions).

## The date range and how figures are timed

Every metric is bucketed against a specific date field, so it helps to know which one each uses:

- **Enquiries** are timed by their *enquiry date* (`dateOfEnquiry`).
- **Quotes sent** are timed by each individual quotation *send date* — one enquiry re-quoted five times contributes five sends, each dated when it went out.
- **POs received** are timed by the *PO date* recorded when the order's PO arrived — not by when the enquiry was raised. A PO landing this month against an enquiry from three months ago counts in *this* window.
- **Revenue / deliveries** are timed by the *delivery date* of approved delivery receipts.

Because a PO can land long after its enquiry, and one enquiry can yield several orders, the tab never assumes "one enquiry = one order". The [Conversion %](#conversion-) formula is built to stay sane under that reality.

### Maximum window

A custom window can span at most `3 years` (about `1098` days). The server rejects anything wider, a start after the end, or non-positive timestamps with a `400 Invalid period`. Within that limit any window is allowed.

## Instant loading & the freshness label

The Sales report is the heaviest calculation on the dashboard — one big MongoDB aggregation spanning enquiries, orders, deliveries, and the quotation-send queue. To keep it fast, results for the **five standard preset windows** are cached **once per firm** and shared across everyone in your firm, so the whole team sees the same snapshot and the numbers stay consistent.

The five cacheable presets are exactly: `Current Month`, `Past 30 Days`, `This Year`, `This Financial Year`, and `Last 365 Days`. When your current *From* / *To* window matches one of these preset windows to the day, the tab loads that shared firm snapshot and shows an *Updated …* label in the toolbar, next to *Export PDF*:

- *Updated just now / 5 min ago / 2 hr ago* — how long ago the figures were computed. The label refreshes itself roughly every 30 seconds so "just now" ages to "1 min ago" without a reload.
- **Refresh button** (the circular ↻ icon) — forces the server to recompute the snapshot immediately and resets the label to *just now*. Use it after a busy spell of new enquiries or POs when you want the very latest numbers.

The snapshot has a **12-hour** freshness window. The first time anyone in the firm opens a preset window more than 12 hours after it was last computed, it is recomputed once, stored, and served; within that window it opens instantly from cache. So the figures are never more than half a day stale without anyone pressing anything.

> **Custom windows** (any *From* / *To* you pick by hand that isn't one of the five preset windows) are always computed **live** and show **no** *Updated* label — they are fresh every time, which is why they take a moment longer to load. Custom windows are never written to the shared firm cache. The preset window itself is always derived on the server from the preset name (anchored to IST), so a tampered request can't poison the firm-wide snapshot with a bogus window.

## Quick-nav chips

A row of shortcut chips sits at the very top of the tab. Each jumps into the [Enquiry Bank](/docs/enquiry-bank/enquiry-bank-list) pre-filtered, so you can act on what a number is telling you:

- *All enquiries* — the full enquiry list, unfiltered.
- *Pending* — enquiries still awaiting a quotation.
- *Awaiting PO* — enquiries with a quotation submitted, no PO yet (status `submitted`).
- *Sales Orders* — the [Orders](/docs/enquiry-bank/orders) list.
- *Regret* — enquiries marked regret.
- *Lost* — enquiries marked lost.

These are navigation only; they do not change the numbers on the tab.

## KPI strip

The headline tiles sit below the toolbar. Most report KPIs carry a **delta pill** comparing the current window against the **immediately preceding window of the same length** (e.g. a 30-day window is compared to the 30 days before it). A pill reads `new` when the prior period was zero and the current one is positive, a signed `%` otherwise; the conversion tile shows a signed `pp` (percentage-point) change instead. Currency is formatted in the Indian style — `K` (thousand), `L` (lakh), `Cr` (crore).

### Report KPIs (always shown)

- **Enquiries** — count of enquiries whose *enquiry date* falls in the window. Clicking the tile opens the enquiry list.
- **Quotes sent** — total quotation *send events* in the window (across all enquiries). A single enquiry re-quoted many times adds one to this count per send.
- **POs received** — count of enquiries/orders whose PO arrived with a *PO date* in the window.
- **Revenue realised** — value of approved delivery receipts in the window, net of returns. Each delivered line is valued as `quantity × unit price × (1 − discount%) × (1 + tax%)` using the parent order's pricing; a return line subtracts.
- **Conversion %** — see [Conversion %](#conversion-) below.
- **Avg ticket** — total PO value ÷ PO count for the window (average order size, tax-inclusive).
- **Avg cycle (enq → PO)** — average number of days from enquiry date to PO date, across POs received in the window. Shown as `N d`.
- **Coverage ratio** — a pipeline-depth gauge: current *submitted-pipeline* value (all open submitted enquiries, all-time) ÷ the PO value that closed in the **prior** period. Shown as `N×`. Above `1×` means your live pipeline is larger than last period's realised orders — healthy depth; below `1×` warns the pipeline may be thinning.

Order and enquiry values throughout use the same definition: `Σ quantity × unit price × (1 − discount%) × (1 + tax%)` over the document's product lines (tax-inclusive, discount-applied).

### Value KPIs (SO / Delivered / Pending)

Three currency tiles sit beside *Revenue realised* when they are available:

- **SO value** — total value of sales orders whose *PO date* falls in the window (full order value, tax-inclusive).
- **Delivered value** — total value of approved delivery receipts in the window, with returns subtracted (same figure as *Revenue realised*, surfaced as a value tile).
- **Pending value** — outstanding stock value still owed against orders **booked in this window**: for each such order, `order value − all-time delivered value for that order`, floored at zero and summed.

**Gotcha:** on a live/custom window these three tiles require the *PO Value* permission (`dashboard.POValue`); without it they are simply hidden. On a **preset window** the shared firm snapshot is always computed at full fidelity, so anyone who can see the Sales tab sees these tiles there. This is intentional — holding the Sales-tab permission implies the sub-permissions for the shared snapshot path.

## Conversion %

Conversion % is the share of business that turned into orders, computed as:

> POs received ÷ (Enquiries + POs received) × 100

Dividing by *enquiries + orders* (rather than by enquiries alone) keeps the figure below `100%`. Because a PO counted in the window can belong to an enquiry raised earlier, and one enquiry can spawn several orders, the naive "orders ÷ enquiries" ratio could read above 100%, which isn't a meaningful conversion rate. The delta pill compares this against the same formula over the prior period and is shown in percentage points (`pp`).

> The Conversion tile's hover hint phrases this loosely as "POs received ÷ enquiries created" — the figure actually shown is the bounded *orders ÷ (enquiries + orders)* formula above.

## Sales funnel

A four-stage funnel shows how volume and value flow from interest to fulfilment. Each stage chip shows a count and, where meaningful, a value; the connector shows the drop-off from the previous stage, and a drop above `30%` is highlighted in red. A `p50: N d` chip on the *PO received* stage shows the median enquiry→PO cycle time.

- **Enquiries** — enquiries/orders created in the window. **Count only** — no value is shown for this stage, because an enquiry's line items may not be priced or quoted yet, so a ₹ figure here would be misleading.
- **Quoted** — deals that were quoted in the window: an enquiry created in the window that has at least one quotation send, **or** any deal that reached PO in the window. The PO clause matters because when an enquiry converts to an order the original enquiry document (which held the send history) is removed — counting PO-reached deals as "quoted" keeps the funnel honest (Quoted always ⊇ PO received).
- **PO received** — same set as the *POs received* KPI, with its tax-inclusive value.
- **Delivered** — approved deliveries in the window, with their net-of-returns value.

Each stage chip also shows its share "% of top" (relative to the *Enquiries* count).

## Pipeline pulse

A combined bar-and-line chart over the **last 12 calendar months** (always the last 12 months, independent of your selected window — so the momentum shape is stable). Bars show monthly counts of *Enquiries*, *Quotes sent*, *POs*, and *Deliveries*; the line (right axis) is monthly *Revenue ₹* from approved deliveries. Months with no activity show as zero, so the series always has 12 points.

## Status flow

A stacked area chart, also over the **last 12 calendar months**, showing the monthly mix of enquiry statuses bucketed by the month the enquiry was **created**. The five bands are `Pending`, `Submitted`, `PO arrived`, `Regret`, and `Lost`. Useful for seeing how each month's intake ultimately resolved.

## Cycle time — enquiry → PO

A distribution of how long deals take to close, for POs received **in the selected window**. Three stat tiles show the percentiles:

- *Median (P50)*, *P75*, and *P95* days to close.

Below them, a horizontal histogram bins each closed PO into one of six bands:

`Same day` · `1–3 d` · `4–7 d` · `8–14 d` · `15–30 d` · `31+ d`

Cycle days are floored to a whole number before binning (so `1.2 d` lands in `1–3 d`). Each bar shows its count and its share of the total. When nothing closed in the window the card reads "No POs closed in this period."

## Performance breakdowns

Three combined bar-and-line charts, each showing *Received* vs *Won* counts plus a *Win %* line (right axis), for deals whose **enquiry date** falls in the window. "Won" means the deal reached PO (it's an order, or its status is `PO arrived`).

### Mode performance

Breaks the window's deals down by *mode of enquiry* (how the enquiry came in — e.g. Mail, WhatsApp, Verbal, Portal, Other; missing mode shows as `—`), with win-rate per mode. Shows which channels actually convert.

### Revision impact

Groups deals by how many quotation **revisions** they went through before closing, bucketed as `0`, `1`, `2`, and `3+` (anything beyond three revisions collapses into `3+`). Reveals whether re-quoting helps or signals a stalling deal.

### Discount elasticity

Groups deals by the **average line discount** given, into five bands — `0%`, `0.1–5%`, `5–10%`, `10–20%`, `20%+` — with win-rate per band. Shows how much discounting actually moves your win-rate.

## Daily intake pulse

A combined chart over the **last 60 days** (independent of the selected window): daily *Enquiries* (bars) vs *POs received* (line). A short-horizon momentum read for the recent weeks. Days with no activity show as zero.

## Mix donuts

A row of donut charts summarising the window's composition. The fourth donut is present on the firm-wide Sales report (it is only hidden in single-customer report views elsewhere).

- **Status** — enquiries in the window by status: `Pending`, `Submitted`, `PO arrived`, `Regret`, `Lost` (orders count as *PO arrived*).
- **Mode** — enquiries in the window by intake mode.
- **Outcome** — every deal in the window resolved to one of `Won`, `Lost`, `Regret`, or `Open` (still pending/submitted).
- **Quotation queue** — the health of quotation **emails** created in the window, by send status: `Queued`, `Sending`, `Sent`, `Failed`, `Unknown`. This tracks the email pipeline, not the enquiries themselves.

## Analysis tables

Four tables highlight the deals that most need attention. Each lists the **top 5** rows for its criterion, with the customer name resolved for display. Where enabled, right-clicking a row offers *Open enquiry* to jump to that enquiry's detail; clicking a row also navigates (orders open the order detail, everything else the enquiry detail).

### Awaiting PO — top 5 by value

Enquiries with a quotation *submitted* but **no PO yet**, ranked by enquiry value (highest first). Columns: *Customer*, *Mode*, *Value*, and *Age* (days since the enquiry date). Your biggest live opportunities still to close.

### Stale pending — top 5 oldest

Enquiries still `pending` (no quotation sent) whose enquiry date is **older than 30 days**, ranked oldest first. Columns: *Customer*, *Mode*, *Quoted ₹*, *Age*. Work that has gone cold without a quote.

### Top 5 won — this period

The highest-value POs **received in the window**, ranked by value. Columns: *Customer*, *PO ₹*, *Enq → PO* (cycle time; `Same day` under half a day), *PO date*.

### Top 5 lost — this period

The highest-quoted enquiries marked `lost` or `regret` whose enquiry date is in the window, ranked by value. Columns: *Customer*, *Status* (Lost / Regret), *Quoted ₹*, *Date*.

## Recent activity

Two tables at the bottom of the tab, shown when there's anything to list. These require the *View Enquiry* permission on a live/custom window (they always appear on preset snapshots, computed at full fidelity):

- **Latest PO arrived** — the most recent purchase orders received (across both orders and pre-conversion enquiries), showing *Customer*, *Products* (each with quantity × unit price), *Total*, and *PO date*.
- **Recent enquiries** — the latest 5 enquiries by date, showing *Customer*, *Date*, and *Products*. A *View all* action opens the enquiry list sorted by creation date.

## Export PDF

The *Export PDF* button (top-right of the toolbar) generates a print-ready, firm-branded copy of the report for the **current window**. Key points:

- The PDF is always computed **live** at the moment you export — it reflects fresh figures regardless of any cached snapshot shown on screen.
- It downloads as `sales-report-<from>_<to>.pdf` (ISO dates).
- Contents: the eight report KPIs (Enquiries, Quotes sent, POs received, Revenue, Conversion, Avg ticket, Avg cycle, Coverage — the SO/Delivered/Pending value tiles and the recent-activity tables are **not** in the PDF), the funnel, the pipeline-pulse and status-flow charts (each followed by an exact-number table), the cycle-time chart, the three performance breakdowns, the four mix donuts with exact counts, and the four analysis tables.
- Every page carries the firm name and logo, the period, a "Powered by intigra.app" footer, and a visible *Printed by* attribution (your name, username, and user ID) plus the generation timestamp. A near-invisible forensic trace line is tiled across each page so a leaked printout can be traced to whoever generated it. Treat exported reports as confidential.
- Exporting needs the same *View Dashboard* + *Sales report* permissions as the tab.

## Common questions

### Why does a number differ between the on-screen tab and a fresh PDF?

The on-screen tab may be showing a **cached firm snapshot** (up to 12 hours old) for a preset window, while the PDF is always computed live at export time. If new enquiries or POs landed since the snapshot, they appear in the PDF first. Press the ↻ *Refresh* button to recompute the on-screen snapshot, or switch to a custom window (which is always live).

### The *Updated* label and refresh button disappeared — why?

They only appear for the five preset windows (`Current Month`, `Past 30 Days`, `This Year`, `This Financial Year`, `Last 365 Days`). Any hand-picked window that isn't exactly one of those is computed live every time and shows no freshness label — there's nothing to refresh because it's already fresh.

### Why can POs received in a month be more than the enquiries raised that month?

Because a PO is timed by its *PO date*, not the enquiry's date. A PO landing this month can belong to an enquiry from an earlier month, and one enquiry can produce several orders. That's exactly why [Conversion %](#conversion-) divides by *enquiries + orders* rather than by enquiries alone — so it stays below 100%.

### The SO value / Delivered / Pending tiles aren't showing for me.

On a live/custom window those value tiles require the *PO Value* permission. Ask an admin to grant it, or view a preset window (the shared firm snapshot always includes them). See [Users & permissions](/docs/settings/users-and-permissions).

### Why is the *Enquiries* funnel stage the only one with no ₹ value?

At the enquiry stage the line items may not be priced or quoted yet, so a value there would be misleading. Pricing figures begin at the *Quoted* stage, once a quotation has been sent.

### Do the Pipeline pulse / Status flow / Daily intake charts follow my date range?

No. Those trend charts are deliberately fixed to a rolling horizon — the last **12 calendar months** for pulse and status flow, the last **60 days** for daily intake — so the momentum shape stays stable no matter what window you select. The KPIs, funnel, cycle-time, breakdowns, donuts, and tables all follow your *From* / *To* window.

### How is "Revenue" different from "SO value"?

*SO value* is what customers **ordered** in the window (order value by PO date). *Revenue realised* / *Delivered value* is what you actually **delivered and approved** in the window, net of returns. *Pending value* is the gap still owed on orders booked in the window. Together they read as ordered → delivered → outstanding.

### Where do I set the window the dashboard opens on?

Under *Settings → Personalisation*, as the *Default Date Range*. See [Personalisation](/docs/settings/personalisation#what-you-can-adjust). It only sets the starting window; you can always change *From* / *To* on the dashboard afterwards.

### Where can I dig deeper than the Sales tab?

Sibling dashboard tabs slice the same business other ways: the [Product report](/docs/reports/product-report) (per product code/head), the [Supply chain report](/docs/reports/supply-chain) (inventory and fulfilment), and the [Vendor scorecard](/docs/reports/vendor-scorecard) (procurement). To act on a specific deal, use the quick-nav chips or open the enquiry from a table row — see [Generate a quotation](/docs/enquiry-bank/generate-quotation) and [Delivery receipt](/docs/enquiry-bank/delivery-receipt).
