Skip to content
Log in

Calcul de facture

Ce guide explique comment B2Brouter calcule les montants nets et bruts à partir d’entrées telles que la quantité, le prix, la quantité de base, les taxes et d’éventuelles remises ou charges, qui peuvent être fournies sous forme de pourcentages ou de montants fixes. Les calculs prennent en charge les ajustements aux niveaux de la ligne et de la facture.

Tous les calculs et arrondis sont effectués automatiquement par B2Brouter. L’objectif de ce guide est d’expliquer le processus et les résultats auxquels vous devez vous attendre.

Il s’agit des remises et charges globales au niveau de la facture, via allowance_charges_attributes :

  • Allowance (Remise) : (Optionnel) {allowance_charge_indicator: "allowance"} avec soit :
    • percentage : pourcentage de remise appliqué à l’ensemble de la facture.
    • amount : montant fixe de remise appliqué à l’ensemble de la facture.
  • Charge : (Optionnel) {allowance_charge_indicator: "charge"} avec soit :
    • percentage : pourcentage de charge appliqué à l’ensemble de la facture.
    • amount : montant fixe de charge appliqué à l’ensemble de la facture.

Pour chaque ligne (invoice_lines_attributes), vous devez fournir les informations suivantes :

  • Quantity (quantity) : nombre d’unités.
  • Price (price) : prix pour la quantité de base d’unités indiquée.
  • Base Quantity (base_quantity) : nombre d’unités auquel le prix s’applique. La valeur par défaut est 1. Utilisez ce champ lorsque le prix est exprimé pour plusieurs unités (par ex. prix pour 100 pièces).
  • Taxes (taxes_attributes) :
    • Name : nom de la taxe (par ex. VAT, IVA, IRPF).
    • Category : catégorie de taxe.
    • Percent : pourcentage de taxe appliqué (peut être positif ou négatif).
  • Allowance (Remise) : (Optionnel) via allowance_charges_attributes[]{allowance_charge_indicator: "allowance"} avec soit :
    • percentage : pourcentage de remise appliqué à la ligne.
    • amount : montant fixe de remise appliqué à la ligne.
  • Charge : (Optionnel) via allowance_charges_attributes[]{allowance_charge_indicator: "charge"} avec soit :
    • percentage : pourcentage de charge appliqué à la ligne.
    • amount : montant fixe de charge appliqué à la ligne.
  • Extension Amount : (Optionnel) le montant total « net » de la ligne de facture avant application des taxes. S’il n’est pas fourni, l’API le calculera comme expliqué dans Montants nets au niveau ligne.
  • Rounding Method (rounding_method) : méthode d’arrondi utilisée pour les calculs ultérieurs. Par défaut, elle est définie sur Round half up (half_up).

  • Round Before Sum (round_before_sum) : arrondir les bases taxables des lignes avant la somme. Par défaut, cette option est définie sur false.

  • Apply Taxes per Line(apply_taxes_per_line) : si défini sur true, calcule le montant de taxe au niveau de la facture en appliquant les taxes à chaque ligne puis en les additionnant. Sinon, additionne toutes les bases taxables des lignes et applique la taxe à la somme. Par défaut, cette option est définie sur false.

    • Skip Line Taxable Base Rounding (skip_line_taxable_base_rounding) : lorsqu’elle est activée, les bases taxables par ligne et les montants de taxe ne sont pas arrondis individuellement ; seul le total final cumulé des taxes est arrondi. Par défaut, cette option est définie sur false.

    Important : ce paramètre est destiné exclusivement aux comptes dont l’ERP utilise des totaux TVA incluse, car il s’écarte du calcul fiscal standard. apply_taxes_per_line: true doit être activé pour qu’il ait un effet.

Montant de base de la ligne = Quantité * Prix / Quantité de base

Lorsque base_quantity vaut 1 (valeur par défaut), cela se simplifie en Quantité * Prix.

Lorsque base_quantity est supérieur à 1, cela permet d’exprimer les prix pour plusieurs unités. Par exemple, si des vis sont tarifées à 12,50 pour 100 pièces et que vous en commandez 500 :

Montant de base de la ligne = 500 * 12.50 / 100 = 62.50

Si Extension Amount(extension_amount) a été fourni, il sera utilisé comme montant net de la ligne dans tous les calculs. Sinon, nous calculons le montant net de la ligne.

Pour chaque ligne, nous calculons le montant net en appliquant la remise et la charge :

Montant net de la ligne = Montant de base de la ligne - Montant de remise de la ligne + Montant de charge de la ligne

Si nos remises ou charges sont représentées en pourcentages, nous calculons leur montant comme suit :

Montant de charge de la ligne = Montant de base de la ligne * (Pourcentage de charge de la ligne / 100)
Montant de remise de la ligne = Montant de base de la ligne * (Pourcentage de remise de la ligne / 100)

Si les montants de remise ou de charge sont fixes, nous pouvons ignorer cette étape.

