Running an HVAC business with Odoo

How do I issue a credit note and record a refund in Odoo?

Workflow overview: How do I issue a credit note and record a refund in Odoo?
Workflow overview. Instructional screenshots show the actual demo interface.

Create a partial Odoo price-allowance credit note, preserve billed quantities and stock, then record a separate synthetic customer refund and verify its residual.

Alex needs to record a partial commercial allowance against an already paid HVAC invoice. This example credits $20 plus $1.20 demo tax, then records a separate $21.20 repayment. We replace the copied reversal lines with a standalone allowance, so the final credit does not reverse billed material or time quantities. The original invoice and its receipts remain intact.

Alex Rivera and Demo Air HVAC are fictional training examples. Prices, dates, quantities and business situations in this guide are illustrative.

Before you begin

Tested in stock Odoo 20.0-20260926 Community as the demo owner administrator, with official modules and standard configuration. Use INV/2026/00001 from the time-and-materials invoice guide, paid by the two manual receipts in the customer payments guide, and the existing Demo Operating Bank H73 journal. Original total is $171.72 and Amount Due is $0. S00007 has two filters invoiced; S00008 has 1.5 Hours invoiced, with zero quantity currently left to bill. The training input explicitly assumes a $20 commercial allowance plus the same 6% demo tax and a separate fictional $21.20 repayment dated October 14, reference DEMO-H57-REFUND-001. These inputs are not actual customer approval or bank evidence. In a real case, establish the actual correction, tax/account treatment and independently confirmed repayment. A physical goods return uses a separate stock-return procedure.

Step-by-step workflow

Step 1. Review the original invoice and correction type

Open the original Posted invoice. Check number, customer Demo Property H08, Billing Office H08, $171.72 total, two linked receipts and $0 due. Distinguish a commercial price allowance from a return of two filters or 1.5 Hours. This lesson uses the allowance only; it does not undo actual stock movements, recorded time or the original receipts.

Action 1: Review original INV/2026/00001, already Paid. The actual target is highlighted in gold.
Review original INV/2026/00001, already Paid.
Action 2: Original invoice billed 1.5 labor Hours and two filters. The actual target is highlighted in gold.
Original invoice billed 1.5 labor Hours and two filters.
Action 3: Keep both original receipts and zero Amount Due intact. The actual target is highlighted in gold.
Keep both original receipts and zero Amount Due intact.

Step 2. Create a reviewable reversal draft

Click Credit Note. In the Credit Note dialog, enter the clear training allowance reason in Reason displayed on Credit Note, check Journal: Sales and Reversal date: Oct 14. Click Reverse once. The separate Reverse and Create Invoice option is not used. The result is one Draft Customer Credit Note linked to INV/2026/00001. It initially copies the full $171.72 and both original sales-linked product lines. Do not post this full copy for a $21.20 allowance.

Action 4: Create a reviewable credit draft from this invoice. The actual target is highlighted in gold.
Create a reviewable credit draft from this invoice.
Action 5: State the fictional partial price allowance, not a quantity return. The actual target is highlighted in gold.
State the fictional partial price allowance, not a quantity return.
Action 6: Check the existing Sales journal. The actual target is highlighted in gold.
Check the existing Sales journal.
Action 7: Choose the explicit historical reversal date. The actual target is highlighted in gold.
Choose the explicit historical reversal date.
Action 8: Use October 14, 2026 for this training credit. The actual target is highlighted in gold.
Use October 14, 2026 for this training credit.
Action 9: Reverse once to make the draft; do not post the full copy. The actual target is highlighted in gold.
Reverse once to make the draft; do not post the full copy.
Action 10: This separate Draft initially copies the full credit amount. The actual target is highlighted in gold.
This separate Draft initially copies the full credit amount.

Step 3. Replace the copied quantity reversals with one allowance line

In this credit draft’s Invoice Lines, use Delete row to remove its copied labor and filter lines. These are the new credit lines, not the original invoice. Click Add a line. Enter H57 TRAINING commercial price allowance only - no goods or time quantity return as the plain line description, retain Quantity 1.00 and set Price 20.00. The native line accepts this description without selecting or creating a product. Its existing default tax is 6%. This creates a separate amount line for the allowance.

