Expense Policy Enforcement in Odoo#
Without expense controls, employees can submit any amount as reimbursable. Odoo Expenses can enforce per-diem limits, require receipt attachments, and route out-of-policy expenses for manager review before approval.
Setting Up Expense Categories#
Expenses → Configuration → Expense Categories → New:
| Field | Example |
|---|---|
| Name | Business Meals |
| Expense Account | Travel & Entertainment (610200) |
| Invoicing Policy | Expense |
| Product Price | $0 (employee enters actual amount) |
| Limit | $75 per person |
The Limit field sets a per-claim cap - expenses above this trigger a warning or block.
Receipt Requirement by Amount#
Expenses → Configuration → Settings:
- Receipt Required: Yes for expenses over $25
- Employees must attach a receipt PDF or photo for any claim exceeding this threshold
- Submitting without a receipt → validation error
Approval Workflow#
Expenses → Configuration → Settings → Expense Approval:
- No Approval: auto-approved (suitable for micro-expenses only)
- Manager Approval: all expenses go to the employee's manager
- Two-Level Approval: manager + finance manager (for amounts > $500)
Per-Diem Meal Limits#
For travel expenses:
- Create a product "Daily Meal Allowance" with a fixed price ($50/day)
- Set Expense Type: Per Diem
- Employee enters number of days, not the actual amount
- Odoo calculates: days × $50 = reimbursement
This eliminates the need to verify meal receipts individually.
Out-of-Policy Expenses#
If an expense exceeds the category limit:
- Employee can still submit with a justification note
- Manager sees the expense is flagged as "out of policy"
- Manager can approve with override or reject with a comment
- Finance team can see all policy exceptions in a filtered view
Reporting on Policy Compliance#
Expenses → Reporting → Expense Analysis:
- Filter by: Amount > Category Limit
- Shows all out-of-policy claims, who submitted them, and whether approved or rejected
Track expense policy compliance by department to identify teams that consistently over-spend.
Integration with Accounting#
When an expense report is approved and posted:
- Each expense line is coded to the correct GL account
- Analytic tags (department, project) are applied automatically from the employee's contract
- The reimbursement journal entry is created ready for payment

