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
| Control | What it does |
|---|---|
| Upload Invoice | Goes 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 / Rejected | Re-queries the server. Pending Review carries a yellow count of everything awaiting review |
The table — no column is sortable:
| Column | What it shows |
|---|---|
| Invoice # | The supplier's own invoice number, or an italic — when the reader could not find one |
| Supplier | The matched supplier, or an italic Unknown when none was matched |
| Date | The invoice date, or - |
| PO | The 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 |
| Amount | Amount with its currency, formatted Indian-style |
| OCR | A small confidence bar and a percentage |
| Status | Pending Review, Confirmed or Rejected |
| Review | Opens 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.
Related screens
- Upload Supplier Invoice — getting a bill into this list.
- Supplier Invoice — checking and confirming one.
- Purchase Orders — the orders these bills are matched against.
- Suppliers — the suppliers who sent them.