Càlcul de factura
Aquesta guia explica com B2Brouter calcula els imports nets i bruts a partir d’entrades com la quantitat, el preu, la quantitat base, els impostos i els descomptes o recàrrecs opcionals, que es poden indicar com a percentatges o imports fixos. Els càlculs suporten ajustos tant a nivell de línia de detall com a nivell de factura.
Tots els càlculs i arrodoniments es fan automàticament per B2Brouter. L’objectiu d’aquesta guia és explicar el procés i quins resultats heu d’esperar.
Entrades necessàries
Section titled “Entrades necessàries”Nivell de factura
Section titled “Nivell de factura”Descomptes i recàrrecs globals a nivell de factura, usant allowance_charges_attributes:
- Descompte (Allowance): (Opcional)
{allowance_charge_indicator: "allowance"}amb:- percentage: Percentatge de descompte aplicat a tota la factura.
- amount: Import fix de descompte aplicat a tota la factura.
- Recàrrec (Charge): (Opcional)
{allowance_charge_indicator: "charge"}amb:- percentage: Percentatge de recàrrec aplicat a tota la factura.
- amount: Import fix de recàrrec aplicat a tota la factura.
Nivell de línia
Section titled “Nivell de línia”Per a cada línia (invoice_lines_attributes) cal proporcionar les entrades següents:
- Quantitat (
quantity): Nombre d’unitats. - Preu (
price): Preu per a la quantitat base d’unitats indicada. - Quantitat base (
base_quantity): Nombre d’unitats al qual s’aplica el preu. Per defecte és1. Useu-ho quan el preu s’expressa per múltiples unitats (p. ex., preu per 100 peces). - Impostos (
taxes_attributes):- Name: Nom de l’impost (p. ex. VAT, IVA, IRPF).
- Category: Categoria de l’impost.
- Percent: Percentatge d’impost aplicat (pot ser positiu o negatiu).
- Descompte (Allowance): (Opcional) via
allowance_charges_attributes[]{allowance_charge_indicator: "allowance"}amb:- percentage: Percentatge de descompte aplicat a la línia.
- amount: Import fix de descompte aplicat a la línia.
- Recàrrec (Charge): (Opcional) via
allowance_charges_attributes[]{allowance_charge_indicator: "charge"}amb:- percentage: Percentatge de recàrrec aplicat a la línia.
- amount: Import fix de recàrrec aplicat a la línia.
- Import d’extensió: (Opcional) L’import “net” total de la línia de factura abans d’aplicar impostos. Si no s’indica, l’API el calcula tal com s’explica a Imports nets a nivell de línia.
Càlculs
Section titled “Càlculs”Configuració a nivell de compte
Section titled “Configuració a nivell de compte”-
Mètode d’arrodoniment (
rounding_method): Mètode d’arrodoniment usat en els càlculs. Per defecte és Arrodoniment cap amunt (half_up). -
Arrodonir abans de sumar (
round_before_sum): Arrodoneix els imports imposables de cada línia abans de sumar-los. Per defecte ésfalse. -
Aplicar impostos per línia (
apply_taxes_per_line): Si éstrue, calcula l’import d’impost a nivell de factura aplicant l’impost a cada línia i sumant-los. En cas contrari, suma les bases imposables de totes les línies i aplica l’impost al total. Per defecte ésfalse.- Ometre arrodoniment de la base imposable per línia (
skip_line_taxable_base_rounding): Quan està activat, les bases imposables i els imports d’impost per línia no s’arrodonen individualment — només s’arrodoneix el total acumulat d’impostos. Per defecte ésfalse.
Important: Aquesta configuració és exclusivament per a comptes el ERP dels quals usa totals amb IVA inclòs, ja que es desvia del càlcul estàndard d’impostos. Requereix
apply_taxes_per_line: trueper tenir efecte. - Ometre arrodoniment de la base imposable per línia (
Imports nets a nivell de línia
Section titled “Imports nets a nivell de línia”Import base de línia = Quantitat * Preu / Quantitat baseQuan base_quantity és 1 (per defecte), es simplifica a Quantitat * Preu.
Quan base_quantity és superior a 1, permet expressar preus per múltiples unitats. Per exemple, si els cargols tenen un preu de 12,50 per 100 peces i se’n demanen 500:
Import base de línia = 500 * 12,50 / 100 = 62,50Si s’ha indicat Import d’extensió (extension_amount), s’usarà com a import net de la línia en tots els càlculs. En cas contrari, es calcula l’import net de la línia.
Línia amb descompte i recàrrec
Section titled “Línia amb descompte i recàrrec”Per a cada línia, es calcula l’import net aplicant el descompte i el recàrrec:
Import net de línia = Import base de línia - Import descompte de línia + Import recàrrec de líniaSi els descomptes o recàrrecs estan expressats com a percentatges, es calcula el seu import com:
Import recàrrec de línia = Import base de línia * (Percentatge recàrrec de línia / 100)Import descompte de línia = Import base de línia * (Percentatge descompte de línia / 100)Si els imports de descompte o recàrrec són fixos, es pot ometre aquest pas.
Finalment, es calcula l’import net de la línia restant el descompte i afegint el recàrrec:
Import net de línia = Import base de línia - Import descompte de línia + Import recàrrec de líniaCom que l’import net de la línia s’ha d’arrodonir a dos decimals, cal tenir en compte que les diferents parts del càlcul s’arrodonen per separat.
Si els imports de descompte/recàrrec de la línia no s’indiquen, es tracten com a 0.
Import net de línia = Import base de líniaSubtotal a nivell de factura
Section titled “Subtotal a nivell de factura”Sumeu els imports nets de totes les línies per calcular el subtotal. Aquest càlcul depèn de la configuració round_before_sum.
- Arrodonir abans de sumar és
true: El mètode d’arrodoniment s’aplica a cada import net de línia abans de sumar-los tots.
Subtotal = ∑(mètode_arrodoniment(Import net de línia))- Arrodonir abans de sumar és
false: El mètode d’arrodoniment s’aplica a la suma de tots els imports nets de línia.
Subtotal = mètode_arrodoniment(∑(Import net de línia))Si s’han indicat descomptes o recàrrecs a nivell de factura:
Subtotal = ∑(Imports nets de línia) - Import descompte de factura + Import recàrrec de facturaLògica de càlcul d’impostos
Section titled “Lògica de càlcul d’impostos”Després de calcular l’import net de la línia, s’apliquen els impostos basant-se en els taxes_attributes. Un percentatge d’impost negatiu indica una deducció. Els impostos s’apliquen en funció de la configuració apply_taxes_per_line.
Import imposable de línia (o base) = Import net de líniaAplicar impostos per línia és true: Els impostos s’aplicaran a cada import imposable de línia i es sumaran tots per obtenir l’import total d’impostos de la factura.
Càlcul d’impostos per a cada línia
Section titled “Càlcul d’impostos per a cada línia”Import impost de línia = Import imposable de línia × (Percentatge impost / 100)- Si Arrodonir abans de sumar està actiu, l’import imposable de cada línia s’arrodoneix abans d’aplicar el percentatge d’impost.
Import impost de línia = mètode_arrodoniment(Import imposable de línia) x (Percentatge impost / 100) [Actiu]Import impost de línia = mètode_arrodoniment(Import imposable de línia x (Percentatge impost / 100)) [Inactiu]Càlcul d’impostos a nivell de factura (4 combinacions possibles):
apply_taxes_per_line = trueiround_before_sum = true
Import imposable de línia = mètode_arrodoniment(Import net de línia - Import descompte de línia)Import impost de línia = mètode_arrodoniment(Import imposable de línia x (Percentatge impost / 100))Import impost de factura = ∑(Imports impost de línia)apply_taxes_per_line = trueiround_before_sum = false
Import imposable de línia = Import net de línia - Import descompte de líniaImport impost de línia = mètode_arrodoniment(Import imposable de línia x (Percentatge impost / 100))Import impost de factura = ∑(Imports impost de línia)apply_taxes_per_line = falseiround_before_sum = true
Import imposable de línia = mètode_arrodoniment(Import net de línia - Import descompte de línia)Import impost de factura = Imports imposables de línia x (Percentatge impost / 100)apply_taxes_per_line = falseiround_before_sum = false
Import imposable de línia = Import net de línia - Import descompte de líniaImport impost de factura = Imports imposables de línia x (Percentatge impost / 100)Total a nivell de factura:
Total = Subtotal + Import impost de facturaMètodes d’arrodoniment
Section titled “Mètodes d’arrodoniment”Principis
Section titled “Principis”Tots els valors s’arrodonen a dos decimals (que representen cèntims en la majoria de monedes).
- Arrodoniment cap amunt (
half_up): Mètode per defecte. Si el tercer decimal és 5 o superior, s’arrodoneix cap amunt; si és 4 o inferior, no canvia. - Arrodoniment bancari (
bankers): Arrodoneix els valors intermedis al valor parell més proper. - Truncament (
truncate): Elimina la part decimal.1,234i1,236tots dos s’arrodonen a1,23.
Com s’aplica l’arrodoniment a l’API
Section titled “Com s’aplica l’arrodoniment a l’API”- Càlculs a nivell de línia: Tots els imports nets a nivell de línia s’arrodonen a dos decimals abans de qualsevol càlcul posterior.
- Càlculs d’impostos: Els imports d’impost es calculen i s’arrodonen abans de sumar-los a l’import net de la línia.
- Subtotal i ajustos a nivell de factura: Els subtotals s’arrodonen abans d’aplicar els ajustos a nivell de factura.
- Aplicar l’arrodoniment per separat a cada pas (descomptes, recàrrecs i impost) per evitar errors acumulats.
- Arrodonir sempre a dos decimals abans d’usar el valor en càlculs posteriors.
Exemple de flux de càlcul de l’API
Section titled “Exemple de flux de càlcul de l’API”Exemple 1: Preus estàndard
Section titled “Exemple 1: Preus estàndard”Configuració: Mètode d’arrodoniment: bankers, Arrodonir abans de sumar: true, Aplicar impostos per línia: true
Entrada
Section titled “Entrada”{ "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"}Sortida
Section titled “Sortida”{ "subtotal": 148.06, "taxes": [{ "name": "VAT 21.00%", "base": 145.06, "amount": 30.46 }], "total": 178.52}Exemple 2: Usar quantitat base per a preus per lots
Section titled “Exemple 2: Usar quantitat base per a preus per lots”Entrada
Section titled “Entrada”{ "invoice_lines_attributes": [ { "description": "Steel screws M6x20", "quantity": 500, "price": 12.50, "base_quantity": 100, "unit": 1, "taxes_attributes": [{ "name": "VAT", "category": "S", "percent": 21 }] }, { "description": "A4 printing paper", "quantity": 5000, "price": 45.00, "base_quantity": 1000, "unit": 1, "taxes_attributes": [{ "name": "VAT", "category": "S", "percent": 21 }] } ], "currency": "EUR"}Sortida
Section titled “Sortida”{ "subtotal": 287.50, "taxes": [{ "name": "VAT 21.00%", "base": 287.50, "amount": 60.38 }], "total": 347.88}