SymbifoxUser guide Français

Part 4 · Finance

Operating budgets

Set an operating budget on the chart of accounts, compare it to actuals without re-entry, and redo a rolling forecast every month, comparable to the last.

Symbifox 18.0 (September 2026 catalogue) · Modules: Budgets opérationnels, Budgets opérationnels: engagements récurrents, Budgets opérationnels: prévision glissante, Prévision glissante: amorce par les engagements datés, Budgets opérationnels: campagnes · Revised 2026-09-12

The Budgets application sets an operating budget on your chart of accounts and compares it to actuals with no prior data entry. It is for the management of a small organization, for the person who keeps the books, and for whoever answers for a department's spending. What you get: at any hour, an item-by-item view of what was planned, what was spent, what is already committed, and what should have been spent by now. A rolling forecast comes on top, redone each month in a few minutes, where every pass keeps its figures for good.

Overview#

This family of modules is published but absent from the Boréal demo. This chapter describes it from its documentation and its declared screens, with no screenshots (published module, not illustrated).

The main axis is the budget item, Poste budgétaire on screen: a named group of general ledger accounts, not an analytic account. That is what makes a budget work from day one, even if no invoice carries an analytic key yet. The item is deliberately coarse: three to five items explain most of the variance, and beyond that the budget becomes a table nobody reads.

A budget covers a fiscal year and carries one line per item. Each line shows four amounts, in the vocabulary Odoo uses. Prévu (planned) is entered, then spread by month. Réalisé (actual) is read from the books every time it is displayed, never copied. Engagé (committed) adds to the actual the commitments that are known but not yet posted. Théorique (theoretical) says what should have been spent by now. Two variances follow: Écart au plan (variance to plan), the planned amount minus the committed amount, and Écart au théorique (variance to theoretical), the committed amount minus the theoretical amount.

A line reads one source only. In accounting mode, it reads the posted entries on the item's accounts. In internal cost mode, it reads only the analytic lines with no accounting document behind them, that is, timesheets and analytic entries made by hand. The two sets never overlap, which rules out counting a dollar twice.

A budget goes through four states: draft, open, revised and closed. An open budget can no longer be edited: you revise it, and the revision is a new numbered record, while the original stays readable.

The rolling forecast is the other half of the application. It does not cover a fiscal year but a horizon of twelve to eighteen months that crosses fiscal years. Each monthly pass is a numbered vintage that keeps its own figures. An actuals cut-off date separates the closed months, read from the books, from the open months, which carry the forecast.

Configuration#

Access and permissions#

Two permission groups are offered in SettingsUsers.

Group What it opens
Lecture (read) Viewing the application, the budgets, budget tracking, the lines on alert and the forecasts
Gestion (manage) Everything above, plus creating and revising budgets, the Configuration menu, the items and the dialogs

Only members of the Gestion group see the Configuration menu.

Settings#

Two settings come with the family, in the Budgets section of the general settings.

Setting Effect
Masquer les menus budget des modules tiers (hide third-party budget menus) Several accounting add-ons ship their own budget menu, usually empty. This setting hides them in favour of this one. Nothing is deleted: clearing the box brings them back.
Taux de revient par défaut (default cost rate) Used only to estimate the hours Odoo could not value, for lack of an hourly cost on the employee's form. The starting value is $50.00. The estimate is shown separately and never enters actual spending.

Base data#

Only one thing has to be created before the first budget: the budget items. Each item carries a name, a short code that sets the display order, the list of general ledger Comptes (accounts) it covers, and a Raisonnement (rationale), that is, why the item exists and what it does not cover.

No catalogue of items is supplied: charts of accounts differ from one organization and one localization to the next, and a ready-made list would suit only one of them. The Proposer des postes (propose items) dialog starts from your real chart of accounts and proposes a breakdown that you correct.

If you keep a subscription register, link the subscriptions to their item afterwards: that is what lets the committed and theoretical amounts follow the renewal schedule.

Getting started#

