# Timesheet Batches

Source: https://docs.astalty.com.au/guide/scheduling/timesheet-batches

> Create timesheet batches of scheduled shifts and export them for payroll.

Scheduling add-on - This feature requires the Scheduling add-on, which is available on Astalty Premium. See How to enable Scheduling.

## Overview

Create a Timesheet Batch after shifts have been reviewed. Use the batch to check interpreted pay, then export CSV or Excel files or send timesheets to Xero or Employment Hero.

> **Timesheet Export Behaviour**
>
> Staff set to **Exclude** are omitted when export rows are built. Their eligible shifts can still belong to the batch and appear in the on-screen Award Interpretation. To adjust this, update **Timesheet Export Behaviour** on the user's profile; see [Excluding a User from Timesheet Exports](https://docs.astalty.com.au/guide/scheduling/scheduling-faq/enabling-a-user-to-be-included-in-timesheet-exports).

## Accessing Timesheet Batches

[Timesheet Batches](https://app.astalty.com.au/scheduling/timesheet-batches) can be found in [Scheduling](https://app.astalty.com.au/scheduling/schedule) within the Process section of the menu.

The list shows each batch's date range, **Payroll Calendar**, number of exported shifts, and export date. On accounts using the [On-Call Roster](https://docs.astalty.com.au/guide/scheduling/on-call-roster), it also shows **Standby Claims** and **Activations**. A manually dated batch has a dash instead of a Payroll Calendar. Filter by Payroll Calendar when needed, or select [**Create Batch**](https://app.astalty.com.au/scheduling/timesheet-batches/create).

![The Timesheet Batches page, opened from Timesheet Batches under Process in the Scheduling menu, listing a batch with its Start, End, Number of Shifts Exported and Exported At, and a Create Batch button.](https://docs.astalty.com.au/assets/timesheet-batches-7.png)

> **Chasing the batch one particular shift went into?**
>
> Open it from the shift instead of searching the list - see [Opening the Timesheet Batch a Shift Was Paid In](https://docs.astalty.com.au/guide/scheduling/shift-approvals#opening-the-timesheet-batch-a-shift-was-paid-in).

## Creating Timesheet Batches

Open [**Scheduling > Timesheet Batches**](https://app.astalty.com.au/scheduling/timesheet-batches), then select **Create Batch**.

![The Scheduling menu with Timesheet Batches under Process highlighted as step 1, and the Create Batch button on the Timesheet Batches page highlighted as step 2.](https://docs.astalty.com.au/assets/timesheet-batches.png)

### Choosing How the Batch Is Generated

If your payroll platform is **Xero** and at least one payroll calendar has been synced from Xero, the form asks **How do you want to generate this batch?** and offers two options:

| Option                       | What it does                                                                                       |
| ---------------------------- | -------------------------------------------------------------------------------------------------- |
| **By Xero payroll calendar** | Includes only staff on the selected calendar, with dates set automatically to its next pay period. |
| **Manual date range**        | Includes all staff, using any date range you choose.                                               |

You need to pick one before **Create Batch** becomes available.

> **Don't see this choice?**
>
> The two options only appear when your payroll platform is set to **Xero** *and* at least one payroll calendar has been synced into Astalty. On every other account - Employment Hero, PayCat, QuickBooks Payroll, or a Xero account with no calendars synced yet - you go straight to the **From** and **To** date fields covered under [Manual date range](#manual-date-range).
>
> To start using payroll calendars, see [Sync Payroll Calendars from Xero](https://docs.astalty.com.au/guide/sync-payroll-calendars-from-xero).

#### By Xero payroll calendar

Choose the **Payroll calendar** you're paying. If only one calendar has been synced, it is selected for you.

Astalty reads that calendar's next pay period from Xero and applies those dates for you. They appear as **Pay period**, along with the length in days, and can't be edited by hand - switch to **Manual date range** if you need a different period.

Only staff who are assigned to the selected calendar in Xero are included in the batch. Anyone with shifts in the period who isn't on a payroll calendar is flagged in the [warnings](#warnings-before-you-create-the-batch) and left out.

![The Create Timesheet Batch form with By Xero payroll calendar selected, a Fortnightly Calendar chosen in the Payroll calendar field, the resulting pay period of 12/10/2026 to 25/10/2026 (14 days), and one alert listing 6 things to check: shifts awaiting approval or missing a clock in or out, unapproved on-call activations and ones with no end time, an approved on-call activation in no timesheet batch, and 2 staff members with no payroll calendar in Xero.](https://docs.astalty.com.au/assets/timesheet-batch-generate-xero-payroll-calendar.png)

#### Manual date range

Select the **From** and **To** dates of when the shifts occurred. The length of the period is shown beneath the **To** field, and the **From** date picker carries shortcuts for **This week**, **Last week**, **Last Fortnight**, **Last month** and **Last quarter**.

Every staff member with eligible shifts in the range is included, whether or not they're on a payroll calendar.

![The Create Timesheet Batch form with Manual date range selected, From and To dates of 05/10/2026 and 11/10/2026, a period length of 7 days, and one alert with 2 things to check: shifts awaiting approval and shifts missing a clock in or out.](https://docs.astalty.com.au/assets/timesheet-batch-generate-manual-date-range.png)

> **Xero accounts with no calendars synced**
>
> If your payroll platform is Xero but no payroll calendars have been synced, the form shows an alert with your next Xero payroll period and an **Apply dates** button that fills the **From** and **To** fields with it.

#### How Overnight Shifts Are Assigned to a Period

However the dates are set, a shift belongs to the period its **start** falls in. A support running 4:00 PM Sunday to 9:00 AM Monday is picked up by a batch ending on the Sunday, and the same rule decides the [warning counts](#warnings-before-you-create-the-batch) below. See [Date Ranges and Overnight Supports](https://docs.astalty.com.au/guide/scheduling/adding-shifts/creating-a-sleepover-or-active-overnight-support#date-ranges-and-overnight-supports).

> **Employment Hero keeps a sleepover and its morning shift together**
>
> On **Employment Hero**, **PayCat** and **QuickBooks Payroll**, a shift that starts immediately after a sleepover in the period is batched alongside that sleepover, even where the shift itself starts after the **To** date. Xero and the file-based exports go strictly by start date.

### Warnings Before You Create the Batch

Once the dates are settled, Astalty checks the period and lists anything that could affect the batch in one alert, headed with the number of things to check. These are warnings rather than blockers - you can still create the batch - but it's worth clearing them first.

On-call is the exception. Astalty pays on-call only through a weekly or fortnightly batch, so on a **Manual date range** that holds on-call and is not exactly 7 or 14 days, a red alert explains this and **Create Batch** stays disabled until you choose a 7 or 14 day range. A batch made **By Xero payroll calendar** from a calendar whose pay period is neither, such as monthly, is still created but leaves its on-call out, to be paid in Xero by hand.

| Warning                                                                                                                     | What it means                                                                                                                                      | What to do                                                                                                                                                                                                                                                   |
| --------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| *n* shifts are awaiting approval and *n* are missing a clock in or out                                                      | Shifts in the period are unapproved - missing an hours, travel or active overnight approval - or have open shift alerts                            | Use **View approvals** or **View alerts** to open [Shift Approvals](https://docs.astalty.com.au/guide/scheduling/shift-approvals) or [Shift Alerts](https://docs.astalty.com.au/guide/scheduling/shift-alerts) in a new tab, already filtered to these dates |
| *n* shifts are still in progress                                                                                            | Those shifts hadn't ended when the check ran, so they're excluded from the batch until they have                                                   | Wait until they've ended and create the batch then, or pick them up in a later period                                                                                                                                                                        |
| *n* on-call activations have not been approved, or *n* have no end time                                                     | Unapproved activations are never paid, and an activation with no end time cannot be approved                                                       | Select **View on-call roster** to approve them or set an end time - see [Recording and Approving Activations on the Web](https://docs.astalty.com.au/guide/scheduling/on-call-roster#recording-and-approving-activations-on-the-web)                         |
| *n* on-call records cannot be paid                                                                                          | The worker has no employment contract for those dates, so batches leave their on-call out                                                          | Select **View records**, add the missing contracts, then create a weekly or fortnightly batch over these dates                                                                                                                                               |
| On-call in these dates is left out of this batch                                                                            | Shown on an existing batch that is not 7 or 14 days long, which pays none of the on-call in its dates. The create form blocks such a batch instead | Create a 7 or 14 day batch over these dates to pay it                                                                                                                                                                                                        |
| On-call in this pay period is left out of the batch                                                                         | The payroll calendar's pay period is neither weekly nor fortnightly                                                                                | Pay that on-call in Xero by hand                                                                                                                                                                                                                             |
| *n* on-call activations are held back from timesheet batches, or *n* approved on-call activations are in no timesheet batch | An approved shift that overlaps the activation is not batched yet, or a batch already covered the date without it                                  | Select **View activations**, resolve them, then create a batch for these dates again - see [Timesheet Batch Warnings](https://docs.astalty.com.au/guide/scheduling/on-call-roster#timesheet-batch-warnings)                                                  |
| *n* staff members with shifts or on-call have no payroll calendar in Xero                                                   | Those staff aren't linked to a Xero employee, or aren't assigned a payroll calendar in Xero, so their shifts and on-call are excluded              | Select **View staff** to open the **Staff without a payroll calendar** drawer and resolve them - see [Staff Without a Payroll Calendar](https://docs.astalty.com.au/guide/sync-payroll-calendars-from-xero#staff-without-a-payroll-calendar)                 |
| *n* shifts have custom allowances that are not sent to your payroll platform yet                                            | Your payroll platform doesn't receive [custom allowances](https://docs.astalty.com.au/guide/scheduling/setup/custom-allowances)                    | Add those allowances in payroll by hand                                                                                                                                                                                                                      |
| *n* shifts have custom allowances that are still exported                                                                   | Custom allowances were switched off for your account after they were added to these shifts                                                         | Remove the allowances from any shift where they should not be paid                                                                                                                                                                                           |

> **The payroll calendar warning is specific to calendar batches**
>
> The **no payroll calendar assigned in Xero** warning only shows when you're generating **By Xero payroll calendar**, because that's the only mode that filters staff by calendar. On a **Manual date range** batch those staff *are* included - but their shifts will fail validation later when you export to Xero.

Select **Create Batch** to confirm. The button reads **Validating...** while these checks run.

Your newly created batch will now appear in the Timesheets Batches. You can view the batch by selecting it.

![The Timesheet Batches page with a newly created batch highlighted in the list, showing its Start and End dates, Number of Shifts Exported and Exported At time.](https://docs.astalty.com.au/assets/timesheet-batches-3.png)

Once inside the Timesheet Batch, you can access the **Actions** menu. Which options appear depends on the payroll platform set for your account:

| Action                                                         | When it appears                                                                  |
| -------------------------------------------------------------- | -------------------------------------------------------------------------------- |
| **Export Timesheet as Excel**                                  | Always - opens the [three file-based export options](#export-timesheet-as-excel) |
| **Export Employment Hero Timesheet (CSV)**                     | Your payroll platform is Employment Hero (or PayCat / QuickBooks Payroll)        |
| **Send to Employment Hero** and **Replace in Employment Hero** | The Employment Hero integration is connected and a business has been selected    |
| **Export Xero Timesheet (API)**                                | Your payroll platform is Xero                                                    |
| **Delete**                                                     | Always                                                                           |

> **Using PayCat or QuickBooks Payroll?**
>
> [PayCat](https://docs.astalty.com.au/guide/integrations/paycat) and [QuickBooks Payroll](https://docs.astalty.com.au/guide/integrations/quickbooks-payroll) are the same integration as [Employment Hero](https://docs.astalty.com.au/guide/integrations/employment-hero) - if your account uses one of those, the Employment Hero options are named after your platform instead.

### Export Timesheet as Excel

Selecting **Export Timesheet as Excel** opens a page with three export options. Choose the one that matches what you need to do with the file.

![The Export Timesheet as Excel page listing the Raw shift data, SCHADS interpreted timesheet and Xero-formatted timesheet options.](https://docs.astalty.com.au/assets/timesheet-batches-export-as-excel-options.png)

| Option                           | What you get                                                                                                                                    |
| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| **Raw shift data**               | Shift start/end times and durations as recorded, without any award interpretation applied.                                                      |
| **SCHADS interpreted timesheet** | One row per earning rate per day, with hours broken down by pay classification (ordinary, overtime, penalties, and allowances).                 |
| **Xero-formatted timesheet**     | Interpreted data in a pivot-table layout with days as columns, grouped by Support Worker and earning rate. Compatible with Xero payroll import. |

All three run in the background. Once the file is ready it appears on the [Exports](https://app.astalty.com.au/exports) page, where you can select **Download** to save it to your device.

#### Raw shift data

A generic **CSV** of the batch that you can tailor for importing into your preferred staff payment software. Nothing is interpreted - the times are exactly as approved on the shift.

The file contains one row per line of shift activity, with these columns:

- Date, Day Of Week, Start Time, End Time
- Paid Break Start Time, Paid Break End Time
- Units, Hours
- Pay Item - `hours`, `kilometres`, `travel`, `unpaid_break` or `custom_allowance`
- Cost Code - only when your account uses cost codes
- User Name, User External ID, Comments

**Hours** has any [unpaid breaks added to the shift](https://docs.astalty.com.au/guide/scheduling/meal-break#adding-a-break-from-within-a-support) taken off, floored at 0 - it's not the full approved start-to-end span. **Comments** names the deduction, for example `Unpaid break 30 mins`; a paid cancellation reads `Paid cancellation. Unpaid break 30 mins`. Paid breaks are never subtracted. A sleepover row's own hours are unchanged - an unpaid break inside the sleepover window is called out on that row instead, as `Unpaid break 30 mins not deducted from sleepover`.

![Raw shift data export before and after: the Hours column now has unpaid break minutes taken off, and the Comments column names the amount deducted, for example Unpaid break 30 mins.](https://docs.astalty.com.au/assets/timesheet-batches-raw-shift-data-unpaid-break.png)

Each [custom allowance](https://docs.astalty.com.au/guide/scheduling/setup/custom-allowances) on a shift adds a `custom_allowance` row with its **Units**, a blank **Hours**, and the allowance name in **Comments**.

There is no validation step on this export. Select **Create Export** and the file is queued straight away.

#### SCHADS interpreted timesheet

An **Excel (.xlsx)** file of interpreted shifts and quantities, named *Award Timesheet Export* followed by the batch's start and end dates. It has one row per Support Worker, per day, per earning rate, with these columns:

- Support Worker, Date, Pay Group
- Cost Code - only when your account uses cost codes
- Earning Rate, Units

Award allowances appear as their own rows alongside the pay lines, and any line that works out to zero units is left out. [Custom allowances](https://docs.astalty.com.au/guide/scheduling/setup/custom-allowances) are not included. Rows are ordered by Support Worker, then date, then earning rate.

> **Not just SCHADS**
>
> Despite the name, each worker is interpreted under **the award on their own employment contract** - so a batch that mixes SCHADS, Nurses, Aged Care and Health Professionals workers uses the implemented rules for each award. Review each award page's limitations before payroll. See [Award Interpretation](#award-interpretation) below.

Select **Validate & Export** to run the [interpreted timesheet validation checks](#interpreted-timesheet-validation-errors) and then queue the file.

#### Xero-formatted timesheet

The same interpreted data as above, but laid out as a pivot table ready for Xero's payroll import. It is an **Excel (.xlsx)** file named *Xero Timesheet Export* followed by the batch's start and end dates, with these columns:

- Support Worker
- Earning Rate
- One column per day in the batch, headed with the day and date (for example, *Mon 04 May*)

Each Support Worker's rows are grouped together with a blank row between workers, and earning rates with no units anywhere in the period are left out entirely. Units from a shift that runs past midnight on the final day of the batch are counted in the last date column. Each [custom allowance](https://docs.astalty.com.au/guide/scheduling/setup/custom-allowances) adds a row under its own name, with its units on each day.

Select **Validate & Export** to run the [interpreted timesheet validation checks](#interpreted-timesheet-validation-errors) and then queue the file.

> **Already using the Xero integration?**
>
> The **Xero-formatted timesheet** is for importing into Xero yourself. If you have the Xero integration set up for scheduling, use **Export Xero Timesheet (API)** instead to validate and push the batch straight to Xero - see [Xero Integration in Scheduling](https://docs.astalty.com.au/guide/scheduling/xero-integration-in-scheduling).

### Export Employment Hero Timesheet (CSV)

This produces a CSV of the Timesheet batch that is ready for importing into Employment Hero. If the integration is connected, the Actions menu also offers **Send to Employment Hero** and **Replace in Employment Hero**, which push the timesheets across without a file. See [Employment Hero](https://docs.astalty.com.au/guide/integrations/employment-hero).

### Export Xero Timesheet (API)

This opens the **Export for Xero** panel, where you can validate the batch and push it directly to Xero via the API. The panel also has an **Export as Excel** button in its top-right corner, which queues the same [Xero-formatted timesheet](#xero-formatted-timesheet) file described above.

For more on the Xero integration for scheduling, see [Xero Integration in Scheduling](https://docs.astalty.com.au/guide/scheduling/xero-integration-in-scheduling).

### Delete

Within the Actions Menu, you can use the **Delete** option to remove the Timesheet Batch. You'll be asked to type the number of shifts in the batch to confirm. On accounts using the On-Call Roster, or when the batch holds on-call, type the number of shifts and on-call records the batch releases instead. Use of this function cannot be undone.

Deleting a batch releases its shifts and on-call to the next batch for those dates. A batch cannot be deleted while a later batch's on-call pay depends on it, so delete the later batch first.

## Resolving Timesheet Batch Validation Errors

Before a batch can be exported, Astalty validates it. If anything would stop the export, the panel lists each problem against the worker it affects, and most rows include a **Fix issue** button (wrench icon) that opens the exact screen where you can resolve it - so you don't have to work out which setting is at fault.

> **Fix issue opens in a new tab**
>
> **Fix issue** opens the destination in a **new browser tab**, leaving your timesheet batch open in the original tab. Make the change in the new tab, then switch back to the batch tab and select **Validate** again to re-check it.

Which errors you see depends on how you're exporting:

| Where you validate                                                                                         | Errors you'll see                                                                   |
| ---------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
| **Export Xero Timesheet (API)** > **Validate** - syncs the batch to Xero through the integration           | [Xero validation errors](#xero-validation-errors)                                   |
| **Export Employment Hero Timesheet (CSV)** > **Validate**, or **Send to** your platform                    | [Employment Hero validation errors](#employment-hero-validation-errors)             |
| **SCHADS interpreted timesheet** or **Xero-formatted timesheet** > **Validate & Export** - produces a file | [Interpreted timesheet validation errors](#interpreted-timesheet-validation-errors) |

The **Raw shift data** export has no validation step, because nothing is interpreted - it exports the approved shift times as they stand.

### When the Fix issue button doesn't appear

Not every row has a **Fix issue** button. It's absent when:

- **The error has to be fixed by editing the shift.** Problems such as a zero-length shift, a break that falls outside the approved shift times, or overlapping timesheet lines can only be corrected on the shift itself. Go back to [the schedule](https://app.astalty.com.au/scheduling/schedule), open the affected shift, and correct its approved start/end times or breaks - see [Shift Approvals](https://docs.astalty.com.au/guide/scheduling/shift-approvals).
- **The error has to be fixed in your payroll platform.** For example, if a worker isn't on the batch's payroll calendar in Xero, or their employee record isn't active in Employment Hero, the change has to be made in Xero or Employment Hero - Astalty can't do it for you.
- **You can't make the fix yourself.** The **Fix issue** button for the *Shift has no cost code* error only appears if you can create cost codes, and every button leads to a settings or HR page you need access to. Ask an Admin to give you access or resolve the error for you.
- **The error isn't tied to a specific worker.** Some Employment Hero errors need a linked worker on the row before Astalty can build a destination link.

> **Some problems aren't tied to a single worker**
>
> Problems that affect the **whole batch** - no shifts to export, batch dates that don't line up with a Xero pay period, no payroll calendar set, or Astalty being unable to reach Xero - are listed together at the top rather than against an individual worker, so they have no **Fix issue** button. Resolve these by correcting the batch itself or reconnecting the integration.
>
> Where Astalty can name the cause, it prints the remedy as a plain line underneath the message. Batch dates displaced by a Xero pay run are explained this way - see [Incorrect Timesheet Batch Dates](https://docs.astalty.com.au/guide/scheduling/xero-integration-in-scheduling#incorrect-timesheet-batch-dates).

> **Fix issue works differently after the export runs**
>
> Everything on this page covers the errors found **when you validate**, before anything is sent to your payroll platform. If a batch passes validation but Xero then rejects it, the failure is recorded in the **Export Results** panel, where **Fix issue** opens a **Why this export failed** drawer instead of navigating straight to a screen. See [Errors When Syncing Timesheets](https://docs.astalty.com.au/guide/scheduling/xero-integration-in-scheduling#errors-when-syncing-timesheets).

### Xero validation errors

| Error                                                                                                                                                                                                                                                                                   | Where Fix issue takes you                                                                                                                                                                                                                                                                                                                                                                                                                       |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| User is missing a Pay Group                                                                                                                                                                                                                                                             | The worker's **HR** tab, with the **Update payroll** drawer open                                                                                                                                                                                                                                                                                                                                                                                |
| User is missing a Xero Employee ID                                                                                                                                                                                                                                                      | The worker's **HR** tab, with the **Update payroll platform** drawer open                                                                                                                                                                                                                                                                                                                                                                       |
| User does not have an employment contract within the timesheet batch period                                                                                                                                                                                                             | The worker's **Employment Details**, with the **Add Employment Details** drawer open                                                                                                                                                                                                                                                                                                                                                            |
| No state is set on the organisation's address or on this user's address, so the public holidays in their on-call cannot be priced                                                                                                                                                       | The worker's profile, with their address open for editing                                                                                                                                                                                                                                                                                                                                                                                       |
| The worker's pay group is set up for a different award from their employment contract                                                                                                                                                                                                   | The worker's **HR** tab, with the **Update payroll** drawer open                                                                                                                                                                                                                                                                                                                                                                                |
| Shifts carry a pay group set up for a different award from the worker's contract                                                                                                                                                                                                        | [Settings > Scheduling > Pay Groups](https://app.astalty.com.au/settings/scheduling/pay-groups). Change the pay group on those shifts, or the pay group's award                                                                                                                                                                                                                                                                                 |
| The award on the worker's contract doesn't support sleepovers                                                                                                                                                                                                                           | The worker's **HR** tab                                                                                                                                                                                                                                                                                                                                                                                                                         |
| Pay Group is missing Xero configuration, or is missing a pay item                                                                                                                                                                                                                       | [Xero **Pay Groups** settings](https://app.astalty.com.au/settings/integrations/xero/pay-groups), usually opened ready to edit that pay group's pay item mapping                                                                                                                                                                                                                                                                                |
| A [custom allowance](https://docs.astalty.com.au/guide/scheduling/setup/custom-allowances#mapping-an-allowance-to-a-xero-earnings-rate) on a shift in the batch has no Xero earnings rate mapped, or its earnings rate has been deleted or archived in Xero, or isn't measured in hours | [Xero **Custom Allowances** settings](https://app.astalty.com.au/settings/integrations/xero/allowances), listing archived allowances too                                                                                                                                                                                                                                                                                                        |
| Cost code is missing a Xero payroll tracking option                                                                                                                                                                                                                                     | [Xero **Cost Codes** settings](https://app.astalty.com.au/settings/integrations/xero/cost-codes)                                                                                                                                                                                                                                                                                                                                                |
| Shift has no cost code, but your Xero organisation requires a tracking category on timesheets                                                                                                                                                                                           | [Settings > Scheduling > Cost Codes](https://app.astalty.com.au/settings/scheduling/cost-codes), with the **Re-evaluate Existing Records** drawer open and scoped to this batch's date range                                                                                                                                                                                                                                                    |
| Two or more workers share the same Xero employee                                                                                                                                                                                                                                        | The worker's **HR** tab, with the **Update payroll platform** drawer open. The message names everyone sharing that employee - each needs their own Xero employee before the batch can be exported                                                                                                                                                                                                                                               |
| Xero already holds a timesheet for this worker for this period                                                                                                                                                                                                                          | [Manage Xero Timesheets](#managing-xero-draft-timesheets), filtered to that worker and pay period - but **only if the existing timesheet is a draft**. The row also shows its status in Xero, period and hours. Anything already approved, awaiting approval or in a pay run has to be dealt with in Xero; see [Timesheet Already Exists](https://docs.astalty.com.au/guide/scheduling/xero-integration-in-scheduling#timesheet-already-exists) |

#### Which pay items get checked

Validation interprets the batch under **the award on each worker's employment contract**, then checks that every rate and allowance it pays has a pay item mapped on the worker's pay group. A pay item the batch does not use is not checked. A pay group can pass one week and fail the next, when a worker first works a night, a public holiday or a sleepover. The error names the missing pay item, and its row lists any shifts that needed it.

The same applies to on-call: standby and activations in the batch need the [on-call pay items](https://docs.astalty.com.au/guide/scheduling/on-call-roster#mapping-on-call-pay-items) for the worker's award, such as **On Call Weekday** and **Remote Work** for SCHADS.

> **Validation does not check every payable rate**
>
> Map **Overtime Sunday** and **Overtime Public Holiday** for Nurses and Aged Care as well as Health Professionals where their rates differ from ordinary penalties. Missing mappings can fall back to ordinary Sunday or public holiday items, even when validation passes. Check the full mapping table for the worker's award and the actual pay-run rates.

Map every pay item for the worker's award before the first pay run, rather than waiting for validation to name each one. Each award page lists the pay items and suggested multipliers for its own pay group - see [SCHADS](https://docs.astalty.com.au/guide/scheduling/scheduling-faq/schads-interpretations-in-astalty#setting-up-xero-pay-items), [Nurses](https://docs.astalty.com.au/guide/scheduling/scheduling-faq/nurses-award-interpretations-in-astalty#setting-up-xero-pay-items), [Aged Care](https://docs.astalty.com.au/guide/scheduling/scheduling-faq/aged-care-award-interpretations-in-astalty#setting-up-xero-pay-items) and [Health Professionals](https://docs.astalty.com.au/guide/scheduling/scheduling-faq/health-professionals-award-interpretations-in-astalty#setting-up-xero-pay-items).

A pay group's mapping encodes one award's rates, so a pay group holding workers on two awards stops the export and names both - see [Setup Pay Items and Employee Templates in Xero](https://docs.astalty.com.au/guide/setup-pay-items-and-employee-templates-in-xero). On-call has no pay group of its own. When neither the worker's pay group nor their shifts on the same days carry a pay group for the award on the contract covering the on-call, it cannot be exported, and the error asks you to pay that period outside Astalty.

**User is not on this timesheet batch's payroll calendar in Xero** has no **Fix issue** button. This can only be fixed in Xero - assign the employee to the batch's payroll calendar there, then re-run the export.

For the two cost code errors, the row also lists the **affected shifts** as clickable dates and times - selecting one opens the shift viewer on the same page, so you don't lose your place. Six are shown at a time; if there are more, select **+2 more** (the count varies) to reveal the rest, then **Show fewer** to collapse them again.

### Employment Hero validation errors

> **Using PayCat or QuickBooks Payroll?**
>
> [PayCat](https://docs.astalty.com.au/guide/integrations/paycat) and [QuickBooks Payroll](https://docs.astalty.com.au/guide/integrations/quickbooks-payroll) are the same integration as [Employment Hero](https://docs.astalty.com.au/guide/integrations/employment-hero), so these errors are identical - they're just named after your platform.

#### Connection and Shift Errors

Employment Hero validation splits results into **Errors**, which must be fixed before you can export, and **Warnings**, which don't block the export. If there are warnings and no blocking errors at all, an **Export anyway** button appears so you can proceed - but Employment Hero may still reject overlapping lines when the pay run is processed.

Each row also shows a plain-English explanation beneath the error, telling you what triggered it.

> **Connection problems block the export entirely**
>
> If Astalty can't reach Employment Hero, or your credentials are no longer valid, that's reported on its own rather than against a worker. These rows carry no **Fix issue** button and no explanation - reconnect the integration from [Settings > Integrations](https://app.astalty.com.au/settings/integrations) and validate again. While one of these is present, **Export anyway** won't appear even if everything else is only a warning.

**Fix issue takes you to the worker's HR tab for:**

| Error                                                                          | Drawer opened                     |
| ------------------------------------------------------------------------------ | --------------------------------- |
| Not yet linked to an Employment Hero employee                                  | **Update payroll platform**       |
| Linked, but the employee couldn't be found in Employment Hero                  | **Update payroll platform**       |
| Not assigned to a pay group                                                    | **Update payroll**                |
| Their pay group is set up for a different award from their employment contract | **Update payroll**                |
| The award on their contract doesn't support sleepovers                         | *(no drawer - the HR tab itself)* |

**Fix issue takes you elsewhere on the worker's profile for:**

- No employment contract for the batch period, on a worker with a sleepover or on-call in the batch - their **Employment Details**, with the **Add Employment Details** drawer open
- No state on the organisation's address or the worker's, so the public holidays in their on-call can't be priced - their profile, with their address open for editing

**Fix issue takes you to [Employment Hero Pay Groups settings](https://app.astalty.com.au/settings/integrations/employment-hero/pay-groups) for:**

- The pay group has no Employment Hero work type mappings yet
- A required work type isn't mapped - Ordinary Hours, KMs Travel, Paid Meal Break, Unpaid Meal Break, Sleepover, Active Overnight, or Paid Cancellation
- **24-hour Care** isn't mapped and a home care worker has a [24-hour care shift](https://docs.astalty.com.au/guide/scheduling/scheduling-faq/schads-interpretations-in-astalty#24-hour-care) in the batch, including one cancelled with pay
- Only one of **Pre-Sleepover** and **Post-Sleepover** is mapped (a *warning*) - map both, or clear both to keep the previous behaviour
- The worker was on call, but their pay group doesn't map the work type for that [on-call pay](https://docs.astalty.com.au/guide/scheduling/on-call-roster#mapping-on-call-pay-items)
- A mapped work type can't price what is sent as units: **KMs Travel**, **Sleepover** and the on-call allowances need a fixed-rate pay category. The other on-call rows need a custom work type on a pay category of its own, or one of the platform's own work types on a fixed-rate pay category. Weekday remote work and weekday on-call ordinary hours may also use a custom work type on the employee's primary pay category
- A work type mapped in Astalty no longer exists in Employment Hero

**Fix issue takes you to [Settings > Scheduling > Pay Groups](https://app.astalty.com.au/settings/scheduling/pay-groups) for:**

- Shifts carry a pay group set up for a different award from the worker's contract, so their on-call can't be paid. Change the pay group on those shifts, or the pay group's award

**Fix issue takes you to [Employment Hero Custom Allowances settings](https://app.astalty.com.au/settings/integrations/employment-hero/allowances) for:**

- A [custom allowance](https://docs.astalty.com.au/guide/scheduling/setup/custom-allowances) on a shift in the batch has no work type mapped
- A custom allowance is mapped to a work type that no longer exists in Employment Hero
- A custom allowance's work type doesn't pay a pay category of its own, or is one of Employment Hero's own work types without a fixed rate

**Fix issue takes you to [Employment Hero Cost Codes settings](https://app.astalty.com.au/settings/integrations/employment-hero/cost-codes) for:**

- A shift's cost code hasn't been mapped to an Employment Hero location
- A mapped location no longer exists in Employment Hero

**These errors have no Fix issue button:**

| Error                                                                                                       | What to do                                                                        |
| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- |
| The approved start and end times are identical, giving zero hours                                           | Review the shift's approved times                                                 |
| A calculated value came out negative (such as travel kilometres or sleepover units)                         | Review the shift's approved details                                               |
| A paid break starts or ends outside the approved shift times                                                | Review the shift's break times and approved start/end times                       |
| A shift falls outside the batch's date range (common when a shift crosses midnight near the batch boundary) | Adjust the shift, or the batch date range                                         |
| Timesheet lines overlap (a *warning*)                                                                       | Review the approved times on the overlapping shifts                               |
| The employee exists in Employment Hero but isn't active                                                     | Update their status in Employment Hero, or exclude them from the export           |
| Astalty couldn't work out the employee's on-call pay for this batch                                         | The message says why. Fix the cause, then validate again                          |
| On-call is paid at a rate Astalty does not send to your platform, so the export leaves it out (a *warning*) | Pay it outside Astalty, or select **Export anyway** to send the rest of the batch |

> **Use View in schedule for overlapping timesheet lines**
>
> The **Timesheet lines overlap** warning is the one error Astalty can point at a specific shift, so its row also offers a **View in schedule** button. Like **Fix issue**, it opens in a new tab - taking you to the schedule filtered to that worker and the time of the first overlap, so you can correct the approved times straight away.
>
> The other shift-level errors in the table above have no such button; find those shifts on [the schedule](https://app.astalty.com.au/scheduling/schedule) yourself.

### Interpreted timesheet validation errors

The two interpreted file exports - **[SCHADS interpreted timesheet](#schads-interpreted-timesheet)** and **[Xero-formatted timesheet](#xero-formatted-timesheet)** - validate against the award interpretation. Here the fix control is a **wrench icon** rather than a labelled button; hover it to see the *Fix issue* tooltip.

| Error                                                                                                           | Where the wrench takes you                                                                      |
| --------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
| User is missing a Pay Group                                                                                     | The worker's **HR** tab, with the **Update payroll** drawer open                                |
| No employment contract for the batch period                                                                     | The worker's **Employment Details**, with the **Add Employment Details** drawer open            |
| No state on the organisation's address or the worker's, so the public holidays in their on-call can't be priced | The worker's profile, with their address open for editing                                       |
| Their pay group is set up for a different award from their employment contract                                  | The worker's **HR** tab, with the **Update payroll** drawer open                                |
| Shifts carry a pay group set up for a different award from the worker's contract                                | [Settings > Scheduling > Pay Groups](https://app.astalty.com.au/settings/scheduling/pay-groups) |
| The award on their contract doesn't support sleepovers                                                          | The worker's **HR** tab                                                                         |

If the batch contains no shifts to export at all, **No shifts found to export** is shown on its own instead of against a worker, with no wrench icon.

## Managing Xero Draft Timesheets

If your account uses Xero for payroll, you can review and bulk delete the draft timesheets currently sitting in Xero. This is handy when you need to clear out drafts before re-exporting a corrected batch. There are two ways to reach this tool.

### From the Timesheet Batches page

From [Timesheet Batches](https://app.astalty.com.au/scheduling/timesheet-batches), select the **Actions** menu next to **Create Batch**, then choose **Manage Xero Timesheets**.

![The Timesheet Batches page with the Actions menu open beside Create Batch, and an arrow pointing to the Manage Xero Timesheets option.](https://docs.astalty.com.au/assets/timesheet-batches-manage-xero-timesheets-actions.png)

The **Bulk delete draft timesheets** panel opens, listing the draft timesheets currently in Xero with the Worker, Pay Period and Hours. Select individual timesheets, or use **Select all**, and then select **Delete** to remove them.

![The Bulk delete draft timesheets panel, listing a draft timesheet under Worker, Pay Period and Hours columns with a checkbox on each row, a Select all button, and Cancel and Delete buttons.](https://docs.astalty.com.au/assets/timesheet-batches-bulk-delete-draft-timesheets.png)

### From Settings

You can also reach the same tool through Settings:

1. Go to [Settings > Integrations](https://app.astalty.com.au/settings/integrations).
2. On the **Xero** card, select **View Details**.
3. In the Xero settings menu, open **Manage Timesheets**.
4. Select **Actions > Bulk delete**, then choose the draft timesheets to remove and select **Delete**.

This page also shows a full table of the draft timesheets currently in Xero, so you can review them before deleting.

> **This permanently removes timesheets from Xero**
>
> Deleting draft timesheets here **permanently removes them from Xero** and cannot be undone. Only the drafts Astalty can see are listed: timesheets that are approved, awaiting approval, rejected or processed in Xero won't appear, and neither will a draft a worker entered in Xero Me. To clear one of those, see [Timesheet Already Exists](https://docs.astalty.com.au/guide/scheduling/xero-integration-in-scheduling#timesheet-already-exists).

Deletion runs in the background, so you can keep working while it completes. Once finished, you'll see how many were deleted and any that failed, so you can retry or remove them directly in Xero.

## Award Interpretation

Each worker in the batch is interpreted under the award on their employment contract. For supported rules and manual checks, see [SCHADS](https://docs.astalty.com.au/guide/scheduling/scheduling-faq/schads-interpretations-in-astalty), [Nurses](https://docs.astalty.com.au/guide/scheduling/scheduling-faq/nurses-award-interpretations-in-astalty), [Aged Care](https://docs.astalty.com.au/guide/scheduling/scheduling-faq/aged-care-award-interpretations-in-astalty) and [Health Professionals](https://docs.astalty.com.au/guide/scheduling/scheduling-faq/health-professionals-award-interpretations-in-astalty). For the full standalone report documentation, including pay period requirements, stat cards, filtering, and excluded employees, see the [Award Pay Report](https://docs.astalty.com.au/guide/reports/schads-pay-report).

Open a Timesheet Batch and select **Award Interpretation** to review how Astalty interpreted its shifts. On **Employment Hero**, **PayCat** and **QuickBooks Payroll**, the payroll platform calculates award pay from the timesheets Astalty sends, so its result can differ from these figures.

Use a complete pay period. For adjoining work that crosses into it, Astalty carries the previous period's interpretation into the later period's shift, daily, overtime-band, meal, and minimum-engagement calculations without exporting the earlier hours twice. Check [Pay Period Settings](https://docs.astalty.com.au/guide/scheduling/scheduling-award-alerts#pay-period-settings), resolve missing or unapproved records, and compare the final payroll amounts after export.

### Viewing the Interpretations per Support Worker

The table shows Astalty's interpretation of each worker's shifts in the batch. Group the rows by day or view the itemised results.

#### By Daily Breakdown

If you are viewing by **Daily Breakdown** you can view the different pay line totals applied per days, and you then group each of the pay lines across the pay cycle to display the total accumulated amounts of that pay line in the pay cycle.

![The SCHADS Interpretation page of a Timesheet Batch with Daily breakdown selected, and a Support Worker's pay lines and allowances expanded to show each pay item per day from Monday to Sunday, with a Total column.](https://docs.astalty.com.au/assets/schads-itemised-1.png)

#### By Itemised Lines

If you are viewing by **Itemised Lines** you can view it grouped by the Paylines and Allowances, which will then provide you with the date of support, Pay rate or Allowance, and the amount of units.

### Exporting to CSV

Select **Export CSV** to queue a CSV of every employee interpreted for this batch - including anyone hidden by the table's search. If your organisation requires a reason for exports, an **Export reason** box appears; enter at least 10 characters before selecting **Create export**.

The file is queued in the background and appears on the [Exports](https://app.astalty.com.au/exports) page as *Award Interpretation Export* followed by the batch's start and end dates. Its columns match the [Award Pay Report's CSV export](https://docs.astalty.com.au/guide/reports/schads-pay-report#exporting-to-csv).
