Odoo 19 Chart of Accounts: Update Existing Records Without Duplicates
Plan a controlled chart-of-accounts import with stable IDs, report checks and the Odoo 19 earnings boundary.

Applicability
Odoo 19 Accounting chart-of-accounts configuration and export/import rights, in the intended company. Import execution needs a backup and approved change scope; account types and the Odoo 19 appropriation workflow require accounting review. No migration was executed.
Research method
Official Odoo 19 documentation research checked on 2026-10-21; examples are fictitious planning/control calculations, not APAA tests or client results.
Use an import-compatible export when the task is to change existing account names or approved attributes. Creating a fresh spreadsheet with matching account codes is not the same as identifying the original records. This guide gives a review plan, not a tested migration script or a promise that imports are reversible.
Contents
- Decide what kind of change is intended
- Prepare and review the update
- Worked example: rename, do not recreate
- Odoo 19 earnings require a separate review
Decide what kind of change is intended
| Change | Review focus |
|---|---|
| Rename an account | Same record/identifier and same balance; historical reports may display the new name |
| Add an account | Unique intended record, correct type, company and currency |
| Retire an account with history | Use the documented Deprecated setting rather than delete it |
| Change an account type | Reporting and year-end behavior, not just the visible label |
| Replace fiscal localization | Odoo says it cannot be changed after a journal entry has been posted |
An account type influences financial reporting and fiscal-year/opening behavior. Currency restrictions and reconciliation settings also affect its use. Do not include these columns merely because they happen to appear in an export.
Prepare and review the update
- In Accounting → Configuration → Chart of Accounts, select the intended company and records. Export with I want to update data (import-compatible export) and retain the original file and the record's exported External ID.
- Prepare a change log listing identifier, old value, new value and approver. Keep account codes as text, preserving leading zeroes; change only the approved fields.
- Import to the same model and map the stable identifiers explicitly. For repeated updates, keep each record's External ID unchanged. Missing or altered identifiers can create new records or break matching; duplicate identifiers can cause conflicts.
- Use the import validation/preview and investigate every mapping error. Start with a bounded set of approved changes; do not treat successful validation as proof of accounting correctness.
- Compare record count, names, types, currency restrictions and affected reports after import. Odoo documents imports as permanent, with no general undo: a backup and a planned correction path must exist before execution.
Worked example: rename, do not recreate
Fictitious HKD example: exported record __export__.account_120_example has code 006100, name “Office expenses”, type Expense and a HK$12,000 debit balance. The approved change is only the name “Office and administration”. Keep the exported identifier and 006100 unchanged. The expected result is one account with the new name and the same HK$12,000 balance.
If two accounts appear afterward, stop further imports and compare identifiers and record counts. Do not delete the old account or transfer its balance merely to hide a duplicate. If the trial balance changed, identify whether a type, company, journal item or other field changed; a simple rename should not create a new financial transaction.
Odoo 19 earnings require a separate review
Odoo 19's year-end documentation describes a dynamic Result Brought Forward line in the following year's trial balance/general ledger. An explicit year-end appropriation entry using a Current Year Earnings type account replaces that line; appropriation accounts do not change net profit. The documentation explicitly distinguishes pre-19 behavior and advises upgrade users to review historical appropriations.
Do not rename this into a blanket rule that “touching one account breaks closing”, or assume all prior-year profit is automatically posted to retained earnings. A bulk tidy-up must leave approved account types and appropriation policy intact. If the purpose is year-end allocation, define that separate accounting task rather than performing it through a name import.
Read fiscal-position mapping before changing linked accounts, and asset configuration before altering asset account automation. Contact APAA to scope a controlled update.
Sources
- Chart of accounts
Account types, localization boundary, currency and deprecated accounts
Source checked
- Export and import data
Import-compatible export, stable external IDs, validation and permanent imports
Source checked
- Year-end closing
Odoo19 dynamic Result Brought Forward and manual appropriation using Current Year Earnings accounts
Source checked