# Envelopes: the tax set-aside and the contractor buffer

> Register a savings account with purpose tax_set_aside and another with purpose contractor_buffer, and Biloh computes a target for each: the open quarter's net GST plus your income-tax provision for the first, open contractor payables plus the next few weeks of scheduled visits at each visit's contractor rate for the second. Actuals are each account's chained bank balance, never a stored figure. The gap is named on the accountant summary and, past a tolerance, in your attention digest. Biloh never moves the money; you sweep it at your bank and the feed pairs the two halves.

URL: https://biloh.com.au/docs/concepts/envelopes-tax-set-aside-and-contractor-buffer
Category: Explanation | Audience: operator | Updated: 2026-09-18

## What is an envelope?

The old cash-in-jars habit, applied to bank accounts. A service business that
collects GST and pays contractors has two sums it must not spend: the GST it
is holding for the ATO, and the money it will owe contractors for work already
scheduled. Keeping each in its own savings account is common practice. What
is uncommon is knowing, on any given Tuesday, whether the balance in there is
enough.

Biloh answers that with `get_envelope_targets`: for each envelope, what should
be there, what is, and the gap.

## How is each target computed?

**Tax set-aside.** The net GST position for the open BAS quarter to date (1A
less 1B, from the same library the BAS worksheet reads) plus an income-tax
provision: `finance.envelopes.income_tax_provision_pct` of net cash profit for
the financial year to date. That percentage defaults to zero, and the response
carries `provision_unset` until you set it. The platform never guesses a tax
rate; that number is yours and your accountant's.

**Contractor buffer.** Open contractor payables (work released but not yet
paid) plus the projected cost of scheduled visits over the next
`finance.envelopes.buffer_horizon_weeks` (default six), each visit priced at
its effective contractor rate. Because the schedule is the same engine that
spawns the jobs, the projection is the real forward book, not an average.

## How are actuals measured?

By the chained bank balance of the account registered for that purpose, never
a figure someone typed. Register the accounts once with `create_bank_account`,
giving each its purpose (`tax_set_aside`, `contractor_buffer`, `operating`).
An envelope with no account registered for its purpose still shows its target
and reports `no_account_registered`, so the gap is named rather than hidden.

The tolerance before the attention digest names a shortfall is
`finance.envelopes.digest_tolerance_cents` (default $50).

## What does Biloh do about the gap?

Nothing at the bank. `get_envelope_targets` advises; it never moves money. The
weekly accountant summary carries a sweep card: "move $X to the tax set-aside,
$Y to the contractor buffer". You make the transfers in your banking app.

When both accounts' statements are next imported, `get_reconciliation_suggestions`
offers the debit in the everyday account and the equal credit in the savings
account as a `possible_transfer`, and `match_transfer_pair` confirms them as
the two halves of one movement of your own money. Both lines move to a
transfer state and reach no report, while remaining real lines in both
accounts' balance chains. The pair is reversible with `unmatch_transfer_pair`.

The two halves must be equal, in different registered accounts, and land
within `finance.bankfeed.transfer_window_days` of each other (default three).
If a fee was taken so the amounts differ, pair nothing; code the fee
separately.

## Why does this matter for the close?

Because an envelope shortfall is the earliest warning that a BAS will hurt. A
business that sees "tax set-aside is $1,200 short of target" in week four of
the quarter has time to fix it. One that discovers it on lodgement day does
not. The envelope report sits at the top of `get_accountant_summary` for that
reason.

## Related

- [The balance chain](/docs/concepts/the-balance-chain)
- [Cash-basis BAS from the bank feed](/docs/concepts/cash-basis-bas-from-the-bank-feed)
- [Register your bank accounts and import a statement](/docs/how-to/register-bank-accounts-and-import-a-statement)
