2.1 Customer invoicing & payments
Key Takeaways
- A customer invoice moves Draft to Posted to Cancelled; confirming it assigns a sales-journal number and generates the accounting entry, making it a legal document that must be reversed rather than deleted.
- Payment status 'In Payment' means a payment was registered to an Outstanding Receipts account, while 'Paid' is reached only after bank reconciliation matches it to a real bank line.
- Posting a customer invoice debits Accounts Receivable for the gross total, credits Income for the net amount, and credits the Tax account for VAT collected.
- A product's invoicing policy (Ordered quantities vs. Delivered quantities) determines what the sales order's Create Invoice button bills.
- Follow-up levels automate collection on overdue receivables, each defining a delay (e.g., 15, 30, or 60 days) and an action such as sending an email, a letter, or scheduling a call.
The Order-to-Cash Accounting Flow
In Odoo 19, the customer side of accounting follows the order-to-cash cycle: a customer invoice is created, posted, sent, and eventually paid. Understanding each state transition and the journal entry behind it is the single most heavily tested area of the functional exam, because Accounting carries roughly 18% of the questions — the largest single module weight.
Invoice states and payment status
A customer invoice moves through document states: Draft, Posted, and Cancelled. Only a draft invoice can be edited freely; once you click Confirm, the invoice is posted, it receives a sequential number from its sales journal (for example INV/2026/00042), and Odoo generates the underlying journal entry. Posting is what turns the invoice into a legal accounting document — you cannot simply delete a posted invoice, you must reverse it.
Separately from the document state, every posted invoice carries a Payment Status: Not Paid, In Payment, Paid, Partially Paid, or Reversed. The distinction between In Payment and Paid trips up many candidates. When you register a payment, the invoice becomes In Payment — the money is recorded against an outstanding account but has not yet been matched to a real bank line. After bank reconciliation confirms the cash actually arrived, the status changes to Paid.
Creating invoices: from a sales order vs. manually
Invoices can be generated two ways. From the Sales app, confirming a quotation creates a sales order, and the Create Invoice button drafts the invoice automatically. What gets invoiced depends on the product's invoicing policy:
- Ordered quantities — invoice the quantity ordered, regardless of delivery (typical for services).
- Delivered quantities — invoice only what has actually been delivered (typical for stockable goods).
Alternatively, you can create an invoice manually in the Accounting or Invoicing app with no source order — useful for ad-hoc charges. Either way, the accounting result once posted is identical.
Down payments and partial payments
The Create Invoice wizard on a sales order offers more than a single full invoice. You can choose a down payment — either a fixed amount or a percentage of the order total — to bill the customer in advance; Odoo posts a down-payment invoice now and automatically deducts it from the final invoice raised later. On the receiving side, if a customer pays only part of what they owe, the invoice's status becomes Partially Paid and the unpaid residual stays open on the aged receivable until it is settled. Each posted invoice also exposes a Payment smart button listing the journal items reconciled against it, so you can always trace exactly which receipts cleared which invoice — an audit trail the exam expects you to recognize.
Payment terms and due dates
Payment terms control the invoice due date and can split a balance across multiple installments. Examples include Immediate Payment, 15 Days, 30 Days, End of Following Month, and compound terms such as 30% now, balance in 30 days. Odoo also supports early payment discounts (cash discounts) configured on the payment term, rewarding customers who pay before a cutoff. The due date drives both the aged receivable report and the follow-up engine.
The journal entry an invoice creates
When a customer invoice is posted, Odoo records a balanced journal entry. For a 1,000 invoice with 20% tax:
| Account | Debit | Credit |
|---|---|---|
| Accounts Receivable | 1,200 | |
| Product Sales (Income) | 1,000 | |
| Tax Received (Tax Payable) | 200 |
The receivable is debited for the gross total the customer owes; income is credited for the net revenue; and the tax account is credited for VAT collected on behalf of the tax authority. This debit-receivable / credit-income-plus-tax pattern is a guaranteed exam item — memorize the direction.
Registering payments and outstanding accounts
Clicking Register Payment on a posted invoice records the receipt. Instead of debiting the bank directly, Odoo debits an Outstanding Receipts account and credits Accounts Receivable, clearing the customer's balance. The invoice becomes In Payment. Later, during bank reconciliation, matching the payment to the real bank statement line moves the amount from Outstanding Receipts to the actual Bank account, and the invoice flips to Paid. This two-step design keeps the ledger accurate even when the cash and the paperwork arrive on different days.
Credit notes and refunds
To reverse or reduce a posted invoice, issue a credit note (also called a refund). Odoo offers three reversal modes: full refund, partial refund, and full refund and new draft invoice (to correct and reissue). A credit note mirrors the original entry — debiting income and tax, crediting receivable — so the customer's balance is reduced.
Sending invoices and following up
Posted invoices are delivered with Send & Print, which can email a PDF, provide an online payment link, or post a physical letter. For overdue receivables, Odoo's Follow-up Reports automate collection. You configure follow-up levels — each with a delay (for example, 15 days overdue, 30 days, 60 days) and an action such as send an email, send a letter, or schedule a manual call. Odoo evaluates the oldest overdue invoice against these levels and proposes the appropriate reminder, letting an accountant chase unpaid balances systematically rather than one invoice at a time.
You click Register Payment on a posted customer invoice, but you have not yet reconciled it against the bank statement. What is the invoice's payment status?
A 1,000 customer invoice with 20% tax is posted. Which journal entry does Odoo record?
A product's invoicing policy is set to 'Delivered quantities.' When you click Create Invoice on its sales order, what does Odoo bill?