OdooWiki OCA HUB

L10n FR Chorus

l10n_fr_chorus_account folder_open OCA/l10n-france open_in_new
French Localization License: AGPL-3

This is the base module for the support of Chorus Pro, the electronic invoicing plateform of the French administration. Chorus Pro specifications are available on Chorus Pro Community website. All the suppliers of the French administration must send their invoices through Chorus Pro. To know more about Chorus and the obligation to send electronic invoices to the French administration, read the dedicated page on the website of the Ministry of Economic Affairs.

To be able to generate an electronic invoice for Chorus, you need the module l10n_fr_chorus_factur-x or l10n_fr_chorus_ubl.

auto_awesome What this module does

AI-generated from the code · Odoo 18.0

Send French customer invoices and credit notes to the Chorus Pro e-invoicing platform directly from Odoo, and track their submission status and identifiers automatically.

This module connects Odoo to Chorus Pro, the French public e-invoicing platform, so suppliers can transmit invoices electronically instead of by post.

  • On a customer invoice or credit note, you can choose Chorus as the sending method. Once the invoice is posted, Odoo runs Chorus-specific checks (customer identifier, service code, payment method, IBAN bank account) and blocks posting if something is missing.
  • Invoices are sent through a wizard, 'Send to Chorus Pro', which can group several invoices into a single flow. Each submission creates a chorus.flow record holding the file sent, its status and any error notes.
  • A scheduled job updates flow statuses, retrieves the Chorus invoice identifiers, refreshes invoice statuses, and posts a message on the invoice when Chorus rejects it, so you can correct and resend.
  • Customers carry a Chorus identifier and a list of Chorus services (chorus.partner.service), with a button to fetch them from the API. The service code 'FACTURES_PUBLIQUES' is forbidden.
  • Attachments added to a Chorus invoice are validated for filename length, extension, allowed format and size limits.
  • Company settings hold the Chorus technical login, password, invoice format, password expiry date and reminder recipients; a cron emails a reminder before the password expires.

Menus it adds

Chorus Prochorus_flow_menuchorus_partner_service_menu
Models and fields (7)
  • chorus.flow · new modeldate (Flow Date), name (Flow Ref), notes, status (Flow Status (raw value)), syntax (Flow Syntax), company_id (Company), invoice_ids (Invoices), status_date (Last Status Update), attachment_id (File Sent to Chorus), status_display (Flow Status), initial_invoice_ids (Initial Invoices), invoice_identifiers
  • res.company · extends an existing modelfr_chorus_api_login (Chorus Technical User Login), fr_chorus_api_password (Chorus Technical User Password), fr_chorus_invoice_format (Chorus Invoice Format), fr_chorus_pwd_expiry_date (Chorus Technical User Password Expiry Date), fr_chorus_expiry_remind_user_ids (Users Receiving the Expiry Reminder), fr_chorus_check_commitment_number (Check Commitment Numbers)
  • res.partner · extends an existing modelfr_chorus_required (Info Required for Chorus), fr_chorus_identifier (Chorus Identifier), fr_chorus_service_id (Chorus Service), fr_chorus_service_ids (Chorus Services), invoice_sending_method, fr_chorus_service_count (Number of Chorus Services)
  • account.move · extends an existing modelchorus_status (Chorus Invoice Status), chorus_flow_id (Chorus Flow), chorus_identifier (Chorus Invoice Identifier), chorus_status_date (Last Chorus Invoice Status Update), chorus_service_code (Chorus Service Code), chorus_attachment_ids (Chorus Attachments), invoice_sending_method
  • res.config.settings · extends an existing modelfr_chorus_qualif (Use Chorus Qualification Platform), group_chorus_api (Use Chorus Pro API), fr_chorus_api_login, fr_chorus_api_password, fr_chorus_invoice_format, fr_chorus_pwd_expiry_date, fr_chorus_expiry_remind_user_ids, fr_chorus_check_commitment_number
  • chorus.partner.service · new modelcode (Service Code), name (Service Name), active, partner_id (Customer), chorus_identifier, engagement_required
  • account.invoice.chorus.send · new modelcompany_id (Company), invoice_ids (Invoices to Send), invoice_count (Number of Invoices), chorus_invoice_format

