Skip to content

Odoo Payment Matching Stuck — Reconciliation Not Working Fix

DeployMonkey Team · March 24, 2026 10 min read

Payment Matching Issues in Odoo

When payments cannot be matched to invoices during reconciliation:

Issues:
- Payment appears in bank but won't match to any invoice
- "No match found" in bank reconciliation view
- Payment matched to wrong invoice
- Partial payment won't reconcile
- Multi-currency payment matching fails
- Overpayment creates negative balance instead of credit note

Fix 1: Partner Mismatch

The most common cause — the payment and invoice have different partners:

# The payment was received from "John Smith" but the invoice is for "John Smith LLC"

# Check partner on both:
# Invoice: Accounting > Invoices > open invoice > check Customer field
# Payment: Accounting > Payments > open payment > check Partner field

# Fix: Edit the payment's partner to match the invoice's partner
# Or merge the duplicate partners:
# Contacts > select both > Action > Merge

# In bank reconciliation:
# If the partner detected from bank data is wrong,
# manually change the partner in the reconciliation widget

Fix 2: Amount Mismatch

# Invoice: $1,000.00 | Payment: $999.50
# Odoo won't auto-match if amounts differ

# Option 1: Partial reconciliation
# In the reconciliation widget, match the payment to the invoice
# Click "Partial Reconcile" to keep $0.50 as outstanding

# Option 2: Write-off the difference
# In reconciliation, click the payment and invoice
# Add a write-off line for $0.50 to an expense account
# (e.g., "Bank Charges" or "Rounding Differences")

# Option 3: Payment discount
# If the customer took an early payment discount
# Use the discount write-off account

Fix 3: Account Type Mismatch

# Payment and invoice must use the same receivable/payable account

# Check:
sudo -u postgres psql -d mydb -c "
  SELECT aml.id, am.name, aa.code, aa.name as account_name,
    aml.debit, aml.credit, aml.amount_residual
  FROM account_move_line aml
  JOIN account_move am ON aml.move_id = am.id
  JOIN account_account aa ON aml.account_id = aa.id
  WHERE aml.partner_id = PARTNER_ID
  AND aa.account_type = 'asset_receivable'
  AND aml.reconciled = false;
"

# If the invoice uses account 1200 but payment uses 1201:
# They cannot reconcile because they're on different accounts
# Fix: Ensure both use the partner's default receivable account

Fix 4: Already Partially Reconciled

# A payment may be partially reconciled with another entry
# Check if the payment has remaining amount:

# Open the payment > check "Outstanding amount"
# If it shows $0, the payment is fully reconciled elsewhere

# Find what it's reconciled with:
sudo -u postgres psql -d mydb -c "
  SELECT apr.id, aml.id as line_id, am.name, aml.debit, aml.credit
  FROM account_partial_reconcile apr
  JOIN account_move_line aml ON (aml.id = apr.debit_move_id OR aml.id = apr.credit_move_id)
  JOIN account_move am ON aml.move_id = am.id
  WHERE apr.debit_move_id = PAYMENT_LINE_ID
  OR apr.credit_move_id = PAYMENT_LINE_ID;
"

# Fix: Unreconcile the wrong match, then reconcile correctly

Fix 5: Multi-Currency Matching

# Currency mismatches prevent automatic matching

# Invoice in EUR, payment in USD — cannot auto-match
# Odoo needs a rate to convert

# Fix:
# 1. Ensure exchange rates are updated
# Accounting > Configuration > Currencies > Update rates

# 2. For manual matching with rate:
# In reconciliation widget, the exchange difference
# is automatically posted to the Exchange Rate account

# 3. Configure exchange rate accounts:
# Accounting > Configuration > Settings
# Income Exchange Rate Account / Expense Exchange Rate Account

Fix 6: Bank Statement Line Reconciliation

# In the bank reconciliation view:
# 1. Open Accounting > Bank > Bank Statement
# 2. Find the unmatched line
# 3. The right panel shows matching suggestions

# If no suggestions appear:
# - Check the partner is correctly identified
# - Check the amount matches (or close enough)
# - Check the date is reasonable
# - Click "Manual" tab to search for entries manually

# Matching tolerance:
# Settings > Reconciliation Models
# Create a model for common patterns (e.g., bank fees)
# Set tolerance amounts for automatic matching

Fix 7: Reconciliation Models

# Create rules for recurring bank patterns:
# Accounting > Configuration > Reconciliation Models

# Example: Automatic bank fee deduction
# Name: Bank Fees
# Type: Write-off
# Rule: Bank statement label contains "FEE" or "CHARGE"
# Account: 6500 - Bank Charges
# This automatically creates write-off entries for bank fees

Prevention

DeployMonkey's AI agent configures reconciliation models for common banking patterns and monitors unmatched payments. Automatic partner detection and matching suggestions reduce manual reconciliation effort.