Your setup isn't quite finished
Add your opening bank balance to get accurate reports. Finish setup →
Money In This Month
${{ formatMoney(dashData.moneyIn) }}
{{ dashData.moneyInChange >= 0 ? '↑' : '↓' }} vs last month
Money Out This Month
${{ formatMoney(dashData.moneyOut) }}
{{ dashData.moneyOutChange <= 0 ? '↓' : '↑' }} vs last month
Profit This Month
${{ formatMoney(dashData.profit) }}
{{ dashData.profitChange >= 0 ? '↑' : '↓' }} vs last month
Need Your Attention
{{ pendingCount }}
Transactions unchecked
Recent Transactions
{{ tx.name }}
{{ tx.classified ? tx.category : 'Needs a category' }}
{{ tx.amount > 0 ? '+' : '' }}${{ Math.abs(tx.amount).toLocaleString('en-NZ', {minimumFractionDigits:2}) }}
{{ tx.date }}
Coming Up
{{ item.title }}
{{ item.date }}
{{ item.amount > 0 ? '$'+formatMoney(item.amount) : '—' }}
Your Bank Balances
{{ acc.name }}
{{ acc.number }}
{{ acc.balance >= 0 ? '$' : '-$' }}{{ formatMoney(Math.abs(acc.balance)) }}
This Year So Far
{{ fiscalYearLabel }}
{{ m.label }}
${{ formatMoney(m.value) }}
Tax outlook: Based on this year's profit, your estimated tax bill is around ${{ formatMoney(taxEstimate) }}. Talk to your accountant for a precise figure.
Transactions That Need Checking
Our system has automatically categorised most transactions. Please check the ones marked below.
Need checking ({{ pendingCount }})
All transactions
Auto-categorisation rules
{{ selectedTxIds.length }} selected
Loading transactions...
| e.target.checked ? selectedTxIds=displayTransactions.map(t=>t.transaction_id) : selectedTxIds=[]" :checked="selectedTxIds.length===displayTransactions.length && displayTransactions.length>0" /> | Date | Description | Category | GST | Amount | Action |
|---|---|---|---|---|---|---|
| No transactions found. | ||||||
| {{ formatDate(tx.transaction_date) }} | {{ tx.clean_description || tx.raw_description }} {{ tx.raw_description }} |
{{ tx.category_name }}
Needs category
{{ tx.account_code }}
|
{{ tx.gst_applicable ? '15% GST' : 'No GST' }} | {{ tx.amount > 0 ? '+' : '' }}${{ Math.abs(tx.amount).toLocaleString('en-NZ',{minimumFractionDigits:2}) }} | ✓ Done | |
Split Transaction
{{ splitTx?.clean_description || splitTx?.raw_description }} — Total: ${{ formatMoney(Math.abs(splitTx?.amount || 0)) }}
Split total: ${{ formatMoney(splitLines.reduce((s,l)=>s+(parseFloat(l.amount)||0),0)) }} / ${{ formatMoney(Math.abs(splitTx?.amount||0)) }} — {{ splitBalanced ? '✓ Balanced' : '⚠ Must equal transaction total' }}
{{ splitError }}
Categorise {{ selectedTxIds.length }} transactions
Assign the same category to all selected transactions.
{{ bulkError }}
Rules run in priority order. First match wins. They auto-apply when you import transactions.
Loading...
No rules yet
Add a rule to automatically categorise transactions that match a description pattern.
| # | Rule name | Match type | Pattern | Category | Active | |
|---|---|---|---|---|---|---|
| {{ r.priority }} | {{ r.rule_name }} | {{ r.match_type }} | {{ r.match_pattern }} | {{ r.gl_account?.plain_english_name || r.gl_account?.accountant_name || '—' }} | {{ r.is_active ? 'On' : 'Off' }} |
{{ editingRule ? 'Edit Rule' : 'Add Auto-Categorisation Rule' }}
Active
Inactive rules are saved but not applied
{{ ruleModalError }}
Save this as a rule?
Next time we see a transaction like "{{ autoRuleTx?.clean_description || autoRuleTx?.raw_description }}", should we automatically sort it the same way?
Rule created{{ autoRuleApplied > 0 ? ' — ' + autoRuleApplied + ' existing transaction' + (autoRuleApplied === 1 ? '' : 's') + ' auto-sorted!' : ' — future matches will be auto-sorted!' }}
Categorise Transaction
{{ categorisingTx?.clean_description || categorisingTx?.raw_description }}
Amount: {{ categorisingTx?.amount > 0 ? '+' : '' }}${{ Math.abs(categorisingTx?.amount||0).toLocaleString('en-NZ',{minimumFractionDigits:2}) }}
{{ categoriseError }}
Checking Your Bank Matches
Make sure your bank records match what's in your accounts. Do this monthly to catch any surprises early.
Your accounts show
${{ formatMoney(Math.abs(reconSystemBalance)) }}
Calculated from all transactions
Last reconciled balance
${{ reconLastBalance ? formatMoney(reconLastBalance) : '—' }}
{{ reconLastBalance ? 'Enter your bank statement balance to check' : 'Not yet reconciled' }}
Monthly Checks
Loading...
No periods found. Import some transactions first.
{{ p.reconciliation_status==='reconciled' ? '✓' : p.reconciliation_status==='in_progress' ? '…' : '○' }}
{{ p.label }}
{{ p.is_locked ? '🔒 Locked' : '' }}
Lock {{ lockPeriodTarget?.label }}?
Locking prevents any changes to transactions in this period. You can unlock it later in accountant mode.
Confirm with your authenticator code
{{ lockError }}
Unlock {{ lockPeriodTarget?.label }}?
Think carefully — unlocking allows changes to a closed period which may affect your reports and tax filings.
Confirm with your authenticator code
{{ lockError }}
Check {{ reconSelectedPeriod?.label }}
Compare your bank statement with what's in the system.
${{ formatMoney(reconSystemBalance) }}
{{ Math.abs(parseFloat(reconStatementBalance) - reconSystemBalance) < 0.01 ? '✓ These match!' : '⚠ Difference: $' + formatMoney(Math.abs(parseFloat(reconStatementBalance) - reconSystemBalance)) }}
Check for missing or duplicate transactions.
{{ reconError }}
GST Filing
GST (Goods and Services Tax) is 15% added to most sales. You file and pay this to the IRD every 2 months.
Next GST filing due {{ gstNextDue.due_date_label }}
This covers the {{ gstNextDue.period_label }} period.{{ gstNextDue.box13_net_gst ? ' Estimated amount: $' + formatMoney(gstNextDue.box13_net_gst) + '.' : '' }} We'll remind you 14 days before.
Loading...
{{ gstCurrentPeriod ? gstCurrentPeriod.period_label : 'No open period' }}
{{ gstCurrentPeriod.status_label }}
5
Total Sales (incl. GST)
All money you received
${{ formatMoney(gstCurrentPeriod.box5_total_sales || 0) }}
6
Zero-rated sales
Exports and similar
${{ formatMoney(gstCurrentPeriod.box6_zero_rated || 0) }}
9
GST on your sales
Tax you collected
${{ formatMoney(gstCurrentPeriod.box9_output_tax || 0) }}
11
GST on your purchases
Tax you can claim back
${{ formatMoney(gstCurrentPeriod.box11_input_tax || 0) }}
Box 13 — {{ (gstCurrentPeriod.box13_net_gst || 0) >= 0 ? 'Amount to pay IRD' : 'Refund from IRD' }}
GST on sales minus GST on purchases
${{ formatMoney(Math.abs(gstCurrentPeriod.box13_net_gst || 0)) }}
No open GST period found.
Filing History
No GST periods yet.
| Period | Due | Amount | Status | |
|---|---|---|---|---|
| {{ g.period_label }} | {{ g.due_date_label }} | ${{ formatMoney(Math.abs(g.box13_net_gst || 0)) }} | {{ g.status_label }} |
File GST Return
{{ gstCurrentPeriod?.period_label }} — Amount: ${{ formatMoney(Math.abs(gstCurrentPeriod?.box13_net_gst || 0)) }}
{{ gstFileError }}
Your Tax Payments During the Year
Instead of one big tax bill at the end, you make three payments through the year. These are called provisional tax.
Loading...
Estimated profit this year
${{ formatMoney(taxOutlookData.projected_profit || 0) }}
Based on transactions so far
Estimated tax this year
${{ formatMoney(taxOutlookData.estimated_tax || 0) }}
28% company tax rate
Already paid
${{ formatMoney(taxSchedule.total_paid || 0) }}
{{ taxSchedule.instalments?.filter(i=>i.status==='paid').length || 0 }} of {{ taxSchedule.instalments?.length || 0 }} instalments
{{ taxSchedule.plain_english }}
Payment Schedule
No provisional tax instalments scheduled yet.
{{ p.status==='paid' ? '✓' : p.instalment_number }}
{{ p.plain_label }}
Due {{ p.due_date_label }}
${{ formatMoney(p.amount_due) }}
{{ p.status==='paid' ? 'Paid' : p.is_overdue ? 'Overdue' : 'Upcoming' }}
⚠ {{ taxSchedule.uomi_note }}
{{ taxSchedule.disclaimer }}
Record Tax Payment
{{ taxPayInstalment?.plain_label }}
{{ taxPayError }}
Equipment & Vehicles You Own
Items you've bought for the business that lose value over time. Depreciation is calculated automatically.
Loading...
Total value (at cost)
${{ formatMoney(assetsSummary.total_cost || 0) }}
Current book value
${{ formatMoney(assetsSummary.total_book_value || 0) }}
Depreciation this year
-${{ formatMoney(assetsSummary.total_depreciation_ytd || 0) }}
No assets yet. Add equipment or vehicles your business owns.
| Item | Purchased | Method | Cost | Book value | Depn this year | |
|---|---|---|---|---|---|---|
{{ a.asset_name }} {{ a.asset_type }} |
{{ formatDate(a.purchase_date) }} | {{ a.method_label }} | ${{ formatMoney(a.cost_excl_gst) }} | ${{ formatMoney(a.book_value) }} | -${{ formatMoney(a.depreciation_ytd || 0) }} |
{{ editingAsset ? 'Edit Asset' : 'Add Equipment or Vehicle' }}
Is this a vehicle?
Used for FBT calculations
{{ assetModalError }}
Reports
Plain-English summaries of how your business is doing. All figures are in NZD.
Financial Reports
{{ r.title }}
{{ r.desc }}
Tax Reports
{{ r.title }}
{{ r.desc }}
{{ activeReport.title }}
{{ reportData.meta.period_label }}
Loading report...
{{ reportError }}
No categorised transactions yet
This report will populate once you categorise your transactions. Go to Transactions and assign categories to your bank entries.
{{ accountantMode ? section.label : section.plain_label }}
| {{ accountantMode ? line.accountant_name : line.plain_name }} | {{ line.account_code }} | ${{ formatMoney(line.amount) }} |
| Total {{ section.plain_label }} | ${{ formatMoney(section.total) }} |
{{ reportData.totals.profit_before_tax >= 0 ? 'Net Profit' : 'Net Loss' }}
{{ reportData.totals.profit_before_tax >= 0 ? '' : '-' }}${{ formatMoney(Math.abs(reportData.totals.profit_before_tax)) }}
Gross profit margin: {{ reportData.totals.gross_profit_margin }}% · Estimated tax: ${{ formatMoney(reportData.totals.estimated_tax) }}
No balance sheet data yet
This report requires categorised transactions and opening balances. Categorise your transactions to see figures here.
{{ section.plain_label }}
| {{ accountantMode ? line.accountant_name : line.plain_name }} | {{ line.account_code }} | ${{ formatMoney(Math.abs(line.amount)) }} |
| Total {{ section.plain_label }} | ${{ formatMoney(Math.abs(section.total)) }} |
Net Assets
${{ formatMoney(reportData.totals.net_assets) }}
No assets recorded yet
Add equipment and vehicles in the Equipment & Vehicles page to see depreciation here.
| Item | Method | Rate | Cost | Book Value | Depn This Year |
|---|---|---|---|---|---|
{{ a.asset_name }} {{ a.asset_type }} |
{{ a.method_label }} | {{ Math.round((a.depreciation_rate || 0) * 100) }}% | ${{ formatMoney(a.cost_excl_gst) }} | ${{ formatMoney(a.book_value) }} | -${{ formatMoney(a.depreciation_ytd || 0) }} |
| Total | ${{ formatMoney(reportData.total_book_value || 0) }} | -${{ formatMoney(reportData.total_depreciation_ytd || 0) }} | |||
No data yet
Categorise your transactions to populate the trial balance.
| Account | Code | Balance |
|---|---|---|
| {{ accountantMode ? a.accountant_name : a.plain_english_name }} | {{ a.account_code }} | ${{ formatMoney(Math.abs(a.balance || 0)) }} |
Fringe Benefit Tax Estimate
FBT applies to vehicles and low-interest loans provided to shareholders or employees. Click below to calculate based on your recorded assets.
FBT Result
${{ formatMoney(fbtResult.total_fbt_payable || 0) }}
{{ fbtResult.plain_english }}
{{ line.asset_name || (line.type === 'shareholder_loan' ? 'Shareholder loan' : 'Other') }}
${{ formatMoney(line.fbt_payable || 0) }}
Dividend Modelling
Model the tax impact of paying a dividend to shareholders, including imputation credits.
Dividend Tax Model
{{ key.replace(/_/g,' ') }}
${{ formatMoney(val) }}
{{ dividendResult.plain_english }}
{{ dividendResult.disclaimer }}
Year-End Close
Close off the financial year. This locks all periods, calculates final tax, and sets up the new year.
Pre-Close Checklist
{{ check.passed ? '✅' : '⚠️' }}
{{ check.label }}
{{ check.detail }}
Confirm with your authenticator code
{{ eoyError }}
Resolve all checklist items before closing the year.
🎉
{{ eoyResult.message }}
✓ {{ step }}
No budget set yet
Click "Edit budgets" to set monthly targets for each income and expense category.
Total Budget
${{ formatMoney(reportData.total_budget) }}
Total Actual
${{ formatMoney(reportData.total_actual) }}
Variance
{{ reportData.total_variance >= 0 ? '+' : '' }}${{ formatMoney(Math.abs(reportData.total_variance)) }}
{{ reportData.total_variance >= 0 ? 'Under budget' : 'Over budget' }}
| Category | {{ m }} | Total |
|---|---|---|
|
{{ accountantMode ? row.accountant_name : row.plain_english_name }}
Budget
|
{{ m.budget > 0 ? '$'+formatMoney(m.budget) : '—' }} | ${{ formatMoney(row.total_budget) }} |
|
Actual
|
{{ m.actual > 0 ? '$'+formatMoney(m.actual) : '—' }} | ${{ formatMoney(row.total_actual) }} |
Edit Budget — FY {{ budgetFiscalYear }}
Loading...
| Category | {{ m }} | Annual | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ section === 'income' ? 'Money In (Income)' : 'Money Out (Expenses)' }} | |||||||||||||
| {{ accountantMode ? row.account.accountant_name : row.account.plain_english_name }} | ${{ formatMoney(row.annual) }} | ||||||||||||
{{ budgetSaveError }}
No cash flow data available yet. Categorise transactions to generate this report.
{{ accountantMode ? section.label : section.plain_label }}
| {{ accountantMode ? line.accountant_name : line.plain_name }} | {{ line.amount >= 0 ? '' : '-' }}${{ formatMoney(Math.abs(line.amount)) }} |
| Net {{ section.plain_label }} | {{ section.total >= 0 ? '' : '-' }}${{ formatMoney(Math.abs(section.total)) }} |
Net Cash Movement
{{ reportData.net_movement >= 0 ? '' : '-' }}${{ formatMoney(Math.abs(reportData.net_movement)) }}
{{ reportData.meta?.disclaimer }}
No equity data available. Ensure your equity accounts have balances.
| Item | Amount |
|---|---|
| {{ accountantMode ? line.accountant_name : line.plain_name }} | {{ line.amount >= 0 ? '' : '-' }}${{ formatMoney(Math.abs(line.amount)) }} |
| Closing Equity | {{ reportData.closing_equity >= 0 ? '' : '-' }}${{ formatMoney(Math.abs(reportData.closing_equity)) }} |
No shareholder transactions yet
Transactions will appear here once you have transactions categorised to the Drawings (3400) or Shareholder Loan (2210) accounts.
Total Drawings
${{ formatMoney(reportData.total_drawings || 0) }}
Money taken from the business
Shareholder Loan
${{ formatMoney(Math.abs(reportData.net_position || 0)) }}
{{ (reportData.net_position||0) > 0 ? 'Company owes you' : 'You owe the company' }}
Drawings This Period
No drawings recorded this period.
| Date | Description | Amount |
|---|---|---|
| {{ formatDate(d.transaction_date) }} | {{ d.raw_description }} | -${{ formatMoney(Math.abs(d.amount)) }} |
{{ reportData.meta?.disclaimer }}
{{ reportData.meta?.plain_heading || activeReport.title }}
This report is available but doesn't have a custom view yet. Data has been loaded successfully.
Your Account Categories
Chart of Accounts — accountant view
These are the buckets that transactions are sorted into. Most businesses won't need to change these.
Money In
Money Out
What You Own
What You Owe
Equity
Loading...
No categories in this section yet.
| Category name | GL Code | GST | System | |
|---|---|---|---|---|
|
{{ accountantMode ? c.accountant_name : c.plain_english_name }}
{{ c.plain_english_name }}
|
{{ c.account_code }} | {{ c.gst_applicable ? '15% GST' : 'No GST' }} | System |
{{ editingCategory ? 'Edit Category' : 'Add Category' }}
GST applies to this category
{{ categoryModalError }}
Manual Adjustments
Journal Entries — accountant mode
Accountant mode only
Manual adjustments are hidden from standard users. Use these to correct errors or post year-end entries.
Loading...
No manual adjustments yet.
| Date | Description | Type | Amount | Posted |
|---|---|---|---|---|
| {{ formatDate(j.entry_date) }} | {{ j.description }} | {{ j.entry_type }} | ${{ formatMoney(j.total_amount || 0) }} | {{ j.is_posted ? 'Posted' : 'Draft' }} |
New Manual Adjustment
Journal Lines (Debits must equal Credits)
Debits: ${{ formatMoney(journalDebits) }} · Credits: ${{ formatMoney(journalCredits) }} · {{ journalBalanced ? '✓ Balanced' : '⚠ Not balanced' }}
{{ journalError }}
Settings
Business Details
{{ settingsSaveSuccess }}
{{ settingsSaveError }}
GST Settings
GST settings saved.
{{ gstSettingsError }}
Tax Agent Details
If you use a tax agent, enter their details here. This information is used on your tax filings.
Tax agent settings saved.
Do you have a tax agent?
{{ taxSettingsError }}
Display & Access
{{ displaySaveMsg }}
Show accountant details
Reveals GL codes, journal entries, and technical fields
Dark mode
Switch to a darker colour scheme
Date format
How dates are shown throughout the app
Security
{{ pwSuccess }}
Two-factor authentication
Required for all accounts — currently active
Change password
Active sessions
Devices currently signed in
Team Members
Loading...
{{ u.name.split(' ').map(n=>n[0]).join('').toUpperCase() }}
{{ u.name }}
{{ u.email }}
Last login: {{ formatDate(u.last_login) }}
Edit Team Member
{{ editingUser?.name }} — {{ editingUser?.email }}
Confirm with your authenticator code
{{ editUserError }}
Remove Team Member?
This will permanently remove {{ deletingUser?.name }} ({{ deletingUser?.email }}) from your account.
Confirm with your authenticator code
{{ deleteUserError }}
Invite Team Member
Confirm with your authenticator code
Inviting team members requires your 6-digit code.
{{ inviteError }}
{{ inviteSuccess }}
Notification Preferences
{{ notifSaveMsg }}
{{ n.label }}
{{ n.desc }}
Bank Accounts
No bank accounts yet. Add one to start importing transactions.
🏦
{{ a.account_nickname }}
{{ a.bank_name }} · {{ a.account_type }}
${{ formatMoney(a.current_balance ?? a.opening_balance ?? 0) }}
{{ editingAccount ? 'Edit Account' : 'Add Bank Account' }}
Confirm with your authenticator code
Bank account changes require your 6-digit code.
{{ accountFormError }}
Opening Balances
Enter balances as at the start of your current financial year. Your accountant can provide these from your last set of accounts.
Loading...
{{ section==='asset'?'Assets':section==='liability'?'Liabilities':'Equity' }}
{{ accountantMode ? row.accountant_name : row.plain_english_name }}
{{ row.account_code }}
$
Total debits: ${{ formatMoney(obTotalDebits) }} ·
Total credits: ${{ formatMoney(obTotalCredits) }} ·
{{ Math.abs(obTotalDebits-obTotalCredits)<0.01 ? '✓ Balanced' : '⚠ Difference: $'+formatMoney(Math.abs(obTotalDebits-obTotalCredits)) }}
Confirm with your authenticator code
{{ obSaveError }}
Opening balances saved.
Tax Rate Tables
Rates review due
The NZ Budget has been released. Please check all rates are up to date.
Loading...
| Category | Key | Value | Effective from | Source | |
|---|---|---|---|---|---|
| {{ r.rate_category?.replace(/_/g,' ') }} | {{ r.rate_key }} | {{ r.rate_value }} | {{ formatDate(r.effective_from) }} | IRD → |
{{ editingRate ? 'Update Rate' : 'Add Rate' }}
{{ rateModalError }}