Start here
The twelve businesses you can practise on
Each simulation sets up a different New Zealand business, trades it, banks it and files it — then checks the books from the raw rows.
The exercises in this handbook run on simulated businesses. Each one is a real shape of New Zealand business, with the tax settings and the awkward transactions that go with it.
| Simulation | Business | What makes it worth practising |
|---|---|---|
hairdresser | Bright Cuts | Not registered for GST, so no GST appears anywhere on the documents |
consultant | Kōwhai Advisory | Payments-basis GST, monthly filing, one invoice paid late |
builder | Tasman Builders Ltd | Stage payments against a single contract, so one job produces several invoices |
cafe | Harbour Cafe & Co | High volume of small sales and a large daily banking pattern |
onlinestore | Loom & Light | Refunds and returns, which reverse revenue after the fact |
landlord | Marine Parade Rentals | Exempt rent beside taxable supplies, so the GST return needs care |
horticulture | Whirinaki Contracting | Six-monthly GST, so a period spans a lot of trading |
startup | Foundry Labs | No GST registration and no revenue, so the books are mostly costs |
dental | Marine Parade Dental | Security switched on, so you work with roles and passwords |
plumber | Ngata Plumbing Ltd | A busy bank statement with many lines to code |
wholesaler | Pacific Trading Ltd | Inventory bought and sold, with a six-monthly return |
rounding | Precision Engineering Ltd | Amounts chosen to break the arithmetic that rounds the wrong way |
Ask for the list at any time:
python scripts/simulate.py --list
What a simulation actually does
Running one is not a script that types transactions into the screen. It drives the real application. It sets the business up, sends its invoices, records its bills, imports a bank statement, codes the lines, files a GST period and takes a backup — through the same pages you will use.
Then it goes back over what it did, reading the database directly, and checks:
- every entry balances, so money in equals money out;
- every invoice's lines add up to its total;
- the GST in the return equals the GST in the ledger;
- the balance sheet balances;
- nothing is stored off the cent;
- a voided entry cancels itself out;
- the fingerprint chain has no breaks.
Every round draws different prices, dates, GST bases and filing frequencies from that round's seed, so two runs are never quite the same. Run one business in detail:
python scripts/simulate.py consultant
Or run all twelve, ten times over:
python scripts/simulate.py --rounds 10
Why this matters more than it sounds
A rule that is easy to state is often hard to apply. Inventory is measured at the lower of cost and net realisable value NZ IAS 2.9 is one sentence. Knowing when a selling price has fallen far enough that the book value has to come down is a judgement, and judgement needs practice on something that behaves like a real business.
The simulations give you a business where the awkward cases are present on purpose:
- a customer who pays late, so the aged debtors report has something in it;
- a payment made twice, which the duplicate-payment procedure should catch;
- a manual journal, which an auditor will ask about;
- a bank statement that has to be reconciled, and can be made not to agree;
- a period that can be closed, and then quietly tested by backdating an entry into it.
Choosing where to start
If you are new to bookkeeping, start with the consultant. It is a small business with ordinary transactions and one late payment.
If you are here for the audit side, start with the plumber. A busy bank statement produces more coding decisions, more opportunities to make a mistake, and a more interesting reconciliation.
If you are teaching, use the rounding business last. It is built from the amounts that break naive rounding, and it is the one that shows why money has to be handled as decimal cents rather than as a floating-point number.