Depreciation in xMatix posts through Recurring Depreciation schedules: one record per asset or pool, each run posting a balanced journal—debit depreciation expense and credit accumulated depreciation—until current WDV reaches residual value or the schedule passes its end date. The background processor skips a schedule that is inactive or no longer due. The manual action is different: it calls the run service directly and does not independently reject a second click for the same due date, so treat it as a controlled posting action.
Prerequisites
- Two GL accounts per asset class, correctly typed and classified: a depreciation expense account (P&L) and an accumulated depreciation account (contra-asset). The classification is what places them on statements and drives the PPE movement note (see Fixed assets).
- An Open fiscal period — depreciation posts under the same calendar rules as everything else.
- The asset's figures: cost, residual value, and the method's rate or period amount.
Procedure
The current demo2 create form does not show a populated schedule, a due run or its generated journal. It is omitted because a blank header would not evidence the procedure below.
Step 1 — Create the schedule
Create one recurring depreciation schedule per asset or per pool depreciated as a unit. Select the partner account and branch, enter the asset name, method, frequency, cost, residual value, current written-down value, start/end dates and both GL accounts. For a new asset, seed written-down value equal to cost; for an existing asset, use its current book value. Save and reopen the schedule to verify the method, amount field, first run date and debit/credit accounts before making it active.
Set the method's matching amount field — this is the one setup mistake that matters:
| Method | Amount field | How the charge is computed |
|---|---|---|
| Straight-line | Period amount = (cost − residual) ÷ number of periods | The same fixed charge each period |
| Written-down value | Rate per period, stored as a fraction (0.10 for 10%) | Rate × current written-down value — a declining charge |
A schedule whose computed charge is zero—WDV with no rate or straight-line with no period amount—fails with validation rather than posting a meaningless entry. Rate Per Period is consumed as a fraction: enter 0.10 for ten percent unless your tenant layout explicitly implements and verifies a percentage conversion. The checked-in number field does not itself prove that conversion.
Step 2 — Let it run
When Next Run Date arrives, let the scheduler process the Active schedule or invoke the manual post action once under your month-end control. One successful run posts the journal and updates the schedule—current WDV decreases, accumulated depreciation increases and Next Run Date advances. Record the returned journal reference and refresh the schedule before doing anything else.
Do not click the manual action again merely because the screen is slow. RunAsync checks Active status and value/account validity but does not compare a supplied/manual run date with the already-advanced Next Run Date. A repeated manual invocation can therefore post another period. Background job re-delivery is safer because its processor re-reads Next Run Date and skips a job that is no longer due.
Either way, the charge is floored so the final period lands exactly on the residual value — no drift, no over-depreciation.
Step 3 — Verify the posting
Open the generated journal and confirm its type is Depreciation, its schedule reference and company/branch dimensions are present, debits equal credits, expense is debited and accumulated depreciation is credited for the independently calculated charge. Return to the schedule and verify written-down value fell and accumulated depreciation rose by that same amount. If any part is wrong, do not edit the posted journal—reverse it, correct the schedule and run again.
Step 4 — Pause, resume, complete
Set the schedule to Paused before a period that must not post and confirm its status and next run date remain unchanged after the scheduler runs. Return it to Active when charging should resume. A schedule marks itself Completed when written-down value reaches residual or its optional end date passes; verify no later journal is created, rather than manually advancing a completed schedule.
Step 5 — Bring in part-depreciated assets
For a mid-life migration, reconcile the legacy fixed-asset register to the GL first, then seed today's truth: current written-down value equals current book value, accumulated depreciation equals depreciation already taken, and next run date is the first period xMatix should charge. Preview or calculate the next charge and verify it continues from the imported carrying value rather than attempting to recreate historical periods.
Step 6 — Dispose of an asset
When an asset is sold, scrapped or written off, work through all three controls and retain their references together:
- Create the asset disposal record in the Fixed Assets app — the asset, date, method and reason, the proceeds, and the resulting gain or loss against net book value. This is the audit record of the event.
- Use the disposal posting flow and inspect the journal it creates. The current service posts the Disposal journal automatically; do not add a second manual journal for the same disposal. Verify accumulated depreciation, proceeds, gross block and gain/loss in the generated entry.
- Pause or complete the asset's schedule so it stops charging—a disposed asset must not keep depreciating. Verify the disposal date, balanced journal and inactive schedule agree before closing the period.
Expected result
Each controlled run produces one balanced depreciation journal, advances the schedule once and never reduces current WDV below residual value. Paused or Completed schedules are rejected/skipped. Disposal does not automatically identify and stop a name-linked schedule, so explicitly pause or complete it and reconcile the disposal, schedule and GL together.
Common problems
The schedule did not run. Check in order: status is active, the run date has arrived (and is within the end date), and both GL accounts are set. A paused or completed schedule is skipped by design.
The run failed with a zero-charge error. The method's matching amount field is missing — set the rate per period (WDV) or the period amount (straight-line) from Step 1.
It posted the wrong amount. Reverse the journal, fix the schedule's figures, and run again. Never edit a posted journal — and note that changing the written-down value or the residual mid-life changes every future charge, so re-verify the next run.
Common questions
Can a period ever be depreciated twice?
The background processor protects against ordinary job re-delivery by re-reading the schedule and skipping it when Next Run Date is later than the job occurrence. The manual action does not perform that due-date guard; a second invocation on an Active schedule can post again and advance another period. Refresh after the first result, retain its journal id and never retry the action blindly.
How does the last period land exactly on the residual value?
The charge is floored: each run charges the lesser of the computed amount and what remains above the residual. Straight-line schedules absorb rounding in the final period; WDV schedules cap the final charge. Closing book value equals residual value, exactly.
Where does Income-Tax Act depreciation fit in?
The schedules post the Companies Act charge to the ledger. The tax book's depreciation is computed separately on the asset blocks — block rate on the block's written-down value, with the 180-day half-rate rule for late additions — as described on Fixed assets.
