法国

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 导入

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

注解

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.

注解

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

说明

使用

格式

01

JournalCode

日志代码

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

Alphanumeric

02

JournalLib

日记账标签

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

借方

借方总额

move_line.debit

浮动

13

贷方

Credit amount (Field name “Crédit” is not allowed)

move_line.credit

浮动

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

浮动

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

金额

move_line.debit or move_line.credit

浮动

13

Sens

Can be “C” for Credit or “D” for Debit

determines move_line.debit or move_line.credit

字符

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.

会计科目

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.

注解

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

名称

代号

Full comparison

3-digits comparison

2-digits comparison

模板

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.

日记账

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.

注解

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

移动

计数

百分比

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%).

合作伙伴

Each partner keeps its Reference from the field CompAuxNum.

注解

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

小技巧

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.

移动

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.

输出

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

小技巧

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.

法国会计报告

If you have installed the French Accounting, you will have access to some accounting reports specific to France:

  • 会计余额

  • 结果帐户

  • 法国税收计划

通过 Odoo 获得增值税反欺诈认证

截至 2018年1月1日, 法国和 DOM-TOM 实施了一项新的反欺诈立法。这一新立法规定了有关销售数据的 inalterability、安全、存储和归档的某些标准。这些法律要求在 Odoo 中实施, 版本9继续, 通过模块和合格证书下载.

Is my company required to use anti-fraud software?

您的公司需要使用一个反欺诈现金登记软件, 如 Odoo (CGI art. 286, i. 3° bis) 如果:

  • 您在法国或任何 DOM-汤姆应纳税 (不含增值税),

  • 您的一些客户是个人 (B2C).

此规则适用于任何公司规模。自动创业者免征增值税, 因此不受影响.

获得 Odoo 认证

与 Odoo 的兼容是非常容易的.

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.

如果不符合规定, 您的公司将面临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.

  • 确保您的公司设置了一个国家/地区,否则您的条目将不会被加密不变性检查。要编辑您公司的数据,请转到 :menuselection: 设置 --> 用户和公司 --> 公司。从列表中选择一个国家/地区; 不要创建一个新的国家。

  • 下载 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 developer mode. Then go to the Apps menu and press Update Modules List in the top-menu.

  • 如果您在本地运行 Odoo, 您需要更新您的安装并提前重新启动服务器.

  • 如果您安装了反欺诈模块的初始版本 (2017年12月18日之前), 则需要对其进行更新.该模块的名称是 * 法国-会计认证 CGI 286 I-3 bis *。更新模块列表后, 在 * 应用程序 * 中搜索更新的模块 *, 选择它, 然后单击 * 升级 *。最后, 确保安装了以下模块 * l10n_fr_sale_closing *.

反欺诈功能

反欺诈模块引入了以下功能:

  • 不变性:取消或修改 POS 订单、发票和日记帐分录的关键数据的所有方式的停用;

  • Security:链算法验证不变化;

  • Storage:自动销售结转,计算期间和累计合计 (每日、每月、每年)。

Inalterability

如果公司位于法国或任何 DOM-TOM, 则取消和修改付费 POS 订单、已确认发票和日记帐分录的关键数据的所有可能方法都将被停用.

注解

如果您运行的是多公司环境, 则只有这些公司的文档受到影响.

安全

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.

该模块引入一个接口来测试数据 inalterability。如果文档在验证后修改了任何信息, 则测试将失败。算法重新计算所有哈希值, 并将它们与初始值进行比较。在出现故障时, 系统会指出系统中记录的第一个损坏的文档.

具有 管理员 访问权限的用户可以启动不变化检查。对于 POS 订单,请转到 POS ‣ 报告 - 法国声明。对于发票或日记帐分录,请转到 开票/记帐 ‣ 报告-法国声明.

存储

该系统还处理每日、每月和每年的自动销售结转。此类结算会显著计算该期间的销售总额以及系统中记录的第一个销售条目的累计总计.

Closings can be found in the French Statements menu of Point of Sale, Invoicing and Accounting apps.

注解

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

小技巧

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

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

责任

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.

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.

More Information

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