diff --git a/addons/account_edi_facturx/data/facturx_templates.xml b/addons/account_edi_facturx/data/facturx_templates.xml
index d676b67abf0577d1861c8b6b476f464082dbf21f..1a6f63177f2a013beeedd7c0bb1fc165804c0762 100644
--- a/addons/account_edi_facturx/data/facturx_templates.xml
+++ b/addons/account_edi_facturx/data/facturx_templates.xml
@@ -131,6 +131,8 @@
 
                     <!-- Partners. -->
                     <ram:ApplicableHeaderTradeAgreement>
+                        <ram:BuyerReference t-esc="buyer_reference or record.ref"/>
+
                         <!-- Seller. -->
                         <ram:SellerTradeParty>
                             <!-- Address. -->
@@ -161,8 +163,12 @@
 
                         <!-- Reference. -->
                         <ram:BuyerOrderReferencedDocument>
-                            <ram:IssuerAssignedID t-esc="record.payment_reference if record.payment_reference else record.name"/>
+                            <ram:IssuerAssignedID t-esc="purchase_order_reference or record.payment_reference or record.name"/>
                         </ram:BuyerOrderReferencedDocument>
+
+                        <ram:ContractReferencedDocument t-if="contract_reference">
+                            <ram:IssuerAssignedID t-esc="contract_reference"/>
+                        </ram:ContractReferencedDocument>
                     </ram:ApplicableHeaderTradeAgreement>
 
                     <!-- Delivery. Don't make a dependency with sale only for one field. -->
diff --git a/addons/account_edi_facturx/models/account_edi_format.py b/addons/account_edi_facturx/models/account_edi_format.py
index 302fbf7885ae0be01be3ae8d800f8a4641f04159..a77a184c0312c18ec9bee9ff1d0d87e2306223b2 100644
--- a/addons/account_edi_facturx/models/account_edi_format.py
+++ b/addons/account_edi_facturx/models/account_edi_format.py
@@ -95,6 +95,10 @@ class AccountEdiFormat(models.Model):
             'invoice_line_values': [],
             'seller_specified_legal_organization': seller_siret,
             'buyer_specified_legal_organization': buyer_siret,
+            # Chorus PRO fields
+            'buyer_reference': 'buyer_reference' in invoice._fields and invoice.buyer_reference or '',
+            'contract_reference': 'contract_reference' in invoice._fields and invoice.contract_reference or '',
+            'purchase_order_reference': 'purchase_order_reference' in invoice._fields and invoice.purchase_order_reference or '',
         }
         # Tax lines.
         # The old system was making one total "line" per tax in the xml, by using the tax_line_id.
