França¶
Importante
You must install the France - Adding Mandatory Invoice
Mentions (Decree no. 2022-1299) (l10n_fr_invoice_addr
) module to comply with the local
legislation.
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
, enable FEC Import, and Save.Next, go to
, upload your FEC file, and click on Import.Nota
File formats¶
FEC files can only be in CSV format, as the XML format is not supported.
Nota
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,
orTAB
.Line terminators: both CR+LF (
\r\n
) and LF (\n
) character groups are supported.Date format:
%Y%m%d
Fields description and use¶
# |
Nome do campo |
Descrição |
Usar |
Formato |
---|---|---|---|---|
01 |
JournalCode |
Journal Code |
|
Alphanumeric |
02 |
JournalLib |
Journal Label |
|
Alphanumeric |
03 |
EcritureNum |
Numbering specific to each journal sequence number of the entry |
|
Alphanumeric |
04 |
EcritureDate |
Accounting entry Date |
|
Date (yyyyMMdd) |
05 |
CompteNum |
Número da conta |
|
Alphanumeric |
06 |
CompteLib |
Rótulo da conta |
|
Alphanumeric |
07 |
CompAuxNum |
Secondary account Number (accepts null) |
|
Alphanumeric |
08 |
CompAuxLib |
Secondary account Label (accepts null) |
|
Alphanumeric |
09 |
PieceRef |
Document Reference |
|
Alphanumeric |
10 |
PieceDate |
Document Date |
|
Date (yyyyMMdd) |
11 |
EcritureLib |
Account entry Label |
|
Alphanumeric |
12 |
Débito |
Debit amount |
|
Flutuante |
13 |
Crédito |
Credit amount (Field name “Crédit” is not allowed) |
|
Flutuante |
14 |
EcritureLet |
Accounting entry cross reference (accepts null) |
|
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) |
|
Flutuante |
18 |
Idevise |
Currency identifier (accepts null) |
|
Alphanumeric |
These two fields can be found in place of the others in the sence above.
12 |
Montant |
Valor |
|
Flutuante |
13 |
Sens |
Can be “C” for Credit or “D” for Debit |
determines |
Caractere |
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.
Contas¶
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.
Nota
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
Nome |
Código |
Full comparison |
3-digits comparison |
2-digits comparison |
---|---|---|---|---|
Modelo |
|
|
|
|
CompteNum |
|
|
|
|
Result |
Match found |
The type of the account is then flagged as payable and reconcilable as per the account template.
Diários¶
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, sobank
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.
Nota
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
.
Movimentações |
Total |
Porcentagem |
---|---|---|
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%).
Parceiros¶
Each partner keeps its Reference
from the field CompAuxNum
.
Nota
These fields are searchable, in line with former FEC imports on the accounting expert’s side for fiscal/audit purposes.
Dica
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.
Movimentações¶
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 debits758000
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.
Exportar¶
If you have installed the French fiscal localization package, you should be able to download the FEC. To do so, go to .
Dica
If you do not see the submenu FEC, go to
, remove the Apps filter, then search for the module named France-FEC and make sure it is installed.Relatórios de contabilidade franceses¶
Se você instalou a contabilidade francesa, terá acesso a alguns relatórios contábeis específicos da França:
Bilan compatível
Declaração de renda
Plano Fiscal da França
Obtenha a certificação antifraude de VAT com Odoo¶
A partir de 1º de janeiro de 2018, uma nova legislação antifraude entra em vigor na França e no DOM-TOM. Esta nova legislação estipula alguns critérios relativos à inalterabilidade, segurança, armazenamento e arquivo dos dados de venda. Esses requisitos legais são implementados no Odoo, versão 9 em diante, por meio de um módulo e um certificado de conformidade para download.
Is my company required to use anti-fraud software?¶
Your company is required to use an anti-fraud cash register software like Odoo (CGI art. 286, I. 3° bis) if:
You are taxable (not VAT exempt) in France or any DOM-TOM,
Alguns de seus clientes são pessoas físicas (B2C).
Esta regra se aplica a empresas de qualquer porte. Os autoempresários estão isentos de IVA e, portanto, não são afetados.
Obtenha a certificação Odoo¶
Tornar-se compatível com o Odoo é muito fácil.
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.
In case of non-conformity, your company risks a fine of €7,500.
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 , removing the Apps filter, then searching for l10n_fr_pos_cert, and installing the module.
Certifique-se de que um país esteja definido em sua empresa, caso contrário, suas entradas não serão criptografadas para a verificação de inalterabilidade. Para editar os dados de sua empresa, acesse: seleção de menus:
Configurações -> Usuários & Empresas -> Empresas
. Selecione um país da lista; Não crie um novo país.Baixe o certificado de conformidade obrigatório entregue pela Odoo SA
aqui <https://www.odoo.com/my/contract/french-certification/>
__.
Nota
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.
Caso você execute o Odoo localmente, é necessário atualizar a instalação e reiniciar o servidor com antecedência.
Se você instalou a versão inicial do módulo antifraude (antes de 18 de dezembro de 2017), será necessário atualizá-lo. O nome do módulo era França - Contabilidade - Certificado CGI 286 I-3 bis. Após uma atualização da lista de módulos, procure o módulo atualizado em Aplicativos, selecione-o e clique em Upgrade. Finalmente, certifique-se de que o seguinte módulo l10n_fr_sale_closing esteja instalado.
Recursos antifraude¶
O módulo antifraude apresenta os seguintes recursos:
** Inalterabilidade **: desativação de todas as formas de cancelar ou modificar dados-chave de pedidos de PDV, faturas e lançamentos contábeis manuais;
** Segurança **: algoritmo de encadeamento para verificar a inalterabilidade;
** Armazenamento **: fechamentos de vendas automáticos com cálculo do período e totais acumulados (diário, mensal, anual).
Inalterabilidade¶
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.
Nota
Se você administrar um ambiente com várias empresas, apenas os documentos dessas empresas serão afetados.
Segurança¶
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.
O módulo apresenta uma interface para testar a inalterabilidade dos dados. Se alguma informação for modificada em um documento após sua validação, o teste irá falhar. O algoritmo recalcula todos os hashes e os compara com os iniciais. Em caso de falha, o sistema aponta o primeiro documento corrompido registrado no sistema.
Users with Manager access rights can launch the inalterability check. For POS orders, go to
. For invoices or journal entries, go to .Armazenamento¶
O sistema também processa fechamentos automáticos de vendas em bases diárias, mensais e anuais. Esses fechamentos calculam distintamente o total de vendas do período, bem como os totais gerais acumulados desde a primeira entrada de vendas registrada no sistema.
Os fechamentos podem ser encontrados no menu * Declarações francesas * dos aplicativos Ponto de venda, Faturamento e Contabilidade.
Nota
Closings compute the totals for journal entries of sales journals (Journal Type = Sales).
Para ambientes multiempresas, tais fechamentos são realizados por empresa.
Os pedidos de PDV são lançados como lançamentos contábeis manuais no encerramento da sessão de PDV. O fechamento de uma sessão de PDV pode ser feito a qualquer momento. Para solicitar aos usuários que o façam diariamente, o módulo evita o retorno de uma sessão aberta há mais de 24 horas. Essa sessão deve ser encerrada antes de vender novamente.
O total de um período é calculado a partir de todas as entradas de diário lançadas após o fechamento anterior do mesmo tipo, independentemente da data de lançamento. Se você registrar uma nova transação de venda para um período já fechado, ela será contada no fechamento seguinte.
Dica
For test & audit purposes such closings can be manually generated in the developer mode.
Then go to
.
Responsabilidades¶
Não desinstale o módulo! Se você fizer isso, os hashes serão redefinidos e nenhum dos seus dados anteriores terá a garantia de inalterabilidade.
Os usuários permanecem responsáveis por sua instância Odoo e devem usá-la com a devida diligência. Não é permitida a modificação do código fonte, o que garante a inalterabilidade dos dados.
Odoo absolve-se de toda e qualquer responsabilidade em caso de alterações nas funções do módulo causadas por aplicações de terceiros não certificadas pela Odoo.
Mais informações¶
You can find more information about this legislation in the following official documents.