import Decimal from 'decimal.js';
/**
* Type definitions for the German Wage Tax (Lohnsteuer) PAP algorithm.
*
* Extracted from the official BMF Programmablaufplan (PAP) XML pseudocode.
* All parameter names match the PAP exactly.
*
* Monetary values at the public API boundary are in Cent (integers).
* Internal calculations use Decimal (decimal.js) for arbitrary-precision arithmetic.
*/
/**
* Input parameters for Lohnsteuer calculation.
*
* All fields are optional -- omitted fields use their PAP-defined defaults.
* Monetary values are in **Cent** (integers). Rates are percentages.
* The PAP XML type annotations (int, BigDecimal, double) are noted in JSDoc;
* at the public API boundary everything is `number`.
*/
interface LohnsteuerInputs {
/**
* 1, wenn die Anwendung des Faktorverfahrens gewählt wurden (nur in Steuerklasse IV).
* PAP type: int. Default: 1
*/
af?: number;
/**
* Auf die Vollendung des 64. Lebensjahres folgendes
* Kalenderjahr (erforderlich, wenn ALTER1=1).
* PAP type: int. Default: 0
*/
AJAHR?: number;
/**
* 1, wenn das 64. Lebensjahr zu Beginn des Kalenderjahres vollendet wurde, in dem
* der Lohnzahlungszeitraum endet (§ 24a EStG), sonst = 0.
* PAP type: int. Default: 0
*/
ALTER1?: number;
/**
* Merker für die Vorsorgepauschale:
* 0 = der Arbeitnehmer ist in der Arbeitslosenversicherung pflichtversichert;
* es gilt die allgemeine Beitragsbemessungsgrenze.
* 1 = wenn nicht 0.
* PAP type: int. Default: 0
*/
ALV?: number;
/**
* Eingetragener Faktor mit drei Nachkommastellen.
* PAP type: double. Default: 1.0
*/
f?: number;
/**
* Jahresfreibetrag für die Ermittlung der Lohnsteuer für die sonstigen Bezüge
* sowie für Vermögensbeteiligungen nach § 19a Absatz 1 und 4 EStG nach Maßgabe der
* elektronischen Lohnsteuerabzugsmerkmale nach § 39e EStG oder der Eintragung
* auf der Bescheinigung für den Lohnsteuerabzug in Cent (ggf. 0).
* PAP type: BigDecimal (Cent integer at API boundary). Default: 0
*/
JFREIB?: number;
/**
* Jahreshinzurechnungsbetrag für die Ermittlung der Lohnsteuer für die sonstigen Bezüge
* sowie für Vermögensbeteiligungen nach § 19a Absatz 1 und 4 EStG nach Maßgabe der
* elektronischen Lohnsteuerabzugsmerkmale nach § 39e EStG oder der Eintragung auf der
* Bescheinigung für den Lohnsteuerabzug in Cent (ggf. 0).
* PAP type: BigDecimal (Cent integer at API boundary). Default: 0
*/
JHINZU?: number;
/**
* Voraussichtlicher Jahresarbeitslohn ohne sonstige Bezüge (d.h. auch ohne
* die zu besteuernden Vorteile bei Vermögensbeteiligungen, § 19a Absatz 4 EStG) in Cent.
* Erforderlich bei Eingaben zu sonstigen Bezügen (Feld SONSTB).
* Sind in einem vorangegangenen Abrechnungszeitraum bereits sonstige Bezüge gezahlt worden,
* so sind sie dem voraussichtlichen Jahresarbeitslohn hinzuzurechnen.
* PAP type: BigDecimal (Cent integer at API boundary). Default: 0
*/
JRE4?: number;
/**
* In JRE4 enthaltene Entschädigungen nach § 24 Nummer 1 EStG und zu besteuernde
* Vorteile bei Vermögensbeteiligungen (§ 19a Absatz 4 EStG) in Cent.
* PAP type: BigDecimal (Cent integer at API boundary). Default: 0
*/
JRE4ENT?: number;
/**
* In JRE4 enthaltene Versorgungsbezüge in Cent (ggf. 0).
* PAP type: BigDecimal (Cent integer at API boundary). Default: 0
*/
JVBEZ?: number;
/**
* Merker für die Vorsorgepauschale:
* 0 = der Arbeitnehmer ist in der gesetzlichen Rentenversicherung oder einer
* berufsständischen Versorgungseinrichtung pflichtversichert oder bei Befreiung
* von der Versicherungspflicht freiwillig versichert; es gilt die allgemeine
* Beitragsbemessungsgrenze.
* 1 = wenn nicht 0.
* PAP type: int. Default: 0
*/
KRV?: number;
/**
* Kassenindividueller Zusatzbeitragssatz bei einem gesetzlich krankenversicherten
* Arbeitnehmer in Prozent (bspw. 2.50 für 2,50 %) mit 2 Dezimalstellen.
* Es ist der volle Zusatzbeitragssatz anzugeben. Die Aufteilung in Arbeitnehmer-
* und Arbeitgeberanteil erfolgt im Programmablauf.
* PAP type: BigDecimal (percentage). Default: 0
*/
KVZ?: number;
/**
* Lohnzahlungszeitraum:
* 1 = Jahr, 2 = Monat, 3 = Woche, 4 = Tag.
* PAP type: int. Default: 1
*/
LZZ?: number;
/**
* Der als elektronisches Lohnsteuerabzugsmerkmal für den Arbeitgeber nach § 39e EStG
* festgestellte oder in der Bescheinigung für den Lohnsteuerabzug eingetragene
* Freibetrag für den Lohnzahlungszeitraum in Cent.
* PAP type: BigDecimal (Cent integer at API boundary). Default: 0
*/
LZZFREIB?: number;
/**
* Der als elektronisches Lohnsteuerabzugsmerkmal für den Arbeitgeber nach § 39e EStG
* festgestellte oder in der Bescheinigung für den Lohnsteuerabzug eingetragene
* Hinzurechnungsbetrag für den Lohnzahlungszeitraum in Cent.
* PAP type: BigDecimal (Cent integer at API boundary). Default: 0
*/
LZZHINZU?: number;
/**
* Nicht zu besteuernde Vorteile bei Vermögensbeteiligungen
* (§ 19a Absatz 1 Satz 4 EStG) in Cent.
* PAP type: BigDecimal (Cent integer at API boundary). Default: 0
*/
MBV?: number;
/**
* Dem Arbeitgeber mitgeteilte Beiträge des Arbeitnehmers für eine private
* Basiskranken- bzw. Pflege-Pflichtversicherung im Sinne des § 10 Absatz 1 Nummer 3 EStG
* in Cent; der Wert ist unabhängig vom Lohnzahlungszeitraum immer als Monatsbetrag
* anzugeben.
* PAP type: BigDecimal (Cent integer at API boundary). Default: 0
*/
PKPV?: number;
/**
* Arbeitgeberzuschuss für eine private Basiskranken- bzw. Pflege-Pflichtversicherung
* im Sinne des § 10 Absatz 1 Nummer 3 EStG in Cent; der Wert ist unabhängig vom
* Lohnzahlungszeitraum immer als Monatsbetrag anzugeben.
* PAP type: BigDecimal (Cent integer at API boundary). Default: 0
*/
PKPVAGZ?: number;
/**
* Krankenversicherung:
* 0 = gesetzlich krankenversicherte Arbeitnehmer.
* 1 = ausschließlich privat krankenversicherte Arbeitnehmer.
* PAP type: int. Default: 0
*/
PKV?: number;
/**
* Zahl der beim Arbeitnehmer zu berücksichtigenden Beitragsabschläge in der sozialen
* Pflegeversicherung bei mehr als einem Kind:
* 0 = kein Abschlag,
* 1 = Beitragsabschlag für das 2. Kind,
* 2 = Beitragsabschläge für das 2. und 3. Kind,
* 3 = Beitragsabschläge für 2. bis 4. Kinder,
* 4 = Beitragsabschläge für 2. bis 5. oder mehr Kinder.
* PAP type: BigDecimal (integer at API boundary). Default: 0
*/
PVA?: number;
/**
* 1, wenn bei der sozialen Pflegeversicherung die Besonderheiten in Sachsen
* zu berücksichtigen sind bzw. zu berücksichtigen wären.
* PAP type: int. Default: 0
*/
PVS?: number;
/**
* 1, wenn der Arbeitnehmer den Zuschlag zur sozialen Pflegeversicherung
* zu zahlen hat.
* PAP type: int. Default: 0
*/
PVZ?: number;
/**
* Religionsgemeinschaft des Arbeitnehmers lt. elektronischer Lohnsteuerabzugsmerkmale
* oder der Bescheinigung für den Lohnsteuerabzug (bei keiner Religionszugehörigkeit = 0).
* PAP type: int. No default specified.
*/
R?: number;
/**
* Steuerpflichtiger Arbeitslohn für den Lohnzahlungszeitraum vor Berücksichtigung des
* Versorgungsfreibetrags und des Zuschlags zum Versorgungsfreibetrag, des
* Altersentlastungsbetrags und des als elektronisches Lohnsteuerabzugsmerkmal
* festgestellten oder in der Bescheinigung für den Lohnsteuerabzug eingetragenen
* Freibetrags bzw. Hinzurechnungsbetrags in Cent.
* PAP type: BigDecimal (Cent integer at API boundary). Default: 0
*/
RE4?: number;
/**
* Sonstige Bezüge einschließlich zu besteuernde Vorteile bei Vermögensbeteiligungen
* und Sterbegeld bei Versorgungsbezügen sowie Kapitalauszahlungen/Abfindungen, in Cent
* (ggf. 0).
* PAP type: BigDecimal (Cent integer at API boundary). Default: 0
*/
SONSTB?: number;
/**
* In SONSTB enthaltene Entschädigungen nach § 24 Nummer 1 EStG sowie zu besteuernde
* Vorteile bei Vermögensbeteiligungen (§ 19a Absatz 4 EStG), in Cent.
* PAP type: BigDecimal (Cent integer at API boundary). Default: 0
*/
SONSTENT?: number;
/**
* Sterbegeld bei Versorgungsbezügen sowie Kapitalauszahlungen/Abfindungen
* (in SONSTB enthalten), in Cent.
* PAP type: BigDecimal (Cent integer at API boundary). Default: 0
*/
STERBE?: number;
/**
* Steuerklasse:
* 1 = I, 2 = II, 3 = III, 4 = IV, 5 = V, 6 = VI.
* PAP type: int. Default: 1
*/
STKL?: number;
/**
* In RE4 enthaltene Versorgungsbezüge in Cent (ggf. 0) ggf. unter Berücksichtigung
* einer geänderten Bemessungsgrundlage nach § 19 Absatz 2 Satz 10 und 11 EStG.
* PAP type: BigDecimal (Cent integer at API boundary). Default: 0
*/
VBEZ?: number;
/**
* Versorgungsbezug im Januar 2005 bzw. für den ersten vollen Monat, wenn der
* Versorgungsbezug erstmalig nach Januar 2005 gewährt wurde, in Cent.
* PAP type: BigDecimal (Cent integer at API boundary). Default: 0
*/
VBEZM?: number;
/**
* Voraussichtliche Sonderzahlungen von Versorgungsbezügen im Kalenderjahr des
* Versorgungsbeginns bei Versorgungsempfängern ohne Sterbegeld,
* Kapitalauszahlungen/Abfindungen in Cent.
* PAP type: BigDecimal (Cent integer at API boundary). Default: 0
*/
VBEZS?: number;
/**
* In SONSTB enthaltene Versorgungsbezüge einschließlich Sterbegeld in Cent (ggf. 0).
* PAP type: BigDecimal (Cent integer at API boundary). Default: 0
*/
VBS?: number;
/**
* Jahr, in dem der Versorgungsbezug erstmalig gewährt wurde; werden mehrere
* Versorgungsbezüge gezahlt, wird aus Vereinfachungsgründen für die Berechnung
* das Jahr des ältesten erstmaligen Bezugs herangezogen; auf die Möglichkeit der
* getrennten Abrechnung verschiedenartiger Bezüge (§ 39e Absatz 5a EStG) wird
* im Übrigen verwiesen.
* PAP type: int. Default: 0
*/
VJAHR?: number;
/**
* Zahl der Freibeträge für Kinder (eine Dezimalstelle, nur bei Steuerklassen
* I, II, III und IV).
* PAP type: BigDecimal (number at API boundary). Default: 0
*/
ZKF?: number;
/**
* Zahl der Monate, für die Versorgungsbezüge gezahlt werden
* (nur erforderlich bei Jahresberechnung, LZZ = 1).
* PAP type: int. Default: 0
*/
ZMVB?: number;
}
/**
* Output parameters from Lohnsteuer calculation.
*
* All values are in **Cent** (integers). STANDARD outputs are listed first,
* then DBA (Doppelbesteuerungsabkommen / tax treaty) outputs.
*/
interface LohnsteuerOutputs {
/** Bemessungsgrundlage für die Kirchenlohnsteuer in Cent. */
BK: number;
/**
* Bemessungsgrundlage der sonstigen Bezüge für die Kirchenlohnsteuer in Cent.
* Hinweis: Negativbeträge, die aus nicht zu besteuernden Vorteilen bei
* Vermögensbeteiligungen (§ 19a Absatz 1 Satz 4 EStG) resultieren, mindern BK
* (maximal bis 0). Der Sonderausgabenabzug für tatsächlich erbrachte Vorsorgeaufwendungen
* im Rahmen der Veranlagung zur Einkommensteuer bleibt unberührt.
*/
BKS: number;
/** Für den Lohnzahlungszeitraum einzubehaltende Lohnsteuer in Cent. */
LSTLZZ: number;
/** Für den Lohnzahlungszeitraum einzubehaltender Solidaritätszuschlag in Cent. */
SOLZLZZ: number;
/**
* Solidaritätszuschlag für sonstige Bezüge in Cent.
* Hinweis: Negativbeträge, die aus nicht zu besteuernden Vorteilen bei
* Vermögensbeteiligungen (§ 19a Absatz 1 Satz 4 EStG) resultieren,
* mindern SOLZLZZ (maximal bis 0).
*/
SOLZS: number;
/**
* Lohnsteuer für sonstige Bezüge in Cent.
* Hinweis: Negativbeträge, die aus nicht zu besteuernden Vorteilen bei
* Vermögensbeteiligungen (§ 19a Absatz 1 Satz 4 EStG) resultieren,
* mindern LSTLZZ (maximal bis 0).
*/
STS: number;
/** Verbrauchter Freibetrag bei Berechnung des laufenden Arbeitslohns, in Cent. */
VFRB: number;
/** Verbrauchter Freibetrag bei Berechnung des voraussichtlichen Jahresarbeitslohns, in Cent. */
VFRBS1: number;
/** Verbrauchter Freibetrag bei Berechnung der sonstigen Bezüge, in Cent. */
VFRBS2: number;
/**
* Für die weitergehende Berücksichtigung des Steuerfreibetrags nach dem DBA Türkei
* verfügbares ZVE über dem Grundfreibetrag bei der Berechnung des laufenden
* Arbeitslohns, in Cent.
*/
WVFRB: number;
/**
* Für die weitergehende Berücksichtigung des Steuerfreibetrags nach dem DBA Türkei
* verfügbares ZVE über dem Grundfreibetrag bei der Berechnung des voraussichtlichen
* Jahresarbeitslohns, in Cent.
*/
WVFRBO: number;
/**
* Für die weitergehende Berücksichtigung des Steuerfreibetrags nach dem DBA Türkei
* verfügbares ZVE über dem Grundfreibetrag bei der Berechnung der sonstigen Bezüge,
* in Cent.
*/
WVFRBM: number;
}
/**
* Internal calculation fields used by the PAP algorithm.
*
* All values use Decimal (decimal.js) for arbitrary-precision arithmetic.
* These are never exposed at the public API boundary.
*/
interface LohnsteuerInternals {
/** Altersentlastungsbetrag in Euro, Cent (2 Dezimalstellen). */
ALTE: Decimal;
/** Arbeitnehmer-Pauschbetrag / Werbungskosten-Pauschbetrag in Euro. */
ANP: Decimal;
/** Auf den Lohnzahlungszeitraum entfallender Anteil von Jahreswerten auf ganze Cent abgerundet. */
ANTEIL1: Decimal;
/** Beitragssatz des Arbeitnehmers zur Arbeitslosenversicherung (4 Dezimalstellen). */
AVSATZAN: Decimal;
/** Beitragsbemessungsgrenze in der gesetzlichen Krankenversicherung und der sozialen Pflegeversicherung in Euro. */
BBGKVPV: Decimal;
/** Allgemeine Beitragsbemessungsgrenze in der allgemeinen Rentenversicherung und Arbeitslosenversicherung in Euro. */
BBGRVALV: Decimal;
/** Bemessungsgrundlage für Altersentlastungsbetrag in Euro, Cent (2 Dezimalstellen). */
BMG: Decimal;
/** Differenz zwischen ST1 und ST2 in Euro. */
DIFF: Decimal;
/** Entlastungsbetrag für Alleinerziehende in Euro. */
EFA: Decimal;
/** Versorgungsfreibetrag in Euro, Cent (2 Dezimalstellen). */
FVB: Decimal;
/** Versorgungsfreibetrag in Euro, Cent (2 Dezimalstellen) für die Berechnung der Lohnsteuer beim sonstigen Bezug. */
FVBSO: Decimal;
/** Zuschlag zum Versorgungsfreibetrag in Euro. */
FVBZ: Decimal;
/** Zuschlag zum Versorgungsfreibetrag in Euro für die Berechnung der Lohnsteuer beim sonstigen Bezug. */
FVBZSO: Decimal;
/** Grundfreibetrag in Euro. */
GFB: Decimal;
/** Maximaler Altersentlastungsbetrag in Euro. */
HBALTE: Decimal;
/** Maßgeblicher maximaler Versorgungsfreibetrag in Euro, Cent (2 Dezimalstellen). */
HFVB: Decimal;
/** Maßgeblicher maximaler Zuschlag zum Versorgungsfreibetrag in Euro, Cent (2 Dezimalstellen). */
HFVBZ: Decimal;
/** Maßgeblicher maximaler Zuschlag zum Versorgungsfreibetrag in Euro, Cent (2 Dezimalstellen) für die Berechnung der Lohnsteuer für den sonstigen Bezug. */
HFVBZSO: Decimal;
/** Zwischenfeld zu X für die Berechnung der Steuer nach § 39b Absatz 2 Satz 7 EStG in Euro. */
HOCH: Decimal;
/** Nummer der Tabellenwerte für Versorgungsparameter. */
J: number;
/** Jahressteuer nach § 51a EStG, aus der Solidaritätszuschlag und Bemessungsgrundlage für die Kirchenlohnsteuer ermittelt werden, in Euro. */
JBMG: Decimal;
/** Auf einen Jahreslohn hochgerechneter LZZFREIB in Euro, Cent (2 Dezimalstellen). */
JLFREIB: Decimal;
/** Auf einen Jahreslohn hochgerechnete LZZHINZU in Euro, Cent (2 Dezimalstellen). */
JLHINZU: Decimal;
/** Jahreswert, dessen Anteil für einen Lohnzahlungszeitraum in UPANTEIL errechnet werden soll, in Cent. */
JW: Decimal;
/** Nummer der Tabellenwerte für Parameter bei Altersentlastungsbetrag. */
K: number;
/** Summe der Freibeträge für Kinder in Euro. */
KFB: Decimal;
/** Beitragssatz des Arbeitnehmers zur Krankenversicherung (5 Dezimalstellen). */
KVSATZAN: Decimal;
/** Kennzahl für die Einkommensteuer-Tabellenart: 1 = Grundtarif, 2 = Splittingverfahren. */
KZTAB: number;
/** Jahreslohnsteuer in Euro. */
LSTJAHR: Decimal;
/** Zwischenfeld der Jahreslohnsteuer in Cent (Lohnsteuer ohne sonstige Bezüge). */
LSTOSO: Decimal;
/** Zwischenfeld der Jahreslohnsteuer in Cent (Lohnsteuer mit sonstigen Bezügen). */
LSTSO: Decimal;
/** Mindeststeuer für die Steuerklassen V und VI in Euro. */
MIST: Decimal;
/** Auf einen Jahreswert hochgerechneter Arbeitgeberzuschuss für eine private Basiskranken- bzw. Pflege-Pflichtversicherung im Sinne des § 10 Absatz 1 Nummer 3 EStG in Euro, Cent (2 Dezimalstellen). */
PKPVAGZJ: Decimal;
/** Beitragssatz des Arbeitnehmers zur Pflegeversicherung (6 Dezimalstellen). */
PVSATZAN: Decimal;
/** Beitragssatz des Arbeitnehmers in der allgemeinen gesetzlichen Rentenversicherung (4 Dezimalstellen). */
RVSATZAN: Decimal;
/** Rechenwert in Gleitkommadarstellung. */
RW: Decimal;
/** Sonderausgaben-Pauschbetrag in Euro. */
SAP: Decimal;
/** Freigrenze für den Solidaritätszuschlag in Euro. */
SOLZFREI: Decimal;
/** Solidaritätszuschlag auf die Jahreslohnsteuer in Euro, Cent (2 Dezimalstellen). */
SOLZJ: Decimal;
/** Zwischenwert für den Solidaritätszuschlag auf die Jahreslohnsteuer in Euro, Cent (2 Dezimalstellen). */
SOLZMIN: Decimal;
/** Bemessungsgrundlage des Solidaritätszuschlags zur Prüfung der Freigrenze beim Solidaritätszuschlag für sonstige Bezüge in Euro. */
SOLZSBMG: Decimal;
/** Zu versteuerndes Einkommen für die Ermittlung der Bemessungsgrundlage des Solidaritätszuschlags zur Prüfung der Freigrenze beim Solidaritätszuschlag für sonstige Bezüge in Euro, Cent (2 Dezimalstellen). */
SOLZSZVE: Decimal;
/** Tarifliche Einkommensteuer in Euro. */
ST: Decimal;
/** Tarifliche Einkommensteuer auf das 1,25-fache ZX in Euro. */
ST1: Decimal;
/** Tarifliche Einkommensteuer auf das 0,75-fache ZX in Euro. */
ST2: Decimal;
/** Bemessungsgrundlage für den Versorgungsfreibetrag in Cent. */
VBEZB: Decimal;
/** Bemessungsgrundlage für den Versorgungsfreibetrag in Cent für den sonstigen Bezug. */
VBEZBSO: Decimal;
/** Zwischenfeld zu X für die Berechnung der Steuer nach § 39b Absatz 2 Satz 7 EStG in Euro. */
VERGL: Decimal;
/** Auf den Höchstbetrag begrenzte Beiträge zur Arbeitslosenversicherung einschließlich Kranken- und Pflegeversicherung in Euro, Cent (2 Dezimalstellen). */
VSPHB: Decimal;
/** Vorsorgepauschale mit Teilbeträgen für die Rentenversicherung sowie die gesetzliche Kranken- und soziale Pflegeversicherung nach fiktiven Beträgen oder ggf. für die private Basiskrankenversicherung und private Pflege-Pflichtversicherung in Euro, Cent (2 Dezimalstellen). */
VSP: Decimal;
/** Vorsorgepauschale mit Teilbeträgen für die Rentenversicherung sowie auf den Höchstbetrag begrenzten Teilbeträgen für die Arbeitslosen-, Kranken- und Pflegeversicherung in Euro, Cent (2 Dezimalstellen). */
VSPN: Decimal;
/** Teilbetrag für die Arbeitslosenversicherung bei der Berechnung der Vorsorgepauschale in Euro, Cent (2 Dezimalstellen). */
VSPALV: Decimal;
/** Vorsorgepauschale mit Teilbeträgen für die gesetzliche Kranken- und soziale Pflegeversicherung nach fiktiven Beträgen oder ggf. für die private Basiskrankenversicherung und private Pflege-Pflichtversicherung in Euro, Cent (2 Dezimalstellen). */
VSPKVPV: Decimal;
/** Teilbetrag für die Rentenversicherung bei der Berechnung der Vorsorgepauschale in Euro, Cent (2 Dezimalstellen). */
VSPR: Decimal;
/** Erster Grenzwert in Steuerklasse V/VI in Euro. */
W1STKL5: Decimal;
/** Zweiter Grenzwert in Steuerklasse V/VI in Euro. */
W2STKL5: Decimal;
/** Dritter Grenzwert in Steuerklasse V/VI in Euro. */
W3STKL5: Decimal;
/** Zu versteuerndes Einkommen gem. § 32a Absatz 1 und 5 EStG in Euro, Cent (2 Dezimalstellen). */
X: Decimal;
/** Gem. § 32a Absatz 1 EStG (6 Dezimalstellen). */
Y: Decimal;
/** Auf einen Jahreslohn hochgerechnetes RE4 in Euro, Cent (2 Dezimalstellen) nach Abzug der Freibeträge nach § 39b Absatz 2 Satz 3 und 4 EStG. */
ZRE4: Decimal;
/** Auf einen Jahreslohn hochgerechnetes RE4 in Euro, Cent (2 Dezimalstellen). */
ZRE4J: Decimal;
/** Auf einen Jahreslohn hochgerechnetes RE4, ggf. nach Abzug der Entschädigungen i.S.d. § 24 Nummer 1 EStG in Euro, Cent (2 Dezimalstellen). */
ZRE4VP: Decimal;
/** Zwischenfeld zu ZRE4VP für die Begrenzung auf die jeweilige Beitragsbemessungsgrenze in Euro, Cent (2 Dezimalstellen). */
ZRE4VPR: Decimal;
/** Feste Tabellenfreibeträge (ohne Vorsorgepauschale) in Euro, Cent (2 Dezimalstellen). */
ZTABFB: Decimal;
/** Auf einen Jahreslohn hochgerechnetes VBEZ abzüglich FVB in Euro, Cent (2 Dezimalstellen). */
ZVBEZ: Decimal;
/** Auf einen Jahreslohn hochgerechnetes VBEZ in Euro, Cent (2 Dezimalstellen). */
ZVBEZJ: Decimal;
/** Zu versteuerndes Einkommen in Euro, Cent (2 Dezimalstellen). */
ZVE: Decimal;
/** Zwischenfeld zu X für die Berechnung der Steuer nach § 39b Absatz 2 Satz 7 EStG in Euro. */
ZX: Decimal;
/** Zwischenfeld zu X für die Berechnung der Steuer nach § 39b Absatz 2 Satz 7 EStG in Euro. */
ZZX: Decimal;
}
/**
* PAP constant table arrays and numeric constants.
*
* TAB1-TAB5 are indexed by J or K (1-based; index 0 is unused placeholder ZERO).
* ZAHL constants are frequently-used BigDecimal values in the PAP pseudocode.
*/
interface PapConstants {
/** Tabelle für die Prozentsätze des Versorgungsfreibetrags (index 0..54). */
TAB1: readonly Decimal[];
/** Tabelle für die Höchstbeträge des Versorgungsfreibetrags (index 0..54). */
TAB2: readonly Decimal[];
/** Tabelle für die Zuschläge zum Versorgungsfreibetrag (index 0..54). */
TAB3: readonly Decimal[];
/** Tabelle für die Prozentsätze des Altersentlastungsbetrags (index 0..54). */
TAB4: readonly Decimal[];
/** Tabelle für die Höchstbeträge des Altersentlastungsbetrags (index 0..54). */
TAB5: readonly Decimal[];
/** BigDecimal constant: 1 */
ZAHL1: Decimal;
/** BigDecimal constant: 2 */
ZAHL2: Decimal;
/** BigDecimal constant: 5 */
ZAHL5: Decimal;
/** BigDecimal constant: 7 */
ZAHL7: Decimal;
/** BigDecimal constant: 12 */
ZAHL12: Decimal;
/** BigDecimal constant: 100 */
ZAHL100: Decimal;
/** BigDecimal constant: 360 */
ZAHL360: Decimal;
/** BigDecimal constant: 500 */
ZAHL500: Decimal;
/** BigDecimal constant: 700 */
ZAHL700: Decimal;
/** BigDecimal constant: 1000 */
ZAHL1000: Decimal;
/** BigDecimal constant: 10000 */
ZAHL10000: Decimal;
}
/**
* Interface that each PAP year implementation must satisfy.
*
* Usage:
* ```typescript
* const pap: PapInstance = new Pap2026();
* pap.setInputs({ LZZ: 2, RE4: 500000, STKL: 1, KVZ: 2.5, PVZ: 1 });
* pap.calculate();
* const result = pap.getOutputs();
* // result.LSTLZZ -> 78583 (Cent)
* ```
*/
interface PapInstance {
/** Set input parameters. Omitted fields use PAP-defined defaults. */
setInputs(inputs: LohnsteuerInputs): void;
/** Execute the full PAP algorithm (MAIN and all sub-methods). */
calculate(): void;
/** Retrieve all output parameters after calculation. Values are in Cent. */
getOutputs(): LohnsteuerOutputs;
}
/**
* Default values for all input parameters as specified in the PAP XML.
*
* These are the values used when an input is omitted. Matches the `default`
* attribute from each `` element in the PAP XML.
*/
declare const INPUT_DEFAULTS: Required;
/**
* Names of all STANDARD output fields in the order defined by the PAP XML.
*/
declare const STANDARD_OUTPUT_NAMES: readonly ["BK", "BKS", "LSTLZZ", "SOLZLZZ", "SOLZS", "STS"];
/**
* Names of all DBA output fields in the order defined by the PAP XML.
*/
declare const DBA_OUTPUT_NAMES: readonly ["VFRB", "VFRBS1", "VFRBS2", "WVFRB", "WVFRBO", "WVFRBM"];
/**
* All output field names combined.
*/
declare const ALL_OUTPUT_NAMES: readonly ["BK", "BKS", "LSTLZZ", "SOLZLZZ", "SOLZS", "STS", "VFRB", "VFRBS1", "VFRBS2", "WVFRB", "WVFRBO", "WVFRBM"];
/**
* Calculate German wage tax (Lohnsteuer) for the given year and inputs.
*
* @param year - Tax year (e.g. 2025, 2026)
* @param inputs - Input parameters (all monetary values in Cent)
* @returns Output values (all monetary values in Cent)
*
* @example
* ```typescript
* const result = calculate(2026, { LZZ: 2, RE4: 500000, STKL: 1 });
* console.log(result.LSTLZZ); // Wage tax in Cent
* ```
*/
declare function calculate(year: number, inputs: LohnsteuerInputs): LohnsteuerOutputs;
/** List of supported tax years. */
declare const SUPPORTED_YEARS: number[];
export { ALL_OUTPUT_NAMES, DBA_OUTPUT_NAMES, INPUT_DEFAULTS, type LohnsteuerInputs, type LohnsteuerInternals, type LohnsteuerOutputs, type PapConstants, type PapInstance, STANDARD_OUTPUT_NAMES, SUPPORTED_YEARS, calculate };