
Odoo's chart of accounts and Egypt's fiscal localisation package
What does Egypt's localisation package build into Odoo, and how does an account's Type decide its place in the statements? Adapt it without deleting or retyping accounts in use.
Executive summary
- "Egypt - Accounting" (l10n_eg) is Odoo 19.0's default fiscal localisation package for Egypt. Its published description lists what it activates in seven items: the chart of accounts, taxes, four tax reports and fiscal positions.
- An account's Type, not its name, decides its place on the balance sheet or the profit and loss statement; the documentation also ties it to the rules for closing a fiscal year and to opening entries.
- The ready-made chart holds 205 accounts on six-digit codes whose leading digit marks the class (1 assets, 2 liabilities, 4 expenses, 5 income), with no account groups.
- An account that has recorded a transaction cannot be deleted; it is archived instead, with the Active toggle that replaced the Deprecated box in Odoo 19.0.
- The tax report is built from "tax grids" set on each tax, not read off the account. The package has four Egypt-specific tax reports: VAT Return, WH Tax (withholding), Schedule Tax and Other Taxes.
- A new dimension, such as a branch or a project, is added through an analytic plan, not by multiplying general ledger accounts.
What the Egyptian localisation package actually installs
Odoo 19.0's documentation lists two modules for Egypt: a core module, Egypt - Accounting (technical name l10n_eg), described as the "Default fiscal localization package", and a separate e-invoicing module, Egyptian E-invoice Integration (l10n_eg_edi_eta). The core module's description in its source code lists what it activates, word for word:
Chart of Accounts, Taxes, VAT Return, Withholding Tax Report, Schedule Tax Report, Other Taxes Report, Fiscal Positions.
Its template also adds two general journals, Tax Adjustments (TA) and IFRS 16 (IFRS). The installed package is shown under Accounting ‣ Configuration ‣ Settings, in the Package field of the Fiscal Localization section, but "selecting another package is only possible if no entry has been posted", so the country chosen when the database is created cannot be reopened once the first entry is posted.
Account Type: the setting that drives the reports and the close
The documentation calls configuring the Type field "critical", since it serves four purposes: providing information on the account's purpose and behaviour, generating country-specific legal and financial reports, setting the rules to close a fiscal year, and generating opening entries.
| Report | Category | Account Types |
|---|---|---|
| Balance Sheet | Assets | Receivable · Bank and Cash · Current Assets · Non-current Assets · Prepayments · Fixed Assets |
| Balance Sheet | Liabilities | Payable · Credit Card · Current Liabilities · Non-current Liabilities |
| Balance Sheet | Equity | Equity · Current Year Earnings |
| Profit and Loss | Income | Income · Other Income |
| Profit and Loss | Expense | Expense · Depreciation · Cost of Revenue |
| Off the balance sheet | — | Off-Balance Sheet |
Egypt's own chart shows the effect: its Legal Reserve account (201021) is typed Current Liabilities, so it sits among the liabilities unless its type is changed before use. The Type also governs Allow Reconciliation: Odoo 19.0 switches it on for Receivable and Payable accounts and does not allow it to be switched off there, and sets it off by default on income, expense and equity accounts. In Egypt's chart it is on for five accounts only, all of those two types: Accounts Receivable, Accounts Receivable (PoS), Payables, VAT Receivable and VAT Payable. Fixed Assets and Non-current Assets accounts have an Automation tab that creates the asset entry when a transaction posts to the account, as a draft, or validated at once if a Deferred Expense Model is selected. A mistake that recurs in practice is changing the type of an account that already carries transactions; these errors and their correction are the subject of a separate piece.
Codes and grouping in Egypt's chart
The ready-made chart has 205 accounts with six-digit codes, and the leading digit marks the class: 58 asset accounts under 1; 29 under 2, all liabilities except the Bank Suspense Account (201001), typed as a current asset; 102 expense accounts under 4; 13 income accounts under 5; and three under 9 — Cash Difference Loss and Cash Difference Gain, and Undistributed Profits/Losses, typed Current Year Earnings. The package ships no account groups, so the prefix is numbering, not grouping: Odoo places an account in a group automatically once groups exist — "a new account 131200 is going to be part of the group 131000", in the documentation's words — and groups are created under Accounting ‣ Configuration ‣ Account Groups in developer mode. The chart's data gives every account but three an Arabic name as well.
Adapting the chart without breaking the reports
The documentation says "you can use the chart of accounts directly or modify it according to your company's needs." An account is added from Accounting ‣ Configuration ‣ Chart of Accounts ‣ Create, filling in Code, Account Name and Type at minimum. An account that carries a transaction is another matter: "it is not possible to delete an account once a transaction has been recorded on it." The documentation's alternative is the Deprecated box, which Odoo 19.0 has replaced with an Active toggle on the account form, so the account is archived rather than deleted. Where an account would otherwise need splitting by branch, project or cost centre, the documented tool is analytic accounting, which "helps track costs and revenues and analyze a project's or service's profitability" and whose accounts are grouped in analytic plans, without multiplying general ledger accounts; it is the subject of a separate piece.
Deductible and non-deductible tax, and the tax accounts
The split between deductible and non-deductible tax is built into the tax's configuration, not into a manually created account: the Distribution for Invoices and Distribution for Refunds sections of each tax decide which account receives each part of its amount, and the documentation covers the case of "partially deductible purchase VAT, where part of the tax must be considered an expense rather than a tax credit asset that can offset tax liability", split 50% to a tax account and 50% with no account, which leaves that half on the invoice line's own account.
In the Egyptian package, VAT on purchases posts to VAT Input (104041) and VAT on sales to VAT Output (201017), and the tax groups make VAT Receivable (100103) and VAT Payable (202003) the counterpart accounts of the tax closing entry. The package ships withholding taxes at 0.5%, 1%, 3% and 5% for sales and purchases; these are the module's configured rates, not a statement of the rates in force, which are set out in the withholding tax and Form 41 guide. Tax withheld from suppliers posts to WHTax Payable - On behalf of suppliers (201020), and tax withheld by customers to WH tax Advance with Customers - On behalf of my company (104042). Schedule tax on purchases posts to an expense account of its own, Schedule Tax Expense (400075), and its tax grids feed the Schedule Tax report. The ETA Code (Egypt) field that the package adds to every tax is filled on ten of its thirty taxes and blank on the rest, among them the zero-rated taxes and most schedule and withholding taxes; Odoo will not post an invoice on a sales journal linked to the e-invoicing system if a tax on its lines lacks a code, and the documentation advises checking that the codes match the company's taxes.
What this requires
- Check the installed package before the first entry is posted, because it cannot be changed afterwards.
- Set the Type of every new account and check the types of the ready-made accounts before use; the Type, not the name, decides where an account appears in the statements.
- Extend the chart with new accounts that follow the existing prefix numbering, rather than renaming or retyping an account that carries transactions.
- Archive an account that has fallen out of use instead of trying to delete it (the Active toggle in 19.0, the Deprecated box before it).
- Use an analytic plan to track a branch, project or cost centre, rather than a new account for every dimension.
- Compare the package's ready-made withholding rates with the rates in force before using them.
- Complete the ETA Code (Egypt) field on every tax in use, and review the distribution sections of every partially deductible tax.
The firm's ERP Consulting Department reviews the chart of accounts and the tax configuration and reports when implementing or auditing an Odoo system.
Mahmoud Nassef — Chartered Accountant (Egyptian Register), Founder Partner
Member, Egyptian Society of Accountants & Auditors
Member, Egyptian Tax Society
Member, Egyptian Society for Public Finance and Taxation
Partner profile · Book a consultation
Disclaimer: This bulletin is prepared for general information on the legislation in force at the date of its publication. It does not constitute a professional opinion or tax or legal advice on any particular matter, and it should not be relied upon in place of advice based on an examination of the circumstances of each case. Nassef & Partners International accepts no responsibility for any action taken, or refrained from, in reliance on its contents. The positions stated remain subject to subsequent legislation and decisions.
