What is the difference, in your company, between an expense that was approved and one that was paid? That is the question behind “Where is my request?” from the employee, and it is what finance needs answered when deciding what gets paid this week.

In Odoo, every request carries a visible status: Draft, Approved, Posted, In Payment, Paid and Refused [1]. Approval is a decision on the request, posting the entry is an accounting step, and payment is a separate step after them. The employee sees where the request stands, the team manager sees what awaits a decision, and finance knows the approved amount and the amount still to be paid. This is different from payroll inputs and from vendor bills.

At ToDoOps we build this cycle on agreed roles and permissions before configuration, so the employee, the manager and finance each know their part.

Example: 12 expense requests in one team

This is a hypothetical example, not a client story. 12 requests arrived, totalling 8,400 SAR:

Request status Count Amount (SAR)
Approved 8 5,600
Incomplete, awaiting a document 2 1,400
Refused with a written reason 2 1,400
Total 12 8,400

The approved 5,600 SAR alone splits by payment status:

Payment status Count Amount (SAR)
Paid 4 3,000
Not yet paid 4 2,600

The 3,000 and 2,600 are a breakdown of the 5,600, not an addition on top of the 8,400 total. Refused requests are shown separately from amounts approved for payment. The authorised reviewer makes the decision; the record shows where the request stands. You can browse the calculators when laying out your own trial numbers.

How approval and reimbursement work in Odoo 19

According to the official documentation [1]:

  • Expenses ready for handling appear in Expenses to Process.
  • Submitted expenses can be approved individually or in groups, and a team manager sees their team’s expenses according to permissions.
  • A missing document is requested through the chatter, and refusal is individual with a required reason.
  • Approval is separate from posting the journal entry, and posting is separate from payment.
  • Reimbursement can be individual or batched after posting, through bank, cash or check according to the company’s setup.
  • The Report in Next Payslip option is conditional on payroll setup and localisation.

Distinguish an expense the employee paid personally from one the company paid directly, so the reimbursement is not repeated. For the finance and expense tools, see Odoo apps.

What changes in the working day for finance and employees?

In an ordinary working day, each party sees something different. Finance opens the expense list and sees, for each request, the attached receipt, the approval status, whether the entry is posted and whether payment is done, so it starts from approved requests that are not yet paid instead of searching through messages. The team can summarise approved and remaining amounts for the owner in a follow-up table to support a cash decision. The employee knows the status of the request and, if a document is missing, finds the document request in the expense record and knows what is needed. The team manager knows the task is to approve or refuse, with a reason. Each party has a defined next step, and follow-up questions drop because the answer is visible on the request itself. In the example above, the refused requests sit apart from the list of approved amounts for payment, and the incomplete ones are not yet approved.

Expense types differ across service, construction and distribution teams. See the industries we support to place this workflow in your own operating context.

How to organise employee expense review

In the ACFE report “Occupational Fraud 2024: A Report to the Nations” (Figure 5, page 13), Expense Reimbursements accounted for 248 cases, which is 13% of all cases in the international sample of fraud cases studied in the 2024 report [2]. That percentage describes an international sample of fraud cases, not an estimate of your company’s losses or system savings.

The practical takeaway is that reimbursement requests need a document and a review, not that anyone is suspected. Written decisions preserve the request history and help both the employee and reviewer understand acceptance or refusal.

We define who records, reviews and pays, then test those permissions and suspected-duplicate cases as part of the agreed scope.

A first trial with a small team

  1. Choose a small team, a team manager, a finance reviewer and a small value cap for the trial.
  2. Agree on a payment due date.
  3. Prepare test cases: a correct receipt, an incomplete one, a refused request with a reason, an expense paid by the company, and one paid by the employee.
  4. Test permissions: what the team manager sees and what finance approves.
  5. In the test environment, record a payment and test an attempt to pay the same expense again. Review the expense status and payment effect with finance.
  6. Review a simple table with the owner: approved, paid and remaining.

Frequently asked questions

What is the difference between approval and payment?

Approval is a decision on the request, posting the entry is an accounting step, and payment is a third step. Odoo separates them [1], so you can see an approved request that has not been paid yet.

How do I avoid reimbursing an expense the company already paid?

Distinguish at entry between what the employee paid and what the company paid, and test this in the trial before rollout.

Can an expense be reimbursed through payroll?

The Report in Next Payslip option is reviewed against your payroll setup and localisation before it is adopted. Scope separately the recording of an expense and the actual payment instruction.

Who reviews an expense, and who pays it?

The company assigns the authorised roles, and the workflow is configured accordingly. Test what each role can see, approve, post and record as paid using those role accounts.

To explore a wider connected workflow, try the guided sales and inventory simulation with sample data. It demonstrates those two operations; your expense pilot is prepared around the agreed claim scenarios.

What to send us so we can scope your case

Send us through the contact page: the number of employees who pay out of pocket, the most frequent expense types, who approves and who pays, the payment method you use (bank, cash or check), and whether you want reimbursement linked to payroll. From that we define the trial scope. You can also review ToDoOps or browse the calculators.

References

[1] Odoo 19 Documentation: Approve expenses and Reimburse employees (Finance › Expenses). The official guide to expense statuses, approval and reimbursement.

[2] ACFE: Occupational Fraud 2024: A Report to the Nations (Figure 5, p. 13). An international report on studied occupational fraud cases.