Skip to content

Upload a document manually

Who does this: Bookkeeper · Senior Accountant · Platform Admin When: A document didn't come through the ingestion channel, the client emailed it instead, you have a one-off backdated correction, or you want to do a controlled smoke test Result: A document landed, OCR'd, classified, and turned into a draft journal entry in the client's current open batch (or a new batch if none is open).

Most documents arrive through the ingestion channels you set up at onboarding. Manual upload is the fallback. Common reasons to use it: the client emailed a PDF instead of dropping it in their Drive folder, you're catching up on a backlog from before the channel was wired, or you want to verify the end-to-end pipeline works on a known-good document while debugging something else.

The pipeline is the same as for channel-ingested docs: OCR runs, the classification engine maps the document to an account, a draft journal entry is created, and the entry inherits its review status from the classification confidence (HIGH → ready, MEDIUM/LOW → flagged, UNCLASSIFIED → flagged with REVIEWER_ATTENTION_REQUIRED).

Before you start

  • [ ] The client exists with Bookkeeping enabled, chart of accounts populated, and ideally vendor master populated.
  • [ ] You have the document on hand — a clear scan or photo. PDF, PNG, and JPG are accepted; JPEG quality below ~150 DPI starts to hurt OCR accuracy.
  • [ ] You know the document type — invoice, receipt, bill, credit note, bank statement, or other. Classification depends on this.

TIP

If you have a stack of documents to backfill, upload them one at a time the first day, watch how they classify, and tighten the chart of accounts and vendor master based on what you see. Bulk-uploading 200 documents into a thinly-configured client just creates 200 entries to review by hand.

Steps

  1. Open Clients in the staff dashboard sidebar and click into your client.
  2. Open the Documents tab on the client detail page.
  3. Click Upload document in the top right.
  4. In the dialog:
    • Drag the file into the drop zone, or click to pick a file.
    • Document type — pick from the dropdown: Invoice, Receipt, Bill, Credit note, Bank statement, or Other. The platform uses this to route the document — bank statements go to the reconciliation pipeline, everything else goes to the journal-entry pipeline.
    • Note (optional) — a short comment that lands on the audit log; useful when you're recording why this is a manual upload (e.g. "client emailed instead of using Drive").
  5. Click Upload. The dialog shows a progress bar while the file uploads to the document store.

After upload:

  • The document appears on the Documents tab immediately, status PENDING_OCR.
  • OCR runs within ~30 seconds. The status flips to OCR_COMPLETE, then to CLASSIFIED.
  • A draft journal entry appears in the client's current open journal batch — open the Journal batches sidebar item to see it.

How to know it worked

Three checkpoints in order:

  1. The document row appears on the Documents tab with status CLASSIFIED (the terminal state of the classify-and-draft pipeline) within ~60 seconds of upload.
  2. The activity log shows three events for this document: bookkeeping.document.uploaded, bookkeeping.document.ocr_completed, bookkeeping.journal_entry.drafted.
  3. Open the client's current journal batch (sidebar → Journal batches → click the batch row). The new entry is in the table; verify the date, amount, and account match what you expect.

Common situations

If you see…It means…What to do
Document stuck on PENDING_OCR for more than 5 minutesThe OCR worker is backed up or has hit an errorSee OCR failing runbook
Status flips to OCR_FAILEDThe image was unreadable or in an unsupported formatClick into the document, read the failure reason, replace with a higher-quality scan and re-upload as a new document
Status reaches CLASSIFIED but no journal entry appearsThe batch service couldn't find or create an open batch — typically because the chart of accounts is emptyConfirm chart of accounts and vendor master are configured; see A document didn't appear in any batch
Journal entry appears but with confidence LOW or UNCLASSIFIEDOCR worked but classification couldn't pin a specific accountOpen the entry to review and reassign it manually — see Review a journal batch — and consider adding the vendor or tightening keywords for next time
Journal entry appears flagged with KEYWORD_MATCH_ONLY or NON_BASE_CURRENCYClassification needed reviewer attention by design (medium-confidence keyword hit, or non-SGD entry)Review the flag and either approve the entry or correct it; see Review a journal batch
You uploaded the wrong fileManual uploads are immutable once OCR has startedMark the resulting journal entry as REJECTED with a note, and re-upload the correct file

Internal use only — BreezyCorp