This walkthrough opens a first annual budget, from the breakdown into items to the first reading of the variance.

  1. Open BudgetsConfigurationProposer des postes.
  2. Read the Ce qui sera créé (what will be created) field, which describes the breakdown proposed from your chart of accounts.
  3. Select Créer les postes (create the items).
  4. Open BudgetsBudgetsBudgets, then select New.
  5. Enter the Début de l'exercice (fiscal year start) and the Fin de l'exercice (fiscal year end), then the Seuil d'alerte (%) (alert threshold) and the Plancher d'alerte (alert floor).
  6. Select Une ligne par poste (one line per item): a line is created for each item that has none.
  7. Enter the Prévu of each line, then select Ouvrir (open).

Result: the budget is open, so frozen. The Totaux (totals) tab shows the planned, actual, committed and theoretical amounts for the whole budget, and the Couverture (coverage) tab lists the accounts that no item covers. The actual updates by itself, every time you open the form.

Common tasks#

Create a budget item by hand#

The dialog proposes a general breakdown; an item that matters to you is created by hand.

  1. Open BudgetsConfigurationPostes budgétaires (budget items), then select New.
  2. Enter the name of the item and its short code.
  3. In the Comptes tab, add the general ledger accounts this item covers.
  4. In the Raisonnement tab, write why this item exists and what it does not cover.
  5. Save.

Result: the item is offered in every new budget and every new forecast pass. The shortcut button at the top of the item's form opens the list of its accounts.

Spread the planned amount over the months#

An annual expense is not smoothed over twelve months: the monthly breakdown is what gives an honest theoretical amount.

  1. Open the budget, then the line concerned in the Lignes (lines) tab.
  2. Open the Répartition mensuelle (monthly breakdown) tab.
  3. Enter the amount expected in each month.
  4. To put one twelfth in each month instead, select Répartir également (spread evenly), then correct the months that carry a renewal.
  5. Save.

Result: the line's theoretical amount now rests on this schedule. The line shows the Base du théorique (basis of the theoretical amount), which says whether it used the schedule or a prorating of elapsed time.

Check the coverage of the accounts#

A budget can look respected simply because an item is missing.

  1. Open the budget.
  2. Open the Couverture tab.
  3. Read the Comptes non couverts (uncovered accounts): operating accounts that no item of this budget reads.
  4. Read the Comptes comptés deux fois (accounts counted twice): accounts covered by more than one item, whose entries are therefore counted as many times.
  5. Correct the items concerned in ConfigurationPostes budgétaires.

Result: both lists empty out. Until they do, read the budget total with that reservation in mind.

Read the lines on alert#

A line is flagged when its drift exceeds both the percentage and the dollar floor of the budget. Both, never one alone.

  1. Open BudgetsBudgetsLignes en alerte (lines on alert).
  2. For each line, read the Écart au théorique and the Écart au théorique (%).
  3. Open the line to see its monthly breakdown and its linked subscriptions.
  4. Check the Heures non valorisées (unvalued hours): hours logged whose cost is zero.
  5. Decide: correct the spending, correct the plan, or accept it.

Result: the list shows only what deserves a decision. It is empty when nothing drifts, and the screen's help text says so.

Accept an overrun#

An overrun that is known and accepted should stop waking anyone up.

  1. Open the budget line concerned.
  2. Check Dépassement assumé (accepted overrun).
  3. Enter the Motif du dépassement (reason for the overrun).
  4. Save.

Result: the line stops being flagged, and the reason stays attached to the budget. The other lines keep raising alerts as usual.

Revise an open budget#

An open budget is not touched up: you draw a revision from it.

  1. Open the budget in BudgetsBudgetsBudgets.
  2. Select Réviser (revise).
  3. On the new record, adjust the planned amounts and their monthly breakdown.
  4. Select Ouvrir.

Result: a new numbered record replaces the previous one, which changes to the revised state and stays readable. The Révision de (revision of) field links the two, and the original keeps the figures reality was first compared against.

Close a budget#

At the end of the fiscal year, the budget is closed without being erased.

  1. Open the budget.
  2. Select Clôturer (close).

Result: the budget changes to the closed state. Its amounts stay readable, and its report stays printable. Remettre au brouillon (reset to draft) exists to go back as long as nothing has been communicated; Annuler (cancel) closes a budget that should never have been opened.

Upcoming renewals are known, dated and contractual: they do not have to wait for the invoice to count.

