TVA

Cette partie traite des spécifications liées à la gestion de la TVA dans Ekylibre.

Un article présente bien le concept comptable sur Compta-facile

Rappel - Paramétrage

Les codes TVA sont présents en base et en nomenclature selon le pays et sont “éditables” depuis le menu Paramétrage / Comptabilité / Taxes.

Le plan de comptes est également paramétrable au même endroit (Paramétrage / Comptabilité)

Les catégories sont déclarées achetables et/ou vendables et/ou immobilisables

Les variants apparaissant dans les factures de ventes et d'achat sont rattachés à des catégories (via les types de produits)

Concept

1 - Déclaration

La déclaration liée à la taxe sur la valeur ajoutée (TVA) doit être générée par période (mensuelle, trimestrielle ou annuelle)

Cette déclaration utilise les pièces d'achats et de ventes ainsi que les encaissements et décaissements.

Chaque pièce d'achats ou de ventes peut comporter une ou plusieurs taxes.

Chaque taxe possède une valeur, un type , un pays et 4 comptes comptables.

  • Déductible ⇒ Achat
  • Collectée ⇒ Vente
  • Déductible sur immobilisation ⇒ Immobilisation
  • Collectée sur immobilisation ⇒ Cession d'Immobilisation

2 - Paiement

Une fois la déclaration effectuée, vous pouvez :

  • payer le solde si il est positif.
  • demander un remboursement du solde si il est négatif.
  • reporter ce solde au crédit de la prochaine déclaration.

Comptabilisation de TVA

Paramétrage :

  • Dans configuration/taxes, créer des taxes (Attention: sélectionner le type de chaque taxe) et renseigner les comptes de TVA déductible/collectée correspondants (445xxx)
  • Sur l'exercice comptable, sélectionner si la déclaration de TVA est calculée par rapport aux factures ou aux encaissements/décaissements. Verrouiller le choix après la première déclaration de TVA de l'exercice.
  • Vérifier usages des comptes comptables concernés par la déclaration TVA - Pour la France :
    • 44567 - Crédit de TVA
    • 44551 - TVA à décaisser
    • 4452 - TVA due intra-commuanutaire
    • 44583 - Demande de remboursement de TVA

1 - TVA sur achats

Lors d'une saisie de facture d'achat :

  • Montant TTC = Montant HT + Montant TVA (par ligne de facture)
  • Ecriture comptable:
Débit Crédit
6 - Compte de charges HT
4456xxx - TVA déductible TVA
401 - Fournisseur Total TTC

2 - TVA sur achats intracommunautaires

Lors d'une saisie de facture d'achat, si une taxe de type “TVA intra-communautaire” est sélectionnée alors :

  • Montant TTC = Montant HT (par ligne de facture)
  • Ecriture comptable:
Débit Crédit
6 - Compte de charges HT
4456xxx - TVA déductible TVA
401 - Fournisseur Total HT
4452 - TVA due intra-communautaire Total TVA

3 - TVA sur ventes

Ecriture lors d'une vente :

Débit Crédit
7 - Compte de produit HT
4457xxx - TVA collectée TVA
411 - Compte client Total TTC

4 - Déclaration TVA CA3

Un menu “Déclaration TVA” dans le module “Comptabilité” liste toutes les déclarations TVA de l'exercice en cours. Un bouton “Nouvelle déclaration” permet de sélectionner un type de déclaration TVA (créé dans le module Configuration - voir ci-dessus) et ouvre la vue ci-dessous.

Concept de la déclaration TVA sous Ekylibre

A / Lors de la création de la déclaration TVA

On va pré-remplir la déclaration tva (vat_declaration) avec :

- les dates de début (started_on) et fin de période (stopped_on) grâce à la la période TVA (vat_period) paramétrée dans l'exercice fiscal (financial_year). vat_period = [:monthly, :quaterly, :yearly, :none]

On va ensuite créer une ligne de déclaration tva par taxe utilisée.

