1. Home
  2. Knowledge Base
  3. Reporting
  4. 10. Report Formula Reference

10. Report Formula Reference

This is a reference for the computed amounts and quantities shown in the Sales, Purchases, and Inventory reports under Reporting — margins, net amounts, aging buckets, turnover, and the rest. Use it when a customer asks how a specific figure was worked out, or why two reports show different numbers for what looks like the same thing.

After reading this article you will be able to explain how each report column is derived, know which columns are summed inside a group, and understand how the aging, turnover, and stock-level figures are bucketed and rounded.

Before comparing two numbers, match the report, the date range, the status and dimension filters, the grouping, the visible columns, and whether a column is a per-row value or a group total. Most “mismatches” are different filters or grouping, not a calculation error.


How report figures are built

Reporting figures are not recalculated live from your orders each time you open a report. Qoblex maintains a separate reporting store: as you create and authorize orders, shipments, invoices, refunds, and stock movements, it writes the per-line amounts (gross, net, tax, cost of goods, margin, and so on) into that store. Each report then sums those stored per-line amounts for the rows your filters select, and computes a small number of ratios (margin %, turnover, sell-through) on top of the totals.

Two practical consequences:

  • A figure can only ever be as current as the last time the reporting store was updated for that record.
  • Amounts that reduce a value — cancellations, discounts, and refunds — are stored as negative numbers, so the report can simply add every component together.

Money amounts are rounded to 6 decimal places at the point they are stored, so a column you sum by hand may differ from the report total by a fraction of a cent.


Sales figures

These appear in the Sales by product and Sales details reports (Reporting > Sales). Each line’s amounts come from the order line, with cancellations, discounts, and refunds carried as negative values.

Metric (column)How it is derived
Gross SalesTax-exclusive unit price × quantity sold.
Canceled Gross SalesThe gross value of the canceled quantity, stored as a negative.
DiscountsThe line discount amount, stored as a negative.
RefundsThe refunded net amount for the line, stored as a negative.
Net SalesGross Sales + Canceled Gross Sales + Discounts + Refunds (the negatives reduce the total).
Tax / TaxesNet Sales × the line’s tax rate ÷ 100.
Total SalesNet Sales + Tax.
COGS (column “Cost Of Goods”)The cost of goods sold recorded for the line.
Realized COGSThe realized cost of goods sold recorded for the line.
MarginNet Sales − COGS.
Margin PercentageIf Net Sales is greater than 0: (Margin ÷ Net Sales) × 100. Otherwise Qoblex shows 0.

Tax here is derived from the order line’s own tax rate applied to its net amount; it is not read back from a separate tax record. A heavily discounted or partly refunded line therefore shows tax on the reduced net amount.

Grouped sales and the summary row

When the Sales by product report is grouped (by customer, brand, location, and so on), the amount and quantity columns are summed within each group, and an Orders column shows the count of distinct orders in the group. The group’s Margin Percentage is recomputed from the group totals: (sum of Margin ÷ sum of Net Sales) × 100 when the group’s Net Sales is above 0, otherwise 0.

The summary total row at the bottom of the ungrouped Sales by product and Sales details reports sums every amount and quantity, but its Margin Percentage is shown as 0 — it is not averaged across the page. Read the margin percentage from an individual row or from a grouped row, not from the summary line.

Shipment figures

The Shipments report (Reporting > Sales) reports the shipped portion of each line, so its amounts can differ from the order line above:

  • Net Sales (shipment) = the shipped quantity valued at the shipment net price.
  • Margin (shipment) = shipment Net Sales − shipment COGS.
  • Margin Percentage (shipment) = (shipment Margin ÷ shipment Net Sales) × 100 when shipment Net Sales is above 0, otherwise 0.

Return rows in the Shipments report carry a Return COGS but show 0 for gross, net, and margin.


Customer aging figures

The Customer aging report (Reporting > Sales) works at the order level, across orders that are not canceled or deleted. Amounts are taken from each order’s invoices, payments, and refunds.

  • Invoiced Amount = invoice gross amount − invoice discount amount + invoice tax amount.
  • Paid Amount = payments recorded against the order.
  • Refunded Amount = the refunded total (stored as a negative).
  • Due Amount = Invoiced Amount − Paid Amount + Refunded Amount. If that result is below 0, the Due Amount is shown as 0.

