Skip to main content

Charge Sale to Collection

How a credit (charge) sale at the pump becomes a customer invoice and, eventually, a collected payment in Odoo. This is the AR side of the CVGo flow — runs in parallel with the daily cycle whenever the station accepts a charge MOP (Shell Fleet Card, corporate accounts, etc.).

Who this is for

AR/billing staff (shell18_customer_invoicing) who issue invoices to fleet/corporate customers, and collection staff (shell18_collection) who register their payments. Read CVGo Daily Cycle first so you understand where these invoices come from.

When this happens

Every day the station accepts a charge MOP. CVGo posts the sale to a generic MOP partner (e.g. "Shell Fleet Card"), but that's not who actually owes you money — the specific fleet operator does. AR's job is to reassign the invoice to the real customer; Collection's job is to register the payment when it arrives.

Process map

Walkthrough

#RoleStepWhereYou're done when...Deep dive
1(system)Charge sale lands in CVGoThe CVGo POS Data record posts; an Invoice exists with partner = the MOP's generic partnerPosting
2AR clerkIdentify the actual customerOpen the SO; check Plate Number field, receipt details, and any fleet-card statementYou know which fleet customer this transaction belongs toSale Orders
3AR clerkSet Customer on the SOSO header > Set Customer buttonThe SO and all linked invoices now show the real customer as partnerSet Customer
4AR clerkSend the invoiceInvoice > Send & PrintCustomer has the invoice (PDF / email)
5Collection clerkCustomer pays(external)Payment received in bank or on hand
6Collection clerkRegister the paymentOpen the CVGo POS Data record > Register Payments, OR open the invoice > Register PaymentInvoice status becomes In Payment or PaidRegister Payment
7Collection clerkReconcile bank statementAccounting > Bank > match paymentsBank line is matched to the registered payment

Common variations

Partial payment

Situation: Customer pays less than the invoice total (e.g., paying off a previous balance). Handling: On the Register Payment wizard, override the payment amount. The invoice stays in In Payment with a residual balance until fully paid. Repeat for each partial payment received.

Wrong customer assigned

Symptom: AR clicked Set Customer with the wrong fleet operator. Recovery: Open the SO again and click Set Customer a second time with the correct customer. The system propagates the change to all linked invoices. Caveat: If the invoice has already been paid or partially paid, do not reassign — reverse the payment first to avoid orphaned account.payment records on the wrong partner.

Customer disputes a transaction

Situation: Fleet customer claims one of the receipts on their invoice wasn't theirs. Handling: Issue a credit note on the invoice for that line only (Accounting > Credit Notes). Do not delete or reverse the underlying CVGo transaction — it must remain for station-side reconciliation. The credit note is the audit trail.

Bulk batch invoicing for a fleet customer

Situation: A single fleet customer wants one consolidated invoice covering many days of charge sales. Handling: This isn't a single-button flow. Today, each day's CVGo charge sale produces its own invoice. To consolidate, the typical practice is to send a statement of account (Accounting > Customers > Statements) that lists all open invoices, and have the customer pay the lump sum against multiple invoices in one Register Payment action.

Charge MOP was auto-paid by mistake

Symptom: A charge MOP shows as Paid right after posting, but no money has actually been collected. Root cause: auto_confirm_payment was left on for that MOP account. Recovery: Reverse the auto-generated payment, then turn off auto_confirm_payment on the MOP — see MOP Accounts → Automation settings. Future charge sales will then correctly land as unpaid.

End-to-end checklist

  • Every charge-MOP invoice has been reassigned to a real customer (not the generic MOP partner)
  • No invoice is sitting on a cvgo_mop = True partner overnight
  • All received payments are registered against the correct invoice
  • Bank statements are reconciled to registered payments
  • Open AR aging matches the sum of unpaid charge invoices

Why the indirection?

CVGo doesn't know which fleet customer made the purchase — it only knows what card was swiped. The card belongs to "Shell Fleet Card" as a system, not to the specific fleet that issued it. The two-step pattern — post-to-MOP-partner, then reassign-to-real-customer — is what bridges this gap without losing the link between Odoo, CVGo, and the bank/card processor.