
Analytic accounting and budgets in Odoo 19.0 for an Egyptian company
How can Odoo's analytic accounting measure a branch's or project's profit without balance-sheet accounts entering it? Plans, prefix-based distribution and two budgets, per 19.0.
Executive summary
- Analytic accounting in Odoo 19.0 spreads the cost or revenue of an entry across one or more analytic accounts, grouped into analytic plans that sit apart from the chart of accounts.
- Making a plan mandatory is a decision, not a default: Default Applicability on the plan (Optional, Mandatory or Unavailable) is overridden by Applicability lines by document type and account prefix; whatever no line matches keeps the default.
- Distribution is manual on an invoice or an entry, or automatic through an Analytic Distribution Model that applies only when all its conditions, such as account prefix, partner and product, are met.
- Two separate budgets, not one: an analytic budget on analytic accounts and a financial budget directly on the profit-and-loss accounts; the 17.0 documentation describes a different structure built on Budgetary Positions.
- In practice: one plan per management question, and balance-sheet accounts are kept out of a plan by setting its default to Unavailable, not by restricting the prefix alone.
Plans and analytic accounts
What follows is based on the 19.0 documentation; the analytic accounting, budget and reporting pages of the documentation for version 20.0, released in September 2026, read the same. The feature is switched on with Analytic Accounting, at Accounting ‣ Configuration ‣ Settings, Analytics section. An analytic account is created at Accounting ‣ Configuration ‣ Analytic Accounts with its name and the Plan it belongs to, and fields for the customer linked to the project, a reference, the company and the currency. An analytic plan, at Accounting ‣ Configuration ‣ Analytic Plans, groups analytic accounts to analyse cost and revenue, by project or department for instance, and carries a Parent field for building a hierarchy of plans and a Default Applicability field. Each analytic plan must have at least one analytic account, as the documentation states.
Applicability rules: the default and the Applicability tab
At plan level, Default Applicability has three states: Optional ("adding the analytic plan is not mandatory"), Mandatory ("the entry cannot be confirmed if no analytic account is selected") and Unavailable ("the plan is not available"). For finer control, the Applicability tab adds lines with a Domain (the accounting documents the plan applies to), Financial Accounts Prefixes, a Product Category, and a line-level Applicability that "always overrides the default applicability". Mandatory status therefore varies by document type and account, and whatever no line matches keeps the plan's default. In the 18.0 and 19.0 documentation a line takes more than one prefix; the 17.0 documentation describes a single prefix.
Analytic distribution: from the invoice and the entry to the automatic model
Distribution is set manually in the Analytic Distribution column of an invoice or bill line, mandatory only where the plan is Mandatory, by default or in an Applicability line; the Analytic window shows each plan as a column and splits the amount between its accounts by percentage. To mass-edit existing entries: Accounting ‣ Review ‣ Journal items, select the lines, set the Analytic Distribution column, then Update. Automatic distribution uses a model from Accounting ‣ Configuration ‣ Analytic Distribution Models, whose conditions are chosen from account prefix, partner, product, company, partner category and product category; it applies only when all the conditions specified are met. The 18.0 and 19.0 documentation describes combining models linked to different plans and ordering them by drag and drop; the 17.0 documentation does not. The documentation's own example: any entry posted to Utilities (601000) is split automatically in the Departments plan, 60% to the Manufacturing account, 30% to Marketing and 10% to Admin, by setting the account prefix to 601; any other account beginning with 601, such as Electricity (601100) or Gas (601200), is caught by the same distribution.
Analytic reporting
The documentation lists an analytic filter, marked by the (group) icon, among the options common to the top bar of most reports; it limits a report to chosen analytic accounts and plans. Budgets have a dedicated Budget Report (Accounting ‣ Reporting ‣ Budget Report) to track and compare their data, with filtering, grouping, drill-down to actual amounts and transactions, and export.
Budgets: analytic and financial, never just one
The 19.0 documentation, identical in 18.0, distinguishes two kinds:
| Analytic Budget | Financial Budget | |
|---|---|---|
| Built on | Analytic plans and accounts | Profit-and-loss accounts directly |
| Created from | Accounting ‣ Accounting ‣ Analytic Budgets, once Budget Management is enabled (Accounting ‣ Configuration ‣ Settings) | The Budget button on the Profit and Loss report, which adds a column next to the Balance column |
| Tracking | Achieved and Committed columns once the budget is Open | A % column beside the budget column showing the current status |
An analytic budget's lines set analytic plans as columns and analytic accounts as rows, with an amount in the Budgeted column for each account. Once it is Open, Reset to Draft returns it to draft so the data can be overwritten and the budget reopened, while Revise creates a new budget that carries a Rev reference in its name once opened, and the original becomes Revised. Achieved reflects confirmed journal entries on the analytic account, and Committed adds confirmed purchase orders not yet billed; where a request for quotation or purchase order using the analytic distribution exceeds the amount allocated in an open budget, its line is highlighted in red. Generate, then Split, creates periodic budgets, monthly, quarterly or yearly, one per period, for one or more plans. Financial budgets, for their part, can be built in several versions the same way for comparison.
The 17.0 documentation knows no such two-track design; it describes a single system built on Budgetary Positions, lists of accounts "typically expense or income accounts", paired in a budget with an analytic account and a Planned Amount entered as a negative figure for expenses, with actual performance tracked in a Practical Amount column.
Cost centres and profit centres: design in practice
Neither term appears in Odoo's analytic accounting and budget documentation; both are accounting names for a design the applicability rules allow. The practical rule is one plan per distinct management question: a department's cost and a branch's profitability are two questions and deserve two plans. A Mandatory line on expense and income prefixes does not by itself keep balance-sheet accounts — the bank, customers, suppliers, VAT — out of the plan while its default stays Optional; that takes a default of Unavailable, with a line for each document type the plan is to be used on. Among the errors that recur in practice are prefixes left blank, or so broad that they catch balance-sheet accounts.
An illustrative design for a trading or services company: a "cost centres" plan with accounts such as administration, sales and marketing, mandatory on expense prefixes only, tying each expense to a department without touching revenue; and a "branches" or "business lines" plan, mandatory on both expense and income prefixes, with one analytic account per branch, so that each branch carries its own cost and revenue and its profitability can be measured. A recurring shared cost, such as rent or electricity, is split across branches by a distribution model at agreed percentages, on the pattern of the documentation's Utilities example, rather than typed onto every invoice.
What this requires
- Decide each plan's Default Applicability before go-live, rather than leaving it at Optional, the value a new plan takes.
- Set Applicability lines on expense and income prefixes for each document type, with a default of Unavailable to keep balance-sheet accounts out.
- Build distribution models for recurring shared costs with specific prefixes, and order them deliberately where a line matches more than one model.
- Check Committed against Budgeted before confirming new purchase orders against an open budget, and follow up the lines shown in red.
- Review the budget structure against the new design when moving off 17.0, rather than assuming the old Budgetary Positions carry over.
The firm's ERP Consulting Department designs analytic plans, sets their applicability rules and distribution models, and builds the budgets on top of them when implementing Odoo.
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.