Enfin, nous calculons le montant net de la ligne en soustrayant la remise et en ajoutant la charge :

Montant net de la ligne = Montant de base de la ligne - Montant de remise de la ligne + Montant de charge de la ligne

Comme le montant net de la ligne doit être arrondi à deux décimales, veuillez noter que les différentes parties du calcul doivent être arrondies séparément. Par exemple, le résultat de Montant net de la ligne = Montant de base de la ligne doit être arrondi à deux décimales, et les montants de remise/charge sont également arrondis séparément.

Si le montant de remise/charge de la ligne n’est pas fourni, il est traité comme 0.

Montant net de la ligne = Montant de base de la ligne

Additionnez les montants nets de toutes les lignes pour calculer le sous-total. Ce calcul dépend du paramètre round_before_sum.

  • Round Before Sum est défini sur true : la méthode d’arrondi est appliquée à chaque montant net de ligne avant de tous les additionner.
Sous-total = ∑(rounding_method(Montant net de la ligne))
  • Round Before Sum est défini sur false : la méthode d’arrondi est appliquée à la somme de tous les montants nets de ligne.
Sous-total = rounding_method(∑(Montant net de la ligne))

Si des remises ou charges au niveau facture sont fournies :

Sous-total = ∑(Montants nets de ligne) - Montant de remise de facture + Montant de charge de facture

Si le pourcentage est fourni pour la remise ou la charge au niveau facture, nous calculerons leurs montants de la même manière qu’au niveau ligne.

Après avoir calculé le montant net de la ligne, appliquez les taxes (si elles sont fournies) en fonction de taxes_attributes. Un pourcentage de taxe négatif indique une retenue. Les taxes sont appliquées selon le paramètre apply_taxes_per_line.

Montant taxable de la ligne (ou base) = Montant net de la ligne

Apply Taxes per Line est défini sur true : les taxes seront appliquées à chaque montant taxable de ligne (ou base) puis additionnées pour obtenir le montant total des taxes de la facture.

  • Plusieurs taxes peuvent s’appliquer à chaque ligne. Chaque taxe est appliquée individuellement.
Montant de taxe de la ligne = Montant taxable de la ligne × (Pourcentage de taxe / 100)
  • Si le paramètre Round Before Sum est actif, le montant taxable de chaque ligne est arrondi avant l’application du pourcentage de taxe. Sinon, il sera arrondi après l’application du pourcentage de taxe.
Montant de taxe de la ligne = rounding_method(Montant taxable de la ligne) x (Pourcentage de taxe / 100) [Actif]
Montant de taxe de la ligne = rounding_method(Montant taxable de la ligne x (Pourcentage de taxe / 100)) [Inactif]

Somme des montants de taxe par ligne

Le montant total de taxe de chaque ligne est la somme de toutes les taxes appliquées à cette ligne.

Calcul des taxes au niveau facture

Le calcul du montant de taxe au niveau facture est basé sur les paramètres apply_taxes_per_line et round_before_sum. Il faut donc s’attendre à 4 approches différentes selon les réglages :

  1. apply_taxes_per_line = true et round_before_sum = true
Montant taxable de la ligne = rounding_method(Montant net de la ligne - Montant de remise de la ligne)
Montant de taxe de la ligne = rounding_method(Montant taxable de la ligne x (Pourcentage de taxe / 100))
Montant de taxe de la facture = ∑(Montants de taxe de ligne)
  1. apply_taxes_per_line = true et round_before_sum = false
Montant taxable de la ligne = Montant net de la ligne - Montant de remise de la ligne
Montant de taxe de la ligne = rounding_method(Montant taxable de la ligne x (Pourcentage de taxe / 100))
Montant de taxe de la facture = ∑(Montants de taxe de ligne)
  1. apply_taxes_per_line = false et round_before_sum = true
Montant taxable de la ligne = rounding_method(Montant net de la ligne - Montant de remise de la ligne)
Montant de taxe de la facture = Montants taxables de ligne x (Pourcentage de taxe / 100)
  1. apply_taxes_per_line = false et round_before_sum = false
Montant taxable de la ligne = Montant net de la ligne - Montant de remise de la ligne
Montant de taxe de la facture = Montants taxables de ligne x (Pourcentage de taxe / 100)

Total de la facture :

Total = Sous-total + Montant de taxe de la facture

Précision décimale

Toutes les valeurs sont arrondies à deux décimales (correspondant aux centimes dans la plupart des devises).

Règles d’arrondi

