PactMeter

Documentation

What it accepts, what it reads, what it refuses.

Everything here describes the product as it works today. Where something is a limit, it says so.

Files

  • Documents: PDF (with a text layer) or plain text, up to 10 files of 10 MB each. A scanned PDF with no text layer cannot be read; it is named as unreadable.
  • customers.csv: customer_id, name, tier (A, B or C). Extra columns are ignored. A row with a bad tier or a repeated id is reported and never guessed.
  • transactions.csv: date, invoice_no, counterparty (matching a customer name), quantity, unit_price, and amount. Optional: type (invoice or credit_note) and the invoice a credit note reverses. Dates as 2026-09-14 or 14/09/2026; amounts may use Indian grouping (2,24,000). Up to 20,000 lines per check.
  • Every refused row is listed with its row number (counted below the header line) and the reason, and is kept as a line held for review.

How documents are read

Documents are read by fixed rules, not by a model. A contract, amendment or price-exception letter is recognised from its first line. Contract price holds (“the unit price of INR 950.00 per unit is fixed for the Term”, “the Supplier agrees to hold the price at…”), amendments (“with effect from 1 June 2026 the unit price is…”) and exception letters (in sentences or as a table, prices in figures or words) are turned into rules. Each rule keeps its file, page and the exact quotation, which is checked to appear verbatim in the source.

Instruction-like text inside a document (for example “ignore the amounts above”) is treated as data, surfaced to you, and never followed.

What is refused, and what happens then

Whatever cannot be read exactly is not guessed. The customer’s lines are held for review and the release cannot be SAFE. Examples:

  • a price that is approximate, discretionary or subject to confirmation (“roughly INR 960”);
  • a price with no start date, or an end that is not a date (“through year end”);
  • a discount or rebate, or a sentence with more than one amount (percentage and volume terms are not modelled);
  • an exception letter without a reference;
  • an amendment whose contract was not uploaded (it is not applied, and the app says so);
  • a document that is not an agreement, an amendment or a price letter.

Known limit: a price schedule inside a PDF table is not read, because a PDF text layer often collapses the spacing the reader needs. Put the schedule in a text document, or enter the current list price on the form (it is then labelled as entered by you).

Precedence

Which price applies to a customer on a date is decided in one order: a price exception, then an amendment, then a contract price hold, then the list price of their tier. Dates are inclusive calendar dates. A customer with a rule that could not be read has no established price.

The release decision

BLOCK if any line would breach a protected price (or a regression of ₹10,000 or more). REVIEW if any line cannot be decided, any smaller regression exists, or the rules themselves have problems. Otherwise SAFE. It is computed from counts by fixed rules. A model takes no part. A price audit proposes no change and has no release decision.

Replay figures are a historical replay of the lines you supplied under the change. They are not a forecast.

Other files and features

Each of these checks its own small file against the commitments of a saved run you choose. Every run is saved and never rewritten.

  • Invoice preflight (draft invoices): date, invoice_no, customer, quantity, unit_price. Each draft line is ready to send, fix before sending (with the supported price, the rule, the quote and quantity × (drafted − supported)), or hold when no price can be established. A price change is not assumed until it is in the documents. Nothing here becomes a recovery case: the lines were not billed.
  • Discounts: rule_id, customer, percent, effective_from, effective_to. Checked for customers on the plain list price only, so a protected-price finding is never counted twice.
  • Usage: customer, period_start, period_end, usage_units, entitlement_units, unit_rate, billed_amount. Expected = (usage − entitlement) × rate.
  • Configured prices: customer, configured_unit_price, effective_from, compared with what the documents commit to on that date.
  • Comparing two changes: two saved change runs side by side, matched by customer name. Nothing is recalculated and neither run is recommended; if the two runs read different files, the page says so.
  • Golden accounts: accounts you mark on their passport. Every change result then shows them first. A broken protection shows the breached lines’ own amount, even when the account nets to zero.
  • Change Evidence Pack (PDF): built only from the saved run: the decision, the change, the sources with their hashes, what was understood and held, the replay money, affected and protected accounts, the engine’s calculation steps and the digests. It is not digitally signed.
  • Recovery money: estimated is calculated from the records; attested is what a person reported; verified by a record only when a saved run contains a credit note reversing that invoice for that customer. An undercharge is never shown as verified.
  • Entitlements on a passport come from the latest discounts and usage files, not from the documents.

Findings and amounts

A finding is a statement about a customer with the reason, the amount (if any), the invoice line, the rule, the source text and the calculation. Amounts are labelled: calculated (integer arithmetic on stated prices and quantities) or observed (read from a record). A finding becomes confirmed only when a person says so. A recovered amount exists only when a person reports it on a recovery case. A billed price that differs from a commitment is a reason to look, not proof of a breach.

Limits

  • Unit prices only: no volume tiers, rebates, bundles, indexation or most-favoured-customer clauses.
  • One currency (INR) and one product per check.
  • PactMeter does not connect to billing, ERP, CRM or CPQ systems, and does not change prices or invoices, issue refunds or contact customers.
  • The commercial state is the state read in each saved run. It is not a live mirror of your systems.
  • Nobody has used it on real data yet. See Security for what is and is not claimed about data handling.

There are no marketing or third-party cookies, so there is nothing to switch on for them.