Command Palette

Search for a command to run...

Log In
  1. Finance
  2. Cost Codes (Advanced)

Cost Codes (Advanced)

Cost Codes

What cost codes do

Cost codes are simple labels — like Community Access, North Region, or Admin — that you attach to your shifts and supports. Think of them as tags that describe which part of your business a piece of work belongs to.

On their own they're just labels. The power comes once you connect (or "map") each code to your accounting and payroll systems. From then on, every time you invoice or run payroll, Astalty automatically stamps the right label onto your income and your wage costs — no spreadsheets, no manual sorting.

That means you can see your profit and loss broken down by program, department, region, funding type, or whatever else matters to your organisation, straight out of your accounting and payroll systems. If you've ever wanted to answer "is this program actually profitable?" or "which region is costing us money?", cost codes are how you get there.

There are two sides to it:

  • Income — a cost code on a support tags that support's invoice lines, splitting your revenue in your accounting system.
  • Wages — a cost code on a shift tags that worker's timesheet line, splitting your labour costs in your payroll system.

One important thing to remember: these two sides are completely independent. Invoicing always reads the code on the support, and payroll always reads the code on the shift. A support and the shifts that deliver it can even carry different codes — and often that's exactly what you want, since income and labour don't always belong to the same bucket.

A quick example

Say you deliver supports across two regions — North and South — and you want to know which one is actually making money.

  1. You create two cost codes: North and South.
  2. You tag your supports and shifts to the right region. You can do this by hand on each record, or set up a rule so it happens automatically (more on rules below).
  3. When you invoice, each support's income is tagged North or South in your accounting system. When you run payroll, each shift's wages are tagged the same way.
  4. You run a profit-and-loss report by region — and finally see, in black and white, that South is quietly carrying North.

The same approach works for anything you'd want to compare: swap "region" for your service types (Community Access vs In-home Support), your teams, or your sites. Tag it once, and both sides of the ledger sort themselves from then on.

Creating your cost codes

Go to Settings → Scheduling → Cost Codes to create, rename, or archive your codes.

Keep them broad and meaningful — a cost code should represent one of the handful of buckets you'd genuinely want to see on a report. Most organisations have somewhere between a few and a couple of dozen. If you find yourself creating a code for every tiny variation, that's usually a sign the bucket is too narrow.

Need to retire a code you no longer use? Archiving hides it from new records but leaves it on anything it's already attached to — so your past invoices and timesheets are completely unaffected, and your historical reports stay accurate.

Getting codes onto your roster

A cost code can land on a record in one of two ways: you pick it yourself, or a rule applies it for you. Most organisations use a mix — rules to handle the bulk of the roster, and the occasional manual choice for the exceptions.

1. Pick it manually

When you create or edit a shift, support, or group support, you'll see a Cost Code field — just choose one.

  • On a support, the code drives invoicing.
  • On a shift, it drives payroll.
  • On a group support, it sets the group's code, which then passes down to each participant's support inside the group.

A code you pick by hand is treated as a deliberate choice, and Astalty will never overwrite it — not when rules run, and not during a bulk re-evaluation. This lets you lean on rules for everything routine while still hand-tuning the odd record that needs special treatment. If you ever want a record to go back to being handled by rules, just clear the code and the next evaluation will pick it up.

2. Let rules do it for you

Tagging every record by hand gets tedious fast, so you can set up rules that apply the right code automatically as your roster is built and updated. This is where cost codes really save you time.

A rule is simply: when these conditions are met, use this code. For example:

  • If the participant is tagged NDIS → use NDIS
  • If the worker's team is Clinical → use Clinical Services
  • If the site is Sydney, Newcastle or Wollongong → use NSW

What you can match on depends on the record type:

  • Support rules can look at the participant's tags, the support type, or the site.
  • Shift rules can look at the worker (their role, team, or user group) or the site.