How the aging buckets are filled

Qoblex spreads each invoice’s outstanding amount into one bucket, based on that invoice’s due date relative to today, and only when the invoice still has an amount owing (above 0):

  • If the due date is today or in the future, the amount goes into a Due in bucket: Due in 1-30 / 31-60 / 61-90 / 91+ Days, by how many days remain until the due date.
  • If the due date is in the past, the amount goes into an Overdue bucket: Overdue 1-30 / 31-60 / 61-90 / 91+ Days, by how many days have passed since the due date.
  • If the invoice has nothing owing, it contributes 0 to every bucket.

An invoice lands in exactly one bucket — the full outstanding amount is placed in the single band its due date falls into; it is not split across bands.


Supplier aging figures

The Supplier aging report (Reporting > Purchases) groups by supplier and works from each supplier bill’s amounts.

  • Billed Amount = the sum of the supplier bill totals.
  • Paid Amount = the payments recorded against those bills.
  • Refunds = the supplier refund total for the bills.
  • Due Amount = Billed Amount − Paid Amount + Refunds.

The aging buckets are filled per bill, using the bill’s due date and the same bands as customer aging — Due in 1-30 / 31-60 / 61-90 / 91+ Days for bills due today or later, and Overdue 1-30 / 31-60 / 61-90 / 91+ Days for bills past due — and only while the bill still has an amount owing (above 0). Each supplier row then sums its own bills’ bucket amounts.


Purchase figures

These appear in the Purchases by product report (Reporting > Purchases). As with sales, discounts and refunds are stored as negatives.

Metric (column)How it is derived
Gross AmountTax-exclusive purchase price × ordered quantity.
DiscountsGross Amount × the line discount % ÷ 100, stored as a negative.
RefundsThe refunded net amount for the line, stored as a negative.
Net AmountGross Amount + Discounts + Refunds.
TaxesThe tax amount recorded for the purchase line.
Landed CostsThe landed cost allocated to the purchase line.
Cost (column “Cost”, the Total with landed cost)Net Amount + Landed Costs.
Total AmountNet Amount + Taxes + Landed Costs.

The Purchases by product report has two “total” columns and they are different: Cost adds only the landed cost to the net amount, while Total Amount also adds tax.

Received goods figures

The Received goods report (Reporting > Purchases) reports each goods-receipt line rather than the ordered line:

  • Received Amount (column “Amount”) = the net amount of the received quantity.
  • Landed Cost = the landed cost allocated to that receipt line.
  • Total Cost = Received Amount + Landed Cost.

Return rows in this report show their return amount with 0 landed cost and 0 total cost.


Stock on hand figures

The Stock on hand report (Reporting > Inventory) reports the current position per product variant. These quantities are maintained on the inventory record, not recalculated in the report:

  • Quantity (column “Total Quantity”) — the variant’s current on-hand quantity (shown as 0 if negative).
  • Allocated Quantity (column “Total Allocated Quantity”) — the quantity committed to open demand.
  • Available Quantity (column “Total Available Quantity”) = Quantity − Allocated − Buffer.
  • Incoming Quantity (column “Total Incoming Quantity”) — quantity expected on inbound purchases.
  • Buffer Quantity (column “Total Buffer Quantity”) — the buffer reserve set for the variant.
  • On Backorder Quantity — how far demand exceeds what is available to allocate. When Available Quantity is at or above 0 it reflects only the still-to-allocate demand; when Available Quantity is negative, that shortfall is added in as well.
  • Total Cost = Quantity × the variant’s moving average cost.

When the report includes location data, each location row shows the same quantity, allocated, available, incoming, and buffer fields for that location.


Reorder inventory figures

The Reorder inventory report (Reporting > Inventory) uses each location’s Min Quantity (the location alert level) and Max Quantity to flag stock levels. The stock-level filter offers three states:

  • Low stock — Available Quantity is at or below Min Quantity.
  • Low stock including incoming — Available Quantity + Incoming Quantity is below Min Quantity.
  • Within threshold — Min Quantity ≤ Available Quantity ≤ Max Quantity.

The Sold Quantity column is only populated when you filter by a Sales date range; it is the quantity shipped out of that location during the selected range. Without a Sales date filter it stays at 0.

The “Low stock” filter label in the report reads “Available < Min Quantity”, but the report actually treats a variant as low stock when Available is less than or equal to Min Quantity. A variant whose available quantity exactly equals its Min Quantity is included in the low-stock results.

