Payroll — Employees¶
Manual test plan for the Employees area: the list, adding employees (quick add + full wizard), the employee detail tabs, every edit panel, termination, portal access, and imports. Read How testing works first.
Many fields here feed the ATO (tax treatment codes, TFN, ABN, super fund) — those cases are flagged 🔴 because a wrong value silently misreports to the ATO or the super fund.
You will need: a payroll company on a plan with employee seats, a paid Payroll plan near its seat cap (to test capping), and an Excel employee import file for the import cases.
A. Employees list¶
A1 — Seat-usage banner¶
Steps 1. Go to Payroll → Employees and read the seat-usage banner.
✅ Pass if it shows used / cap seats used this month with a breakdown (active / terminated-this-month / open invitations) and a reset date. It turns amber when at cap, and says "plan doesn't include any payroll seats" when the plan has no seats.
❌ Fail if the counts are wrong (e.g. a terminated-this-month employee not counted) — 🟠 Major.
A2 — Search¶
Steps 1. Type into the employee search box.
✅ Pass if the list filters by name/email (debounced).
❌ Fail if search returns wrong results — 🟠 Major.
A3 — Status filter¶
Steps 1. Change the status filter (All / Active / Terminated).
✅ Pass if the list filters accordingly (default Active).
❌ Fail if the filter shows the wrong set — 🟠 Major.
A4 — Add Employee (seat-gated)¶
Steps 1. Click Add Employee on a company under its seat cap, then on one at its cap.
✅ Pass if under cap it opens the Add panel; at cap it opens the "Employee seats are full" modal (with "View plans" → billing) instead.
❌ Fail if you can add beyond the cap — 🔴 Blocker (billing bypass).
A5 — Row click / edit opens detail¶
Steps 1. Click a row (and the pencil icon).
✅ Pass if both open the employee detail screen.
❌ Fail if they open the wrong employee — 🟠 Major.
A6 — Single delete¶
Steps 1. Click a row's trash icon, confirm.
✅ Pass if a confirm dialog warns it can't be undone and deletes the employee.
❌ Fail if it deletes without confirmation, or it deletes an employee who is in a pay run (that must be blocked/skipped) — 🔴 Blocker.
A7 — Bulk delete¶
Steps 1. Select several rows via checkboxes, click Delete N selected, confirm.
✅ Pass if a confirm notes "Employees included in pay runs will be skipped", and the result toast reports "N deleted, N skipped, N failed" with per-reason info.
❌ Fail if an employee in a pay run is actually deleted — 🔴 Blocker.
A8 — Cap modal → View plans¶
Steps 1. At cap, open the cap modal and click View plans.
✅ Pass if it routes to billing (/settings/billing).
❌ Fail if the link is wrong — 🟡 Minor.
A9 — Pagination & empty state¶
Steps 1. Page through the list; view a company with no employees.
✅ Pass if pagination works and an empty company shows "No employees yet" + Add.
❌ Fail if pagination breaks — 🟠 Major.
B. Add Employee (quick slide-over)¶
B1 — Create with the minimum fields¶
Steps 1. Click Add Employee. Enter First name, Last name, Start date (email optional), Create Employee.
✅ Pass if required fields (first/last/start) are validated; creating shows "Employee added successfully" and opens the new employee.
❌ Fail if you can create with a blank required field, or creation fails — 🟠 Major.
C. Add Employee (full wizard, /payroll/employees/new)¶
C1 — Step 1: Personal¶
Steps 1. Open the full add wizard. On Personal, try to advance with a blank required field, then fill First/Last/Gender and continue.
✅ Pass if Next validates the step; email must be valid if provided.
❌ Fail if you can advance past a blank required field — 🟠 Major.
C2 — Step 2: Employment (with bank sub-fields) 🔴¶
Steps 1. On Employment, set an End date before the start date; set Payment method = Bank and leave BSB blank.
✅ Pass if end-before-start is rejected ("End date must be after start date"), and Bank payment requires BSB (regex ###-###) + account number + account name.
❌ Fail if invalid dates or incomplete bank details pass — 🟠 Major.
C3 — Step 3: Tax 🔴¶
Steps 1. On Tax, choose a tax category/scale; enter an invalid ABN (for a Business type); pick category W/V to reveal voluntary withholding %.
✅ Pass if category and scale are required; ABN checksum is validated; voluntary withholding % (0–100) appears only for W/V.
❌ Fail if an invalid ABN passes, or a required tax field is skippable — 🔴 Blocker (misreports to ATO).
C4 — Step 4: Super & Leave 🔴¶
Steps 1. On Super & Leave, choose Employee's fund (use the Beam fund picker if available) then Employer nominated fund.
✅ Pass if SG rate (0–100) is required; Employee's fund requires name/ABN/USI/membership; Employer fund requires a configured company fund (or links to Settings when none).
❌ Fail if you can complete super with missing fund identifiers — 🔴 Blocker.
C5 — Submit the wizard¶
Steps 1. Complete all steps and submit.
✅ Pass if it creates the employee ("Employee added successfully") and opens the detail; a validation failure shows "Please fix the validation errors".
❌ Fail if submit fails on valid data — 🟠 Major.
D. Employee detail — Overview tab¶
D1 — Edit Profile¶
Steps 1. On the employee's Overview, click Edit Profile, change contact/gender/address, save.
✅ Pass if it saves with "Profile updated"; first/last required; email valid if present; gender note "required for super lodgement".
❌ Fail if a required field can be blanked, or the save fails — 🟠 Major.
D2 — Upload / change profile photo¶
Steps 1. Upload a photo; try a >2MB file and a non-image file.
✅ Pass if valid images upload ("Profile photo updated"); >2MB is rejected ("under 2MB"); wrong type is rejected (PNG/JPG/WEBP only).
❌ Fail if an oversized or wrong-type file is accepted — 🟠 Major.
D3 — Remove photo¶
Steps 1. Click Remove Photo.
✅ Pass if it removes the photo ("Profile photo removed").
❌ Fail if removal fails — 🟡 Minor.
D4 — Quick stats¶
Steps 1. Read the Gross/PAYG/Super/Net YTD and leave-balance stats.
✅ Pass if they match the employee's income statement for the FY (AUD).
❌ Fail if the figures are wrong — 🔴 Blocker (money).
D5 — Enable portal access¶
Steps 1. In Portal Access (needs an email), click Enable Portal Access.
✅ Pass if it enables ("Portal access enabled") and may show a temporary password (with a copy button). With no email, it prompts to add one first.
❌ Fail if portal access enables without an email, or the temp password isn't shown/copyable — 🟠 Major.
D6 — Disable portal access¶
Steps 1. Click Disable Access.
✅ Pass if it disables ("…retains read-only access").
❌ Fail if disable fails — 🟠 Major.
D7 — Remove portal access completely¶
Steps 1. Click Remove Completely, confirm.
✅ Pass if a confirm warns the employee will no longer see past payslips and it can't be undone; it removes access.
❌ Fail if it removes without confirmation — 🟠 Major.
E. Employment tab¶
E1 — Edit employment — income type ↔ worker classification 🔴¶
Steps 1. Open Employment → Edit Employment. Set Employment type = Business (Contractor) with a non-contractor income type (and vice versa).
✅ Pass if the income type must match the worker classification (contractor streams require Business; others require Employee) and a mismatch is rejected.
❌ Fail if a mismatched classification/income stream saves — 🔴 Blocker (STP misreport).
E2 — VOL income ↔ tax category "V" 🔴¶
Steps 1. With tax category V, try to change the income type off VOL.
✅ Pass if it's blocked with guidance to clear the "V" tax category first.
❌ Fail if you can move income off VOL while category is still V — 🔴 Blocker (ATO PAYEVNTEMP.000294).
E3 — End date requires a cessation code 🔴¶
Steps 1. Set an End date and try to save without an End date code.
✅ Pass if the cessation code is required when an end date is set; a backdated end-date (before month start) shows a seat-consumption note.
❌ Fail if an end date saves with no cessation code — 🔴 Blocker (STP EE3).
F. Tax tab¶
F1 — TFN and exemption are mutually exclusive 🔴¶
Steps 1. Open Tax → Edit Tax Details. Enter a TFN, then select a TFN exemption.
✅ Pass if choosing an exemption clears/disables the TFN (and typing a TFN clears the exemption). The exemption is reported to the ATO in place of a TFN.
❌ Fail if both a TFN and an exemption can be saved together — 🔴 Blocker.
F2 — ABN required + checksum 🔴¶
Steps 1. For a tax treatment that requires an ABN, leave it blank; then enter an invalid ABN.
✅ Pass if ABN is required for that treatment and an invalid ABN is rejected ("failed ATO checksum").
❌ Fail if a missing or invalid ABN saves — 🔴 Blocker.
F3 — Category/scale gating & Medicare fields 🔴¶
Steps 1. Change tax category; observe scale, HELP/STSL, and Medicare fields.
✅ Pass if category and scale are required; scale options depend on category and reset when they become invalid; Medicare surcharge/exemption/reduction options are gated by permissions and clear when not applicable; category V is only selectable when income is VOL.
❌ Fail if an invalid category/scale combination or a disallowed Medicare option saves — 🔴 Blocker.
F4 — Save tax details¶
Steps 1. Save valid tax details.
✅ Pass if it saves with "Tax details updated"; the Tax tab shows the computed 6-character tax treatment code and a masked TFN.
❌ Fail if the treatment code looks wrong for the inputs — 🔴 Blocker.
G. Super tab¶
G1 — Edit super — fund type branches 🔴¶
Steps 1. Open Super → Edit Super Details. Switch between EmployerDefault / Stapled / Nominated / SMSF.
✅ Pass if each branch requires the right fields: EmployerDefault → company fund; Stapled/Nominated → ABN + USI + membership; SMSF → ABN + ESA + bank (name/BSB/account) and USI must be blank. Switching type clears fields that don't belong.
❌ Fail if you can save an APRA fund without USI, or an SMSF with a USI / without ESA — 🔴 Blocker (fund rejects the contribution).
G2 — SMSF ESA recognition¶
Steps 1. In the SMSF branch, enter an unknown ESA, then a recognised one.
✅ Pass if an unknown ESA shows an amber "Beam may reject" warning; a recognised ESA shows a hint.
❌ Fail if no warning for an unknown ESA — 🟡 Minor.
(Member Verification for this employee's fund is covered in the Super — Connect plan.)
H. Bank tab¶
H1 — Edit bank details 🔴¶
Steps 1. Open Bank → Edit Bank Details. Set Payment method = Bank; enter a bad BSB (not ###-###) and a too-long account number.
✅ Pass if Bank method requires bank name, BSB (###-###), account number (≤9 digits), account name. Setting method to None clears the bank fields and notes the employee is excluded from pay runs / the bank file.
❌ Fail if an invalid BSB/account passes, or None leaves stale bank data — 🟠 Major (bank file / ABA integrity).
I. Leave tab¶
I1 — Enable / disable leave¶
Steps 1. On the Leave tab, toggle leave on, then off.
✅ Pass if it toggles with a toast; Edit Leave Settings is disabled until leave is enabled.
❌ Fail if the toggle doesn't persist — 🟠 Major.
I2 — Edit leave settings¶
Steps 1. Open Edit Leave Settings. Set accrual method, entitlements, opening balances, loading %.
✅ Pass if entitlements/opening balances are ≥0; loading % 0–100 (shown only when loading enabled); Standard hours (PerHourWorked) blank inherits the company default.
❌ Fail if a negative entitlement or loading >100% saves — 🟠 Major.
I3 — Leave transactions¶
Steps 1. View the leave transactions grid; filter by type; click a pay-date link.
✅ Pass if it lists opening/accrued/taken/adjustment/closing; filter works; the pay-date link opens the pay-run employee detail.
❌ Fail if balances are wrong — 🔴 Blocker (leave liability).
J. Terminate¶
J1 — Terminate an employee 🔴¶
Steps 1. On an active employee, click Terminate. Set a termination date (try one before start) and a reason.
✅ Pass if the dialog requires a reason and a valid date (not before start); terminating shows "{name} has been terminated". Terminate is only offered for active employees.
❌ Fail if you can terminate with no reason, or with a date before the start date — 🔴 Blocker (STP cessation).
K. Income statement & payslips tabs¶
K1 — Employer income-statement tab¶
Steps 1. Open the employee's Income Statement tab; change FY; expand a finalised row; open View files and Download report.
✅ Pass if totals match, FY switch works, finalised rows expand to STP detail, View files shows request/response XML, and the report PDF downloads.
❌ Fail if totals are wrong or a download fails — 🔴 Blocker (money) / 🟠 Major.
K2 — Payslips tab¶
Steps 1. Open the Payslips tab; download one; download all (zip); check the email-status column; use the period filter.
✅ Pass if each download works (per-row and zip), email statuses show per row, and the filter works. Empty state appears until a finalised pay run includes the employee.
❌ Fail if a download returns the wrong employee's payslip — 🔴 Blocker.
L. Imports¶
L1 — Import from Excel (seat-capped)¶
Steps 1. Click Import → Import from Excel and upload a file that would exceed the seat cap.
✅ Pass if valid rows import; an over-cap upload is rejected all-or-nothing with a plan-limit message (and preview/dry-run shows the same); file must be .xlsx ≤5MB, ≤1000 rows.
❌ Fail if an import pushes the company over its seat cap — 🔴 Blocker.
L2 — Import validation¶
Steps 1. Import a file with a row missing First name / Start date, a bad email, and a duplicate email.
✅ Pass if those rows are reported as errors (first name + start date required, email dedup vs existing + within-file), and empty rows are skipped.
❌ Fail if invalid rows import silently — 🟠 Major.
L3 — Import from Deputy / Tanda / Xero 🔧 Needs developer setup¶
Steps 1. With a connected integration (ask a developer to set up a sandbox), click Import from Deputy/Tanda/Xero.
✅ Pass if it starts a sync job with progress toasts ("processing x/total"), then a result ("N imported, N skipped"); an over-cap sync is blocked with a plan-limit error + cap modal.
❌ Fail if a sync imports beyond the seat cap — 🔴 Blocker.