Text generated by AI (DeepSeek) from reading the Odoo 18.0 code on GitHub; it may contain mistakes, so check the code before deciding. The module is very large and only part of the code was read. View the code on GitHub

Availability by version

Reviewed: 2026-11-03
Confirmed (verified in repository and branch) Estimated (unverified) No information

Confirmation status: 6 confirmed, 3 with no information of 9 versions.

Sources · Odoo 12.0

Confirmed on 2026-11-03 in branch 12.0 of OCA/l10n-france.

terminal Installation and usage

OCA documentation · Odoo 18.0

On the customers that you invoice via Chorus, you must:

  • enter their SIRET (Accounting tab),
  • select Chorus as Customer Invoice Transmission Method (Accounting tab),
  • select the Info Required for Chorus to the value that you obtained from Chorus (menu Rechercher Structure Publique),
  • if the service is a required information for that customer in Chorus, you must create the Chorus service and then create an invoicing contact and select the related Chorus Service and make sure that this contact is used as Customer on the invoice.

If you want to use the Chorus API to easily send invoices to Chorus from Odoo, you must:

  • edit the Odoo server configuration file and add two keys chorus_api_oauth_id and chorus_api_oauth_secret that contain your Oauth client ID and client secret obtained via PISTE. Don't forget to restart the Odoo server after the update of its configuration file.
  • in the menu Accounting \> Configuration \> Settings, in the section Chorus API, enable the option Use Chorus API, which will add all users to the Chorus API group. Then set the additional configuration parameters for Chorus API that will be prompted on the settings page.

In the menu Settings \> Technical \> Automation \> Scheduled Actions, you should also activate the 3 scheduled actions related to Chorus Pro.

On the customer form view of a French public administration, in the Accounting tab, set the Customer Invoice Transmission Method to Chorus Pro. You will then see a new section Chorus Pro. In this section, you should set the Info required for Chorus and, if the administration is Service required, you must create the Chorus services.

If you enabled the Chorus API, just click on the button Update Info Required for Chorus and it will set the field Info required for Chorus and download all the Chorus services of that administration.

When you try to validate a customer invoice/refund for a customer for which you send the invoices via Chorus Pro, it will check the value of the field Info required for Chorus and check that this invoice has an order reference or/and a Chorus service if required for that customer.

If you enabled the Chorus API, you should see a button Send to Chorus on validated customer invoices and refunds that have a transmission method set to Chorus Pro. You can also select several customer invoices/refunds and do Action \> Send to Chorus Pro.

Sending an invoice via the Chorus API creates a Chorus Flow, cf menu Accounting \> Configuration \> Chorus Pro \> Chorus Flows (it is not really a configuration thing... so we could argue that it should not be in the configuration menu !). You can click on the button Update Flow Status to refresh the status of the flow, until it reaches the status IN_INTEGRE. Then, click on the button Get Chorus Invoice Identifiers to get the technical identifiers of the invoice in Chorus (and write it on the invoice in Odoo) and get the status of the invoice in Chorus. Eventually, on the invoice, you can click on the button Update Chorus Invoice Status to refresh the Chorus Invoice Status. All these actions to refresh the status of the Chorus flows and of the invoice are automated via the Scheduled Action named Chorus Pro Invoice Status Update. So, if that scheduled action is active, you should not have to manually perform the actions described in this paragraph.

In the list view of customer invoices, you can group by Chorus Status: that way, you get on overview of the status of all the invoices you sent to Chorus Pro, and you can easily spot if an invoice has been refused for example.

No verified information in OCA: Installation.

info

Data imported from GitHub: this sheet reflects the latest catalog review, not a live lookup. Always check the module documentation and staging before installing in production.