This guide shows how to record one customer payment that settles several invoices in Odoo Community, and how to close those invoices when the customer pays less and codes the gap as a fee, discount or other deduction. Community has no bank matching screen, so both jobs happen in the Pay window opened from the invoice list: Group Payments turns the selected invoices into one payment, and Mark as fully paid with a Post Difference In account books the deduction. The last section covers what Enterprise adds: a bank matching screen and reconciliation models.
It is for bookkeepers and owners who receive remittances that pay several invoices at once. Verified on Odoo 19 Community and checked against Odoo 20.
Before you start
- Version and edition: Odoo 19 Community, where the app is called Invoicing. The Pay window and its labels are the same in Odoo 20 and in Enterprise.
- Access rights: the Pay button needs the Invoicing level in the Accounting section of the user's access rights. Changing journals needs Administrator.
- An outstanding account on the payment method: the difference options only appear when the bank journal's payment method has an outstanding receipts account. New databases leave it empty; step 1 fills it in.
- Deduction accounts: one per kind of deduction you report separately, such as bank charges or customer allowances.
- Terms used: an outstanding receipts account is a holding account for customer payments not yet confirmed against the bank. A write-off is a journal line that moves an unpaid difference to another account so the invoice can close. Developer mode is a setting that shows technical options hidden from everyday screens.
Step 1: let the payment method record a difference
In Community, the column that holds a payment method's outstanding account is shown only to users with the technical access group Show Accounting Features - Readonly, which is not part of the standard Invoicing roles. An administrator adds it first.
- Open the Settings app, scroll to Developer Tools and click Activate the developer mode.
- Go to Users & Companies > Users and open your user. A section called Extra Rights now appears in the access rights. Tick Show Accounting Features - Readonly and save.
- Open the Invoicing app and go to Configuration > Accounting > Journals. Open the bank journal the money arrives in.
- On the Incoming Payments tab, the Manual Payment line shows "No payment journal entries" in the Outstanding Receipts accounts column. Select the Outstanding Receipts account that came with your chart of accounts, then save.
Postings do not change: with no account set, Community already posts customer payments to that same account. The Pay window can now handle a difference.
Step 2: record one payment for several invoices
- In the Invoicing app, go to Customers > Invoices and tick the invoices the deposit covers.
- Click Pay above the list.
- Choose the bank Journal, the Payment Method from step 1 and the Payment Date.
- Tick Group Payments. The Amount shows the total still due on the selected invoices and can now be edited.
- If the customer paid the full total, click Create Payment. Odoo creates one payment linked to every selected invoice, and the invoices show as Paid.
Group Payments only combines invoices of the same customer. If the selection spans several customers, the window creates at least one payment per customer and the amount cannot be edited, so record short-pays one customer at a time.
Step 3: close a coded short-pay
- In the Pay window, with Group Payments ticked, enter the amount actually received in Amount.
- A Payment Difference line appears with the gap and two choices. Keep open, the default, leaves the shortfall owing on the invoices. Mark as fully paid closes them.
- For a coded deduction, choose Mark as fully paid. Two fields appear: Post Difference In, where you pick the deduction account, and Label, which defaults to Write-Off. Replace the label with the customer's deduction code and reference.
- Click Create Payment.
The payment's journal entry gains a line on the deduction account, tagged with the customer and your label, so that account's ledger lists each deduction with its code.
Handling different kinds of deduction
- Several codes on one remittance. The Pay window takes one Post Difference In account per payment. When a remittance mixes, say, freight and pricing deductions, register separate payments, each covering the invoices whose deduction shares an account.
- Early payment discounts. If the invoices use payment terms with Early Discount ticked and the customer pays the discounted total in time, the window states that the early payment discount has been applied and books it without any write-off choice.
- Deductions that change the sale. The write-off line carries no tax. If sales tax should be reduced, as with an allowance for damaged goods, issue a credit note from the invoice's Credit Note button instead. Once posted, an unapplied credit note is listed under Outstanding credits on the invoice, where Add applies it.
Check that it worked
- In Customers > Invoices, the invoices you closed show as Paid. If you chose Keep open, the shortfall still shows as an amount due.
- In Customers > Payments, one payment matches the remittance amount.
- Open it and click Journal Entry (visible thanks to step 1). It shows the amount received, the customer balance cleared for the full total, and a deduction line labeled with the code.
What Enterprise adds: bank matching and models
Odoo 19 and 20 Community include no screen to import bank statements or match bank lines to invoices. That screen ships in an Enterprise module installed automatically with Invoicing on Enterprise, even without the full Accounting app. There, a lump sum is matched from the bank line:
- On the Accounting dashboard, click Transactions on the bank's card and select the deposit line.
- Click Reconcile. In Search: Journal Items to Match, tick every invoice the deposit pays and confirm.
- If the deposit is short, Odoo treats the last invoice as partly paid. Click that invoice's line to open Edit Line, which offers to set the invoice as fully paid. The bank line then shows an open difference.
- Book the difference with Set Account, or with a reconciliation model chosen from the menu at the end of the line.
A reconciliation model is a saved rule for that last step. Its conditions are Journals, Partners, Amount and Label, which can require the bank line's text to contain a deduction code. Its Counterpart Items set the account, amount type and label; at the default Percentage of balance of 100, it books whatever is still open. A Manual model is suggested on lines meeting its conditions; an Automated one applies itself. Community has no code that applies models.
Common mistakes to check first
- No Payment Difference line. The payment method has no outstanding account, Group Payments is not ticked, or the invoices belong to different customers.
- Amount cannot be edited. Group Payments is not ticked, or several customers are selected.
- The shortfall stayed on the invoice. Keep open is the default. Switch to Mark as fully paid before creating the payment.
Steps verified on Odoo 19. Menus and labels can differ on other versions.
Common questions
Does Odoo Community have bank reconciliation?
Odoo 19 and 20 Community have no screen for importing bank statements or matching bank lines to invoices; that screen is part of Enterprise. In Community, payments are recorded against invoices from the Pay window instead.
How do I record one payment for several invoices in Odoo?
Select the customer's invoices in Customers > Invoices, click Pay and tick Group Payments. Odoo creates a single payment for the total and links it to every selected invoice.
Why doesn't the Payment Difference option appear in Odoo's Pay window?
It only appears when the payment method on the bank journal has an outstanding receipts account, when Group Payments is ticked for several invoices, and when all invoices belong to one customer. A new database leaves the outstanding account empty.
How do I write off a customer short payment in Odoo?
Enter the amount received in the Pay window, choose Mark as fully paid, select the deduction account in Post Difference In and put the deduction code in Label. Odoo books the difference to that account and closes the invoices.
What do reconciliation models do in Odoo?
They are saved rules used by the Enterprise bank matching screen to book all or part of a bank line to set accounts, based on conditions such as journal, partner, amount or text in the line. Community has no code that applies them.
Talk to the team.
If you are setting this up, or Odoo is not behaving the way this guide describes, book a 30-minute call. We will look at your configuration and tell you what it needs. Calgary studio, in-house team, no offshore handoffs.
Book the call →