All articles

Reports & History

Reading the Gross Profit Report

The GP report is per-line, partnership-aware, and refund-aware. Toggle Summary vs Detail via the view selector. Costs are live (recomputed from inventory + additional costs at report time) so post-sale cost additions like recerts roll into GP automatically.

The Gross Profit report under Reports gives you per-line GP for every sale in a date range. Two views (Summary and Detail) and a number of subtle behaviors that are worth understanding so you know what the numbers mean.

SellTotal — what counts as revenue

Per line, SellTotal is:

SellTotal = (qty × UnitPrice) − TradeConcession − CashDiscount      (sold lines)
SellTotal = (qty × TradeInActualValue or UnitPrice)                  (trade-in lines)

In English: realized revenue. The list price isn’t used directly — discounts, adjustments, and trade negotiation markup are all backed out so the number reflects what was actually realized. See Adjustment and Trade-In Negotiation for those mechanisms.

Cost — live, not snapshotted

Cost is computed at report time from the inventory item’s current cost basis + every entry in item_additional_costs (recerts, repolish, repairs, etc.). This means post-sale cost additions roll into GP automatically — if you sent a stone for a recert two months after the sale, the recert cost shows up in GP the next time you run the report.

For misc lines (no inventory item), the snapshot Cost on the line is used.

Partnership items

Partnership items show the full transaction GP on the report — no automatic subtraction for the partner’s share. The partner payout you record on the Partnerships page is an equity distribution, not a margin reduction, so it lives outside the income statement.

Two flavors:

  • You sold to the customer — the invoice has full inventory cost, GP = sale price − full cost. Reconciling the partner payout on /partnerships records what you paid them (audit trail), but doesn’t change the GP on this report.
  • The partner sold (settlement invoice flow) — the settlement invoice’s line cost is automatically set to your basis (your share of the partnership cost basis), so GP = settlement-price − your-basis, naturally showing only the slice that’s actually yours.

A P badge in the Status column flags partnership lines either way. See Partnerships (Co-Owned Inventory) for the full settlement model.

Refund handling

When a returned item lands on a refund invoice (negative quantity), GP is correctly negative — you’re giving back margin. The ABS(qty) in SellTotal ensures the dollar magnitudes line up; the asymmetric partner-portion preserves direction.

GP percentage cap

The displayed GP% is capped at ±100% to avoid garbage values from divide-by-near-zero (a $1 sale that nets $50 GP would otherwise show 5000%). The actual dollar GP is uncapped — only the percentage is clamped.

Summary vs Detail

Toggle via the view selector (or ?view=summary / ?view=detail in the URL):

  • Summary — aggregated totals per category / per salesperson / per store, depending on the active group-by. Useful for “how did we do this month.”
  • Detail — every line item on every invoice. Useful for “which deals were the most profitable” or investigating an outlier.

Excel export includes both sheets so the recipient can drill from Summary to Detail.

Status overlay

Each row may show a small badge:

  • P — Partnership item (see Partnership items section above for how cost is determined)
  • V — Vendor memo item (you didn’t own it; cost basis is the vendor’s price you paid them)
  • PV — Both flags

Tips

  • For monthly reviews, run Summary grouped by salesperson or category; for spot-checks of a single deal, switch to Detail and filter to that invoice.
  • A negative GP on a non-refund row is a red flag — usually a misc line with cost > price or a stone with high additional costs (recut on a sold-as-is basis). Click into the line to see what happened.
  • Pad ID columns are zero-padded text in exports (e.g. “000123” not 123) — Excel won’t add thousands-separator commas, and you can paste them into another sheet without losing format.
  • For “what did we list this at” vs “what did we realize,” use the Pricing Realization report instead — it’s purpose-built for that comparison.