intermediate
refunds
billing
per-minute

Overcharge Reconciliation

Why a ride sometimes shows a tiny automatic wallet credit, how the live per-minute meter is reconciled against the final fare, and what riders, operators, and super admins each see.

Levy Fleets Team3 juin 20268 min read

Overcharge Reconciliation

While a ride is running, Levy charges the rider's wallet as they go (a small debit every minute). When the ride ends, the system recalculates the final fare from scratch. Occasionally the running meter collected a few cents more than the final fare works out to. When that happens, Levy automatically credits the difference back to the rider's wallet. We call this overcharge reconciliation.

The rider always pays the correct fare

This is a self-correcting safeguard for small live-meter differences. The rider is automatically made whole — they end up paying the final calculated fare. Usually no action is required from the rider or the operator.

Why it happens

Two different systems price a ride, and they can disagree by about one minute around a pause:

  • Live billing (during the ride) charges minute-by-minute. It uses the cheaper pause rate only for the minutes when it checks in and finds the ride paused.
  • The final fare (at ride end) takes the total paused time, rounds it to whole minutes, and prices those at the pause rate.

On a short pause — say 95 seconds — the final fare rounds that up to 2 pause minutes, but the live meter may only have caught the pause once while it was running. That one extra minute the final fare counts as "pause" was billed live at the higher active rate. The difference between the two rates (plus tax) is the overcharge that gets credited back.

A few other things can cause a small difference too (daily caps, promo codes, or loyalty discounts that are only finalized at ride end). All of them are handled by the same reconciliation step.

Example

A ride with a ZAR 5.00/min active rate and a ZAR 2.00/min pause rate, with a ~95-second pause:

Amount
Live meter collectedZAR 358.80
Final fare (correct)ZAR 355.35
Auto-credited to walletZAR 3.45

The ZAR 3.45 = one minute priced at the active rate (ZAR 5) instead of the pause rate (ZAR 2) = ZAR 3.00, plus 15% VAT = ZAR 3.45.

What each role sees

1

Rider

The difference is credited to their in-app wallet automatically. They are never overcharged on net.

2

Operators and most dashboard roles

These reconciliations are hidden on the ride page. Because they are an internal rounding correction (not a customer-initiated or operator-initiated refund), showing them as a "Refund" caused confusion. They no longer appear in the ride's refund list or "Total Refunded" total.

3

Super admins

Super admins still see everything — the reconciliation appears in the ride's refund history and in the admin Stripe fee / net-deposited breakdown — for full transparency and auditing.

How it's recorded

Even though it's hidden from most views, every reconciliation is fully recorded:

  • A row is written to ride_refunds with refund_type: wallet, status: succeeded, and the reason "Overcharge reconciliation: per-minute billing exceeded final fare."
  • The rider's wallet balance is credited (never a card refund — wallet credits are instant and fee-free).
  • Internal financial records are updated so the correction remains auditable.

Identifying one

In the data, these refunds carry metadata.type = "overcharge_reconciliation". They are always wallet credits and almost always a few cents to a couple of dollars.

How common and how large

These are small and infrequent — on the order of a couple percent of rides, typically cents each, most often on rides that were paused. Because they self-correct at ride end, they usually require no monitoring or intervention.

When to be concerned

Escalate only if the amount is unusually large, if the same rider or subaccount shows repeated large corrections, or if a rider believes they were overcharged by a meaningful amount. For those cases, see Understanding Ride Charges and its "Customer Says I Was Overcharged" troubleshooting steps, which cover pause time, dynamic pricing, benefits, and promo codes.