Pour chaque ligne de déclaration tva (vat_declaration_item) :

  • Si le mode de tva (vat_mode) est : débit (:debit)
  1. pour le montant de la tva déductible
    1. pour chaque lignes d'achats non lettrée
      1. ⇒ HT = Montant HT de la ligne d'achat
      2. ⇒ TVA = Montant TVA de la ligne d'achat
  2. pour le montant de la tva collectée
    1. pour chaque lignes de ventes non lettrée
      1. ⇒ HT = Montant HT de la ligne de vente
      2. ⇒ TVA = Montant TVA de la ligne de vente
  • Si le mode de tva (vat_mode) est : paiement (:payment)
  1. pour le montant de la tva déductible
    1. pour chaque lignes d'achats et décaissements/encaissements liées et non lettrée
      1. ⇒ HT = Montant HT de la ligne d'achat * ratio paiement
      2. ⇒ TVA = Montant TVA de la ligne d'achat * ratio paiement
  2. pour le montant de la tva collectée
    1. pour chaque lignes de vents et décaissements/encaissements liées et non lettrée
      1. ⇒ HT = Montant HT de la ligne de vente * ratio paiement
      2. ⇒ TVA = Montant TVA de la ligne de vente * ratio paiement

Formules de calcul des ratios de paiements. Par affaire lettrée:

Puis pour la ligne de déclaration considérée, on doit :

  1. pour le montant de la tva déductible
    1. calculer la somme des montants HT puis stocker cette valeur dans “deductible_pretax_amount”
    2. calculer la somme des montants TVA puis stocker cette valeur dans “deductible_vat_amount”
  2. pour le montant de la tva collectée
    1. calculer la somme des montants HT puis stocker cette valeur dans “collected_pretax_amount”
    2. calculer la somme des montants TVA puis stocker cette valeur dans “collected_vat_amount”
  3. lettrer les identifiants uniques des lignes d'achats/ventes et décaissements/encaissements liées avec la ligne de déclaration tva

Consultation de la déclaration TVA

Dans cette vue, nous retrouvons (pour chaque taxe) :

Débit Crédit
TVA 20 4456 - Total TVA 20 déductible
44562 - Total TVA 20 déductible sur immos
4457 - Total TVA 20 collectée
TVA 10 4456 - Total TVA 10 déductible
44562 - Total TVA 10 déductible sur immos
4457 - Total TVA 10 collectée
TVA intra 20 445xxx - Total TVA intra 20 déductible
445623 - Total TVA intra 20 déductible sur immos
4452 - TVA due intracom
BILAN Total TVA collectée Total TVA déductible
44567 - Crédit de TVA 44551 - TVA à décaisser

NB : L'opération {Total TVA collectée - Total TVA déductible} génère un résultat:

  • Si Positif → Résultat = TVA à décaisser
  • Si Négatif → Valeur absolue du résultat = Crédit de TVA

Paiement

En bas de page, 2 boutons:

  • Bouton 1 : Demander un remboursement de TVA OU Payer la TVA
    • Demande de remboursement génère une écriture 44583/44567 puis à l'encaissement 512/44583
    • Payer la TVA génère un décaissement et une écriture 44551/512
  • Bouton 2 : Reporter la TVA
    • Le montant inscrit en compte 44567 sera reporté lors de la prochaine déclaration.

Une action sur un de ces boutons valide la déclaration de TVA et par conséquent verrouille toutes les pièces liées à cette déclaration (factures achats/ventes et écritures comptables associées).

Spécifications fonctionnelles

Voici un tableau avec un jeu de données permettant d'illustrer les explications ci-après :

Journal Écriture Date Libellé Compte Mode de déclaration Lettre Debit Crédit Base HT
AC AC001 25/04/2016 Choux 7071 1000
AC AC001 25/04/2016 TVA 5.5 sur Choux 4451 Paiement 55 1000
AC AC001 25/04/2016 Carottes 7072 1500
AC AC001 25/04/2016 TVA 20 sur Carottes 4452 Débit 300 1500
AC AC001 25/04/2016 Gérard BOUCHARD 401BOUC AK 2855
Déclaration TVA avril 2016
BK BK963 12/05/2016 Virement 7DFD44 401BOUC AK 1225
BK BK963 12/05/2016 Virement 7DFD44 5121 1225
Déclaration TVA mai 2016
CS CS412 02/06/2016 Liquide 401BOUC AK 1630
CS CS412 02/06/2016 Liquide 5311 1630
Déclaration TVA du mois juin 2016

