OdooWiki OCA HUB

Account Invoice Payment Retention

account_invoice_payment_retention folder_open OCA/account-invoicing open_in_new
Accounting & Finance License: AGPL-3

This module provide a feature to plan for retention during invoice / payment. And return it at later time.

  • At Vendor Bill (or Customer Invoice), user can plan the retention by percent/amount
  • At Payment, to retain the amount as planned (enforce / not enforce)
  • At a later time, with another Vendor Bill (or Customer Invoice), user can select the retained payment in order to return it

Note: This feature works on both customer invoice and vendor bill alike.

auto_awesome What this module does

AI-generated from the code · Odoo 16.0

Plan a retention (a portion withheld) on customer invoices and vendor bills, keep it back when paying, and later return it by creating a new invoice that selects the retained amounts.

This module adds a payment retention feature to invoices and bills. Once enabled in Accounting settings, a new "Enable Payment Retention" option appears, where you also choose a Retention Payable Account, a Retention Receivable Account and a default Retention Method (Untaxed Amount or Total).

On a draft invoice or bill you can set a retention as a Percent or an Amount. Odoo computes the Retention Amount and shows the Retention Residual (what is still to be retained or returned). A check prevents the retention from exceeding the untaxed amount.

When you register a payment, a Suggested Retention is shown. You can toggle Apply Retention to withhold it, and Enforce Retention to make sure the retention is fully applied; if enforced and the residual is not zero, the payment is blocked with an error. Paying several invoices at once is not allowed when they carry a retention.

To give the retention back later, create a new invoice or bill and pick the earlier documents in the Return Retention field; the retained lines are copied in, and posting the new document reconciles them automatically.

Depends on

account

Required by other modules

Models and fields (5)
  • res.company · extends an existing modelretention_method, retention_account_id, retention_receivable_account_id
  • account.move · extends an existing modelamount_retention (Retention), retention_method, payment_retention, retained_move_ids (Return Retention), domain_retained_move_ids, retention_amount_currency (Retention Amount), retention_residual_currency (Retention Residual)
  • account.move.line · extends an existing model
  • res.config.settings · extends an existing modelretention_method (Retention Method), retention_account_id, group_payment_retention (Enable Invoice's Retention on Payment), retention_receivable_account_id
  • account.payment.register · extends an existing modelapply_payment_retention (Apply Retention), enforce_payment_retention (Enforce Retention), retention_amount_currency (Suggested Retention)

Text generated by AI (DeepSeek) from reading the Odoo 16.0 code on GitHub; it may contain mistakes, so check the code before deciding. View the code on GitHub

Availability by version

Reviewed: 2026-11-03
Confirmed (verified in repository and branch) Estimated (unverified) No information

Confirmation status: 3 confirmed, 6 with no information of 9 versions.

Sources · Odoo 16.0

Confirmed on 2026-11-03 in branch 16.0 of OCA/account-invoicing.

terminal Installation and usage

OCA documentation · Odoo 16.0
  • Go to menu > Invoicing > Configurations > Settings
  • Enable Invoice's Retention on Payment
  • Select the Retention Payable Account and Retention Receivalbe Account, make sure this account allow reconciliation
  • Once setup, user will see new Retention fields in Customer Invoice / Vendor Bill.

To plan for retention during invoice

  • Create new Vendor Bill (or Customer Invoice).
  • Specify amount to retain, by percent or amount.
  • Validate invoice as per normal.

To make payment retention

  • From the invoice, click Register Payment.
  • On the payment window, system suggest the retention amount, click on helper toggle to apply it.
  • By default, enforce retention is checked to ensure that, a valid retention amount and retention account is applied.
  • Once ready, make payment as per normal. Journal Entry created with a retention account move line (to be cleared at later time).

Note: System just help to validate retention. At the end, user can ignore the retention.

To return the retained amount

  • As time arrived to return the retained amount. Create the new Vendor Bill (or Customer Invoice).
  • Select the partner. Return Retention field will list only uncleared retained amount for this partner.
  • Select one or multiple payments (journal entry), system will auto populate the retained amount.
  • Validate invoice as per normal, system will now clear (reconcile) that retention.
  • Proceed to payment as per normal.

No verified information in OCA: Installation.

info

Data imported from GitHub: this sheet reflects the latest catalog review, not a live lookup. Always check the module documentation and staging before installing in production.