Odoo 18 POS Payment Screen Typing Lag: Root Cause and Safe Fix
Learn why Odoo 18 POS lags when cashiers type payment amounts quickly on the Payment Screen, and how to fix it safely with a small frontend patch.
Some POS issues do not crash the system, throw no visible error, and still hurt cashier productivity in a very real way. One of those issues is the payment amount typing lag on the Odoo 18 POS Payment Screen.
At first glance, this problem looks like a rendering delay, a slow currency formatter, or even weak hardware. But after digging deeper, the real cause turns out to be much more specific: the way Odoo core handles buffered numeric input on the frontend.
This article covers three things:
- What the issue looks like in real-life POS usage
- Why Odoo 18 POS lags when cashiers type amounts quickly
The safest way to optimize and fix it

The real-world symptom
A very common cashier workflow looks like this:
- Order total: 46,000 VND
- Customer pays: 50,000 VND
- The cashier quickly types 50000 on the Payment Screen
The expected behavior is simple: the screen should immediately show 50,000.
However, in some Odoo 18 POS setups, the amount appears in visible steps:
- 500
- then 5,000
- then finally 50,000
The delay between those steps is noticeable enough that users feel the system is lagging, missing digits, or responding too slowly.
This is more than a cosmetic issue. In retail, pharmacy, and fast checkout environments, even a small delay repeated across many transactions can slow down the whole operation.
Why is this issue easy to misdiagnose
When developers first see this behavior, the usual suspects are:
- heavy re-rendering
- slow currency formatting
- custom module interference
- low-performance POS hardware
Those are reasonable assumptions, but they are not the core cause here.
The most important clue is that the number does not simply update late. Instead, it tends to appear in chunks. That pattern usually points to buffered input handling, not a normal rendering delay.
The root cause: Odoo 18 NumberBuffer behavior
In Odoo 18 POS, the Payment Screen relies on NumberBuffer to process numeric input.
The key detail is that the Payment Screen configures it with:
useWithBarcode: true
That single setting creates two important effects.
1. Input is processed with barcode-style timing
When useWithBarcode is enabled, NumberBuffer follows the barcode timing behavior instead of reacting immediately to each keypress.
In practice, that means:
- Input is collected into a buffer
- processing is delayed briefly
- Keys typed very quickly may be grouped together
That behavior makes sense for barcode input, but it is not ideal for a cashier manually typing payment amounts.
2. Fast input can be displayed in delayed chunks
When multiple key events arrive too quickly within the same timing window, the UI may not reflect them one by one in real time.
That is why users see:
- delayed amount updates
- step-by-step jumps
- a feeling that the system is “eating” digits
Even when the logic eventually updates the payment line, the user experience is already degraded.
Why does this matter specifically on the Payment Screen
The Payment Screen is not the same as the Product Screen.
On the Product Screen:
- Barcode scanning is a primary use case
- Barcode-style timing is acceptable and often necessary
On the Payment Screen:
- The main task is fast manual amount entry
- Users need instant feedback
- Every keystroke should be visible right away
Applying barcode-oriented buffering to the payment amount field creates friction in a place where speed and responsiveness matter the most.
The safest fix
Instead of rewriting the entire service or touching backend logic, the safest approach is to patch only the Payment Screen and override _getNumberBufferConfig so that:
useWithBarcode: false
With that small change:
- Manual amount typing is no longer handled with barcode timing
- Each key is processed much more immediately
- The stepping effect is removed or significantly reduced
- The scope of change stays very limited
Why this fix is the best first option
This approach is usually the best first fix because it offers several advantages.
Small scope
It affects only the Payment Screen instead of changing POS-wide behavior.
Low risk
There is no database migration, no schema change, and no backend accounting impact.
Easy rollback
If needed, you can remove the patch module and restore the original core behavior.
Operationally safe
Tax calculation, payment methods, accounting entries, and order validation logic remain untouched.
When you should inspect custom modules too
Even if the core behavior explains the root cause, you should still inspect custom POS modules if your project includes them, especially anything that touches:
- PaymentScreen
- NumberBuffer
- custom numpad logic
- keydown or keyup listeners
- custom currency formatting
- popups or overlays affecting input
- async logic triggered on amount updates
The core issue may be the starting point, but customizations can absolutely make the symptom worse.
Final thoughts
The Odoo 18 POS payment typing lag is not just a visual delay. It is a frontend input-handling problem caused by applying barcode-style buffering to a manual amount entry workflow.
If your POS shows symptoms like:
- delayed amount updates
- visible step-by-step number growth
- cashier complaints about missing or slow key input
then this is one of the first places you should inspect before blaming the backend or the database.
In most cases, a small Payment Screen patch that disables useWithBarcode is the simplest, safest, and most effective optimization path.
Implementation tip: before rolling the fix into production, test it in staging with:
- slow amount entry
- very fast amount entry
- multiple browsers or POS devices
That gives you confidence that the fix solves the input issue without introducing unwanted side effects.