Skip to main content

Expense Receipt Rules

Expense Receipt Rules adds receipt, spending, date and potential-duplicate checks to Odoo Expenses. Employees see what needs attention before submission; authorized reviewers can decide eligible policy exceptions. Native expense approval, accounting and reimbursement still follow your Odoo configuration.

Module: corvus_expense_policy_guard
Guide baseline: Odoo 19, module 19.0.1.0.1
Verified: 28 October 2026, against module source and catalogue eligibility. This walkthrough was not executed in a live database. Version differences appear below.

Before you start​

  • Have the matching module installed by your Odoo administrator, with Odoo Expenses (hr_expense) and Discuss/Mail (mail). XLSX export also requires the server's xlsxwriter dependency.
  • Use an employee linked to the correct Odoo user and company. Select the relevant company before working with policies or exceptions.
  • Ask an Expenses manager to configure an applicable policy. No Applicable Policy permits the native expense workflow to continue; installing the module alone does not establish your policy coverage.
  • For practice, use an existing disposable test database and fictional receipts. The example below changes expense and policy records.

Open the Odoo 19 Live Test entry. This version was eligible in the catalogue checked on the verification date. Availability can change; no new demo was launched for this guide.

Find the feature and check access​

The module extends Expenses; it does not add a separate application tile.

RoleStarting pointWhat to do there
EmployeeExpenses → My Policy StatusOpen your expenses and read their policy result.
EmployeeExpenses → My Policy ExceptionsFollow your submitted requests and decisions.
Expenses approverExpenses → Policy Management → Policy ExceptionsReview accessible requests; decisions require the additional checks below.
Expenses managerExpenses → Configuration → Expense PoliciesCreate and maintain policies.
Expenses managerExpenses → Policy Reporting → Policy AnalysisReview current violation facts.
Expenses managerExpenses → Policy Reporting → Export Policy AnalysisGenerate an authorized CSV or XLSX export.

Access remains limited by native Expenses permissions and allowed companies. An approver must also be listed in the policy's Exception Approvers, have native approval eligibility, and be different from both the requester and the expense owner. A visible review menu does not authorize self-approval.

Configure a policy​

  1. As an Expenses manager, open Configuration → Expense Policies and create a policy with a clear name and the correct company.
  2. Set its priority and, if needed, effective dates. In Scope, select any employee, department, job, employee tag, expense category or payment mode that the policy should cover. Each field selects one value, and every populated condition must match.
  3. Choose the policy currency for monetary limits. Expense Currency Scope, under Decision, is a separate filter; it does not set the currency in which limits are evaluated. Expense amounts are converted into the policy currency using the expense-date rate.
  4. Choose an action: Warn, Block, or Allow Exception Request. For the exception action, select suitable Exception Approvers with access to the policy's company.
  5. In Amount & Period Limits, set any per-expense, daily, weekly or monthly caps. A zero monetary cap leaves that cap disabled. Totals include non-refused expenses for the same employee and company that select the same policy, including drafts. Weekly totals run Monday through Sunday.
  6. In Receipts & Required Facts, set the receipt threshold, minimum receipt count and permitted file types. The minimum count applies at or above the threshold. Configure description, Policy Vendor and Policy Reference requirements if needed.
  7. Review Age & Calendar and Potential Duplicates, then save. A hard age limit remains a blocking rule even when the general policy action allows warnings or exceptions.

Expected result: matching expenses show the selected policy and an evaluated status. One policy applies to an expense: highest priority first, then greatest scope specificity, then latest effective start date, then record ID. Policies are not added together. Use Reevaluate Policy on an expense to check your setup.

Policy changes refresh affected expenses and can invalidate pending or approved exception evidence. Archive a policy with exception history instead of deleting it. Company defaults for the duplicate comparison window and pending-request reminders are in the Expense Policy Guard block of Expenses settings, subject to your Settings permissions.

Check an expense before submission​

  1. Create or open your expense in Expenses. Enter its employee, date, category, amount, currency and description using the normal expense workflow.
  2. Add the receipt through the native expense receipt attachment flow. A URL or a file uploaded only as exception support does not count as a receipt.
  3. Complete Policy Vendor and Policy Reference in Policy Details when the policy requires them. These fields are editable in draft.
  4. Select Reevaluate Policy. Read the Expense policy banner, explanation, classified-receipt count and potential-match count.
  5. Correct missing facts or invalid receipts, or follow the eligible exception process below. Then use the native expense submission action.

Expected result: an expense within policy can proceed to native submission and approval. Warning-only findings can also proceed. Blocking findings stop the transition, and required exceptions must be approved first. Checks run again during submission and approval, so a previously displayed result can change.

StatusWhat it tells you
No Applicable PolicyNo policy matched; ask the manager to check coverage if one was expected.
Within PolicyCurrent evaluation found no policy issue.
WarningRead the underlying explanation; see the exception limitation below if submission still stops.
Missing ReceiptA receipt rule failed. Correct the receipt or use an eligible exception route.
Potential DuplicateA similarity check needs human review; it is not proof of a duplicate or fraud.
Hard ViolationA blocking condition must be corrected.
Exception Pending / Exception Approved / RejectedAn exception request or decision applies to the current evaluated evidence.

