GuideOdoo AccountingMarch 13, 2026

Odoo 19 Asset Management:
Depreciation, Disposal & Revaluation

INTRODUCTION

Fixed Assets Are Where Accounting Gets Real—and Where Most ERP Setups Fall Short

Every company that buys equipment, vehicles, furniture, or IT infrastructure has fixed assets on the balance sheet. The accounting rules are clear: capitalize the cost, depreciate it over the useful life, and recognize disposal gains or losses when the asset leaves the books. The reality is messier. Finance teams juggle spreadsheets alongside the ERP, manually calculate depreciation for edge cases, and pray that the auditors don't ask about the revaluation methodology.

Odoo 19's Asset Management module handles the full lifecycle—from initial capitalization through monthly depreciation, mid-life revaluation, and final disposal or sale. But the module ships with sensible defaults that don't match every jurisdiction or business. IFRS vs. local GAAP depreciation rules, prorated first-year depreciation, degressive-to-linear switches, and revaluation surplus accounts—these all require configuration that the out-of-the-box setup won't give you.

This guide walks you through every layer of Odoo 19 asset management: how to configure asset categories, choose the right depreciation method, automate journal entry generation, handle disposals and sales, execute revaluations, and avoid the mistakes that create audit findings.

01

Configuring Asset Categories: The Foundation of Every Depreciation Schedule

Asset categories in Odoo define the default depreciation rules that apply when a vendor bill line is capitalized. Getting the categories right means your accountants rarely need to override individual assets—the defaults do the work.

Key Fields on the Asset Category

FieldPurposeExample Value
Asset TypeDetermines whether entries post as assets, deferred revenue, or deferred expenseAsset
JournalThe accounting journal where depreciation entries postDepreciation Journal
Asset AccountBalance sheet account holding the gross asset value1700 — Fixed Assets
Depreciation AccountContra account for accumulated depreciation1709 — Accum. Depreciation
Expense AccountP&L account where the depreciation expense lands6200 — Depreciation Expense
DurationUseful life in months60 (5 years)
Computation MethodLinear, Degressive, or Accelerated DegressiveLinear
Prorata TemporisEnable first-year proration based on acquisition dateEnabled

Creating an Asset Category via the UI

Navigate to Accounting → Configuration → Asset Categories. Create one category per asset class (Vehicles, IT Equipment, Office Furniture, Buildings, etc.). Each category maps to a specific chart of accounts structure:

Python — Programmatic category creation
category = env['account.asset.group'].create({
    'name': 'IT Equipment',
    'asset_type': 'purchase',
    'journal_id': depreciation_journal.id,
    'account_asset_id': account_1700.id,
    'account_depreciation_id': account_1709.id,
    'account_depreciation_expense_id': account_6200.id,
    'method_number': 36,          # 3-year useful life
    'method_period': '1',         # Monthly depreciation
    'method': 'linear',
    'prorata_computation_type': 'daily_computation',
})
Automatic Capitalization

When you assign an asset category to an expense account on a vendor bill, Odoo automatically proposes creating an asset when the bill is posted. This means your accounts payable clerks don't need to know the depreciation rules—they just code the bill to the right account and the system handles the rest.

02

Depreciation Methods in Odoo 19: Linear, Degressive, and Accelerated Degressive

Choosing the right depreciation method isn't just an accounting preference—it has direct tax and financial reporting implications. Odoo 19 supports three methods out of the box, and understanding when to use each one saves you from restatements and audit adjustments.

Method Comparison

MethodFormulaBest ForOdoo Field Value
Linear (Straight-Line)Cost / Useful LifeOffice furniture, buildings, leasehold improvementslinear
Degressive (Declining Balance)Book Value × Degressive Factor / Useful LifeVehicles, IT equipment, machinery with front-loaded weardegressive
Accelerated DegressiveDegressive until it drops below linear, then switches to linearTax optimization in jurisdictions that allow accelerated depreciationdegressive_then_linear

Linear Depreciation Example

A server rack purchased for $60,000 with a 5-year useful life and no salvage value:

Text — Linear depreciation schedule
Asset: Server Rack
Cost:          $60,000
Useful Life:   60 months
Method:        Linear
Salvage Value: $0

Monthly Depreciation = $60,000 / 60 = $1,000/month

Year 1:  $12,000  |  Book Value: $48,000
Year 2:  $12,000  |  Book Value: $36,000
Year 3:  $12,000  |  Book Value: $24,000
Year 4:  $12,000  |  Book Value: $12,000
Year 5:  $12,000  |  Book Value: $0

Degressive Depreciation with Factor

