Skip to content

Full, partial, and split payments

Every checkout in Fexl Lite picks one of three payment types: full (the customer pays the whole amount in one method), partial (the customer pays some now and leaves the rest on their tab), or split (the customer pays the whole amount across two or more methods). The Checkout dialog enforces a different validation gate for each, and they post different journal entries — but they all share the same overall shape: pick the type, fill in the amounts, hit Complete Sale.

Updated 4 May 2026·For v2.2.0·5 min read
Charge dialog — three-step header (Customer + Payment / Card terminal / Sale complete), customer-search box with Walk-in default, payment-method dropdown (Cash) with amount field, More Options drawer, and the Charge USD 18 confirm button

Full payment

The default. Customer pays the entire invoice total in a single payment method.

1

Pick a payment method

Tap one of the configured methods (cash, card, bank transfer, mobile wallet — whatever you set in Sales settings). The amount field auto-fills with the invoice total.

2

On a cash payment, optionally enter the amount tendered

If the customer hands you a round number bigger than the total, type it into the amount field. The change-due line appears underneath. Card and transfer payments don’t show change-due — the customer pays exactly the total.

3

Complete Sale

F9 or click the button. The invoice posts with payment_type='full'.

What posts: DR cash sub-account or DR Bank (1020) for the full gross amount; CR Sales Revenue (4010) net of VAT, plus CR VAT Payable (2020) if applicable; the COGS leg posts separately at FIFO cost.

Partial payment

The customer pays part of the total now and leaves the rest as debt against their account. Use it for “I’ll pay £30 now and the rest at the end of the month” or “Mr Hassan’s running tab.”

Partial payments must be enabled in Settings → Sales. They also require an attached customer — there’s no anonymous partial payment, because the unpaid amount has to land on someone’s tab.

1

Attach a customer to the cart

Tap the customer chip in the cart header and pick or create a customer. Without a customer, the Partial tab is greyed out.

2

Open Checkout, switch to the Partial tab

The Partial tab appears next to Full when both the setting is on and a customer is attached.

3

Enter the amount paid

Type the cash/card amount the customer is handing over now. The remaining balance (“Unpaid: £70.00”) shows live below — that’s what’ll land on the customer’s tab.

Setting paid = 0 is a special case: this is Pay Later. The customer walks out without paying anything now; the entire invoice total becomes debt. Useful for credit-customer / COD flows. The payment-method requirement is relaxed for Pay Later — you don’t need to pick a method when no money moves.

4

Pick the payment method (if paid > 0)

Cash, card, transfer — whatever method the cash leg lands on. Skipped when paid = 0 (Pay Later).

5

Complete Sale

The invoice posts with payment_type='partial', paid_amount = what they paid, and amount_owed = total − paid. The customer’s balance (gross debt) ticks up by amount_owed.

What posts: Same revenue / VAT / COGS pattern as a full payment, plus the unpaid portion lands as DR Accounts Receivable (1100) instead of cash. The customer’s running AR balance shows on the debt-and-credit page; the AR Aging report ages it from the invoice date.

See Pay Later & COD for the zero-paid variant in detail.

Split payment

The customer pays the whole amount, but across two or more methods. “Half on card, half in cash.” “Cash plus mobile money plus a £10 voucher.”

Split payments must be enabled in Settings → Sales. They settle the invoice in full — there’s no “split with leftover” option (use partial for that).

1

Open Checkout, switch to the Split tab

Above the amount field, the Split tab shows when the setting is on. There’s no customer requirement.

2

Add split rows

Each row is (method, amount). Click Add Method to insert another row. Adjust amounts until the total matches the invoice exactly.

The dialog shows a live Σ split / Total ratio and a coloured chip:

  • Green ✓ — sums match. Complete Sale unlocks.
  • Amber Σ < total — short by (total − Σ). Add or top up a method.
  • Amber Σ > total — overpaid by (Σ − total). The change-due display shows the excess; required to be paid out of the cash split row specifically, never out of a card row (you can’t give change on a card — terminals don’t refund spontaneously).
3

Confirm

Complete Sale. The invoice posts with payment_type='split', paid_amount = total, and a split_payments array on the row carrying every (method, amount, paymentMethodId) triple.

What posts: One JE per invoice with multiple cash/bank/wallet legs. Each split row writes its own DR line at the right account code (cash sub-account for cash, 1020 for card, 1030 for mobile money), summing to the gross paid. The CR side (revenue, VAT, COGS / inventory) is the same as a full or partial payment — only the DR cash leg fans out across rows.

Implicit COD fallback

If you complete a sale without picking a payment type, Fexl Lite falls back to partial with paid = 0 when a customer is attached, treating the whole invoice as a tab. This handles the case where a delivery driver hands over goods first and collects later — no explicit checkout step from the cashier. #9 v1.6.100 made the fallback explicit and surfaced an “Implicit COD” status badge on the invoice list so you can spot these without trawling JSON.

Validation rules at a glance

RuleWhere it fires
Partial requires the setting and an attached customerTab is hidden otherwise
Partial paid must be < totalToast on Complete
Partial with paid = 0 (Pay Later) accepts no payment methodValidation relaxed
Split requires Σ split == total (exact)Complete button disabled
Split overpayment must come out of cash splitToast on Complete
Card payments can’t give cash changeImplicit on the cash-only-change rule
Comp invoices skip every payment validationDifferent flow entirely