Action 11: Remove only the copied labor row from this new credit. The actual target is highlighted in gold.
Remove only the copied labor row from this new credit.
Action 12: Remove only the copied filter row from this new credit. The actual target is highlighted in gold.
Remove only the copied filter row from this new credit.
Action 13: Add a standalone allowance line. The actual target is highlighted in gold.
Add a standalone allowance line.
Action 14: Enter a plain allowance description without selecting a product. The actual target is highlighted in gold.
Enter a plain allowance description without selecting a product.
Action 15: Retain Quantity 1 for the standalone allowance. The actual target is highlighted in gold.
Retain Quantity 1 for the standalone allowance.
Action 16: Set the standalone allowance Price to 20.00. The actual target is highlighted in gold.
Set the standalone allowance Price to 20.00.
Action 17: Check the existing 6% demo tax on the allowance. The actual target is highlighted in gold.
Check the existing 6% demo tax on the allowance.

Step 4. Save and verify the partial draft before posting

Commit the last cell by clicking the heading, then use Save manually and wait for pending changes to clear. Check one allowance line and $20 untaxed + $1.20 tax = $21.20. The saved line uses existing Product Sales in this demo, with no product or sales-line quantity link. Select appropriate real account/tax treatment with your accounting process. The saved check restores the original orders to two filters/1.5 Hours invoiced and zero left to invoice. The initial copied credit draft had temporarily made those original quantities invoiceable again; review credit drafts before any further billing.

Action 18: Save the partial credit draft and wait for it to settle. The actual target is highlighted in gold.
Save the partial credit draft and wait for it to settle.
Action 19: Saved partial draft: 20.00 plus 1.20 tax equals 21.20. The actual target is highlighted in gold.
Saved partial draft: 20.00 plus 1.20 tax equals 21.20.

Step 5. Retain context and post the reviewed credit

Preserve the copied historical billing context and append a clear H57 allowance note: amount, original invoice, no quantity/physical return and no money movement from posting. Save pending changes and use Confirm. The credit becomes Posted, number RINV/2026/00001, dated October 14, with $21.20 Amount Due and unpaid payment state. The original invoice remains Posted/Paid at $0 due. Creating/posting this credit has not created a refund payment.

Action 20: Append H57 allowance context while retaining prior billing history. The actual target is highlighted in gold.
Append H57 allowance context while retaining prior billing history.
Action 21: Save the appended context if changes are pending. The actual target is highlighted in gold.
Save the appended context if changes are pending.
Action 22: Confirm the reviewed 21.20 credit once; posting does not refund money. The actual target is highlighted in gold.
Confirm the reviewed 21.20 credit once; posting does not refund money.
Action 24: Amount Due is 21.20; no refund payment exists yet. The actual target is highlighted in gold.
Amount Due is 21.20; no refund payment exists yet.

Step 6. Record the separate confirmed repayment

After independently confirming the actual repayment (the training case supplies only fictional confirmation), click the credit’s Pay button. Verify Journal: Demo Operating Bank H73, Amount 21.20 and Payment Date: Oct 14. Enter DEMO-H57-REFUND-001 in Memo. Recipient Account is blank in this Manual Payment example; no electronic disbursement is initiated. Click Create Payment once and wait for the credit to update. Do not enter another payment for the same repayment.