A rule can have more than one condition — when it does, all of them must be true for the rule to apply. Within a single condition you can list several values, and any of them will count (so "Site is one of Sydney, Newcastle, Wollongong" matches a record at any of the three).

Rules are checked from top to bottom, and the first one that matches wins — so order matters. Put your most specific rules at the top and your more general ones lower down. A rule with no conditions at all is a catch-all that matches everything; Astalty automatically keeps these at the bottom so they only apply when nothing more specific has.

One nice touch: when you assign a worker to a shift, Astalty re-checks that shift. So even if a shift started with a code based on its site, assigning a worker lets a more specific worker-based rule (like their team) take over.

Build and reorder your rules at Settings → Scheduling → Cost Codes (Rules tab).

Keeping things in sync

Your roster is always changing, so Astalty keeps rule-based codes up to date for you automatically. If you change a support's type or site, or assign or unassign a worker, the affected records are re-checked on the spot. (Manual codes are always left untouched.)

When you first set up your rules — or after you change them — you'll want to apply them to records that already exist. Run a bulk re-evaluation to bring your roster in line with your current rules: go to Settings → Scheduling → Cost Codes → Rules tab → Actions → Re-evaluate Existing Records and choose a date range.

Before anything changes, you'll see a clear preview of what will happen — which records would get a code added, which would change to a different code, which would be cleared, and which manually-set ones will be skipped. Nothing is applied until you're happy with it.

Connecting to your accounting and payroll systems

A cost code only starts splitting your numbers once you've mapped it — that is, told Astalty which field it should fill in your finance system. You do this once per code, per integration, and Astalty handles the rest every time you sync.

Xero invoicing

Settings → Integrations → Xero → Cost Codes

Map each code to your Xero tracking categories. Xero lets you put two tracking categories on an invoice line (for example a Cost Centre and a Region), so a single cost code can fill both at once — NDIS – NSW might set Cost Centre = NDIS and Region = NSW together. When an invoice syncs, each line picks up the tracking from its support's code automatically.

Xero Payroll

Settings → Integrations → Xero → Cost Codes (payroll section)

Map each code to a Xero Payroll tracking option. Unlike invoicing, Xero Payroll only allows one category per timesheet line, so each code maps to a single option. When you export timesheets, every pay and allowance line takes the shift's code. If a shift has a code that hasn't been mapped yet, the export pre-check flags it so you can fix it before sending.

Employment Hero

Settings → Integrations → Employment Hero → Cost Codes

Map each code to an Employment Hero location. The shift's code then sets the location on the timesheet line, sending the labour cost to the right place.

Don't feel you have to map everything at once. If a code has no mapping it simply has no effect, and any setup you already had keeps working — so you can roll cost codes out gradually and switch over at your own pace.

Checking your work

Before each invoicing or pay run, it's worth a quick health check at Reports → Cost Code Assignments. Summary cards at the top show your coverage at a glance — how many records fall in the period, how many are tagged versus untagged, and how many codes came from a manual choice versus a rule. The table below lists your shifts and supports together, showing each one's cost code and where it came from, and you can open any row to jump straight to the record.

The most useful habit is to filter to Unassigned for the period you're about to bill or pay. That surfaces any gaps while you can still fix them — by assigning a code by hand, or by adjusting a rule and re-evaluating — so nothing slips through to your accounting or payroll system untagged.

Tips

  • Manual always wins. A code you pick by hand is never overwritten by a rule or re-evaluation. Clear it if you want the record handled by rules again.
  • Shifts and supports are tagged separately. Supports carry the income code; shifts carry the wage code. A shift never inherits its support's code — the one exception is a manual code on a group support, which passes down to its child supports (but never to shifts).
  • Order matters in rules. The first matching rule wins, so keep specific rules above general ones and let the catch-all sit at the bottom.
  • Map before you send. A code with no mapping has no effect, so set up your mappings before you invoice or run payroll.
  • Archiving is safe. It hides a code from new records but keeps it on existing ones, so your history and past reports stay intact.

Was this page helpful?