Skip to content

Buying, from the supplier’s ratelist to a matched invoice

Upload the ratelist the supplier actually sent — a PDF goes to 5 deterministic parsers before any model is involved. Every order then reconciles against what was received and what was invoiced, to within PKR 0.01.

The supplier sends a ratelist. Polaris reads it.

Upload the PDF, CSV, XLS or XLSX the supplier actually sent you — up to 20 MB. A PDF goes to 5 hand-written parsers first, with a language model as the fallback; a CSV, XLS or XLSX is read as a table and you map the columns.

On a PDF, deterministic parsers first and a model second
5 hand-written parsers try the PDF before anything else, and a parse is accepted only if at least 75% of the rows come out clean and at least half the source lines are covered. Only when no parser clears that bar does a language model read the document. A CSV, XLS or XLSX never reaches either path: the table is extracted and mapped column by column.
Duplicates inside one upload are skipped, an earlier match is flagged
Every file is hashed by content and checked across your organisation. Two copies of the same file inside a single upload — the second one is skipped. A file that matches something you imported earlier is recorded and flagged for you, not dropped silently. The supplier itself is auto-detected by token match against your supplier list, and only when the best match leads the runner-up by a clear margin.
Rows matched to your catalogue at 70% confidence
Each quoted line is fuzzy-matched against the products you already stock. It auto-matches only above a 70% confidence floor and only with a margin over the second-best candidate — otherwise it waits for a person.
Their unit converted into yours
A price quoted per carton, per dozen or per pack normalises into your unit or subunit by conversion factor or pack size, so what lands in the batch is comparable to the price you already sell at.
A purchase price that moves 25% against the last ratelist is flagged
Import compares every quoted purchase price against what the same product cost on the previous ratelist. A move of more than 25% is flagged, more than 50% severe, so a decimal typed in the wrong place surfaces during review rather than after you have bought at it.
Rows land in 5 states, on one review screen
An imported row lands as matched, suggested, unmatched, conflict or conversion-blocked, and the 4-step workspace walks you through upload, parse, match and apply. You review the rows that need judgement, not the ones that do not.

One order, three totals, one status

Polaris compares ordered against received against invoiced in SQL and sorts the order — not the line — into one of 6 states. The price tolerance is PKR 0.01 — one paisa.

Purchase orderPO-1184 · Ittehad Textiles
Supplier invoiceSI-90412 · 12 Aug 2026
Purchase order lines, ordered against received
LineOrderedReceivedReceived against ordered
Cotton fabric — Roll
PKR 480,00040 × 12,000
PKR 480,00040 × 12,000
Received as ordered
Lawn print — 3-piece
PKR 132,00060 × 2,200
PKR 118,80054 × 2,200
−PKR 13,2006 units short
Polyester blend — Roll
PKR 190,00025 × 7,600
PKR 196,25025 × 7,850
+PKR 6,250PKR 250 over the ordered unit price
Order totalPKR 802,000PKR 795,050119 of 125 units arrived
OrderedPKR 802,000125 units · Purchase order
ReceivedPKR 795,050119 units · Goods receipts, at the price paid
InvoicedPKR 799,500Ittehad Textiles Pvt Ltd, one amount on the order
Order statusBoth variance

6 units short of the order, and the invoice runs PKR 4,450 above the goods-receipt total — wider than the PKR 0.01 tolerance. Both gaps together, so the order lands in both variance rather than either one alone. Approving it stores a signature built from these exact figures; if the received quantity or the invoiced amount moves afterwards, the approval stops applying and the order returns to the queue.

  • Pending receipt
  • Pending invoice
  • Quantity variance
  • Price variance
  • Both variance
  • Matched
Sample data · as of 12 Aug 2026

Order, receipt, and an invoice that has to reconcile

Matching compares ordered against received against invoiced in SQL and classifies every order into one of 6 states: pending receipt, pending invoice, quantity variance, price variance, both variance, or matched.

A goods receipt cannot be edited or deleted
The model raises on any attempt at either, so receipts are append-only by construction. A mistake is corrected through a reversal, which means the record of what arrived on the day it arrived survives the correction.
What the receipt line actually records
Quantity, the actual unit price paid — which may differ from the order — lot code, serial, expiry date, and the barcode it was scanned from. That is what the match reads, so a price variance is measured against a paid figure, not a typed one.
Price tolerance of PKR 0.01
One paisa. The invoice amount on the order is compared against the goods-receipt total, and anything wider than that goes to a person as a price variance. Quantity variance, price variance and both-variance are separate states, so a short delivery and an overcharge do not get filed as the same problem.
An approval that expires when the numbers move
Approving a variance stores a signature built from the exact figures approved. If any of those numbers later change, the approval stops applying and the order re-enters the queue — nobody inherits a sign-off for a different set of numbers.

Price batches you can roll back

A new supplier ratelist means new sell prices. A price batch captures the old and the new sell price and purchase price for every product before it applies anything.

Old values captured before the change
The batch records both prices, old and new, per product. Rollback restores the captured old values, so undoing a price change is a stored fact rather than a reconstruction from memory.
Status derives from timestamps
Draft, applied, rolled back — the state is read from when it happened, not set by hand. A batch can only be applied while it is a draft, and only rolled back once it has been applied.
What the change does to margin, row by row
Every row shows the price delta, the change as a %, the old margin, the new margin and the margin change. You see what the new sell price does to the margin on each product before the batch applies, not after a month of selling at it.
Drafting, applying and reversing are 3 separate permissions
The person who prepares a price change need not be the person who commits it, and reversal is its own grant again. On the other side, stored price versions carry temporal validity — so "what was this priced at on 3 March" has an answer when a customer disputes it.

The supplier side of the ledger

Supplier ledger, supplier returns, supplier analytics, and the products you buy from each one — with a portal the supplier signs into themselves.

A portal your supplier logs into
They sign in with a phone number, a password and your shop’s code, then see their ledger from their side, their purchase orders, their returns and the ratelists they sent you. The reconciliation call gets shorter because both sides are reading the same rows.
Input tax assembled twice, claimed once
Input tax is built from two independent sources — supplier purchase orders and supplier ledger entries. Any ledger document whose normalised invoice number already matches a purchase order for the same supplier is then excluded, so one supplier invoice is claimed exactly once.
Returns and analytics per supplier
Supplier returns run against the supplier they came from, and supplier analytics sit next to the ledger, alongside the list of products you buy from that supplier.

Reorder points that draft the order for you

Safety stock is 3 days of average daily sales. The reorder point is average daily sales multiplied by the supplier’s lead time — defaulting to 7 days — plus that safety stock.

Suggestions grouped by supplier
Reorder suggestions are grouped by the supplier who fills them and generate draft purchase orders, so a morning of reordering is a review rather than a data-entry session.
Exception flags on the rows that need a second look
Rows carry flags for missing supplier, aging batch and no recent sales — the three cases where the arithmetic is right but reordering anyway would be wrong.
From draft order to matched invoice
The draft becomes a purchase order, the delivery becomes an append-only goods receipt, and the supplier invoice completes the 6-state match. The same chain that suggested the order proves it landed.

Import your next supplier ratelist.

5 deterministic parsers read a PDF before any model does, rows match your catalogue at 70% confidence, and the price batch keeps the old prices so you can roll the change back.

14 days free, no card.