Bank import and close refusal codes

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.

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_transactionA split claims more GST than one eleventh of its own amountCorrect the GST
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 inPair against a debit
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
open_child_months (warning)run_period_closeA quarter or FY was closed over open monthsClose the months, then re-close the parent
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

Last updated 2026-09-18