The banner is a summary. For example, a blocking policy with a missing receipt can show Missing Receipt, rather than Hard Violation.

Practice: block an expense without a receipt​

This source-derived scenario is intended for a test database; it is not a recorded runtime test result.

  1. Choose an existing test employee and expense category. Create a narrowly scoped policy that will take precedence for that combination. Use the company currency, action Block, receipt threshold 25, and minimum receipt count 1. Keep the standard PDF/JPEG/PNG receipt types and leave monetary caps at zero for this exercise.
  2. Create one expense for that employee and category, dated today, for 50 in the company currency. Enter a description and any required facts, but do not attach a receipt yet.
  3. Select Reevaluate Policy. Expect Missing Receipt and an explanation of the missing requirement. Attempt the normal submission action; it should be blocked by the policy.
  4. Attach one valid fictional PDF, JPEG or PNG receipt using the normal expense receipt flow. Select Reevaluate Policy again.
  5. If no other rule or duplicate signal applies, expect Within Policy. The normal submission action can now proceed, subject to native Odoo validation and permissions.

If the result differs, first check which policy was selected, its currency, the receipt classification count, required facts and any potential duplicates. A different applicable policy or additional company data can change the result.

Request and review an eligible exception​

  1. The employee opens an expense governed by Allow Exception Request, with an eligible issue such as a missing required receipt and no hard block.
  2. Select Request Exception, explain the business reason, and optionally attach supporting evidence. Select Submit Request. Supporting evidence is retained with the request; it does not satisfy the expense receipt requirement.
  3. A configured, authorized approver opens Policy Management → Policy Exceptions, checks the request and retained evidence, and chooses Approve Exception or Reject. The queue initially filters to pending requests.
  4. The employee checks My Policy Exceptions or the expense's Exceptions button. After approval, return to the expense and continue the native submission/approval workflow. The exception decision does not submit or approve the expense itself.

Expected result: the decision applies to the specific policy and expense evidence that was reviewed. Changed receipts, facts, totals, duplicate matches or policy configuration can make the request Stale. Reevaluation on a later date can also do so. Obtain a new review when required; do not assume an earlier approval remains valid indefinitely.

Known source limitation in the reviewed release: an amount-only exception violation can be summarized as Warning, while the exception wizard rejects requests with that status. If submission asks for an exception but the button is missing or the wizard refuses the request, send the expense reference and policy explanation to your administrator or Corvus support. This guide does not establish a successful override for that case.

Review and export policy information​

  1. Managers open Policy Reporting → Policy Analysis to inspect current violation facts by employee, department, category, violation type or month.
  2. For a file, open Export Policy Analysis, choose the company, optional dates and CSV or XLSX, then select Generate Export and download the result.
  3. Authorized exception reviewers can open a request and use Print Evidence for its retained decision evidence. Receipt files themselves are not embedded in that report.

Generating an analysis export refreshes the selected expenses first, which can make older exception evidence stale. Exported Actual/Limit/Excess totals summarize violation figures, potentially including several rules and period totals for one expense. They are not unique expense spending or reimbursement totals; do not add together different policy currencies.

Troubleshooting and limits​

SymptomCheck next
Policy menus are missingConfirm installation, native Expenses access, role and active company with your administrator.
Expected policy does not applyCheck active status, company, dates, every scope condition and competing priorities.
A receipt is attached but still missing or invalidCheck the classified-receipt count, binary receipt upload, required count, MIME type and extension. Exception support and URL attachments do not count.
An approver cannot decide a requestCheck configured approver membership, company access, native approval eligibility, self-approval restrictions and whether the request is still pending/current.
A decided request disappeared from the queueRemove the default Pending filter and search your authorized records.
XLSX generation failsAsk the administrator to check the required server dependency and error details. CSV is also available.

Potential duplicates use configured comparisons and receipt checksums, not OCR interpretation or a fraud determination. Calendar warnings check configured work weekdays; they are not a complete holiday or leave-calendar check. The module does not establish your organization's reimbursement rules automatically, and this guide does not certify a particular database's configuration.

For help, provide your Odoo/module version, company context, expense or exception reference, selected policy, visible status and exact error. Share sensitive receipts and employee details only through your authorized support channel.

Version coverage​

OdooModule version inspectedVerification scope
1515.0.1.0.1Manifest inspected; additionally depends on base_sparse_field. This walkthrough was not checked against its UI.
1616.0.1.0.1Manifest inspected; workflow/UI not verified here.
1717.0.1.0.1Manifest inspected; workflow/UI and Live Test availability not established here.
1818.0.1.1.0Source compared. Same module menus; native expense-report submission/approval differs from 19.
1919.0.1.0.1Detailed workflow, permissions, views and existing test definitions reviewed. Catalogue eligible; tests not executed for this guide.
2020.0.1.0.0Source compared. Expense-level workflow; demo contents and native screens may differ. No runtime walkthrough performed.

The installed package determines the applicable behavior. Older included text may use the descriptive name “Employee Expense Receipt & Policy Guard”; the reviewed manifest names the product Expense Receipt Rules. Exact source revisions and private verification notes are retained by the documentation maintainers.