Prerequisite: the subscription register is filled in (see Subscriptions).

  1. Open BudgetsConfigurationRattacher les abonnements (link subscriptions).
  2. Leave Seulement ceux qui n'ont pas de poste (only those with no item) checked for a first pass.
  3. Read the Ce qui sera fait (what will be done) field: the dialog infers each subscription's item from the dominant account of its own vendor bills.
  4. Select Rattacher (link).

Result: each subscription carries its Poste budgétaire. When two items fit, or none does, the dialog says so and leaves the field empty rather than guessing. The item's budget lines then show the Échu à ce jour (due to date), the Renouvellements à venir (upcoming renewals) and the Abonnements sans échéancier (subscriptions with no schedule).

Open a forecast pass#

A forecast is redone every month, over a horizon that moves with the calendar.

  1. Open BudgetsBudgetsPrévisions glissantes (rolling forecasts), then select New.
  2. Enter the Début de l'horizon (horizon start) and the Fin de l'horizon (horizon end), twelve to eighteen months later.
  3. Enter Réel arrêté au (actuals as of): months that end on or before this date are actuals.
  4. Select Une ligne par poste.
  5. Select Amorcer les mois ouverts (seed the open months).
  6. Correct the months where you know better, in the Mois (months) tab.
  7. Select Publier la passe (publish the pass).

Result: the pass is frozen and carries its vintage number. The Totaux tab shows the Réel à ce jour (actual to date), the Prévu sur les mois ouverts (planned over the open months) and the Total de l'horizon (horizon total).

Run next month's pass#

This is the central act of a rolling forecast, and it takes one button.

  1. Open the published pass of the previous month.
  2. Select Rouler d'un mois (roll forward one month).
  3. On the new pass, select Amorcer les mois ouverts.
  4. Correct what you know, then select Publier la passe.

Result: the horizon has moved forward a month, the actuals have gained a month, and every figure already entered has been carried over as is. The previous pass stays readable exactly as it was made.

Compare two passes#

It is the comparison between two passes that teaches you something, not the figure of one pass on its own.

  1. Open the current pass.
  2. Select Comparer à la précédente (compare to the previous one).
  3. Read the variance item by item and month by month.

Result: a sentence that did not exist before becomes available. You forecast one amount for the year, you now forecast another, and the difference has a name: the real month that has just closed.

Track the cost of a campaign#

A marketing campaign already knew what it brought in; it knows what it cost as soon as it carries an analytic account.

  1. Open the campaign in Outreach.
  2. Select Créer le compte analytique (create the analytic account).
  3. Open the Budget tab.
  4. Read the Dépense comptabilisée (posted spending), the Coût interne (internal cost) and the Dépense totale (total spending).
  5. Check the Heures non valorisées and, if there are any, the Coût interne estimé (estimated internal cost).

Result: the campaign shows its spending next to the return Odoo already calculates. The Lignes budgétaires (budget lines) that name this account appear in the same tab, with their cumulative planned amount. Spending enters through the normal accounting path: a vendor bill or an expense report that carries the analytic distribution, with no double entry.

The menus, one by one#

These menus are the ones the modules declare. The application is called Budgets in the main menu.

BudgetsBudgets: a grouping menu for the tracking screens.

BudgetsBudgetsBudgets: the list of budgets, with their fiscal year dates, their state, their four amounts and their number of lines on alert. On an empty screen, the help text recalls that a budget compares a plan to actuals, item by item, and that the actual is never copied.

BudgetsBudgetsSuivi budgétaire (budget tracking): every budget line, across all budgets, in list, pivot, graph or form view. This is the cross-cutting reading screen: by item, by fiscal year or by source.

BudgetsBudgetsLignes en alerte: only the lines whose drift exceeds both the percentage and the floor of the budget. The help text on the empty screen explains why both conditions are required.

BudgetsBudgetsPrévisions glissantes: the forecast passes, with their horizon, their actuals cut-off date, their vintage and their totals. The help text recalls that a forecast is redone every month, and that it is the comparison between passes that teaches you something.

BudgetsBudgetsPrévision par mois (forecast by month): the monthly cells of every pass, in pivot or list view. Useful to read one given month across several vintages.

