@hundert11/sv-steuer-rechner
Version:
Calculates the real profit for an Austrian Freelancer
101 lines (91 loc) • 4.27 kB
JavaScript
// Einkommensteuertarif
// Ab dem Jahr 2023 werden - um der kalten Progression entgegenzuwirken - jährlich die Tarifstufen (außer die letzte ab 1 Million Euro) um zwei Drittel der Inflationsrate angepasst.
// @see https://www.usp.gv.at/themen/steuern-finanzen/einkommensteuer-ueberblick/weitere-informationen-est/tarifstufen.html
export function einkommensteuer(value, year) {
let limits = [11000, 18000, 31000, 60000, 90000, 1000000]; // 2022 and below
let percentages = [0, 0.25, 0.35, 0.42, 0.48, 0.5, 0.55]; // 2021 and below
// add switch for limits and percentages
switch (year) {
case 2022:
percentages = [0, 0.2, 0.325, 0.42, 0.48, 0.5, 0.55];
break;
case 2023:
limits = [11693, 19134, 32075, 62080, 93120, 1000000];
percentages = [0, 0.2, 0.3, 0.41, 0.48, 0.5, 0.55];
break;
case 2024:
limits = [12816, 20818, 34513, 66612, 99266, 1000000];
percentages = [0, 0.2, 0.3, 0.4, 0.48, 0.5, 0.55]; // reduce 0.41 to 0.4 from 2023 to 2024
break;
// 2025: Alle Steuerstufen werden um knapp 4 Prozent angehoben.
// @see https://www.bmf.gv.at/presse/pressemeldungen/2024/juli/brunner-entlastung-2025.html
case 2025:
limits = [13308, 21617, 35836, 69166, 103072, 1000000];
percentages = [0, 0.2, 0.3, 0.4, 0.48, 0.5, 0.55];
break;
default:
break;
}
limits = limits.filter(limit => limit < value);
limits.push(value); // add value to the end of the array
let est = 0;
limits.forEach((limit, index) => {
est += (limit - (index > 0 ? limits[index-1] : 0)) * percentages[index];
});
return est;
}
/**
* Basispauschalierung
* Im Rahmen der Basispauschalierung ist vorgesehen, die Umsatzgrenze für das Veranlagungsjahr 2025 von derzeit 220.000 Euro auf 320.000 Euro anzuheben.
* Gleichzeitig soll das Betriebsausgabenpauschale von bislang 12 % auf 13,5 % der Umsätze steigen.
* Ab dem Veranlagungsjahr 2026 ist eine weitere Erhöhung der Umsatzgrenze auf 420.000 Euro sowie des Betriebsausgabenpauschales auf 15 % geplant.
* @see https://www.wko.at/steuern/basispauschalierung
* @see https://www.wko.at/steuern/budgetbegleitgesetz-2025#heading_basispauschalierung_fuer_gewerbetreibende_und_freiberufler
*/
export function pauschalierungValues(year) {
const limit = year <= 2024 ? 220000 : year === 2025 ? 320000 : 420000;
const percentage = year <= 2024 ? 0.12 : year === 2025 ? 0.135 : 0.15; // 12% bis 2024, 13,5% in 2025, 15% ab 2026
return {
limit,
percentage,
max: limit * percentage
}
}
// Gewinnfreibetrag
// @see https://www.wko.at/steuern/der-gewinnfreibetrag
// @see https://www.usp.gv.at/themen/steuern-finanzen/steuerliche-gewinnermittlung/weitere-informationen-zur-steuerlichen-gewinnermittlung/betriebseinnahmen-und-ausgaben/gewinnfreibetrag.html
export function freibetragValues(year) {
// Bis zur Veranlagung 2023 stand der Grundfreibetrag für Gewinne bis 30.000 €
const limit = year <= 2023 ? 30000 : 33000;
// höchstens jedoch 13% bzw. ab 2022 15% des Betriebsgewinnes
const percentage = year < 2022 ? 0.13 : 0.15;
return {
limit,
percentage,
grundfreibetrag: limit * percentage, // max
investLimitsAndPcts: [{limit: 145000, pct: 0.13}, {limit: 175000, pct: 0.07}, {limit: 230000, pct: 0.045}]
}
}
/**
* Bei einer Bemessungsgrundlage von 33.000 EUR bis zu 178.000 EUR beträgt der investitionsbedingte Gewinnfreibetrag 13%.
* Wird dieser Betrag überschritten, steht für die nächsten 175.000 EUR ein Freibetrag von 7% und
* für weitere 230.000 EUR ein Freibetrag von 4,5% zu.
* Ab einer Bemessungsgrundlage von 583.000 EUR steht kein Gewinnfreibetrag mehr zu.
* Durch die Prozentstaffelung ergibt sich ein Maximalausmaß von 46.400 EUR.
*/
export function investGewinnfreibetrag(value, year) {
const { limit, investLimitsAndPcts } = freibetragValues(year);
if(value <= limit) {
return 0;
}
let freibetrag = 0;
let rest = parseInt(value) - limit; // - 33.000 € Limit des Grundfreibetrags
for(const limitAndPct of investLimitsAndPcts) {
if (rest <= limitAndPct.limit) {
break;
}
freibetrag += parseInt(Math.min(rest, limitAndPct.limit) * limitAndPct.pct);
rest -= limitAndPct.limit;
}
return freibetrag;
}