Load invoice lines
One row per invoice line, as CSV. Required columns: invoice_id, vendor, description, amount. Useful ones: invoice_date, sku, qty, unit, unit_price, tax. Column names are matched loosely, so rate, price and unit_price all land in the same place. Anything we do not recognize is kept, not dropped.
Nothing leaves this browser. There is no upload endpoint and no database. The server behind this page serves files and checks a token, and that is all it does.
A contract is a vendor, a term, and the rates you agreed. The engine can only
find what a term covers.
Reject anything we got wrong. Rejections come out of the total and stay
rejected when the audit re-runs.
Drafts, not sent mail
One letter per vendor, built from findings you have kept. Nothing here sends anything. Findings below the confidence threshold are held back and listed at the bottom instead. They go to a person before they go to a vendor.