Overview
This module integrates the NEXGO N86 payment terminal with Odoo 19 Point of Sale. Communication is handled directly over the local network (Ethernet/WiFi) using the GPE ECR v13.14 protocol by Global Payments Czech Republic.
The terminal and the Odoo server must be on the same local network.
Supported Features
| Feature | Code | Description |
|---|---|---|
| Sale | T00 | Standard card payment |
| Reversal | T10 | Cancel the last approved transaction |
| Refund | T04 | Return funds to the cardholder's card |
| Handshake | T23 | Check terminal availability |
| Close Totals | T60 | End-of-day batch settlement |
| Auto Terminal ID | — | Filled automatically from the terminal's first response |
| CRC16-CCITT | — | Full protocol validation |
| Confirmation | — | Sent automatically after every transaction response |
Supported Cards
All cards supported by the terminal: Visa, Mastercard, Maestro, and others.
Currencies
Defaults to the company currency configured in Odoo. For CZK – ISO 4217 code 203.
Requirements
- Odoo 19 (Community or Enterprise)
- NEXGO N86 terminal configured for GPE ECR
- Terminal and server on the same local network
- Terminal configured to listen on port 2050
- Python 3.x (included with Odoo)
Installation
Step 1 – Copy the files
# Extract the archive
unzip payment_terminal_nexgo.zip
# Copy to the addons directory
sudo cp -rf payment_terminal_nexgo /opt/odoo19/odoo19/addons/
# Restart Odoo
sudo systemctl restart odoo19
Step 2 – Install via command line (recommended)
sudo systemctl stop odoo19
sudo -u odoo19 /opt/odoo19/odoo19/odoo-venv/bin/python3 \
/opt/odoo19/odoo19/odoo-bin \
--config /etc/odoo19.conf \
--database YOUR_DATABASE_NAME \
--init payment_terminal_nexgo \
--stop-after-init \
--logfile /dev/stderr 2>&1 | tail -10
sudo systemctl start odoo19
YOUR_DATABASE_NAME with your actual database name (e.g. odoo).
Alternative – Install via web interface
Configuration
1. Add a Terminal
Go to Point of Sale → Configuration → NEXGO Terminals → New
| Field | Description | Example |
|---|---|---|
| Terminal Name | Display name | Terminal01 |
| IP Address | Terminal's IP address | 192.168.1.109 |
| Port | TCP port | 2050 |
| Timeout (s) | Response timeout | 120 |
| ECR ID | 8-character ID from Global Payments | ODOO0001 |
| ECR Name | Name of the cash register software | Odoo POS |
| ECR Version | Software version | 19.0 |
| Terminal ID | Filled automatically | (leave blank) |
2. Test the Connection
Click the Test Connection button on the terminal record.
- Connected – terminal is reachable
- Error – network or configuration issue
3. Configure a Payment Method
Go to Point of Sale → Configuration → Payment Methods → New (or edit an existing one)
use_payment_terminal field is set automatically – no manual database changes required.
4. Add to POS Configuration
Go to Point of Sale → Configuration → Settings → Payment Methods and add the new payment method.
Using the Plugin in POS
Card Payment
Cancel Payment
Click Cancel while waiting – a Reversal (T10) is sent to the terminal.
Refund
Handled through the standard Odoo POS refund flow – the module sends T04 to the terminal.
End-of-Day Settlement
Go to Point of Sale → Configuration → NEXGO Terminals → [terminal] → Close Totals
Sends T60 to the terminal and closes the current transaction batch.
Protocol Structure (GPE ECR v13.14)
Troubleshooting
| Problem | Cause | Solution |
|---|---|---|
| Cannot connect | Wrong IP/port or network issue | Check IP, port 2050, and network connectivity |
| R103 – Format error | Malformed message | Update the module to the latest version |
| R106 – CRC error | CRC mismatch | See above |
| R108 – Terminal Busy | Terminal is processing another transaction | Wait and try again |
| Terminal does not react | JS module not loaded in POS bundle | Clear asset cache and restart Odoo |
| "Already in progress" | Previous transaction not completed | Close and reopen the POS session |
| State shows Disconnected after test | State not updated on connection failure | The Test Connection button now updates the state correctly |
Clear Asset Cache
sudo -u postgres psql YOUR_DATABASE_NAME -c \
"DELETE FROM ir_attachment WHERE url LIKE '/web/assets/%';"
sudo systemctl restart odoo19
Upgrade
When a new version of the module is available:
sudo cp -rf payment_terminal_nexgo /opt/odoo19/odoo19/addons/
sudo systemctl stop odoo19
sudo -u odoo19 /opt/odoo19/odoo19/odoo-venv/bin/python3 \
/opt/odoo19/odoo19/odoo-bin \
--config /etc/odoo19.conf \
--database YOUR_DATABASE_NAME \
--update payment_terminal_nexgo \
--stop-after-init \
--logfile /dev/stderr 2>&1 | tail -10
sudo systemctl start odoo19
Technical Notes
- post_init_hook – automatically sets
use_payment_terminal = nexgo_n86for all payment methods with an active NEXGO terminal upon installation or upgrade; no manual SQL required - Terminal ID – send 8 spaces on first connect; the value is saved automatically from the terminal's first response
- Timeout – defaults to 120 seconds, sufficient for chip+PIN transactions
- Confirmation messages – the protocol requires a confirmation after every transaction response; the module sends it automatically
- Amount encoding – amounts are sent in minor units without a decimal point (e.g. 1099 = 10.99 CZK)
License
OPL-1
GPE ECR Protocol v13.14 © Global Payments Czech Republic