France

FEC - Fichier des Écritures Comptables

An FEC 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 1st, 2014, every French company is required to produce and transmit this file upon request by the tax authorities for audit purposes.

FEC import

To make the onboarding of new users easier, Odoo Enterprise’s French 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.

To enable this feature, go to Accounting ‣ Configuration ‣ Settings ‣ Accounting Import, enable FEC Import, and Save.

Next, go to Accounting ‣ Configuration ‣ FEC Import, upload your FEC file, and click on Import.

Note

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.

File formats

FEC files can only be in CSV format, as the XML format is not supported.

Note

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.

Our module expects the files to meet 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

Fields description and use

#

Field name

Description

Usage (…contexte ?)

Format

01

JournalCode

Journal Code

journal.code and journal.name if JournalLib is not provided

Alphanumeric

02

JournalLib

Journal Label

journal.name

Alphanumeric

03

EcritureNum

Numbering specific to each journal sequence number of the entry

move.name

Alphanumeric

04

EcritureDate

Accounting entry Date

move.date

Date (yyyyMMdd)

05

CompteNum

Account Number

account.code

Alphanumeric

06

CompteLib

Account Label

account.name

Alphanumeric

07

CompAuxNum

Secondary account Number (accepts null)

partner.ref

Alphanumeric

08

CompAuxLib

Secondary account Label (accepts null)

partner.name

Alphanumeric

09

PieceRef

Document Reference

move.ref and move.name if EcritureNum is not provided

Alphanumeric

10

PieceDate

Document Date

move.date

Date (yyyyMMdd)

11

EcritureLib

Account entry Label

move_line.name

Alphanumeric

12

Débit

Debit amount

move_line.debit

Float

13

Crédit

Credit amount (Field name « Crédit » is not allowed)

move_line.credit

Float

14

EcritureLet

Accounting entry cross reference (accepts null)

move_line.fec_matching_number

Alphanumeric

15

DateLet

Accounting entry date (accepts null)

unused

Date (yyyyMMdd)

16

ValidDate

Accounting entry validation date

unused

Date (yyyyMMdd)

17

Montantdevise

Currency amount (accepts null)

move_line.amount_currency

Float

18

Idevise

Currency identifier (accepts null)

currency.name

Alphanumeric

These two fields can be found in place of the others in the sence above.

12

Montant

Amount

move_line.debit or move_line.credit

Float

13

Sens

Can be « C » for Credit or « D » for Debit

determines move_line.debit or move_line.credit

Char

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.

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.

Accounts

Every accounting entry is related to an account, which should be determined by the field CompteNum.

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.

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.

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.

Note

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.

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.

The match is done with the left-most digits, starting by using all digits, then 3, then 2.

Example

Name

Code

Full comparison

3-digits comparison

2-digits comparison

Template

400000

400000

400

40

CompteNum

40100000

40100000

401

40

Result

Match found

The type of the account is then flagged as payable and reconcilable as per the account template.

Journaux

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.

New journals have their name prefixed by the string FEC-.

Example

ACHATS -> FEC-ACHATS

The journals are not archived, the user is entitled to handle them as he wishes.

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.

At the end of the import process, the type is determined as per these rules regarding related moves and accounts:

  • bank: Moves in these journals always have 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 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 debit lines on expense accounts.
    Purchase refund journal items are debit/credit inverted.
  • general: 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.

Example

Suppose we are analyzing the moves that share a certain journal_id.

Moves

Count

Percentage

that have a sale account line and no purchase account line

0

0

that have a purchase account line and no sale account line

1

25%

that have a liquidity account line

3

75%

Total

4

100%

The journal type would be bank, because the bank moves percentage (75%) exceeds the threshold (70%).

Partners

Each partner keeps its Reference from the field CompAuxNum.

Note

These fields are searchable, in line with former FEC imports on the accounting expert’s side for fiscal/audit purposes.

Astuce

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.

Moves

Entries are immediately posted and reconciled after submission, using the EcritureLet field to do the matching between the entries themselves.

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.

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:

  • 658000 Charges diverses de gestion courante, for added debits

  • 758000 Produits divers de gestion courante, for added credits

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.

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.

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.

Partner 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.

Export

If you have installed the French fiscal localization package, you should be able to download the FEC. To do so, go to Accounting ‣ Reporting ‣ France ‣ FEC.

Astuce

If you do not see the submenu FEC, go to Apps, remove the Apps filter, then search for the module named France-FEC and make sure it is installed.

French accounting reports

Si vous avez installé la comptabilité française, vous aurez accès à certains rapports comptables spécifiques à la France:

  • Bilan comptable

  • Compte de résultats

  • Plan de Taxes France

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 financial activities and determines corporate taxes.

