Reconcile money out

Every debit in the feed is one of four things: a contractor bill (settle it with settle_bill_with_bank_debit), a supplier purchase (code it to a category with its GST, from the invoice's own lines where you have one), a movement of your own money (pair it as a transfer), or personal spend (a category treated as excluded). A receipt photographed before the debit arrived waits in the shoebox and is paired when the line lands; a mixed line is split so GST is claimed only on the business part. GST without evidence is held out of the BAS until the paper arrives.

Which of four things is this debit?

Read the worklist (triage_bank_feed, or get_bookkeeper_worklist for the counts by stream) and, for each debit, decide:

The debit isDo thisWhere it lands
Paying a contractor's billSettle the billPurchases and GST report, 1B, the contractor's TPAR row
Buying from a supplierCode it to a category with its GSTPurchases GST, 1B when substantiated, the P&L
Your own money moving to another accountPair it as a transferNowhere, by design
PersonalCode it to an excluded categoryNowhere

Contractor bills

A contractor's tax invoice is recorded once with record_bill: a multi-line bill whose lines link to the open payables that the platform accrued when the work orders were released. When the debit that paid it lands:

"That $1,540 transfer is the window contractor's August bill."

settle_bill_with_bank_debit fans the debit across the bill's payables oldest first, releases every payable the settlement now covers, marks the debit matched, learns the contractor's bank alias, and sets the bill part paid or paid. Part payments are first class: a debit smaller than the outstanding leaves the bill part paid with the split recorded per payable. The bank's value date is the paid date. Reversible with reverse_bill_settlement.

Two shortcuts: record_paid_bill records and settles a bill you never entered in one call, and match_bank_debit_to_payable confirms a single payable without a bill. A bill paid outside the feed (cash, a card not in the books) is settle_bill_externally.

If the contractor is not registered for GST, finance.ap.unregistered_gst_enforcement (default block) refuses a bill that claims GST from them.

Supplier spend

Register a supplier once with create_vendor (with verify_vendor_abn to take its GST registration from the ABR rather than a guess). Then, per debit, the best coding is the one the invoice itself states:

"Code the hardware store debit from the invoice I attached."

stage_vendor_coding_from_document reads the document's own lines and stages a coding: vendor, reporting category, and claimable GST in cents. Staging writes no figure. confirm_vendor_coding is the only door through which a staged coding becomes a number any report shows. For a supplier you pay every month, create_vendor_coding_rule matches a description substring to the vendor and stages from its defaults after each import when finance.vendors.auto_apply_coding_rules is on; you still confirm.

A one-off line with no document is triaged straight to a category (triage_bank_feed in decide mode). Above the receipt-only threshold its GST is held out of 1B as missing_evidence until a document lands; see cash-basis BAS.

The shoebox: paper that arrived first

A receipt photographed in the car park has nowhere to live until the debit turns up in a statement days later. The shoebox is that place.

  1. create_shoebox_upload_link gives you a short-lived, single-use link to snap the receipt from a phone. A document Biloh already holds can be moved in with move_document_to_shoebox.
  2. list_shoebox_items shows what is waiting, with the figures already read off the paper (supplier, ABN, total, GST, date) and needs_human: true when part of it could not be read.
  3. When the statement lands, suggest_shoebox_pairings offers each receipt against an unspoken-for debit within finance.shoebox.pairing_window_days. It writes nothing.
  4. confirm_shoebox_pairing is the decision: it attaches the receipt as the debit's evidence and re-derives substantiation on both sides, so the purchases GST report claims what it now can with no further action.

A receipt for a purchase that will never appear in any bank feed (paid in cash) leaves the shoebox with record_shoebox_cash_expense, dated the day of the expense. An item is never deleted or aged out by time alone; past finance.shoebox.aging_window_days it is named in your attention digest.

Mixed lines

A bank line carries one category and one GST figure. A supermarket debit that is mostly groceries and partly cleaning supplies cannot be coded honestly as one thing. split_bank_transaction divides it into typed splits, each with its own category, GST in cents, treatment, note and optional receipt. The splits must sum exactly to the line, no split may claim more than one eleventh of its own amount, and a split claiming GST needs a document or an on-record attestation of where the paper is. Every refusal happens before any row is written. Reversible with unsplit_bank_transaction.

Your own money

A debit that is the weekly sweep to the tax set-aside is not an expense. Pair it with the matching credit in the other account using match_transfer_pair; get_reconciliation_suggestions lists the candidates under possible_transfers. If only one half is in the feed, triage the line to the own-account-transfer category instead. See envelopes.

Fixed assets

A debit that bought a laptop, a mower or a trailer is not an expense either. Mint the asset from the debit so the register and the bank agree to the cent: track assets and depreciation.

Check the coding before you close

"What have I coded this month, by category?"

get_category_totals groups the period's money by reporting category with each category's P&L treatment beside it. list_expense_records filtered on missing receipt is the substantiation worklist. get_bank_triage_report is the month's summary by category or rollup class.

Related

Last updated 2026-09-18