Le paramètre de méthode d’arrondi définit comment l’arrondi est appliqué, et il peut être configuré selon trois options différentes :

  • Round half up (half_up) : méthode d’arrondi par défaut.
    • Si la troisième décimale est 5 ou plus, arrondissez la deuxième décimale vers le haut.
    • Si la troisième décimale est 4 ou moins, laissez la deuxième décimale inchangée.
  • Bankers rounding (bankers) : arrondit les valeurs médianes vers la valeur paire la plus proche.
    • Si la troisième décimale est 6 ou plus, arrondissez la deuxième décimale vers le haut.
    • Si la troisième décimale est 4 ou moins, laissez la deuxième décimale vers le bas.
    • Si la troisième décimale est 5, arrondissez la deuxième décimale vers la valeur paire la plus proche. Par exemple, 1.235 est arrondi à 1.24, tandis que 1.225 est arrondi à 1.22.
  • Truncate (truncate) : supprime la partie décimale du nombre pour arrondir.
    • Les nombres 1.234 et 1.236 seront tous deux arrondis à 1.23.

Comment l’arrondi est appliqué dans l’API

Section titled “Comment l’arrondi est appliqué dans l’API”
  1. Calculs au niveau ligne : tous les montants nets des lignes sont arrondis à deux décimales avant tout autre calcul.
  2. Calculs des taxes : les montants de taxe sont calculés et arrondis avant d’être ajoutés au montant net de la ligne.
  3. Sous-total et ajustements au niveau facture : les sous-totaux sont arrondis avant l’application des ajustements au niveau facture.
  • Tout d’abord, appliquez l’arrondi séparément à chaque étape (remises, charges et taxes) afin d’éviter les erreurs cumulées.
  • Arrondissez toujours à deux décimales avant d’utiliser la valeur dans les calculs suivants.

Paramètres :

  • Rounding Method : bankers
  • Round before sum : true
  • Apply taxes per line : true
{
"invoice_lines_attributes": [
{
"quantity": 3,
"price": 33.275,
"taxes_attributes": [
{
"name": "VAT",
"category": "S",
"percent": 21
}
],
"allowance_charges_attributes": [
{ "allowance_charge_indicator": "allowance", "amount": 5 },
{ "allowance_charge_indicator": "charge", "percentage": 12.777 }
]
},
{
"quantity": 7,
"price": 5.355,
"taxes_attributes": [
{
"name": "VAT",
"category": "S",
"percent": 21
}
]
}
],
"allowance_charges_attributes": [
{ "allowance_charge_indicator": "charge", "amount": 3 }
],
"currency": "EUR"
}
  1. Montant net de ligne (avant taxe) :

    Ligne 1 :

    • Montant de base = 3 × 33.275€ = 99.825€
    • Montant d’allowance (remise) = 5.00€.
    • Montant de charge = 99.825€ × 12.777/100 = 12.75464€ → Arrondi à 12.75€.
    • Montant net de la ligne = 99.825€ - 5.00€ + 12.75€ = 107.575€ → Arrondi à 107.58€.

    Ligne 2 :

    • Montant de base = 7 x 5.355€ = 37.485€ → Arrondi à 37.48€.
  2. Sous-total de la facture :

    • Somme de tous les montants nets de ligne = 107.58€ + 37.48€ = 145.06€
    • Montant de charge globale = 3€.
  3. Calcul de la taxe (apply taxes per line = true) :

    • Ligne 1 : 107.58€ × 21/100 = 22.5918€ → Arrondi à 22.59€.
    • Ligne 2 : 37.48€ × 21/100 = 7.8708€ → Arrondi à 7.87€.
    • Taxe totale = 22.59€ + 7.87€ = 30.46€
  4. Total de la facture :

    • Sous-total de la facture = 145.06€ + 3€ = 148.06€
    • Total de la facture = 148.06€ + 30.46€ = 178.52€
{
"subtotal": 148.06,
"taxes": [
{
"name": "VAT 21.00%",
"base": 145.06,
"amount": 30.46
}
],
"total": 178.52
}

Exemple 2 : utilisation de la quantité de base pour une tarification en volume

Section titled “Exemple 2 : utilisation de la quantité de base pour une tarification en volume”
{
"invoice_lines_attributes": [
{
"description": "Vis en acier M6x20",
"quantity": 500,
"price": 12.50,
"base_quantity": 100,
"unit": 1,
"taxes_attributes": [{ "name": "VAT", "category": "S", "percent": 21 }]
},
{
"description": "Papier d'impression A4",
"quantity": 5000,
"price": 45.00,
"base_quantity": 1000,
"unit": 1,
"taxes_attributes": [{ "name": "VAT", "category": "S", "percent": 21 }]
}
],
"currency": "EUR"
}
  1. Ligne 1 : 500 * 12.50 / 100 = 62.50€
  2. Ligne 2 : 5000 * 45.00 / 1000 = 225.00€
  3. Sous-total : 62.50 + 225.00 = 287.50€
  4. TVA 21% : 287.50 × 21 / 100 = 60.375 → Arrondi à 60.38€
  5. Total : 287.50 + 60.38 = 347.88€
{
"subtotal": 287.50,
"taxes": [
{
"name": "VAT 21.00%",
"base": 287.50,
"amount": 60.38
}
],
"total": 347.88
}