In this note
- What a quoted price leaves out: unit, tax basis, delivery point
- Rule one: nothing missing is filled in
- Rule two: nothing is ranked that is not comparable
- Two versions of one document can land on the same cost
- Rateslip reads the printed page, not the file
- Every figure keeps its place on the page, and code does the arithmetic
- What Rateslip does not do yet
- Six rules for a system that reads documents, and five checks by hand
Take an invented but ordinary case. A purchase team at a construction firm gets three quotations for the same insulation board. One is priced per square metre, GST extra, with freight to site as a separate line. One is per square foot, ex-works, GST included. The third is a revised version of the first, sent a week later, with the rate up and the freight down. Someone has to decide which is cheapest, and the honest answer, read straight off the three documents, is that nobody knows yet.
Two supplier quotations can be ranked only once they stand on the same basis: the same product and variant, one unit, one tax basis and one delivery point. Where a document does not state one of those, or the two differ in a way the documents cannot settle, the honest output is the reason, not a ranking.
We built Rateslip (opens in a new tab) on that rule. It reads supplier quotations, purchase orders and invoices and puts every line on one landed cost per unit: what a square metre or a square foot costs once freight, insurance and discounts are in. When two documents cannot be compared, it says why and ranks neither. This note is about the rules behind that refusal. Every rupee figure quoted from Rateslip below comes from the synthetic documents on its page, each labelled there as fictional.
What a quoted price leaves out: unit, tax basis, delivery point
A price on a supplier document is a number attached to several assumptions, and the assumptions are not always printed next to it.
The unit. Take two made-up rates, ₹1,297.05 per square metre and ₹120.50 per square foot. They are the same price to the paisa (a hundredth of a rupee (opens in a new tab)), yet on a spreadsheet one looks more than ten times the other. The conversion has to come first, and it has to be exact: a square foot is exactly 0.09290304 of a square metre (opens in a new tab). Round ₹120.50 down to ₹120 and the square-metre price moves by ₹5.38, about ₹1,749 on an order of 325 square metres.
The tax basis. A rate quoted “GST extra” and one quoted “inclusive of GST” differ by the goods and services tax on that material. On the board quotation on Rateslip’s page, the same square foot is ₹73.73 before GST and ₹87.00 with it. A document that does not say which it is has not stated a price. The right response is to say so, and never to assume the cheaper reading.
The delivery point. Ex-works is a price at the supplier’s premises: as an ICC Academy article on the trade term (opens in a new tab) has it, the buyer arranges the transport and carries the cost and risk from there. Delivered is a price at yours. On Rateslip’s page the same panel at the same rate reads ₹1,178.59 a square metre ex-works and ₹1,265.75 delivered, both before GST; the first is lower only because it leaves freight out. The two become comparable only once freight is priced on both, from a figure someone can point to.
These are ordinary lines on ordinary quotations, and a tool that ranks without resolving them produces a confident answer nobody can check. Central government buyers in India are given the same principle. The Ministry of Finance’s procurement manual for goods (opens in a new tab) has bids compared, unless otherwise stipulated, “on total outgo from the Procuring Entity’s pocket”, with taxes, freight and insurance included, normally at the destination.
Rule one: nothing missing is filled in
The first rule we gave Rateslip is the one its product page states in five words: nothing missing is filled in. If a document does not price freight, the freight is unpriced, and the figure is shown with that gap named: “Ex-works: excludes your freight”. It is never zero, and never borrowed from another document. On the page, a purchase order names the quotation its price should come from, and Rateslip still takes no price from it.
The reason is not purity. Each shortcut produces a number that looks exactly like a real one. A landed cost of, say, ₹1,340 with freight silently set to zero is indistinguishable, on the page, from ₹1,340 with freight included. An honest gap is worth more than a plausible fill. The gap can be closed by one phone call to the supplier; the fill can quietly cost the difference on every unit.
Rule two: nothing is ranked that is not comparable
Before Rateslip puts two documents in order, it checks that they price the same thing on the same terms. Its page lists eight keys, and shows them on two quotations from one supplier.
| Check | First / second quotation | Result |
|---|---|---|
| Product family | wall panel / wall panel | Same |
| Thickness | 75 mm / 75 mm | Same |
| Variant | plain edge / plain edge | Same |
| Commercial stage | quotation / quotation | Same |
| Destination PIN | 990011 / 990027 | Differs |
| Freight basis | delivered, freight charged separately / the same | Same |
| Tax basis | ex-GST / ex-GST | Same |
| Unit | sq m / sq m | Same |
One key differs, so the verdict is “Not comparable · delivered to different places”. Both landed figures are shown, ₹1,288.79 and ₹1,311.95 a square metre before GST, and neither is ranked. Rateslip names every difference that applies, not only the first; a quotation set against a tax invoice is not ranked either. In the app, its page says, a ninth key is checked too: the reader, meaning the model, the prompt version and the arithmetic that produced each figure.
This is the behaviour that looks strangest at first, and the one we would defend first. A procurement tool that sometimes says “Not comparable”, and gives the reason, does more useful work than one that always produces a ranking. A ranking produced anyway can be forwarded and acted on before anyone sees that it compared two different things. The stated reason is a to-do list: go back to the supplier and ask for a price to the same site.
Two versions of one document can land on the same cost
The case that tests the second rule hardest is the revised document. A supplier sends a quotation and, a week later, another: the rate has gone up and the transport charge has come down. Which is better?
Rateslip reads both and puts each on a landed cost per unit. The case on its own home page is a synthetic purchase order in two versions, with the same number, date and total.
| Per sq m, ex-GST | Version A | Version B |
|---|---|---|
| Material | ₹1,196.80 | ₹1,238.00 |
| Freight | ₹100.45 | ₹59.25 |
| Landed cost | ₹1,297.25 | ₹1,297.25 |
₹41.20 a square metre sits in the transport line on Version A and in the rate on Version B, and the two land identically to the paisa. A buyer reading the rate alone would see Version B 3.44% above Version A and believe it the worse deal. One reading freight alone would believe the opposite.
What Rateslip does not do is decide which version came first. It calls them A and B. In the page’s example both print the same date, and a date on a document is not proof of when it was sent anyway. Rateslip compares the two as presented and leaves the sequence to the person who has the email thread: say what the documents say, and stop there.
Rateslip reads the printed page, not the file
Every rule so far assumes the figures were read correctly. Three more decisions are about that.
Rateslip takes its documents as PDFs, and a PDF carries two things that can disagree: the page as it prints, and a text layer underneath that, its page says, “most software reads instead”. (The same gap is why a black rectangle is not a redaction.) Rateslip reads the rendered page, at print resolution, the way a person does, and keeps the text layer “only as a witness”.
Its page reports that 19% of the real supplier documents audited contained hidden text that contradicted the printed page, in a way that changes the price. The page gives one cause, an ordinary one. Somebody corrects a quotation by pasting a new table over the old one as a picture, and the old row stays underneath, still adding up on its own terms. A system that trusts the text layer is trusting the one part of the document its sender never looked at.
Where the two disagree, Rateslip shows both values and uses neither. The disagreement is the finding: a figure that two readings of one document cannot agree on does not belong in a comparison.
Every figure keeps its place on the page, and code does the arithmetic
Every figure Rateslip reads keeps the region of the page it was read from. A landed cost built from a quantity, a material value, a freight line and an insurance line can be traced to where each was printed. Today, the product page says, the app “keeps the page region of every figure”; drawing that region on the page for the person to see is work still to come. We say the same under the figure on the AI Systems page that illustrates the pattern. A provenance feature described as more than it is would be its own kind of plausible fill.
A buyer who tells a supplier “your quote is 4% higher than the competitor’s once freight is added” has to show where every number came from. A landed cost without provenance is an opinion with decimal places.
The last decision is who does the sums. A model reads the page. Once the figures are read they go into code: freight apportionment, discounts and tax run as exact arithmetic, rounded only when displayed. The model, in the page’s words, “never does the sums”.
Before Rateslip computes a per-unit cost, it checks the document against itself: line values, tax summary and printed totals against one another, each printed total the sum of the rows above it. A document that does not add up says so, and says where, and no per-unit figure is taken from it.
In code this is done the same way every time, and anyone with a calculator can check the result. We would not hand it to a model. We think a model can be confidently wrong about a column of numbers, on exactly the task where confidence is worth least.
What Rateslip does not do yet
Rateslip’s product page has a section with that heading, and we think every product that reads documents should have one. Today it reads materials only: a quotation that prices labour and installation together is, in the page’s words, “a different problem”, out of scope for now. It takes one file at a time, up to six pages; bulk upload is not built. It does not know which of two versions came first, and a control for marking which is later is not built yet. It is not an accounting record: its figures are for comparison and negotiation, not for filing.
The page calls these gaps, “worth knowing before you rely on it”. That is the first rule applied to the product itself.
Six rules for a system that reads documents, and five checks by hand
Rateslip reads one kind of paperwork in one market. We think its rules apply to most systems that read documents and produce numbers.
- Make every assumption behind a figure explicit; a document that does not state one has a gap, not a default.
- Never fill a gap with a plausible value. A visible gap can be closed; an invisible fill cannot be found.
- Refuse to compare things that are not on the same terms, and say which term differs.
- Read what the person would have read, and treat any disagreement with the machine-readable version as a finding.
- Keep where every number came from.
- Let the model read; let code do the arithmetic and the checks.
If you compare quotations by hand, write five things beside every price before you rank. They are the unit, the tax basis, the delivery point and who pays freight, the exact product and variant, and which version of the document you hold. A blank is a question for the supplier, not a zero.
Rateslip is an early product, for purchase teams at construction and manufacturing firms in India. We build and run it ourselves, and it is on our work page. Our AI Systems service is built on the same habits: a system reports a gap instead of filling it, and ships with a written record of what it does not cover.
Sources
- Rateslip, the product page (“Same transaction, different presentation”, “Why Rateslip reads the page, not the file”, “One figure, traced to where it was printed”, “Comparable, or a stated reason”, “What Rateslip does”, “How a document moves through Rateslip”, “What Rateslip does not do yet”). Every document shown there is synthetic and labelled so. (opens in a new tab)Kordal Systems. Accessed 3 Oct 2026
- NIST Guide to the SI (Special Publication 811), Appendix B.9, Factors for units listed by kind of quantity or field of science (the square foot to square metre factor, marked exact) (opens in a new tab)National Institute of Standards and Technology. Accessed 3 Oct 2026
- Incoterms® 2020: EXW or FCA? (an article by Miguel Angel Bustamante Morales, 7 January 2025; the page says its views are the author’s and do not necessarily reflect ICC’s official position) (opens in a new tab)ICC Academy, International Chamber of Commerce. Accessed 3 Oct 2026
- Manual for Procurement of Goods, Second Edition, 2024 (paragraph 7.5, Evaluation of Financial Bids and Ranking of Bids, item 4, page 165) (opens in a new tab)Department of Expenditure, Ministry of Finance, Government of India. Accessed 3 Oct 2026
- Indian Currency, frequently asked questions, updated 15 April 2025 (question 1, one rupee consists of 100 paise) (opens in a new tab)Reserve Bank of India. Accessed 3 Oct 2026
On this site
Useful notes, by email.
When a note is published, one email, with the note. Product engineering, AI systems and the decisions behind what Kordal builds. Nothing else is sent to this list.