The degressive factor (typically 1.5 to 2.0) accelerates early depreciation. A company vehicle at $45,000 with a 5-year life and degressive factor of 2.0:

Text — Degressive depreciation schedule
Asset: Company Vehicle
Cost:              $45,000
Useful Life:       60 months
Method:            Degressive
Degressive Factor: 2.0
Annual Rate:       2.0 / 5 = 40%

Year 1:  $18,000 (40% of $45,000)  |  Book Value: $27,000
Year 2:  $10,800 (40% of $27,000)  |  Book Value: $16,200
Year 3:   $6,480 (40% of $16,200)  |  Book Value:  $9,720
Year 4:   $3,888 (40% of  $9,720)  |  Book Value:  $5,832
Year 5:   $5,832 (remaining)       |  Book Value:      $0

Setting the Degressive Factor in Code

Python — Asset with degressive depreciation
asset = env['account.asset'].create({
    'name': 'Company Vehicle - Toyota Hilux',
    'original_value': 45000.00,
    'acquisition_date': '2026-01-15',
    'method': 'degressive',
    'method_number': 60,
    'method_period': '1',
    'method_progress_factor': 0.40,  # Degressive factor / years
    'account_asset_id': account_1710.id,
    'account_depreciation_id': account_1719.id,
    'account_depreciation_expense_id': account_6210.id,
    'journal_id': depreciation_journal.id,
})
asset.validate()  # Confirms and generates the schedule
Prorata Temporis

When prorata_computation_type is set to 'daily_computation', Odoo calculates the first and last period depreciation based on the exact number of days. An asset purchased on March 15 gets 17/31 of March's depreciation in the first entry. This is required under IFRS and most local GAAPs—disable it only if your jurisdiction allows full-month first-period depreciation.

03

Automatic Depreciation Entry Generation: Set It and Forget It

One of the strongest features of Odoo's asset module is the automatic generation of depreciation journal entries. Once an asset is confirmed, Odoo creates the entire depreciation schedule as draft journal entries—one per period for the full useful life of the asset.

How the Scheduler Works

Odoo generates depreciation entries using a scheduled action (ir.cron) that runs daily. The process:

  • Draft entries are created when the asset is confirmed—one entry for each depreciation period in the schedule.
  • The cron job posts entries whose date has passed. Entries dated today or earlier are automatically posted if the asset's auto_post flag is enabled.
  • Each journal entry debits the expense account and credits the accumulated depreciation account, with the asset as the analytic reference.
XML — Journal entry structure for each depreciation line
<!-- What Odoo generates for each depreciation period -->
<!-- Debit: Depreciation Expense (P&L) -->
<!-- Credit: Accumulated Depreciation (Balance Sheet) -->

Account 6200 - Depreciation Expense      DR   $1,000.00
Account 1709 - Accumulated Depreciation   CR   $1,000.00

Reference: Server Rack - 03/2026
Asset: Server Rack (ID: 42)
Date: 2026-03-31

Reviewing and Posting Entries in Bulk

For companies that prefer manual review before posting, disable auto_post on the asset category. Then use the batch posting wizard:

Python — Batch posting depreciation entries
# Find all draft depreciation entries up to today
draft_entries = env['account.move'].search([
    ('asset_id', '!=', False),
    ('state', '=', 'draft'),
    ('date', '<=', fields.Date.today()),
])

# Review count before posting
print(f"Posting {{len(draft_entries)}} depreciation entries")

# Post them all
draft_entries.action_post()
Month-End Close Tip

Run depreciation posting before generating your month-end trial balance. A common mistake is closing the period with unposted depreciation entries, then having to reopen the period to post them. Add the depreciation review to your month-end checklist: Accounting → Assets → filter by "Running" status → verify all entries through the current month are posted.

04

Asset Disposal and Sale: Recognizing Gains, Losses, and Write-Offs

Assets don't live forever. Equipment breaks, vehicles get replaced, and offices get renovated. When an asset leaves the books, Odoo needs to record the disposal correctly: post any remaining depreciation up to the disposal date, remove the asset and accumulated depreciation from the balance sheet, and recognize the gain or loss on the income statement.

Disposal Types in Odoo 19

ActionWhen to UseP&L Impact
SellAsset is sold for a price (vehicle trade-in, equipment resale)Gain if sale price > book value; loss if sale price < book value
Dispose (Write-Off)Asset is scrapped, donated, or lost with no proceedsLoss equal to remaining book value

Selling an Asset: Step-by-Step

