Skip to content

Basket of Goods (price comparison matrix)

The Basket of Goods (BoG) is a like-for-like price-comparison matrix you assemble by hand: rows are the items you care about, columns are suppliers, and each cell shows that supplier's price for the item. It is an analysis tool for comparing suppliers on a common basket — not a purchasing basket. There is no checkout, no order, and nothing is submitted to the platform.

Where a basket lives

Baskets are stored in your browser only (local storage), not on the server. You can keep several named baskets. This has direct consequences:

  • A basket is per-browser and per-device — it does not follow you to another machine or another browser.
  • Clearing browser data removes your baskets.
  • You can export a basket to JSON as a backup and import one back — but importing replaces all of your current baskets.

Building a basket

  • Add products from the catalogue grid (Add to basket) or from a product record. The first product you add auto-creates a basket named after the product's category and registers its supplier as a column.
  • Add supplier columns by typeahead search, and add rows (lines) with a common reference, description, range, and unit volume.
  • Each cell links a specific product to a specific supplier, so you can compare genuinely equivalent items.

Per-supplier column settings

Each supplier column carries its own settings (cog icon on the supplier chip): agreement (one of that supplier's deals), turnover stream (a stream of the picked agreement), zone, and a rebate %.

  • The rebate % can be entered as one figure, or broken down under rebate headings — free-text worksheet columns defined per basket in the header (e.g. "Core, Marketing, Loyalty"). The breakdown has no meaning to the system: the values are summed and applied as a single figure. Rebate reporting itself lives in the deals, not here.
  • The column's zone overrides the basket's default zone when resolving that supplier's prices, so suppliers in one basket can price on different bases (e.g. "Lower Invoice" vs "UK").

Pulling products from a turnover stream

Products can carry a basket code (editable on the product record). A turnover stream matches a product when the product's basket code appears in the stream's code list (figuresEntry.inputCode — the base list only; member EDI/ERP spend-code mappings are deliberately ignored). With an agreement and stream picked, Pull products from stream adds every matching product to the basket, one new line per product; products already in the basket are skipped, so a re-pull is additive. Aligning pulled products into like-for-like rows across suppliers remains a manual step. Manual add from the catalogue or product record still works as before.

The analysis view

Switch from Build to Analysis to turn the basket into a variance matrix:

  • Prices in Analysis are net of rebate: each supplier's invoice price is reduced by that column's single applied rebate % (price × (1 − % / 100)). Producing this price-after-rebate view is the basket's purpose. The Build view still shows gross invoice prices.
  • For each line, the cheapest net price is highlighted.
  • Every supplier is shown as a variance % against that cheapest price (price ÷ cheapest × 100).
  • Extended figures multiply unit price by unit volume; lines are subtotalled by range with a grand total.
  • Export to Excel produces a formatted workbook of the matrix, grouped by range — this is the basket's "output", in place of any submit step.

Which price a cell shows

A cell resolves the supplier's price the same way the rest of PIM does: it prefers the supplier column's zone, then the basket's default zone, then the product's default zone, then any zone with a usable price; within the zone it takes the entry effective today, or the nearest future-dated entry if none is current, preferring invoice (group) price over list price. So a cell's price can change as prices become effective or expire, and changing a zone setting changes the affected cells.

Why does a cell change or go blank

  • Price changed with no edit — a future-dated price became effective, or the current one expired (see above).
  • Blank price (—) — the product has no usable price in any zone, or is price-on-application.
  • A column's products vanished — removing a supplier column strips that supplier's products from every line.
  • The whole basket reset — baskets are local-storage only; clearing storage, switching device, or importing a JSON file (which replaces all baskets) wipes them.

What it is not

  • Not a purchase order or ordering basket. Nothing is sent anywhere; the output is an Excel comparison.
  • Not the Price Comparison report, which compares price snapshots over time or an uploaded price file, server-side.