Assumptions built into this calculator
- The fortnight start date must align to the pay cycle anchored on Monday 3 June 2024 — only that Monday, or a Monday exactly a multiple of 14 days after it, is a valid fortnight start. The calendar picker only allows clicking a valid date in the first place (other days are shown but not selectable), and also shades public holidays a different colour.
- If an Afternoon (A) shift's start time is manually changed to exactly 10:00, its Type automatically switches to Repat/Metro. This doesn't revert automatically if the start time is changed again afterward — it's a one-way trigger, not a live rule tied to the current start time.
- An overnight shift is treated in full as belonging to the day it starts on — including for Saturday/Sunday/public holiday rates.
- On Sunday or a public holiday, every hour worked is paid at the flat Sunday/public-holiday 100% rate — there's no overtime carve-out on those days, since overtime's own rate would otherwise pay less than the day's flat rate. On Saturday, hours before 07:00 are paid at Early Morning 100% (same as a weekday); hours from 07:00 use the Saturday tiering (first 3h at 50%, rest at 100%), and overtime can still apply.
- Casual loading (25%) applies to all ordinary hours, but not to overtime hours — and only when the Employment type switch on the calculator is set to Casual (the default). Switching it to Full-time pays the same rate and rostered hours in every other respect, but drops casual loading entirely: it's excluded from the daily details popup, the fortnight summary, and the fortnightly gross/net figures.
- Overtime is labelled "150%"/"200%" but actually pays 175%/225% of the hourly rate (first 3 hours / after), per the award's rule of counting the hourly rate twice — this is not also stacked with ordinary pay or casual loading for those hours.
- Full-time employees only: each day has an Overtime checkbox (shown once the Employment type switch is set to Full-time). Ticking it pays the entire shift at overtime rates — 175% for the first 3 hours of the whole shift, 225% beyond that — instead of the normal ordinary/Early Morning/Evening treatment. If a portion of the shift would normally earn more than 175% anyway (Early Morning, or the back half of an Evening band — both effectively double time), that portion is paid at 225% instead, regardless of where it falls chronologically in the shift. Saturday, Sunday, and public holiday shifts are unaffected by this checkbox entirely — they keep their normal Saturday/Sunday/public-holiday rates.
- Public holidays are auto-detected for Victoria (fetched for the fortnight plus a week beyond it, to make sure the relevant year's data is always loaded). Tick the checkbox manually at any time if one is missing or wrong — public holiday rows are shaded a distinct colour.
- The $17.30 meal allowance is added once per shift tagged Repat or Repat/Metro (not per hour).
- Income tax is calculated on the full fortnightly gross (all pay + meal allowance) using the supplied weekly-bracket formula, doubled for the fortnight. If any component should legally be excluded from taxable income, that isn't accounted for here.
- Income tax uses whichever financial year's bracket table applies to the fortnight's payday - the Wednesday following the fortnight's last Sunday - not the fortnight's own start or end date. A fortnight whose payday falls before 1 July uses the old year's table; on or after 1 July uses the new one. E.g. a fortnight ending with a last Sunday of 27 June (payday 30 June) still uses the old rates, but one ending 28 June (payday 1 July) already uses the new rates.
- Two financial years' bracket tables are currently built in (2025/26 and 2026/27); adding a future year just means adding one more table with its own 1 July effective date to incomeTax.js's TAX_TABLES list - see the TEMPLATE comment there. The "Tax (2026/27 financial year)" label updates automatically to whichever table actually applied, so it can't drift out of sync with the calculation - but a fortnight whose payday predates every table currently entered will fall back to the oldest one available, with a console warning, rather than erroring.
- A Repat (R) shift's 10-hour overtime-free window floats with its actual start time — e.g. a Repat starting at 07:00 doesn't accrue overtime until 17:00, not a fixed 16:00.
- The "Other" (O) shift code has no default times — both start and finish must be entered manually, and the shift shows as an error (0 hours) until both are filled in. It otherwise follows exactly the same rules as every other shift code: a floating 8-hour overtime-free window from its actual start time (same mechanism as Repat, just 8 hours instead of 10), and the normal weekday Early Morning/Evening bands (00:00-07:00 and 19:00-24:00) or Saturday/Sunday/public-holiday rules, driven entirely by whatever times and day it's actually worked.
- Salary packaging (Maxxia) can be entered as either a percentage or a fixed dollar amount, via the toggle switch next to the field. Either way it's based on total pay excluding the meal allowance, and clamped so it can never exceed that amount (a fixed dollar entry larger than the fortnight's pay is capped at the pay itself, not an error). It's then deducted from the full gross (including meal allowance) before tax is calculated. Switching modes does not convert the entered number — e.g. "10" stays "10" whether that means 10% or a flat $10, so double-check the value after toggling.
- Employer Superannuation is 12% of all pay excluding overtime and the meal allowance, shown as its own line for information only — it does not reduce the Maxxia deduction, taxable amount, or tax, and doesn't add to Net.
- Daylight saving (Victoria) is worked out automatically from the dates — it starts at 02:00 on the first Sunday in October and ends at 03:00 on the first Sunday in April. Shifts are always calculated from their clock start/finish times, so on the October night a 20:00–06:00 shift (only 9 real hours, since the clock skips 02:00–03:00) is still paid as 10 hours — no deduction. On the April night the 02:00–03:00 hour is worked twice, so a shift covering that whole hour (e.g. 20:00–06:00) is paid 1 extra hour — 11 hours instead of the 10 on the timesheet — at the Sunday rate (or the public holiday rate if the Sunday is a public holiday, e.g. Easter Sunday). The Hours column shows the paid hours, and the Details popup explains the adjustment on both nights. A shift that starts or finishes inside the 02:00–03:00 hour on the April night gets no extra hour, since the clock time can't tell which pass of that hour was meant.
- Sunday and Public Holiday are shown as separate line items, but use exactly the same flat 100% rate — splitting them doesn't change any dollar figure.
- "On Call CSV" and "Travel Meal" appear in the requested layout but have no calculation behind them yet, so they never display (a $0 line is hidden) — let the developer know if/how these should be calculated.
- A public holiday uses the weekend shift start/finish times (even if it falls on a weekday) — ticking/unticking the Public holiday box refills a selected shift's start/finish accordingly.
- Hourly rate and salary packaging % are clamped to sane bounds (rate ≥ 0, packaging 0-100%) — an out-of-range entry snaps back automatically.
- If a shift's start and finish time are identical, it's flagged as an error (highlighted in red, 0 hours) rather than silently treated as a full 24-hour shift.
- Every dollar figure rounds to the nearest cent as normal, except an exact halfway value (e.g. $x.xx5) breaks DOWN rather than up — e.g. $0.555 displays as $0.55, but $0.556 (not a tie) still rounds up to $0.56.
- An Afternoon (A) shift's automatic switch to Repat/Metro (triggered by a 10:00 start) now auto-reverts back to Metro if the start time moves away from 10:00 again — but only if you haven't manually changed the Type yourself in the meantime, in which case your choice is respected instead.
- Everything you enter — rate, salary packaging, and every shift for every fortnight you've visited — is saved to this browser automatically and restored on your next visit. A day with no shift selected isn't saved, so public holiday auto-detection stays free to control it on future visits. Use "Reset saved data" in the footer to wipe everything and start fresh.
- Public holiday lookups fall back to a small baked-in dataset (Victoria, 2024-2027, sourced from Business Victoria's official pages) if the live API is unavailable — the status line under the date picker says so when this happens. This fallback is a fixed snapshot and won't reflect future government date changes the way a live lookup would.
- "Export CSV" downloads the full fortnight (every day plus the summary breakdown) as a spreadsheet-ready file. "Print / Save as PDF" opens the browser's print dialog with a clean payslip-style layout — choose "Save as PDF" as the destination if you want a PDF rather than a physical printout.