Cancel expenses safely at any lifecycle stage

Reverse posted and paid HR expenses with a full accounting-impact preview, a separated delete flow, per-role permissions, and a persistent audit log — no more manual journal cleanup.

The problem

Odoo's native expense workflow moves Draft to Submitted to Approved to Posted to Paid, but once a journal entry is posted there is no safe way to undo it. Reversing a wrong approval means an accountant manually reversing journal entries, unreconciling payments, and resetting state fields outside the standard UI — slow, error-prone, and out of reach for most approvers.

The solution

Cancel HR Expense adds a full-lifecycle cancellation flow that works from Draft all the way through Paid. Every cancellation opens a preview showing exactly which journal entries, payments, and reconciliations will be reversed before anything happens, and a persistent audit log records who cancelled what, when, and why.

Capabilities

Everything you need to safely reverse an expense

Every capability below is implemented in the module.

01

Cancel at any stage

Cancel a Draft, Submitted, Approved, Posted, or Paid expense in one action — the one gap Odoo's native reset and refuse buttons leave open once a journal entry is posted.

02

Preview before you cancel

Every cancellation opens a preview listing the exact journal entries, payments, and reconciliations that will be reversed or cancelled, so nothing happens to your books blind.

03

Separate, higher-friction Delete

Delete sits apart from Cancel with its own dedicated wizard, a danger warning, and a confirmation checkbox that gates the button — accidental deletion stays hard to trigger.

04

Reset to Draft for resubmission

A cancelled expense can be reset straight back to Draft for correction and resubmission, turning cancellation into a productive workflow step instead of a dead end.

05

Mandatory reason capture

Every cancel, refuse, or delete requires a reason, captured on the expense and in the audit log for compliance and dispute resolution.

06

Mixed-outcome bulk review

Select a batch of expenses and assign a different outcome to each — approve some, refuse or cancel others, reset the rest — all from a single review session.

07

Per-role permission gating

Dedicated Cancellation and Deletion security groups control exactly who can cancel, reset, or delete expenses, keeping the feature safe to deploy for finance teams.

08

Persistent audit log

A dedicated Cancellation Log records every cancel, refuse, reset, and delete with actor, timestamp, and reason — entries survive even if the expense itself is deleted.

09

Configurable journal handling

A Settings toggle enables or disables the feature at the organization level, with a choice between reversing journal entries (keep history) or cancelling them outright.

Workflow

How it works

1

Select an expense

Open any Draft through Paid expense, or select several from the list view for a bulk action.

2

Review the preview

The Cancel wizard shows every journal entry, payment, and reconciliation that will be affected before you confirm.

3

Confirm with a reason

Enter a mandatory reason and confirm — Delete requires an extra checkbox for its higher-friction flow.

4

Track in the audit log

Every action is logged with who, when, and why, and cancelled expenses can be reset to Draft for resubmission.

Questions

Frequently asked

No sales fog. If your question isn't here, email us and we'll answer it the same way.

Yes. Unlike Odoo's native reset and refuse actions, which refuse to act once a journal entry is posted, this module can cancel an expense at any stage from Draft through Paid, reversing or cancelling the linked journal entry and payment as needed.

Get the app

Buy it on the Odoo App Store

Purchase, download and install directly from the official Odoo Apps Store — you'll always get the latest supported build.

Cancel HR Expense - Full-Lifecycle Cancellation with Preview

Cancel, reset or delete an expense at any stage from Draft to Paid — with an accounting-impact preview, per-role permissions and an audit log that survives deletion.

Buy on Odoo App Store