When you sell an asset through the Odoo UI, the system handles the journal entries automatically. Navigate to Accounting → Assets, open the asset, and click "Sell or Dispose":

Text — Sale journal entry example
Asset: Company Vehicle - Toyota Hilux
Original Cost:          $45,000
Accumulated Depreciation: $28,800 (after 3 years degressive)
Book Value at Disposal:   $16,200
Sale Price:               $20,000

Journal Entry on Disposal:
──────────────────────────────────────────────────
Account 1200 - Accounts Receivable   DR  $20,000
Account 1719 - Accum. Depreciation   DR  $28,800
    Account 1710 - Vehicle Assets    CR  $45,000
    Account 7600 - Gain on Disposal  CR   $3,800
──────────────────────────────────────────────────
Gain on Sale = $20,000 - $16,200 = $3,800

Programmatic Disposal

Python — Disposing an asset via code
# Sell an asset with proceeds
asset = env['account.asset'].browse(42)

# The sell wizard handles gain/loss calculation
sell_wizard = env['account.asset.sell'].create({
    'asset_id': asset.id,
    'action': 'sell',
    'invoice_id': customer_invoice.id,  # Link to the sale invoice
})
sell_wizard.do_action()

# For write-off (no proceeds)
dispose_wizard = env['account.asset.sell'].create({
    'asset_id': asset.id,
    'action': 'dispose',
    'loss_account_id': account_6900.id,  # Loss on disposal account
})
dispose_wizard.do_action()
Partial Disposal

Odoo 19 supports partial disposal through the asset split feature. If you purchased a batch of 10 laptops as a single $30,000 asset and need to dispose of 3, split the asset first (Modify → reduce the original value proportionally), then dispose of the new split asset. This preserves the depreciation history on both the remaining and disposed portions.

05

Asset Revaluation: Adjusting Book Values to Fair Market Value

Under IFRS (IAS 16), companies can choose the revaluation model for fixed assets, where the carrying amount is adjusted to fair value at regular intervals. Even under cost model accounting, impairment testing may require write-downs. Odoo 19 handles both upward and downward revaluations through the asset modification workflow.

When to Revalue

  • Upward revaluation — fair value exceeds book value (common with land and buildings). The increase goes to a revaluation surplus account in equity, not the P&L (unless reversing a prior impairment).
  • Downward revaluation (impairment) — book value exceeds recoverable amount. The decrease hits the P&L as an impairment loss, unless there's a prior revaluation surplus to absorb it.
  • Periodic reassessment — IFRS requires revaluations to be "sufficiently regular" so that book value doesn't differ materially from fair value. Most companies revalue annually.

Executing a Revaluation in Odoo

Use the "Modify" button on a running asset to change its gross value, salvage value, or remaining useful life. Odoo recalculates the depreciation schedule from the modification date forward:

Python — Revaluation via asset modification
# Upward revaluation: building's fair value increased
asset = env['account.asset'].browse(55)
# Original value: $500,000 | Book value after 5 years: $400,000
# New fair value appraisal: $550,000

modify_wizard = env['asset.modify'].create({
    'asset_id': asset.id,
    'name': 'Revaluation - 2026 appraisal',
    'method_number': 180,  # Remaining useful life in months
    'value_residual': 550000.00,  # New gross value
    'date': '2026-03-31',
    'account_asset_counterpart_id': account_3100.id,  # Reval surplus
})
modify_wizard.modify()

# Odoo will:
# 1. Post a journal entry for the revaluation increase
# 2. Recalculate monthly depreciation from April 2026 forward
# 3. Update the depreciation schedule with new amounts

Revaluation Journal Entry Structure

Text — Upward revaluation entry
Revaluation: Office Building - March 2026
Book Value Before: $400,000
Fair Value:        $550,000
Revaluation Increase: $150,000

Journal Entry:
──────────────────────────────────────────────────
Account 1700 - Building Assets           DR  $150,000
    Account 3100 - Revaluation Surplus   CR  $150,000
──────────────────────────────────────────────────

New Monthly Depreciation = $550,000 / 180 months = $3,055.56
(vs. previous $2,222.22/month)
Audit Trail

Every modification creates a log entry on the asset with the date, reason, old values, and new values. Auditors can trace the complete history of an asset from acquisition through every revaluation and depreciation adjustment. Always fill in the name field on the modification wizard with a meaningful description—"2026 appraisal by Jones & Partners" is better than "adjustment."

06

3 Asset Management Mistakes That Create Audit Findings

1

Mismatched Fiscal Year and Depreciation Period Boundaries