Déclaration avril 2016

  • TVA 20% : 300€ (Base HT : 1500 €)

Déclaration mai 2016

  • TVA 5.5% : (55 * 1225 / 2855 - 0 = ) 23.60€ (Base HT : 429.07 €)

Déclaration juin 2016

  • TVA 5.5% : (55 * 2855 / 2855 - 23.60 = ) 31.40€ (Base HT : 570.93 €)

Exigibilité de la TVA dans les écritures

Il faut remonter l'information tax_declaration_mode qui se trouve au niveau des ventes et achats dans les journal_entry_items lors du processus de comptabilisation (bookkeep) pour les lignes contenant le compte de la taxe.

  • Dans le cas des achats (Purchase), l'information est stockée directement dans la table avec la colonne tax_payability : debit == at_invoicing, payment == at_paying.
  • Dans le cas des ventes (Ventes), l'information est stockée dans l'exercice (FinancialYear) en cours. Pas besoin de renseigner dans les ventes. Nous utiliserons la préférence utilisateur au moment de la déclaration.

Note pour l'avenir : Étudier la normalisation des 2 notations tax_payability et tax_declaration_mode

Lettrage des affaires non soldées

Les affaires lettrent les lignes d'écriture en comptabilité seulement au moment où l'écriture est soldée. Pour la gestion des prorata, il est nécessaire de connaître le lettrage en temps réel et il faut donc l'activer en permanence sans changer la lettre utilisée à chaque fois quand c'est possible.

Suivi des parties de déclaration de TVA

Pour suivre et verrouiller les prorata calculés pour chaque type de TVA, nous allons faire le lien entre les journal_entry_items et les tax_declaration_items avec le montant associé (tax_amount) à reporter dans la déclaration ainsi que la base hors taxe correspondante (pretax_amount).

La colonne journal_entry_items#tax_declaration_item_id est remplacée par la table suivante qui permet notamment de suivre au fur et à mesure des déclarations et pouvoir faire de la reprise sur erreur de déclaration si besoin.

create_table :tax_declaration_item_parts do |t|
  t.references :tax_declaration_item, index: true, null: false, foreign_key: true
  t.references :journal_entry_item, index: true, null: false, foreign_key: true
  t.references :account, index: true, null: false, foreign_key: true # Redondance. Vraie utilité ?
  t.decimal :tax_amount, precision: 19, scale: 4, null: false
  t.decimal :pretax_amount, precision: 19, scale: 4, null: false
  t.decimal :total_tax_amount, precision: 19, scale: 4, null: false
  t.decimal :total_pretax_amount, precision: 19, scale: 4, null: false
  t.string :direction, null: false
  t.stamps
  t.index :direction # collected, deductible, fixed_asset_deductible, intracommunauty_payable
                     # Voir TaxDeclarationItem
end

