ReferenceView as Markdown ↗

Bank import and close refusal codes

In plain terms

When Biloh can't safely bring in a bank statement, close a month or code a payment, it stops before saving anything and says why, with the figures. This page lists each reason and what to do next, so your assistant can tell you how to fix it. Only two can be overridden, each with a reason that is recorded.

The finance engine refuses before it writes. Each refusal returns a code and the figures that explain it, so an agent can tell the operator what to do rather than what went wrong. None of these leaves a half-written state: a refused import writes zero rows, a refused close writes no row, a refused split writes nothing.

At a glance

Who it's for:
AI assistants working in a Biloh business
What a person approves:
Biloh never moves money: its tools record payments that already happened, and a pay-now link opens the business's own Stripe checkout for its client. · Every change is recorded, with who made it and when. · Your business records are stored in Sydney, Australia.
Checked against the code:
2026-09-18

Bank feed

CodeToolMeaningComes withNext step
wrong_account_or_gapimport_bank_csvThe file's implied opening balance does not chain onto the accountExpected and actual balances; zero rows writtenWrong file for this account, or a missing window: export the right days
override_reason_requiredimport_bank_csvoverride_chain_gap was set with an empty reasonNothing importedGive a reason; the override is audit-logged
identifier_not_maskedcreate_bank_accountA full account number or BSB was suppliedNothing storedSupply the last four digits only
bank_completeness_failedrun_period_close, run_month_end_closeA line in the range fails to tie by running balanceFirst break's date and the gap in cents; no row writtenImport the missing window, or sign off over the gap with a reason
needs_variance_reasonrun_period_closeA peer total was passed and differs from Biloh's received figurevariance_cents, received_centsExplain the variance in variance_reason and retry

Money in

CodeToolMeaningNext step
already_matchedmatch_bank_credit_to_invoiceThis deposit has already paid an invoice; the payment is keyed to the deposit so it can never pay twiceNothing to do, or unmatch first if the earlier match was wrong
already_paid (warning)get_reconciliation_suggestions, triage_bank_feedThe candidate invoice is settled and is offered only because the bank text names itUsually link_bank_credit_to_existing_payment
amount_mismatch (warning)sameThe deposit and the invoice differ in amountA part payment, split or fee: match knowingly, or decide otherwise

Money out

CodeToolMeaningNext step
split_total_mismatchsplit_bank_transactionThe splits do not sum to the line; the message names the gap in centsCorrect the amounts
gst_exceeds_one_eleventhsplit_bank_transaction, triage_bank_transaction, update_expense_recordThe stated GST is more than one eleventh of the amount, rounded to the nearest cent (19413 allows at most 1765)Correct the GST to the figure printed on the paper
gst_requires_evidencesplit_bank_transactionA split claims GST with no document and no attestationAttach the receipt or state where the paper is
invalid_expense_payloadsplit_bank_transactionAn impossible GST and treatment pairCorrect the pair
already_split, bank_txn_already_matched, split_requires_debit, category_not_foundsplit_bank_transactionState refusalsUnsplit or unmatch first; use a debit; use a listed category
bank_line_not_debitconfirm_shoebox_pairingA receipt substantiates money going out, not in. Only a supplier's adjustment note (or credit note) pairs to a creditPair the receipt against a debit
adjustment_note_mismatchconfirm_shoebox_pairingAn adjustment note whose amount or supplier does not match the creditPair it to the credit for exactly its amount
refund_gst_unclaimed (BAS contradiction)get_bas_worksheetA supplier-looking credit is coded with no GST while an exact-match adjustment note waits; headline_safe is falseCode the credit to purchase-refund with the note's GST and the note as document_id
already_exitedconfirm_shoebox_pairingThe receipt already left as a cash expenseUnpick that expense first if it was wrong
GST on an unregistered contractorrecord_bill and settlement toolsThe contractor is not GST-registered and the bill claims GSTGoverned by finance.ap.unregistered_gst_enforcement; correct the bill
Out-of-gate settlementsettle_bill_with_bank_debitThe linked client invoice is unpaidGoverned by finance.ap.out_of_gate_settlement: warn or refuse
Paid date in a closed periodsettlement toolsThe debit's value date falls inside a closed periodReopen the period with a reason first

Assets

CodeToolMeaningNext step
Instant write-off above thresholdcreate_assetThe cost exceeds finance.assets.instant_writeoff_threshold; the refusal names the thresholdChoose diminishing value or prime cost with an effective life
Debit already minted an assetcreate_assetOne debit mints one assetSplit the line first if it bought two things

Obligations

CodeToolMeaningNext step
Receipt requiredmark_obligation_lodgedNo lodgement receipt document was namedRecord the receipt in the evidence layer, then lodge with its id

Periods

CodeToolMeaningNext step
Not closedreopen_periodThe period was never closedNothing to reopen; make the change
child_period_openrun_period_closeA quarter or FY is the sum of its months and one is not closed (open_child_months names them)Close the named months, then the quarter or FY
stale (state)get_period_ladderA child was reopened after this period closedRe-close the parent

Cross-cutting

CodeWhereMeaning
expected_tenant_mismatchany toolThe expected_tenant assertion did not match the connection's tenant; nothing ran. See write safety
upgrade_requiredtier-gated toolsThe capability is not in this business's plan

Related

Under the hood

Source files this page is checked against:

  • lib/mcp/tools/finance/import-bank-csv.ts
  • lib/mcp/tools/finance/run-period-close.ts
  • lib/mcp/tools/finance/split-bank-transaction.ts
  • lib/mcp/tools/finance/match-bank-credit-to-invoice.ts
  • lib/mcp/tools/finance/shoebox.ts

Raw markdown: /docs-md/reference/bank-import-and-close-refusal-codes

Last updated 2026-10-26