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
- Open Clients in the staff dashboard sidebar and click into your client.
- Open the Documents tab on the client detail page.
- Click Upload document in the top right.
- 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").
- 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 toCLASSIFIED. - 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:
- 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. - The activity log shows three events for this document:
bookkeeping.document.uploaded,bookkeeping.document.ocr_completed,bookkeeping.journal_entry.drafted. - 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 minutes | The OCR worker is backed up or has hit an error | See OCR failing runbook |
Status flips to OCR_FAILED | The image was unreadable or in an unsupported format | Click 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 appears | The batch service couldn't find or create an open batch — typically because the chart of accounts is empty | Confirm 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 UNCLASSIFIED | OCR worked but classification couldn't pin a specific account | Open 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_CURRENCY | Classification 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 file | Manual uploads are immutable once OCR has started | Mark the resulting journal entry as REJECTED with a note, and re-upload the correct file |
Related runbooks
- Review a journal batch — what to do with the draft once it lands
- Set up an ingestion channel — automate this away
- A document didn't appear in any batch — diagnostic flow for ingestion issues
- OCR failing runbook — when OCR hangs or errors
- Bookkeeping SOP §4.1 — document type definitions