Skip to main content

Supplier Invoices

What it is

Bills your suppliers have sent you, after they have been photographed or scanned and read automatically. Each row is one invoice: its number, who sent it, the purchase order it was matched to, the amount, how confident the reader was, and whether a person has confirmed it yet.

Nothing here is booked until someone confirms it. The subtitle on the page says as much — "review and confirm before booking".

Who can open it

Any signed-in staff account that is active. Two gates sit in front of it, both in proxy.ts: an active account, and the finance.ledger feature grant while FEATURE_GRANULAR_RBAC is on. The owner bypasses the grant.

finance.ledger is the same grant that covers /soa.

Before you start

This screen needs an entity chosen. With no entity selected it shows "Select an entity to view supplier invoices." and loads nothing. Unlike some other lists, the entity here is a real filter — you are seeing that entity's invoices only.

⚠️ A2Z-F422 is recorded as UNKNOWN / NEEDS TESTING in the inventory, with "OCR accuracy unverified". Treat every extracted figure as a first draft. That is what the confirm step is for.

Every control on the page

ControlWhat it does
Upload InvoiceGoes to Upload Supplier Invoice
Search invoice #, supplier, PO…Filters the rows already loaded, as you type. Matches the invoice number, the supplier name and the PO number
All / Pending Review / Confirmed / RejectedRe-queries the server. Pending Review carries a yellow count of everything awaiting review

The table — no column is sortable:

ColumnWhat it shows
Invoice #The supplier's own invoice number, or an italic when the reader could not find one
SupplierThe matched supplier, or an italic Unknown when none was matched
DateThe invoice date, or -
POThe matched purchase order number as a link, or an italic . It opens that purchase order directly. It used to point at the list with a ?po= parameter the list never read, so it just opened everything
AmountAmount with its currency, formatted Indian-style
OCRA small confidence bar and a percentage
StatusPending Review, Confirmed or Rejected
ReviewOpens the invoice to check and confirm it

An invoice with no confidence score shows an empty bar next to a -, and the tooltip reads "Not scored by OCR". Until 2026-08-23 the width was invalid CSS when the score was missing, the browser dropped it, and the bar filled — so "not scored" rendered as a confident 100%.

Empty state: "No supplier invoices found" with a link to upload the first one. The same panel appears when a search matches nothing.

What it writes

Nothing. Every action on this screen either re-queries or navigates. Invoices are created on Upload and changed on the invoice screen.

The list reads through GET /api/supplier-invoices, filtered by the selected entity and, when a status button is active, by that status.

When it goes wrong

"Select an entity to view supplier invoices." Choose an entity in the switcher.

"Error: HTTP 403". Your account lacks the finance.ledger grant while granular permissions are switched on.

The OCR bar looks full but the invoice was never read. Known display defect — see above.

The PO link took me to the whole list. Expected; the link carries a reference the list does not use. Search the list for the PO number instead.

An invoice is missing. Check the entity, then check the status buttons — a Rejected invoice is hidden while Pending Review is selected.