ByteBook Training Handbook

Practise

Twelve training sessions

Chapter 2116 min read

One session per business, each with a task, the skills it builds, and a marking note.

How to run a session

Each session takes about an hour. The shape is the same every time:

  1. Set up the business with the simulation, so the books are populated the way a real business's would be.
  2. Do the task in the application. The task always ends with a document or a number somebody else could check.
  3. Run the assurance procedures and write down what they found.
  4. Mark it against the note at the end of the session.

Marking is where the learning happens, so do not skip step four.

Session 1 — Bright Cuts (no GST)

Run: python scripts/simulate.py hairdresser

Task: Send three invoices, record two payments, and produce the profit and loss report for the quarter.

Marking note: The business is not registered for GST, so no GST appears on any document, no GST return is expected, and the invoice totals equal the revenue. A candidate who records a GST figure has applied last week's habit instead of reading the settings. Look for evidence that they checked the registration status before invoicing.

Session 2 — Kōwhai Advisory (payments basis)

Run: python scripts/simulate.py consultant

Task: Work out the GST return for the quarter, then explain why the figure changes if you switch the period to include the following month.

Marking note: The business files on the payments basis, so a March invoice paid in May belongs in the later period. The correct answer explains that the basis moves the transaction, not the invoice date. The most common wrong answer treats the invoice date as decisive.

Session 3 — Tasman Builders (stage payments)

Run: python scripts/simulate.py builder

Task: Explain, for one contract, why more than one invoice is raised, and what each invoice recognises.

Marking note: Revenue is recognised as each performance obligation is satisfied NZ IFRS 15.31. Each stage invoice recognises the work transferred in that stage, not the whole contract at the first invoice and not on receipt of money. Look for the phrase as the work is done, and for a candidate who can say what would change if the whole contract were invoiced up front.

Session 4 — Harbour Cafe (volume)

Run: python scripts/simulate.py cafe

Task: Code a month of bank lines, then confirm the bank balance agrees with the statement.

Marking note: The test is whether the candidate finishes. A busy statement loses accuracy, and the reconciliation exposes it: a balance that agrees while five lines are still uncoded is not a finished reconciliation. Mark down any candidate who clears the waiting list by marking business lines as not business without a reason.

Session 5 — Loom & Light (refunds)

Run: python scripts/simulate.py onlinestore

Task: Record a refund against an earlier sale and explain what it does to the period's revenue and GST.

Marking note: The refund reverses the sale it corrects. Revenue and GST both come back down, and the period it lands in is the period it happens. A candidate who treats a refund as a new negative sale in a later period has the arithmetic right and the period wrong — and the GST reconciliation procedure will show it.

Session 6 — Marine Parade Rentals (exempt income)

Run: python scripts/simulate.py landlord

Task: Complete the GST return and explain why box 5 is larger than the taxable supplies suggest.

Marking note: Exempt rent is income and is not taxable. Box 5 includes it; box 9 does not. The strongest answers note that GST on costs relating to exempt supplies is not claimable in the same way, which is the trap in this exercise and the reason the business is in the set.

Session 7 — Whirinaki Contracting (six-monthly)

Run: python scripts/simulate.py horticulture

Task: File a six-monthly return and reconcile it to the ledger.

Marking note: A longer period contains more transactions and more chances for a misfiled one. The mark is for the reconciliation, not the total: the candidate should be able to show that the GST in the return is the GST in the ledger, transaction by transaction, rather than asserting that the totals match.

Session 8 — Foundry Labs (no revenue)

Run: python scripts/simulate.py startup

Task: Produce a balance sheet and a profit and loss report for a business with no income, and explain what each one says.

Marking note: This is the session that separates people who can read reports from people who can produce them. With no revenue, the profit and loss report is all costs, and the balance sheet is where the money went. A strong answer explains that a growing loss with a falling bank balance and rising creditors describes a business being funded by someone, and names who.

Session 9 — Marine Parade Dental (security on)

Run: python scripts/simulate.py dental

Task: Set up three roles, do a piece of bookkeeping as the general manager, and run the assurance procedures as the auditor.

Marking note: The two things to look for are that the owner's password was required before any other access was granted, and that the candidate noticed they could not change anything as the auditor. That second observation is the learning objective of the session.

Session 10 — Ngata Plumbing (a busy statement)

Run: python scripts/simulate.py plumber

Task: Reconcile the bank, then run the assurance procedures and report every exception with an explanation of its cause.

Marking note: Mark the explanations, not the exceptions. "Four bank lines are not coded" is an observation. "Four lines are not coded because the description is too short to choose an account, and here is what I checked" is a finding. The distinction between those two is the whole of working-paper quality.

Session 11 — Pacific Trading (inventory)

Run: python scripts/simulate.py wholesaler

Task: Record a stock purchase and a sale, and explain how the stock is valued at the end of the period.

Marking note: Inventories are measured at the lower of cost and net realisable value NZ IAS 2.9, and cost is assigned using first-in, first-out or a weighted average NZ IAS 2.25. The strongest answers say what they would do if the selling price fell: the write-down is recognised in the period it happens NZ IAS 2.28.

Session 12 — Precision Engineering (the rounding trap)

Run: python scripts/simulate.py rounding

Task: Take a set of amounts built to break naive rounding, post them, and prove that nothing is stored off the cent.

Marking note: This is the session that rewards patience. Money is handled as decimal cents, rounded half up, so a figure on a screen is the figure in the file. A candidate who finds a discrepancy should be able to say whether it came from a rounding rule, a GST split, or a miscoding — and should be able to show which entry caused it by reading the general ledger rather than the report.

Marking the whole course

CheckWhat a pass looks like
The numbersThe reports are reproduced from the rows by procedure A14
The recordNo broken links in the chain; sealed periods verify
The reasoningEvery conclusion names the evidence behind it
The referencesEvery standard cited by paragraph, not by name
The honestyExceptions are reported with their cause, not hidden
Arrow keys, or the buttons