Dans le processus actuel TaxDeclarationItem fait le lien avec les écritures après avoir fait le calcul des sommes de TVA. Dans le nouveau processus, il faut :

  • Générer tous les tax_declaration_item_parts (cf ci-après
  • Calculer les sommes en fonction des tax_declaration_item_id et direction
tax_declaration_item.xxx_tax_amount = tax_declaration_item.parts.où(direction: 'xxx').somme('tax_amount')

Générer les TaxDeclarationItemPart

Cette partie concerne les 2 modes de prise en compte de la TVA : débit ou paiement. Pour déterminer ce mode, nous nous basons sur la colonne journal_entry_items#tax_declaration_mode et si elle n'est pas renseignée, il faut prendre en compte le mode de la déclaration de TVA (qui dépend directement de la configuration au niveau de l'exercice). Avant de commencer à générer, il faudra mettre à jour les colonnes vides pour mettre les mode dans le marbre. Nous considérons que le mode de paiement de la TVA ne peut pas changer dans le temps.

L'objectif est de générer en 2 requêtes pour les 2 modes l'ensemble des tax_declaration_item_parts.

Au débit

Dans ce cas-là, la TVA est exigible de suite. Donc pas de notion de pourcentage de règlement à prendre en compte.

SELECT jei.id AS journal_entry_item_id,
       (debit - credit) AS tax_amount,
       jei.pretax_amount AS pretax_amount, 
       (debit - credit) total_tax_amount, 
       jei.pretax_amount AS total_pretax_amount, 
       'deductible' AS direction
  FROM journal_entry_items AS jei
  WHERE printed_on BETWEEN ? AND ? 
    AND tax_declaration_mode = 'debit'
    AND tax_id = ? 
    AND jei.id NOT IN (SELECT journal_entry_item_id FROM tax_declaration_item_parts)

Au paiement

La formule évoquée (bien) plus haut est celle qui va être utilisée pour faire les calculs :

direction solde
collected credit - debit
deductible debit - credit
fixed_asset_deductible debit - credit
intracommunity_payable (à renseigner)

Soient jei un journal_entry_item jei donné, ljei les lignes d'écritures lettrées avec les mêmes lettres que celles définies dans jei.siblings (= jei.entry.items), eljei les ljei externes à jei.entry.items, iljei les ljei internes à jei.entry.items :

  • TVA à déclarer = TVA à payer - TVA déjà déclarée
  • TVA à payer = jei.balance_debit × Montant réglé / Montant à régler
  • Montant réglé = SOMME(eljei.balance_debit)
  • Montant à régler = SOMME(iljei.balance_credit)
  • TVA déjà déclarée = SOMME(jei.tax_declaration_item_parts.tax_amount)

Attention la notion débit/crédit dépend de la direction de la TVA. cf tableau ci-dessus. Les formules du dessus sont exprimées pour une taxe déductible

Pour une direction donnée (deductible), voici la requête SQL qui devrait produire les bonnes tax_declaration_item_parts :

SELECT jei.id AS journal_entry_item_id,
       (debit - credit)  * SUM(paid.balance) / total.balance - declared.amount AS tax_amount,
       jei.pretax_amount * SUM(paid.balance) / total.balance - declared.amount AS pretax_amount, 
       (debit - credit) total_tax_amount, 
       jei.pretax_amount AS total_pretax_amount, 
       'deductible' AS direction
  FROM journal_entry_items AS jei
    -- Calcul du montant total (= à régler) par écriture 
    JOIN (SELECT entry_id, account_id, letter, SUM(credit - debit) AS balance 
            FROM journal_entry_items 
            WHERE LENGTH(TRIM(letter)) > 0
            GROUP BY 1, 2, 3) AS total ON (total.entry_id = jei.entry_id)
    -- Calcul du montant réglé
    JOIN (SELECT entry_id, account_id, letter, debit - credit AS balance 
            FROM journal_entry_items 
            WHERE LENGTH(TRIM(letter)) > 0)
      AS paid
      ON (total.letter = paid.letter AND total.account_id = paid.account_id AND total.entry_id != paid.entry_id)
    -- Calcul du montant déclaré par écriture 
    JOIN (SELECT journal_entry_item_id, direction, SUM(tax_amount) AS amount
            FROM tax_declaration_item_parts
            GROUP BY 1, 2) AS declared ON (jei.id = declared.journal_entry_item_id AND direction = 'deductible')
  WHERE printed_on BETWEEN ? AND ? 
    AND tax_declaration_mode = 'payment'
    AND tax_id = ? 
    AND (jei.id, jei.tax_amount) NOT IN (SELECT journal_entry_item_id, SUM(tax_amount) AS tax_amount FROM tax_declaration_item_parts GROUP BY 1)