Single-asset carrying amounts under AASB 116. Prime cost or diminishing value, valued at a date or across an arbitrary range — including ranges that have nothing to do with a financial year.
The range endpoint exists because that is the thing nobody offers. If you bought an asset on 1 April 2022 and need the depreciation charge for August 2023 alone, that is one call, not a schedule you post-process.
POST /v1/calculators/depreciation/at/urn:sbrm:period:depreciation:unscoped
POST /v1/calculators/depreciation/range/urn:sbrm:period:depreciation:unscoped
The period segment reads :unscoped because this calculator is not period-scoped —
all date semantics live in at_date, or in from_date and
to_date. The segment is required for path uniformity across the constellation and does
not affect the calculation. Fiscal-year URNs are not accepted here and will return 404.
"accounting". Tax basis is reachable at the engine but not exposed at the front door; it will land as its own registry entry."prime_cost" or "diminishing_value".2.0 means 200% — a 5-year life at 2.0 gives a 40% annual rate.refusal_class: "pool_asset_out_of_t6_scope".day_count is required on /range/ and optional on /at/,
where it defaults to actual/actual. Whichever applies is echoed in the response.
| Value | Behaviour |
|---|---|
actual/actual | Anniversary-year denominators. Each year charges exactly cost ÷ life, and the asset lands on zero at life-end. This is the AASB 116-faithful choice. |
actual/365 | 365 days always, including leap years. Honest to its own label; a leap-containing year charges slightly more than cost ÷ life. |
monthly | Equal monthly instalments, rounded per month and summed. |
curl -s -X POST \
"$BASE/v1/calculators/depreciation/at/urn:sbrm:period:depreciation:unscoped" \
-H "Content-Type: application/json" \
-d '{
"basis": "accounting",
"asset": {
"cost": 10000,
"acquisition_date": "2023-07-01",
"accounting_useful_life_years": 5,
"accounting_method": "prime_cost"
},
"at_date": "2025-06-30"
}'
{
"wdv_at": "6000.00",
"period_dep_at": "2000.00",
"day_count": "actual/actual",
"schedule_summary": {
"opening_balance": "10000.00",
"closing_balance_at": "6000.00",
"total_depreciation_to_date": "4000.00",
"total_cost_additions": "0.00",
"fiscal_years_covered": [2024, 2025]
}
}
Same asset, "accounting_method": "diminishing_value" with
"dv_rate_factor": 2.0, at 30 June 2024 — 40% of $10,000 in year one:
"wdv_at": "6000.00", "period_dep_at": "4000.00"
August 2023 alone, on an asset acquired 1 July 2023. Both endpoints of the range are inclusive — 1 to 31 August is 31 days.
curl -s -X POST \
"$BASE/v1/calculators/depreciation/range/urn:sbrm:period:depreciation:unscoped" \
-H "Content-Type: application/json" \
-d '{
"basis": "accounting",
"asset": {
"cost": 10000,
"acquisition_date": "2023-07-01",
"accounting_useful_life_years": 5,
"accounting_method": "prime_cost"
},
"from_date": "2023-08-01",
"to_date": "2023-08-31",
"day_count": "actual/actual"
}'
{
"from_date": "2023-08-01",
"to_date": "2023-08-31",
"day_count": "actual/actual",
"days_in_range": 31,
"range_dep": "169.40",
"opening_wdv": "9830.60",
"closing_wdv": "9661.20",
"truncated": false
}
closing_wdv = opening_wdv − range_dep, exactly, to the cent. The balances are
computed and the movement is derived from them, so consecutive ranges telescope: twelve monthly
calls sum to the annual charge, with no rounding drift to reconcile.
| from_date relative to acquisition | opening_wdv | truncated |
|---|---|---|
| before | 0.00 | true |
| equal | cost | false |
| after | the fold's value at that date | false |
from_date falls before acquisition_date, the asset's cost enters
during the window and the response carries no column for it. The three published figures then fail
the identity above:
from 2023-05-01 to 2023-08-31, acquired 2023-07-01
opening_wdv 0.00
range_dep 338.80
closing_wdv 9661.20 ← 0.00 − 338.80 ≠ 9661.20
The correct form is closing_wdv = opening_wdv + cost_additions − range_dep, and
cost_additions is not yet emitted. The engine change is queued. Until it ships, treat a
range spanning the acquisition as informational: range_dep and closing_wdv
are correct; the roll-forward is not closable from the response alone. Ranges that start on or after
the acquisition date are unaffected.
// pool_type supplied
400 {"detail": {
"refusal_class": "pool_asset_out_of_t6_scope",
"refusal_payload": {"pool_type": "general", "asset_acquisition_date": "2023-07-01"}
}}
// accounting_useful_life_years omitted
422 {"detail": [{"type": "value_error",
"msg": "Value error, basis='accounting' requires asset.accounting_useful_life_years"}]}
// basis other than "accounting"
422 {"detail": [{"type": "literal_error", "loc": ["body", "basis"],
"msg": "Input should be 'accounting'"}]}
manifest.rate_table_uris is empty for this calculator — no statutory rate table is consumed. Every figure derives from your inputs./v1/calculators/{calc_uri}/{period_uri} reaches the same handlers if you prefer URN-addressed dispatch. Responses are byte-identical.