- Finance
- Cost Codes (Advanced)
Cost Codes (Advanced)
What cost codes do
Cost codes are labels — like Community Access, North Region, or Admin — that you attach to your shifts and supports to record which part of your business a piece of work belongs to.
On their own they're just labels. The value comes once you map each code to your accounting and payroll systems: every invoice and pay run is then stamped with the right label automatically, so you can see profit and loss broken down by program, region, or funding type.
There are two independent sides:
- Income — a cost code on a support tags that support's invoice lines, splitting your revenue.
- Wages — a cost code on a shift tags that worker's timesheet line, splitting your labour cost.
Invoicing always reads the code on the support; payroll always reads the code on the shift. The two are separate, and a support and the shifts that deliver it can carry different codes — often exactly what you want.
A quick example
Say you work across two regions and want to know which one makes money:
- Create two cost codes: North and South.
- Tag your supports and shifts to the right region — by hand, or with a rule that does it automatically.
- When you invoice, each support's income is tagged North or South; when you run payroll, each shift's wages are tagged the same way.
- Run a profit-and-loss report by region and compare.
The same approach works for service types, teams, or sites — tag once, and both sides of the ledger sort themselves out.
Creating your cost codes
Create, rename, and archive codes at Settings → Scheduling → Cost Codes.
Keep codes broad — each one should be a bucket you'd genuinely want on a report. Most organisations have a handful to a couple of dozen. Archiving a code hides it from new records but leaves it on existing ones, so past invoices, timesheets, and reports stay accurate.
Getting codes onto your roster
A code lands on a record in one of two ways: you pick it, or a rule applies it. Most teams use both.
Pick it manually
When you create or edit a shift, support, or group support, choose a code in the Cost Code field.
- On a support, it drives invoicing.
- On a shift, it drives payroll.
- On a group support, it sets the group's code, which cascades to each participant's support inside the group — but never to shifts.
A code you pick by hand is a deliberate choice, so Astalty never overwrites it — not when rules run, and not during a bulk re-evaluation. To hand a record back to the rules, just clear the code.
Let rules do it
Rules apply the right code automatically as your roster is built. A rule is simply when these conditions are met, use this code — for example, participant has tag NDIS → use NDIS.
What a rule can match on depends on its target:
- Support rules match on the participant's tags, the support type, the site, or the site's tags.
- Shift rules match on the worker (role, team, or user group) and on the support context — participant tags, support type, site, or site tag.
A rule can have several conditions; when it does, all must be true. Within one condition you can list several values, and any of them counts. Rules run top to bottom and the first match wins, so put specific rules above general ones (drag to reorder). A rule with no conditions is a catch-all, which Astalty keeps at the bottom automatically.
Build your rules on the Rules tab at Settings → Scheduling → Cost Codes.
Keeping things in sync
Astalty keeps rule-based codes current as your roster changes. Changing a support's type or site, or assigning or unassigning a worker, re-checks the affected records on the spot — so assigning a worker can let a more specific worker rule take over. Manual codes are always left alone, and other changes (like re-tagging a participant) need a bulk re-evaluation.
When you first set up rules — or change them — apply them to existing records with a bulk re-evaluation at Settings → Scheduling → Cost Codes → Rules tab → Actions → Re-evaluate Existing Records. Pick a date range, then choose how far to go:
- Only fill missing cost codes — add a code where there isn't one, and never change or remove existing codes.
- Full re-evaluation — assign missing codes, update ones that no longer match, and remove codes whose record no longer matches any rule.
You'll see a preview of exactly what would change before anything is applied. Manually assigned codes, and records already invoiced or paid through payroll, are always protected and never touched.
Connecting to your accounting and payroll systems
A code only starts splitting your numbers once you map it to a field in your finance system. You map each code once per integration, and Astalty applies it on every sync.
Xero invoicing
Settings → Integrations → Xero → Cost Codes
Map each code to your Xero tracking categories. Xero allows two tracking categories per invoice line (say Cost Centre and Region), so one code can fill both at once. Each invoice line then 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. Payroll allows only one category per timesheet line. If a shift has a code that isn't mapped, 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.
You don't have to map everything at once — an unmapped code simply has no effect, so you can roll codes out gradually.
Checking your work
Before an invoicing or pay run, check Reports → Cost Code Assignments. Summary cards show your coverage — total records in the period, how many are assigned versus unassigned, and how many came from a rule versus a manual choice. The table lists your shifts and supports together with each one's code and where it came from, and you can open any row to jump to the record.
The best habit is to filter to Unassigned for the period you're about to bill or pay, then close any gaps — by assigning a code by hand, or adjusting a rule and re-evaluating — before anything reaches your accounting or payroll system untagged.
Tips
- Manual always wins. A hand-picked code is never overwritten by a rule or re-evaluation. Clear it to hand the record back to rules.
- Shifts and supports are tagged separately. Supports carry the income code; shifts carry the wage code. A shift never inherits its support's code — only a manual code on a group support cascades to its child supports.
- 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.
- Archiving is safe. It hides a code from new records but keeps your history and past reports intact.