Action 25: Record the separate fictional repayment through Pay. The actual target is highlighted in gold.
Record the separate fictional repayment through Pay.
Action 26: Use the existing Demo Operating Bank H73 journal. The actual target is highlighted in gold.
Use the existing Demo Operating Bank H73 journal.
Action 27: Recipient Account is blank; Manual Payment sends no money. The actual target is highlighted in gold.
Recipient Account is blank; Manual Payment sends no money.
Action 28: Record only the fictional confirmed repayment of 21.20. The actual target is highlighted in gold.
Record only the fictional confirmed repayment of 21.20.
Action 29: Open Payment Date to use the training date. The actual target is highlighted in gold.
Open Payment Date to use the training date.
Action 30: Set and commit October 14, 2026 for this training repayment. The actual target is highlighted in gold.
Set and commit October 14, 2026 for this training repayment.
Action 31: Use the unique fictional repayment reference. The actual target is highlighted in gold.
Use the unique fictional repayment reference.
Action 32: Check 21.20, October 14, journal and memo before creating. The actual target is highlighted in gold.
Check 21.20, October 14, journal and memo before creating.
Action 33: Create this one synthetic outgoing payment once. The actual target is highlighted in gold.
Create this one synthetic outgoing payment once.

Step 7. Check the credit and outgoing customer payment

The credit now shows Paid Customer Credit Note, a paid row of $21.20 and Amount Due: $0.00, with Pay hidden. Open 1 Payments. Verify PBNK1/2026/00005, type Send (not Receive), customer Billing Office H08, $21.20, October 14, the unique memo, the chosen journal and Manual Payment method. Its status is Reconciled and 1 Credit Note links back to this credit. This is the recorded refund, separate from the original two inbound receipts.

Action 34: The credit now has zero Amount Due. The actual target is highlighted in gold.
The credit now has zero Amount Due.
Action 35: The credit shows one recorded payment of 21.20. The actual target is highlighted in gold.
The credit shows one recorded payment of 21.20.
Action 36: Open the credit’s one recorded payment. The actual target is highlighted in gold.
Open the credit’s one recorded payment.
Action 37: Saved refund PBNK1/2026/00005. The actual target is highlighted in gold.
Saved refund PBNK1/2026/00005.
Action 38: Payment Type is Send, not Receive. The actual target is highlighted in gold.
Payment Type is Send, not Receive.
Action 39: The outgoing amount is 21.20 for Billing Office H08. The actual target is highlighted in gold.
The outgoing amount is 21.20 for Billing Office H08.
Action 40: The recorded refund date is October 14. The actual target is highlighted in gold.
The recorded refund date is October 14.
Action 41: The unique memo identifies this fictional repayment. The actual target is highlighted in gold.
The unique memo identifies this fictional repayment.
Action 42: Manual Payment records repayment; it does not initiate a transfer. The actual target is highlighted in gold.
Manual Payment records repayment; it does not initiate a transfer.

Step 8. Inspect the actual credit-note PDF

Return to the credit and click Print. Open the genuine downloaded PDF and check Credit Note RINV/2026/00001, billing contact, date, original invoice/reversal reference, the single allowance description, 1.00 units at $20, $1.20 demo tax, $21.20 total and $0 due. The captured output spans two pages and retains the configured placeholder logo and fictional-company footer; review both pages. Its Source field retains S00007/S00008 as historical references; those references do not mean this new allowance line reverses their billed quantities.

Action 43: Return through the payment’s one linked Credit Note. The actual target is highlighted in gold.
Return through the payment’s one linked Credit Note.
Action 44: Print and download the genuine credit-note PDF for review. The actual target is highlighted in gold.
Print and download the genuine credit-note PDF for review.

Example credit note

This fictional example is the two-page PDF downloaded from Odoo. The first page shows the allowance, tax, recorded repayment and zero amount due. The second page continues the allowance note and company footer.

Download the example credit note (PDF, 2 pages)

Page 1 of the fictional Odoo credit note: a $20 allowance, $1.20 demo tax, $21.20 recorded repayment and $0 due.
Example credit note — page 1 of 2. Open the image to inspect it at full size.
Page 2 of the fictional Odoo credit note: the continued training allowance note and company footer.
Example credit note — page 2 of 2. Open the image to inspect it at full size.

Step 9. Reopen the original and verify the accounting boundary

