POS: Caisse-AP payment protocol for France

l10n_fr_pos_caisse_ap_ip
REPOSITORY
REPOSITORYOCA/l10n-france
GIT
GIThttps://github.com/OCA/l10n-france.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-france/tree/19.0/l10n_fr_pos_caisse_ap_ip
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYPoint of Sale
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion
COMMITTERS
COMMITTERSAlexis de Lattre, OCA-git-bot, oca-ci
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-france
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:40:51
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - point_of_sale
    - resource
    - base
    - web
    - stock_account
    - stock
    - product
    - mail
    - base_setup
    - bus
    - web_tour
    - html_editor
    - uom
    - barcodes_gs1_nomenclature
    - barcodes
    - digest
    - portal
    - http_routing
    - auth_signup
    - account
    - onboarding
    - analytic
    - phone_validation
    - partner_autocomplete
    - iap_mail
    - iap
    - iot_base
    - google_address_autocomplete
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module adds support for the **Caisse AP** protocol over IP in the
Odoo Point of Sale.

The [Caisse AP
protocol](https://associationdupaiement.fr/protocoles/protocole-caisse/)
is a vendor-independent protocol used in France to communicate between a
point of sale and a payment terminal. It is implemented by
[Ingenico](https://ingenico.com/fr/produits-et-services/terminaux-de-paiement)
payment terminals, [Verifone](https://www.verifone.com/) payment
terminal and other brands of payment terminals. This protocol is
designed by a French association called [Association du
paiement](https://associationdupaiement.fr/), abbreviated as **AP**.
Note that the Caisse-AP protocol is used by Ingenico payment terminals
deployed in France, but not by the same model of Ingenico payment
terminals deployed in other countries!

This module support a bi-directionnal link with the payment terminal:

1.  it sends the amount to the payment terminal
2.  it waits for the end of the payment transaction
3.  it parses the answer of the payment terminal which gives the payment
    status: in case of success, the payment line is automatically
    validated ; in case of failure, an error message is displayed and
    the Odoo user can retry or delete the payment line.

The Caisse-AP protocol was initially written for serial and USB. Since
the Caisse AP protocol version 3.x, it also supports IP. When used over
IP, the client (point of sale) and the server (payment terminal)
exchange simple text data encoded as ASCII over a raw TCP socket.

The Caisse-AP protocol has one important drawback: as it uses a raw TCP
socket, it cannot be used from pure JS code. So the JS code of the point
of sale cannot generate the query to send the amount to the payment
terminal by itself. In this module, the JS code of the point of sale
sends a query to the Odoo server that opens a raw TCP socket to the
payment terminal. It implies that, if the Odoo server is not on the LAN
but somewhere on the Internet and the payment terminal has a private IP
on the LAN, you will need to setup a TCP port forwarding rule on the
firewall to redirect the TCP connection of the Odoo server to the
payment terminal.

Code Analysis

Views touched (1)
XML IDNameModelTypeStatus
pos_payment_method_view_form pos.payment.method field Inherits point_of_sale.pos_payment_method_view_form
Models touched (1)

New fields (3)
  • fr_caisse_ap_ip_address Char
    help='IP address or DNS name of the payment terminal that support Caisse-AP protocol over IP' string='Caisse-AP Payment Terminal IP Address'
  • fr_caisse_ap_ip_mode Selection
    default='card' string='Payment Mode' args: [('card', 'Card'), ('check', 'Check')]
  • fr_caisse_ap_ip_port Integer
    default=8888 help='TCP port of the payment terminal that support Caisse-AP protocol over IP' string='Caisse-AP Payment Terminal Port'
Public methods (1)
  • fr_caisse_ap_ip_send_payment(self, data)
    @api.model
    Method called by the JS code of this module
REPOSITORY
REPOSITORYOCA/l10n-france
GIT
GIThttps://github.com/OCA/l10n-france.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-france/tree/18.0/l10n_fr_pos_caisse_ap_ip
VERSION
VERSION 1.4.0
CATEGORY
CATEGORYPoint of Sale
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion
COMMITTERS
COMMITTERSAlexis de Lattre, Weblate, OCA-git-bot, oca-ci
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-france
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:19
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - point_of_sale
    - stock_account
    - stock
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
    - uom
    - barcodes_gs1_nomenclature
    - barcodes
    - digest
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
    - account
    - onboarding
    - analytic
    - phone_validation
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module adds support for the **Caisse AP** protocol over IP in the
Odoo Point of Sale.

The [Caisse AP
protocol](https://associationdupaiement.fr/protocoles/protocole-caisse/)
is a vendor-independent protocol used in France to communicate between a
point of sale and a payment terminal. It is implemented by
[Ingenico](https://ingenico.com/fr/produits-et-services/terminaux-de-paiement)
payment terminals, [Verifone](https://www.verifone.com/) payment
terminal and other brands of payment terminals. This protocol is
designed by a French association called [Association du
paiement](https://associationdupaiement.fr/), abbreviated as **AP**.
Note that the Caisse-AP protocol is used by Ingenico payment terminals
deployed in France, but not by the same model of Ingenico payment
terminals deployed in other countries!

This module support a bi-directionnal link with the payment terminal:

1.  it sends the amount to the payment terminal
2.  it waits for the end of the payment transaction
3.  it parses the answer of the payment terminal which gives the payment
    status: in case of success, the payment line is automatically
    validated ; in case of failure, an error message is displayed and
    the Odoo user can retry or delete the payment line.

The Caisse-AP protocol was initially written for serial and USB. Since
the Caisse AP protocol version 3.x, it also supports IP. When used over
IP, the client (point of sale) and the server (payment terminal)
exchange simple text data encoded as ASCII over a raw TCP socket.

The Caisse-AP protocol has one important drawback: as it uses a raw TCP
socket, it cannot be used from pure JS code. So the JS code of the point
of sale cannot generate the query to send the amount to the payment
terminal by itself. In this module, the JS code of the point of sale
sends a query to the Odoo server that opens a raw TCP socket to the
payment terminal. It implies that, if the Odoo server is not on the LAN
but somewhere on the Internet and the payment terminal has a private IP
on the LAN, you will need to setup a TCP port forwarding rule on the
firewall to redirect the TCP connection of the Odoo server to the
payment terminal.

Code Analysis

Views touched (1)
XML IDNameModelTypeStatus
pos_payment_method_view_form pos.payment.method field Inherits point_of_sale.pos_payment_method_view_form
Models touched (1)

New fields (3)
  • fr_caisse_ap_ip_address Char
    help='IP address or DNS name of the payment terminal that support Caisse-AP protocol over IP' string='Caisse-AP Payment Terminal IP Address'
  • fr_caisse_ap_ip_mode Selection
    default='card' string='Payment Mode' args: [('card', 'Card'), ('check', 'Check')]
  • fr_caisse_ap_ip_port Integer
    default=8888 help='TCP port of the payment terminal that support Caisse-AP protocol over IP' string='Caisse-AP Payment Terminal Port'
Public methods (1)
  • fr_caisse_ap_ip_send_payment(self, data)
    @api.model
    Method called by the JS code of this module
REPOSITORY
REPOSITORYOCA/l10n-france
GIT
GIThttps://github.com/OCA/l10n-france.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-france/tree/17.0/l10n_fr_pos_caisse_ap_ip
VERSION
VERSION 1.4.0
CATEGORY
CATEGORYPoint of Sale
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion
COMMITTERS
COMMITTERSAlexis de Lattre, Daniel Reis, Weblate, OCA-git-bot, oca-ci
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-france
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:20:11
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - point_of_sale
    - stock_account
    - stock
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - barcodes_gs1_nomenclature
    - barcodes
    - digest
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
    - account
    - onboarding
    - analytic
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module adds support for the **Caisse AP** protocol over IP in the
Odoo Point of Sale.

The [Caisse AP
protocol](https://www.associationdupaiement.fr/protocoles/protocole-caisse/)
is a vendor-independent protocol used in France to communicate between a
point of sale and a payment terminal. It is implemented by
[Ingenico](https://ingenico.com/fr/produits-et-services/terminaux-de-paiement)
payment terminals, [Verifone](https://www.verifone.com/) payment
terminal and other brands of payment terminals. This protocol is
designed by a French association called [Association du
paiement](https://www.associationdupaiement.fr/), abbreviated as **AP**.
Note that the Caisse-AP protocol is used by Ingenico payment terminals
deployed in France, but not by the same model of Ingenico payment
terminals deployed in other countries!

This module support a bi-directionnal link with the payment terminal:

1.  it sends the amount to the payment terminal
2.  it waits for the end of the payment transaction
3.  it parses the answer of the payment terminal which gives the payment
    status: in case of success, the payment line is automatically
    validated ; in case of failure, an error message is displayed and
    the Odoo user can retry or delete the payment line.

The Caisse-AP protocol was initially written for serial and USB. Since
the Caisse AP protocol version 3.x, it also supports IP. When used over
IP, the client (point of sale) and the server (payment terminal)
exchange simple text data encoded as ASCII over a raw TCP socket.

The Caisse-AP protocol has one important drawback: as it uses a raw TCP
socket, it cannot be used from pure JS code. So the JS code of the point
of sale cannot generate the query to send the amount to the payment
terminal by itself. In this module, the JS code of the point of sale
sends a query to the Odoo server that opens a raw TCP socket to the
payment terminal. It implies that, if the Odoo server is not on the LAN
but somewhere on the Internet and the payment terminal has a private IP
on the LAN, you will need to setup a TCP port forwarding rule on the
firewall to redirect the TCP connection of the Odoo server to the
payment terminal.

Code Analysis

Views touched (1)
XML IDNameModelTypeStatus
pos_payment_method_view_form pos.payment.method field Inherits point_of_sale.pos_payment_method_view_form
Models touched (1)

New fields (3)
  • fr_caisse_ap_ip_address Char
    help='IP address or DNS name of the payment terminal that support Caisse-AP protocol over IP' string='Caisse-AP Payment Terminal IP Address'
  • fr_caisse_ap_ip_mode Selection
    default='card' string='Payment Mode' args: [('card', 'Card'), ('check', 'Check')]
  • fr_caisse_ap_ip_port Integer
    default=8888 help='TCP port of the payment terminal that support Caisse-AP protocol over IP' string='Caisse-AP Payment Terminal Port'
Public methods (1)
  • fr_caisse_ap_ip_send_payment(self, data)
    @api.model
    Method called by the JS code of this module
REPOSITORY
REPOSITORYOCA/l10n-france
GIT
GIThttps://github.com/OCA/l10n-france.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-france/tree/16.0/l10n_fr_pos_caisse_ap_ip
VERSION
VERSION 1.4.0
CATEGORY
CATEGORYPoint of Sale
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion
COMMITTERS
COMMITTERSAlexis de Lattre, Weblate, OCA-git-bot, Pierrick Brun, oca-ci
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-france
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:53:59
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - point_of_sale
    - stock_account
    - stock
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - barcodes_gs1_nomenclature
    - barcodes
    - digest
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
    - account
    - analytic
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (1)
XML IDNameModelTypeStatus
pos_payment_method_view_form pos.payment.method field Inherits point_of_sale.pos_payment_method_view_form
Models touched (1)

New fields (3)
  • fr_caisse_ap_ip_address Char
    help='IP address or DNS name of the payment terminal that support Caisse-AP protocol over IP' string='Caisse-AP Payment Terminal IP Address'
  • fr_caisse_ap_ip_mode Selection
    default='card' string='Payment Mode' args: [('card', 'Card'), ('check', 'Check')]
  • fr_caisse_ap_ip_port Integer
    default=8888 help='TCP port of the payment terminal that support Caisse-AP protocol over IP' string='Caisse-AP Payment Terminal Port'
Public methods (1)
  • fr_caisse_ap_ip_send_payment(self, data)
    @api.model
    Method called by the JS code of this module
REPOSITORY
REPOSITORYOCA/l10n-france
GIT
GIThttps://github.com/OCA/l10n-france.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-france/tree/14.0/l10n_fr_pos_caisse_ap_ip
VERSION
VERSION 1.4.0
CATEGORY
CATEGORYPoint of Sale
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion
COMMITTERS
COMMITTERSAlexis de Lattre, Weblate, OCA-git-bot, oca-ci
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-france
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:41:11
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - point_of_sale
    - stock_account
    - stock
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - barcodes
    - digest
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
    - account
    - analytic
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (2)
XML IDNameModelTypeStatus
assets assets ir.ui.view qweb Inherits point_of_sale.assets
pos_payment_method_view_form pos.payment.method field Inherits point_of_sale.pos_payment_method_view_form
Models touched (1)

New fields (3)
  • fr_caisse_ap_ip_address Char
    help='IP address or DNS name of the payment terminal that support Caisse-AP protocol over IP' string='Caisse-AP Payment Terminal IP Address'
  • fr_caisse_ap_ip_mode Selection
    default='card' string='Payment Mode' args: [('card', 'Card'), ('check', 'Check')]
  • fr_caisse_ap_ip_port Integer
    default=8888 help='TCP port of the payment terminal that support Caisse-AP protocol over IP' string='Caisse-AP Payment Terminal Port'
Public methods (1)
  • fr_caisse_ap_ip_send_payment(self, data)
    @api.model
    Method called by the JS code of this module