Your fiscal year ends on June 30, but Odoo's depreciation schedule generates entries aligned to calendar months. The result: your June 30 trial balance shows 6 months of depreciation, but the asset schedule shows entries through June 30 only if you configured method_period correctly. If set to '12' (annual) instead of '1' (monthly), you get a single annual entry on December 31—six months after your fiscal year-end. Your balance sheet carries the wrong accumulated depreciation for half the year.

Our Fix

Always use method_period = '1' (monthly) for asset categories, even if your reporting is annual. Monthly entries give you accurate balances at any month-end for interim reporting. If your jurisdiction requires annual depreciation calculations, use monthly entries with annual totals in your reports. Configure the fiscal year properly under Accounting → Configuration → Fiscal Years so that period boundaries align with your reporting dates.

2

Not Running Depreciation Before Disposal

You sell a vehicle on March 15. The last posted depreciation entry was for February 28. You click "Dispose" without posting the March 1-15 depreciation first. Odoo disposes the asset at the February 28 book value, overstating the book value by half a month of depreciation. The gain/loss on disposal is wrong, your tax return is wrong, and the auditor flags it as a misstatement.

Our Fix

Before any disposal or sale, run the depreciation cron up to the disposal date: Accounting → Assets → select the asset → verify the last posted depreciation date. If the asset has prorata enabled, Odoo will calculate the partial-month depreciation automatically when you trigger disposal. But you must ensure all prior full-month entries are posted first. Add "Verify depreciation is current" to your asset disposal checklist.

3

Revaluation Surplus Misclassification on the Balance Sheet

An upward revaluation should credit a revaluation surplus account in equity (IAS 16.39), not revenue. If the counterpart account on the modification wizard is set to a P&L income account, the revaluation increase inflates your reported profit. This is an IFRS violation that external auditors will catch—and it distorts your tax liability, dividends capacity, and financial ratios.

Our Fix

Create a dedicated "Revaluation Surplus" equity account (e.g., account 3100) in your chart of accounts. Always use this account as the counterpart for upward revaluations. For downward revaluations (impairments), use the P&L impairment loss account only to the extent the decrease exceeds any prior revaluation surplus for that asset. Document your revaluation policy and enforce it through the asset category configuration.

BUSINESS ROI

What Proper Asset Management Saves Your Business

Asset management in Odoo isn't just about compliance. It's about financial visibility and operational control:

40+ hoursSaved Per Year-End Close

Automated depreciation schedules eliminate the spreadsheet gymnastics that consume finance teams during close. Every entry is pre-generated, pre-dated, and audit-ready.

ZeroDepreciation Calculation Errors

Manual depreciation spreadsheets are error-prone. One wrong formula propagates across 60 months. Odoo calculates prorated, degressive, and linear depreciation without human error.

Real-TimeAsset Register Accuracy

Your balance sheet reflects the correct net book value of every asset at any point in time. No more month-end surprises from unposted depreciation or forgotten disposals.

For a mid-size company with 200+ fixed assets, the manual process involves maintaining parallel spreadsheets, reconciling them to the GL monthly, and rebuilding the schedules every time an asset is modified, disposed, or revalued. A properly configured Odoo asset module replaces all of that with a single source of truth that posts entries automatically, tracks the full audit trail, and generates the fixed asset register report in seconds.

SEO NOTES

Optimization Metadata

Meta Desc

Complete guide to Odoo 19 asset management. Configure depreciation schedules (linear, degressive, accelerated), automate journal entries, handle disposals and revaluations, and avoid audit pitfalls.

H2 Keywords

1. "Configuring Asset Categories: The Foundation of Every Depreciation Schedule"
2. "Depreciation Methods in Odoo 19: Linear, Degressive, and Accelerated Degressive"
3. "Asset Disposal and Sale: Recognizing Gains, Losses, and Write-Offs"
4. "Asset Revaluation: Adjusting Book Values to Fair Market Value"
5. "3 Asset Management Mistakes That Create Audit Findings"

Your Fixed Assets Deserve More Than a Spreadsheet

Every month that your depreciation runs on a spreadsheet is a month where errors compound, audit trails disappear, and your balance sheet drifts further from reality. Odoo 19's asset module handles the full lifecycle—capitalization, depreciation, revaluation, and disposal—with automated journal entries, prorated calculations, and a complete audit trail that your external auditors will actually trust.

If your fixed asset register still lives in Excel, let's migrate it. We configure asset categories to match your chart of accounts, import your existing asset register with historical depreciation, and validate the opening balances against your GL. The typical project takes 3-5 days, and the first benefit shows up at your next month-end close.

Book a Free Asset Management Audit