| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Invoicing (account)
• Discuss (mail) |
| Lines of code | 318 |
| Technical Name |
bounced_payment_return |
| License | OPL-1 |
| Website | https://laudonlabs.com |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Invoicing (account)
• Discuss (mail) |
| Lines of code | 318 |
| Technical Name |
bounced_payment_return |
| License | OPL-1 |
| Website | https://laudonlabs.com |
Bounced Payment Return
One-click workflow for bounced checks, NSF, and ACH returns.
Handling a bounced check in vanilla Odoo is a four-to-five step accounting puzzle: unreconcile the payment, reverse the entry, reopen the invoice, and bill the bank fee — all while keeping bank reconciliation clean. This module collapses the whole workflow into a single wizard with a full audit trail.
What it does
The problem
A customer check bounces or an ACH gets returned. In standard Odoo you now need to:
- Unreconcile the payment from the invoice
- Reverse the payment's journal entry
- Keep the original bank deposit matching intact
- Reopen the original invoice so amount due is restored
- Create a separate fee invoice for the bank charge
- Make the return debit and fee debit matchable in bank reconciliation
Easy to miss a step. Easy to break the books.
The fix
One wizard. One click. Bookkeeping done right:
- Reverses the payment entry (keeps bank deposit matching intact)
- Reopens the original invoice(s) automatically
- Leaves the return amount open on Outstanding Receipts — ready to match against the bank's actual return debit
- Optional one-line fee invoice to bill the customer
- Fee line is also pre-positioned to match against the bank's fee debit
- Full chatter audit on payment, invoice, customer, and fee invoice
The workflow
Step 1 — Click "Return Payment"
The button appears on any paid, matched payment. Red, impossible to miss, hidden automatically on payments that aren't eligible.
Step 2 — Fill in the wizard
Pick a reason (Bounced Check, NSF, ACH Return, Stop Payment), set the return date, optionally charge a bank fee. The Fee Income Account auto-fills from your fee product.
Step 3 — Audit trail posted
The payment shows a "returned" banner. Reversal entry and fee invoice appear in a Return Information group. Every affected record gets a chatter message — payment, original invoice(s), customer, and the new fee invoice.
Step 4 — Bank reconciliation, clean
When the bank's actual return debit and fee debit show up in your next statement,
the reversal entries are already waiting on Outstanding Receipts, labeled
Return: <reason> - <payment>. One click to match.
Feature list
Return reasons
- Bounced Check
- Insufficient Funds (NSF)
- ACH Return
- Stop Payment
Accounting
- Original invoice reopened, amount due restored
- Reversal entry labeled
Return: ... - Outstanding Receipts lines ready for bank matching
- Optional fee invoice (posted, ready to collect)
Audit
- Chatter on payment, invoice, customer, fee invoice
- Return date, reason, and notes captured on payment
- Reversal entry linked on payment form
- Fee invoice linked on payment form
Guards
- Only Paid payments can be returned
- Only matched payments (won't orphan bank rec)
- Can't return the same payment twice
- Fee amount requires fee income account
Integration
- Clean inherit on
account.payment - No model rewrites, no core overrides
- Works with standard bank reconciliation
- Compatible with multi-company setups
Scope
- US-focused (NSF / ACH terminology)
- Works on any bank journal
- Enterprise or Community
- Ready for production use
Technical
Dependencies
accountaccount_check_printing
Version
- Odoo 18.0 (Community & Enterprise)
What's not included
- Import of bank return debits — use your existing bank statement import
- Customer dunning or auto-hold logic — this module stops at posting the fee invoice
- Multi-currency conversion on the fee — fee currency follows the payment
Support
Built and maintained by Laudon Labs.
Questions, issues, or feature requests? Email tom@laudonlabs.com.
Licensed under OPL-1. One purchase per production database.
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module