Reorder actions use the selected rows together with their supplier, location, quantity, and cost details to prepare purchase orders or stock transfers.


Inventory turnover figures

The Inventory turnover report (Reporting > Inventory) is built from daily stock-movement records for each variant over the selected period.

  • COGS = the sum of the movement cost of goods sold for the variant in the period.
  • Daily SOH = the average of the daily closing stock value across the days in the period.
  • Opening Balance = the opening balance on the earliest movement date in the period.
  • Closing Balance = the closing balance on the latest movement date in the period.
  • In Quantity = the sum of inbound movement quantity.
  • Out Quantity = the sum of outbound movement quantity.
  • Turnover = COGS ÷ Daily SOH when Daily SOH is not 0; otherwise Qoblex shows 0.
  • Sell-Through = Out Quantity ÷ (In Quantity + Opening Balance) when that denominator is not 0; otherwise Qoblex shows 0.

Inventory aging figures

The Inventory aging report (Reporting > Inventory) ages the remaining on-hand stock of each variant by how long it has been held. Only stock-movement records with a remaining quantity above 0 are included.

  • On-hand Quantity = the sum of the remaining quantities for the variant.
  • On-hand Value for each movement record = (Closing Value ÷ Closing Balance) × Remaining Quantity when Closing Balance is above 0; otherwise 0. The report row’s On-hand Value is the sum of those record values.
  • Age of a record = the number of days from the record’s date to today.
  • Oldest Age (days) = the largest record age among the variant’s included records.
  • Average Age (days) = the sum of (Age × Remaining Quantity) across records ÷ On-hand Quantity. If On-hand Quantity is 0, Qoblex shows 0.

Aging buckets

The report sums remaining quantity (the “Qty” columns) and On-hand Value (the “Value” columns) into these age bands, by each record’s Age in days:

  • 0-30
  • 31-60
  • 61-90
  • 91-120
  • 121-150
  • 151-180
  • 181-270
  • 271-365
  • over 365 (the “+365” columns)

Where these reports live

The Sales, Purchases, and Inventory reports are under Reporting in the main menu, at the Sales reports, Purchases reports, and Inventory reports entries. Each report tab is visible only to users whose role grants the matching reporting permission (Sales, Purchases, or Inventory reporting). For full report behavior — filters, columns, grouping, export, and per-report troubleshooting — see the Sales Reports, Purchases Reports, and Inventory Reports articles.


Troubleshooting

Two reports show different totals for the same product
Check the date range, the status and dimension filters, and the grouping on each report first — these are the usual cause. Also check whether you are comparing a per-row value against a group total, and remember that the Shipments report values the shipped quantity, which can differ from the ordered quantity on Sales by product.
My margin percentage looks wrong on the summary total row
The summary total row at the bottom of the Sales by product and Sales details reports always shows Margin Percentage as 0 — it is not calculated for that row. Read the margin percentage from an individual row, or group the report and read it from a grouped row, where it is recomputed from the group totals.
Net Sales is lower than Gross Sales for a line
That is expected when the line has cancellations, discounts, or refunds. Those are stored as negative amounts and added into Net Sales, so they reduce it. Check the Canceled Gross Sales, Discounts, and Refunds columns on the same row.
The Due Amount or aging buckets are all zero for an order or bill
An invoice or bill only contributes to the buckets while it still has an amount owing. If the Due Amount works out at or below 0 (fully paid, or refunds and payments cover it), every bucket shows 0 for that record.
A variant that exactly meets its Min Quantity shows as low stock
The Reorder inventory report treats a variant as low stock when its available quantity is at or below the Min Quantity (the location alert level), even though the filter label reads “Available < Min Quantity”. A variant whose available quantity equals its Min Quantity is included.
The Sold Quantity column is empty in the Reorder report
Sold Quantity is only populated when you filter by a Sales date range. Add a Sales date filter to the report and the column will fill with the quantity shipped during that range.
Turnover or Sell-Through shows 0
Turnover is 0 when the average daily stock value (Daily SOH) is 0 for the period, and Sell-Through is 0 when the In Quantity plus Opening Balance is 0. Both happen when there is no stock value or no inbound/opening stock to measure against in the selected period.
Was this article helpful?

Related Articles