Rechnungsberechnung
Dieser Leitfaden erklärt, wie B2Brouter Netto- und Bruttobeträge anhand von Eingaben wie Menge, Preis, Basismenge, Steuern sowie optionalen Rabatten oder Zuschlägen berechnet, die entweder als Prozentsätze oder als Festbeträge angegeben werden können. Die Berechnungen unterstützen Anpassungen sowohl auf Positionsebene als auch auf Rechnungsebene.
Alle Berechnungen und Rundungen werden automatisch von B2Brouter durchgeführt. Ziel dieses Leitfadens ist es, den Prozess zu erklären und die erwarteten Ergebnisse zu beschreiben.
Erforderliche Eingaben
Section titled “Erforderliche Eingaben”Rechnungsebene
Section titled “Rechnungsebene”Dies sind globale Rabatte und Zuschläge auf Rechnungsebene unter Verwendung von allowance_charges_attributes:
- Allowance (Rabatt): (Optional)
{allowance_charge_indicator: "allowance"}mit entweder:- percentage: Prozentualer Rabatt auf die gesamte Rechnung.
- amount: Fester Rabattbetrag für die gesamte Rechnung.
- Charge (Zuschlag): (Optional)
{allowance_charge_indicator: "charge"}mit entweder:- percentage: Prozentualer Zuschlag auf die gesamte Rechnung.
- amount: Fester Zuschlagsbetrag für die gesamte Rechnung.
Positionsebene
Section titled “Positionsebene”Für jede Position (invoice_lines_attributes) müssen folgende Eingaben angegeben werden:
- Menge (
quantity): Anzahl der Einheiten. - Preis (
price): Preis für die angegebene Basismenge an Einheiten. - Basismenge (
base_quantity): Anzahl der Einheiten, auf die sich der Preis bezieht. Standardwert ist1. Verwenden Sie dies, wenn der Preis für mehrere Einheiten angegeben wird (z. B. Preis pro 100 Stück). - Steuern (
taxes_attributes):- Name: Name der Steuer (z. B. VAT, IVA, IRPF).
- Kategorie: Steuerkategorie.
- Prozentsatz: Angewandter Steuersatz (kann positiv oder negativ sein).
- Allowance (Rabatt): (Optional) über
allowance_charges_attributes[]{allowance_charge_indicator: "allowance"}mit entweder:- percentage: Prozentualer Rabatt auf die Position.
- amount: Fester Rabattbetrag für die Position.
- Charge (Zuschlag): (Optional) über
allowance_charges_attributes[]{allowance_charge_indicator: "charge"}mit entweder:- percentage: Prozentualer Zuschlag auf die Position.
- amount: Fester Zuschlagsbetrag für die Position.
- Extension Amount: (Optional) Der gesamte „Netto“-Betrag der Rechnungsposition vor Anwendung der Steuern. Falls nicht angegeben, berechnet die API diesen wie unter Netto-Beträge auf Positionsebene beschrieben.
Berechnungen
Section titled “Berechnungen”Kontoeinstellungen
Section titled “Kontoeinstellungen”-
Rundungsmethode (
rounding_method): Rundungsmethode für weitere Berechnungen. Standardmäßig auf Round half up (half_up) gesetzt. -
Round Before Sum (
round_before_sum): Rundet steuerpflichtige Positionsbeträge vor der Summierung. Standardmäßigfalse. -
Apply Taxes per Line (
apply_taxes_per_line): Wenntrue, wird der Steuerbetrag auf Rechnungsebene berechnet, indem Steuern auf jede Position einzeln angewendet und anschließend summiert werden. Andernfalls werden alle steuerpflichtigen Beträge addiert und die Steuer auf die Gesamtsumme angewendet. Standardmäßigfalse.- Skip Line Taxable Base Rounding (
skip_line_taxable_base_rounding): Wenn aktiviert, werden steuerpflichtige Beträge und Steuerbeträge pro Position nicht einzeln gerundet — nur der endgültige Gesamtsteuerbetrag wird gerundet. Standardmäßigfalse.
Wichtig: Diese Einstellung ist ausschließlich für Konten vorgesehen, deren ERP-System mit umsatzsteuerinkludierten Summen arbeitet, da sie von der Standardsteuerberechnung abweicht. Erfordert
apply_taxes_per_line: true. - Skip Line Taxable Base Rounding (
Netto-Beträge auf Positionsebene
Section titled “Netto-Beträge auf Positionsebene”Line Base Amount = Quantity * Price / Base QuantityWenn base_quantity den Wert 1 hat (Standard), vereinfacht sich dies zu Quantity * Price.
Wenn base_quantity größer als 1 ist, können Preise pro mehreren Einheiten angegeben werden. Beispiel: Schrauben kosten 12,50 pro 100 Stück und es werden 500 Stück bestellt:
Line Base Amount = 500 * 12.50 / 100 = 62.50Wenn ein Extension Amount (extension_amount) angegeben wurde, wird dieser als Netto-Betrag der Position verwendet. Andernfalls wird der Netto-Betrag berechnet.
Position mit Rabatt und Zuschlag
Section titled “Position mit Rabatt und Zuschlag”Für jede Position wird der Netto-Betrag durch Anwendung von Rabatt und Zuschlag berechnet:
Line Net Amount = Line Base Amount - Line Discount Amount + Line Charge AmountWenn Rabatte oder Zuschläge als Prozentsätze angegeben werden:
Line Charge Amount = Line Base Amount * (Line Charge Percentage / 100)Line Discount Amount = Line Base Amount * (Line Discount Percentage / 100)Falls Rabatte oder Zuschläge als Festbeträge angegeben werden, kann dieser Schritt übersprungen werden.
Anschließend wird der Netto-Betrag berechnet:
Line Net Amount = Line Base Amount - Line Discount Amount + Line Charge AmountDa der Netto-Betrag der Position auf zwei Dezimalstellen gerundet werden muss, beachten Sie bitte, dass die einzelnen Teile der Berechnung separat gerundet werden müssen.
Zum Beispiel muss das Ergebnis von Line Net Amount = Line Base Amount auf zwei Dezimalstellen gerundet werden, ebenso wie die allowance/charge amounts separat gerundet werden.
Wenn kein Rabatt/Zuschlag angegeben ist, wird der Wert als 0 behandelt.
Line Net Amount = Line Base AmountZwischensumme auf Rechnungsebene
Section titled “Zwischensumme auf Rechnungsebene”Die Netto-Beträge aller Positionen werden summiert, um die Zwischensumme zu berechnen. Diese Berechnung hängt von der Einstellung round_before_sum ab.
- Wenn Round Before Sum auf
truegesetzt ist: Die Rundungsmethode wird auf jeden Netto-Betrag der Position angewendet, bevor summiert wird.
Subtotal = ∑(rounding_method(Line Net Amount))- Wenn Round Before Sum auf
falsegesetzt ist: Die Rundungsmethode wird auf die Summe aller Netto-Beträge angewendet.
Subtotal = rounding_method(∑(Line Net Amount))Wenn Rabatte oder Zuschläge auf Rechnungsebene vorhanden sind:
Subtotal = ∑(Line Net Amounts) - Invoice Discount Amount + Invoice Charge AmountWenn für Rabatte oder Zuschläge auf Rechnungsebene ein Prozentsatz angegeben wird, werden deren Beträge analog zur Berechnung auf Positionsebene berechnet.
Steuerberechnungslogik
Section titled “Steuerberechnungslogik”Nach der Berechnung des Netto-Betrags einer Position werden Steuern (falls vorhanden) anhand von taxes_attributes angewendet. Ein negativer Steuersatz bedeutet einen Abzug. Die Anwendung hängt von der Einstellung apply_taxes_per_line ab.
Line Taxable Amount (or Base) = Line Net AmountWenn Apply Taxes per Line auf true gesetzt ist, werden die Steuern auf jede steuerpflichtige Position angewendet und anschließend summiert.
Steuerberechnung pro Position
Section titled “Steuerberechnung pro Position”- Für jede Position können mehrere Steuern gelten. Jede Steuer wird separat angewendet.
Line Tax Amount = Line Taxable Amount × (Tax Percent / 100)- Wenn die Einstellung Round Before Sum aktiv ist, wird der steuerpflichtige Betrag jeder Position vor Anwendung des Steuersatzes gerundet. Andernfalls erfolgt die Rundung nach der Steuerberechnung.
Line Tax Amount = rounding_method(Line Taxable Amount) x (Tax Percent / 100) [Aktiv]Line Tax Amount = rounding_method(Line Taxable Amount x (Tax Percent / 100)) [Inaktiv]Summierung der Steuerbeträge pro Position
Section titled “Summierung der Steuerbeträge pro Position”Der gesamte Steuerbetrag einer Position ist die Summe aller auf diese Position angewendeten Steuern.
Steuerberechnung auf Rechnungsebene
Section titled “Steuerberechnung auf Rechnungsebene”Die Steuerberechnung auf Rechnungsebene hängt von den Einstellungen apply_taxes_per_line und round_before_sum ab. Dadurch ergeben sich vier mögliche Ansätze:
apply_taxes_per_line = trueundround_before_sum = true
Line Taxable Amount = rounding_method(Line Net Amount - Line Discount Amount)Line Tax Amount = rounding_method(Line Taxable Amount x (Tax Percent / 100))Invoice Tax Amount = ∑(Line Tax Amounts)apply_taxes_per_line = trueundround_before_sum = false
Line Taxable Amount = Line Net Amount - Line Discount AmountLine Tax Amount = rounding_method(Line Taxable Amount x (Tax Percent / 100))Invoice Tax Amount = ∑(Line Tax Amounts)apply_taxes_per_line = falseundround_before_sum = true
Line Taxable Amount = rounding_method(Line Net Amount - Line Discount Amount)Invoice Tax Amount = Line Taxable Amounts x (Tax Percent / 100)apply_taxes_per_line = falseundround_before_sum = false
Line Taxable Amount = Line Net Amount - Line Discount AmountInvoice Tax Amount = Line Taxable Amounts x (Tax Percent / 100)Gesamtbetrag der Rechnung
Section titled “Gesamtbetrag der Rechnung”Total = Subtotal + Invoice Tax AmountRundungsmethoden
Section titled “Rundungsmethoden”Grundprinzipien
Section titled “Grundprinzipien”Dezimalgenauigkeit
Alle Werte werden auf zwei Dezimalstellen gerundet (entspricht in den meisten Währungen Centbeträgen).
Rundungsregeln
Die Einstellung der Rundungsmethode definiert, wie gerundet wird. Es stehen drei Optionen zur Verfügung:
- Round half up (
half_up): Standard-Rundungsmethode.- Wenn die dritte Dezimalstelle 5 oder höher ist, wird die zweite Dezimalstelle aufgerundet.
- Wenn die dritte Dezimalstelle 4 oder niedriger ist, bleibt die zweite Dezimalstelle unverändert.
- Bankers rounding (
bankers): Rundet Halbwerte auf die nächstgelegene gerade Zahl.- Wenn die dritte Dezimalstelle 6 oder höher ist, wird die zweite Dezimalstelle aufgerundet.
- Wenn die dritte Dezimalstelle 4 oder niedriger ist, wird die zweite Dezimalstelle abgerundet.
- Wenn die dritte Dezimalstelle 5 ist, wird die zweite Dezimalstelle auf die nächstgelegene gerade Zahl gerundet. Zum Beispiel wird
1.235zu1.24, aber1.225zu1.22.
- Truncate (
truncate): Entfernt den Dezimalanteil der Zahl beim Runden.- Die Zahlen
1.234und1.236werden beide zu1.23.
- Die Zahlen
Anwendung der Rundung in der API
Section titled “Anwendung der Rundung in der API”- Berechnungen auf Positionsebene: Alle Netto-Beträge der Positionen werden auf zwei Dezimalstellen gerundet, bevor weitere Berechnungen erfolgen.
- Steuerberechnungen: Steuerbeträge werden berechnet und gerundet, bevor sie zum Netto-Betrag der Position addiert werden.
- Zwischensummen und Anpassungen auf Rechnungsebene: Zwischensummen werden gerundet, bevor Anpassungen auf Rechnungsebene angewendet werden.
Zusammenfassung
Section titled “Zusammenfassung”- Wenden Sie die Rundung zunächst separat in jedem Schritt an (Rabatte, Zuschläge und Steuern), um kumulative Fehler zu vermeiden.
- Runden Sie immer auf zwei Dezimalstellen, bevor der Wert in nachfolgenden Berechnungen verwendet wird.
Beispielhafter API-Berechnungsablauf
Section titled “Beispielhafter API-Berechnungsablauf”Beispiel 1: Standardpreisgestaltung
Section titled “Beispiel 1: Standardpreisgestaltung”Einstellungen:
- Rundungsmethode:
bankers - Round before sum:
true - Apply taxes per line:
true
Eingabe
Section titled “Eingabe”{ "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"}Schritt-für-Schritt-Berechnung
Section titled “Schritt-für-Schritt-Berechnung”-
Netto-Betrag der Position (vor Steuer):
Position 1:
- Basisbetrag =
3 × 33.275€ = 99.825€ - Rabattbetrag = 5.00€
- Zuschlagsbetrag =
99.825€ × 12.777/100 = 12.75464€→ Gerundet auf 12.75€ - Netto-Betrag =
99.825€ - 5.00€ + 12.75€ = 107.575€→ Gerundet auf 107.58€
Position 2:
- Basisbetrag =
7 x 5.355€ = 37.485€→ Gerundet auf 37.48€
- Basisbetrag =
-
Zwischensumme der Rechnung:
- Summe aller Netto-Beträge =
107.58€ + 37.48€ = 145.06€ - Globaler Zuschlagsbetrag = 3€
- Summe aller Netto-Beträge =
-
Steuerberechnung (
apply_taxes_per_line = true):- Position 1:
107.58€ × 21/100 = 22.5918€→ Gerundet auf 22.59€ - Position 2:
37.48€ × 21/100 = 7.8708€→ Gerundet auf 7.87€ - Gesamtsteuer =
22.59€ + 7.87€ = 30.46€
- Position 1:
-
Gesamtbetrag der Rechnung:
- Zwischensumme der Rechnung =
145.06€ + 3€ = 148.06€ - Gesamtbetrag =
148.06€ + 30.46€ = 178.52€
- Zwischensumme der Rechnung =
Ausgabe
Section titled “Ausgabe”{ "subtotal": 148.06, "taxes": [ { "name": "VAT 21.00%", "base": 145.06, "amount": 30.46 } ], "total": 178.52}Beispiel 2: Verwendung der Basismenge für Staffelpreise
Section titled “Beispiel 2: Verwendung der Basismenge für Staffelpreise”Eingabe
Section titled “Eingabe”{ "invoice_lines_attributes": [ { "description": "Steel screws M6x20", "quantity": 500, "price": 12.5, "base_quantity": 100, "unit": 1, "taxes_attributes": [{ "name": "VAT", "category": "S", "percent": 21 }] }, { "description": "A4 printing paper", "quantity": 5000, "price": 45.0, "base_quantity": 1000, "unit": 1, "taxes_attributes": [{ "name": "VAT", "category": "S", "percent": 21 }] } ], "currency": "EUR"}Schritt-für-Schritt-Berechnung
Section titled “Schritt-für-Schritt-Berechnung”- Position 1:
500 * 12.50 / 100 = 62.50€ - Position 2:
5000 * 45.00 / 1000 = 225.00€ - Zwischensumme:
62.50 + 225.00 = 287.50€ - MwSt. 21%:
287.50 × 21 / 100 = 60.375→ Gerundet auf 60.38€ - Gesamtbetrag:
287.50 + 60.38 = 347.88€
Ausgabe
Section titled “Ausgabe”{ "subtotal": 287.5, "taxes": [ { "name": "VAT 21.00%", "base": 287.5, "amount": 60.38 } ], "total": 347.88}