Teledec is a platform used to prepare and submit tax returns using data from accounting records. To synchronize your accounting data stored in Odoo with Teledec and electronically send your company’s liasse fiscale to the DGFiP (Direction Générale des Finances Publiques), follow these steps:

  1. Teledec account creation

  2. Company registration and fiscal year information

  3. Odoo synchronization

Teledec account creation

To create a Teledec account, access the Teledec account creation page and fill in the Adresse e-mail field with an email address. Choose a secure password, accept the general terms and conditions by checking the box, and click S’enregistrer to save. Then, enter the SIREN number of the company.

Note

If the account has already been created, click Déjà enregistré? (Already registered).

Company registration and fiscal year information

To register the company on Teledec, go to Vos entreprises (Your companies) and click Enregistrer votre entreprise (Register your company). Make sure to fill in the following company information in the Coordonnées de l’entreprise (Company’s details) and Représentant légal (Legal representative) sections:

  • Nom de l’entreprise: Company’s name.

  • Forme juridique: Select the company’s legal form.

  • Les comptes sont clôturés le: Closing date.

  • Régime d’imposition, choix de la liasse: Select the Tax scheme and tax return option.

  • Adresse du siège social: Head office address.

  • Nom du représentant légal: Legal representative’s name.

  • Agissant en qualité de: Legal representative’s function.

  • Numéro de téléphone: Phone number.

Click Sauvegarder (Save) to display the next step Informations générales sur l’exercice déclaré (General information about the declared fiscal year). Then, fill in information on the financial year, such as the fiscal year start and end dates or the closing date and duration of the previous fiscal period. After saving, the list of documents included in the liasse fiscale is displayed, including both standard tax forms and those customized for the company’s tax return.

Astuce

  • The Etat (Status) column shows the progress of the document filing.

  • Click Compléter to fill out a document, then Sauvegarder to save.

  • To print a blank version of the declaration, click Imprimer la déclaration and select the Imprimer la déclaration avec les notices option.

Odoo synchronization

To enable Odoo to automatically fill in the data for the Liasse fiscale, click Autres actions (Other actions) in the top-right corner and select Synchroniser avec un logiciel tiers (Synchronize with third-party software), then Synchroniser cette liasse avec Odoo (Synchronize this liasse with Odoo).

In the Synchroniser cette liasse avec Odoo window, fill in the following information to complete the synchronization:

  • Nom / URL complète de la base de données ODOO: Odoo database name or URL. To provide the full URL of the database, enable Je voudrais donner une url complète hors .odoo.com option.

  • Nom de l’utilisateur: User name associated with the Odoo account.

  • Clé API: API key generated by the Odoo instance.

Next, click Importer to synch data from Odoo. In the Confirmation de la synchronisation de liasse avec Odoo window, review the amounts and make any necessary changes. Then click Importer la balance to confirm the synchronization of the liasse fiscale with Odoo and import the balance.

Important

Clicking Importer la balance may overwrite or alter any manual updates made previously.

To make payment and send the declaration to the tax authorities, click Paiement & envoi de la déclaration.

Se conformer à la législation anti-fraude à la TVA avec Odoo

Depuis 1er janvier 2018, une nouvelle législation anti-fraude est d’application en France Métropolitaine et dans les DOM-TOM. Cette nouvelle législation impose l’utilisation par les entreprises concernées d’un logiciel de caisse respectant des critères d’inaltérabilité, de sécurité, de stockage et d’archivage des données de vente. Ces exigences légales sont implémentées dans Odoo, de la version 9 aux plus récentes, via un module additionnel à installer et une attestation de conformité individuelle à télécharger.

Is my company required to use anti-fraud software?

Votre entreprise est tenue d’utiliser un logiciel de caisse anti-fraude comme Odoo (CGI article 286, I. 3 ° bis) si:

  • Vous êtes assujetti à la TVA et n’êtes pas concerné par le régime de franchise de la TVA,

  • Certains de vos clients sont des particuliers (B2C).

Cette règle s’applique à toute taille d’entreprise. Les auto-entrepreneurs sont exemptés de la TVA et ne sont donc pas affectés.

Se conformer à la législation

Se conformer à cette nouvelle législation est très facile.

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 upgrade to Odoo Enterprise or contact your Odoo service provider.

En cas de non-conformité, votre entreprise risque une amende de 7500€.

