xMatix
Sign in Request demo
xMatix
PRODUCTS
SalesField SalesCRMRewardsClaimsInventoryProcurementWarehouse ManagementField ServiceServiceSupportTelephony & MessagingFinance & AccountingPayrollExpense ManagementCommercePortalsAnalytics & ReportingData StudioMobile AppSee all products →
PLATFORM
Platform overviewApp BuilderAutomationIntegrationsSecurity & GovernanceChange ManagementDevelopers
SENSE AI
Sense AI overviewSense AssistSense ControlSense VisionAI StudioTrust & governanceIn Claude & ChatGPTUse cases
SOLUTIONS
FMCG & DistributionManufacturing & Dealer NetworksAutomotive & DealershipsPharma & HealthcareConsumer DurablesAgri-InputsBuilding MaterialsService NetworksWarehousing & 3PLFinancial AccountingERP SoftwareIndia GST ComplianceUAE VAT & e-InvoicingSaudi ZATCA & VATAll solutions →
RESOURCES
Knowledge CenterDeveloper & CLIBlogGuidesWhat is xMatix?Company facts
COMPANY
AboutCareersPartnersEventsContactAuthorsLegal
Sign in Request demo
Home/Docs/Entity Reference/Recurring Depreciation — entity reference
REFERENCE · Last reviewed

Recurring Depreciation — entity reference

A per-asset (or per-pool) depreciation schedule that posts one period's charge at a time under the Companies Act book: either a fixed straight-line amount or a written-down-value rate applied to the reducing balance, floored at the residual value. Each run posts a balanced Depreciation journal (Dr depreciation expense / Cr accumulated depreciation), reduces CurrentWdv, adds to AccumulatedDepreciation, stamps LastRunDate and advances NextRunDate by the configured frequency. That NextRunDate advance — not a timestamp check — is what makes the schedule safe to run repeatedly: a period is never depreciated twice. A background evaluator picks up Active schedules whose NextRunDate has arrived, and the same service backs the manual PostRecurringDepreciation action. The schedule flips itself to Completed when the carrying value reaches residual or the advanced next date passes EndDate.

Fields

FieldLabelTypeRequiredWhat it does
AccumulatedDepreciationAccumulated DepreciationCurrencyRunning total of everything this schedule has charged, incremented by each posting so it mirrors the credit side of the journals.
AccumulatedDepreciationGLAccountIdAccumulated Depreciation GL AccountLookup → GLAccountThe contra-asset account credited by every run, forming the other leg of the two-line Depreciation journal. Like the expense account it must be set before the schedule can post at all.
AssetNameAsset NameTextDescriptive name of the asset or pool being depreciated. It is not merely cosmetic: it is embedded in the generated journal's unique name and label alongside the run date, so it is how a posted depreciation journal is traced back to the asset it belongs to.
BranchIdBranchLookup → Branch
CostCostCurrencyAcquisition cost of the asset. It is the starting point for the carrying value rather than an input to each run: CurrentWdv should be seeded from it at setup, and the run only falls back to reading this column when the carrying value has not been populated.
CreatedByIdCreated ByLookup → UserAccountYes
CreatedDateTimeCreated DateDateAndTimeYes
CurrentWdvCurrent WDVCurrencyThe live carrying (written-down) value, seeded from Cost at setup and reduced by every posting. It is the base the written-down-value rate is applied to, so it drives the size of each reducing-balance charge; once it reaches the residual value the schedule marks itself Completed and further runs post nothing.
DepreciationExpenseGLAccountIdDepreciation Expense GL AccountLookup → GLAccountThe profit-and-loss account debited by every run. It is mandatory in practice: the engine refuses to run the schedule and raises a validation failure if either this or the accumulated-depreciation account is missing.
EndDateEnd DateDateAndTimeOptional hard stop for the schedule. It is applied twice: the scheduler skips a schedule whose next run would fall beyond it, and after a posting the engine marks the schedule Completed if the newly advanced next date has passed it. Leave it null to let the schedule run until the carrying value reaches residual.
FrequencyFrequencyPickListHow far NextRunDate is pushed forward after each posting — Monthly, Quarterly, HalfYearly or Yearly — which makes it the cadence of the whole schedule rather than a display setting. Only the Monthly option is currently seeded as a selectable value in the first-party metadata, so the other three have to be set through data or configuration. Values: Monthly, Yearly.
IdIdGuidYes
LastRunDateLast Run DateDateAndTimeStamped with the effective date of the most recent successful posting. It is written for audit and reconciliation against the generated journals; the scheduler's due test looks at NextRunDate, not at this column.
MethodMethodTextSelects the arithmetic for each run: StraightLine charges the fixed PeriodAmount, while WrittenDownValue (the default) charges the current carrying value multiplied by RatePerPeriod.
ModifiedByIdModified ByLookup → UserAccountYes
NameDocument NumberTextYes
NextRunDateNext Run DateDateAndTimeThe control column of the whole mechanism. The scheduler picks up Active schedules whose value here has arrived, the run uses it as the journal's posting date when no explicit date is passed, and after posting it is advanced by the frequency — which is precisely what prevents a period being depreciated twice, however often the job runs.
OwnerIdOwnerLookup → UserAccountYes
PartnerAccountIdPartner AccountLookup → Account
PeriodAmountPeriod AmountCurrencyThe fixed charge per run for a straight-line schedule. The engine clips it on the final period so the closing carrying value lands exactly on the residual rather than overshooting, and it is ignored when the method is written-down-value.
RatePerPeriodRate Per PeriodPercentThe written-down-value rate as a fraction between zero and one, and applied per run rather than per annum — a schedule running monthly needs the monthly rate here, not the annual one. It is ignored entirely when the method is straight-line.
RecordTypeIdRecord TypeGuid, hidden
ResualValueResidual ValueCurrencyIntended as the salvage floor below which the asset is not depreciated.
StartDateStart DateDateAndTime
StatusStatusTextLifecycle state with the vocabulary Active, Paused and Completed. The engine sets Completed itself once the asset is fully depreciated or the end date is passed, so Paused is the only value an operator sets to suspend a schedule.
UIPropsUI PropsText
UpdatedDateTimeModified DateDateAndTimeYes

Actions

ActionLabelTypeWhat it does
CloneCloneServerAction (Clone)Create a copy of this record
DeleteDeleteDeleteDelete
DeleteEntityDeleteDeleteDeleteEntity
DeleteRowDeleteDeleteDelete
EditEditEditEdit
EditEntityEditEditEntity
EditInLineEditInLineEditInlineEditInLine
NewNewNewNew
PostRecurringDepreciationPost Recurring DepreciationServerAction (PostRecurringDepreciation)Runs one period of the schedule immediately, using an optional runDate argument and otherwise the schedule's own next run date. It computes the period's charge, posts a balanced two-line Depreciation journal (debit depreciation expense, credit accumulated depreciation), reduces the carrying value, increases accumulated depreciation, stamps the last run date and advances the next run date by the frequency, returning whether it posted along with the journal id. It shares the same service the background scheduler uses, so manual and scheduled runs cannot double-post the same period; it refuses to run a schedule that is not Active or that lacks either GL account, and it returns without posting when the asset is already down to its residual value, marking the schedule Completed.