Designing payment gateway reconciliation in Odoo
Payment integration needs separate handling for authorisations, captures, fees, refunds, chargebacks, settlements, currencies, and bank reconciliation.
A successful checkout response does not mean the accounting is complete. The customer payment, gateway fee, settlement delay, refund, and bank deposit may occur on different dates and in different amounts. Model the payment lifecycle Document authorisation, capture, void, failure, refund, partial refund, dispute, and chargeback. Decide which events create or update Odoo transactions and how status changes affect the invoice. Separate gross payment from settlement Gateways often deposit a net amount after fees or combine many payments in one payout. Use clearing accounts and settlement references so individual customer payments can be matched without forcing the bank line to equal each invoice. Preserve references and currencies Store transaction, payout, refund, and dispute identifiers. Define exchange-rate treatment and the date used for accounting. Without these links, reconciliation becomes a manual search across exports. Design exception queues Surface missing captures, unmatched payouts, duplicate webhooks, amount differences, and refunds without a source payment. Assign finance and operational owners according to the exception type. Practical checklist Map every gateway status to an Odoo action. Use clearing accounts for gross payments and net settlements. Store transaction, payout, fee, refund, and dispute references. Test partial refunds, chargebacks, and multi-currency settlements. Reconcile gateway totals, Odoo entries, and bank deposits. Final decision The integration is finished when finance can explain every settlement from the bank back to customer transactions, fees, and adjustments without reconstructing the story manually.