From 16e1b2a268d3e3836b23967f65514600030b7728 Mon Sep 17 00:00:00 2001 From: afma-odoo Date: Fri, 4 Apr 2025 06:46:52 +0000 Subject: [PATCH] [IMP] localization: Add Chorus pro via Peppol information task-4698357 task-4661523 X-original-commit: ab4b7043206560f314d1798e3e396886cbcfc858 --- .../electronic_invoicing.rst | 4 + .../finance/fiscal_localizations/france.rst | 694 ++++++++++-------- 2 files changed, 382 insertions(+), 316 deletions(-) diff --git a/content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst b/content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst index b27385e21f..20c473d06a 100644 --- a/content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst +++ b/content/applications/finance/accounting/customer_invoices/electronic_invoicing.rst @@ -87,6 +87,8 @@ e-invoicing option to generate and attach the e-invoice file. .. image:: electronic_invoicing/send-window.png :alt: The Peppol option is checked and an e-invoicing XML file is attached to the email. +.. _e-invoicing/peppol: + Peppol ====== @@ -113,6 +115,8 @@ If not done yet, :ref:`install ` the :guilabel:`Peppol` module Monaco, Montenegro, North Macedonia, Malta, Netherlands, Norway, Poland, Portugal, Romania, Serbia, Sweden, Slovenia, Slovakia, San Marino, Turkey, Holy See (Vatican City State) +.. _e-invoicing/peppol-registration: + Registration ------------ diff --git a/content/applications/finance/fiscal_localizations/france.rst b/content/applications/finance/fiscal_localizations/france.rst index c00192d169..6d37b1c1a2 100644 --- a/content/applications/finance/fiscal_localizations/france.rst +++ b/content/applications/finance/fiscal_localizations/france.rst @@ -2,68 +2,206 @@ France ====== +.. _localizations/france/configuration/modules: + +Modules +======= + +The following modules related to the French localization are available: + +.. list-table:: + :header-rows: 1 + + * - Name + - Technical name + - Description + * - :guilabel:`France - Accounting` + - `l10n_fr_account` + - French :ref:`fiscal localization package ` that applies only + to companies based in mainland France and doesn't include DOM-TOMs. + * - :guilabel:`France - Accounting Reports` + - `l10n_fr_reports` + - Export of the French VAT report, which can be sent to the DGFiP, an OGA, or a professional + accountant. + * - :guilabel:`France - Payroll with Accounting` + - `l10n_fr_hr_payroll_account` + - Includes the necessary accounting data for the French payroll rules. + * - :guilabel:`France - Factur-X integration with Chorus Pro` + - `l10n_fr_facturx_chorus_pro` + - Adds fields needed for :ref:`submitting invoices to Chorus Pro + `. + * - :guilabel:`France - FEC Import` + - `l10n_fr_fec_import` + - Import of standard FEC files, useful for importing accounting history. + * - :guilabel:`France - VAT Anti-Fraud Certification for Point of Sale (CGI 286 I-3 bis)` + - `10n_fr_pos_cert` + - :ref:`Point of Sale VAT anti-fraud certification + ` + +.. note:: + The localization's core modules are installed automatically with the localization. The rest can + be manually :doc:`installed `. + +.. _localizations/france/loc-overview: + +Localization overview +===================== + +The French localization package ensures compliance with French fiscal and accounting regulations. It +includes tools for managing taxes, fiscal positions, reporting, and a predefined chart of accounts +tailored to France’s standards. + +The French localization package provides the following key features to ensure compliance with local +fiscal and accounting regulations: + +- :doc:`../accounting/get_started/chart_of_accounts`: a predefined structure tailored to French + accounting standards +- :doc:`../accounting/taxes/fiscal_positions`: automated tax adjustments based on customer or + supplier registration status +- :doc:`Taxes <../accounting/taxes>`: pre-configured tax rates, including standard VAT, + zero-rated, and exempt options +- :doc:`Payroll ` +- :ref:`Reporting ` + +.. _localizations/france/reporting: + +Reporting +--------- + +:doc:`Installing ` the :guilabel:`France - Accounting` +(`l10n_fr_account`) module gives access to some accounting reports specific to France, such as: + +- :guilabel:`Bilan comptable (FR)` (:guilabel:`Balance Sheet`) +- :guilabel:`Compte de résultats (FR)` (:guilabel:`Profit and Loss`) +- :guilabel:`Rapport de taxes (FR)` (:guilabel:`Tax Report`) + +.. _localizations/france/accounting: + +Accounting +========== + +.. _localizations/france/e-invoicing: + +E-Invoicing +----------- + +The `Chorus Pro `_ portal, managed by the AIFE (Agence +pour l'Informatique financière de l'État), is the official platform for submitting electronic +invoices to French public entities. It allows businesses to send and manage invoices, track their +processing status, and access payment updates. Since January 2020, electronic invoicing has been +mandatory for all business-to-government (B2G) transactions in France. Odoo supports integration +with Chorus Pro to submit invoices generated in Odoo. + +.. _localizations/france/e-invoicing-configuration: + +Configuration +~~~~~~~~~~~~~ + +To send invoices to Chorus Pro, the following configuration is required: + +#. :doc:`Install ` the :guilabel:`France - Factur-X integration + with Chorus Pro` (`l10n_fr_facturx_chorus_pro`) module. +#. :ref:`Register ` with Peppol, as invoices are sent from Odoo to + Chorus Pro via the :ref:`Peppol ` network. +#. If you don’t already have a Chorus Pro account, go to the `Chorus Pro + `_ page, click :guilabel:`Créer un compte`, and + create one. +#. :ref:`Configure the relevant customers' contact form + `. + .. seealso:: - :doc:`Documentation on e-invoicing’s legality and compliance in France - <../accounting/customer_invoices/electronic_invoicing/france>` + `Chorus Pro documentation `_ -.. _localization/france/fec: +.. _localizations/france/e-invoicing-contacts: -FEC - Fichier des Écritures Comptables -====================================== +Customers +********* -An FEC :dfn:`Fichier des Écritures Comptables` audit file contains all the accounting data and entries -recorded in all the accounting journals for a financial year. The entries in the file must be -arranged in chronological order. +To submit invoices to Chorus Pro, configure the relevant customers' contact form as follows: -Since January 1st, 2014, every French company is required to produce and transmit this file upon -request by the tax authorities for audit purposes. +#. Verify the :guilabel:`Country` and :guilabel:`VAT` fields are filled out. +#. In the :guilabel:`Sales & Purchase` tab, ensure the :guilabel:`SIRET` field is completed. +#. In the :guilabel:`Accounting` tab, fill in the following fields in the :guilabel:`Customer + Invoices` section: -.. _localization/france/fec-import: + - :guilabel:`eInvoice format`: Select :guilabel:`BIS Billing 3.0`. + - Make sure :guilabel:`France SIRET` is selected in the next field, then type `11000201100044`, + the reference used by Chorus Pro. -FEC import ----------- +.. _localizations/france/e-invoicing-invoices: -To make the onboarding of new users easier, Odoo Enterprise's French :ref:`fiscal localization -package ` includes the **FEC Import** feature (module name: -``l10n_fr_fec_import``), which enables the import of existing FEC files from older software. +Sending invoices to Chorus Pro +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -To enable this feature, go to :menuselection:`Accounting --> Configuration --> Settings --> -Accounting Import`, enable **FEC Import**, and *Save*. +To send invoices to Chorus Pro, follow these steps: -Next, go to :menuselection:`Accounting --> Configuration --> FEC Import`, upload your FEC file, and -click on *Import*. +#. Go to :menuselection:`Accounting --> Customers --> Invoices` and open or create the invoice. +#. In the :guilabel:`Other Info` tab, make sure the following fields are filled in the + :guilabel:`Chorus Pro` section: -.. note:: + - :guilabel:`Buyer Reference`: :guilabel:`Service Exécutant` in Chorus Pro + - :guilabel:`Contract Reference`: :guilabel:`Numéro de Marché` in Chorus Pro + - :guilabel:`Purchase Order Reference`: :guilabel:`Engagement Juridique` in Chorus Pro - | Importing FEC files from different year takes no particular action or computation. - | Should multiple files contain any "Reports à Nouveaux" (RAN) with the starting balance of the - year, you might need to cancel those entries in the User Interface. Odoo makes those entries - (RAN) useless. +#. Confirm the invoice. +#. Click :guilabel:`Send` and, in the :guilabel:`Send` window, enable :guilabel:`By Peppol`. +#. Click :guilabel:`Send`. -.. _localization/france/fec-file: +Once the invoice is sent, the Peppol status of the invoice is updated to :guilabel:`Done`. -File formats -~~~~~~~~~~~~ +.. seealso:: + :ref:`Peppol ` + +.. _localizations/france/fec: + +FEC - Fichier des Écritures Comptables +-------------------------------------- + +An FEC :dfn:`Fichier des Écritures Comptables` audit file contains all the accounting data and +entries recorded in all the accounting journals for a financial year. The entries in the file must +be arranged in chronological order. Since January 2014, every French company is required to produce +and transmit this file upon request by the tax authorities for audit purposes. + +.. _localizations/france/fec-import: + +FEC Import +~~~~~~~~~~ -FEC files can only be in CSV format, as the XML format is not supported. +:doc:`Install ` the :guilabel:`France - FEC Import` +(`l10n_fr_fec_import`) module to import FEC files from other software. + +To enable this feature, go to :menuselection:`Accounting --> Configuration --> Settings`. In the +:guilabel:`Accounting Import` section, click :icon:`oi-arrow-right` :guilabel:`Import` and +:guilabel:`Import FEC`. Then, in the :guilabel:`FEC Import` window, upload the FEC file and click +:guilabel:`Import`. .. note:: + Importing FEC files from different years requires no particular actions or computations. However, + if multiple files contain RAN :dfn:`Reports à Nouveaux` with the starting balance for the year, + these entries are automatically marked as unnecessary in Odoo and may need to be deleted. + +.. _localizations/france/fec-file-formats: - The FEC CSV file has a plain text format representing a data table, with the first line being a - header and defining the list of fields for each entry, and each following line representing one - accounting entry, in no predetermined order. +File formats +************ + +.. note:: + - FEC files must be in CSV format, as XML format is not supported. + - The FEC CSV file is a plain text file structured as a data table. The first line serves as the + header, defining the list of fields for each entry, and each following line represents a single + accounting entry without any specific order. -Our module expects the files to meet the following technical specifications: +FEC files must comply with the following technical specifications: - **Encoding**: UTF-8, UTF-8-SIG and iso8859_15. - **Separator**: any of these: `;` or `|` or `,` or `TAB`. - **Line terminators**: both CR+LF (`\\r\\n`) and LF (`\\n`) character groups are supported. - **Date format**: `%Y%m%d` -.. _localization/france/fec-fields: +.. _localizations/france/fec-fields: Fields description and use -~~~~~~~~~~~~~~~~~~~~~~~~~~ +************************** +----+---------------+--------------------------------------+-----------------------------------+-----------------+ | # | Field name | Description | Use | Format | @@ -115,7 +253,7 @@ Fields description and use | | | (accepts null) | | | +----+---------------+--------------------------------------+-----------------------------------+-----------------+ -These two fields can be found in place of the others in the sence above. +These two fields appear in the same order as the others, replacing them. +----+---------------+--------------------------------------+-----------------------------------+-----------------+ | 12 | Montant | Amount | `move_line.debit` | Float | @@ -125,76 +263,65 @@ These two fields can be found in place of the others in the sence above. | | | or "D" for Debit | or `move_line.credit` | | +----+---------------+--------------------------------------+-----------------------------------+-----------------+ -.. _localization/france/fec-implementation: +.. _localizations/france/fec-implementation: Implementation details -~~~~~~~~~~~~~~~~~~~~~~ +********************** The following accounting entities are imported from the FEC files: **Accounts, Journals, Partners**, -and **Moves**. - -Our module determines the encoding, the line-terminator character, and the separator that are used -in the file. - -A check is then performed to see if every line has the correct number of fields corresponding to the -header. +and **Moves**. The module automatically determines the encoding, line terminator, and separator used +in the file. Next, a check is performed to ensure that each line has the correct number of fields +matching the header. If the check is successful, the entire file is read, stored in memory, and +scanned. Accounting entities are then imported one type at a time in the following order. -If the check passes, then the file is read in full, kept in memory, and scanned. Accounting entities -are imported one type at a time, in the following order. - -.. _localization/france/fec-accounts: +.. _localizations/france/fec-accounts: Accounts -******** +^^^^^^^^ -Every accounting entry is related to an account, which should be determined by the field -`CompteNum`. +Each accounting entry is associated with an account identified by the :guilabel:`CompteNum` field. -.. _localization/france/fec-code-matching: +.. _localizations/france/fec-code-matching: Code matching -************* +^^^^^^^^^^^^^ -Should a similar account code already be present in the system, the existing one is used instead of -creating a new one. - -Accounts in Odoo generally have a number of digits that are default for the fiscal localization. As -the FEC module is related to the French localization, the default number of relevant digits is 6. - -This means that the account codes the trailing zeroes are right-trimmed, and that the comparison -between the account codes in the FEC file and the ones already existing in Odoo is performed only on -the first six digits of the codes. +If an account with the same code already exists, the existing one is used rather than creating a new +one. In Odoo, account numbers follow the default digit length of the fiscal localization. Since the +FEC module is tied to the French localization, the default account length is 6 digits. +This means that trailing zeros in account codes are removed, and the comparison between the account +codes in the FEC file and those already in Odoo is made based only on the first six digits of the +codes. .. example:: - The account code `65800000` in the file is matched against an existing `658000` account in Odoo, - and that account is used instead of creating a new one. + The account code `65800000` in the file is matched with an existing `658000` account in Odoo, + and the existing account is used instead of creating a new one. -.. _localization/france/fec-reconcilable-flag: +.. _localizations/france/fec-reconcilable-flag: Reconcilable flag -***************** +^^^^^^^^^^^^^^^^^ An account is technically flagged as *reconcilable* if the first line in which it appears has the -`EcritureLet` field filled out, as this flag means that the accounting entry is going to be -reconciled with another one. +:guilabel:`EcritureLet` field filled out, indicating that the accounting entry will be reconciled +with another one. .. note:: + The field can be left empty on the line, but the entry must still be reconciled with an + unrecorded payment. The account is flagged as reconcilable once the import of the move lines + requires it. - In case the line somehow has this field not filled out, but the entry still has to be reconciled - with a payment that hasn't yet been recorded, this isn't a problem anyway; the account is - flagged as reconcilable as soon as the import of the move lines requires it. - -.. _localization/france/fec-account-type-template-matching: +.. _localizations/france/fec-account-type: Account type and templates matching -*********************************** +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -As the **type** of the account is not specified in the FEC format, **new** accounts are created -with the default type *Current Assets* and then, at the end of the import process, they are -matched against the installed Chart of Account templates. Also, the *reconcile* flag is also -computed this way. +Since the account **type** is not specified in the FEC format, **new** accounts are created with the +default type :guilabel:`Current Assets`. After the import process, they are matched against the +installed Chart of Account templates. The *reconcile* flag is also determined this way. -The match is done with the left-most digits, starting by using all digits, then 3, then 2. +The matching is performed by comparing the left-most digits, starting with all digits, followed by +3 digits, and then 2 digits. .. example:: @@ -208,55 +335,55 @@ The match is done with the left-most digits, starting by using all digits, then | **Result** | | | | Match **found** | +------------+------------+-----------------+---------------------+---------------------+ -The type of the account is then flagged as *payable* and *reconcilable* as per the account template. +The account type is then flagged as :guilabel:`payable` and :guilabel:`reconcilable` based on the +account template. -.. _localization/france/fec-journals: +.. _localizations/france/fec-journals: Journals -******** - -Journals are also checked against those already existing in Odoo to avoid duplicates, also in the -case of multiple FEC files imports. +^^^^^^^^ -Should a similar journal code already be present in the system, the existing one is used instead of -creating a new one. +Journals are checked against the existing ones in Odoo to avoid duplicates, even when importing +multiple FEC files. -New journals have their name prefixed by the string ``FEC-``. +If a journal with the same code already exists, the existing journal is used instead of creating a +new one. -.. example:: - `ACHATS` -> `FEC-ACHATS` +New journals have the prefix :guilabel:`FEC-` added to their name. For example, :guilabel:`ACHATS` +becomes :guilabel:`FEC-ACHATS`. -The journals are *not* archived, the user is entitled to handle them as he wishes. +.. note:: + Journals are *not* archived, allowing the user to manage them as desired. -.. _localization/france/fec-journal-type: +.. _localizations/france/fec-journal-type: Journal type determination -************************** +^^^^^^^^^^^^^^^^^^^^^^^^^^ -The journal type is also not specified in the format (as per the accounts) and therefore it is -at first created with the default type `general`. +The journal type is not specified in the format (similar to the accounts) and is initially created +with the default type :guilabel:`general`. -At the end of the import process, the type is determined as per these rules regarding related -moves and accounts: +At the end of the import process, the journal type is determined based on the following rules +regarding related moves and accounts: -- | `bank`: Moves in these journals always have a line (debit or credit) impacting a +- | :guilabel:`bank`: Moves in these journals always include a line (debit or credit) impacting a liquidity account. - | `cash` / `bank` can be interchanged, so `bank` is set everywhere when this condition is met. -- | `sale`: Moves in these journals mostly have debit lines on receivable accounts and + | :guilabel:`cash` / :guilabel:`bank` can be interchanged, so :guilabel:`bank` is assigned when + this condition is met. +- | :guilabel:`sale`: Moves in these journals mostly have debit lines on receivable accounts and credit lines on tax income accounts. | Sale refund journal items are debit/credit inverted. -- | `purchase`: Moves in these journals mostly have credit lines on payable accounts and +- | :guilabel:`purchase`: Moves in these journals mostly have credit lines on payable accounts and debit lines on expense accounts. | Purchase refund journal items are debit/credit inverted. -- | `general`: for everything else. +- | :guilabel:`general`: Used for everything else. .. note:: - - - A minimum of three moves is necessary for journal type identification. - - A threshold of 70% of moves must correspond to a criteria for a journal type to be determined. + - A minimum of three moves is required to identify the journal type. + - A threshold of 70% of the moves must meet the criteria for a journal type to be determined. .. example:: - Suppose we are analyzing the moves that share a certain `journal_id`. + Suppose we are analyzing the moves that share a certain :guilabel:`journal_id`. +------------------------------------------------------------+-------+------------+ | Moves | Count | Percentage | @@ -270,115 +397,101 @@ moves and accounts: | **Total** | 4 | 100% | +------------------------------------------------------------+-------+------------+ - The journal `type` would be `bank`, because the bank moves percentage (75%) exceeds the threshold - (70%). + The journal :guilabel:`type` would be :guilabel:`bank`, because the bank's move percentage (75%) + exceeds the threshold (70%). -.. _localization/france/fec-partners: +.. _localizations/france/fec-partners: -Partners -******** +Contacts +^^^^^^^^ -Each partner keeps its `Reference` from the field `CompAuxNum`. +Each contact keeps its :guilabel:`Reference` from the :guilabel:`CompAuxNum` field. .. note:: - - These fields are searchable, in line with former FEC imports on the accounting expert's side for - fiscal/audit purposes. + These fields are searchable based on previous FEC imports for fiscal/audit purposes. .. tip:: + Similar and potential duplicate contacts can be merged using the Data Cleaning App. - Users can merge partners with the Data Cleaning App, where Vendors and Customers or similar - partner entries may be merged by the user, with assistance from the system that groups them by - similar entries. - -.. _localization/france/fec-moves: +.. _localizations/france/fec-moves: Moves -***** +^^^^^ -Entries are immediately posted and reconciled after submission, using the `EcritureLet` field to -do the matching between the entries themselves. +Entries are posted and reconciled immediately upon submission, with the :guilabel:`EcritureLet` +field used to match the entries. -The `EcritureNum` field represents the name of the moves. We noticed that sometimes it may not be -filled out. In this case, the field `PieceRef` is used. +The :guilabel:`EcritureNum` field represents the name of the moves, but it may sometimes be left +empty. In such cases, the :guilabel:`PieceRef` field is used instead. -.. _localization/france/fec-rounding: +.. _localizations/france/fec-rounding-issue: Rounding issues -*************** +^^^^^^^^^^^^^^^ -There is a rounding tolerance with a currency-related precision on debit and credit (i.e., 0.01 for -EUR). Under this tolerance, a new line is added to the move, named *Import rounding difference*, -targeting the accounts: +A rounding tolerance is applied based on currency precision for debit and credit amounts (i.e., 0.01 +for EUR). If the difference falls under this tolerance, a new line is added to the move, called +:guilabel:`Import rounding difference`, targeting the following accounts: - `658000` Charges diverses de gestion courante, for added debits - `758000` Produits divers de gestion courante, for added credits -.. _localization/france/fec-missing-move-name: +.. _localizations/france/fec-missing-move-name: Missing move name -***************** +^^^^^^^^^^^^^^^^^ -Should the `EcritureNum` not be filled out, it may also happen that the `PieceRef` field is also -not suited to determine the move name (it may be used as an accounting move line reference) leaving -no way to actually find which lines are to be grouped in a single move, and effectively impeding the -creation of balanced moves. +If the the :guilabel:`EcritureNum` field is not filled out and :guilabel:`PieceRef` field is not +suited to determine the move name (it may be used as an accounting move line reference), it becomes +impossible to identify which lines should be grouped into a single move, and effectively preventing +the creation of balanced moves. -One last attempt is made, grouping all lines from the same journal and date (`JournalLib`, -`EcritureDate`). Should this grouping generate balanced moves (sum(credit) - sum(debit) = 0), then -each different combination of journal and date creates a new move. +In such cases, a final attempt is made to group all lines by the same journal and date +(:guilabel:`JournalLib`, :guilabel:`EcritureDate`). If this grouping generates balanced moves +(sum(credit) - sum(debit) = 0), then each different combination of journal and date creates a new +move. .. example:: `ACH` + `2021/05/01` --> new move on journal `ACH` with name `20210501`. -Should this attempt fail, the user is prompted an error message with all the move lines that are -supposedly unbalanced. +If this attempt fails, an error message is displayed, listing all the move lines that are considered +unbalanced. -.. _localization/france/fec-partner-info: +.. _localizations/france/fec-partner-information: -Partner information -******************* +Contact information +^^^^^^^^^^^^^^^^^^^ -If a line has the partner information specified, the information is copied to the accounting move -itself if the targeted Journal is of type *payable* or *receivable*. +If a line includes contact information, it is copied to the accounting move itself, provided the +targeted journal is of type :guilabel:`payable` or :guilabel:`receivable`. -.. _localization/france/fec-partner-info-export: +.. _localizations/france/fec-export: -Export ------- +FEC Export +~~~~~~~~~~ -If you have installed the French :ref:`fiscal localization package `, -you should be able to download the FEC. To do so, go to :menuselection:`Accounting --> Reporting --> -France --> FEC`. +To download the FEC, go to :menuselection:`Accounting --> Reporting --> General Ledger`. Click the +:icon:`fa-cog` :guilabel:`(gear)` icon and select :guilabel:`FEC`. In +the :guilabel:`FEC File Generation` window, fill in the following fields: -.. tip:: +- :guilabel:`Start Date` +- :guilabel:`End Date` +- :guilabel:`Test File`: Enable this option to test the FEC file generation. +- :guilabel:`Exclude lines at 0`: Enable this option if needed. +- :guilabel:`Excluded Journals`: Select the journal(s) to exclude. - If you do not see the submenu **FEC**, go to :menuselection:`Apps`, remove the *Apps* filter, - then search for the module named **France-FEC** and make sure it is installed. +Then, click :guilabel:`Generate`. .. seealso:: - - - `Official Technical Specification (fr) - `_ - - `Test-Compta-Demat (Official FEC Testing tool) - `_ - -.. _localization/france/accounting-reports: - -French accounting reports -========================= - -If you have installed the French Accounting, you will have access to some accounting reports -specific to France: - -- Bilan comptable -- Compte de résultats -- Plan de Taxes France + - `Official Technical Specification (fr) + `_ + - `Test-Compta-Demat (Official FEC Testing tool) + `_ .. _localization/france/liasse-fiscale: Liasse fiscale -============== +-------------- The *liasse fiscale* (tax returns) is a collection of standardized financial documents that businesses must submit annually to the tax authorities. It comprehensively summarizes the company’s @@ -396,7 +509,7 @@ Publiques), follow these steps: .. _localization/france/teledec-account: Teledec account creation ------------------------- +~~~~~~~~~~~~~~~~~~~~~~~~ To create a Teledec account, access the `Teledec account creation page `_ and fill in the :guilabel:`Adresse e-mail` field with an email address. Choose a secure password, @@ -410,7 +523,7 @@ Business Directory Identification System)` number of the company. .. _localization/france/teledec-registration: Company registration and fiscal year information ------------------------------------------------- +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ To register the company on Teledec, go to :guilabel:`Vos entreprises` (Your companies) and click :guilabel:`Enregistrer votre entreprise` (Register your company). Make sure to fill in the following @@ -442,7 +555,7 @@ those customized for the company’s tax return. .. _localization/france/teledec-synchronization: Odoo synchronization --------------------- +~~~~~~~~~~~~~~~~~~~~ To enable Odoo to automatically fill in the data for the :guilabel:`Liasse fiscale`, click :guilabel:`Autres actions` (Other actions) in the top-right corner and select @@ -470,187 +583,136 @@ synchronization of the *liasse fiscale* with Odoo and import the balance. To make payment and send the declaration to the tax authorities, click :guilabel:`Paiement & envoi de la déclaration`. -.. _localization/france/anti-fraud: - -Get the VAT anti-fraud certification with Odoo -============================================== - -As of January 1st 2018, a new anti-fraud legislation comes into effect -in France and DOM-TOM. This new legislation stipulates certain criteria -concerning the inalterability, security, storage and archiving of sales data. -These legal requirements are implemented in Odoo, version 9 onward, -through a module and a certificate of conformity to download. +.. _localizations/france/pos: -.. _localization/france/anti-fraud-software: +Point of sale +============= -Is my company required to use anti-fraud software? --------------------------------------------------- +.. _localizations/france/vat-anti-fraud-certification: -Your company is required to use an anti-fraud cash register software like -Odoo (CGI art. 286, I. 3° bis) if: +VAT anti-fraud certification +---------------------------- -- You are taxable (not VAT exempt) in France or any DOM-TOM, -- Some of your customers are private individuals (B2C). +Since January 2018, new anti-fraud legislation has been in effect in France and its overseas +territories (DOM-TOM). This legislation establishes specific requirements for the integrity, +security, storage, and archiving of sales data. Odoo complies with these legal requirements by +providing a module and a downloadable certificate of conformity. -This rule applies to any company size. Auto-entrepreneurs are exempted from -VAT and therefore are not affected. +Anti-fraud cash register software, such as Odoo (CGI art. 286, I. 3° bis), is required for companies +taxable in France or DOM-TOM, where some customers are private individuals (B2C). This rule applies +to all company sizes, but auto-entrepreneurs exempt from VAT are unaffected. -.. _localization/france/anti-fraud-odoo-certification: - -Get certified with Odoo ------------------------ - -Getting compliant with Odoo is very easy. +.. seealso:: + - `Frequently Asked Questions + `_ + - `Official Statement + `_ + - `Item 88 of Finance Law 2016 + `_ -Your company is requested by the tax administration to deliver a certificate -of conformity testifying that your software complies with the anti-fraud -legislation. This certificate is granted by Odoo SA to Odoo Enterprise users -`here `_. -If you use Odoo Community, you should :doc:`upgrade to Odoo Enterprise -` or contact your Odoo service provider. +.. _localizations/france/pos-odoo-certification: -In case of non-conformity, your company risks a fine of €7,500. +Odoo certification +~~~~~~~~~~~~~~~~~~ -To get the certification, just follow the following steps: +The tax administration requires all companies to provide a certificate of conformity confirming that +their software complies with anti-fraud legislation. In case of non-compliance, a €7,500 fine may be +imposed. -- If you use **Odoo Point of Sale**, :ref:`install ` the **France - VAT Anti-Fraud - Certification for Point of Sale (CGI 286 I-3 bis)** module by going to :menuselection:`Apps`, - removing the *Apps* filter, then searching for *l10n_fr_pos_cert*, and installing the module. +.. note:: + This `certificate `_ is granted by Odoo + SA to Odoo Enterprise users. -- Make sure a country is set on your company, otherwise your entries won’t be - encrypted for the inalterability check. To edit your company’s data, - go to :menuselection:`Settings --> Users & Companies --> Companies`. - Select a country from the list; Do not create a new country. -- Download the mandatory certificate of conformity delivered by Odoo SA `here `__. +To get the certification, follow these steps: -.. note:: +#. :doc:`Install ` the :guilabel:`France - VAT Anti-Fraud + Certification for Point of Sale (CGI 286 I-3 bis)` (`l10n_fr_pos_cert`) module. +#. Set the :guilabel:`Country` field on the :doc:`company record ` + to encrypt entries for the inalterability check. +#. Download the mandatory `certificate of conformity + `_ delivered by Odoo SA. - - To install the module in any system created before - December 18th 2017, you should update the modules list. - To do so, activate the :ref:`developer mode `. - Then go to the *Apps* menu and press *Update Modules List* in the top-menu. - - In case you run Odoo on-premise, you need to update your installation - and restart your server beforehand. - - If you have installed the initial version of the anti-fraud module - (prior to December 18th 2017), you need to update it. - The module's name was *France - Accounting - Certified CGI 286 I-3 bis*. - After an update of the modules list, search for - the updated module in *Apps*, select it and click *Upgrade*. - Finally, make sure the following module *l10n_fr_sale_closing* - is installed. - -.. _localization/france/anti-fraud-features: +.. _localizations/france/pos-anti-fraud-features: Anti-fraud features -------------------- +~~~~~~~~~~~~~~~~~~~ The anti-fraud module introduces the following features: -- **Inalterability**: deactivation of all the ways to cancel or modify - key data of POS orders, invoices and journal entries; -- **Security**: chaining algorithm to verify the inalterability; -- **Storage**: automatic sales closings with computation of both period - and cumulative totals (daily, monthly, annually). +- :ref:`Inalterability ` +- :ref:`Security ` +- :ref:`Storage ` -.. _localization/france/anti-fraud-inalterability: +.. _localizations/france/pos-inalterability: Inalterability -~~~~~~~~~~~~~~ +************** -All the possible ways to cancel and modify key data of paid POS orders, -confirmed invoices and journal entries are deactivated, -if the company is located in France or in any DOM-TOM. +All methods to cancel or modify key data in POS orders, invoices, and journal entries are +deactivated for companies located in France or any DOM-TOM. .. note:: + In a multi-company environment, only the documents of such companies are impacted. - If you run a multi-companies environment, only the documents of such companies are impacted. - -.. _localization/france/anti-fraud-security: +.. _localizations/france/pos-security: Security -~~~~~~~~ - -To ensure inalterability, every order or journal entry is encrypted -upon validation. -This number (or hash) is calculated from the key data of the document as -well as from the hash of the precedent documents. +******** -The module introduces an interface to test the data inalterability. -If any information is modified on a document after its validation, -the test will fail. The algorithm recomputes all the hashes and compares them -against the initial ones. In case of failure, the system points out the first +To ensure inalterability, every order or journal entry is encrypted upon validation. This number +(or hash) is calculated from the document's key data and the hash of the precedent documents. The +module introduces an interface to test the data's inalterability. The test will fail if any +information is modified on a document after its validation. The algorithm recomputes all the hashes +and compares them against the initial ones. In case of failure, the system points out the first corrupted document recorded in the system. -Users with *Manager* access rights can launch the inalterability check. -For POS orders, go to -:menuselection:`Point of Sales --> Reporting --> French Statements`. -For invoices or journal entries, -go to :menuselection:`Invoicing/Accounting --> Reporting --> French Statements`. +Only users with :doc:`administrator ` access rights can +initiate the inalterability check: -.. _localization/france/anti-fraud-storage: +- For POS orders, go to :menuselection:`Point of Sales --> Reporting --> POS Inalterability Check`; +- For journal entries, go to :menuselection:`Invoicing/Accounting --> Configuration --> Settings`. + In the :guilabel:`Reporting` section, click :guilabel:`Download the Data Inalterability Check + Report`. + +.. _localizations/france/pos-storage: Storage -~~~~~~~ +******* -The system also processes automatic sales closings on a daily, monthly -and annual basis. -Such closings distinctly compute the sales total of the period as well as -the cumulative grand totals from the very first sales entry recorded -in the system. +The system also processes automatic sales closings daily, monthly, and annually. Such closings +compute the sales total for the period and the cumulative grand totals from the very first sales +entry recorded in the system. -Closings can be found in the *French Statements* menu of Point of Sale, -Invoicing and Accounting apps. +To access closings, either go to :menuselection:`Point of Sales --> Reporting --> Sales Closings` or +:menuselection:`Invoicing/Accounting --> Reporting --> Sales Closings`. .. note:: - - - Closings compute the totals for journal entries of sales journals (Journal Type = Sales). - - - For multi-companies environments, such closings are performed by company. - - - POS orders are posted as journal entries at the closing of the POS session. - Closing a POS session can be done anytime. - To prompt users to do it on a daily basis, the module prevents from resuming - a session opened more than 24 hours ago. - Such a session must be closed before selling again. - - - A period’s total is computed from all the journal entries posted after the - previous closing of the same type, regardless of their posting date. - If you record a new sales transaction for a period already closed, - it will be counted in the very next closing. + - Closings compute the totals for journal entries of sales journals (Journal Type = Sales). + - For multi-companies environments, such closings are performed by company. + - POS orders are posted as journal entries at the closing of the POS session. Closing a POS + session can be done anytime. To prompt users to do it daily, the module prevents them from + resuming a session that was opened more than 24 hours ago. Such a session must be closed before + selling again. + - A period’s total is computed from all the journal entries posted after the previous closing of + the same type, regardless of their posting date. Recording a new sales transaction for a + period already closed will be counted in the very next closing. .. tip:: + For test & audit purposes, closings can be manually generated in :ref:`developer mode + `. To do so, go to :menuselection:`Settings --> Technical --> Scheduled Actions`. + In the scheduled actions list view, open the desired :guilabel:`Sale Closing` action and click + :guilabel:`Run manually`. - - For test & audit purposes such closings can be manually generated in the - :ref:`developer mode `. - - Then go to :menuselection:`Settings --> Technical --> Automation --> Scheduled Actions`. - -.. _localization/france/anti-fraud-responsibilities: +.. _localizations/france/pos-responsibilities: Responsibilities ----------------- - -Do not uninstall the module! If you do so, the hashes will be reset and none -of your past data will be longer guaranteed as being inalterable. +~~~~~~~~~~~~~~~~ -Users remain responsible for their Odoo instance and must use it with -due diligence. It is not permitted to modify the source code which guarantees -the inalterability of data. +Uninstalling this module will reset the security hashes. This means the system will no longer +guarantee the integrity of the past data. -Odoo absolves itself of all and any responsibility in case of changes -in the module’s functions caused by 3rd party applications not certified by Odoo. - -.. _localization/france/anti-fraud-more-info: - -More information ----------------- - -You can find more information about this legislation in the following official documents. - -.. seealso:: +Users are responsible for their Odoo system and must operate it carefully. Modifying source code +responsible for ensuring data integrity is not allowed. - - `Frequently Asked Questions - `_ - - `Official Statement - `_ - - `Item 88 of Finance Law 2016 - `_ +Odoo is not responsible for any issues with this module's functionality if caused by uncertified +third-party applications.