Budget Position Control in Odoo#
Standard budgeting reports variances after the fact. Budget position control prevents overspending before it happens - blocking transactions that would breach the budget unless an exception is explicitly approved.
Prerequisites#
Accounting → Configuration → Settings → enable Budget Management and Budget Positional Control.
Creating a Budget with Position Control#
Accounting → Accounting → Budgets → New:
- Name: FY2027 Marketing Budget
- Period: 2027-01-01 → 2027-12-31
- Control: Strict (blocks transactions) or Warning (flags but allows)
Budget Lines:
- Marketing Events (GL: 6200): $30,000
- Digital Advertising (GL: 6205): $20,000
- Trade Show (GL: 6210): $15,000
How Position Control Works#
When a purchase order is confirmed that posts to Marketing Events (6200):
If budget has remaining balance: PO is confirmed normally.
If budget is exhausted:
- Warning mode: PO can be confirmed but finance sees an alert in the budget report
- Strict mode: confirmation is blocked - "Budget limit exceeded for Marketing Events. Available: $0. Required: $500."
The block happens at the PO confirmation stage - before money is committed to the vendor.
Commitment Accounting#
When a PO is confirmed (but not yet received), Odoo can record a budget commitment:
- The PO amount is immediately deducted from the available budget balance
- Prevents the same budget dollars from being committed twice before the invoice arrives
Example: $10,000 budget. PO for $8,000 confirmed. Available shows $2,000 - not $10,000.
Without commitment accounting: a second PO for $7,000 could be confirmed (budget shows $10,000 available) → overspend when both POs are received.
Enable commitment accounting:
Accounting → Configuration → Settings → Budget → Use Commitments.
Budget Exception Workflow#
When a purchase needs to exceed the budget:
- Purchase manager submits a Budget Exception Request (via chatter or external approval form)
- Finance or CFO reviews and approves
- Finance increases the budget line by the exception amount
- Purchase manager confirms the PO
This creates an auditable trail: every budget increase is linked to an approval.
Budget Availability Report#
Accounting → Accounting → Budgets → [Budget] → Print Budget:
- Budget (approved amount)
- Commitments (confirmed POs not yet invoiced)
- Actuals (posted expenses)
- Available = Budget − Commitments − Actuals