BudgetsConfiguration: a grouping menu, for the Gestion group only.

BudgetsConfigurationPostes budgétaires: the list of items, with their code and their accounts. The help text advises aiming for three to five items and points to the proposal dialog.

BudgetsConfigurationProposer des postes: the dialog that proposes a breakdown from the company's real chart of accounts.

BudgetsConfigurationRattacher les abonnements: the dialog that infers each subscription's item from its own vendor bills.

Reference#

Fields of the Budget form#

Field Description Required or default
Début de l'exercice, Fin de l'exercice Boundaries of the budget year. Required
Seuil d'alerte (%) Variance beyond which a line is flagged. No market practice sets this figure: it is a choice. To enter
Plancher d'alerte Below this amount, a variance is not flagged, even as a percentage. To enter
Prévu, Réalisé, Engagé, Théorique The four amounts for the whole budget. Calculated
Écart (variance) Planned minus committed, for the whole budget. Calculated
Lignes en alerte Number of flagged lines. Calculated
Comptes non couverts, Comptes comptés deux fois Coverage check against the chart of accounts. Calculated
Révision de, Révisions (revisions) Chain of successive revisions; the original carries number zero. Empty
Lignes, Couverture, Totaux tabs The budget lines, the coverage check, the totals.

Fields of the Budget line form#

Field Description Required or default
Poste (item) Budget item this line reads. Required
Source Comptabilité (accounting) reads the posted entries; Coût interne reads only the analytic lines with no accounting document. Comptabilité
Comptes analytiques (analytic accounts) Restricts reading to entries whose distribution names one of these accounts. Required in internal cost mode. Empty
Prévu Amount planned for the year. $0.00
Répartition mensuelle tab Amount expected in each month; Répartir également puts an equal share everywhere. Equal by default
Réalisé, Engagé, Théorique The three amounts read or calculated. Calculated
Base du théorique Says what the theoretical amount rests on: the schedule or a prorating. Calculated
Écart au plan Planned minus committed. Positive: budget is left. Calculated
Écart au théorique, Écart au théorique (%) Committed minus theoretical. Positive on an expense: you are spending faster than planned. Calculated
Heures non valorisées Hours logged whose cost is zero, for lack of an hourly rate on the employee's form. Calculated
Dépassement assumé, Motif du dépassement Removes the line from the alerts, keeping the reason. Cleared
Abonnements rattachés (linked subscriptions), Abonnements sans échéancier Subscriptions whose item is the line's item, and those that spend with no schedule. Calculated

Fields of the Budget item form#

Field Description Required or default
Name Name of the item, as it appears in the budgets. Required
Code Short code, which sets the display order and serves the reports. Empty
Comptes tab General ledger accounts whose entries feed this item. At least one
Raisonnement tab Why this item exists, and what it does not cover. Empty

Fields of the Rolling forecast form#

Field Description Required or default
Début de l'horizon, Fin de l'horizon Boundaries of the horizon, which crosses fiscal years. Required
Réel arrêté au Months ending on or before this date are actuals; the following ones are forecast. Required
Millésime (vintage) Number of the pass. Assigned
Passe précédente, Passes suivantes (previous pass, following passes) Chain of monthly passes. Empty
Réel à ce jour, Prévu sur les mois ouverts, Total de l'horizon The three totals of the pass. Calculated
Lignes, Mois, Totaux tabs One line per item, the monthly cells, the totals.

Each monthly cell carries the Prévu (what you decided to forecast, kept even after the month closes), the Réel (actual), the Mois clos (month closed) box, the Retenu (retained) amount, which is the actual if the month is closed and the forecast otherwise, and the Écart à la prévision (variance to forecast).

Reports and exports#

A printable report, Budget contre réel (budget versus actual), outputs the budget item by item with its four amounts and its variances. The Suivi budgétaire and Prévision par mois screens offer pivot and graph views, which export to a spreadsheet. See Common actions in every application.

Automations#

Nothing runs overnight in this family, and that is on purpose. The actual, committed and theoretical amounts and the variances are recalculated every time they are displayed, from the books, so there is never a stale figure to refresh. What happens without you is assistance: the linking dialog infers a subscription's item from its own bills, seeding fills the open months of a pass, and the roll copies existing figures from one month to the next.

