From ad89d1288351863f8302fed01701e006a8d104a5 Mon Sep 17 00:00:00 2001 From: Bettina Steger Date: Thu, 29 Feb 2024 15:51:22 +0100 Subject: [PATCH] add more tests --- tests/est.test.js | 20 +++++++++++++++++++- tests/sv.test.js | 27 +++++++++++++++++++++++++++ tests/test.js | 4 ++-- 3 files changed, 48 insertions(+), 3 deletions(-) create mode 100644 tests/sv.test.js diff --git a/tests/est.test.js b/tests/est.test.js index f9a015c..93322ff 100644 --- a/tests/est.test.js +++ b/tests/est.test.js @@ -1,4 +1,4 @@ -import { einkommensteuer, freibetragValues, investGewinnfreibetrag } from "../src/est"; +import { einkommensteuer, freibetragValues, investGewinnfreibetrag } from '../src/est.js'; test('should return 0 for 0-11693 income', () => { expect(einkommensteuer(0, 2024)).toBe(0); @@ -51,6 +51,24 @@ test('should return correct ESt for all levels in 2022', () => { }); }); +test('should return correct ESt for all levels + 1€ in 2024', () => { + const limits = [11693, 19134, 32075, 62080, 93120, 1000000]; + const percentages = [0, 0.2, 0.3, 0.4, 0.48, 0.5, 0.55]; + const levels = limits.map((limit, index) => { + return { + amount: limit, + est: (limit - (index > 0 ? limits[index-1] : 0)) * percentages[index], + pct: percentages[index] + }; + }); + levels.forEach((level, i) => { level.est += (levels[i-1] ? levels[i-1].est : 0); }); + levels.forEach((level, i) => { + expect(Math.round(einkommensteuer(level.amount + 1, 2024))).toBe(Math.round( + level.est + (levels[i+1] ? levels[i+1].pct : level.pct) // 1€ = next percentage + )); + }); +}); + // Maximalausmaß von 46.400 EUR // @see https://www.wko.at/steuern/der-gewinnfreibetrag test('should return correct investGewinnfreibetrag for 2024', () => { diff --git a/tests/sv.test.js b/tests/sv.test.js new file mode 100644 index 0000000..a1df894 --- /dev/null +++ b/tests/sv.test.js @@ -0,0 +1,27 @@ +import { SVbeitrag } from '../src/sv.js'; +import { fixValues, percentages } from '../src/sv-values.js'; + +// Wenn Sie weniger als 6.221,28 € Gewinn pro Jahr selbstständig erzielen, können Sie +// sich bei der SVA von der Kranken- und Pensionsversicherung ausnehmen lassen. +// Sie bezahlen dann für Ihre Selbstständigkeit nur mehr die Unfallversicherung. +test('should return minimum SV-Beitrag if profit is smaller than the current year limit', () => { + const year = 2024; + const options = { year, tipps: new Set() }; + expect(SVbeitrag(fixValues[year].limit - 1, options).toPay).toBe(fixValues[year].uv * 12); // 12 months Unfallversicherung + expect(options.tipps.has('EXCLUDE_KV_PV')).toBe(true); +}); + +test('should return SV-Beitrag for the founding year', () => { + const year = 2024; + const months = 10; + const options = { year, foundingYear: year, foundingMonth: 3, tipps: new Set() }; + const { limit, uv, kvMinBeitragsgrundlage, pvMinBeitragsgrundlage, svsMinBeitragsgrundlage } = fixValues[year]; + const profitOnEStBescheid = limit; + + expect(SVbeitrag(profitOnEStBescheid, options).toPay).toBeCloseTo(( + uv + + kvMinBeitragsgrundlage * percentages[year].kv + + pvMinBeitragsgrundlage * percentages[year].pv + + svsMinBeitragsgrundlage * percentages.vorsorge + ) * months); +}); \ No newline at end of file diff --git a/tests/test.js b/tests/test.js index 1770a6c..0459487 100644 --- a/tests/test.js +++ b/tests/test.js @@ -1,5 +1,5 @@ -import hundert11 from "../src/index.js"; -import { fixValues } from "../src/sv-values.js"; +import hundert11 from '../src/index.js'; +import { fixValues } from '../src/sv-values.js'; // Wenn man weniger als 5.710,32 € Gewinn pro Jahr erzielt, kann man // sich bei der SVA von der KV+PV ausnehmen lassen. Man bezahlt dann nur die UV.