The Biloh finance engine: accounting you can run by chat

Biloh does not stop at the invoice. It carries a service business all the way to the books: a bank feed tied by the bank's own running balance, money in matched to invoices, money out coded with its GST evidence, inter-account transfers paired, a month, quarter and financial-year close ladder, the BAS worksheet on the real ATO labels, a cash P&L, a balance sheet, TPAR, a depreciation schedule and a one-ZIP period pack for the accountant. Every one of those is a tool an AI agent can call, so "close September and give me the BAS" is a sentence, not a project. Cash basis, Australian GST and BAS today; no payroll, no accruals, no inventory, stated on the face of every report.

What is the finance engine?

Most field-service platforms end at the invoice. The job is done, the invoice goes out, and the moment the money lands you are handed to a separate accounting package, a bookkeeper, or a spreadsheet. Biloh keeps going. The same platform that quoted the work and dispatched the contractor also reconciles the bank, codes the spend, closes the period, and produces the BAS and the year-end reports, and every step is available to an AI agent over the Model Context Protocol.

The practical difference is who does the bookkeeping. With Biloh connected to an AI assistant, the operator says:

"Import this week's bank statement into the everyday account, match the deposits to invoices, code the rest, and tell me what is still unexplained."

and then, at the end of the quarter:

"Close September, close the July to September quarter, and give me the BAS figures and the pack for my accountant."

The agent calls the same tools the web app uses. The figures it reads back are the figures the accountant sees.

What does it actually cover?

StageWhat Biloh doesRead more
Bank feedRegister each real account (everyday, tax set-aside, contractor buffer), import a statement CSV, tie every line by the bank's running balanceThe balance chain
Money inRank deposits against outstanding invoices, match, learn the payer for next timeReconcile money in
Money outSettle contractor bills against debits, code supplier spend to a category with its GST, pair receipts from the shoebox, split mixed linesReconcile money out
Own moneyPair the two halves of a transfer between your own accounts so it reaches no reportEnvelopes
CloseMonth, quarter and financial-year closes on one ladder, refused while the bank feed has a holeClose a month and a quarter
BASG1, 1A, 1B and net GST on the ATO labels, with an exceptions list for GST held out for missing evidenceCash-basis BAS from the bank feed
ReportsCash P&L ex-GST, balance sheet that balances by construction, TPAR, depreciation schedule, aged payablesFinance MCP tools
AccountantOne ZIP per month, quarter or year with every report, the evidence and a manifestPrepare the BAS and the accountant pack
ComplianceA calendar of BAS, super and TPAR due dates that seeds itself, plus your own renewalsPrepare the BAS and the accountant pack

Why is "refuses" a feature?

An accounting engine that will do anything you ask is one that will quietly produce a wrong BAS. Biloh is built to refuse, and to say why, before any row is written:

  • A statement that does not chain onto the account's last balance is refused with wrong_account_or_gap, naming the expected and actual figures. Zero rows land. Either it is the wrong file or a week is missing, and both have the same fix.
  • A period close is refused with bank_completeness_failed while any line in the range fails to tie, naming the first break's date and the gap in cents.
  • A purchase above the receipt-only threshold with no tax invoice has its GST held out of 1B and named in the exceptions list. The worksheet never overstates a claim and never silently drops one.
  • An asset is never depreciated by a method nobody chose. create_asset requires the method, and an instant write-off above the tenant's threshold is refused with the threshold named.
  • The income-tax provision in the tax envelope is zero until you and your accountant set the percentage. The platform never guesses a tax rate.

The full list is in bank import and close refusal codes.

What is it honest about not doing?

Every report says its basis on its face, and the balance sheet carries a not_here_note naming what it does not hold. Today the engine is:

  • Cash basis. Income is recognised when the money lands, a purchase when it is paid. Accrual reporting exists for the AR and AP reconciliation view, but the close, BAS and P&L are cash.
  • Australian. GST at 10%, the ATO's BAS labels, financial years ending 30 June, TPAR by 28 August, super quarters. The tax locale is a tenant setting and the design is not tied to one jurisdiction, but Australia is what ships.
  • Not payroll, not inventory, not accruals. No wages, no stock, no work in progress, no loans or hire-purchase the platform has not been told about.
  • CSV bank feed. Bank lines come from an internet-banking export (or a data-recipient feed where enabled), never from a general ledger, and the chain guard means a skipped export is caught, not assumed.

If a business needs those, Biloh can still be the operational system and mirror invoices and bills to Xero. The Xero connection tools exist for exactly that shape.

How does an agent drive it?

Every stage above is an MCP tool with a plain-English description, a "use when / don't use when" block, its preconditions and its side effects. An agent that has never seen Biloh can read get_bookkeeper_worklist, work each stream, and close the month, and Biloh's own smoke runner does exactly that with a fresh, context-free agent every fire. Closing the books by chat walks through the conversation end to end.

Where does it sit against the rest of Biloh?

The finance engine consumes what the operational side produces. A completed job becomes an invoice; a released work order becomes a payable; a signed proposal sets the expected income. So the books are not a parallel record to be reconciled against operations, they are the operations, priced and dated. That is why a matched deposit can name the client, the site and the visit it paid for, and why the TPAR is produced from the payment ledger rather than assembled by hand in August.

Next steps

Last updated 2026-09-18