Public pages and portal#

This application has no public page and no portal: a budget is not shown to a client.

Modules that extend this application#

The base works on its own. Each satellite installs when both applications it links are present, and adds one thing.

The rolling forecast comes from a second satellite.

A third satellite links the first two.

The last one links the budget to marketing.

Understanding#

The item is a group of accounts, not an analytic account. Most budget tools require an analytic key on every invoice. Until that entry is made, the budget shows zero against very real spending. Here, analytics stays available as a second axis, line by line, when it is filled in.

A line reads one source only. A posted invoice that carries an analytic distribution produces both an accounting entry and an analytic line. Adding them would count every dollar twice, silently, with nothing looking wrong on screen. That is why each line declares its source, and why the two sources are disjoint by construction.

The actual is never stored. The module records only the plan and the decisions. Go back to accounting, correct an entry, and the budget follows on the next reading. A forecast obeys the same rule seen from the other side: it stores the decision, that is, what was planned, and keeps calculating the fact.

An open budget can no longer be edited. A budget touched up on the quiet no longer measures anything, because nobody can say what reality was compared against. A revision costs one step and answers the question.

The alert threshold is a choice, not a truth. No market practice sets these numbers. That is why the percentage and the dollar floor are settings, and why both conditions are required together: a percentage alone screams on small items, an amount alone stays silent on big ones.

Zero-cost hours are flagged, not hidden. Odoo values time from the employee's hourly cost. When that rate is missing, which is common on a new payroll, the amount is zero while the hours are very much there. The line would read “nothing spent” and look perfectly normal. So the module counts those hours and displays them. On a campaign, it goes further and puts a figure on them at the default rate, in separate fields: an estimate blended into a posted amount would be worse than no estimate.

An on-demand subscription has no schedule. It spends all the same. The module displays it instead of counting it as zero, because a partial schedule taken for a complete one underestimates the theoretical amount and manufactures false alerts. In the forecast, it falls into the averaged share: better to spread it than to lose it.

No advertising spend is pulled from an external interface. Publishing connectors talk to publishing interfaces; spending would require the advertising ones, which are other products, with their own access review. Accounting entry stays the path, and the fallback: an advertising access can be refused or revoked, and budget tracking does not have to stop for that.

No drivers, on purpose. No formulas, no quantities multiplied by a rate. A forecast by item and by month, seeded automatically, corrected by hand where you know better. Everything is set up so the monthly pass takes a few minutes, because a forecast nobody redoes goes on looking authoritative while it rots.

Troubleshooting#

Symptom Likely cause Fix
A line's actual stays at zero although the spending exists. The account carrying the spending is in no item, or the line is in internal cost mode. Open the budget's Couverture tab, then add the account to the right item.
An amount seems to be counted twice. Two items of the same budget cover the same account. Read the Comptes comptés deux fois in the Couverture tab and remove the account from one of the two items.
A line cries overspending every renewal month. The planned amount is spread evenly although the spending falls in one go. Enter the real Répartition mensuelle, or link the subscription to its item.
A line shows a zero internal cost despite logged hours. The employee forms have no hourly cost. Read the Heures non valorisées, then fill in the hourly cost in Employees.
The linking dialog leaves a subscription with no item. Two items cover the dominant account of its bills, or none does. Choose the Poste budgétaire by hand on the subscription.
The budget refuses every change. It is open, revised or closed. Select Réviser to draw a new version from it.
The open months of a pass stay empty. Seeding was not run, or no closed month exists to calculate it. Select Amorcer les mois ouverts, or enter the first months by hand.
A campaign's spending stays at zero. The campaign has no analytic account, or the invoices do not name it. Select Créer le compte analytique, then set the analytic distribution on the invoices.

See also#

  • Invoicing: the chart of accounts, the entries and the analytic accounts the budget reads.
  • Purchase: the purchase orders that come before the spending.
  • Expenses: the expense reports that carry their analytic distribution.
  • Subscriptions: the register of renewals, source of the commitment schedule.
  • Timesheets: the hours that feed the internal cost.
  • Outreach: the campaigns whose spending the budget tracks.
  • Employees: the hourly cost that values the hours.