Originally based on our article Support at Home funding levels 2026: classifications 1 to 8 explained on rostery.com.au. This version is rewritten for developers, finance analysts and operations staff who build or check the systems behind a Support at Home provider.
Support at Home replaced Home Care Packages for older Australians from 1 November 2025. Each participant is given an ongoing classification from 1 to 8, and each classification has an annual amount. That part is easy to put in a lookup table.
The trouble starts when someone asks a practical question. How much can we plan to spend for this person between October and December? What happens if they started in the middle of November? How much of it is care management? What carries over if the quarter ends with money left? Those answers depend on dates, rounding and a handful of rules spread through the Department of Health, Disability and Ageing's program manual.
This post builds a small Python model for those rules. It uses the standard library only: Decimal for money, date for the calendar, and plain functions that are easy to unit test. You can port the same logic to SQL or a spreadsheet.
General information only, not financial advice. Classification amounts are the My Aged Care figures current from 1 October 2026; the budget, interim funding and carry-over rules come from the Support at Home program manual (version 4.4). Sources were read between 30 October and 13 November 2026. Amounts are indexed, so check the current figures before relying on any of this.
The inputs
There are three things you need for any participant: their classification, the date their services started (or the date a new classification took effect), and the quarter you're asking about. Support at Home quarters follow the calendar: January to March, April to June, July to September and October to December.
The annual amounts are published by classification. From 1 October 2026 they run from $11,031.56 for Classification 1 to $80,294.00 for Classification 8. People who moved across from a Home Care Package can sit on a transitioned HCP level instead, which has its own amounts; the same functions work for those if you add them to the table.
One thing to resist early: don't store the quarterly figure as the annual amount divided by four. My Aged Care publishes a quarterly column that is exactly that, and it's fine as a rough guide. The manual, though, says the quarterly budget is worked out from the annual amount, the number of days in the year and the number of days in the quarter. Quarters aren't the same length, so the numbers differ by a few dollars, and those dollars show up when you reconcile.
The whole model
Here's the complete module. The sections below walk through each function and the rule behind it.
from dataclasses import dataclass from datetime import date, timedelta from decimal import Decimal, ROUND_HALF_UP CENT = Decimal("0.01") def money(x: Decimal) -> Decimal: return x.quantize(CENT, rounding=ROUND_HALF_UP) # Annual amounts from 1 October 2026 (My Aged Care, Support at Home costs and contributions) ANNUAL = { 1: Decimal("11031.56"), 2: Decimal("16483.55"), 3: Decimal("22580.93"), 4: Decimal("30528.15"), 5: Decimal("40809.27"), 6: Decimal("49461.91"), 7: Decimal("59776.80"), 8: Decimal("80294.00"), } @dataclass(frozen=True) class Quarter: start: date end: date # inclusive @property def days(self) -> int: return (self.end - self.start).days + 1 def quarters(year: int) -> list[Quarter]: bounds = [(1, 1, 3, 31), (4, 1, 6, 30), (7, 1, 9, 30), (10, 1, 12, 31)] return [Quarter(date(year, a, b), date(year, c, d)) for a, b, c, d in bounds] def days_in_year(d: date) -> int: return 366 if (d.year % 4 == 0 and (d.year % 100 != 0 or d.year % 400 == 0)) else 365 def quarterly_budget(annual: Decimal, q: Quarter, start: date | None = None) -> Decimal: first = max(q.start, start) if start else q.start if first > q.end: return Decimal("0") days = (q.end - first).days + 1 return money(annual / days_in_year(q.start) * days) def split(budget: Decimal, care_mgmt_rate=Decimal("0.10")): cm = money(budget * care_mgmt_rate) return cm, budget - cm def interim(budget: Decimal, share=Decimal("0.60")) -> Decimal: return money(budget * share) def carry_over(unspent: Decimal, services_budget: Decimal) -> tuple[Decimal, Decimal]: cap = max(Decimal("1000"), money(services_budget * Decimal("0.10"))) kept = min(unspent, cap) return kept, unspent - kept def carry_over_date(q: Quarter, final_claim: date | None = None) -> date: rule = q.end + timedelta(days=61) if final_claim is not None: return min(rule, final_claim + timedelta(days=1)) return rule Everything returns Decimal, rounded to the cent with ROUND_HALF_UP at the points where a real statement would show a dollar figure. Floats are tempting for quick scripts, but with budget figures you'll eventually compare your output to a government statement, and binary floating point will make that comparison noisier than it needs to be.
Days in the quarter
quarterly_budget takes the annual amount, divides it by the number of days in the year and multiplies by the number of days in the quarter. For Classification 4 in October to December 2026, that's $30,528.15 divided by 365, times 92 days, which comes to $7,694.77. The same classification in January to March 2027 has 90 days, so the quarter is $7,527.49.
That difference of about $167 is the kind of thing that confuses a family member who has done the simple division and expects $7,632.04 every quarter. If you build a participant-facing statement or budget screen, show the number of days next to the amount. It answers the question before it's asked.
The days_in_year helper handles leap years. 2028 is the next one, so a model you build now will be wrong in about a year and a half if you hard-code 365.
Starting part-way through a quarter
The manual says the first quarter is pro-rated from the start date, and that when someone moves to a higher classification the budget is adjusted from the date that classification takes effect. The start argument does the first job. If a Classification 4 participant's services start on 16 November 2026, there are 46 days left in the quarter, and quarterly_budget(ANNUAL[4], q4, start=date(2026, 11, 16)) returns $3,847.38.
For a reassessment, the same function gives you both halves. Run it for the old classification from the start of the quarter up to the day before the change, and for the new classification from the date of effect. Keep those as two rows in your data, not one blended figure. When someone later asks why the October to December budget is an odd amount, two rows with dates explain it; a single number doesn't.
Care management comes off the top
Ten percent of each participant's quarterly budget goes into the provider's care management account. That's what split does: it returns the care management amount and what's left for services. For Classification 4 in October to December, $769.48 goes to care management and $6,925.29 is available for services.
Model care management as a separate line from day one. It's tempting to fold it into "total spend", but it behaves differently. It's set aside rather than spent visit by visit, and some participants bring extra care management with them. Providers receive a care management supplement of 12 hours a year, credited at $120 an hour, for participants in certain priority groups set out in the manual. That's $1,440 a year on top of the classification amount, and it belongs on the care management side, not in the services pool.
Rostery's free care management calculator works through the same split if you want to check your own figures against something independent.
Interim funding
Not everyone gets their full classification amount straight away. The manual describes interim funding, where a participant is first allocated 60% of the amount and the remaining 40% follows later. People assessed as urgent priority get the full amount, as do the Restorative Care and End-of-Life pathways.
interim applies the 60% share to the quarterly budget. For Classification 4 in October to December, that's $4,616.86, of which $461.69 goes to care management and $4,155.17 is available for services. When the rest of the funding arrives, you'd recalculate from that date, the same way you handle a reassessment.
Two design notes. First, store the funding state (interim or full) with an effective date, rather than a boolean on the participant. You'll need the history. Second, don't let a care planner build a full-classification care plan on top of interim funding without a warning. That's the most common way a quarter overspends in its first weeks.
The 56-day clock
Once funding has been allocated, the manual gives the participant 56 calendar days to start services with a provider, with a possible 28-day extension, so 84 days at most. In code that's just date arithmetic: an allocation on 16 November 2026 means a start by 11 January 2027, or 8 February 2027 with the extension. It's worth computing and storing those dates at intake, because the people who need to act on them (intake staff, care partners) usually aren't the people looking at the finance screens.
Carry-over
Unspent money doesn't all disappear at the end of a quarter, but it doesn't all stay either. Under the manual, a participant can carry over the higher of $1,000 or 10% of their quarterly budget. The 10% is worked out after care management has been taken out and includes any primary supplements, such as oxygen or enteral feeding, that are part of the budget.
carry_over returns two numbers: what's kept and what goes back. Take a Classification 2 participant with $3,708.80 for services in a quarter (the published quarterly amount less care management) who spends $2,500. They have $1,208.80 left. Ten percent of the services budget is $370.88, so the $1,000 floor applies: $1,000 carries into next quarter and $208.80 is returned.
The floor matters more than people expect. In October to December 2026, $1,000 is the cap for Classifications 1 to 5, because 10% of their services budget is under $1,000. From Classification 6 up, the percentage takes over: about $1,122 for Classification 6 and about $1,821 for Classification 8 in that quarter.
Timing is the other half. The manual says carry-over is calculated 61 days after the end of the quarter, or the day after the provider's final claim for that quarter if that's sooner. carry_over_date returns that date. For October to December 2026 it's 2 March 2027 at the latest; if your final claim for the quarter goes in on 20 January, it's 21 January.
That has a practical effect on reporting. Until the carry-over date, the "available next quarter" figure is a forecast, not a fact. Label it that way on any screen a participant or family sees.
Testing it
Because every function is pure, the tests are short. The worked numbers above make good fixtures:
from datetime import date from decimal import Decimal from budget import ANNUAL, quarters, quarterly_budget, split, interim, carry_over, carry_over_date Q4 = quarters(2026)[3] def test_quarter_by_days(): assert Q4.days == 92 assert quarterly_budget(ANNUAL[4], Q4) == Decimal("7694.77") def test_pro_rata_start(): assert quarterly_budget(ANNUAL[4], Q4, start=date(2026, 11, 16)) == Decimal("3847.38") def test_care_management_split(): assert split(Decimal("7694.77")) == (Decimal("769.48"), Decimal("6925.29")) def test_interim(): assert interim(Decimal("7694.77")) == Decimal("4616.86") def test_carry_over_floor(): assert carry_over(Decimal("1208.80"), Decimal("3708.80")) == (Decimal("1000"), Decimal("208.80")) def test_carry_over_date(): assert carry_over_date(Q4) == date(2027, 3, 2) assert carry_over_date(Q4, final_claim=date(2027, 1, 20)) == date(2027, 1, 21) When the amounts are indexed, you only change the ANNUAL table and the fixtures that depend on it. Keep the source and effective date next to the table in a comment or, better, in the data itself, so the next person knows which figures they're looking at.
What this model leaves out
It's deliberately small. A production system needs a few more things:
- Supplements. Oxygen and enteral feeding supplements are added to the budget once approved. Add them before the carry-over calculation, as the manual includes them.
- Separate pathways. Assistive technology, home modifications, the Restorative Care Pathway and the End-of-Life Pathway have their own amounts and periods. Don't pool them with the ongoing quarterly budget.
- Participant contributions. These depend on the service category and the person's means. They change who pays, not the quarterly budget amounts above.
- Quarters with no services. The manual says funding is reduced to zero after four consecutive quarters with no services delivered, so you'll want a check that flags a run of empty quarters well before the fourth.
If you'd rather not build the lookup side yourself, our free Support at Home classifications tool lists the amounts by classification, and the Home Care Package to Support at Home tool covers people on transitioned HCP levels. On the product side, our page on Support at Home classifications and budgets describes how Rostery tracks budgets and carry-over.
For a plain-English version of the same rules aimed at older people and families, we also wrote a guide to what a classification letter actually buys on our blog.
Sources: My Aged Care, Support at Home costs and contributions (amounts from 1 October 2026); Department of Health, Disability and Ageing, Support at Home program manual version 4.4, sections on budgets (9.2), interim funding (6.8.1), the 56-day start period (6.9), carry-over (9.7.1) and the care management supplement. Read 30 October to 13 November 2026.




