§ 23 KStG · 15 %
Linearer Tarif auf das zu versteuernde Einkommen. Lehrbuch-Beispiel — perfekt für den Einstieg.
Gesetzlicher Rahmen
Das Modul bildet die drei normativen Kerne der Körperschaftsteuer ab: § 7 KStG (Bemessung nach dem zu versteuernden Einkommen), § 23 KStG (gestaffelter Steuersatz) und § 24 KStG (Freibetrag von 5.000 €), abgeschlossen durch die Abrundung zugunsten des Steuerpflichtigen nach § 31 Satz 2 KStG. Die Ermittlung des Einkommens i. S. d. § 8 Abs. 1 KStG geht als geprüfte Eingabe ein.
- 1 § 24 KStG Freibetrag (5.000 €, höchstens i. H. d. Einkommens)
FreibetragNach24 - 2 § 7 Abs. 2 zu versteuerndes Einkommen (− §§ 24, 25)
ZuVersteuerndesEinkommen - 3 § 23 / § 31 Steuer (Satz × zvE, abgerundet)
KörperschaftsteuerBetrag - 4 § 23 Abs. 2 Anpassung nach § 51 Abs. 3 EStG
Anwenden23Abs2
Der Steuersatz · § 23 Abs. 1
Der Satz sinkt nach Veranlagungszeitraum schrittweise von 15 % auf 10 %.
Das Modul bildet die Staffel als wähle-Ausdruck ab — jeder
Satz eine Konstante mit Verweis auf seine Nummer in § 23 Abs. 1.
- bis 2027 15 %
- 2028 14 %
- 2029 13 %
- 2030 12 %
- 2031 11 %
- ab 2032 10 %
@Quelle("§ 23 Absatz 1 KStG")
fn KstSatz(veranlagungszeitraum: Ganzzahl): Prozent = wähle {
falls veranlagungszeitraum <= 2027 -> KST_SATZ_BIS_2027
falls veranlagungszeitraum == 2028 -> KST_SATZ_2028
falls veranlagungszeitraum == 2029 -> KST_SATZ_2029
falls veranlagungszeitraum == 2030 -> KST_SATZ_2030
falls veranlagungszeitraum == 2031 -> KST_SATZ_2031
sonst -> KST_SATZ_AB_2032
}Die Gesamtberechnung · § 7
Der Orchestrator führt die Stufen in gesetzlicher Reihenfolge zusammen und legt jede Zwischengröße als eigenes Feld ab — vom abgezogenen Freibetrag bis zur festgesetzten Steuer.
@Quelle("§ 7 KStG")
fn BerechneKörperschaftsteuer(fall: KörperschaftsteuerFall): KörperschaftsteuerErgebnis {
var freibetrag24: Euro = FreibetragNach24(fall.einkommenNach8Abs1, fall.freibetragsausschluss)
var zve: Euro = ZuVersteuerndesEinkommen(
fall.einkommenNach8Abs1, freibetrag24, fall.freibetragNach25,
)
var satz: Prozent = KstSatz(fall.veranlagungszeitraum)
var basis: Euro = KörperschaftsteuerBetrag(zve, fall.veranlagungszeitraum)
var endgültig: Euro = Anwenden23Abs2(basis, fall.anpassungNach23Abs2)
KörperschaftsteuerErgebnis(
einkommen = fall.einkommenNach8Abs1,
freibetragNach24 = freibetrag24,
freibetragNach25 = fall.freibetragNach25,
zuVersteuerndesEinkommen = zve,
steuersatz = satz,
körperschaftsteuer = endgültig,
)
}Das vollständige Modul
Sätze, Freibetrag, die Ausschlusstatbestände des § 24 Satz 2 und die
Gesamtberechnung — unverändert aus findsl/findsl übernommen.
Modul anzeigen kst.findsl · 300 Zeilen
--
# Körperschaftsteuer — Tarif, Freibetrag und Bemessungsgrundlage
Bildet die Festsetzung der Körperschaftsteuer nach dem
**Körperschaftsteuergesetz (KStG 1977, Stand: zuletzt geändert durch
Art. 30 G v. 4.2.2026 I Nr. 33)** ab — die drei normativen Kerne:
- **§ 7 KStG** — Grundlagen der Besteuerung: die KSt bemisst sich nach
dem zu versteuernden Einkommen; dieses ist das Einkommen i.S.d.
§ 8 Abs. 1 KStG, vermindert um die Freibeträge der §§ 24 und 25 KStG
(Abs. 2); die KSt ist eine Jahressteuer (Abs. 3).
- **§ 23 KStG** — Steuersatz: nach Veranlagungszeitraum gestaffelter
Prozentsatz auf das zu versteuernde Einkommen (Abs. 1); optionale
Anpassung über § 51 Abs. 3 EStG (Abs. 2).
- **§ 24 KStG** — Freibetrag von 5.000 Euro, höchstens in Höhe des
Einkommens (Satz 1), mit den drei Ausschlusstatbeständen des Satz 2.
Anschließende **§ 31 Satz 2 KStG**-Rundung: die festgesetzten
KSt-Beträge sind zugunsten des Steuerpflichtigen auf volle Euro zu
runden — Abrundung (zu Gunsten = niedrigere Steuer).
Nicht modelliert (außerhalb des Auftragsumfangs §§ 7/23/24): die
Ermittlung des Einkommens i.S.d. § 8 Abs. 1 KStG selbst und der
Freibetrag nach § 25 KStG — beide gehen als geprüfte Eingaben ein,
damit die § 7 Abs. 2-Formel rechnerisch vollständig bleibt.
--
// ===========================================================================
// Konstanten — § 23 Absatz 1 KStG (gestaffelter Steuersatz) und § 24 KStG
// ===========================================================================
--
Steuersatz für Veranlagungszeiträume **bis 2027**: 15 % des zu
versteuernden Einkommens (§ 23 Abs. 1 Nr. 1 KStG).
--
@Quelle("§ 23 Absatz 1 Nummer 1 KStG")
konst KST_SATZ_BIS_2027: Prozent = 15%
-- Steuersatz für den Veranlagungszeitraum **2028**: 14 % (§ 23 Abs. 1 Nr. 2 KStG). --
@Quelle("§ 23 Absatz 1 Nummer 2 KStG")
konst KST_SATZ_2028: Prozent = 14%
-- Steuersatz für den Veranlagungszeitraum **2029**: 13 % (§ 23 Abs. 1 Nr. 3 KStG). --
@Quelle("§ 23 Absatz 1 Nummer 3 KStG")
konst KST_SATZ_2029: Prozent = 13%
-- Steuersatz für den Veranlagungszeitraum **2030**: 12 % (§ 23 Abs. 1 Nr. 4 KStG). --
@Quelle("§ 23 Absatz 1 Nummer 4 KStG")
konst KST_SATZ_2030: Prozent = 12%
-- Steuersatz für den Veranlagungszeitraum **2031**: 11 % (§ 23 Abs. 1 Nr. 5 KStG). --
@Quelle("§ 23 Absatz 1 Nummer 5 KStG")
konst KST_SATZ_2031: Prozent = 11%
-- Steuersatz für Veranlagungszeiträume **ab 2032**: 10 % (§ 23 Abs. 1 Nr. 6 KStG). --
@Quelle("§ 23 Absatz 1 Nummer 6 KStG")
konst KST_SATZ_AB_2032: Prozent = 10%
--
Freibetrag nach § 24 Satz 1 KStG: 5.000 Euro, höchstens jedoch in Höhe
des Einkommens. Greift nur, wenn kein Ausschlusstatbestand des § 24
Satz 2 KStG vorliegt.
--
@Quelle("§ 24 Satz 1 KStG")
konst FREIBETRAG_24: Euro = 5.000
// ===========================================================================
// Datenstrukturen
// ===========================================================================
--
Ausschlusstatbestände des § 24 Satz 2 KStG. Liegt einer davon vor,
entfällt der Freibetrag nach § 24 Satz 1 KStG vollständig.
@param Keiner Kein Ausschluss — der Freibetrag von 5.000 €
(§ 24 Satz 1 KStG) ist anwendbar.
@param Nr1KapitalLeistungen § 24 Satz 2 Nr. 1 KStG: Körperschaften/
Personenvereinigungen, deren Leistungen beim
Empfänger zu Einnahmen i.S.d. § 20 Abs. 1
Nr. 1 oder 2 EStG gehören (typische
Kapitalgesellschaften mit Ausschüttungen).
@param Nr2VereinNach25 § 24 Satz 2 Nr. 2 KStG: Vereine i.S.d.
§ 25 KStG (land-/forstwirtschaftliche
Erwerbs- und Wirtschaftsgenossenschaften
sowie Vereine).
@param Nr3Investmentfonds § 24 Satz 2 Nr. 3 KStG: Investmentfonds
(§ 1 InvStG) und Spezial-Investmentfonds
(§ 26 InvStG), deren Leistungen beim
Empfänger zu Einnahmen i.S.d. § 20 Abs. 1
Nr. 3 oder 3a EStG gehören.
--
@Quelle("§ 24 Satz 2 KStG")
aufzählung Freibetragsausschluss {
Keiner,
Nr1KapitalLeistungen,
Nr2VereinNach25,
Nr3Investmentfonds,
}
--
Eingaben für die Körperschaftsteuer-Festsetzung eines Steuerfalls.
@param einkommenNach8Abs1 Einkommen i.S.d. § 8 Abs. 1 KStG (nach
EStG/KStG ermittelt) — Bemessungsbasis VOR
Abzug der Freibeträge §§ 24, 25 KStG.
@param veranlagungszeitraum Kalenderjahr des Veranlagungszeitraums
(§ 7 Abs. 3 KStG); bestimmt den Steuersatz
nach § 23 Abs. 1 KStG.
@param freibetragsausschluss Ausschlusstatbestand nach § 24 Satz 2 KStG
(siehe `Freibetragsausschluss`).
@param freibetragNach25 Freibetrag nach § 25 KStG (extern ermittelt;
geht nach § 7 Abs. 2 KStG mindernd ein).
0, wenn nicht einschlägig.
@param anpassungNach23Abs2 Anpassungssatz nach § 23 Abs. 2 KStG i.V.m.
§ 51 Abs. 3 EStG (Herab-/Heraufsetzung). In
aller Regel 0 % (keine Änderung).
--
@Quelle("§ 7 KStG")
datensatz KörperschaftsteuerFall(
einkommenNach8Abs1: Euro, // Einkommen § 8 Abs. 1 KStG (vor Freibeträgen)
veranlagungszeitraum: Ganzzahl, // Kalenderjahr des VZ (§ 7 Abs. 3 KStG)
freibetragsausschluss: Freibetragsausschluss, // § 24 Satz 2 KStG: Ausschlusstatbestand
freibetragNach25: Euro = 0, // Freibetrag § 25 KStG (extern; § 7 Abs. 2 KStG)
anpassungNach23Abs2: Prozent = 0%, // § 23 Abs. 2 KStG i.V.m. § 51 Abs. 3 EStG
)
--
Vollständige, prüfbare Berechnungsdokumentation eines
Körperschaftsteuerfalls — jede Zwischengröße ist einzeln ausgewiesen,
damit die Festsetzung Schritt für Schritt gegen das Gesetz auditierbar
ist.
@param einkommen Einkommen i.S.d. § 8 Abs. 1 KStG
(Eingabe, unverändert übernommen).
@param freibetragNach24 Tatsächlich abgezogener Freibetrag
nach § 24 KStG (0, falls Satz 2 greift).
@param freibetragNach25 Abgezogener Freibetrag nach § 25 KStG
(Eingabe).
@param zuVersteuerndesEinkommen § 7 Abs. 1, 2 KStG: Bemessungsgrundlage
= Einkommen − § 24 − § 25.
@param steuersatz § 23 Abs. 1 KStG: für den
Veranlagungszeitraum geltender Satz.
@param körperschaftsteuer Festgesetzte Körperschaftsteuer nach
§ 23 KStG, auf volle Euro abgerundet
(§ 31 Satz 2 KStG), inkl. § 23 Abs. 2.
--
@Quelle("§ 7 KStG")
datensatz KörperschaftsteuerErgebnis(
einkommen: Euro, // Einkommen § 8 Abs. 1 KStG (Eingabe)
freibetragNach24: Euro, // abgezogener Freibetrag § 24 KStG
freibetragNach25: Euro, // abgezogener Freibetrag § 25 KStG (Eingabe)
zuVersteuerndesEinkommen: Euro, // § 7 Abs. 1, 2 KStG: Bemessungsgrundlage
steuersatz: Prozent, // § 23 Abs. 1 KStG: VZ-abhängiger Satz
körperschaftsteuer: Euro, // festgesetzte KSt (§ 31 Satz 2: abgerundet)
)
// ===========================================================================
// § 23 Absatz 1 KStG — gestaffelter Steuersatz
// ===========================================================================
--
Liefert den Körperschaftsteuersatz für einen Veranlagungszeitraum nach
der Staffel des § 23 Abs. 1 KStG. „bis 2027" (Nr. 1) ist einschließlich
2027; „ab 2032" (Nr. 6) ist einschließlich 2032 (durch `sonst`
abgedeckt, da alle früheren Jahre vorher erfasst sind).
@param veranlagungszeitraum Kalenderjahr des Veranlagungszeitraums.
@rückgabe Der nach § 23 Abs. 1 KStG für diesen VZ geltende Satz.
--
@Quelle("§ 23 Absatz 1 KStG")
fn KstSatz(veranlagungszeitraum: Ganzzahl): Prozent = wähle {
falls veranlagungszeitraum <= 2027 -> KST_SATZ_BIS_2027
falls veranlagungszeitraum == 2028 -> KST_SATZ_2028
falls veranlagungszeitraum == 2029 -> KST_SATZ_2029
falls veranlagungszeitraum == 2030 -> KST_SATZ_2030
falls veranlagungszeitraum == 2031 -> KST_SATZ_2031
sonst -> KST_SATZ_AB_2032
}
// ===========================================================================
// § 24 KStG — Freibetrag für bestimmte Körperschaften
// ===========================================================================
--
Freibetrag nach § 24 KStG unter Berücksichtigung des Ausschlusses nach
§ 24 Satz 2 KStG: liegt ein Ausschlusstatbestand (Nr. 1–3) vor,
entfällt der Freibetrag vollständig; andernfalls der nach Satz 1 der
Höhe nach begrenzte Betrag.
@param einkommen Einkommen i.S.d. § 8 Abs. 1 KStG.
@param ausschluss Ausschlusstatbestand nach § 24 Satz 2 KStG.
@rückgabe Abzuziehender Freibetrag nach § 24 KStG (0 bei Ausschluss).
--
@Quelle("§ 24 KStG")
fn FreibetragNach24(einkommen: Euro, ausschluss: Freibetragsausschluss): Euro =
wähle (ausschluss) {
falls Keiner -> einkommen.mindestens(0).höchstens(FREIBETRAG_24)
falls Nr1KapitalLeistungen, Nr2VereinNach25, Nr3Investmentfonds -> 0
}
// ===========================================================================
// § 7 Absatz 2 KStG — zu versteuerndes Einkommen
// ===========================================================================
--
Zu versteuerndes Einkommen nach § 7 Abs. 2 KStG: das Einkommen i.S.d.
§ 8 Abs. 1 KStG, vermindert um die Freibeträge der §§ 24 und 25 KStG.
Kann negativ werden (Verlust); die steuerliche Auswirkung eines
negativen Betrags regelt die Steuerfestsetzung (`körperschaftsteuer`),
nicht diese Größe.
@param einkommen Einkommen i.S.d. § 8 Abs. 1 KStG.
@param freibetragNach24 Freibetrag nach § 24 KStG.
@param freibetragNach25 Freibetrag nach § 25 KStG.
@rückgabe Zu versteuerndes Einkommen (§ 7 Abs. 1 KStG: Bemessung).
--
@Quelle("§ 7 Absatz 2 KStG")
fn ZuVersteuerndesEinkommen(
einkommen: Euro,
freibetragNach24: Euro,
freibetragNach25: Euro,
): Euro = einkommen - freibetragNach24 - freibetragNach25
// ===========================================================================
// § 23 KStG — Steuerbetrag (inkl. § 31 Satz 2 Rundung, § 23 Abs. 2)
// ===========================================================================
--
Körperschaftsteuerbetrag nach § 23 Abs. 1 KStG: Steuersatz des
Veranlagungszeitraums multipliziert mit dem zu versteuernden Einkommen,
anschließend nach § 31 Satz 2 KStG **zu Gunsten des Steuerpflichtigen
auf volle Euro abgerundet** (niedrigere Steuer = zu Gunsten). Bei einem
zu versteuernden Einkommen von 0 oder weniger beträgt die Steuer 0
(keine negative Steuer; Verlustabzug regelt § 8 KStG i.V.m.
§ 10d EStG, hier nicht modelliert).
@param zuVersteuerndesEinkommen § 7 KStG: Bemessungsgrundlage.
@param veranlagungszeitraum Kalenderjahr (§ 23 Abs. 1 KStG).
@rückgabe Körperschaftsteuer nach § 23 Abs. 1 KStG, auf volle Euro
abgerundet (§ 31 Satz 2 KStG).
--
@Quelle("§ 23 Absatz 1 KStG")
fn KörperschaftsteuerBetrag(
zuVersteuerndesEinkommen: Euro,
veranlagungszeitraum: Ganzzahl,
): Euro = wähle {
falls zuVersteuerndesEinkommen <= 0 -> 0
sonst -> (zuVersteuerndesEinkommen * KstSatz(veranlagungszeitraum)).abrunden()
}
--
Anpassung der Körperschaftsteuer nach § 23 Abs. 2 KStG: wird die
Einkommensteuer aufgrund der Ermächtigung des § 51 Abs. 3 EStG herab-
oder heraufgesetzt, ermäßigt oder erhöht sich die Körperschaftsteuer
entsprechend (proportional). Der Anpassungsbetrag wird nach der
Wertung des § 31 Satz 2 KStG auf volle Euro abgerundet. In aller Regel
ist der Anpassungssatz 0 % (keine Verordnung in Kraft → unverändert).
@param körperschaftsteuer Steuer nach § 23 Abs. 1 KStG (abgerundet).
@param anpassung Anpassungssatz nach § 51 Abs. 3 EStG.
@rückgabe Angepasste Körperschaftsteuer (§ 23 Abs. 2 KStG).
--
@Quelle("§ 23 Absatz 2 KStG")
fn Anwenden23Abs2(körperschaftsteuer: Euro, anpassung: Prozent): Euro =
körperschaftsteuer + (körperschaftsteuer * anpassung).abrunden()
// ===========================================================================
// Gesamtberechnung
// ===========================================================================
--
Vollständige Festsetzung der Körperschaftsteuer eines Steuerfalls in
der gesetzlichen Reihenfolge: § 24 KStG (Freibetrag) → § 7 Abs. 2 KStG
(zu versteuerndes Einkommen) → § 23 Abs. 1 KStG (Steuersatz × zvE) →
§ 31 Satz 2 KStG (Abrundung) → § 23 Abs. 2 KStG (Anpassung). Liefert
alle Zwischengrößen für die Audit-Vorlage.
@param fall Eingaben des Steuerfalls (siehe `KörperschaftsteuerFall`).
@rückgabe Vollständig dokumentiertes Berechnungsergebnis.
--
@Quelle("§ 7 KStG")
fn BerechneKörperschaftsteuer(fall: KörperschaftsteuerFall): KörperschaftsteuerErgebnis {
var freibetrag24: Euro = FreibetragNach24(fall.einkommenNach8Abs1, fall.freibetragsausschluss)
var zve: Euro = ZuVersteuerndesEinkommen(
fall.einkommenNach8Abs1, freibetrag24, fall.freibetragNach25,
)
var satz: Prozent = KstSatz(fall.veranlagungszeitraum)
var basis: Euro = KörperschaftsteuerBetrag(zve, fall.veranlagungszeitraum)
var endgültig: Euro = Anwenden23Abs2(basis, fall.anpassungNach23Abs2)
KörperschaftsteuerErgebnis(
einkommen = fall.einkommenNach8Abs1,
freibetragNach24 = freibetrag24,
freibetragNach25 = fall.freibetragNach25,
zuVersteuerndesEinkommen = zve,
steuersatz = satz,
körperschaftsteuer = endgültig,
)
}examples/kst Geprüft — die prüfe-Fälle
Die Sollwerte sind von Hand aus dem Gesetzeswortlaut gerechnet — jeder Satz der Staffel, die Freibetrags-Begrenzung und die Ausschlusstatbestände des § 24 Satz 2.
Testdatei anzeigen kst.test.findsl
--
# Akzeptanztests — Körperschaftsteuer (§§ 7, 23, 24 KStG)
`prüfe`-Blöcke zur Datei `koerperschaftsteuer`. Alle Sollwerte sind von
Hand aus dem Gesetzeswortlaut gerechnet (KStG 1977, Stand 4.2.2026):
- § 23 Abs. 1 KStG: 2027 → 15 %, 2028 → 14 %, … , ab 2032 → 10 %.
- § 24 KStG: 5.000 €, höchstens i.H.d. Einkommens; Ausschluss → 0.
- § 7 Abs. 2 KStG: zvE = Einkommen − § 24 − § 25.
- § 23 Abs. 1 × § 31 S. 2: KSt = (zvE × Satz).abrunden().
Diese Datei enthält ausschließlich die `prüfe`-Blöcke.
--
verwende {
KstSatz,
FreibetragNach24,
ZuVersteuerndesEinkommen,
KörperschaftsteuerBetrag,
Anwenden23Abs2,
BerechneKörperschaftsteuer,
KörperschaftsteuerFall,
KörperschaftsteuerErgebnis,
Freibetragsausschluss,
Keiner,
Nr1KapitalLeistungen,
} aus "./kst"
prüfe "§ 23 Absatz 1 KStG — gestaffelter Steuersatz" {
testfall "Veranlagungszeiträume bis 2027 → 15 % (Nr. 1)" {
KstSatz(2010) == 15% und KstSatz(2025) == 15% und KstSatz(2027) == 15%
}
testfall "VZ 2028 → 14 % (Nr. 2)" {
KstSatz(2028) == 14%
}
testfall "VZ 2029 → 13 % (Nr. 3)" {
KstSatz(2029) == 13%
}
testfall "VZ 2030 → 12 % (Nr. 4)" {
KstSatz(2030) == 12%
}
testfall "VZ 2031 → 11 % (Nr. 5)" {
KstSatz(2031) == 11%
}
testfall "Veranlagungszeiträume ab 2032 → 10 % (Nr. 6)" {
KstSatz(2032) == 10% und KstSatz(2050) == 10%
}
}
prüfe "§ 24 KStG — Freibetrag" {
testfall "voller Freibetrag 5.000 € bei hohem Einkommen, kein Ausschluss" {
FreibetragNach24(100.000, Keiner) == 5.000
}
testfall "höchstens in Höhe des Einkommens (Einkommen < 5.000 €)" {
FreibetragNach24(3.000, Keiner) == 3.000
}
testfall "Einkommen genau 5.000 € → 5.000 € Freibetrag" {
FreibetragNach24(5.000, Keiner) == 5.000
}
testfall "Einkommen 0 € → kein Freibetrag (darf keinen Verlust schaffen)" {
FreibetragNach24(0, Keiner) == 0
}
testfall "§ 24 Satz 2 Nr. 1 (Kapitalgesellschaft) → Freibetrag entfällt" {
FreibetragNach24(100.000, Nr1KapitalLeistungen) == 0
}
}
prüfe "§ 7 Absatz 2 KStG — zu versteuerndes Einkommen" {
testfall "Einkommen − § 24 − § 25" {
ZuVersteuerndesEinkommen(100.000, 5.000, 0) == 95.000
}
testfall "mit § 25-Freibetrag" {
ZuVersteuerndesEinkommen(100.000, 5.000, 10.000) == 85.000
}
}
prüfe "§ 23 Abs. 1 × § 31 Satz 2 KStG — Steuerbetrag und Rundung" {
testfall "95.000 € × 15 % (VZ 2025) = 14.250 €" {
KörperschaftsteuerBetrag(95.000, 2025) == 14.250
}
testfall "§ 31 S. 2: 12.345 € × 15 % = 1.851,75 € → abgerundet 1.851 €" {
KörperschaftsteuerBetrag(12.345, 2025) == 1.851
}
testfall "1.000.000 € × 14 % (VZ 2028) = 140.000 €" {
KörperschaftsteuerBetrag(1.000.000, 2028) == 140.000
}
testfall "zu versteuerndes Einkommen 0 → keine Steuer" {
KörperschaftsteuerBetrag(0, 2025) == 0
}
}
prüfe "§ 23 Absatz 2 KStG — Anpassung" {
testfall "Anpassungssatz 0 % → unverändert" {
Anwenden23Abs2(10.000, 0%) == 10.000
}
testfall "Anpassung +10 % → 11.000 €" {
Anwenden23Abs2(10.000, 10%) == 11.000
}
}
prüfe "Gesamtberechnung (§§ 24 → 7 → 23 → 31 KStG)" {
testfall "Verein ohne Ausschluss, VZ 2025, Einkommen 100.000 €" {
var e: KörperschaftsteuerErgebnis = BerechneKörperschaftsteuer(
KörperschaftsteuerFall(
einkommenNach8Abs1 = 100.000,
veranlagungszeitraum = 2025,
freibetragsausschluss = Keiner,
),
)
e.freibetragNach24 == 5.000
und e.zuVersteuerndesEinkommen == 95.000
und e.steuersatz == 15%
und e.körperschaftsteuer == 14.250
}
testfall "Kapitalgesellschaft (§ 24 Satz 2 Nr. 1), VZ 2028, 1.000.000 €" {
var e: KörperschaftsteuerErgebnis = BerechneKörperschaftsteuer(
KörperschaftsteuerFall(
einkommenNach8Abs1 = 1.000.000,
veranlagungszeitraum = 2028,
freibetragsausschluss = Nr1KapitalLeistungen,
),
)
e.freibetragNach24 == 0
und e.zuVersteuerndesEinkommen == 1.000.000
und e.steuersatz == 14%
und e.körperschaftsteuer == 140.000
}
testfall "kleines Einkommen 3.000 €, VZ 2032 → zvE 0, keine Steuer" {
var e: KörperschaftsteuerErgebnis = BerechneKörperschaftsteuer(
KörperschaftsteuerFall(
einkommenNach8Abs1 = 3.000,
veranlagungszeitraum = 2032,
freibetragsausschluss = Keiner,
),
)
e.freibetragNach24 == 3.000
und e.zuVersteuerndesEinkommen == 0
und e.körperschaftsteuer == 0
}
testfall "mit § 25-Freibetrag 10.000 €, VZ 2025, Einkommen 100.000 €" {
var e: KörperschaftsteuerErgebnis = BerechneKörperschaftsteuer(
KörperschaftsteuerFall(
einkommenNach8Abs1 = 100.000,
veranlagungszeitraum = 2025,
freibetragsausschluss = Keiner,
freibetragNach25 = 10.000,
),
)
e.zuVersteuerndesEinkommen == 85.000
und e.körperschaftsteuer == 12.750
}
}Generierte Artefakte
Aus demselben Modul erzeugt die Toolchain ohne weiteres Zutun ausführbaren Code, Dokumentation und Programmablaufpläne — die Steuerregel bleibt die einzige Quelle der Wahrheit.
-
findsl codegen→ typisierter Java-, TypeScript- oder JavaScript-Code mit exakter Dezimalarithmetik. -
findsl docgen→ HTML-, Markdown- und PDF-Doku mit Paragraphen-Verweisen aus den@Quelle-Annotationen. -
findsl papgen→ Programmablaufpläne je Funktion (Mermaid oder self-contained HTML).
Quelle und Generat
Alle Dateien dieses Beispiels nebeneinander: links die FinDSL-Module, daneben sämtliche Artefakte, die die Toolchain daraus erzeugt — Java, TypeScript, JavaScript, die Dokumentation (Markdown, HTML, PDF) und die Programmablaufpläne. Zum Editieren und Prüfen im Playground öffnen.
Quelle
Generiert
Java
TypeScript
JavaScript
Doku
Diagramm
--
# Körperschaftsteuer — Tarif, Freibetrag und Bemessungsgrundlage
Bildet die Festsetzung der Körperschaftsteuer nach dem
**Körperschaftsteuergesetz (KStG 1977, Stand: zuletzt geändert durch
Art. 30 G v. 4.2.2026 I Nr. 33)** ab — die drei normativen Kerne:
- **§ 7 KStG** — Grundlagen der Besteuerung: die KSt bemisst sich nach
dem zu versteuernden Einkommen; dieses ist das Einkommen i.S.d.
§ 8 Abs. 1 KStG, vermindert um die Freibeträge der §§ 24 und 25 KStG
(Abs. 2); die KSt ist eine Jahressteuer (Abs. 3).
- **§ 23 KStG** — Steuersatz: nach Veranlagungszeitraum gestaffelter
Prozentsatz auf das zu versteuernde Einkommen (Abs. 1); optionale
Anpassung über § 51 Abs. 3 EStG (Abs. 2).
- **§ 24 KStG** — Freibetrag von 5.000 Euro, höchstens in Höhe des
Einkommens (Satz 1), mit den drei Ausschlusstatbeständen des Satz 2.
Anschließende **§ 31 Satz 2 KStG**-Rundung: die festgesetzten
KSt-Beträge sind zugunsten des Steuerpflichtigen auf volle Euro zu
runden — Abrundung (zu Gunsten = niedrigere Steuer).
Nicht modelliert (außerhalb des Auftragsumfangs §§ 7/23/24): die
Ermittlung des Einkommens i.S.d. § 8 Abs. 1 KStG selbst und der
Freibetrag nach § 25 KStG — beide gehen als geprüfte Eingaben ein,
damit die § 7 Abs. 2-Formel rechnerisch vollständig bleibt.
--
// ===========================================================================
// Konstanten — § 23 Absatz 1 KStG (gestaffelter Steuersatz) und § 24 KStG
// ===========================================================================
--
Steuersatz für Veranlagungszeiträume **bis 2027**: 15 % des zu
versteuernden Einkommens (§ 23 Abs. 1 Nr. 1 KStG).
--
@Quelle("§ 23 Absatz 1 Nummer 1 KStG")
konst KST_SATZ_BIS_2027: Prozent = 15%
-- Steuersatz für den Veranlagungszeitraum **2028**: 14 % (§ 23 Abs. 1 Nr. 2 KStG). --
@Quelle("§ 23 Absatz 1 Nummer 2 KStG")
konst KST_SATZ_2028: Prozent = 14%
-- Steuersatz für den Veranlagungszeitraum **2029**: 13 % (§ 23 Abs. 1 Nr. 3 KStG). --
@Quelle("§ 23 Absatz 1 Nummer 3 KStG")
konst KST_SATZ_2029: Prozent = 13%
-- Steuersatz für den Veranlagungszeitraum **2030**: 12 % (§ 23 Abs. 1 Nr. 4 KStG). --
@Quelle("§ 23 Absatz 1 Nummer 4 KStG")
konst KST_SATZ_2030: Prozent = 12%
-- Steuersatz für den Veranlagungszeitraum **2031**: 11 % (§ 23 Abs. 1 Nr. 5 KStG). --
@Quelle("§ 23 Absatz 1 Nummer 5 KStG")
konst KST_SATZ_2031: Prozent = 11%
-- Steuersatz für Veranlagungszeiträume **ab 2032**: 10 % (§ 23 Abs. 1 Nr. 6 KStG). --
@Quelle("§ 23 Absatz 1 Nummer 6 KStG")
konst KST_SATZ_AB_2032: Prozent = 10%
--
Freibetrag nach § 24 Satz 1 KStG: 5.000 Euro, höchstens jedoch in Höhe
des Einkommens. Greift nur, wenn kein Ausschlusstatbestand des § 24
Satz 2 KStG vorliegt.
--
@Quelle("§ 24 Satz 1 KStG")
konst FREIBETRAG_24: Euro = 5.000
// ===========================================================================
// Datenstrukturen
// ===========================================================================
--
Ausschlusstatbestände des § 24 Satz 2 KStG. Liegt einer davon vor,
entfällt der Freibetrag nach § 24 Satz 1 KStG vollständig.
@param Keiner Kein Ausschluss — der Freibetrag von 5.000 €
(§ 24 Satz 1 KStG) ist anwendbar.
@param Nr1KapitalLeistungen § 24 Satz 2 Nr. 1 KStG: Körperschaften/
Personenvereinigungen, deren Leistungen beim
Empfänger zu Einnahmen i.S.d. § 20 Abs. 1
Nr. 1 oder 2 EStG gehören (typische
Kapitalgesellschaften mit Ausschüttungen).
@param Nr2VereinNach25 § 24 Satz 2 Nr. 2 KStG: Vereine i.S.d.
§ 25 KStG (land-/forstwirtschaftliche
Erwerbs- und Wirtschaftsgenossenschaften
sowie Vereine).
@param Nr3Investmentfonds § 24 Satz 2 Nr. 3 KStG: Investmentfonds
(§ 1 InvStG) und Spezial-Investmentfonds
(§ 26 InvStG), deren Leistungen beim
Empfänger zu Einnahmen i.S.d. § 20 Abs. 1
Nr. 3 oder 3a EStG gehören.
--
@Quelle("§ 24 Satz 2 KStG")
aufzählung Freibetragsausschluss {
Keiner,
Nr1KapitalLeistungen,
Nr2VereinNach25,
Nr3Investmentfonds,
}
--
Eingaben für die Körperschaftsteuer-Festsetzung eines Steuerfalls.
@param einkommenNach8Abs1 Einkommen i.S.d. § 8 Abs. 1 KStG (nach
EStG/KStG ermittelt) — Bemessungsbasis VOR
Abzug der Freibeträge §§ 24, 25 KStG.
@param veranlagungszeitraum Kalenderjahr des Veranlagungszeitraums
(§ 7 Abs. 3 KStG); bestimmt den Steuersatz
nach § 23 Abs. 1 KStG.
@param freibetragsausschluss Ausschlusstatbestand nach § 24 Satz 2 KStG
(siehe `Freibetragsausschluss`).
@param freibetragNach25 Freibetrag nach § 25 KStG (extern ermittelt;
geht nach § 7 Abs. 2 KStG mindernd ein).
0, wenn nicht einschlägig.
@param anpassungNach23Abs2 Anpassungssatz nach § 23 Abs. 2 KStG i.V.m.
§ 51 Abs. 3 EStG (Herab-/Heraufsetzung). In
aller Regel 0 % (keine Änderung).
--
@Quelle("§ 7 KStG")
datensatz KörperschaftsteuerFall(
einkommenNach8Abs1: Euro, // Einkommen § 8 Abs. 1 KStG (vor Freibeträgen)
veranlagungszeitraum: Ganzzahl, // Kalenderjahr des VZ (§ 7 Abs. 3 KStG)
freibetragsausschluss: Freibetragsausschluss, // § 24 Satz 2 KStG: Ausschlusstatbestand
freibetragNach25: Euro = 0, // Freibetrag § 25 KStG (extern; § 7 Abs. 2 KStG)
anpassungNach23Abs2: Prozent = 0%, // § 23 Abs. 2 KStG i.V.m. § 51 Abs. 3 EStG
)
--
Vollständige, prüfbare Berechnungsdokumentation eines
Körperschaftsteuerfalls — jede Zwischengröße ist einzeln ausgewiesen,
damit die Festsetzung Schritt für Schritt gegen das Gesetz auditierbar
ist.
@param einkommen Einkommen i.S.d. § 8 Abs. 1 KStG
(Eingabe, unverändert übernommen).
@param freibetragNach24 Tatsächlich abgezogener Freibetrag
nach § 24 KStG (0, falls Satz 2 greift).
@param freibetragNach25 Abgezogener Freibetrag nach § 25 KStG
(Eingabe).
@param zuVersteuerndesEinkommen § 7 Abs. 1, 2 KStG: Bemessungsgrundlage
= Einkommen − § 24 − § 25.
@param steuersatz § 23 Abs. 1 KStG: für den
Veranlagungszeitraum geltender Satz.
@param körperschaftsteuer Festgesetzte Körperschaftsteuer nach
§ 23 KStG, auf volle Euro abgerundet
(§ 31 Satz 2 KStG), inkl. § 23 Abs. 2.
--
@Quelle("§ 7 KStG")
datensatz KörperschaftsteuerErgebnis(
einkommen: Euro, // Einkommen § 8 Abs. 1 KStG (Eingabe)
freibetragNach24: Euro, // abgezogener Freibetrag § 24 KStG
freibetragNach25: Euro, // abgezogener Freibetrag § 25 KStG (Eingabe)
zuVersteuerndesEinkommen: Euro, // § 7 Abs. 1, 2 KStG: Bemessungsgrundlage
steuersatz: Prozent, // § 23 Abs. 1 KStG: VZ-abhängiger Satz
körperschaftsteuer: Euro, // festgesetzte KSt (§ 31 Satz 2: abgerundet)
)
// ===========================================================================
// § 23 Absatz 1 KStG — gestaffelter Steuersatz
// ===========================================================================
--
Liefert den Körperschaftsteuersatz für einen Veranlagungszeitraum nach
der Staffel des § 23 Abs. 1 KStG. „bis 2027" (Nr. 1) ist einschließlich
2027; „ab 2032" (Nr. 6) ist einschließlich 2032 (durch `sonst`
abgedeckt, da alle früheren Jahre vorher erfasst sind).
@param veranlagungszeitraum Kalenderjahr des Veranlagungszeitraums.
@rückgabe Der nach § 23 Abs. 1 KStG für diesen VZ geltende Satz.
--
@Quelle("§ 23 Absatz 1 KStG")
fn KstSatz(veranlagungszeitraum: Ganzzahl): Prozent = wähle {
falls veranlagungszeitraum <= 2027 -> KST_SATZ_BIS_2027
falls veranlagungszeitraum == 2028 -> KST_SATZ_2028
falls veranlagungszeitraum == 2029 -> KST_SATZ_2029
falls veranlagungszeitraum == 2030 -> KST_SATZ_2030
falls veranlagungszeitraum == 2031 -> KST_SATZ_2031
sonst -> KST_SATZ_AB_2032
}
// ===========================================================================
// § 24 KStG — Freibetrag für bestimmte Körperschaften
// ===========================================================================
--
Freibetrag nach § 24 KStG unter Berücksichtigung des Ausschlusses nach
§ 24 Satz 2 KStG: liegt ein Ausschlusstatbestand (Nr. 1–3) vor,
entfällt der Freibetrag vollständig; andernfalls der nach Satz 1 der
Höhe nach begrenzte Betrag.
@param einkommen Einkommen i.S.d. § 8 Abs. 1 KStG.
@param ausschluss Ausschlusstatbestand nach § 24 Satz 2 KStG.
@rückgabe Abzuziehender Freibetrag nach § 24 KStG (0 bei Ausschluss).
--
@Quelle("§ 24 KStG")
fn FreibetragNach24(einkommen: Euro, ausschluss: Freibetragsausschluss): Euro =
wähle (ausschluss) {
falls Keiner -> einkommen.mindestens(0).höchstens(FREIBETRAG_24)
falls Nr1KapitalLeistungen, Nr2VereinNach25, Nr3Investmentfonds -> 0
}
// ===========================================================================
// § 7 Absatz 2 KStG — zu versteuerndes Einkommen
// ===========================================================================
--
Zu versteuerndes Einkommen nach § 7 Abs. 2 KStG: das Einkommen i.S.d.
§ 8 Abs. 1 KStG, vermindert um die Freibeträge der §§ 24 und 25 KStG.
Kann negativ werden (Verlust); die steuerliche Auswirkung eines
negativen Betrags regelt die Steuerfestsetzung (`körperschaftsteuer`),
nicht diese Größe.
@param einkommen Einkommen i.S.d. § 8 Abs. 1 KStG.
@param freibetragNach24 Freibetrag nach § 24 KStG.
@param freibetragNach25 Freibetrag nach § 25 KStG.
@rückgabe Zu versteuerndes Einkommen (§ 7 Abs. 1 KStG: Bemessung).
--
@Quelle("§ 7 Absatz 2 KStG")
fn ZuVersteuerndesEinkommen(
einkommen: Euro,
freibetragNach24: Euro,
freibetragNach25: Euro,
): Euro = einkommen - freibetragNach24 - freibetragNach25
// ===========================================================================
// § 23 KStG — Steuerbetrag (inkl. § 31 Satz 2 Rundung, § 23 Abs. 2)
// ===========================================================================
--
Körperschaftsteuerbetrag nach § 23 Abs. 1 KStG: Steuersatz des
Veranlagungszeitraums multipliziert mit dem zu versteuernden Einkommen,
anschließend nach § 31 Satz 2 KStG **zu Gunsten des Steuerpflichtigen
auf volle Euro abgerundet** (niedrigere Steuer = zu Gunsten). Bei einem
zu versteuernden Einkommen von 0 oder weniger beträgt die Steuer 0
(keine negative Steuer; Verlustabzug regelt § 8 KStG i.V.m.
§ 10d EStG, hier nicht modelliert).
@param zuVersteuerndesEinkommen § 7 KStG: Bemessungsgrundlage.
@param veranlagungszeitraum Kalenderjahr (§ 23 Abs. 1 KStG).
@rückgabe Körperschaftsteuer nach § 23 Abs. 1 KStG, auf volle Euro
abgerundet (§ 31 Satz 2 KStG).
--
@Quelle("§ 23 Absatz 1 KStG")
fn KörperschaftsteuerBetrag(
zuVersteuerndesEinkommen: Euro,
veranlagungszeitraum: Ganzzahl,
): Euro = wähle {
falls zuVersteuerndesEinkommen <= 0 -> 0
sonst -> (zuVersteuerndesEinkommen * KstSatz(veranlagungszeitraum)).abrunden()
}
--
Anpassung der Körperschaftsteuer nach § 23 Abs. 2 KStG: wird die
Einkommensteuer aufgrund der Ermächtigung des § 51 Abs. 3 EStG herab-
oder heraufgesetzt, ermäßigt oder erhöht sich die Körperschaftsteuer
entsprechend (proportional). Der Anpassungsbetrag wird nach der
Wertung des § 31 Satz 2 KStG auf volle Euro abgerundet. In aller Regel
ist der Anpassungssatz 0 % (keine Verordnung in Kraft → unverändert).
@param körperschaftsteuer Steuer nach § 23 Abs. 1 KStG (abgerundet).
@param anpassung Anpassungssatz nach § 51 Abs. 3 EStG.
@rückgabe Angepasste Körperschaftsteuer (§ 23 Abs. 2 KStG).
--
@Quelle("§ 23 Absatz 2 KStG")
fn Anwenden23Abs2(körperschaftsteuer: Euro, anpassung: Prozent): Euro =
körperschaftsteuer + (körperschaftsteuer * anpassung).abrunden()
// ===========================================================================
// Gesamtberechnung
// ===========================================================================
--
Vollständige Festsetzung der Körperschaftsteuer eines Steuerfalls in
der gesetzlichen Reihenfolge: § 24 KStG (Freibetrag) → § 7 Abs. 2 KStG
(zu versteuerndes Einkommen) → § 23 Abs. 1 KStG (Steuersatz × zvE) →
§ 31 Satz 2 KStG (Abrundung) → § 23 Abs. 2 KStG (Anpassung). Liefert
alle Zwischengrößen für die Audit-Vorlage.
@param fall Eingaben des Steuerfalls (siehe `KörperschaftsteuerFall`).
@rückgabe Vollständig dokumentiertes Berechnungsergebnis.
--
@Quelle("§ 7 KStG")
fn BerechneKörperschaftsteuer(fall: KörperschaftsteuerFall): KörperschaftsteuerErgebnis {
var freibetrag24: Euro = FreibetragNach24(fall.einkommenNach8Abs1, fall.freibetragsausschluss)
var zve: Euro = ZuVersteuerndesEinkommen(
fall.einkommenNach8Abs1, freibetrag24, fall.freibetragNach25,
)
var satz: Prozent = KstSatz(fall.veranlagungszeitraum)
var basis: Euro = KörperschaftsteuerBetrag(zve, fall.veranlagungszeitraum)
var endgültig: Euro = Anwenden23Abs2(basis, fall.anpassungNach23Abs2)
KörperschaftsteuerErgebnis(
einkommen = fall.einkommenNach8Abs1,
freibetragNach24 = freibetrag24,
freibetragNach25 = fall.freibetragNach25,
zuVersteuerndesEinkommen = zve,
steuersatz = satz,
körperschaftsteuer = endgültig,
)
}--
# Akzeptanztests — Körperschaftsteuer (§§ 7, 23, 24 KStG)
`prüfe`-Blöcke zur Datei `koerperschaftsteuer`. Alle Sollwerte sind von
Hand aus dem Gesetzeswortlaut gerechnet (KStG 1977, Stand 4.2.2026):
- § 23 Abs. 1 KStG: 2027 → 15 %, 2028 → 14 %, … , ab 2032 → 10 %.
- § 24 KStG: 5.000 €, höchstens i.H.d. Einkommens; Ausschluss → 0.
- § 7 Abs. 2 KStG: zvE = Einkommen − § 24 − § 25.
- § 23 Abs. 1 × § 31 S. 2: KSt = (zvE × Satz).abrunden().
Diese Datei enthält ausschließlich die `prüfe`-Blöcke.
--
verwende {
KstSatz,
FreibetragNach24,
ZuVersteuerndesEinkommen,
KörperschaftsteuerBetrag,
Anwenden23Abs2,
BerechneKörperschaftsteuer,
KörperschaftsteuerFall,
KörperschaftsteuerErgebnis,
Freibetragsausschluss,
Keiner,
Nr1KapitalLeistungen,
} aus "./kst"
prüfe "§ 23 Absatz 1 KStG — gestaffelter Steuersatz" {
testfall "Veranlagungszeiträume bis 2027 → 15 % (Nr. 1)" {
KstSatz(2010) == 15% und KstSatz(2025) == 15% und KstSatz(2027) == 15%
}
testfall "VZ 2028 → 14 % (Nr. 2)" {
KstSatz(2028) == 14%
}
testfall "VZ 2029 → 13 % (Nr. 3)" {
KstSatz(2029) == 13%
}
testfall "VZ 2030 → 12 % (Nr. 4)" {
KstSatz(2030) == 12%
}
testfall "VZ 2031 → 11 % (Nr. 5)" {
KstSatz(2031) == 11%
}
testfall "Veranlagungszeiträume ab 2032 → 10 % (Nr. 6)" {
KstSatz(2032) == 10% und KstSatz(2050) == 10%
}
}
prüfe "§ 24 KStG — Freibetrag" {
testfall "voller Freibetrag 5.000 € bei hohem Einkommen, kein Ausschluss" {
FreibetragNach24(100.000, Keiner) == 5.000
}
testfall "höchstens in Höhe des Einkommens (Einkommen < 5.000 €)" {
FreibetragNach24(3.000, Keiner) == 3.000
}
testfall "Einkommen genau 5.000 € → 5.000 € Freibetrag" {
FreibetragNach24(5.000, Keiner) == 5.000
}
testfall "Einkommen 0 € → kein Freibetrag (darf keinen Verlust schaffen)" {
FreibetragNach24(0, Keiner) == 0
}
testfall "§ 24 Satz 2 Nr. 1 (Kapitalgesellschaft) → Freibetrag entfällt" {
FreibetragNach24(100.000, Nr1KapitalLeistungen) == 0
}
}
prüfe "§ 7 Absatz 2 KStG — zu versteuerndes Einkommen" {
testfall "Einkommen − § 24 − § 25" {
ZuVersteuerndesEinkommen(100.000, 5.000, 0) == 95.000
}
testfall "mit § 25-Freibetrag" {
ZuVersteuerndesEinkommen(100.000, 5.000, 10.000) == 85.000
}
}
prüfe "§ 23 Abs. 1 × § 31 Satz 2 KStG — Steuerbetrag und Rundung" {
testfall "95.000 € × 15 % (VZ 2025) = 14.250 €" {
KörperschaftsteuerBetrag(95.000, 2025) == 14.250
}
testfall "§ 31 S. 2: 12.345 € × 15 % = 1.851,75 € → abgerundet 1.851 €" {
KörperschaftsteuerBetrag(12.345, 2025) == 1.851
}
testfall "1.000.000 € × 14 % (VZ 2028) = 140.000 €" {
KörperschaftsteuerBetrag(1.000.000, 2028) == 140.000
}
testfall "zu versteuerndes Einkommen 0 → keine Steuer" {
KörperschaftsteuerBetrag(0, 2025) == 0
}
}
prüfe "§ 23 Absatz 2 KStG — Anpassung" {
testfall "Anpassungssatz 0 % → unverändert" {
Anwenden23Abs2(10.000, 0%) == 10.000
}
testfall "Anpassung +10 % → 11.000 €" {
Anwenden23Abs2(10.000, 10%) == 11.000
}
}
prüfe "Gesamtberechnung (§§ 24 → 7 → 23 → 31 KStG)" {
testfall "Verein ohne Ausschluss, VZ 2025, Einkommen 100.000 €" {
var e: KörperschaftsteuerErgebnis = BerechneKörperschaftsteuer(
KörperschaftsteuerFall(
einkommenNach8Abs1 = 100.000,
veranlagungszeitraum = 2025,
freibetragsausschluss = Keiner,
),
)
e.freibetragNach24 == 5.000
und e.zuVersteuerndesEinkommen == 95.000
und e.steuersatz == 15%
und e.körperschaftsteuer == 14.250
}
testfall "Kapitalgesellschaft (§ 24 Satz 2 Nr. 1), VZ 2028, 1.000.000 €" {
var e: KörperschaftsteuerErgebnis = BerechneKörperschaftsteuer(
KörperschaftsteuerFall(
einkommenNach8Abs1 = 1.000.000,
veranlagungszeitraum = 2028,
freibetragsausschluss = Nr1KapitalLeistungen,
),
)
e.freibetragNach24 == 0
und e.zuVersteuerndesEinkommen == 1.000.000
und e.steuersatz == 14%
und e.körperschaftsteuer == 140.000
}
testfall "kleines Einkommen 3.000 €, VZ 2032 → zvE 0, keine Steuer" {
var e: KörperschaftsteuerErgebnis = BerechneKörperschaftsteuer(
KörperschaftsteuerFall(
einkommenNach8Abs1 = 3.000,
veranlagungszeitraum = 2032,
freibetragsausschluss = Keiner,
),
)
e.freibetragNach24 == 3.000
und e.zuVersteuerndesEinkommen == 0
und e.körperschaftsteuer == 0
}
testfall "mit § 25-Freibetrag 10.000 €, VZ 2025, Einkommen 100.000 €" {
var e: KörperschaftsteuerErgebnis = BerechneKörperschaftsteuer(
KörperschaftsteuerFall(
einkommenNach8Abs1 = 100.000,
veranlagungszeitraum = 2025,
freibetragsausschluss = Keiner,
freibetragNach25 = 10.000,
),
)
e.zuVersteuerndesEinkommen == 85.000
und e.körperschaftsteuer == 12.750
}
}import org.findsl.runtime.FinDslNumber;
import org.findsl.runtime.Euro;
import org.findsl.runtime.Prozent;
import org.findsl.runtime.Ganzzahl;
import org.findsl.runtime.Quelle;
import javax.annotation.processing.Generated;
/**
* Generiert aus FinDSL — NICHT manuell editieren.
* Semantik-Orakel: der FinDSL-Interpreter (bit-genau).
*
* # Körperschaftsteuer — Tarif, Freibetrag und Bemessungsgrundlage
*
* Bildet die Festsetzung der Körperschaftsteuer nach dem
* **Körperschaftsteuergesetz (KStG 1977, Stand: zuletzt geändert durch
* Art. 30 G v. 4.2.2026 I Nr. 33)** ab — die drei normativen Kerne:
*
* - **§ 7 KStG** — Grundlagen der Besteuerung: die KSt bemisst sich nach
* dem zu versteuernden Einkommen; dieses ist das Einkommen i.S.d.
* § 8 Abs. 1 KStG, vermindert um die Freibeträge der §§ 24 und 25 KStG
* (Abs. 2); die KSt ist eine Jahressteuer (Abs. 3).
* - **§ 23 KStG** — Steuersatz: nach Veranlagungszeitraum gestaffelter
* Prozentsatz auf das zu versteuernde Einkommen (Abs. 1); optionale
* Anpassung über § 51 Abs. 3 EStG (Abs. 2).
* - **§ 24 KStG** — Freibetrag von 5.000 Euro, höchstens in Höhe des
* Einkommens (Satz 1), mit den drei Ausschlusstatbeständen des Satz 2.
*
* Anschließende **§ 31 Satz 2 KStG**-Rundung: die festgesetzten
* KSt-Beträge sind zugunsten des Steuerpflichtigen auf volle Euro zu
* runden — Abrundung (zu Gunsten = niedrigere Steuer).
*
* Nicht modelliert (außerhalb des Auftragsumfangs §§ 7/23/24): die
* Ermittlung des Einkommens i.S.d. § 8 Abs. 1 KStG selbst und der
* Freibetrag nach § 25 KStG — beide gehen als geprüfte Eingaben ein,
* damit die § 7 Abs. 2-Formel rechnerisch vollständig bleibt.
*/
@Generated(value = "findsl.Generator")
public interface Kst {
/**
* Liefert den Körperschaftsteuersatz für einen Veranlagungszeitraum nach
* der Staffel des § 23 Abs. 1 KStG. „bis 2027" (Nr. 1) ist einschließlich
* 2027; „ab 2032" (Nr. 6) ist einschließlich 2032 (durch `sonst`
* abgedeckt, da alle früheren Jahre vorher erfasst sind).
*
* @param veranlagungszeitraum Kalenderjahr des Veranlagungszeitraums.
* @return Der nach § 23 Abs. 1 KStG für diesen VZ geltende Satz.
*/
@Quelle("§ 23 Absatz 1 KStG")
Prozent kstSatz(Ganzzahl veranlagungszeitraum);
/**
* Freibetrag nach § 24 KStG unter Berücksichtigung des Ausschlusses nach
* § 24 Satz 2 KStG: liegt ein Ausschlusstatbestand (Nr. 1–3) vor,
* entfällt der Freibetrag vollständig; andernfalls der nach Satz 1 der
* Höhe nach begrenzte Betrag.
*
* @param einkommen Einkommen i.S.d. § 8 Abs. 1 KStG.
* @param ausschluss Ausschlusstatbestand nach § 24 Satz 2 KStG.
* @return Abzuziehender Freibetrag nach § 24 KStG (0 bei Ausschluss).
*/
@Quelle("§ 24 KStG")
Euro freibetragNach24(Euro einkommen, Freibetragsausschluss ausschluss);
/**
* Zu versteuerndes Einkommen nach § 7 Abs. 2 KStG: das Einkommen i.S.d.
* § 8 Abs. 1 KStG, vermindert um die Freibeträge der §§ 24 und 25 KStG.
* Kann negativ werden (Verlust); die steuerliche Auswirkung eines
* negativen Betrags regelt die Steuerfestsetzung (`körperschaftsteuer`),
* nicht diese Größe.
*
* @param einkommen Einkommen i.S.d. § 8 Abs. 1 KStG.
* @param freibetragNach24 Freibetrag nach § 24 KStG.
* @param freibetragNach25 Freibetrag nach § 25 KStG.
* @return Zu versteuerndes Einkommen (§ 7 Abs. 1 KStG: Bemessung).
*/
@Quelle("§ 7 Absatz 2 KStG")
Euro zuVersteuerndesEinkommen(Euro einkommen, Euro freibetragNach24, Euro freibetragNach25);
/**
* Körperschaftsteuerbetrag nach § 23 Abs. 1 KStG: Steuersatz des
* Veranlagungszeitraums multipliziert mit dem zu versteuernden Einkommen,
* anschließend nach § 31 Satz 2 KStG **zu Gunsten des Steuerpflichtigen
* auf volle Euro abgerundet** (niedrigere Steuer = zu Gunsten). Bei einem
* zu versteuernden Einkommen von 0 oder weniger beträgt die Steuer 0
* (keine negative Steuer; Verlustabzug regelt § 8 KStG i.V.m.
* § 10d EStG, hier nicht modelliert).
*
* @param zuVersteuerndesEinkommen § 7 KStG: Bemessungsgrundlage.
* @param veranlagungszeitraum Kalenderjahr (§ 23 Abs. 1 KStG).
* @return Körperschaftsteuer nach § 23 Abs. 1 KStG, auf volle Euro
* abgerundet (§ 31 Satz 2 KStG).
*/
@Quelle("§ 23 Absatz 1 KStG")
Euro körperschaftsteuerBetrag(Euro zuVersteuerndesEinkommen, Ganzzahl veranlagungszeitraum);
/**
* Anpassung der Körperschaftsteuer nach § 23 Abs. 2 KStG: wird die
* Einkommensteuer aufgrund der Ermächtigung des § 51 Abs. 3 EStG herab-
* oder heraufgesetzt, ermäßigt oder erhöht sich die Körperschaftsteuer
* entsprechend (proportional). Der Anpassungsbetrag wird nach der
* Wertung des § 31 Satz 2 KStG auf volle Euro abgerundet. In aller Regel
* ist der Anpassungssatz 0 % (keine Verordnung in Kraft → unverändert).
*
* @param körperschaftsteuer Steuer nach § 23 Abs. 1 KStG (abgerundet).
* @param anpassung Anpassungssatz nach § 51 Abs. 3 EStG.
* @return Angepasste Körperschaftsteuer (§ 23 Abs. 2 KStG).
*/
@Quelle("§ 23 Absatz 2 KStG")
Euro anwenden23Abs2(Euro körperschaftsteuer, Prozent anpassung);
/**
* Vollständige Festsetzung der Körperschaftsteuer eines Steuerfalls in
* der gesetzlichen Reihenfolge: § 24 KStG (Freibetrag) → § 7 Abs. 2 KStG
* (zu versteuerndes Einkommen) → § 23 Abs. 1 KStG (Steuersatz × zvE) →
* § 31 Satz 2 KStG (Abrundung) → § 23 Abs. 2 KStG (Anpassung). Liefert
* alle Zwischengrößen für die Audit-Vorlage.
*
* @param fall Eingaben des Steuerfalls (siehe `KörperschaftsteuerFall`).
* @return Vollständig dokumentiertes Berechnungsergebnis.
*/
@Quelle("§ 7 KStG")
KörperschaftsteuerErgebnis berechneKörperschaftsteuer(KörperschaftsteuerFall fall);
/**
* Ausschlusstatbestände des § 24 Satz 2 KStG. Liegt einer davon vor,
* entfällt der Freibetrag nach § 24 Satz 1 KStG vollständig.
*
* @param Keiner Kein Ausschluss — der Freibetrag von 5.000 €
* (§ 24 Satz 1 KStG) ist anwendbar.
* @param Nr1KapitalLeistungen § 24 Satz 2 Nr. 1 KStG: Körperschaften/
* Personenvereinigungen, deren Leistungen beim
* Empfänger zu Einnahmen i.S.d. § 20 Abs. 1
* Nr. 1 oder 2 EStG gehören (typische
* Kapitalgesellschaften mit Ausschüttungen).
* @param Nr2VereinNach25 § 24 Satz 2 Nr. 2 KStG: Vereine i.S.d.
* § 25 KStG (land-/forstwirtschaftliche
* Erwerbs- und Wirtschaftsgenossenschaften
* sowie Vereine).
* @param Nr3Investmentfonds § 24 Satz 2 Nr. 3 KStG: Investmentfonds
* (§ 1 InvStG) und Spezial-Investmentfonds
* (§ 26 InvStG), deren Leistungen beim
* Empfänger zu Einnahmen i.S.d. § 20 Abs. 1
* Nr. 3 oder 3a EStG gehören.
*/
@Quelle("§ 24 Satz 2 KStG")
public enum Freibetragsausschluss {
Keiner,
Nr1KapitalLeistungen,
Nr2VereinNach25,
Nr3Investmentfonds
}
/**
* Eingaben für die Körperschaftsteuer-Festsetzung eines Steuerfalls.
*
* @param einkommenNach8Abs1 Einkommen i.S.d. § 8 Abs. 1 KStG (nach
* EStG/KStG ermittelt) — Bemessungsbasis VOR
* Abzug der Freibeträge §§ 24, 25 KStG.
* @param veranlagungszeitraum Kalenderjahr des Veranlagungszeitraums
* (§ 7 Abs. 3 KStG); bestimmt den Steuersatz
* nach § 23 Abs. 1 KStG.
* @param freibetragsausschluss Ausschlusstatbestand nach § 24 Satz 2 KStG
* (siehe `Freibetragsausschluss`).
* @param freibetragNach25 Freibetrag nach § 25 KStG (extern ermittelt;
* geht nach § 7 Abs. 2 KStG mindernd ein).
* 0, wenn nicht einschlägig.
* @param anpassungNach23Abs2 Anpassungssatz nach § 23 Abs. 2 KStG i.V.m.
* § 51 Abs. 3 EStG (Herab-/Heraufsetzung). In
* aller Regel 0 % (keine Änderung).
*/
@Quelle("§ 7 KStG")
public record KörperschaftsteuerFall(
Euro einkommenNach8Abs1,
Ganzzahl veranlagungszeitraum,
Freibetragsausschluss freibetragsausschluss,
Euro freibetragNach25,
Prozent anpassungNach23Abs2
) {}
/**
* Vollständige, prüfbare Berechnungsdokumentation eines
* Körperschaftsteuerfalls — jede Zwischengröße ist einzeln ausgewiesen,
* damit die Festsetzung Schritt für Schritt gegen das Gesetz auditierbar
* ist.
*
* @param einkommen Einkommen i.S.d. § 8 Abs. 1 KStG
* (Eingabe, unverändert übernommen).
* @param freibetragNach24 Tatsächlich abgezogener Freibetrag
* nach § 24 KStG (0, falls Satz 2 greift).
* @param freibetragNach25 Abgezogener Freibetrag nach § 25 KStG
* (Eingabe).
* @param zuVersteuerndesEinkommen § 7 Abs. 1, 2 KStG: Bemessungsgrundlage
* = Einkommen − § 24 − § 25.
* @param steuersatz § 23 Abs. 1 KStG: für den
* Veranlagungszeitraum geltender Satz.
* @param körperschaftsteuer Festgesetzte Körperschaftsteuer nach
* § 23 KStG, auf volle Euro abgerundet
* (§ 31 Satz 2 KStG), inkl. § 23 Abs. 2.
*/
@Quelle("§ 7 KStG")
public record KörperschaftsteuerErgebnis(
Euro einkommen,
Euro freibetragNach24,
Euro freibetragNach25,
Euro zuVersteuerndesEinkommen,
Prozent steuersatz,
Euro körperschaftsteuer
) {}
/**
* Steuersatz für Veranlagungszeiträume **bis 2027**: 15 % des zu
* versteuernden Einkommens (§ 23 Abs. 1 Nr. 1 KStG).
*/
@Quelle("§ 23 Absatz 1 Nummer 1 KStG")
public static final Prozent KST_SATZ_BIS_2027 = Prozent.von(FinDslNumber.prozent("0.15"));
/**
* Steuersatz für den Veranlagungszeitraum **2028**: 14 % (§ 23 Abs. 1 Nr. 2 KStG).
*/
@Quelle("§ 23 Absatz 1 Nummer 2 KStG")
public static final Prozent KST_SATZ_2028 = Prozent.von(FinDslNumber.prozent("0.14"));
/**
* Steuersatz für den Veranlagungszeitraum **2029**: 13 % (§ 23 Abs. 1 Nr. 3 KStG).
*/
@Quelle("§ 23 Absatz 1 Nummer 3 KStG")
public static final Prozent KST_SATZ_2029 = Prozent.von(FinDslNumber.prozent("0.13"));
/**
* Steuersatz für den Veranlagungszeitraum **2030**: 12 % (§ 23 Abs. 1 Nr. 4 KStG).
*/
@Quelle("§ 23 Absatz 1 Nummer 4 KStG")
public static final Prozent KST_SATZ_2030 = Prozent.von(FinDslNumber.prozent("0.12"));
/**
* Steuersatz für den Veranlagungszeitraum **2031**: 11 % (§ 23 Abs. 1 Nr. 5 KStG).
*/
@Quelle("§ 23 Absatz 1 Nummer 5 KStG")
public static final Prozent KST_SATZ_2031 = Prozent.von(FinDslNumber.prozent("0.11"));
/**
* Steuersatz für Veranlagungszeiträume **ab 2032**: 10 % (§ 23 Abs. 1 Nr. 6 KStG).
*/
@Quelle("§ 23 Absatz 1 Nummer 6 KStG")
public static final Prozent KST_SATZ_AB_2032 = Prozent.von(FinDslNumber.prozent("0.1"));
/**
* Freibetrag nach § 24 Satz 1 KStG: 5.000 Euro, höchstens jedoch in Höhe
* des Einkommens. Greift nur, wenn kein Ausschlusstatbestand des § 24
* Satz 2 KStG vorliegt.
*/
@Quelle("§ 24 Satz 1 KStG")
public static final Euro FREIBETRAG_24 = Euro.von(
FinDslNumber.ganzzahl("5000").withMoneyAnnotation(FinDslNumber.Type.Euro, "Konstante \"FREIBETRAG_24\""));
}import org.findsl.runtime.FinDslNumber;
import org.findsl.runtime.FinDslRuntimeError;
import org.findsl.runtime.Euro;
import org.findsl.runtime.Prozent;
import org.findsl.runtime.Ganzzahl;
import org.findsl.runtime.Quelle;
import javax.annotation.processing.Generated;
/**
* Generiert aus FinDSL — NICHT manuell editieren.
* Semantik-Orakel: der FinDSL-Interpreter (bit-genau).
*
* # Körperschaftsteuer — Tarif, Freibetrag und Bemessungsgrundlage
*
* Bildet die Festsetzung der Körperschaftsteuer nach dem
* **Körperschaftsteuergesetz (KStG 1977, Stand: zuletzt geändert durch
* Art. 30 G v. 4.2.2026 I Nr. 33)** ab — die drei normativen Kerne:
*
* - **§ 7 KStG** — Grundlagen der Besteuerung: die KSt bemisst sich nach
* dem zu versteuernden Einkommen; dieses ist das Einkommen i.S.d.
* § 8 Abs. 1 KStG, vermindert um die Freibeträge der §§ 24 und 25 KStG
* (Abs. 2); die KSt ist eine Jahressteuer (Abs. 3).
* - **§ 23 KStG** — Steuersatz: nach Veranlagungszeitraum gestaffelter
* Prozentsatz auf das zu versteuernde Einkommen (Abs. 1); optionale
* Anpassung über § 51 Abs. 3 EStG (Abs. 2).
* - **§ 24 KStG** — Freibetrag von 5.000 Euro, höchstens in Höhe des
* Einkommens (Satz 1), mit den drei Ausschlusstatbeständen des Satz 2.
*
* Anschließende **§ 31 Satz 2 KStG**-Rundung: die festgesetzten
* KSt-Beträge sind zugunsten des Steuerpflichtigen auf volle Euro zu
* runden — Abrundung (zu Gunsten = niedrigere Steuer).
*
* Nicht modelliert (außerhalb des Auftragsumfangs §§ 7/23/24): die
* Ermittlung des Einkommens i.S.d. § 8 Abs. 1 KStG selbst und der
* Freibetrag nach § 25 KStG — beide gehen als geprüfte Eingaben ein,
* damit die § 7 Abs. 2-Formel rechnerisch vollständig bleibt.
*/
@Generated(value = "findsl.Generator")
class KstImpl implements Kst {
@Quelle("§ 23 Absatz 1 KStG")
@Override
public Prozent kstSatz(Ganzzahl veranlagungszeitraum) {
if (veranlagungszeitraum.compareValue(FinDslNumber.ganzzahl("2027")) <= 0) {
return Prozent.von(KST_SATZ_BIS_2027);
}
if (veranlagungszeitraum.equalsValue(FinDslNumber.ganzzahl("2028"))) {
return Prozent.von(KST_SATZ_2028);
}
if (veranlagungszeitraum.equalsValue(FinDslNumber.ganzzahl("2029"))) {
return Prozent.von(KST_SATZ_2029);
}
if (veranlagungszeitraum.equalsValue(FinDslNumber.ganzzahl("2030"))) {
return Prozent.von(KST_SATZ_2030);
}
if (veranlagungszeitraum.equalsValue(FinDslNumber.ganzzahl("2031"))) {
return Prozent.von(KST_SATZ_2031);
}
return Prozent.von(KST_SATZ_AB_2032);
}
@Quelle("§ 24 KStG")
@Override
public Euro freibetragNach24(Euro einkommen, Freibetragsausschluss ausschluss) {
if (ausschluss == Freibetragsausschluss.Keiner) {
return Euro.von(einkommen.mindestens(FinDslNumber.ganzzahl("0")).hoechstens(FREIBETRAG_24));
}
if (
(ausschluss == Freibetragsausschluss.Nr1KapitalLeistungen)
|| (ausschluss == Freibetragsausschluss.Nr2VereinNach25)
|| (ausschluss == Freibetragsausschluss.Nr3Investmentfonds)) {
return Euro.von(FinDslNumber.ganzzahl("0"));
}
throw new FinDslRuntimeError("Kein falls-Arm passte (wähle, Codegen).");
}
@Quelle("§ 7 Absatz 2 KStG")
@Override
public Euro zuVersteuerndesEinkommen(Euro einkommen, Euro freibetragNach24, Euro freibetragNach25) {
return Euro.von(einkommen.sub(freibetragNach24).sub(freibetragNach25));
}
@Quelle("§ 23 Absatz 1 KStG")
@Override
public Euro körperschaftsteuerBetrag(Euro zuVersteuerndesEinkommen, Ganzzahl veranlagungszeitraum) {
if (zuVersteuerndesEinkommen.compareValue(FinDslNumber.ganzzahl("0")) <= 0) {
return Euro.von(FinDslNumber.ganzzahl("0"));
}
return Euro.von(
zuVersteuerndesEinkommen.mul(kstSatz(Ganzzahl.von(veranlagungszeitraum))).abrunden(FinDslNumber.Type.Euro));
}
@Quelle("§ 23 Absatz 2 KStG")
@Override
public Euro anwenden23Abs2(Euro körperschaftsteuer, Prozent anpassung) {
return Euro.von(körperschaftsteuer.add(körperschaftsteuer.mul(anpassung).abrunden(FinDslNumber.Type.Euro)));
}
@Quelle("§ 7 KStG")
@Override
public KörperschaftsteuerErgebnis berechneKörperschaftsteuer(KörperschaftsteuerFall fall) {
final FinDslNumber freibetrag24 = freibetragNach24(
Euro.von(fall.einkommenNach8Abs1()),
fall.freibetragsausschluss())
.withMoneyAnnotation(FinDslNumber.Type.Euro, "var \"freibetrag24\"");
final FinDslNumber zve = zuVersteuerndesEinkommen(
Euro.von(fall.einkommenNach8Abs1()),
Euro.von(freibetrag24),
Euro.von(fall.freibetragNach25()))
.withMoneyAnnotation(FinDslNumber.Type.Euro, "var \"zve\"");
final FinDslNumber satz = kstSatz(Ganzzahl.von(fall.veranlagungszeitraum()));
final FinDslNumber basis = körperschaftsteuerBetrag(Euro.von(zve), Ganzzahl.von(fall.veranlagungszeitraum()))
.withMoneyAnnotation(FinDslNumber.Type.Euro, "var \"basis\"");
final FinDslNumber endgültig = anwenden23Abs2(Euro.von(basis), Prozent.von(fall.anpassungNach23Abs2()))
.withMoneyAnnotation(FinDslNumber.Type.Euro, "var \"endgültig\"");
return new KörperschaftsteuerErgebnis(
Euro.von(fall.einkommenNach8Abs1()),
Euro.von(freibetrag24),
Euro.von(fall.freibetragNach25()),
Euro.von(zve),
Prozent.von(satz),
Euro.von(endgültig));
}
}import javax.annotation.processing.Generated;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertTrue;
import org.findsl.runtime.FinDslNumber;
import org.findsl.runtime.Euro;
import org.findsl.runtime.Prozent;
import org.findsl.runtime.Ganzzahl;
/**
* Generierte JUnit5-Akzeptanztests aus FinDSL-`prüfe` — NICHT
* manuell editieren. Soll-Verhalten = der FinDSL-Interpreter
* (`pruefe.ts runPruefeDecl`); pass/fail/abbruch bit-genau.
*
* # Akzeptanztests — Körperschaftsteuer (§§ 7, 23, 24 KStG)
*
* `prüfe`-Blöcke zur Datei `koerperschaftsteuer`. Alle Sollwerte sind von
* Hand aus dem Gesetzeswortlaut gerechnet (KStG 1977, Stand 4.2.2026):
*
* - § 23 Abs. 1 KStG: 2027 → 15 %, 2028 → 14 %, … , ab 2032 → 10 %.
* - § 24 KStG: 5.000 €, höchstens i.H.d. Einkommens; Ausschluss → 0.
* - § 7 Abs. 2 KStG: zvE = Einkommen − § 24 − § 25.
* - § 23 Abs. 1 × § 31 S. 2: KSt = (zvE × Satz).abrunden().
*
* Diese Datei enthält ausschließlich die `prüfe`-Blöcke.
*/
@Generated(value = "findsl.Generator")
public final class KstTest {
private final Kst kst = Factory.createKst();
@Nested
@DisplayName("§ 23 Absatz 1 KStG — gestaffelter Steuersatz")
class Pruefe_0 {
@Test
@DisplayName("Veranlagungszeiträume bis 2027 → 15 % (Nr. 1)")
void testfall_0() {
assertTrue(
kst.kstSatz(Ganzzahl.von(FinDslNumber.ganzzahl("2010"))).equalsValue(FinDslNumber.prozent("0.15")));
assertTrue(
kst.kstSatz(Ganzzahl.von(FinDslNumber.ganzzahl("2025"))).equalsValue(FinDslNumber.prozent("0.15")));
assertTrue(
kst.kstSatz(Ganzzahl.von(FinDslNumber.ganzzahl("2027"))).equalsValue(FinDslNumber.prozent("0.15")));
}
@Test
@DisplayName("VZ 2028 → 14 % (Nr. 2)")
void testfall_1() {
assertTrue(
kst.kstSatz(Ganzzahl.von(FinDslNumber.ganzzahl("2028"))).equalsValue(FinDslNumber.prozent("0.14")));
}
@Test
@DisplayName("VZ 2029 → 13 % (Nr. 3)")
void testfall_2() {
assertTrue(
kst.kstSatz(Ganzzahl.von(FinDslNumber.ganzzahl("2029"))).equalsValue(FinDslNumber.prozent("0.13")));
}
@Test
@DisplayName("VZ 2030 → 12 % (Nr. 4)")
void testfall_3() {
assertTrue(
kst.kstSatz(Ganzzahl.von(FinDslNumber.ganzzahl("2030"))).equalsValue(FinDslNumber.prozent("0.12")));
}
@Test
@DisplayName("VZ 2031 → 11 % (Nr. 5)")
void testfall_4() {
assertTrue(
kst.kstSatz(Ganzzahl.von(FinDslNumber.ganzzahl("2031"))).equalsValue(FinDslNumber.prozent("0.11")));
}
@Test
@DisplayName("Veranlagungszeiträume ab 2032 → 10 % (Nr. 6)")
void testfall_5() {
assertTrue(
kst.kstSatz(Ganzzahl.von(FinDslNumber.ganzzahl("2032"))).equalsValue(FinDslNumber.prozent("0.1")));
assertTrue(
kst.kstSatz(Ganzzahl.von(FinDslNumber.ganzzahl("2050"))).equalsValue(FinDslNumber.prozent("0.1")));
}
}
@Nested
@DisplayName("§ 24 KStG — Freibetrag")
class Pruefe_1 {
@Test
@DisplayName("voller Freibetrag 5.000 € bei hohem Einkommen, kein Ausschluss")
void testfall_0() {
assertTrue(
kst.freibetragNach24(Euro.von(FinDslNumber.ganzzahl("100000")), Kst.Freibetragsausschluss.Keiner)
.equalsValue(FinDslNumber.ganzzahl("5000")));
}
@Test
@DisplayName("höchstens in Höhe des Einkommens (Einkommen < 5.000 €)")
void testfall_1() {
assertTrue(
kst.freibetragNach24(Euro.von(FinDslNumber.ganzzahl("3000")), Kst.Freibetragsausschluss.Keiner)
.equalsValue(FinDslNumber.ganzzahl("3000")));
}
@Test
@DisplayName("Einkommen genau 5.000 € → 5.000 € Freibetrag")
void testfall_2() {
assertTrue(
kst.freibetragNach24(Euro.von(FinDslNumber.ganzzahl("5000")), Kst.Freibetragsausschluss.Keiner)
.equalsValue(FinDslNumber.ganzzahl("5000")));
}
@Test
@DisplayName("Einkommen 0 € → kein Freibetrag (darf keinen Verlust schaffen)")
void testfall_3() {
assertTrue(
kst.freibetragNach24(Euro.von(FinDslNumber.ganzzahl("0")), Kst.Freibetragsausschluss.Keiner)
.equalsValue(FinDslNumber.ganzzahl("0")));
}
@Test
@DisplayName("§ 24 Satz 2 Nr. 1 (Kapitalgesellschaft) → Freibetrag entfällt")
void testfall_4() {
assertTrue(
kst.freibetragNach24(
Euro.von(FinDslNumber.ganzzahl("100000")),
Kst.Freibetragsausschluss.Nr1KapitalLeistungen)
.equalsValue(FinDslNumber.ganzzahl("0")));
}
}
@Nested
@DisplayName("§ 7 Absatz 2 KStG — zu versteuerndes Einkommen")
class Pruefe_2 {
@Test
@DisplayName("Einkommen − § 24 − § 25")
void testfall_0() {
assertTrue(
kst.zuVersteuerndesEinkommen(
Euro.von(FinDslNumber.ganzzahl("100000")),
Euro.von(FinDslNumber.ganzzahl("5000")),
Euro.von(FinDslNumber.ganzzahl("0")))
.equalsValue(FinDslNumber.ganzzahl("95000")));
}
@Test
@DisplayName("mit § 25-Freibetrag")
void testfall_1() {
assertTrue(
kst.zuVersteuerndesEinkommen(
Euro.von(FinDslNumber.ganzzahl("100000")),
Euro.von(FinDslNumber.ganzzahl("5000")),
Euro.von(FinDslNumber.ganzzahl("10000")))
.equalsValue(FinDslNumber.ganzzahl("85000")));
}
}
@Nested
@DisplayName("§ 23 Abs. 1 × § 31 Satz 2 KStG — Steuerbetrag und Rundung")
class Pruefe_3 {
@Test
@DisplayName("95.000 € × 15 % (VZ 2025) = 14.250 €")
void testfall_0() {
assertTrue(
kst.körperschaftsteuerBetrag(
Euro.von(FinDslNumber.ganzzahl("95000")),
Ganzzahl.von(FinDslNumber.ganzzahl("2025")))
.equalsValue(FinDslNumber.ganzzahl("14250")));
}
@Test
@DisplayName("§ 31 S. 2: 12.345 € × 15 % = 1.851,75 € → abgerundet 1.851 €")
void testfall_1() {
assertTrue(
kst.körperschaftsteuerBetrag(
Euro.von(FinDslNumber.ganzzahl("12345")),
Ganzzahl.von(FinDslNumber.ganzzahl("2025")))
.equalsValue(FinDslNumber.ganzzahl("1851")));
}
@Test
@DisplayName("1.000.000 € × 14 % (VZ 2028) = 140.000 €")
void testfall_2() {
assertTrue(
kst.körperschaftsteuerBetrag(
Euro.von(FinDslNumber.ganzzahl("1000000")),
Ganzzahl.von(FinDslNumber.ganzzahl("2028")))
.equalsValue(FinDslNumber.ganzzahl("140000")));
}
@Test
@DisplayName("zu versteuerndes Einkommen 0 → keine Steuer")
void testfall_3() {
assertTrue(
kst.körperschaftsteuerBetrag(
Euro.von(FinDslNumber.ganzzahl("0")),
Ganzzahl.von(FinDslNumber.ganzzahl("2025")))
.equalsValue(FinDslNumber.ganzzahl("0")));
}
}
@Nested
@DisplayName("§ 23 Absatz 2 KStG — Anpassung")
class Pruefe_4 {
@Test
@DisplayName("Anpassungssatz 0 % → unverändert")
void testfall_0() {
assertTrue(
kst.anwenden23Abs2(Euro.von(FinDslNumber.ganzzahl("10000")), Prozent.von(FinDslNumber.prozent("0")))
.equalsValue(FinDslNumber.ganzzahl("10000")));
}
@Test
@DisplayName("Anpassung +10 % → 11.000 €")
void testfall_1() {
assertTrue(
kst.anwenden23Abs2(Euro.von(FinDslNumber.ganzzahl("10000")), Prozent.von(FinDslNumber.prozent("0.1")))
.equalsValue(FinDslNumber.ganzzahl("11000")));
}
}
@Nested
@DisplayName("Gesamtberechnung (§§ 24 → 7 → 23 → 31 KStG)")
class Pruefe_5 {
@Test
@DisplayName("Verein ohne Ausschluss, VZ 2025, Einkommen 100.000 €")
void testfall_0() {
final Kst.KörperschaftsteuerErgebnis e = kst.berechneKörperschaftsteuer(
new Kst.KörperschaftsteuerFall(
Euro.von(FinDslNumber.ganzzahl("100000")),
Ganzzahl.von(FinDslNumber.ganzzahl("2025")),
Kst.Freibetragsausschluss.Keiner,
Euro.von(FinDslNumber.ganzzahl("0")),
Prozent.von(FinDslNumber.prozent("0"))));
assertTrue(e.freibetragNach24().equalsValue(FinDslNumber.ganzzahl("5000")));
assertTrue(e.zuVersteuerndesEinkommen().equalsValue(FinDslNumber.ganzzahl("95000")));
assertTrue(e.steuersatz().equalsValue(FinDslNumber.prozent("0.15")));
assertTrue(e.körperschaftsteuer().equalsValue(FinDslNumber.ganzzahl("14250")));
}
@Test
@DisplayName("Kapitalgesellschaft (§ 24 Satz 2 Nr. 1), VZ 2028, 1.000.000 €")
void testfall_1() {
final Kst.KörperschaftsteuerErgebnis e = kst.berechneKörperschaftsteuer(
new Kst.KörperschaftsteuerFall(
Euro.von(FinDslNumber.ganzzahl("1000000")),
Ganzzahl.von(FinDslNumber.ganzzahl("2028")),
Kst.Freibetragsausschluss.Nr1KapitalLeistungen,
Euro.von(FinDslNumber.ganzzahl("0")),
Prozent.von(FinDslNumber.prozent("0"))));
assertTrue(e.freibetragNach24().equalsValue(FinDslNumber.ganzzahl("0")));
assertTrue(e.zuVersteuerndesEinkommen().equalsValue(FinDslNumber.ganzzahl("1000000")));
assertTrue(e.steuersatz().equalsValue(FinDslNumber.prozent("0.14")));
assertTrue(e.körperschaftsteuer().equalsValue(FinDslNumber.ganzzahl("140000")));
}
@Test
@DisplayName("kleines Einkommen 3.000 €, VZ 2032 → zvE 0, keine Steuer")
void testfall_2() {
final Kst.KörperschaftsteuerErgebnis e = kst.berechneKörperschaftsteuer(
new Kst.KörperschaftsteuerFall(
Euro.von(FinDslNumber.ganzzahl("3000")),
Ganzzahl.von(FinDslNumber.ganzzahl("2032")),
Kst.Freibetragsausschluss.Keiner,
Euro.von(FinDslNumber.ganzzahl("0")),
Prozent.von(FinDslNumber.prozent("0"))));
assertTrue(e.freibetragNach24().equalsValue(FinDslNumber.ganzzahl("3000")));
assertTrue(e.zuVersteuerndesEinkommen().equalsValue(FinDslNumber.ganzzahl("0")));
assertTrue(e.körperschaftsteuer().equalsValue(FinDslNumber.ganzzahl("0")));
}
@Test
@DisplayName("mit § 25-Freibetrag 10.000 €, VZ 2025, Einkommen 100.000 €")
void testfall_3() {
final Kst.KörperschaftsteuerErgebnis e = kst.berechneKörperschaftsteuer(
new Kst.KörperschaftsteuerFall(
Euro.von(FinDslNumber.ganzzahl("100000")),
Ganzzahl.von(FinDslNumber.ganzzahl("2025")),
Kst.Freibetragsausschluss.Keiner,
Euro.von(FinDslNumber.ganzzahl("10000")),
Prozent.von(FinDslNumber.prozent("0"))));
assertTrue(e.zuVersteuerndesEinkommen().equalsValue(FinDslNumber.ganzzahl("85000")));
assertTrue(e.körperschaftsteuer().equalsValue(FinDslNumber.ganzzahl("12750")));
}
}
}import javax.annotation.processing.Generated;
/**
* Komposition-Wurzel (generiert) — erzeugt die Modul-Instanzen dieses
* Pakets und verdrahtet ihre Abhängigkeiten per Konstruktor-Injektion.
* Geteilte, prozessweite Singletons. NICHT manuell editieren.
*/
@Generated(value = "findsl.Generator")
public final class Factory {
private Factory() {}
private static final Kst KST = new KstImpl();
public static Kst createKst() {
return KST;
}
}import { FinDslNumber, FinDslRuntimeError, Euro, Prozent, Ganzzahl } from './runtime/index.js';
/**
* Generiert aus FinDSL — NICHT manuell editieren.
* Semantik-Orakel: der FinDSL-Interpreter (bit-genau).
*
* # Körperschaftsteuer — Tarif, Freibetrag und Bemessungsgrundlage
*
* Bildet die Festsetzung der Körperschaftsteuer nach dem
* **Körperschaftsteuergesetz (KStG 1977, Stand: zuletzt geändert durch
* Art. 30 G v. 4.2.2026 I Nr. 33)** ab — die drei normativen Kerne:
*
* - **§ 7 KStG** — Grundlagen der Besteuerung: die KSt bemisst sich nach
* dem zu versteuernden Einkommen; dieses ist das Einkommen i.S.d.
* § 8 Abs. 1 KStG, vermindert um die Freibeträge der §§ 24 und 25 KStG
* (Abs. 2); die KSt ist eine Jahressteuer (Abs. 3).
* - **§ 23 KStG** — Steuersatz: nach Veranlagungszeitraum gestaffelter
* Prozentsatz auf das zu versteuernde Einkommen (Abs. 1); optionale
* Anpassung über § 51 Abs. 3 EStG (Abs. 2).
* - **§ 24 KStG** — Freibetrag von 5.000 Euro, höchstens in Höhe des
* Einkommens (Satz 1), mit den drei Ausschlusstatbeständen des Satz 2.
*
* Anschließende **§ 31 Satz 2 KStG**-Rundung: die festgesetzten
* KSt-Beträge sind zugunsten des Steuerpflichtigen auf volle Euro zu
* runden — Abrundung (zu Gunsten = niedrigere Steuer).
*
* Nicht modelliert (außerhalb des Auftragsumfangs §§ 7/23/24): die
* Ermittlung des Einkommens i.S.d. § 8 Abs. 1 KStG selbst und der
* Freibetrag nach § 25 KStG — beide gehen als geprüfte Eingaben ein,
* damit die § 7 Abs. 2-Formel rechnerisch vollständig bleibt.
*/
/**
* Ausschlusstatbestände des § 24 Satz 2 KStG. Liegt einer davon vor,
* entfällt der Freibetrag nach § 24 Satz 1 KStG vollständig.
*
* @param Keiner Kein Ausschluss — der Freibetrag von 5.000 €
* (§ 24 Satz 1 KStG) ist anwendbar.
* @param Nr1KapitalLeistungen § 24 Satz 2 Nr. 1 KStG: Körperschaften/
* Personenvereinigungen, deren Leistungen beim
* Empfänger zu Einnahmen i.S.d. § 20 Abs. 1
* Nr. 1 oder 2 EStG gehören (typische
* Kapitalgesellschaften mit Ausschüttungen).
* @param Nr2VereinNach25 § 24 Satz 2 Nr. 2 KStG: Vereine i.S.d.
* § 25 KStG (land-/forstwirtschaftliche
* Erwerbs- und Wirtschaftsgenossenschaften
* sowie Vereine).
* @param Nr3Investmentfonds § 24 Satz 2 Nr. 3 KStG: Investmentfonds
* (§ 1 InvStG) und Spezial-Investmentfonds
* (§ 26 InvStG), deren Leistungen beim
* Empfänger zu Einnahmen i.S.d. § 20 Abs. 1
* Nr. 3 oder 3a EStG gehören.
* @Quelle § 24 Satz 2 KStG
*/
export enum Freibetragsausschluss {
Keiner,
Nr1KapitalLeistungen,
Nr2VereinNach25,
Nr3Investmentfonds,
}
/**
* Eingaben für die Körperschaftsteuer-Festsetzung eines Steuerfalls.
*
* @param einkommenNach8Abs1 Einkommen i.S.d. § 8 Abs. 1 KStG (nach
* EStG/KStG ermittelt) — Bemessungsbasis VOR
* Abzug der Freibeträge §§ 24, 25 KStG.
* @param veranlagungszeitraum Kalenderjahr des Veranlagungszeitraums
* (§ 7 Abs. 3 KStG); bestimmt den Steuersatz
* nach § 23 Abs. 1 KStG.
* @param freibetragsausschluss Ausschlusstatbestand nach § 24 Satz 2 KStG
* (siehe `Freibetragsausschluss`).
* @param freibetragNach25 Freibetrag nach § 25 KStG (extern ermittelt;
* geht nach § 7 Abs. 2 KStG mindernd ein).
* 0, wenn nicht einschlägig.
* @param anpassungNach23Abs2 Anpassungssatz nach § 23 Abs. 2 KStG i.V.m.
* § 51 Abs. 3 EStG (Herab-/Heraufsetzung). In
* aller Regel 0 % (keine Änderung).
* @Quelle § 7 KStG
*/
export class KörperschaftsteuerFall {
constructor(
readonly einkommenNach8Abs1: Euro,
readonly veranlagungszeitraum: Ganzzahl,
readonly freibetragsausschluss: Freibetragsausschluss,
readonly freibetragNach25: Euro,
readonly anpassungNach23Abs2: Prozent,
) {}
}
/**
* Vollständige, prüfbare Berechnungsdokumentation eines
* Körperschaftsteuerfalls — jede Zwischengröße ist einzeln ausgewiesen,
* damit die Festsetzung Schritt für Schritt gegen das Gesetz auditierbar
* ist.
*
* @param einkommen Einkommen i.S.d. § 8 Abs. 1 KStG
* (Eingabe, unverändert übernommen).
* @param freibetragNach24 Tatsächlich abgezogener Freibetrag
* nach § 24 KStG (0, falls Satz 2 greift).
* @param freibetragNach25 Abgezogener Freibetrag nach § 25 KStG
* (Eingabe).
* @param zuVersteuerndesEinkommen § 7 Abs. 1, 2 KStG: Bemessungsgrundlage
* = Einkommen − § 24 − § 25.
* @param steuersatz § 23 Abs. 1 KStG: für den
* Veranlagungszeitraum geltender Satz.
* @param körperschaftsteuer Festgesetzte Körperschaftsteuer nach
* § 23 KStG, auf volle Euro abgerundet
* (§ 31 Satz 2 KStG), inkl. § 23 Abs. 2.
* @Quelle § 7 KStG
*/
export class KörperschaftsteuerErgebnis {
constructor(
readonly einkommen: Euro,
readonly freibetragNach24: Euro,
readonly freibetragNach25: Euro,
readonly zuVersteuerndesEinkommen: Euro,
readonly steuersatz: Prozent,
readonly körperschaftsteuer: Euro,
) {}
}
/**
* Steuersatz für Veranlagungszeiträume **bis 2027**: 15 % des zu
* versteuernden Einkommens (§ 23 Abs. 1 Nr. 1 KStG).
* @Quelle § 23 Absatz 1 Nummer 1 KStG
*/
export const KST_SATZ_BIS_2027: Prozent = Prozent.von(FinDslNumber.prozent("0.15"));
/**
* Steuersatz für den Veranlagungszeitraum **2028**: 14 % (§ 23 Abs. 1 Nr. 2 KStG).
* @Quelle § 23 Absatz 1 Nummer 2 KStG
*/
export const KST_SATZ_2028: Prozent = Prozent.von(FinDslNumber.prozent("0.14"));
/**
* Steuersatz für den Veranlagungszeitraum **2029**: 13 % (§ 23 Abs. 1 Nr. 3 KStG).
* @Quelle § 23 Absatz 1 Nummer 3 KStG
*/
export const KST_SATZ_2029: Prozent = Prozent.von(FinDslNumber.prozent("0.13"));
/**
* Steuersatz für den Veranlagungszeitraum **2030**: 12 % (§ 23 Abs. 1 Nr. 4 KStG).
* @Quelle § 23 Absatz 1 Nummer 4 KStG
*/
export const KST_SATZ_2030: Prozent = Prozent.von(FinDslNumber.prozent("0.12"));
/**
* Steuersatz für den Veranlagungszeitraum **2031**: 11 % (§ 23 Abs. 1 Nr. 5 KStG).
* @Quelle § 23 Absatz 1 Nummer 5 KStG
*/
export const KST_SATZ_2031: Prozent = Prozent.von(FinDslNumber.prozent("0.11"));
/**
* Steuersatz für Veranlagungszeiträume **ab 2032**: 10 % (§ 23 Abs. 1 Nr. 6 KStG).
* @Quelle § 23 Absatz 1 Nummer 6 KStG
*/
export const KST_SATZ_AB_2032: Prozent = Prozent.von(FinDslNumber.prozent("0.1"));
/**
* Freibetrag nach § 24 Satz 1 KStG: 5.000 Euro, höchstens jedoch in Höhe
* des Einkommens. Greift nur, wenn kein Ausschlusstatbestand des § 24
* Satz 2 KStG vorliegt.
* @Quelle § 24 Satz 1 KStG
*/
export const FREIBETRAG_24: Euro = Euro.von(FinDslNumber.ganzzahl("5000").withMoneyAnnotation("Euro", "Konstante \"FREIBETRAG_24\""));
/**
* Liefert den Körperschaftsteuersatz für einen Veranlagungszeitraum nach
* der Staffel des § 23 Abs. 1 KStG. „bis 2027" (Nr. 1) ist einschließlich
* 2027; „ab 2032" (Nr. 6) ist einschließlich 2032 (durch `sonst`
* abgedeckt, da alle früheren Jahre vorher erfasst sind).
*
* @param veranlagungszeitraum Kalenderjahr des Veranlagungszeitraums.
* @returns Der nach § 23 Abs. 1 KStG für diesen VZ geltende Satz.
* @Quelle § 23 Absatz 1 KStG
*/
export function kstSatz(veranlagungszeitraum: Ganzzahl): Prozent {
if (veranlagungszeitraum.compareValue(FinDslNumber.ganzzahl("2027")) <= 0) {
return Prozent.von(KST_SATZ_BIS_2027);
}
if (veranlagungszeitraum.equalsValue(FinDslNumber.ganzzahl("2028"))) {
return Prozent.von(KST_SATZ_2028);
}
if (veranlagungszeitraum.equalsValue(FinDslNumber.ganzzahl("2029"))) {
return Prozent.von(KST_SATZ_2029);
}
if (veranlagungszeitraum.equalsValue(FinDslNumber.ganzzahl("2030"))) {
return Prozent.von(KST_SATZ_2030);
}
if (veranlagungszeitraum.equalsValue(FinDslNumber.ganzzahl("2031"))) {
return Prozent.von(KST_SATZ_2031);
}
return Prozent.von(KST_SATZ_AB_2032);
}
/**
* Freibetrag nach § 24 KStG unter Berücksichtigung des Ausschlusses nach
* § 24 Satz 2 KStG: liegt ein Ausschlusstatbestand (Nr. 1–3) vor,
* entfällt der Freibetrag vollständig; andernfalls der nach Satz 1 der
* Höhe nach begrenzte Betrag.
*
* @param einkommen Einkommen i.S.d. § 8 Abs. 1 KStG.
* @param ausschluss Ausschlusstatbestand nach § 24 Satz 2 KStG.
* @returns Abzuziehender Freibetrag nach § 24 KStG (0 bei Ausschluss).
* @Quelle § 24 KStG
*/
export function freibetragNach24(einkommen: Euro, ausschluss: Freibetragsausschluss): Euro {
if (ausschluss === Freibetragsausschluss.Keiner) {
return Euro.von(einkommen.mindestens(FinDslNumber.ganzzahl("0")).hoechstens(FREIBETRAG_24));
}
if ((ausschluss === Freibetragsausschluss.Nr1KapitalLeistungen) || (ausschluss === Freibetragsausschluss.Nr2VereinNach25) || (ausschluss === Freibetragsausschluss.Nr3Investmentfonds)) {
return Euro.von(FinDslNumber.ganzzahl("0"));
}
throw new FinDslRuntimeError("Kein falls-Arm passte (wähle, Codegen).");
}
/**
* Zu versteuerndes Einkommen nach § 7 Abs. 2 KStG: das Einkommen i.S.d.
* § 8 Abs. 1 KStG, vermindert um die Freibeträge der §§ 24 und 25 KStG.
* Kann negativ werden (Verlust); die steuerliche Auswirkung eines
* negativen Betrags regelt die Steuerfestsetzung (`körperschaftsteuer`),
* nicht diese Größe.
*
* @param einkommen Einkommen i.S.d. § 8 Abs. 1 KStG.
* @param freibetragNach24 Freibetrag nach § 24 KStG.
* @param freibetragNach25 Freibetrag nach § 25 KStG.
* @returns Zu versteuerndes Einkommen (§ 7 Abs. 1 KStG: Bemessung).
* @Quelle § 7 Absatz 2 KStG
*/
export function zuVersteuerndesEinkommen(einkommen: Euro, freibetragNach24: Euro, freibetragNach25: Euro): Euro {
return Euro.von(einkommen.sub(freibetragNach24).sub(freibetragNach25));
}
/**
* Körperschaftsteuerbetrag nach § 23 Abs. 1 KStG: Steuersatz des
* Veranlagungszeitraums multipliziert mit dem zu versteuernden Einkommen,
* anschließend nach § 31 Satz 2 KStG **zu Gunsten des Steuerpflichtigen
* auf volle Euro abgerundet** (niedrigere Steuer = zu Gunsten). Bei einem
* zu versteuernden Einkommen von 0 oder weniger beträgt die Steuer 0
* (keine negative Steuer; Verlustabzug regelt § 8 KStG i.V.m.
* § 10d EStG, hier nicht modelliert).
*
* @param zuVersteuerndesEinkommen § 7 KStG: Bemessungsgrundlage.
* @param veranlagungszeitraum Kalenderjahr (§ 23 Abs. 1 KStG).
* @returns Körperschaftsteuer nach § 23 Abs. 1 KStG, auf volle Euro
* abgerundet (§ 31 Satz 2 KStG).
* @Quelle § 23 Absatz 1 KStG
*/
export function körperschaftsteuerBetrag(zuVersteuerndesEinkommen: Euro, veranlagungszeitraum: Ganzzahl): Euro {
if (zuVersteuerndesEinkommen.compareValue(FinDslNumber.ganzzahl("0")) <= 0) {
return Euro.von(FinDslNumber.ganzzahl("0"));
}
return Euro.von(zuVersteuerndesEinkommen.mul(kstSatz(Ganzzahl.von(veranlagungszeitraum))).abrunden("Euro"));
}
/**
* Anpassung der Körperschaftsteuer nach § 23 Abs. 2 KStG: wird die
* Einkommensteuer aufgrund der Ermächtigung des § 51 Abs. 3 EStG herab-
* oder heraufgesetzt, ermäßigt oder erhöht sich die Körperschaftsteuer
* entsprechend (proportional). Der Anpassungsbetrag wird nach der
* Wertung des § 31 Satz 2 KStG auf volle Euro abgerundet. In aller Regel
* ist der Anpassungssatz 0 % (keine Verordnung in Kraft → unverändert).
*
* @param körperschaftsteuer Steuer nach § 23 Abs. 1 KStG (abgerundet).
* @param anpassung Anpassungssatz nach § 51 Abs. 3 EStG.
* @returns Angepasste Körperschaftsteuer (§ 23 Abs. 2 KStG).
* @Quelle § 23 Absatz 2 KStG
*/
export function anwenden23Abs2(körperschaftsteuer: Euro, anpassung: Prozent): Euro {
return Euro.von(körperschaftsteuer.add(körperschaftsteuer.mul(anpassung).abrunden("Euro")));
}
/**
* Vollständige Festsetzung der Körperschaftsteuer eines Steuerfalls in
* der gesetzlichen Reihenfolge: § 24 KStG (Freibetrag) → § 7 Abs. 2 KStG
* (zu versteuerndes Einkommen) → § 23 Abs. 1 KStG (Steuersatz × zvE) →
* § 31 Satz 2 KStG (Abrundung) → § 23 Abs. 2 KStG (Anpassung). Liefert
* alle Zwischengrößen für die Audit-Vorlage.
*
* @param fall Eingaben des Steuerfalls (siehe `KörperschaftsteuerFall`).
* @returns Vollständig dokumentiertes Berechnungsergebnis.
* @Quelle § 7 KStG
*/
export function berechneKörperschaftsteuer(fall: KörperschaftsteuerFall): KörperschaftsteuerErgebnis {
const freibetrag24: FinDslNumber = freibetragNach24(Euro.von(fall.einkommenNach8Abs1), fall.freibetragsausschluss).withMoneyAnnotation("Euro", "var \"freibetrag24\"");
const zve: FinDslNumber = zuVersteuerndesEinkommen(Euro.von(fall.einkommenNach8Abs1), Euro.von(freibetrag24), Euro.von(fall.freibetragNach25)).withMoneyAnnotation("Euro", "var \"zve\"");
const satz: FinDslNumber = kstSatz(Ganzzahl.von(fall.veranlagungszeitraum));
const basis: FinDslNumber = körperschaftsteuerBetrag(Euro.von(zve), Ganzzahl.von(fall.veranlagungszeitraum)).withMoneyAnnotation("Euro", "var \"basis\"");
const endgültig: FinDslNumber = anwenden23Abs2(Euro.von(basis), Prozent.von(fall.anpassungNach23Abs2)).withMoneyAnnotation("Euro", "var \"endgültig\"");
return new KörperschaftsteuerErgebnis(Euro.von(fall.einkommenNach8Abs1), Euro.von(freibetrag24), Euro.von(fall.freibetragNach25), Euro.von(zve), Prozent.von(satz), Euro.von(endgültig));
}import { describe, it, expect } from 'vitest';
import { FinDslNumber, Euro, Prozent, Ganzzahl } from './runtime/index.js';
import * as Kst from './Kst.js';
/**
* Generiert aus FinDSL — NICHT manuell editieren.
* Semantik-Orakel: der FinDSL-Interpreter (bit-genau).
*
* # Akzeptanztests — Körperschaftsteuer (§§ 7, 23, 24 KStG)
*
* `prüfe`-Blöcke zur Datei `koerperschaftsteuer`. Alle Sollwerte sind von
* Hand aus dem Gesetzeswortlaut gerechnet (KStG 1977, Stand 4.2.2026):
*
* - § 23 Abs. 1 KStG: 2027 → 15 %, 2028 → 14 %, … , ab 2032 → 10 %.
* - § 24 KStG: 5.000 €, höchstens i.H.d. Einkommens; Ausschluss → 0.
* - § 7 Abs. 2 KStG: zvE = Einkommen − § 24 − § 25.
* - § 23 Abs. 1 × § 31 S. 2: KSt = (zvE × Satz).abrunden().
*
* Diese Datei enthält ausschließlich die `prüfe`-Blöcke.
*/
describe("§ 23 Absatz 1 KStG — gestaffelter Steuersatz", () => {
it("Veranlagungszeiträume bis 2027 → 15 % (Nr. 1)", () => {
expect(Kst.kstSatz(Ganzzahl.von(FinDslNumber.ganzzahl("2010"))).equalsValue(FinDslNumber.prozent("0.15"))).toBe(true);
expect(Kst.kstSatz(Ganzzahl.von(FinDslNumber.ganzzahl("2025"))).equalsValue(FinDslNumber.prozent("0.15"))).toBe(true);
expect(Kst.kstSatz(Ganzzahl.von(FinDslNumber.ganzzahl("2027"))).equalsValue(FinDslNumber.prozent("0.15"))).toBe(true);
});
it("VZ 2028 → 14 % (Nr. 2)", () => {
expect(Kst.kstSatz(Ganzzahl.von(FinDslNumber.ganzzahl("2028"))).equalsValue(FinDslNumber.prozent("0.14"))).toBe(true);
});
it("VZ 2029 → 13 % (Nr. 3)", () => {
expect(Kst.kstSatz(Ganzzahl.von(FinDslNumber.ganzzahl("2029"))).equalsValue(FinDslNumber.prozent("0.13"))).toBe(true);
});
it("VZ 2030 → 12 % (Nr. 4)", () => {
expect(Kst.kstSatz(Ganzzahl.von(FinDslNumber.ganzzahl("2030"))).equalsValue(FinDslNumber.prozent("0.12"))).toBe(true);
});
it("VZ 2031 → 11 % (Nr. 5)", () => {
expect(Kst.kstSatz(Ganzzahl.von(FinDslNumber.ganzzahl("2031"))).equalsValue(FinDslNumber.prozent("0.11"))).toBe(true);
});
it("Veranlagungszeiträume ab 2032 → 10 % (Nr. 6)", () => {
expect(Kst.kstSatz(Ganzzahl.von(FinDslNumber.ganzzahl("2032"))).equalsValue(FinDslNumber.prozent("0.1"))).toBe(true);
expect(Kst.kstSatz(Ganzzahl.von(FinDslNumber.ganzzahl("2050"))).equalsValue(FinDslNumber.prozent("0.1"))).toBe(true);
});
});
describe("§ 24 KStG — Freibetrag", () => {
it("voller Freibetrag 5.000 € bei hohem Einkommen, kein Ausschluss", () => {
expect(Kst.freibetragNach24(Euro.von(FinDslNumber.ganzzahl("100000")), Kst.Freibetragsausschluss.Keiner).equalsValue(FinDslNumber.ganzzahl("5000"))).toBe(true);
});
it("höchstens in Höhe des Einkommens (Einkommen < 5.000 €)", () => {
expect(Kst.freibetragNach24(Euro.von(FinDslNumber.ganzzahl("3000")), Kst.Freibetragsausschluss.Keiner).equalsValue(FinDslNumber.ganzzahl("3000"))).toBe(true);
});
it("Einkommen genau 5.000 € → 5.000 € Freibetrag", () => {
expect(Kst.freibetragNach24(Euro.von(FinDslNumber.ganzzahl("5000")), Kst.Freibetragsausschluss.Keiner).equalsValue(FinDslNumber.ganzzahl("5000"))).toBe(true);
});
it("Einkommen 0 € → kein Freibetrag (darf keinen Verlust schaffen)", () => {
expect(Kst.freibetragNach24(Euro.von(FinDslNumber.ganzzahl("0")), Kst.Freibetragsausschluss.Keiner).equalsValue(FinDslNumber.ganzzahl("0"))).toBe(true);
});
it("§ 24 Satz 2 Nr. 1 (Kapitalgesellschaft) → Freibetrag entfällt", () => {
expect(Kst.freibetragNach24(Euro.von(FinDslNumber.ganzzahl("100000")), Kst.Freibetragsausschluss.Nr1KapitalLeistungen).equalsValue(FinDslNumber.ganzzahl("0"))).toBe(true);
});
});
describe("§ 7 Absatz 2 KStG — zu versteuerndes Einkommen", () => {
it("Einkommen − § 24 − § 25", () => {
expect(Kst.zuVersteuerndesEinkommen(Euro.von(FinDslNumber.ganzzahl("100000")), Euro.von(FinDslNumber.ganzzahl("5000")), Euro.von(FinDslNumber.ganzzahl("0"))).equalsValue(FinDslNumber.ganzzahl("95000"))).toBe(true);
});
it("mit § 25-Freibetrag", () => {
expect(Kst.zuVersteuerndesEinkommen(Euro.von(FinDslNumber.ganzzahl("100000")), Euro.von(FinDslNumber.ganzzahl("5000")), Euro.von(FinDslNumber.ganzzahl("10000"))).equalsValue(FinDslNumber.ganzzahl("85000"))).toBe(true);
});
});
describe("§ 23 Abs. 1 × § 31 Satz 2 KStG — Steuerbetrag und Rundung", () => {
it("95.000 € × 15 % (VZ 2025) = 14.250 €", () => {
expect(Kst.körperschaftsteuerBetrag(Euro.von(FinDslNumber.ganzzahl("95000")), Ganzzahl.von(FinDslNumber.ganzzahl("2025"))).equalsValue(FinDslNumber.ganzzahl("14250"))).toBe(true);
});
it("§ 31 S. 2: 12.345 € × 15 % = 1.851,75 € → abgerundet 1.851 €", () => {
expect(Kst.körperschaftsteuerBetrag(Euro.von(FinDslNumber.ganzzahl("12345")), Ganzzahl.von(FinDslNumber.ganzzahl("2025"))).equalsValue(FinDslNumber.ganzzahl("1851"))).toBe(true);
});
it("1.000.000 € × 14 % (VZ 2028) = 140.000 €", () => {
expect(Kst.körperschaftsteuerBetrag(Euro.von(FinDslNumber.ganzzahl("1000000")), Ganzzahl.von(FinDslNumber.ganzzahl("2028"))).equalsValue(FinDslNumber.ganzzahl("140000"))).toBe(true);
});
it("zu versteuerndes Einkommen 0 → keine Steuer", () => {
expect(Kst.körperschaftsteuerBetrag(Euro.von(FinDslNumber.ganzzahl("0")), Ganzzahl.von(FinDslNumber.ganzzahl("2025"))).equalsValue(FinDslNumber.ganzzahl("0"))).toBe(true);
});
});
describe("§ 23 Absatz 2 KStG — Anpassung", () => {
it("Anpassungssatz 0 % → unverändert", () => {
expect(Kst.anwenden23Abs2(Euro.von(FinDslNumber.ganzzahl("10000")), Prozent.von(FinDslNumber.prozent("0"))).equalsValue(FinDslNumber.ganzzahl("10000"))).toBe(true);
});
it("Anpassung +10 % → 11.000 €", () => {
expect(Kst.anwenden23Abs2(Euro.von(FinDslNumber.ganzzahl("10000")), Prozent.von(FinDslNumber.prozent("0.1"))).equalsValue(FinDslNumber.ganzzahl("11000"))).toBe(true);
});
});
describe("Gesamtberechnung (§§ 24 → 7 → 23 → 31 KStG)", () => {
it("Verein ohne Ausschluss, VZ 2025, Einkommen 100.000 €", () => {
const e: Kst.KörperschaftsteuerErgebnis = Kst.berechneKörperschaftsteuer(new Kst.KörperschaftsteuerFall(Euro.von(FinDslNumber.ganzzahl("100000")), Ganzzahl.von(FinDslNumber.ganzzahl("2025")), Kst.Freibetragsausschluss.Keiner, Euro.von(FinDslNumber.ganzzahl("0")), Prozent.von(FinDslNumber.prozent("0"))));
expect(e.freibetragNach24.equalsValue(FinDslNumber.ganzzahl("5000"))).toBe(true);
expect(e.zuVersteuerndesEinkommen.equalsValue(FinDslNumber.ganzzahl("95000"))).toBe(true);
expect(e.steuersatz.equalsValue(FinDslNumber.prozent("0.15"))).toBe(true);
expect(e.körperschaftsteuer.equalsValue(FinDslNumber.ganzzahl("14250"))).toBe(true);
});
it("Kapitalgesellschaft (§ 24 Satz 2 Nr. 1), VZ 2028, 1.000.000 €", () => {
const e: Kst.KörperschaftsteuerErgebnis = Kst.berechneKörperschaftsteuer(new Kst.KörperschaftsteuerFall(Euro.von(FinDslNumber.ganzzahl("1000000")), Ganzzahl.von(FinDslNumber.ganzzahl("2028")), Kst.Freibetragsausschluss.Nr1KapitalLeistungen, Euro.von(FinDslNumber.ganzzahl("0")), Prozent.von(FinDslNumber.prozent("0"))));
expect(e.freibetragNach24.equalsValue(FinDslNumber.ganzzahl("0"))).toBe(true);
expect(e.zuVersteuerndesEinkommen.equalsValue(FinDslNumber.ganzzahl("1000000"))).toBe(true);
expect(e.steuersatz.equalsValue(FinDslNumber.prozent("0.14"))).toBe(true);
expect(e.körperschaftsteuer.equalsValue(FinDslNumber.ganzzahl("140000"))).toBe(true);
});
it("kleines Einkommen 3.000 €, VZ 2032 → zvE 0, keine Steuer", () => {
const e: Kst.KörperschaftsteuerErgebnis = Kst.berechneKörperschaftsteuer(new Kst.KörperschaftsteuerFall(Euro.von(FinDslNumber.ganzzahl("3000")), Ganzzahl.von(FinDslNumber.ganzzahl("2032")), Kst.Freibetragsausschluss.Keiner, Euro.von(FinDslNumber.ganzzahl("0")), Prozent.von(FinDslNumber.prozent("0"))));
expect(e.freibetragNach24.equalsValue(FinDslNumber.ganzzahl("3000"))).toBe(true);
expect(e.zuVersteuerndesEinkommen.equalsValue(FinDslNumber.ganzzahl("0"))).toBe(true);
expect(e.körperschaftsteuer.equalsValue(FinDslNumber.ganzzahl("0"))).toBe(true);
});
it("mit § 25-Freibetrag 10.000 €, VZ 2025, Einkommen 100.000 €", () => {
const e: Kst.KörperschaftsteuerErgebnis = Kst.berechneKörperschaftsteuer(new Kst.KörperschaftsteuerFall(Euro.von(FinDslNumber.ganzzahl("100000")), Ganzzahl.von(FinDslNumber.ganzzahl("2025")), Kst.Freibetragsausschluss.Keiner, Euro.von(FinDslNumber.ganzzahl("10000")), Prozent.von(FinDslNumber.prozent("0"))));
expect(e.zuVersteuerndesEinkommen.equalsValue(FinDslNumber.ganzzahl("85000"))).toBe(true);
expect(e.körperschaftsteuer.equalsValue(FinDslNumber.ganzzahl("12750"))).toBe(true);
});
});import { FinDslNumber, FinDslRuntimeError, Euro, Prozent, Ganzzahl } from './runtime/index.js';
export var Freibetragsausschluss = /*#__PURE__*/ function(Freibetragsausschluss) {
Freibetragsausschluss[Freibetragsausschluss["Keiner"] = 0] = "Keiner";
Freibetragsausschluss[Freibetragsausschluss["Nr1KapitalLeistungen"] = 1] = "Nr1KapitalLeistungen";
Freibetragsausschluss[Freibetragsausschluss["Nr2VereinNach25"] = 2] = "Nr2VereinNach25";
Freibetragsausschluss[Freibetragsausschluss["Nr3Investmentfonds"] = 3] = "Nr3Investmentfonds";
return Freibetragsausschluss;
}({});
export class KörperschaftsteuerFall {
einkommenNach8Abs1;
veranlagungszeitraum;
freibetragsausschluss;
freibetragNach25;
anpassungNach23Abs2;
constructor(einkommenNach8Abs1, veranlagungszeitraum, freibetragsausschluss, freibetragNach25, anpassungNach23Abs2){
this.einkommenNach8Abs1 = einkommenNach8Abs1;
this.veranlagungszeitraum = veranlagungszeitraum;
this.freibetragsausschluss = freibetragsausschluss;
this.freibetragNach25 = freibetragNach25;
this.anpassungNach23Abs2 = anpassungNach23Abs2;
}
}
export class KörperschaftsteuerErgebnis {
einkommen;
freibetragNach24;
freibetragNach25;
zuVersteuerndesEinkommen;
steuersatz;
körperschaftsteuer;
constructor(einkommen, freibetragNach24, freibetragNach25, zuVersteuerndesEinkommen, steuersatz, körperschaftsteuer){
this.einkommen = einkommen;
this.freibetragNach24 = freibetragNach24;
this.freibetragNach25 = freibetragNach25;
this.zuVersteuerndesEinkommen = zuVersteuerndesEinkommen;
this.steuersatz = steuersatz;
this.körperschaftsteuer = körperschaftsteuer;
}
}
export const KST_SATZ_BIS_2027 = Prozent.von(FinDslNumber.prozent("0.15"));
export const KST_SATZ_2028 = Prozent.von(FinDslNumber.prozent("0.14"));
export const KST_SATZ_2029 = Prozent.von(FinDslNumber.prozent("0.13"));
export const KST_SATZ_2030 = Prozent.von(FinDslNumber.prozent("0.12"));
export const KST_SATZ_2031 = Prozent.von(FinDslNumber.prozent("0.11"));
export const KST_SATZ_AB_2032 = Prozent.von(FinDslNumber.prozent("0.1"));
export const FREIBETRAG_24 = Euro.von(FinDslNumber.ganzzahl("5000").withMoneyAnnotation("Euro", "Konstante \"FREIBETRAG_24\""));
export function kstSatz(veranlagungszeitraum) {
if (veranlagungszeitraum.compareValue(FinDslNumber.ganzzahl("2027")) <= 0) {
return Prozent.von(KST_SATZ_BIS_2027);
}
if (veranlagungszeitraum.equalsValue(FinDslNumber.ganzzahl("2028"))) {
return Prozent.von(KST_SATZ_2028);
}
if (veranlagungszeitraum.equalsValue(FinDslNumber.ganzzahl("2029"))) {
return Prozent.von(KST_SATZ_2029);
}
if (veranlagungszeitraum.equalsValue(FinDslNumber.ganzzahl("2030"))) {
return Prozent.von(KST_SATZ_2030);
}
if (veranlagungszeitraum.equalsValue(FinDslNumber.ganzzahl("2031"))) {
return Prozent.von(KST_SATZ_2031);
}
return Prozent.von(KST_SATZ_AB_2032);
}
export function freibetragNach24(einkommen, ausschluss) {
if (ausschluss === 0) {
return Euro.von(einkommen.mindestens(FinDslNumber.ganzzahl("0")).hoechstens(FREIBETRAG_24));
}
if (ausschluss === 1 || ausschluss === 2 || ausschluss === 3) {
return Euro.von(FinDslNumber.ganzzahl("0"));
}
throw new FinDslRuntimeError("Kein falls-Arm passte (wähle, Codegen).");
}
export function zuVersteuerndesEinkommen(einkommen, freibetragNach24, freibetragNach25) {
return Euro.von(einkommen.sub(freibetragNach24).sub(freibetragNach25));
}
export function körperschaftsteuerBetrag(zuVersteuerndesEinkommen, veranlagungszeitraum) {
if (zuVersteuerndesEinkommen.compareValue(FinDslNumber.ganzzahl("0")) <= 0) {
return Euro.von(FinDslNumber.ganzzahl("0"));
}
return Euro.von(zuVersteuerndesEinkommen.mul(kstSatz(Ganzzahl.von(veranlagungszeitraum))).abrunden("Euro"));
}
export function anwenden23Abs2(körperschaftsteuer, anpassung) {
return Euro.von(körperschaftsteuer.add(körperschaftsteuer.mul(anpassung).abrunden("Euro")));
}
export function berechneKörperschaftsteuer(fall) {
const freibetrag24 = freibetragNach24(Euro.von(fall.einkommenNach8Abs1), fall.freibetragsausschluss).withMoneyAnnotation("Euro", "var \"freibetrag24\"");
const zve = zuVersteuerndesEinkommen(Euro.von(fall.einkommenNach8Abs1), Euro.von(freibetrag24), Euro.von(fall.freibetragNach25)).withMoneyAnnotation("Euro", "var \"zve\"");
const satz = kstSatz(Ganzzahl.von(fall.veranlagungszeitraum));
const basis = körperschaftsteuerBetrag(Euro.von(zve), Ganzzahl.von(fall.veranlagungszeitraum)).withMoneyAnnotation("Euro", "var \"basis\"");
const endgültig = anwenden23Abs2(Euro.von(basis), Prozent.von(fall.anpassungNach23Abs2)).withMoneyAnnotation("Euro", "var \"endgültig\"");
return new KörperschaftsteuerErgebnis(Euro.von(fall.einkommenNach8Abs1), Euro.von(freibetrag24), Euro.von(fall.freibetragNach25), Euro.von(zve), Prozent.von(satz), Euro.von(endgültig));
}import { describe, it, expect } from 'vitest';
import { FinDslNumber, Euro, Prozent, Ganzzahl } from './runtime/index.js';
import * as Kst from './Kst.js';
describe("§ 23 Absatz 1 KStG — gestaffelter Steuersatz", ()=>{
it("Veranlagungszeiträume bis 2027 → 15 % (Nr. 1)", ()=>{
expect(Kst.kstSatz(Ganzzahl.von(FinDslNumber.ganzzahl("2010"))).equalsValue(FinDslNumber.prozent("0.15"))).toBe(true);
expect(Kst.kstSatz(Ganzzahl.von(FinDslNumber.ganzzahl("2025"))).equalsValue(FinDslNumber.prozent("0.15"))).toBe(true);
expect(Kst.kstSatz(Ganzzahl.von(FinDslNumber.ganzzahl("2027"))).equalsValue(FinDslNumber.prozent("0.15"))).toBe(true);
});
it("VZ 2028 → 14 % (Nr. 2)", ()=>{
expect(Kst.kstSatz(Ganzzahl.von(FinDslNumber.ganzzahl("2028"))).equalsValue(FinDslNumber.prozent("0.14"))).toBe(true);
});
it("VZ 2029 → 13 % (Nr. 3)", ()=>{
expect(Kst.kstSatz(Ganzzahl.von(FinDslNumber.ganzzahl("2029"))).equalsValue(FinDslNumber.prozent("0.13"))).toBe(true);
});
it("VZ 2030 → 12 % (Nr. 4)", ()=>{
expect(Kst.kstSatz(Ganzzahl.von(FinDslNumber.ganzzahl("2030"))).equalsValue(FinDslNumber.prozent("0.12"))).toBe(true);
});
it("VZ 2031 → 11 % (Nr. 5)", ()=>{
expect(Kst.kstSatz(Ganzzahl.von(FinDslNumber.ganzzahl("2031"))).equalsValue(FinDslNumber.prozent("0.11"))).toBe(true);
});
it("Veranlagungszeiträume ab 2032 → 10 % (Nr. 6)", ()=>{
expect(Kst.kstSatz(Ganzzahl.von(FinDslNumber.ganzzahl("2032"))).equalsValue(FinDslNumber.prozent("0.1"))).toBe(true);
expect(Kst.kstSatz(Ganzzahl.von(FinDslNumber.ganzzahl("2050"))).equalsValue(FinDslNumber.prozent("0.1"))).toBe(true);
});
});
describe("§ 24 KStG — Freibetrag", ()=>{
it("voller Freibetrag 5.000 € bei hohem Einkommen, kein Ausschluss", ()=>{
expect(Kst.freibetragNach24(Euro.von(FinDslNumber.ganzzahl("100000")), Kst.Freibetragsausschluss.Keiner).equalsValue(FinDslNumber.ganzzahl("5000"))).toBe(true);
});
it("höchstens in Höhe des Einkommens (Einkommen < 5.000 €)", ()=>{
expect(Kst.freibetragNach24(Euro.von(FinDslNumber.ganzzahl("3000")), Kst.Freibetragsausschluss.Keiner).equalsValue(FinDslNumber.ganzzahl("3000"))).toBe(true);
});
it("Einkommen genau 5.000 € → 5.000 € Freibetrag", ()=>{
expect(Kst.freibetragNach24(Euro.von(FinDslNumber.ganzzahl("5000")), Kst.Freibetragsausschluss.Keiner).equalsValue(FinDslNumber.ganzzahl("5000"))).toBe(true);
});
it("Einkommen 0 € → kein Freibetrag (darf keinen Verlust schaffen)", ()=>{
expect(Kst.freibetragNach24(Euro.von(FinDslNumber.ganzzahl("0")), Kst.Freibetragsausschluss.Keiner).equalsValue(FinDslNumber.ganzzahl("0"))).toBe(true);
});
it("§ 24 Satz 2 Nr. 1 (Kapitalgesellschaft) → Freibetrag entfällt", ()=>{
expect(Kst.freibetragNach24(Euro.von(FinDslNumber.ganzzahl("100000")), Kst.Freibetragsausschluss.Nr1KapitalLeistungen).equalsValue(FinDslNumber.ganzzahl("0"))).toBe(true);
});
});
describe("§ 7 Absatz 2 KStG — zu versteuerndes Einkommen", ()=>{
it("Einkommen − § 24 − § 25", ()=>{
expect(Kst.zuVersteuerndesEinkommen(Euro.von(FinDslNumber.ganzzahl("100000")), Euro.von(FinDslNumber.ganzzahl("5000")), Euro.von(FinDslNumber.ganzzahl("0"))).equalsValue(FinDslNumber.ganzzahl("95000"))).toBe(true);
});
it("mit § 25-Freibetrag", ()=>{
expect(Kst.zuVersteuerndesEinkommen(Euro.von(FinDslNumber.ganzzahl("100000")), Euro.von(FinDslNumber.ganzzahl("5000")), Euro.von(FinDslNumber.ganzzahl("10000"))).equalsValue(FinDslNumber.ganzzahl("85000"))).toBe(true);
});
});
describe("§ 23 Abs. 1 × § 31 Satz 2 KStG — Steuerbetrag und Rundung", ()=>{
it("95.000 € × 15 % (VZ 2025) = 14.250 €", ()=>{
expect(Kst.körperschaftsteuerBetrag(Euro.von(FinDslNumber.ganzzahl("95000")), Ganzzahl.von(FinDslNumber.ganzzahl("2025"))).equalsValue(FinDslNumber.ganzzahl("14250"))).toBe(true);
});
it("§ 31 S. 2: 12.345 € × 15 % = 1.851,75 € → abgerundet 1.851 €", ()=>{
expect(Kst.körperschaftsteuerBetrag(Euro.von(FinDslNumber.ganzzahl("12345")), Ganzzahl.von(FinDslNumber.ganzzahl("2025"))).equalsValue(FinDslNumber.ganzzahl("1851"))).toBe(true);
});
it("1.000.000 € × 14 % (VZ 2028) = 140.000 €", ()=>{
expect(Kst.körperschaftsteuerBetrag(Euro.von(FinDslNumber.ganzzahl("1000000")), Ganzzahl.von(FinDslNumber.ganzzahl("2028"))).equalsValue(FinDslNumber.ganzzahl("140000"))).toBe(true);
});
it("zu versteuerndes Einkommen 0 → keine Steuer", ()=>{
expect(Kst.körperschaftsteuerBetrag(Euro.von(FinDslNumber.ganzzahl("0")), Ganzzahl.von(FinDslNumber.ganzzahl("2025"))).equalsValue(FinDslNumber.ganzzahl("0"))).toBe(true);
});
});
describe("§ 23 Absatz 2 KStG — Anpassung", ()=>{
it("Anpassungssatz 0 % → unverändert", ()=>{
expect(Kst.anwenden23Abs2(Euro.von(FinDslNumber.ganzzahl("10000")), Prozent.von(FinDslNumber.prozent("0"))).equalsValue(FinDslNumber.ganzzahl("10000"))).toBe(true);
});
it("Anpassung +10 % → 11.000 €", ()=>{
expect(Kst.anwenden23Abs2(Euro.von(FinDslNumber.ganzzahl("10000")), Prozent.von(FinDslNumber.prozent("0.1"))).equalsValue(FinDslNumber.ganzzahl("11000"))).toBe(true);
});
});
describe("Gesamtberechnung (§§ 24 → 7 → 23 → 31 KStG)", ()=>{
it("Verein ohne Ausschluss, VZ 2025, Einkommen 100.000 €", ()=>{
const e = Kst.berechneKörperschaftsteuer(new Kst.KörperschaftsteuerFall(Euro.von(FinDslNumber.ganzzahl("100000")), Ganzzahl.von(FinDslNumber.ganzzahl("2025")), Kst.Freibetragsausschluss.Keiner, Euro.von(FinDslNumber.ganzzahl("0")), Prozent.von(FinDslNumber.prozent("0"))));
expect(e.freibetragNach24.equalsValue(FinDslNumber.ganzzahl("5000"))).toBe(true);
expect(e.zuVersteuerndesEinkommen.equalsValue(FinDslNumber.ganzzahl("95000"))).toBe(true);
expect(e.steuersatz.equalsValue(FinDslNumber.prozent("0.15"))).toBe(true);
expect(e.körperschaftsteuer.equalsValue(FinDslNumber.ganzzahl("14250"))).toBe(true);
});
it("Kapitalgesellschaft (§ 24 Satz 2 Nr. 1), VZ 2028, 1.000.000 €", ()=>{
const e = Kst.berechneKörperschaftsteuer(new Kst.KörperschaftsteuerFall(Euro.von(FinDslNumber.ganzzahl("1000000")), Ganzzahl.von(FinDslNumber.ganzzahl("2028")), Kst.Freibetragsausschluss.Nr1KapitalLeistungen, Euro.von(FinDslNumber.ganzzahl("0")), Prozent.von(FinDslNumber.prozent("0"))));
expect(e.freibetragNach24.equalsValue(FinDslNumber.ganzzahl("0"))).toBe(true);
expect(e.zuVersteuerndesEinkommen.equalsValue(FinDslNumber.ganzzahl("1000000"))).toBe(true);
expect(e.steuersatz.equalsValue(FinDslNumber.prozent("0.14"))).toBe(true);
expect(e.körperschaftsteuer.equalsValue(FinDslNumber.ganzzahl("140000"))).toBe(true);
});
it("kleines Einkommen 3.000 €, VZ 2032 → zvE 0, keine Steuer", ()=>{
const e = Kst.berechneKörperschaftsteuer(new Kst.KörperschaftsteuerFall(Euro.von(FinDslNumber.ganzzahl("3000")), Ganzzahl.von(FinDslNumber.ganzzahl("2032")), Kst.Freibetragsausschluss.Keiner, Euro.von(FinDslNumber.ganzzahl("0")), Prozent.von(FinDslNumber.prozent("0"))));
expect(e.freibetragNach24.equalsValue(FinDslNumber.ganzzahl("3000"))).toBe(true);
expect(e.zuVersteuerndesEinkommen.equalsValue(FinDslNumber.ganzzahl("0"))).toBe(true);
expect(e.körperschaftsteuer.equalsValue(FinDslNumber.ganzzahl("0"))).toBe(true);
});
it("mit § 25-Freibetrag 10.000 €, VZ 2025, Einkommen 100.000 €", ()=>{
const e = Kst.berechneKörperschaftsteuer(new Kst.KörperschaftsteuerFall(Euro.von(FinDslNumber.ganzzahl("100000")), Ganzzahl.von(FinDslNumber.ganzzahl("2025")), Kst.Freibetragsausschluss.Keiner, Euro.von(FinDslNumber.ganzzahl("10000")), Prozent.von(FinDslNumber.prozent("0"))));
expect(e.zuVersteuerndesEinkommen.equalsValue(FinDslNumber.ganzzahl("85000"))).toBe(true);
expect(e.körperschaftsteuer.equalsValue(FinDslNumber.ganzzahl("12750"))).toBe(true);
});
});Körperschaftsteuer — Tarif, Freibetrag und Bemessungsgrundlage
Bildet die Festsetzung der Körperschaftsteuer nach dem Körperschaftsteuergesetz (KStG 1977, Stand: zuletzt geändert durch Art.
Inhalt
kst
kst.findsl
Körperschaftsteuer — Tarif, Freibetrag und Bemessungsgrundlage
Bildet die Festsetzung der Körperschaftsteuer nach dem Körperschaftsteuergesetz (KStG 1977, Stand: zuletzt geändert durch Art. 30 G v. 4.2.2026 I Nr. 33) ab — die drei normativen Kerne:
- § 7 KStG — Grundlagen der Besteuerung: die KSt bemisst sich nach dem zu versteuernden Einkommen; dieses ist das Einkommen i.S.d. § 8 Abs. 1 KStG, vermindert um die Freibeträge der §§ 24 und 25 KStG (Abs. 2); die KSt ist eine Jahressteuer (Abs. 3).
- § 23 KStG — Steuersatz: nach Veranlagungszeitraum gestaffelter Prozentsatz auf das zu versteuernde Einkommen (Abs. 1); optionale Anpassung über § 51 Abs. 3 EStG (Abs. 2).
- § 24 KStG — Freibetrag von 5.000 Euro, höchstens in Höhe des Einkommens (Satz 1), mit den drei Ausschlusstatbeständen des Satz 2.
Anschließende § 31 Satz 2 KStG-Rundung: die festgesetzten KSt-Beträge sind zugunsten des Steuerpflichtigen auf volle Euro zu runden — Abrundung (zu Gunsten = niedrigere Steuer).
Nicht modelliert (außerhalb des Auftragsumfangs §§ 7/23/24): die Ermittlung des Einkommens i.S.d. § 8 Abs. 1 KStG selbst und der Freibetrag nach § 25 KStG — beide gehen als geprüfte Eingaben ein, damit die § 7 Abs. 2-Formel rechnerisch vollständig bleibt.
Konstanten
konst KST_SATZ_BIS_2027
konst KST_SATZ_BIS_2027: Prozent = 15%
Steuersatz für Veranlagungszeiträume bis 2027: 15 % des zu versteuernden Einkommens (§ 23 Abs. 1 Nr. 1 KStG).
Quelle: § 23 Absatz 1 Nummer 1 KStG — § 23 KStG
konst KST_SATZ_2028
konst KST_SATZ_2028: Prozent = 14%
Steuersatz für den Veranlagungszeitraum 2028: 14 % (§ 23 Abs. 1 Nr. 2 KStG).
Quelle: § 23 Absatz 1 Nummer 2 KStG — § 23 KStG
konst KST_SATZ_2029
konst KST_SATZ_2029: Prozent = 13%
Steuersatz für den Veranlagungszeitraum 2029: 13 % (§ 23 Abs. 1 Nr. 3 KStG).
Quelle: § 23 Absatz 1 Nummer 3 KStG — § 23 KStG
konst KST_SATZ_2030
konst KST_SATZ_2030: Prozent = 12%
Steuersatz für den Veranlagungszeitraum 2030: 12 % (§ 23 Abs. 1 Nr. 4 KStG).
Quelle: § 23 Absatz 1 Nummer 4 KStG — § 23 KStG
konst KST_SATZ_2031
konst KST_SATZ_2031: Prozent = 11%
Steuersatz für den Veranlagungszeitraum 2031: 11 % (§ 23 Abs. 1 Nr. 5 KStG).
Quelle: § 23 Absatz 1 Nummer 5 KStG — § 23 KStG
konst KST_SATZ_AB_2032
konst KST_SATZ_AB_2032: Prozent = 10%
Steuersatz für Veranlagungszeiträume ab 2032: 10 % (§ 23 Abs. 1 Nr. 6 KStG).
Quelle: § 23 Absatz 1 Nummer 6 KStG — § 23 KStG
konst FREIBETRAG_24
konst FREIBETRAG_24: Euro = 5.000
Freibetrag nach § 24 Satz 1 KStG: 5.000 Euro, höchstens jedoch in Höhe des Einkommens. Greift nur, wenn kein Ausschlusstatbestand des § 24 Satz 2 KStG vorliegt.
Quelle: § 24 Satz 1 KStG — § 24 KStG
Datensätze
datensatz KörperschaftsteuerFall
datensatz KörperschaftsteuerFall(
einkommenNach8Abs1: Euro, // Einkommen § 8 Abs. 1 KStG (vor Freibeträgen)
veranlagungszeitraum: Ganzzahl, // Kalenderjahr des VZ (§ 7 Abs. 3 KStG)
freibetragsausschluss: Freibetragsausschluss, // § 24 Satz 2 KStG: Ausschlusstatbestand
freibetragNach25: Euro = 0, // Freibetrag § 25 KStG (extern; § 7 Abs. 2 KStG)
anpassungNach23Abs2: Prozent = 0%, // § 23 Abs. 2 KStG i.V.m. § 51 Abs. 3 EStG
)
Eingaben für die Körperschaftsteuer-Festsetzung eines Steuerfalls.
| Feld | Typ | Bedeutung |
|---|---|---|
einkommenNach8Abs1 |
Euro |
Einkommen i.S.d. § 8 Abs. 1 KStG (nach EStG/KStG ermittelt) — Bemessungsbasis VOR Abzug der Freibeträge §§ 24, 25 KStG. |
veranlagungszeitraum |
Ganzzahl |
Kalenderjahr des Veranlagungszeitraums (§ 7 Abs. 3 KStG); bestimmt den Steuersatz nach § 23 Abs. 1 KStG. |
freibetragsausschluss |
Freibetragsausschluss |
Ausschlusstatbestand nach § 24 Satz 2 KStG (siehe Freibetragsausschluss). |
freibetragNach25 |
Euro |
Freibetrag nach § 25 KStG (extern ermittelt; geht nach § 7 Abs. 2 KStG mindernd ein). 0, wenn nicht einschlägig. |
anpassungNach23Abs2 |
Prozent |
Anpassungssatz nach § 23 Abs. 2 KStG i.V.m. § 51 Abs. 3 EStG (Herab-/Heraufsetzung). In aller Regel 0 % (keine Änderung). |
Quelle: § 7 KStG — § 7 KStG
datensatz KörperschaftsteuerErgebnis
datensatz KörperschaftsteuerErgebnis(
einkommen: Euro, // Einkommen § 8 Abs. 1 KStG (Eingabe)
freibetragNach24: Euro, // abgezogener Freibetrag § 24 KStG
freibetragNach25: Euro, // abgezogener Freibetrag § 25 KStG (Eingabe)
zuVersteuerndesEinkommen: Euro, // § 7 Abs. 1, 2 KStG: Bemessungsgrundlage
steuersatz: Prozent, // § 23 Abs. 1 KStG: VZ-abhängiger Satz
körperschaftsteuer: Euro, // festgesetzte KSt (§ 31 Satz 2: abgerundet)
)
Vollständige, prüfbare Berechnungsdokumentation eines Körperschaftsteuerfalls — jede Zwischengröße ist einzeln ausgewiesen, damit die Festsetzung Schritt für Schritt gegen das Gesetz auditierbar ist.
| Feld | Typ | Bedeutung |
|---|---|---|
einkommen |
Euro |
Einkommen i.S.d. § 8 Abs. 1 KStG (Eingabe, unverändert übernommen). |
freibetragNach24 |
Euro |
Tatsächlich abgezogener Freibetrag nach § 24 KStG (0, falls Satz 2 greift). |
freibetragNach25 |
Euro |
Abgezogener Freibetrag nach § 25 KStG (Eingabe). |
zuVersteuerndesEinkommen |
Euro |
§ 7 Abs. 1, 2 KStG: Bemessungsgrundlage = Einkommen − § 24 − § 25. |
steuersatz |
Prozent |
§ 23 Abs. 1 KStG: für den Veranlagungszeitraum geltender Satz. |
körperschaftsteuer |
Euro |
Festgesetzte Körperschaftsteuer nach § 23 KStG, auf volle Euro abgerundet (§ 31 Satz 2 KStG), inkl. § 23 Abs. 2. |
Quelle: § 7 KStG — § 7 KStG
Aufzählungen
aufzählung Freibetragsausschluss
aufzählung Freibetragsausschluss {
Keiner,
Nr1KapitalLeistungen,
Nr2VereinNach25,
Nr3Investmentfonds,
}
Ausschlusstatbestände des § 24 Satz 2 KStG. Liegt einer davon vor, entfällt der Freibetrag nach § 24 Satz 1 KStG vollständig.
Parameter
| Name | Beschreibung |
|---|---|
Keiner |
Kein Ausschluss — der Freibetrag von 5.000 € (§ 24 Satz 1 KStG) ist anwendbar. |
Nr1KapitalLeistungen |
§ 24 Satz 2 Nr. 1 KStG: Körperschaften/ Personenvereinigungen, deren Leistungen beim Empfänger zu Einnahmen i.S.d. § 20 Abs. 1 Nr. 1 oder 2 EStG gehören (typische Kapitalgesellschaften mit Ausschüttungen). |
Nr2VereinNach25 |
§ 24 Satz 2 Nr. 2 KStG: Vereine i.S.d. § 25 KStG (land-/forstwirtschaftliche Erwerbs- und Wirtschaftsgenossenschaften sowie Vereine). |
Nr3Investmentfonds |
§ 24 Satz 2 Nr. 3 KStG: Investmentfonds (§ 1 InvStG) und Spezial-Investmentfonds (§ 26 InvStG), deren Leistungen beim Empfänger zu Einnahmen i.S.d. § 20 Abs. 1 Nr. 3 oder 3a EStG gehören. |
Werte: Keiner, Nr1KapitalLeistungen, Nr2VereinNach25, Nr3Investmentfonds
Quelle: § 24 Satz 2 KStG — § 24 KStG
Funktionen
fn KstSatz
fn KstSatz(veranlagungszeitraum: Ganzzahl): Prozent
Liefert den Körperschaftsteuersatz für einen Veranlagungszeitraum nach
der Staffel des § 23 Abs. 1 KStG. „bis 2027" (Nr. 1) ist einschließlich
2027; „ab 2032" (Nr. 6) ist einschließlich 2032 (durch sonst
abgedeckt, da alle früheren Jahre vorher erfasst sind).
Parameter
| Name | Beschreibung |
|---|---|
veranlagungszeitraum |
Kalenderjahr des Veranlagungszeitraums. |
Rückgabe — Der nach § 23 Abs. 1 KStG für diesen VZ geltende Satz.
Quelle: § 23 Absatz 1 KStG — § 23 KStG
fn FreibetragNach24
fn FreibetragNach24(einkommen: Euro, ausschluss: Freibetragsausschluss): Euro
Freibetrag nach § 24 KStG unter Berücksichtigung des Ausschlusses nach § 24 Satz 2 KStG: liegt ein Ausschlusstatbestand (Nr. 1–3) vor, entfällt der Freibetrag vollständig; andernfalls der nach Satz 1 der Höhe nach begrenzte Betrag.
Parameter
| Name | Beschreibung |
|---|---|
einkommen |
Einkommen i.S.d. § 8 Abs. 1 KStG. |
ausschluss |
Ausschlusstatbestand nach § 24 Satz 2 KStG. |
Rückgabe — Abzuziehender Freibetrag nach § 24 KStG (0 bei Ausschluss).
Quelle: § 24 KStG — § 24 KStG
fn ZuVersteuerndesEinkommen
fn ZuVersteuerndesEinkommen(
einkommen: Euro,
freibetragNach24: Euro,
freibetragNach25: Euro,
): Euro
Zu versteuerndes Einkommen nach § 7 Abs. 2 KStG: das Einkommen i.S.d.
§ 8 Abs. 1 KStG, vermindert um die Freibeträge der §§ 24 und 25 KStG.
Kann negativ werden (Verlust); die steuerliche Auswirkung eines
negativen Betrags regelt die Steuerfestsetzung (körperschaftsteuer),
nicht diese Größe.
Parameter
| Name | Beschreibung |
|---|---|
einkommen |
Einkommen i.S.d. § 8 Abs. 1 KStG. |
freibetragNach24 |
Freibetrag nach § 24 KStG. |
freibetragNach25 |
Freibetrag nach § 25 KStG. |
Rückgabe — Zu versteuerndes Einkommen (§ 7 Abs. 1 KStG: Bemessung).
Quelle: § 7 Absatz 2 KStG — § 7 KStG
fn KörperschaftsteuerBetrag
fn KörperschaftsteuerBetrag(
zuVersteuerndesEinkommen: Euro,
veranlagungszeitraum: Ganzzahl,
): Euro
Körperschaftsteuerbetrag nach § 23 Abs. 1 KStG: Steuersatz des Veranlagungszeitraums multipliziert mit dem zu versteuernden Einkommen, anschließend nach § 31 Satz 2 KStG zu Gunsten des Steuerpflichtigen auf volle Euro abgerundet (niedrigere Steuer = zu Gunsten). Bei einem zu versteuernden Einkommen von 0 oder weniger beträgt die Steuer 0 (keine negative Steuer; Verlustabzug regelt § 8 KStG i.V.m. § 10d EStG, hier nicht modelliert).
Parameter
| Name | Beschreibung |
|---|---|
zuVersteuerndesEinkommen |
§ 7 KStG: Bemessungsgrundlage. |
veranlagungszeitraum |
Kalenderjahr (§ 23 Abs. 1 KStG). |
Rückgabe — Körperschaftsteuer nach § 23 Abs. 1 KStG, auf volle Euro abgerundet (§ 31 Satz 2 KStG).
Quelle: § 23 Absatz 1 KStG — § 23 KStG
fn Anwenden23Abs2
fn Anwenden23Abs2(körperschaftsteuer: Euro, anpassung: Prozent): Euro
Anpassung der Körperschaftsteuer nach § 23 Abs. 2 KStG: wird die Einkommensteuer aufgrund der Ermächtigung des § 51 Abs. 3 EStG herab- oder heraufgesetzt, ermäßigt oder erhöht sich die Körperschaftsteuer entsprechend (proportional). Der Anpassungsbetrag wird nach der Wertung des § 31 Satz 2 KStG auf volle Euro abgerundet. In aller Regel ist der Anpassungssatz 0 % (keine Verordnung in Kraft → unverändert).
Parameter
| Name | Beschreibung |
|---|---|
körperschaftsteuer |
Steuer nach § 23 Abs. 1 KStG (abgerundet). |
anpassung |
Anpassungssatz nach § 51 Abs. 3 EStG. |
Rückgabe — Angepasste Körperschaftsteuer (§ 23 Abs. 2 KStG).
Quelle: § 23 Absatz 2 KStG — § 23 KStG
fn BerechneKörperschaftsteuer
fn BerechneKörperschaftsteuer(fall: KörperschaftsteuerFall): KörperschaftsteuerErgebnis
Vollständige Festsetzung der Körperschaftsteuer eines Steuerfalls in der gesetzlichen Reihenfolge: § 24 KStG (Freibetrag) → § 7 Abs. 2 KStG (zu versteuerndes Einkommen) → § 23 Abs. 1 KStG (Steuersatz × zvE) → § 31 Satz 2 KStG (Abrundung) → § 23 Abs. 2 KStG (Anpassung). Liefert alle Zwischengrößen für die Audit-Vorlage.
Parameter
| Name | Beschreibung |
|---|---|
fall |
Eingaben des Steuerfalls (siehe KörperschaftsteuerFall). |
Rückgabe — Vollständig dokumentiertes Berechnungsergebnis.
Quelle: § 7 KStG — § 7 KStG
kst.test
kst.test.findsl
Akzeptanztests — Körperschaftsteuer (§§ 7, 23, 24 KStG)
prüfe-Blöcke zur Datei koerperschaftsteuer. Alle Sollwerte sind von
Hand aus dem Gesetzeswortlaut gerechnet (KStG 1977, Stand 4.2.2026):
- § 23 Abs. 1 KStG: 2027 → 15 %, 2028 → 14 %, … , ab 2032 → 10 %.
- § 24 KStG: 5.000 €, höchstens i.H.d. Einkommens; Ausschluss → 0.
- § 7 Abs. 2 KStG: zvE = Einkommen − § 24 − § 25.
- § 23 Abs. 1 × § 31 S. 2: KSt = (zvE × Satz).abrunden().
Diese Datei enthält ausschließlich die prüfe-Blöcke.
Prüfungen
prüfe § 23 Absatz 1 KStG — gestaffelter Steuersatz
prüfe "§ 23 Absatz 1 KStG — gestaffelter Steuersatz"
Testfall — Veranlagungszeiträume bis 2027 → 15 % (Nr. 1)
KstSatz(2010) == 15% und KstSatz(2025) == 15% und KstSatz(2027) == 15%
Testfall — VZ 2028 → 14 % (Nr. 2)
KstSatz(2028) == 14%
Testfall — VZ 2029 → 13 % (Nr. 3)
KstSatz(2029) == 13%
Testfall — VZ 2030 → 12 % (Nr. 4)
KstSatz(2030) == 12%
Testfall — VZ 2031 → 11 % (Nr. 5)
KstSatz(2031) == 11%
Testfall — Veranlagungszeiträume ab 2032 → 10 % (Nr. 6)
KstSatz(2032) == 10% und KstSatz(2050) == 10%
prüfe § 24 KStG — Freibetrag
prüfe "§ 24 KStG — Freibetrag"
Testfall — voller Freibetrag 5.000 € bei hohem Einkommen, kein Ausschluss
FreibetragNach24(100.000, Keiner) == 5.000
Testfall — höchstens in Höhe des Einkommens (Einkommen < 5.000 €)
FreibetragNach24(3.000, Keiner) == 3.000
Testfall — Einkommen genau 5.000 € → 5.000 € Freibetrag
FreibetragNach24(5.000, Keiner) == 5.000
Testfall — Einkommen 0 € → kein Freibetrag (darf keinen Verlust schaffen)
FreibetragNach24(0, Keiner) == 0
Testfall — § 24 Satz 2 Nr. 1 (Kapitalgesellschaft) → Freibetrag entfällt
FreibetragNach24(100.000, Nr1KapitalLeistungen) == 0
prüfe § 7 Absatz 2 KStG — zu versteuerndes Einkommen
prüfe "§ 7 Absatz 2 KStG — zu versteuerndes Einkommen"
Testfall — Einkommen − § 24 − § 25
ZuVersteuerndesEinkommen(100.000, 5.000, 0) == 95.000
Testfall — mit § 25-Freibetrag
ZuVersteuerndesEinkommen(100.000, 5.000, 10.000) == 85.000
prüfe § 23 Abs. 1 × § 31 Satz 2 KStG — Steuerbetrag und Rundung
prüfe "§ 23 Abs. 1 × § 31 Satz 2 KStG — Steuerbetrag und Rundung"
Testfall — 95.000 € × 15 % (VZ 2025) = 14.250 €
KörperschaftsteuerBetrag(95.000, 2025) == 14.250
Testfall — § 31 S. 2: 12.345 € × 15 % = 1.851,75 € → abgerundet 1.851 €
KörperschaftsteuerBetrag(12.345, 2025) == 1.851
Testfall — 1.000.000 € × 14 % (VZ 2028) = 140.000 €
KörperschaftsteuerBetrag(1.000.000, 2028) == 140.000
Testfall — zu versteuerndes Einkommen 0 → keine Steuer
KörperschaftsteuerBetrag(0, 2025) == 0
prüfe § 23 Absatz 2 KStG — Anpassung
prüfe "§ 23 Absatz 2 KStG — Anpassung"
Testfall — Anpassungssatz 0 % → unverändert
Anwenden23Abs2(10.000, 0%) == 10.000
Testfall — Anpassung +10 % → 11.000 €
Anwenden23Abs2(10.000, 10%) == 11.000
prüfe Gesamtberechnung (§§ 24 → 7 → 23 → 31 KStG)
prüfe "Gesamtberechnung (§§ 24 → 7 → 23 → 31 KStG)"
Testfall — Verein ohne Ausschluss, VZ 2025, Einkommen 100.000 €
var e: KörperschaftsteuerErgebnis = BerechneKörperschaftsteuer(
KörperschaftsteuerFall(
einkommenNach8Abs1 = 100.000,
veranlagungszeitraum = 2025,
freibetragsausschluss = Keiner,
),
)
e.freibetragNach24 == 5.000
und e.zuVersteuerndesEinkommen == 95.000
und e.steuersatz == 15%
und e.körperschaftsteuer == 14.250
Testfall — Kapitalgesellschaft (§ 24 Satz 2 Nr. 1), VZ 2028, 1.000.000 €
var e: KörperschaftsteuerErgebnis = BerechneKörperschaftsteuer(
KörperschaftsteuerFall(
einkommenNach8Abs1 = 1.000.000,
veranlagungszeitraum = 2028,
freibetragsausschluss = Nr1KapitalLeistungen,
),
)
e.freibetragNach24 == 0
und e.zuVersteuerndesEinkommen == 1.000.000
und e.steuersatz == 14%
und e.körperschaftsteuer == 140.000
Testfall — kleines Einkommen 3.000 €, VZ 2032 → zvE 0, keine Steuer
var e: KörperschaftsteuerErgebnis = BerechneKörperschaftsteuer(
KörperschaftsteuerFall(
einkommenNach8Abs1 = 3.000,
veranlagungszeitraum = 2032,
freibetragsausschluss = Keiner,
),
)
e.freibetragNach24 == 3.000
und e.zuVersteuerndesEinkommen == 0
und e.körperschaftsteuer == 0
Testfall — mit § 25-Freibetrag 10.000 €, VZ 2025, Einkommen 100.000 €
var e: KörperschaftsteuerErgebnis = BerechneKörperschaftsteuer(
KörperschaftsteuerFall(
einkommenNach8Abs1 = 100.000,
veranlagungszeitraum = 2025,
freibetragsausschluss = Keiner,
freibetragNach25 = 10.000,
),
)
e.zuVersteuerndesEinkommen == 85.000
und e.körperschaftsteuer == 12.750
# Körperschaftsteuer — Tarif, Freibetrag und Bemessungsgrundlage
*Bildet die Festsetzung der Körperschaftsteuer nach dem Körperschaftsteuergesetz (KStG 1977, Stand: zuletzt geändert durch Art.*
## Inhalt
- [kst](#kst)
- Konstanten
- [konst KST_SATZ_BIS_2027](#konst-kst-satz-bis-2027)
- [konst KST_SATZ_2028](#konst-kst-satz-2028)
- [konst KST_SATZ_2029](#konst-kst-satz-2029)
- [konst KST_SATZ_2030](#konst-kst-satz-2030)
- [konst KST_SATZ_2031](#konst-kst-satz-2031)
- [konst KST_SATZ_AB_2032](#konst-kst-satz-ab-2032)
- [konst FREIBETRAG_24](#konst-freibetrag-24)
- Datensätze
- [datensatz KörperschaftsteuerFall](#datensatz-körperschaftsteuerfall)
- [datensatz KörperschaftsteuerErgebnis](#datensatz-körperschaftsteuerergebnis)
- Aufzählungen
- [aufzählung Freibetragsausschluss](#aufzählung-freibetragsausschluss)
- Funktionen
- [fn KstSatz](#fn-kstsatz)
- [fn FreibetragNach24](#fn-freibetragnach24)
- [fn ZuVersteuerndesEinkommen](#fn-zuversteuerndeseinkommen)
- [fn KörperschaftsteuerBetrag](#fn-körperschaftsteuerbetrag)
- [fn Anwenden23Abs2](#fn-anwenden23abs2)
- [fn BerechneKörperschaftsteuer](#fn-berechnekörperschaftsteuer)
- [kst.test](#kst-test)
- Prüfungen
- [prüfe § 23 Absatz 1 KStG — gestaffelter Steuersatz](#prüfe-23-absatz-1-kstg-gestaffelter-steuersatz)
- [prüfe § 24 KStG — Freibetrag](#prüfe-24-kstg-freibetrag)
- [prüfe § 7 Absatz 2 KStG — zu versteuerndes Einkommen](#prüfe-7-absatz-2-kstg-zu-versteuerndes-einkommen)
- [prüfe § 23 Abs. 1 × § 31 Satz 2 KStG — Steuerbetrag und Rundung](#prüfe-23-abs-1-31-satz-2-kstg-steuerbetrag-und-rundung)
- [prüfe § 23 Absatz 2 KStG — Anpassung](#prüfe-23-absatz-2-kstg-anpassung)
- [prüfe Gesamtberechnung (§§ 24 → 7 → 23 → 31 KStG)](#prüfe-gesamtberechnung-24-7-23-31-kstg)
## `kst`
*`kst.findsl`*
#### Körperschaftsteuer — Tarif, Freibetrag und Bemessungsgrundlage
Bildet die Festsetzung der Körperschaftsteuer nach dem
**Körperschaftsteuergesetz (KStG 1977, Stand: zuletzt geändert durch
Art. 30 G v. 4.2.2026 I Nr. 33)** ab — die drei normativen Kerne:
- **[§ 7 KStG](https://www.gesetze-im-internet.de/kstg_1977/__7.html)** — Grundlagen der Besteuerung: die KSt bemisst sich nach
dem zu versteuernden Einkommen; dieses ist das Einkommen i.S.d.
[§ 8 Abs. 1 KStG](https://www.gesetze-im-internet.de/kstg_1977/__8.html), vermindert um die Freibeträge der §[§ 24](https://www.gesetze-im-internet.de/kstg_1977/__24.html) und [25 KStG](https://www.gesetze-im-internet.de/kstg_1977/__25.html)
(Abs. 2); die KSt ist eine Jahressteuer (Abs. 3).
- **[§ 23 KStG](https://www.gesetze-im-internet.de/kstg_1977/__23.html)** — Steuersatz: nach Veranlagungszeitraum gestaffelter
Prozentsatz auf das zu versteuernde Einkommen (Abs. 1); optionale
Anpassung über [§ 51 Abs. 3 EStG](https://www.gesetze-im-internet.de/estg/__51.html) (Abs. 2).
- **[§ 24 KStG](https://www.gesetze-im-internet.de/kstg_1977/__24.html)** — Freibetrag von 5.000 Euro, höchstens in Höhe des
Einkommens (Satz 1), mit den drei Ausschlusstatbeständen des Satz 2.
Anschließende **[§ 31 Satz 2 KStG](https://www.gesetze-im-internet.de/kstg_1977/__31.html)**-Rundung: die festgesetzten
KSt-Beträge sind zugunsten des Steuerpflichtigen auf volle Euro zu
runden — Abrundung (zu Gunsten = niedrigere Steuer).
Nicht modelliert (außerhalb des Auftragsumfangs §[§ 7](https://www.gesetze-im-internet.de/kstg_1977/__7.html)/[23](https://www.gesetze-im-internet.de/kstg_1977/__23.html)/[24](https://www.gesetze-im-internet.de/kstg_1977/__24.html)): die
Ermittlung des Einkommens i.S.d. [§ 8 Abs. 1 KStG](https://www.gesetze-im-internet.de/kstg_1977/__8.html) selbst und der
Freibetrag nach [§ 25 KStG](https://www.gesetze-im-internet.de/kstg_1977/__25.html) — beide gehen als geprüfte Eingaben ein,
damit die § 7 Abs. 2-Formel rechnerisch vollständig bleibt.
### Konstanten
#### konst `KST_SATZ_BIS_2027`
```findsl
konst KST_SATZ_BIS_2027: Prozent = 15%
```
Steuersatz für Veranlagungszeiträume **bis 2027**: 15 % des zu
versteuernden Einkommens ([§ 23 Abs. 1 Nr. 1 KStG](https://www.gesetze-im-internet.de/kstg_1977/__23.html)).
> Quelle: § 23 Absatz 1 Nummer 1 KStG — [§ 23 KStG](https://www.gesetze-im-internet.de/kstg_1977/__23.html)
#### konst `KST_SATZ_2028`
```findsl
konst KST_SATZ_2028: Prozent = 14%
```
Steuersatz für den Veranlagungszeitraum **2028**: 14 % ([§ 23 Abs. 1 Nr. 2 KStG](https://www.gesetze-im-internet.de/kstg_1977/__23.html)).
> Quelle: § 23 Absatz 1 Nummer 2 KStG — [§ 23 KStG](https://www.gesetze-im-internet.de/kstg_1977/__23.html)
#### konst `KST_SATZ_2029`
```findsl
konst KST_SATZ_2029: Prozent = 13%
```
Steuersatz für den Veranlagungszeitraum **2029**: 13 % ([§ 23 Abs. 1 Nr. 3 KStG](https://www.gesetze-im-internet.de/kstg_1977/__23.html)).
> Quelle: § 23 Absatz 1 Nummer 3 KStG — [§ 23 KStG](https://www.gesetze-im-internet.de/kstg_1977/__23.html)
#### konst `KST_SATZ_2030`
```findsl
konst KST_SATZ_2030: Prozent = 12%
```
Steuersatz für den Veranlagungszeitraum **2030**: 12 % ([§ 23 Abs. 1 Nr. 4 KStG](https://www.gesetze-im-internet.de/kstg_1977/__23.html)).
> Quelle: § 23 Absatz 1 Nummer 4 KStG — [§ 23 KStG](https://www.gesetze-im-internet.de/kstg_1977/__23.html)
#### konst `KST_SATZ_2031`
```findsl
konst KST_SATZ_2031: Prozent = 11%
```
Steuersatz für den Veranlagungszeitraum **2031**: 11 % ([§ 23 Abs. 1 Nr. 5 KStG](https://www.gesetze-im-internet.de/kstg_1977/__23.html)).
> Quelle: § 23 Absatz 1 Nummer 5 KStG — [§ 23 KStG](https://www.gesetze-im-internet.de/kstg_1977/__23.html)
#### konst `KST_SATZ_AB_2032`
```findsl
konst KST_SATZ_AB_2032: Prozent = 10%
```
Steuersatz für Veranlagungszeiträume **ab 2032**: 10 % ([§ 23 Abs. 1 Nr. 6 KStG](https://www.gesetze-im-internet.de/kstg_1977/__23.html)).
> Quelle: § 23 Absatz 1 Nummer 6 KStG — [§ 23 KStG](https://www.gesetze-im-internet.de/kstg_1977/__23.html)
#### konst `FREIBETRAG_24`
```findsl
konst FREIBETRAG_24: Euro = 5.000
```
Freibetrag nach [§ 24 Satz 1 KStG](https://www.gesetze-im-internet.de/kstg_1977/__24.html): 5.000 Euro, höchstens jedoch in Höhe
des Einkommens. Greift nur, wenn kein Ausschlusstatbestand des [§ 24 Satz 2 KStG](https://www.gesetze-im-internet.de/kstg_1977/__24.html) vorliegt.
> Quelle: § 24 Satz 1 KStG — [§ 24 KStG](https://www.gesetze-im-internet.de/kstg_1977/__24.html)
### Datensätze
#### datensatz `KörperschaftsteuerFall`
```findsl
datensatz KörperschaftsteuerFall(
einkommenNach8Abs1: Euro, // Einkommen § 8 Abs. 1 KStG (vor Freibeträgen)
veranlagungszeitraum: Ganzzahl, // Kalenderjahr des VZ (§ 7 Abs. 3 KStG)
freibetragsausschluss: Freibetragsausschluss, // § 24 Satz 2 KStG: Ausschlusstatbestand
freibetragNach25: Euro = 0, // Freibetrag § 25 KStG (extern; § 7 Abs. 2 KStG)
anpassungNach23Abs2: Prozent = 0%, // § 23 Abs. 2 KStG i.V.m. § 51 Abs. 3 EStG
)
```
Eingaben für die Körperschaftsteuer-Festsetzung eines Steuerfalls.
| Feld | Typ | Bedeutung |
| --- | --- | --- |
| `einkommenNach8Abs1` | `Euro` | Einkommen i.S.d. [§ 8 Abs. 1 KStG](https://www.gesetze-im-internet.de/kstg_1977/__8.html) (nach EStG/KStG ermittelt) — Bemessungsbasis VOR Abzug der Freibeträge §[§ 24](https://www.gesetze-im-internet.de/kstg_1977/__24.html), [25 KStG](https://www.gesetze-im-internet.de/kstg_1977/__25.html). |
| `veranlagungszeitraum` | `Ganzzahl` | Kalenderjahr des Veranlagungszeitraums ([§ 7 Abs. 3 KStG](https://www.gesetze-im-internet.de/kstg_1977/__7.html)); bestimmt den Steuersatz nach [§ 23 Abs. 1 KStG](https://www.gesetze-im-internet.de/kstg_1977/__23.html). |
| `freibetragsausschluss` | `Freibetragsausschluss` | Ausschlusstatbestand nach [§ 24 Satz 2 KStG](https://www.gesetze-im-internet.de/kstg_1977/__24.html) (siehe `Freibetragsausschluss`). |
| `freibetragNach25` | `Euro` | Freibetrag nach [§ 25 KStG](https://www.gesetze-im-internet.de/kstg_1977/__25.html) (extern ermittelt; geht nach [§ 7 Abs. 2 KStG](https://www.gesetze-im-internet.de/kstg_1977/__7.html) mindernd ein). 0, wenn nicht einschlägig. |
| `anpassungNach23Abs2` | `Prozent` | Anpassungssatz nach [§ 23 Abs. 2 KStG](https://www.gesetze-im-internet.de/kstg_1977/__23.html) i.V.m. [§ 51 Abs. 3 EStG](https://www.gesetze-im-internet.de/estg/__51.html) (Herab-/Heraufsetzung). In aller Regel 0 % (keine Änderung). |
> Quelle: § 7 KStG — [§ 7 KStG](https://www.gesetze-im-internet.de/kstg_1977/__7.html)
#### datensatz `KörperschaftsteuerErgebnis`
```findsl
datensatz KörperschaftsteuerErgebnis(
einkommen: Euro, // Einkommen § 8 Abs. 1 KStG (Eingabe)
freibetragNach24: Euro, // abgezogener Freibetrag § 24 KStG
freibetragNach25: Euro, // abgezogener Freibetrag § 25 KStG (Eingabe)
zuVersteuerndesEinkommen: Euro, // § 7 Abs. 1, 2 KStG: Bemessungsgrundlage
steuersatz: Prozent, // § 23 Abs. 1 KStG: VZ-abhängiger Satz
körperschaftsteuer: Euro, // festgesetzte KSt (§ 31 Satz 2: abgerundet)
)
```
Vollständige, prüfbare Berechnungsdokumentation eines
Körperschaftsteuerfalls — jede Zwischengröße ist einzeln ausgewiesen,
damit die Festsetzung Schritt für Schritt gegen das Gesetz auditierbar
ist.
| Feld | Typ | Bedeutung |
| --- | --- | --- |
| `einkommen` | `Euro` | Einkommen i.S.d. [§ 8 Abs. 1 KStG](https://www.gesetze-im-internet.de/kstg_1977/__8.html) (Eingabe, unverändert übernommen). |
| `freibetragNach24` | `Euro` | Tatsächlich abgezogener Freibetrag nach [§ 24 KStG](https://www.gesetze-im-internet.de/kstg_1977/__24.html) (0, falls Satz 2 greift). |
| `freibetragNach25` | `Euro` | Abgezogener Freibetrag nach [§ 25 KStG](https://www.gesetze-im-internet.de/kstg_1977/__25.html) (Eingabe). |
| `zuVersteuerndesEinkommen` | `Euro` | [§ 7 Abs. 1, 2 KStG](https://www.gesetze-im-internet.de/kstg_1977/__7.html): Bemessungsgrundlage = Einkommen − [§ 24](https://www.gesetze-im-internet.de/kstg_1977/__24.html) − [§ 25](https://www.gesetze-im-internet.de/kstg_1977/__25.html). |
| `steuersatz` | `Prozent` | [§ 23 Abs. 1 KStG](https://www.gesetze-im-internet.de/kstg_1977/__23.html): für den Veranlagungszeitraum geltender Satz. |
| `körperschaftsteuer` | `Euro` | Festgesetzte Körperschaftsteuer nach [§ 23 KStG](https://www.gesetze-im-internet.de/kstg_1977/__23.html), auf volle Euro abgerundet ([§ 31 Satz 2 KStG](https://www.gesetze-im-internet.de/kstg_1977/__31.html)), inkl. § 23 Abs. 2. |
> Quelle: § 7 KStG — [§ 7 KStG](https://www.gesetze-im-internet.de/kstg_1977/__7.html)
### Aufzählungen
#### aufzählung `Freibetragsausschluss`
```findsl
aufzählung Freibetragsausschluss {
Keiner,
Nr1KapitalLeistungen,
Nr2VereinNach25,
Nr3Investmentfonds,
}
```
Ausschlusstatbestände des [§ 24 Satz 2 KStG](https://www.gesetze-im-internet.de/kstg_1977/__24.html). Liegt einer davon vor,
entfällt der Freibetrag nach [§ 24 Satz 1 KStG](https://www.gesetze-im-internet.de/kstg_1977/__24.html) vollständig.
**Parameter**
| Name | Beschreibung |
| --- | --- |
| `Keiner` | Kein Ausschluss — der Freibetrag von 5.000 € ([§ 24 Satz 1 KStG](https://www.gesetze-im-internet.de/kstg_1977/__24.html)) ist anwendbar. |
| `Nr1KapitalLeistungen` | [§ 24 Satz 2 Nr. 1 KStG](https://www.gesetze-im-internet.de/kstg_1977/__24.html): Körperschaften/ Personenvereinigungen, deren Leistungen beim Empfänger zu Einnahmen i.S.d. [§ 20 Abs. 1 Nr. 1 oder 2 EStG](https://www.gesetze-im-internet.de/estg/__20.html) gehören (typische Kapitalgesellschaften mit Ausschüttungen). |
| `Nr2VereinNach25` | [§ 24 Satz 2 Nr. 2 KStG](https://www.gesetze-im-internet.de/kstg_1977/__24.html): Vereine i.S.d. [§ 25 KStG](https://www.gesetze-im-internet.de/kstg_1977/__25.html) (land-/forstwirtschaftliche Erwerbs- und Wirtschaftsgenossenschaften sowie Vereine). |
| `Nr3Investmentfonds` | [§ 24 Satz 2 Nr. 3 KStG](https://www.gesetze-im-internet.de/kstg_1977/__24.html): Investmentfonds ([§ 1 InvStG](https://www.gesetze-im-internet.de/invstg/__1.html)) und Spezial-Investmentfonds ([§ 26 InvStG](https://www.gesetze-im-internet.de/invstg/__26.html)), deren Leistungen beim Empfänger zu Einnahmen i.S.d. [§ 20 Abs. 1 Nr. 3 oder 3a EStG](https://www.gesetze-im-internet.de/estg/__20.html) gehören. |
**Werte:** `Keiner`, `Nr1KapitalLeistungen`, `Nr2VereinNach25`, `Nr3Investmentfonds`
> Quelle: § 24 Satz 2 KStG — [§ 24 KStG](https://www.gesetze-im-internet.de/kstg_1977/__24.html)
### Funktionen
#### fn `KstSatz`
```findsl
fn KstSatz(veranlagungszeitraum: Ganzzahl): Prozent
```
Liefert den Körperschaftsteuersatz für einen Veranlagungszeitraum nach
der Staffel des [§ 23 Abs. 1 KStG](https://www.gesetze-im-internet.de/kstg_1977/__23.html). „bis 2027" (Nr. 1) ist einschließlich
2027; „ab 2032" (Nr. 6) ist einschließlich 2032 (durch `sonst`
abgedeckt, da alle früheren Jahre vorher erfasst sind).
**Parameter**
| Name | Beschreibung |
| --- | --- |
| `veranlagungszeitraum` | Kalenderjahr des Veranlagungszeitraums. |
**Rückgabe** — Der nach [§ 23 Abs. 1 KStG](https://www.gesetze-im-internet.de/kstg_1977/__23.html) für diesen VZ geltende Satz.
> Quelle: § 23 Absatz 1 KStG — [§ 23 KStG](https://www.gesetze-im-internet.de/kstg_1977/__23.html)
#### fn `FreibetragNach24`
```findsl
fn FreibetragNach24(einkommen: Euro, ausschluss: Freibetragsausschluss): Euro
```
Freibetrag nach [§ 24 KStG](https://www.gesetze-im-internet.de/kstg_1977/__24.html) unter Berücksichtigung des Ausschlusses nach
[§ 24 Satz 2 KStG](https://www.gesetze-im-internet.de/kstg_1977/__24.html): liegt ein Ausschlusstatbestand (Nr. 1–3) vor,
entfällt der Freibetrag vollständig; andernfalls der nach Satz 1 der
Höhe nach begrenzte Betrag.
**Parameter**
| Name | Beschreibung |
| --- | --- |
| `einkommen` | Einkommen i.S.d. [§ 8 Abs. 1 KStG](https://www.gesetze-im-internet.de/kstg_1977/__8.html). |
| `ausschluss` | Ausschlusstatbestand nach [§ 24 Satz 2 KStG](https://www.gesetze-im-internet.de/kstg_1977/__24.html). |
**Rückgabe** — Abzuziehender Freibetrag nach [§ 24 KStG](https://www.gesetze-im-internet.de/kstg_1977/__24.html) (0 bei Ausschluss).
> Quelle: § 24 KStG — [§ 24 KStG](https://www.gesetze-im-internet.de/kstg_1977/__24.html)
#### fn `ZuVersteuerndesEinkommen`
```findsl
fn ZuVersteuerndesEinkommen(
einkommen: Euro,
freibetragNach24: Euro,
freibetragNach25: Euro,
): Euro
```
Zu versteuerndes Einkommen nach [§ 7 Abs. 2 KStG](https://www.gesetze-im-internet.de/kstg_1977/__7.html): das Einkommen i.S.d.
[§ 8 Abs. 1 KStG](https://www.gesetze-im-internet.de/kstg_1977/__8.html), vermindert um die Freibeträge der §[§ 24](https://www.gesetze-im-internet.de/kstg_1977/__24.html) und [25 KStG](https://www.gesetze-im-internet.de/kstg_1977/__25.html).
Kann negativ werden (Verlust); die steuerliche Auswirkung eines
negativen Betrags regelt die Steuerfestsetzung (`körperschaftsteuer`),
nicht diese Größe.
**Parameter**
| Name | Beschreibung |
| --- | --- |
| `einkommen` | Einkommen i.S.d. [§ 8 Abs. 1 KStG](https://www.gesetze-im-internet.de/kstg_1977/__8.html). |
| `freibetragNach24` | Freibetrag nach [§ 24 KStG](https://www.gesetze-im-internet.de/kstg_1977/__24.html). |
| `freibetragNach25` | Freibetrag nach [§ 25 KStG](https://www.gesetze-im-internet.de/kstg_1977/__25.html). |
**Rückgabe** — Zu versteuerndes Einkommen ([§ 7 Abs. 1 KStG](https://www.gesetze-im-internet.de/kstg_1977/__7.html): Bemessung).
> Quelle: § 7 Absatz 2 KStG — [§ 7 KStG](https://www.gesetze-im-internet.de/kstg_1977/__7.html)
#### fn `KörperschaftsteuerBetrag`
```findsl
fn KörperschaftsteuerBetrag(
zuVersteuerndesEinkommen: Euro,
veranlagungszeitraum: Ganzzahl,
): Euro
```
Körperschaftsteuerbetrag nach [§ 23 Abs. 1 KStG](https://www.gesetze-im-internet.de/kstg_1977/__23.html): Steuersatz des
Veranlagungszeitraums multipliziert mit dem zu versteuernden Einkommen,
anschließend nach [§ 31 Satz 2 KStG](https://www.gesetze-im-internet.de/kstg_1977/__31.html) **zu Gunsten des Steuerpflichtigen
auf volle Euro abgerundet** (niedrigere Steuer = zu Gunsten). Bei einem
zu versteuernden Einkommen von 0 oder weniger beträgt die Steuer 0
(keine negative Steuer; Verlustabzug regelt [§ 8 KStG](https://www.gesetze-im-internet.de/kstg_1977/__8.html) i.V.m.
[§ 10d EStG](https://www.gesetze-im-internet.de/estg/__10d.html), hier nicht modelliert).
**Parameter**
| Name | Beschreibung |
| --- | --- |
| `zuVersteuerndesEinkommen` | [§ 7 KStG](https://www.gesetze-im-internet.de/kstg_1977/__7.html): Bemessungsgrundlage. |
| `veranlagungszeitraum` | Kalenderjahr ([§ 23 Abs. 1 KStG](https://www.gesetze-im-internet.de/kstg_1977/__23.html)). |
**Rückgabe** — Körperschaftsteuer nach [§ 23 Abs. 1 KStG](https://www.gesetze-im-internet.de/kstg_1977/__23.html), auf volle Euro abgerundet ([§ 31 Satz 2 KStG](https://www.gesetze-im-internet.de/kstg_1977/__31.html)).
> Quelle: § 23 Absatz 1 KStG — [§ 23 KStG](https://www.gesetze-im-internet.de/kstg_1977/__23.html)
#### fn `Anwenden23Abs2`
```findsl
fn Anwenden23Abs2(körperschaftsteuer: Euro, anpassung: Prozent): Euro
```
Anpassung der Körperschaftsteuer nach [§ 23 Abs. 2 KStG](https://www.gesetze-im-internet.de/kstg_1977/__23.html): wird die
Einkommensteuer aufgrund der Ermächtigung des [§ 51 Abs. 3 EStG](https://www.gesetze-im-internet.de/estg/__51.html) herab-
oder heraufgesetzt, ermäßigt oder erhöht sich die Körperschaftsteuer
entsprechend (proportional). Der Anpassungsbetrag wird nach der
Wertung des [§ 31 Satz 2 KStG](https://www.gesetze-im-internet.de/kstg_1977/__31.html) auf volle Euro abgerundet. In aller Regel
ist der Anpassungssatz 0 % (keine Verordnung in Kraft → unverändert).
**Parameter**
| Name | Beschreibung |
| --- | --- |
| `körperschaftsteuer` | Steuer nach [§ 23 Abs. 1 KStG](https://www.gesetze-im-internet.de/kstg_1977/__23.html) (abgerundet). |
| `anpassung` | Anpassungssatz nach [§ 51 Abs. 3 EStG](https://www.gesetze-im-internet.de/estg/__51.html). |
**Rückgabe** — Angepasste Körperschaftsteuer ([§ 23 Abs. 2 KStG](https://www.gesetze-im-internet.de/kstg_1977/__23.html)).
> Quelle: § 23 Absatz 2 KStG — [§ 23 KStG](https://www.gesetze-im-internet.de/kstg_1977/__23.html)
#### fn `BerechneKörperschaftsteuer`
```findsl
fn BerechneKörperschaftsteuer(fall: KörperschaftsteuerFall): KörperschaftsteuerErgebnis
```
Vollständige Festsetzung der Körperschaftsteuer eines Steuerfalls in
der gesetzlichen Reihenfolge: [§ 24 KStG](https://www.gesetze-im-internet.de/kstg_1977/__24.html) (Freibetrag) → [§ 7 Abs. 2 KStG](https://www.gesetze-im-internet.de/kstg_1977/__7.html)
(zu versteuerndes Einkommen) → [§ 23 Abs. 1 KStG](https://www.gesetze-im-internet.de/kstg_1977/__23.html) (Steuersatz × zvE) →
[§ 31 Satz 2 KStG](https://www.gesetze-im-internet.de/kstg_1977/__31.html) (Abrundung) → [§ 23 Abs. 2 KStG](https://www.gesetze-im-internet.de/kstg_1977/__23.html) (Anpassung). Liefert
alle Zwischengrößen für die Audit-Vorlage.
**Parameter**
| Name | Beschreibung |
| --- | --- |
| `fall` | Eingaben des Steuerfalls (siehe `KörperschaftsteuerFall`). |
**Rückgabe** — Vollständig dokumentiertes Berechnungsergebnis.
> Quelle: § 7 KStG — [§ 7 KStG](https://www.gesetze-im-internet.de/kstg_1977/__7.html)
## `kst.test`
*`kst.test.findsl`*
#### Akzeptanztests — Körperschaftsteuer (§[§ 7](https://www.gesetze-im-internet.de/kstg_1977/__7.html), [23](https://www.gesetze-im-internet.de/kstg_1977/__23.html), [24 KStG](https://www.gesetze-im-internet.de/kstg_1977/__24.html))
`prüfe`-Blöcke zur Datei `koerperschaftsteuer`. Alle Sollwerte sind von
Hand aus dem Gesetzeswortlaut gerechnet (KStG 1977, Stand 4.2.2026):
- [§ 23 Abs. 1 KStG](https://www.gesetze-im-internet.de/kstg_1977/__23.html): 2027 → 15 %, 2028 → 14 %, … , ab 2032 → 10 %.
- [§ 24 KStG](https://www.gesetze-im-internet.de/kstg_1977/__24.html): 5.000 €, höchstens i.H.d. Einkommens; Ausschluss → 0.
- [§ 7 Abs. 2 KStG](https://www.gesetze-im-internet.de/kstg_1977/__7.html): zvE = Einkommen − § 24 − § 25.
- § 23 Abs. 1 × § 31 S. 2: KSt = (zvE × Satz).abrunden().
Diese Datei enthält ausschließlich die `prüfe`-Blöcke.
### Prüfungen
#### prüfe `§ 23 Absatz 1 KStG — gestaffelter Steuersatz`
```findsl
prüfe "§ 23 Absatz 1 KStG — gestaffelter Steuersatz"
```
**Testfall — Veranlagungszeiträume bis 2027 → 15 % (Nr. 1)**
```findsl
KstSatz(2010) == 15% und KstSatz(2025) == 15% und KstSatz(2027) == 15%
```
**Testfall — VZ 2028 → 14 % (Nr. 2)**
```findsl
KstSatz(2028) == 14%
```
**Testfall — VZ 2029 → 13 % (Nr. 3)**
```findsl
KstSatz(2029) == 13%
```
**Testfall — VZ 2030 → 12 % (Nr. 4)**
```findsl
KstSatz(2030) == 12%
```
**Testfall — VZ 2031 → 11 % (Nr. 5)**
```findsl
KstSatz(2031) == 11%
```
**Testfall — Veranlagungszeiträume ab 2032 → 10 % (Nr. 6)**
```findsl
KstSatz(2032) == 10% und KstSatz(2050) == 10%
```
#### prüfe `§ 24 KStG — Freibetrag`
```findsl
prüfe "§ 24 KStG — Freibetrag"
```
**Testfall — voller Freibetrag 5.000 € bei hohem Einkommen, kein Ausschluss**
```findsl
FreibetragNach24(100.000, Keiner) == 5.000
```
**Testfall — höchstens in Höhe des Einkommens (Einkommen < 5.000 €)**
```findsl
FreibetragNach24(3.000, Keiner) == 3.000
```
**Testfall — Einkommen genau 5.000 € → 5.000 € Freibetrag**
```findsl
FreibetragNach24(5.000, Keiner) == 5.000
```
**Testfall — Einkommen 0 € → kein Freibetrag (darf keinen Verlust schaffen)**
```findsl
FreibetragNach24(0, Keiner) == 0
```
**Testfall — § 24 Satz 2 Nr. 1 (Kapitalgesellschaft) → Freibetrag entfällt**
```findsl
FreibetragNach24(100.000, Nr1KapitalLeistungen) == 0
```
#### prüfe `§ 7 Absatz 2 KStG — zu versteuerndes Einkommen`
```findsl
prüfe "§ 7 Absatz 2 KStG — zu versteuerndes Einkommen"
```
**Testfall — Einkommen − § 24 − § 25**
```findsl
ZuVersteuerndesEinkommen(100.000, 5.000, 0) == 95.000
```
**Testfall — mit § 25-Freibetrag**
```findsl
ZuVersteuerndesEinkommen(100.000, 5.000, 10.000) == 85.000
```
#### prüfe `§ 23 Abs. 1 × § 31 Satz 2 KStG — Steuerbetrag und Rundung`
```findsl
prüfe "§ 23 Abs. 1 × § 31 Satz 2 KStG — Steuerbetrag und Rundung"
```
**Testfall — 95.000 € × 15 % (VZ 2025) = 14.250 €**
```findsl
KörperschaftsteuerBetrag(95.000, 2025) == 14.250
```
**Testfall — § 31 S. 2: 12.345 € × 15 % = 1.851,75 € → abgerundet 1.851 €**
```findsl
KörperschaftsteuerBetrag(12.345, 2025) == 1.851
```
**Testfall — 1.000.000 € × 14 % (VZ 2028) = 140.000 €**
```findsl
KörperschaftsteuerBetrag(1.000.000, 2028) == 140.000
```
**Testfall — zu versteuerndes Einkommen 0 → keine Steuer**
```findsl
KörperschaftsteuerBetrag(0, 2025) == 0
```
#### prüfe `§ 23 Absatz 2 KStG — Anpassung`
```findsl
prüfe "§ 23 Absatz 2 KStG — Anpassung"
```
**Testfall — Anpassungssatz 0 % → unverändert**
```findsl
Anwenden23Abs2(10.000, 0%) == 10.000
```
**Testfall — Anpassung +10 % → 11.000 €**
```findsl
Anwenden23Abs2(10.000, 10%) == 11.000
```
#### prüfe `Gesamtberechnung (§§ 24 → 7 → 23 → 31 KStG)`
```findsl
prüfe "Gesamtberechnung (§§ 24 → 7 → 23 → 31 KStG)"
```
**Testfall — Verein ohne Ausschluss, VZ 2025, Einkommen 100.000 €**
```findsl
var e: KörperschaftsteuerErgebnis = BerechneKörperschaftsteuer(
KörperschaftsteuerFall(
einkommenNach8Abs1 = 100.000,
veranlagungszeitraum = 2025,
freibetragsausschluss = Keiner,
),
)
e.freibetragNach24 == 5.000
und e.zuVersteuerndesEinkommen == 95.000
und e.steuersatz == 15%
und e.körperschaftsteuer == 14.250
```
**Testfall — Kapitalgesellschaft (§ 24 Satz 2 Nr. 1), VZ 2028, 1.000.000 €**
```findsl
var e: KörperschaftsteuerErgebnis = BerechneKörperschaftsteuer(
KörperschaftsteuerFall(
einkommenNach8Abs1 = 1.000.000,
veranlagungszeitraum = 2028,
freibetragsausschluss = Nr1KapitalLeistungen,
),
)
e.freibetragNach24 == 0
und e.zuVersteuerndesEinkommen == 1.000.000
und e.steuersatz == 14%
und e.körperschaftsteuer == 140.000
```
**Testfall — kleines Einkommen 3.000 €, VZ 2032 → zvE 0, keine Steuer**
```findsl
var e: KörperschaftsteuerErgebnis = BerechneKörperschaftsteuer(
KörperschaftsteuerFall(
einkommenNach8Abs1 = 3.000,
veranlagungszeitraum = 2032,
freibetragsausschluss = Keiner,
),
)
e.freibetragNach24 == 3.000
und e.zuVersteuerndesEinkommen == 0
und e.körperschaftsteuer == 0
```
**Testfall — mit § 25-Freibetrag 10.000 €, VZ 2025, Einkommen 100.000 €**
```findsl
var e: KörperschaftsteuerErgebnis = BerechneKörperschaftsteuer(
KörperschaftsteuerFall(
einkommenNach8Abs1 = 100.000,
veranlagungszeitraum = 2025,
freibetragsausschluss = Keiner,
freibetragNach25 = 10.000,
),
)
e.zuVersteuerndesEinkommen == 85.000
und e.körperschaftsteuer == 12.750
```Programmablaufpläne — kst
KstSatz
%%{init: {'fontFamily': 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace', 'themeVariables': {'fontFamily': 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace', 'fontSize': '13px', 'lineColor': '#c8ccd1'}, 'flowchart': {'curve': 'basis', 'padding': 10, 'nodeSpacing': 45, 'rankSpacing': 45}}}%%
flowchart TD
KstSatz_n0("KstSatz<br/><br/>⟨§ 23 Absatz 1 KStG⟩")
KstSatz_n1[/"veranlagungszeitraum: Ganzzahl"/]
KstSatz_n2{"veranlagungszeitraum #lt;= 2027"}
KstSatz_n3["KST_SATZ_BIS_2027"]
KstSatz_n4{"veranlagungszeitraum == 2028"}
KstSatz_n5["KST_SATZ_2028"]
KstSatz_n6{"veranlagungszeitraum == 2029"}
KstSatz_n7["KST_SATZ_2029"]
KstSatz_n8{"veranlagungszeitraum == 2030"}
KstSatz_n9["KST_SATZ_2030"]
KstSatz_n10{"veranlagungszeitraum == 2031"}
KstSatz_n11["KST_SATZ_2031"]
KstSatz_n12["KST_SATZ_AB_2032"]
KstSatz_n13("Ergebnis: Prozent")
KstSatz_n1 --> KstSatz_n0
KstSatz_n2 -->|"ja"| KstSatz_n3
KstSatz_n2 -->|"nein"| KstSatz_n4
KstSatz_n4 -->|"ja"| KstSatz_n5
KstSatz_n4 -->|"nein"| KstSatz_n6
KstSatz_n6 -->|"ja"| KstSatz_n7
KstSatz_n6 -->|"nein"| KstSatz_n8
KstSatz_n8 -->|"ja"| KstSatz_n9
KstSatz_n8 -->|"nein"| KstSatz_n10
KstSatz_n10 -->|"ja"| KstSatz_n11
KstSatz_n10 -->|"nein"| KstSatz_n12
KstSatz_n0 --> KstSatz_n2
KstSatz_n3 --> KstSatz_n13
KstSatz_n5 --> KstSatz_n13
KstSatz_n7 --> KstSatz_n13
KstSatz_n9 --> KstSatz_n13
KstSatz_n11 --> KstSatz_n13
KstSatz_n12 --> KstSatz_n13
click KstSatz_n0 href "https://www.gesetze-im-internet.de/kstg_1977/__23.html" "Liefert den Körperschaftsteuersatz für einen Veranlagungszeitraum nach der Staffel des § 23 Abs. 1 KStG. „bis 2027' (Nr. 1) ist einschließlich 2027; „ab 2032' (Nr. 6) ist einschließlich 2032 (durch `sonst` abgedeckt, da alle früheren Jahre vorher erfasst sind)." _blank
classDef start fill:#eef4fe,stroke:#a9c7f5,stroke-width:1px,color:#3c4043
class KstSatz_n0 start
classDef eingabe fill:#e9f3fb,stroke:#b2d3ec,stroke-width:1px,color:#3c4043
class KstSatz_n1 eingabe
classDef decision fill:#fdf6e0,stroke:#ecd79b,stroke-width:1px,color:#3c4043
class KstSatz_n2,KstSatz_n4,KstSatz_n6,KstSatz_n8,KstSatz_n10 decision
classDef operation fill:#f6f7f8,stroke:#d8dce0,stroke-width:1px,color:#3c4043
class KstSatz_n3,KstSatz_n5,KstSatz_n7,KstSatz_n9,KstSatz_n11,KstSatz_n12 operation
classDef ende fill:#eaf5ee,stroke:#a6d5b8,stroke-width:1px,color:#3c4043
class KstSatz_n13 ende
FreibetragNach24
%%{init: {'fontFamily': 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace', 'themeVariables': {'fontFamily': 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace', 'fontSize': '13px', 'lineColor': '#c8ccd1'}, 'flowchart': {'curve': 'basis', 'padding': 10, 'nodeSpacing': 45, 'rankSpacing': 45}}}%%
flowchart TD
FreibetragNach24_n0("FreibetragNach24<br/><br/>⟨§ 24 KStG⟩")
FreibetragNach24_n1[/"einkommen: Euro"/]
FreibetragNach24_n2[/"ausschluss: Freibetragsausschluss"/]
FreibetragNach24_n3{{"wähle ausschluss"}}
FreibetragNach24_n4[["einkommen.mindestens(…).höchstens(…)"]]
FreibetragNach24_n5["0"]
FreibetragNach24_n6("Ergebnis: Euro")
FreibetragNach24_n1 --> FreibetragNach24_n0
FreibetragNach24_n2 --> FreibetragNach24_n0
FreibetragNach24_n3 -->|"Keiner"| FreibetragNach24_n4
FreibetragNach24_n3 -->|"Nr1KapitalLeistungen, Nr2VereinNach25, Nr3Investmentfonds"| FreibetragNach24_n5
FreibetragNach24_n0 --> FreibetragNach24_n3
FreibetragNach24_n4 --> FreibetragNach24_n6
FreibetragNach24_n5 --> FreibetragNach24_n6
click FreibetragNach24_n0 href "https://www.gesetze-im-internet.de/kstg_1977/__24.html" "Freibetrag nach § 24 KStG unter Berücksichtigung des Ausschlusses nach § 24 Satz 2 KStG: liegt ein Ausschlusstatbestand (Nr. 1–3) vor, entfällt der Freibetrag vollständig; andernfalls der nach Satz 1 der Höhe nach begrenzte Betrag." _blank
classDef start fill:#eef4fe,stroke:#a9c7f5,stroke-width:1px,color:#3c4043
class FreibetragNach24_n0 start
classDef eingabe fill:#e9f3fb,stroke:#b2d3ec,stroke-width:1px,color:#3c4043
class FreibetragNach24_n1,FreibetragNach24_n2 eingabe
classDef case fill:#fcf0e2,stroke:#f0c79a,stroke-width:1px,color:#3c4043
class FreibetragNach24_n3 case
classDef subprogram fill:#eeeffb,stroke:#c3c6ef,stroke-width:1px,color:#3c4043
class FreibetragNach24_n4 subprogram
classDef operation fill:#f6f7f8,stroke:#d8dce0,stroke-width:1px,color:#3c4043
class FreibetragNach24_n5 operation
classDef ende fill:#eaf5ee,stroke:#a6d5b8,stroke-width:1px,color:#3c4043
class FreibetragNach24_n6 ende
ZuVersteuerndesEinkommen
%%{init: {'fontFamily': 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace', 'themeVariables': {'fontFamily': 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace', 'fontSize': '13px', 'lineColor': '#c8ccd1'}, 'flowchart': {'curve': 'basis', 'padding': 10, 'nodeSpacing': 45, 'rankSpacing': 45}}}%%
flowchart TD
ZuVersteuerndesEinkommen_n0("ZuVersteuerndesEinkommen<br/><br/>⟨§ 7 Absatz 2 KStG⟩")
ZuVersteuerndesEinkommen_n1[/"einkommen: Euro"/]
ZuVersteuerndesEinkommen_n2[/"freibetragNach24: Euro"/]
ZuVersteuerndesEinkommen_n3[/"freibetragNach25: Euro"/]
ZuVersteuerndesEinkommen_n4["einkommen -<br/>freibetragNach24 -<br/>freibetragNach25"]
ZuVersteuerndesEinkommen_n5("Ergebnis: Euro")
ZuVersteuerndesEinkommen_n1 --> ZuVersteuerndesEinkommen_n0
ZuVersteuerndesEinkommen_n2 --> ZuVersteuerndesEinkommen_n0
ZuVersteuerndesEinkommen_n3 --> ZuVersteuerndesEinkommen_n0
ZuVersteuerndesEinkommen_n0 --> ZuVersteuerndesEinkommen_n4
ZuVersteuerndesEinkommen_n4 --> ZuVersteuerndesEinkommen_n5
click ZuVersteuerndesEinkommen_n0 href "https://www.gesetze-im-internet.de/kstg_1977/__7.html" "Zu versteuerndes Einkommen nach § 7 Abs. 2 KStG: das Einkommen i.S.d. § 8 Abs. 1 KStG, vermindert um die Freibeträge der §§ 24 und 25 KStG. Kann negativ werden (Verlust); die steuerliche Auswirkung eines negativen Betrags regelt die Steuerfestsetzung (`körperschaftsteuer`), nicht diese Größe." _blank
classDef start fill:#eef4fe,stroke:#a9c7f5,stroke-width:1px,color:#3c4043
class ZuVersteuerndesEinkommen_n0 start
classDef eingabe fill:#e9f3fb,stroke:#b2d3ec,stroke-width:1px,color:#3c4043
class ZuVersteuerndesEinkommen_n1,ZuVersteuerndesEinkommen_n2,ZuVersteuerndesEinkommen_n3 eingabe
classDef operation fill:#f6f7f8,stroke:#d8dce0,stroke-width:1px,color:#3c4043
class ZuVersteuerndesEinkommen_n4 operation
classDef ende fill:#eaf5ee,stroke:#a6d5b8,stroke-width:1px,color:#3c4043
class ZuVersteuerndesEinkommen_n5 ende
KörperschaftsteuerBetrag
%%{init: {'fontFamily': 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace', 'themeVariables': {'fontFamily': 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace', 'fontSize': '13px', 'lineColor': '#c8ccd1'}, 'flowchart': {'curve': 'basis', 'padding': 10, 'nodeSpacing': 45, 'rankSpacing': 45}}}%%
flowchart TD
KörperschaftsteuerBetrag_n0("KörperschaftsteuerBetrag<br/><br/>⟨§ 23 Absatz 1 KStG⟩")
KörperschaftsteuerBetrag_n1[/"zuVersteuerndesEinkommen: Euro"/]
KörperschaftsteuerBetrag_n2[/"veranlagungszeitraum: Ganzzahl"/]
KörperschaftsteuerBetrag_n3{"zuVersteuerndesEinkommen #lt;= 0"}
KörperschaftsteuerBetrag_n4["0"]
KörperschaftsteuerBetrag_n5["(zuVersteuerndesEinkommen *<br/>KstSatz(…)).abrunden()"]
KörperschaftsteuerBetrag_n6("Ergebnis: Euro")
KörperschaftsteuerBetrag_n1 --> KörperschaftsteuerBetrag_n0
KörperschaftsteuerBetrag_n2 --> KörperschaftsteuerBetrag_n0
KörperschaftsteuerBetrag_n3 -->|"ja"| KörperschaftsteuerBetrag_n4
KörperschaftsteuerBetrag_n3 -->|"nein"| KörperschaftsteuerBetrag_n5
KörperschaftsteuerBetrag_n0 --> KörperschaftsteuerBetrag_n3
KörperschaftsteuerBetrag_n4 --> KörperschaftsteuerBetrag_n6
KörperschaftsteuerBetrag_n5 --> KörperschaftsteuerBetrag_n6
click KörperschaftsteuerBetrag_n0 href "https://www.gesetze-im-internet.de/kstg_1977/__23.html" "Körperschaftsteuerbetrag nach § 23 Abs. 1 KStG: Steuersatz des Veranlagungszeitraums multipliziert mit dem zu versteuernden Einkommen, anschließend nach § 31 Satz 2 KStG **zu Gunsten des Steuerpflichtigen auf volle Euro abgerundet** (niedrigere Steuer = zu Gunsten). Bei einem zu versteuernden Einkommen von 0 oder weniger beträgt die Steuer 0 (keine negative Steuer; Verlustabzug regelt § 8 KStG i.V.m. § 10d EStG, hier nicht modelliert)." _blank
classDef start fill:#eef4fe,stroke:#a9c7f5,stroke-width:1px,color:#3c4043
class KörperschaftsteuerBetrag_n0 start
classDef eingabe fill:#e9f3fb,stroke:#b2d3ec,stroke-width:1px,color:#3c4043
class KörperschaftsteuerBetrag_n1,KörperschaftsteuerBetrag_n2 eingabe
classDef decision fill:#fdf6e0,stroke:#ecd79b,stroke-width:1px,color:#3c4043
class KörperschaftsteuerBetrag_n3 decision
classDef operation fill:#f6f7f8,stroke:#d8dce0,stroke-width:1px,color:#3c4043
class KörperschaftsteuerBetrag_n4,KörperschaftsteuerBetrag_n5 operation
classDef ende fill:#eaf5ee,stroke:#a6d5b8,stroke-width:1px,color:#3c4043
class KörperschaftsteuerBetrag_n6 ende
Anwenden23Abs2
%%{init: {'fontFamily': 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace', 'themeVariables': {'fontFamily': 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace', 'fontSize': '13px', 'lineColor': '#c8ccd1'}, 'flowchart': {'curve': 'basis', 'padding': 10, 'nodeSpacing': 45, 'rankSpacing': 45}}}%%
flowchart TD
Anwenden23Abs2_n0("Anwenden23Abs2<br/><br/>⟨§ 23 Absatz 2 KStG⟩")
Anwenden23Abs2_n1[/"körperschaftsteuer: Euro"/]
Anwenden23Abs2_n2[/"anpassung: Prozent"/]
Anwenden23Abs2_n3["körperschaftsteuer +<br/>(körperschaftsteuer *<br/>anpassung).abrunden()"]
Anwenden23Abs2_n4("Ergebnis: Euro")
Anwenden23Abs2_n1 --> Anwenden23Abs2_n0
Anwenden23Abs2_n2 --> Anwenden23Abs2_n0
Anwenden23Abs2_n0 --> Anwenden23Abs2_n3
Anwenden23Abs2_n3 --> Anwenden23Abs2_n4
click Anwenden23Abs2_n0 href "https://www.gesetze-im-internet.de/kstg_1977/__23.html" "Anpassung der Körperschaftsteuer nach § 23 Abs. 2 KStG: wird die Einkommensteuer aufgrund der Ermächtigung des § 51 Abs. 3 EStG herab- oder heraufgesetzt, ermäßigt oder erhöht sich die Körperschaftsteuer entsprechend (proportional). Der Anpassungsbetrag wird nach der Wertung des § 31 Satz 2 KStG auf volle Euro abgerundet. In aller Regel ist der Anpassungssatz 0 % (keine Verordnung in Kraft → unverändert)." _blank
classDef start fill:#eef4fe,stroke:#a9c7f5,stroke-width:1px,color:#3c4043
class Anwenden23Abs2_n0 start
classDef eingabe fill:#e9f3fb,stroke:#b2d3ec,stroke-width:1px,color:#3c4043
class Anwenden23Abs2_n1,Anwenden23Abs2_n2 eingabe
classDef operation fill:#f6f7f8,stroke:#d8dce0,stroke-width:1px,color:#3c4043
class Anwenden23Abs2_n3 operation
classDef ende fill:#eaf5ee,stroke:#a6d5b8,stroke-width:1px,color:#3c4043
class Anwenden23Abs2_n4 ende
BerechneKörperschaftsteuer
%%{init: {'fontFamily': 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace', 'themeVariables': {'fontFamily': 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace', 'fontSize': '13px', 'lineColor': '#c8ccd1'}, 'flowchart': {'curve': 'basis', 'padding': 10, 'nodeSpacing': 45, 'rankSpacing': 45}}}%%
flowchart TD
BerechneKörperschaftsteuer_n0("BerechneKörperschaftsteuer<br/><br/>⟨§ 7 KStG⟩")
BerechneKörperschaftsteuer_n1[/"fall: KörperschaftsteuerFall"/]
BerechneKörperschaftsteuer_n2[["freibetrag24 ← FreibetragNach24(…)"]]
BerechneKörperschaftsteuer_n3[["zve ← ZuVersteuerndesEinkommen(…)"]]
BerechneKörperschaftsteuer_n4[["satz ← KstSatz(…)"]]
BerechneKörperschaftsteuer_n5[["basis ← KörperschaftsteuerBetrag(…)"]]
BerechneKörperschaftsteuer_n6[["endgültig ← Anwenden23Abs2(…)"]]
BerechneKörperschaftsteuer_n7[["KörperschaftsteuerErgebnis(…)"]]
BerechneKörperschaftsteuer_n8("Ergebnis: KörperschaftsteuerErgebnis")
BerechneKörperschaftsteuer_n1 --> BerechneKörperschaftsteuer_n0
BerechneKörperschaftsteuer_n2 --> BerechneKörperschaftsteuer_n3
BerechneKörperschaftsteuer_n3 --> BerechneKörperschaftsteuer_n4
BerechneKörperschaftsteuer_n4 --> BerechneKörperschaftsteuer_n5
BerechneKörperschaftsteuer_n5 --> BerechneKörperschaftsteuer_n6
BerechneKörperschaftsteuer_n6 --> BerechneKörperschaftsteuer_n7
BerechneKörperschaftsteuer_n0 --> BerechneKörperschaftsteuer_n2
BerechneKörperschaftsteuer_n7 --> BerechneKörperschaftsteuer_n8
click BerechneKörperschaftsteuer_n0 href "https://www.gesetze-im-internet.de/kstg_1977/__7.html" "Vollständige Festsetzung der Körperschaftsteuer eines Steuerfalls in der gesetzlichen Reihenfolge: § 24 KStG (Freibetrag) → § 7 Abs. 2 KStG (zu versteuerndes Einkommen) → § 23 Abs. 1 KStG (Steuersatz × zvE) → § 31 Satz 2 KStG (Abrundung) → § 23 Abs. 2 KStG (Anpassung). Liefert alle Zwischengrößen für die Audit-Vorlage." _blank
classDef start fill:#eef4fe,stroke:#a9c7f5,stroke-width:1px,color:#3c4043
class BerechneKörperschaftsteuer_n0 start
classDef eingabe fill:#e9f3fb,stroke:#b2d3ec,stroke-width:1px,color:#3c4043
class BerechneKörperschaftsteuer_n1 eingabe
classDef subprogram fill:#eeeffb,stroke:#c3c6ef,stroke-width:1px,color:#3c4043
class BerechneKörperschaftsteuer_n2,BerechneKörperschaftsteuer_n3,BerechneKörperschaftsteuer_n4,BerechneKörperschaftsteuer_n5,BerechneKörperschaftsteuer_n6,BerechneKörperschaftsteuer_n7 subprogram
classDef ende fill:#eaf5ee,stroke:#a6d5b8,stroke-width:1px,color:#3c4043
class BerechneKörperschaftsteuer_n8 ende
# Programmablaufpläne — kst
## KstSatz
```mermaid
%%{init: {'fontFamily': 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace', 'themeVariables': {'fontFamily': 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace', 'fontSize': '13px', 'lineColor': '#c8ccd1'}, 'flowchart': {'curve': 'basis', 'padding': 10, 'nodeSpacing': 45, 'rankSpacing': 45}}}%%
flowchart TD
KstSatz_n0("KstSatz<br/><br/>⟨§ 23 Absatz 1 KStG⟩")
KstSatz_n1[/"veranlagungszeitraum: Ganzzahl"/]
KstSatz_n2{"veranlagungszeitraum #lt;= 2027"}
KstSatz_n3["KST_SATZ_BIS_2027"]
KstSatz_n4{"veranlagungszeitraum == 2028"}
KstSatz_n5["KST_SATZ_2028"]
KstSatz_n6{"veranlagungszeitraum == 2029"}
KstSatz_n7["KST_SATZ_2029"]
KstSatz_n8{"veranlagungszeitraum == 2030"}
KstSatz_n9["KST_SATZ_2030"]
KstSatz_n10{"veranlagungszeitraum == 2031"}
KstSatz_n11["KST_SATZ_2031"]
KstSatz_n12["KST_SATZ_AB_2032"]
KstSatz_n13("Ergebnis: Prozent")
KstSatz_n1 --> KstSatz_n0
KstSatz_n2 -->|"ja"| KstSatz_n3
KstSatz_n2 -->|"nein"| KstSatz_n4
KstSatz_n4 -->|"ja"| KstSatz_n5
KstSatz_n4 -->|"nein"| KstSatz_n6
KstSatz_n6 -->|"ja"| KstSatz_n7
KstSatz_n6 -->|"nein"| KstSatz_n8
KstSatz_n8 -->|"ja"| KstSatz_n9
KstSatz_n8 -->|"nein"| KstSatz_n10
KstSatz_n10 -->|"ja"| KstSatz_n11
KstSatz_n10 -->|"nein"| KstSatz_n12
KstSatz_n0 --> KstSatz_n2
KstSatz_n3 --> KstSatz_n13
KstSatz_n5 --> KstSatz_n13
KstSatz_n7 --> KstSatz_n13
KstSatz_n9 --> KstSatz_n13
KstSatz_n11 --> KstSatz_n13
KstSatz_n12 --> KstSatz_n13
click KstSatz_n0 href "https://www.gesetze-im-internet.de/kstg_1977/__23.html" "Liefert den Körperschaftsteuersatz für einen Veranlagungszeitraum nach der Staffel des § 23 Abs. 1 KStG. „bis 2027' (Nr. 1) ist einschließlich 2027; „ab 2032' (Nr. 6) ist einschließlich 2032 (durch `sonst` abgedeckt, da alle früheren Jahre vorher erfasst sind)." _blank
classDef start fill:#eef4fe,stroke:#a9c7f5,stroke-width:1px,color:#3c4043
class KstSatz_n0 start
classDef eingabe fill:#e9f3fb,stroke:#b2d3ec,stroke-width:1px,color:#3c4043
class KstSatz_n1 eingabe
classDef decision fill:#fdf6e0,stroke:#ecd79b,stroke-width:1px,color:#3c4043
class KstSatz_n2,KstSatz_n4,KstSatz_n6,KstSatz_n8,KstSatz_n10 decision
classDef operation fill:#f6f7f8,stroke:#d8dce0,stroke-width:1px,color:#3c4043
class KstSatz_n3,KstSatz_n5,KstSatz_n7,KstSatz_n9,KstSatz_n11,KstSatz_n12 operation
classDef ende fill:#eaf5ee,stroke:#a6d5b8,stroke-width:1px,color:#3c4043
class KstSatz_n13 ende
```
## FreibetragNach24
```mermaid
%%{init: {'fontFamily': 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace', 'themeVariables': {'fontFamily': 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace', 'fontSize': '13px', 'lineColor': '#c8ccd1'}, 'flowchart': {'curve': 'basis', 'padding': 10, 'nodeSpacing': 45, 'rankSpacing': 45}}}%%
flowchart TD
FreibetragNach24_n0("FreibetragNach24<br/><br/>⟨§ 24 KStG⟩")
FreibetragNach24_n1[/"einkommen: Euro"/]
FreibetragNach24_n2[/"ausschluss: Freibetragsausschluss"/]
FreibetragNach24_n3{{"wähle ausschluss"}}
FreibetragNach24_n4[["einkommen.mindestens(…).höchstens(…)"]]
FreibetragNach24_n5["0"]
FreibetragNach24_n6("Ergebnis: Euro")
FreibetragNach24_n1 --> FreibetragNach24_n0
FreibetragNach24_n2 --> FreibetragNach24_n0
FreibetragNach24_n3 -->|"Keiner"| FreibetragNach24_n4
FreibetragNach24_n3 -->|"Nr1KapitalLeistungen, Nr2VereinNach25, Nr3Investmentfonds"| FreibetragNach24_n5
FreibetragNach24_n0 --> FreibetragNach24_n3
FreibetragNach24_n4 --> FreibetragNach24_n6
FreibetragNach24_n5 --> FreibetragNach24_n6
click FreibetragNach24_n0 href "https://www.gesetze-im-internet.de/kstg_1977/__24.html" "Freibetrag nach § 24 KStG unter Berücksichtigung des Ausschlusses nach § 24 Satz 2 KStG: liegt ein Ausschlusstatbestand (Nr. 1–3) vor, entfällt der Freibetrag vollständig; andernfalls der nach Satz 1 der Höhe nach begrenzte Betrag." _blank
classDef start fill:#eef4fe,stroke:#a9c7f5,stroke-width:1px,color:#3c4043
class FreibetragNach24_n0 start
classDef eingabe fill:#e9f3fb,stroke:#b2d3ec,stroke-width:1px,color:#3c4043
class FreibetragNach24_n1,FreibetragNach24_n2 eingabe
classDef case fill:#fcf0e2,stroke:#f0c79a,stroke-width:1px,color:#3c4043
class FreibetragNach24_n3 case
classDef subprogram fill:#eeeffb,stroke:#c3c6ef,stroke-width:1px,color:#3c4043
class FreibetragNach24_n4 subprogram
classDef operation fill:#f6f7f8,stroke:#d8dce0,stroke-width:1px,color:#3c4043
class FreibetragNach24_n5 operation
classDef ende fill:#eaf5ee,stroke:#a6d5b8,stroke-width:1px,color:#3c4043
class FreibetragNach24_n6 ende
```
## ZuVersteuerndesEinkommen
```mermaid
%%{init: {'fontFamily': 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace', 'themeVariables': {'fontFamily': 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace', 'fontSize': '13px', 'lineColor': '#c8ccd1'}, 'flowchart': {'curve': 'basis', 'padding': 10, 'nodeSpacing': 45, 'rankSpacing': 45}}}%%
flowchart TD
ZuVersteuerndesEinkommen_n0("ZuVersteuerndesEinkommen<br/><br/>⟨§ 7 Absatz 2 KStG⟩")
ZuVersteuerndesEinkommen_n1[/"einkommen: Euro"/]
ZuVersteuerndesEinkommen_n2[/"freibetragNach24: Euro"/]
ZuVersteuerndesEinkommen_n3[/"freibetragNach25: Euro"/]
ZuVersteuerndesEinkommen_n4["einkommen -<br/>freibetragNach24 -<br/>freibetragNach25"]
ZuVersteuerndesEinkommen_n5("Ergebnis: Euro")
ZuVersteuerndesEinkommen_n1 --> ZuVersteuerndesEinkommen_n0
ZuVersteuerndesEinkommen_n2 --> ZuVersteuerndesEinkommen_n0
ZuVersteuerndesEinkommen_n3 --> ZuVersteuerndesEinkommen_n0
ZuVersteuerndesEinkommen_n0 --> ZuVersteuerndesEinkommen_n4
ZuVersteuerndesEinkommen_n4 --> ZuVersteuerndesEinkommen_n5
click ZuVersteuerndesEinkommen_n0 href "https://www.gesetze-im-internet.de/kstg_1977/__7.html" "Zu versteuerndes Einkommen nach § 7 Abs. 2 KStG: das Einkommen i.S.d. § 8 Abs. 1 KStG, vermindert um die Freibeträge der §§ 24 und 25 KStG. Kann negativ werden (Verlust); die steuerliche Auswirkung eines negativen Betrags regelt die Steuerfestsetzung (`körperschaftsteuer`), nicht diese Größe." _blank
classDef start fill:#eef4fe,stroke:#a9c7f5,stroke-width:1px,color:#3c4043
class ZuVersteuerndesEinkommen_n0 start
classDef eingabe fill:#e9f3fb,stroke:#b2d3ec,stroke-width:1px,color:#3c4043
class ZuVersteuerndesEinkommen_n1,ZuVersteuerndesEinkommen_n2,ZuVersteuerndesEinkommen_n3 eingabe
classDef operation fill:#f6f7f8,stroke:#d8dce0,stroke-width:1px,color:#3c4043
class ZuVersteuerndesEinkommen_n4 operation
classDef ende fill:#eaf5ee,stroke:#a6d5b8,stroke-width:1px,color:#3c4043
class ZuVersteuerndesEinkommen_n5 ende
```
## KörperschaftsteuerBetrag
```mermaid
%%{init: {'fontFamily': 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace', 'themeVariables': {'fontFamily': 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace', 'fontSize': '13px', 'lineColor': '#c8ccd1'}, 'flowchart': {'curve': 'basis', 'padding': 10, 'nodeSpacing': 45, 'rankSpacing': 45}}}%%
flowchart TD
KörperschaftsteuerBetrag_n0("KörperschaftsteuerBetrag<br/><br/>⟨§ 23 Absatz 1 KStG⟩")
KörperschaftsteuerBetrag_n1[/"zuVersteuerndesEinkommen: Euro"/]
KörperschaftsteuerBetrag_n2[/"veranlagungszeitraum: Ganzzahl"/]
KörperschaftsteuerBetrag_n3{"zuVersteuerndesEinkommen #lt;= 0"}
KörperschaftsteuerBetrag_n4["0"]
KörperschaftsteuerBetrag_n5["(zuVersteuerndesEinkommen *<br/>KstSatz(…)).abrunden()"]
KörperschaftsteuerBetrag_n6("Ergebnis: Euro")
KörperschaftsteuerBetrag_n1 --> KörperschaftsteuerBetrag_n0
KörperschaftsteuerBetrag_n2 --> KörperschaftsteuerBetrag_n0
KörperschaftsteuerBetrag_n3 -->|"ja"| KörperschaftsteuerBetrag_n4
KörperschaftsteuerBetrag_n3 -->|"nein"| KörperschaftsteuerBetrag_n5
KörperschaftsteuerBetrag_n0 --> KörperschaftsteuerBetrag_n3
KörperschaftsteuerBetrag_n4 --> KörperschaftsteuerBetrag_n6
KörperschaftsteuerBetrag_n5 --> KörperschaftsteuerBetrag_n6
click KörperschaftsteuerBetrag_n0 href "https://www.gesetze-im-internet.de/kstg_1977/__23.html" "Körperschaftsteuerbetrag nach § 23 Abs. 1 KStG: Steuersatz des Veranlagungszeitraums multipliziert mit dem zu versteuernden Einkommen, anschließend nach § 31 Satz 2 KStG **zu Gunsten des Steuerpflichtigen auf volle Euro abgerundet** (niedrigere Steuer = zu Gunsten). Bei einem zu versteuernden Einkommen von 0 oder weniger beträgt die Steuer 0 (keine negative Steuer; Verlustabzug regelt § 8 KStG i.V.m. § 10d EStG, hier nicht modelliert)." _blank
classDef start fill:#eef4fe,stroke:#a9c7f5,stroke-width:1px,color:#3c4043
class KörperschaftsteuerBetrag_n0 start
classDef eingabe fill:#e9f3fb,stroke:#b2d3ec,stroke-width:1px,color:#3c4043
class KörperschaftsteuerBetrag_n1,KörperschaftsteuerBetrag_n2 eingabe
classDef decision fill:#fdf6e0,stroke:#ecd79b,stroke-width:1px,color:#3c4043
class KörperschaftsteuerBetrag_n3 decision
classDef operation fill:#f6f7f8,stroke:#d8dce0,stroke-width:1px,color:#3c4043
class KörperschaftsteuerBetrag_n4,KörperschaftsteuerBetrag_n5 operation
classDef ende fill:#eaf5ee,stroke:#a6d5b8,stroke-width:1px,color:#3c4043
class KörperschaftsteuerBetrag_n6 ende
```
## Anwenden23Abs2
```mermaid
%%{init: {'fontFamily': 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace', 'themeVariables': {'fontFamily': 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace', 'fontSize': '13px', 'lineColor': '#c8ccd1'}, 'flowchart': {'curve': 'basis', 'padding': 10, 'nodeSpacing': 45, 'rankSpacing': 45}}}%%
flowchart TD
Anwenden23Abs2_n0("Anwenden23Abs2<br/><br/>⟨§ 23 Absatz 2 KStG⟩")
Anwenden23Abs2_n1[/"körperschaftsteuer: Euro"/]
Anwenden23Abs2_n2[/"anpassung: Prozent"/]
Anwenden23Abs2_n3["körperschaftsteuer +<br/>(körperschaftsteuer *<br/>anpassung).abrunden()"]
Anwenden23Abs2_n4("Ergebnis: Euro")
Anwenden23Abs2_n1 --> Anwenden23Abs2_n0
Anwenden23Abs2_n2 --> Anwenden23Abs2_n0
Anwenden23Abs2_n0 --> Anwenden23Abs2_n3
Anwenden23Abs2_n3 --> Anwenden23Abs2_n4
click Anwenden23Abs2_n0 href "https://www.gesetze-im-internet.de/kstg_1977/__23.html" "Anpassung der Körperschaftsteuer nach § 23 Abs. 2 KStG: wird die Einkommensteuer aufgrund der Ermächtigung des § 51 Abs. 3 EStG herab- oder heraufgesetzt, ermäßigt oder erhöht sich die Körperschaftsteuer entsprechend (proportional). Der Anpassungsbetrag wird nach der Wertung des § 31 Satz 2 KStG auf volle Euro abgerundet. In aller Regel ist der Anpassungssatz 0 % (keine Verordnung in Kraft → unverändert)." _blank
classDef start fill:#eef4fe,stroke:#a9c7f5,stroke-width:1px,color:#3c4043
class Anwenden23Abs2_n0 start
classDef eingabe fill:#e9f3fb,stroke:#b2d3ec,stroke-width:1px,color:#3c4043
class Anwenden23Abs2_n1,Anwenden23Abs2_n2 eingabe
classDef operation fill:#f6f7f8,stroke:#d8dce0,stroke-width:1px,color:#3c4043
class Anwenden23Abs2_n3 operation
classDef ende fill:#eaf5ee,stroke:#a6d5b8,stroke-width:1px,color:#3c4043
class Anwenden23Abs2_n4 ende
```
## BerechneKörperschaftsteuer
```mermaid
%%{init: {'fontFamily': 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace', 'themeVariables': {'fontFamily': 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace', 'fontSize': '13px', 'lineColor': '#c8ccd1'}, 'flowchart': {'curve': 'basis', 'padding': 10, 'nodeSpacing': 45, 'rankSpacing': 45}}}%%
flowchart TD
BerechneKörperschaftsteuer_n0("BerechneKörperschaftsteuer<br/><br/>⟨§ 7 KStG⟩")
BerechneKörperschaftsteuer_n1[/"fall: KörperschaftsteuerFall"/]
BerechneKörperschaftsteuer_n2[["freibetrag24 ← FreibetragNach24(…)"]]
BerechneKörperschaftsteuer_n3[["zve ← ZuVersteuerndesEinkommen(…)"]]
BerechneKörperschaftsteuer_n4[["satz ← KstSatz(…)"]]
BerechneKörperschaftsteuer_n5[["basis ← KörperschaftsteuerBetrag(…)"]]
BerechneKörperschaftsteuer_n6[["endgültig ← Anwenden23Abs2(…)"]]
BerechneKörperschaftsteuer_n7[["KörperschaftsteuerErgebnis(…)"]]
BerechneKörperschaftsteuer_n8("Ergebnis: KörperschaftsteuerErgebnis")
BerechneKörperschaftsteuer_n1 --> BerechneKörperschaftsteuer_n0
BerechneKörperschaftsteuer_n2 --> BerechneKörperschaftsteuer_n3
BerechneKörperschaftsteuer_n3 --> BerechneKörperschaftsteuer_n4
BerechneKörperschaftsteuer_n4 --> BerechneKörperschaftsteuer_n5
BerechneKörperschaftsteuer_n5 --> BerechneKörperschaftsteuer_n6
BerechneKörperschaftsteuer_n6 --> BerechneKörperschaftsteuer_n7
BerechneKörperschaftsteuer_n0 --> BerechneKörperschaftsteuer_n2
BerechneKörperschaftsteuer_n7 --> BerechneKörperschaftsteuer_n8
click BerechneKörperschaftsteuer_n0 href "https://www.gesetze-im-internet.de/kstg_1977/__7.html" "Vollständige Festsetzung der Körperschaftsteuer eines Steuerfalls in der gesetzlichen Reihenfolge: § 24 KStG (Freibetrag) → § 7 Abs. 2 KStG (zu versteuerndes Einkommen) → § 23 Abs. 1 KStG (Steuersatz × zvE) → § 31 Satz 2 KStG (Abrundung) → § 23 Abs. 2 KStG (Anpassung). Liefert alle Zwischengrößen für die Audit-Vorlage." _blank
classDef start fill:#eef4fe,stroke:#a9c7f5,stroke-width:1px,color:#3c4043
class BerechneKörperschaftsteuer_n0 start
classDef eingabe fill:#e9f3fb,stroke:#b2d3ec,stroke-width:1px,color:#3c4043
class BerechneKörperschaftsteuer_n1 eingabe
classDef subprogram fill:#eeeffb,stroke:#c3c6ef,stroke-width:1px,color:#3c4043
class BerechneKörperschaftsteuer_n2,BerechneKörperschaftsteuer_n3,BerechneKörperschaftsteuer_n4,BerechneKörperschaftsteuer_n5,BerechneKörperschaftsteuer_n6,BerechneKörperschaftsteuer_n7 subprogram
classDef ende fill:#eaf5ee,stroke:#a6d5b8,stroke-width:1px,color:#3c4043
class BerechneKörperschaftsteuer_n8 ende
```