Skip to main content

Upload Supplier Invoice

What it is

Takes a scan or photograph of a supplier's bill, stores it, and has it read automatically — supplier, invoice number, date, amounts and line items — so you only have to check the result rather than type it in.

It handles one file at a time. There is no batch upload.

Who can open it

Any signed-in staff account that is active, subject to the same two gates as the Supplier Invoices list — an active account, and the finance.ledger feature grant while FEATURE_GRANULAR_RBAC is on. The owner bypasses the grant.

Before you start

Pick the entity first. The invoice is filed against whichever entity is selected in the switcher, and the panel at the top of this screen names it. With none selected it reads "Select an entity in the sidebar first" and the upload button is disabled.

⚠️ A2Z-F422 is recorded as UNKNOWN / NEEDS TESTING in the inventory, with "OCR accuracy unverified". Nothing extracted here should be trusted without reading it against the original.

What is accepted: PDF, JPEG, PNG or WebP, up to 10 MB. Both limits are checked before anything is sent, and again on the server.

Every control on the page

ControlWhat it does
Back to Supplier Invoices
The drop zoneClick it to browse, or drag a file onto it. It reads "Drop the file here" while a file is over it
The selected-file stripShows the file name, its size in KB and its type, with an to clear it
Extract with Gemini VisionUploads and reads the file. Disabled until an entity is selected
Review & ConfirmAfter a successful upload — opens the new invoice
Upload AnotherClears the screen back to the drop zone

"What happens next" is printed under the drop zone: the file is stored, read, matched to a supplier and PO where possible, and then waits for you to review and confirm it.

What it writes

Extract with Gemini Vision posts the file to /api/supplier-invoices/upload, which:

  • stores the file;
  • reads it and pulls out the header fields and the line items;
  • tries to match a supplier and a purchase order within the selected entity;
  • creates the invoice record with a status of pending review;
  • inserts the line items.

The invoice is created regardless of how well the reading went. It is the confirm step on the invoice screen that turns it into something the business acts on.

The panel tells you which of the two steps failed. It is green only when both worked, and amber otherwise:

  • "Invoice uploaded — extraction failed" — nothing could be read from the file, so every field is blank. The underlying error is printed. Enter the details by hand on the next screen.
  • "Invoice uploaded — line items were not saved" — the reading worked and the lines did not store. It names how many lines were read, and the invoice has a header and no lines. Add them by hand before confirming, because a confirmed invoice is read-only.
  • A clean run says "Invoice uploaded and extracted" and states how many lines were saved.

Until 2026-08-23 all three cases showed the same green success panel. A failed reading appeared as a success at 0% confidence, and a failed line-item write was recorded only in the server log.

When it goes wrong

"Unsupported file type: …" Only PDF, JPEG, PNG and WebP are accepted. A HEIC photo from a phone is a common cause — convert it first.

"File too large (… MB). Max 10 MB." Reduce the resolution or split the PDF.

"Select an entity before uploading." Nothing was sent. Choose an entity and press the button again — the file is still selected.

Success, but 0% confidence and no supplier detected. The reading failed. Open the invoice and enter the details by hand, or upload a clearer scan.

Success, but the invoice has no line items. The known silent failure above. Add them on the invoice screen.

The supplier or PO was not matched. Matching is limited to the selected entity. If the bill belongs to a different company, upload it under that entity instead.