diff --git a/addons/l10n_fr_facturx_chorus_pro/__init__.py b/addons/l10n_fr_facturx_chorus_pro/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..dc5e6b693d19dcacd224b7ab27b26f75e66cb7b2
--- /dev/null
+++ b/addons/l10n_fr_facturx_chorus_pro/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from . import models
diff --git a/addons/l10n_fr_facturx_chorus_pro/__manifest__.py b/addons/l10n_fr_facturx_chorus_pro/__manifest__.py
new file mode 100644
index 0000000000000000000000000000000000000000..1e12a851de3c2abb459355143ab3fc46fd58314b
--- /dev/null
+++ b/addons/l10n_fr_facturx_chorus_pro/__manifest__.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+{
+    'name': 'France - Factur-X integration with Chorus Pro',
+    'version': '1.0',
+    'category': 'Accounting/Localizations/EDI',
+    'description': """
+Add supports to fill three optional fields used when using Chorus Pro, especially when invoicing public services.
+""",
+    'depends': [
+        'account',
+        'account_edi_facturx',
+        'l10n_fr'
+    ],
+    'data': [
+        'views/account_move_views.xml',
+    ],
+    'license': 'LGPL-3',
+}
diff --git a/addons/l10n_fr_facturx_chorus_pro/i18n/fr.po b/addons/l10n_fr_facturx_chorus_pro/i18n/fr.po
new file mode 100644
index 0000000000000000000000000000000000000000..b9f7e80eb0dbca2da9076ea74d4861ec06167db9
--- /dev/null
+++ b/addons/l10n_fr_facturx_chorus_pro/i18n/fr.po
@@ -0,0 +1,83 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* l10n_fr_facturx_chorus_pro
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0+e\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-06-07 11:33+0000\n"
+"PO-Revision-Date: 2022-06-07 11:33+0000\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: l10n_fr_facturx_chorus_pro
+#: model:ir.model.fields,help:l10n_fr_facturx_chorus_pro.field_account_bank_statement_line__purchase_order_reference
+#: model:ir.model.fields,help:l10n_fr_facturx_chorus_pro.field_account_move__purchase_order_reference
+#: model:ir.model.fields,help:l10n_fr_facturx_chorus_pro.field_account_payment__purchase_order_reference
+msgid "'Engagement Juridique' in Chorus PRO."
+msgstr "'Engagement Juridique' dans Chorus PRO."
+
+#. module: l10n_fr_facturx_chorus_pro
+#: model:ir.model.fields,help:l10n_fr_facturx_chorus_pro.field_account_bank_statement_line__buyer_reference
+#: model:ir.model.fields,help:l10n_fr_facturx_chorus_pro.field_account_move__buyer_reference
+#: model:ir.model.fields,help:l10n_fr_facturx_chorus_pro.field_account_payment__buyer_reference
+msgid "'Service Exécutant' in Chorus PRO."
+msgstr "'Service Exécutant' dans Chorus PRO."
+
+#. module: l10n_fr_facturx_chorus_pro
+#: model:ir.model.fields,help:l10n_fr_facturx_chorus_pro.field_account_bank_statement_line__contract_reference
+#: model:ir.model.fields,help:l10n_fr_facturx_chorus_pro.field_account_move__contract_reference
+#: model:ir.model.fields,help:l10n_fr_facturx_chorus_pro.field_account_payment__contract_reference
+msgid "'Numéro de Marché' in Chorus PRO."
+msgstr "'Numéro de Marché' dans Chorus PRO."
+
+#. module: l10n_fr_facturx_chorus_pro
+#: model:ir.model.fields,field_description:l10n_fr_facturx_chorus_pro.field_account_bank_statement_line__buyer_reference
+#: model:ir.model.fields,field_description:l10n_fr_facturx_chorus_pro.field_account_move__buyer_reference
+#: model:ir.model.fields,field_description:l10n_fr_facturx_chorus_pro.field_account_payment__buyer_reference
+msgid "Buyer reference"
+msgstr "Service Exécutant"
+
+#. module: l10n_fr_facturx_chorus_pro
+#: model_terms:ir.ui.view,arch_db:l10n_fr_facturx_chorus_pro.view_move_form_inherit_chorus_pro
+msgid "Chorus Pro"
+msgstr ""
+
+#. module: l10n_fr_facturx_chorus_pro
+#: model:ir.model.fields,field_description:l10n_fr_facturx_chorus_pro.field_account_bank_statement_line__contract_reference
+#: model:ir.model.fields,field_description:l10n_fr_facturx_chorus_pro.field_account_move__contract_reference
+#: model:ir.model.fields,field_description:l10n_fr_facturx_chorus_pro.field_account_payment__contract_reference
+msgid "Contract Reference"
+msgstr "Numéro de Marché"
+
+#. module: l10n_fr_facturx_chorus_pro
+#: model:ir.model.fields,field_description:l10n_fr_facturx_chorus_pro.field_account_move__display_name
+msgid "Display Name"
+msgstr "Nom affiché"
+
+#. module: l10n_fr_facturx_chorus_pro
+#: model:ir.model.fields,field_description:l10n_fr_facturx_chorus_pro.field_account_move__id
+msgid "ID"
+msgstr ""
+
+#. module: l10n_fr_facturx_chorus_pro
+#: model:ir.model,name:l10n_fr_facturx_chorus_pro.model_account_move
+msgid "Journal Entry"
+msgstr "Pièce comptable"
+
+#. module: l10n_fr_facturx_chorus_pro
+#: model:ir.model.fields,field_description:l10n_fr_facturx_chorus_pro.field_account_move____last_update
+msgid "Last Modified on"
+msgstr "Dernière modification le"
+
+#. module: l10n_fr_facturx_chorus_pro
+#: model:ir.model.fields,field_description:l10n_fr_facturx_chorus_pro.field_account_bank_statement_line__purchase_order_reference
+#: model:ir.model.fields,field_description:l10n_fr_facturx_chorus_pro.field_account_move__purchase_order_reference
+#: model:ir.model.fields,field_description:l10n_fr_facturx_chorus_pro.field_account_payment__purchase_order_reference
+msgid "Purchase order reference"
+msgstr "Engagement Juridique"
diff --git a/addons/l10n_fr_facturx_chorus_pro/i18n/l10n_fr_facturx_chorus_pro.pot b/addons/l10n_fr_facturx_chorus_pro/i18n/l10n_fr_facturx_chorus_pro.pot
new file mode 100644
index 0000000000000000000000000000000000000000..b402faedec5beb39bb85507ca98b3a2c4d9ca1ee
--- /dev/null
+++ b/addons/l10n_fr_facturx_chorus_pro/i18n/l10n_fr_facturx_chorus_pro.pot
@@ -0,0 +1,83 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* l10n_fr_facturx_chorus_pro
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0+e\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-06-07 11:31+0000\n"
+"PO-Revision-Date: 2022-06-07 11:31+0000\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: l10n_fr_facturx_chorus_pro
+#: model:ir.model.fields,help:l10n_fr_facturx_chorus_pro.field_account_bank_statement_line__purchase_order_reference
+#: model:ir.model.fields,help:l10n_fr_facturx_chorus_pro.field_account_move__purchase_order_reference
+#: model:ir.model.fields,help:l10n_fr_facturx_chorus_pro.field_account_payment__purchase_order_reference
+msgid "'Engagement Juridique' in Chorus PRO."
+msgstr ""
+
+#. module: l10n_fr_facturx_chorus_pro
+#: model:ir.model.fields,help:l10n_fr_facturx_chorus_pro.field_account_bank_statement_line__buyer_reference
+#: model:ir.model.fields,help:l10n_fr_facturx_chorus_pro.field_account_move__buyer_reference
+#: model:ir.model.fields,help:l10n_fr_facturx_chorus_pro.field_account_payment__buyer_reference
+msgid "'Service Exécutant' in Chorus PRO."
+msgstr ""
+
+#. module: l10n_fr_facturx_chorus_pro
+#: model:ir.model.fields,help:l10n_fr_facturx_chorus_pro.field_account_bank_statement_line__contract_reference
+#: model:ir.model.fields,help:l10n_fr_facturx_chorus_pro.field_account_move__contract_reference
+#: model:ir.model.fields,help:l10n_fr_facturx_chorus_pro.field_account_payment__contract_reference
+msgid "'Numéro de Marché' in Chorus PRO."
+msgstr ""
+
+#. module: l10n_fr_facturx_chorus_pro
+#: model:ir.model.fields,field_description:l10n_fr_facturx_chorus_pro.field_account_bank_statement_line__buyer_reference
+#: model:ir.model.fields,field_description:l10n_fr_facturx_chorus_pro.field_account_move__buyer_reference
+#: model:ir.model.fields,field_description:l10n_fr_facturx_chorus_pro.field_account_payment__buyer_reference
+msgid "Buyer reference"
+msgstr ""
+
+#. module: l10n_fr_facturx_chorus_pro
+#: model_terms:ir.ui.view,arch_db:l10n_fr_facturx_chorus_pro.view_move_form_inherit_chorus_pro
+msgid "Chorus Pro"
+msgstr ""
+
+#. module: l10n_fr_facturx_chorus_pro
+#: model:ir.model.fields,field_description:l10n_fr_facturx_chorus_pro.field_account_bank_statement_line__contract_reference
+#: model:ir.model.fields,field_description:l10n_fr_facturx_chorus_pro.field_account_move__contract_reference
+#: model:ir.model.fields,field_description:l10n_fr_facturx_chorus_pro.field_account_payment__contract_reference
+msgid "Contract Reference"
+msgstr ""
+
+#. module: l10n_fr_facturx_chorus_pro
+#: model:ir.model.fields,field_description:l10n_fr_facturx_chorus_pro.field_account_move__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: l10n_fr_facturx_chorus_pro
+#: model:ir.model.fields,field_description:l10n_fr_facturx_chorus_pro.field_account_move__id
+msgid "ID"
+msgstr ""
+
+#. module: l10n_fr_facturx_chorus_pro
+#: model:ir.model,name:l10n_fr_facturx_chorus_pro.model_account_move
+msgid "Journal Entry"
+msgstr ""
+
+#. module: l10n_fr_facturx_chorus_pro
+#: model:ir.model.fields,field_description:l10n_fr_facturx_chorus_pro.field_account_move____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: l10n_fr_facturx_chorus_pro
+#: model:ir.model.fields,field_description:l10n_fr_facturx_chorus_pro.field_account_bank_statement_line__purchase_order_reference
+#: model:ir.model.fields,field_description:l10n_fr_facturx_chorus_pro.field_account_move__purchase_order_reference
+#: model:ir.model.fields,field_description:l10n_fr_facturx_chorus_pro.field_account_payment__purchase_order_reference
+msgid "Purchase order reference"
+msgstr ""
diff --git a/addons/l10n_fr_facturx_chorus_pro/models/__init__.py b/addons/l10n_fr_facturx_chorus_pro/models/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..c0124efe1825016cac6b73d2791741130a55fcd5
--- /dev/null
+++ b/addons/l10n_fr_facturx_chorus_pro/models/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from . import account_move
diff --git a/addons/l10n_fr_facturx_chorus_pro/models/account_move.py b/addons/l10n_fr_facturx_chorus_pro/models/account_move.py
new file mode 100644
index 0000000000000000000000000000000000000000..9f50b5973a4528949df7d6897720151fbaaf873d
--- /dev/null
+++ b/addons/l10n_fr_facturx_chorus_pro/models/account_move.py
@@ -0,0 +1,10 @@
+# -*- coding: utf-8 -*-
+from odoo import fields, models
+
+
+class AccountMove(models.Model):
+    _inherit = "account.move"
+
+    buyer_reference = fields.Char(help="'Service Exécutant' in Chorus PRO.")
+    contract_reference = fields.Char(help="'Numéro de Marché' in Chorus PRO.")
+    purchase_order_reference = fields.Char(help="'Engagement Juridique' in Chorus PRO.")
diff --git a/addons/l10n_fr_facturx_chorus_pro/views/account_move_views.xml b/addons/l10n_fr_facturx_chorus_pro/views/account_move_views.xml
new file mode 100644
index 0000000000000000000000000000000000000000..41440a7f257cc15cf6743facc9666e013cf25c77
--- /dev/null
+++ b/addons/l10n_fr_facturx_chorus_pro/views/account_move_views.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+    <data>
+        <record id="view_move_form_inherit_chorus_pro" model="ir.ui.view">
+            <field name="name">account.move.form.inherit.chorus.pro</field>
+            <field name="model">account.move</field>
+            <field name="inherit_id" ref="account.view_move_form"/>
+            <field name="arch" type="xml">
+                <xpath expr="//group[@name='accounting_info_group']" position="after">
+                    <group name="accounting_info_group_chorus_pro" string="Chorus Pro" attrs="{'invisible': [('move_type', 'not in', ('out_invoice', 'out_refund'))]}">
+                        <field name="buyer_reference"/>
+                        <field name="contract_reference"/>
+                        <field name="purchase_order_reference"/>
+                    </group>
+                </xpath>
+            </field>
+        </record>
+    </data>
+</odoo>