Discount windows, freight terms, allowance schedules and chargeback clauses come out of your signed agreements as typed fields — each one carrying the sentence it came from and the page that sentence sits on. A quote that does not resolve exactly in your document is dropped, not kept with a caveat.
Extracted per buyer, per agreement
Derived by code
Contract text is read page by page and every page keeps its character offset, so a term resolves to “p. 9” and a quoted line — not to the agreement as a whole.
A discount window arrives as a percentage and a day count. A freight term arrives as an FOB side. They are values the engine can adjudicate against, not a paragraph describing them.
Extraction is the only step a language model touches. Every amount after it is computed deterministically in integer cents, so any figure in a finding can be recomputed by hand.
Pick a clause family. What opens is the region it occupies on the signed page, the sentence quoted from it, the typed term it became, and the two terms this agreement did not get to keep.
“Customer may deduct 2.0% from the invoice total if payment settlement is cleared within 10 calendar days of the invoice date.”
Offset 18,204 · page derived by code
2.0%
from the clause
$45,000.00
from the invoice line
$900.00
Payment cleared on day 14 of a 10-day window, so the whole discount was taken outside the clause it depends on.
Customer may assess a penalty of 5% for late delivery of any purchase order.
quote not found in document text
The agreement reads “a penalty of five percent”. Different characters, so not the same quote. Whitespace and case are compared byte for byte on purpose — normalising them would let an invented quote pass as resolved.
discount_percent returned as 120
discount_percent 120 is outside the plausible range 0-100
A discount cannot be a hundred and twenty per cent. The term is rejected before it can become arithmetic, rather than producing a dollar verdict nobody would believe.
The value of reading a contract as rules is not speed. It is that every later number has a sentence and a page standing behind it — and that the sentences which did not resolve are named rather than smoothed over.
Payment, freight, allowance, price and chargeback. Language that is none of them does not become a term of a made-up kind — it simply does not become a term.
Whitespace and case are compared exactly. Normalising them would let a quote the model half-remembered pass as resolved, which is the one failure this check exists to catch.
Each page keeps the character offset where its text begins. A term’s page is derived from the offset its quote resolved at, so a citation cannot be wrong in a way the document would not show.
A discount percentage must sit between 0 and 100 and a day count under 400. Outside that, the term is rejected with the bound it broke, rather than producing a dollar verdict nobody believes.
Different buyers, different windows. Terms stay attached to the contract they came out of, so a deduction is argued against the agreement governing that buyer — never a blended house rule.
Send the master agreement, the rate card and the addendum letters together and terms are read from all of them. There is no effective-date field for anyone to forget to update.
We read the agreement as typed terms, adjudicate the deductions against them, and show you the sentence and the page behind every number that comes back — including the terms we dropped because their quote did not resolve.