To get the certification, just follow the following steps:

  • If you use Odoo Point of Sale, install the France - VAT Anti-Fraud Certification for Point of Sale (CGI 286 I-3 bis) module by going to Apps, removing the Apps filter, then searching for l10n_fr_pos_cert, and installing the module.

  • Assurez-vous qu’un pays est bien défini sur votre société, sinon vos entrées ne seront pas cryptées pour la vérification de l’inaltérabilité. Pour modifier les données de votre société, allez dans Configuration ‣ Utilisateurs & Sociétés ‣ Sociétés. Sélectionnez un pays parmis la liste; Ne créez pas un nouveau pays.

  • Téléchargez votre attestation de conformité délivrée par SA ici.

Note

  • To install the module in any system created before December 18th 2017, you should update the modules list. To do so, activate the developer mode. Then go to the Apps menu and press Update Modules List in the top-menu.

  • Si vous utilisez Odoo hébergé sur serveur propre, vous devez mettre à jour votre installation Odoo et redémarrer votre serveur.

  • Dans le cas où vous auriez installé la version initiale du module anti-fraude (avant le 18 décembre 2017), you devez mettre à jour ce dernier. Le nom initial du module était France - Accounting - Certified CGI 286 I-3 bis. Après avoir mis à jour la liste des modules, sélectionnez le nouveau module dans le menu Applications et cliquez sur le bouton Mettre à jour. Enfin, vérifiez que le module l10n_fr_sale_closing est installé.

Fonctionnalités anti-fraude

Le module anti-fraude introduit les fonctionnalités suivantes:

  • Inaltérabilité: désactivation de toutes les méthodes d’annulation ou de modification des données clés des commandes de PdV, factures et entrées comptables.

  • Sécurité: algorithme de chainage pour vérifier l’inaltérabilié;

  • Stockage: clôtures de ventes automatiques avec calculs des totaux périodiques et cumulatifs (journaliers, mensuels, annuels).

Inaltérabilité

Toutes les possibilités d’annuler ou modifier les données clés des commandes de Point de Vente payés, factures confirmées ou entrées comptables sont désactivées, si la société est localisée en France ou dans les DOM-TOM.

Note

Si vous utilisez un environnement multi-sociétés, seuls les documents des sociétés françaises ou DOM-TOM sont cryptés.

Sécurité

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.

Le module permet à l’utilisateur ou le contrôleur fiscal de vérifier l’inaltérabilité des données. Si une information clé est modfiée sur un document après sa validation, le test échoue automatiquement. L’algorithme recalcule toutes les clés de cryptage et les compare avec les clés initiales. En cas de différence, le système fournit la référence du premier document corrompu.

Les utilisateurs qui bénéficient de droits d’accès de type Gestionnaire peuvent lancer le test d’inaltérabilité. Pour les commandes de PdV, allez dans Point de Vente ‣ Rapports ‣ Déclarations françaises. Pour les factures et entrées comptables, allez dans Facturation ‣ Rapports ‣ Déclarations françaises.

Stockage

Le système procède aussi à des clôtures de ventes automatiques de façon journalière, mensuelle et annuelle. Ces clôtures calculent de façon distincte le total de ventes d’une période ainsi que le grands total cumulatif depuis la première entrée enregistrée dans le système.

Les clôtures sont accessibles depuis le menu Déclarations françaises des modules Point de Vente et Facturation.

Note

  • Les clôtures calculent les totaux des entrées comptables des journaux de ventes (Type de Journal = Ventes).

  • Dans les environnements multi-sociétés, les clôtures sont effectuées par société.

  • Les commandes de PdV sont comptabilisées dans les pièces comptables à la clôture de la session de PdV. Clôturer une session de PdV peut être fait à tout moment. Pour inciter l’utilisateur à le faire de façon journalière et ainsi permettre le calcul journalier des totaux de ventes, le module empêche de reprendre une session de vente ouverte depuis plus de 24 heures. Une telle session doit être clôturée pour pouvoir vendre à nouveau.

  • Le total de la période est calculé à partir de toutes les entrées comptables comptabilisées après la précédente clôture du même type (journalier, mensuel, annuel), quelque soit la date de comptabilisation.

Astuce

  • For test & audit purposes such closings can be manually generated in the developer mode.

  • Then go to Settings ‣ Technical ‣ Automation ‣ Scheduled Actions.

Responsabilités

Ne désinstallez pas le module! Les numéros de cryptage seraient supprimés et toutes les données précedemment enregistrées ne seraient plus considérées comme étant inaltérées.

Les administrateurs de système sont responsables de leur instance Odoo et doivent l’utiliser et le configurer en bon père de famille. Il n’est pas autorisé de modifier le code source qui guarantit l’inaltérabilité des données.

Odoo SA se décharge de toute responsabilité en cas d’altération des fonctionnalités anti-fraude par des modules tiers non certifiés par Odoo SA.

More information

You can find more information about this legislation in the following official documents.