Use the payment’s 1 Credit Note and the credit’s Invoice button to return to the original. It retains 2 Payments, 1 Credit Notes, its original product lines and $0 due. The saved credit/payment receivable match is $21.20, while the refund’s Outstanding Payments credit remains unmatched at $21.20. No Bank-account entry, bank transfer or statement reconciliation occurred. Source quantities, the original 1.5-hour time entry/invoice link and two filters in the van remain unchanged. Reopen retained exactly one credit and one new outgoing payment; broader duplicate/refund cases were not tested.

Action 43: Return through the payment’s one linked Credit Note. The actual target is highlighted in gold.
Return through the payment’s one linked Credit Note.
Action 45: Use Invoice to reopen the unchanged original invoice. The actual target is highlighted in gold.
Use Invoice to reopen the unchanged original invoice.
Action 46: Original INV/2026/00001 remains Paid. The actual target is highlighted in gold.
Original INV/2026/00001 remains Paid.
Action 47: The original retains its two inbound receipts. The actual target is highlighted in gold.
The original retains its two inbound receipts.
Action 48: One Credit Note links the separate allowance to this invoice. The actual target is highlighted in gold.
One Credit Note links the separate allowance to this invoice.
Action 49: Original billed labor and material quantities are retained. The actual target is highlighted in gold.
Original billed labor and material quantities are retained.
Action 50: Original Amount Due remains zero after the separate credit and refund. The actual target is highlighted in gold.
Original Amount Due remains zero after the separate credit and refund.
Action 23: Saved credit RINV/2026/00001. The actual target is highlighted in gold.
Saved credit RINV/2026/00001.

Check the result

One posted $21.20 Customer Credit Note references the original paid invoice and contains one productless, sales-unlinked $20 allowance with $1.20 demo tax. One separate October 14 Send payment for $21.20 clears the credit to Paid/residual zero and shows Reconciled. The original $171.72 invoice stays Paid with its two receipts and a link to this credit. Its original billed quantities and stock/time records are preserved, with zero quantity left to invoice. The native two-page credit PDF was downloaded, text-checked and visually inspected. The refund remains unmatched in Outstanding Payments; no Bank posting or actual transfer is established.

If your screen differs

The native Reverse draft copied every original line and temporarily reduced their net invoiced quantities even before posting. Removing those copied credit lines and saving a new standalone allowance restored the source quantities; this is a price-allowance case, not a product/time quantity return. Different correction types need their own review. The line’s account and 6% tax are existing synthetic defaults, not a tax/accounting recommendation. Reverse and Create Invoice, full cancellation, unpaid-invoice offsets, provider/card refunds, different roles and reversal of this refund were not exercised. Manual Payment records separately confirmed repayment; it does not send money. Reconciled here describes the credit/payment receivable match, while its outgoing outstanding entry remains unmatched. No general duplicate-proof guarantee is made.

Frequently asked questions

How do I issue a credit note in Odoo?

Open the intended posted invoice, use Credit Note, enter the reason/journal/date and choose Reverse to create a reviewable draft. Inspect every copied line and the partial amount before Confirm. This test replaced the full copied quantity reversals with one standalone $20 allowance plus $1.20 demo tax, retaining the original invoice link.

Does an Odoo credit note automatically refund money?

No. Posting the $21.20 credit left it unpaid and created no payment. A separate Pay → Create Payment step recorded the independently confirmed synthetic repayment. That matched the credit receivable, but left Outstanding Payments unmatched and created no Bank entry or actual transfer.

How do I record a partial customer refund in Odoo?

Review the partial credit and original receipts, independently confirm repayment, then use the credit’s Pay dialog with the actual journal, amount/date and unique memo. Verify an outgoing Send customer payment linked to the correct credit and its final residual. Here one $21.20 Manual Payment cleared a $21.20 allowance without changing the original billed filter/time quantities.

Continue building the business

Continue with H58: Can Odoo send reminders for overdue invoices? (guide coming later). This original invoice and its partial credit are both settled in the training records, so neither should be treated as an overdue unpaid balance. The bank review (guide coming later) remains a separate process with its open exceptions.

Talk to an Odoo partner

Bring your current process and the result you need to Onward to plan your Odoo workflow. Talk to an Odoo partner.