mirror of
http://100.103.83.12:3003/fegger/odoo-at-payroll.git
synced 2026-09-17 08:52:45 +00:00
[IMP] l10n_at_hr_payroll_private: add settlement payments under § 67 Abs 8 lit a (AP15-C)
Complete the termination sequence with the settlement-sum path: comparison sums from court or out-of-court settlements, judgment/decision arrears and dismissal-objection payments are split between the statutory-severance and voluntary-severance rules and the settlement remainder. The remainder (VERGLEICH, bemessung neutral, sv_art laufend) reuses the lit-a/b fifth rule: after deducting the § 62 employee-rate contributions, one fifth stays tax-free capped at one fifth of nine times the monthly HBG (12 474 EUR 2026), and the remaining four fifths run with the payment-month tariff without touching the annual sixth. A new rule flag l10n_at_vergleich_bv marks the part paid for periods with a BV-Kasse entitlement: up to the parameterised cap at_lst_67_abs8_vergleich_bv (7 500 EUR 2026; § 67 Abs 8 is § 33a/§ 124b indexed) it is taxed at the flat 6 % rate with the contributions allocated pro rata (LStR Rz 1102b), while the excess falls back into the fifth rule. Both settlement rules stay payroll-levy liable (§ 41 Abs 4 lit b FLAG exempts only § 67 Abs 3 and 6) and SV-liable in the payment month, with per-Beitragsmonat roll-forward and insurance-period extension remaining documented manual options (lb-end-22, E-MVB 011-02-00-001). Identifiable severance components keep running through the existing statutory and voluntary severance machinery; a settlement expressly agreed as statutory severance is taxed in full under § 67 Abs 3 (VwGH 2013/13/0001 = ARD 6490/20/2016), and pension buy-outs (lit e) and social-plan payments (lit f) are out of scope. The wizard section requires confirmation of the settlement's itemisation and contested-claim status plus the BV entitlement, enforces the BV cap with the excess captured as remainder, and previews the free fifth, tariff basis and 6 % tax; the settlement memo lands on the payslip for the separate Lohnzettel workflow (LStR Rz 911a). The account matrix posts both settlement rules to the provisional 6200/6000 (workers 6000) and the new tax rule to 3540. Verified against the original statute text in .ris/ (EStG § 67 Abs 8 lit a) and the knowledge-base sources lb-end-21/22; KZ positioning of the lit-a tariff parts and their § 291d pot allocation remain documented verification points against LStR Rz 1087 ff. Version 19.0.15.0.0 (private)
This commit is contained in:
@@ -70,6 +70,7 @@ L10N_AT_BUCHUNGSMATRIX = {
|
||||
'rule_lst_sz': {'credit': ('3540',)},
|
||||
'rule_lst_abf': {'credit': ('3540',)},
|
||||
'rule_lst_abf_frei': {'credit': ('3540',)},
|
||||
'rule_lst_vergleich_bv': {'credit': ('3540',)},
|
||||
# Gesetzliche Abfertigung Alt: bis zur Referenzbuchhaltungs-
|
||||
# Fixierung allgemeiner Gehalts-/Lohnaufwand, company-dependent
|
||||
# Regelkonto bleibt übersteuerbar.
|
||||
@@ -78,6 +79,10 @@ L10N_AT_BUCHUNGSMATRIX = {
|
||||
# tarifischer Überhang — gleiche vorläufige Aufwandskonten.
|
||||
'rule_abf_frei': {'debit': ('6200',), 'debit_arbeiter': ('6000',)},
|
||||
'rule_abf_frei_tarif': {'debit': ('6200',), 'debit_arbeiter': ('6000',)},
|
||||
# Vergleichssumme (§ 67 Abs 8 lit a): Rest und BV-Anwartschafts-
|
||||
# Teil — gleiche vorläufige Aufwandskonten wie die Abfertigungen.
|
||||
'rule_vergleich': {'debit': ('6200',), 'debit_arbeiter': ('6000',)},
|
||||
'rule_vergleich_bv': {'debit': ('6200',), 'debit_arbeiter': ('6000',)},
|
||||
# Nettoauszahlung (reconcilable, s. o.)
|
||||
'rule_netto': {'credit': ('3850',)},
|
||||
# DG-Beiträge (650–655 SV Arbeiter · 656–659 SV Angestellte)
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
"""AP14-A: Endabrechnungs-Zyklus — Urlaubsersatzleistung (UEL),
|
||||
Abgangsentschädigung (§ 67 Abs 8 lit b), Aufrechnung offener Vorschüsse
|
||||
und Zeitguthaben/-schulden (§ 19e AZG).
|
||||
AP15-C: Vergleichssummen (§ 67 Abs 8 lit a).
|
||||
|
||||
Am Originalwortlaut verifiziert (.ris/, Stand 2026-09-14):
|
||||
- § 11 Abs 2 ASVG: die Pflichtversicherung besteht für die Zeit des
|
||||
@@ -25,6 +26,21 @@ Am Originalwortlaut verifiziert (.ris/, Stand 2026-09-14):
|
||||
- § 19e Abs 2 AZG: Guthaben an Normalarbeitszeit + 50 % Zuschlag
|
||||
(Entfall bei unberechtigtem vorzeitigem Austritt; KV kann
|
||||
abweichend regeln).
|
||||
- § 67 Abs 8 lit a EStG (AP15-C, Stand 2026-09-15): Vergleichssummen
|
||||
sind, SOWEIT sie nicht nach Abs 3, 6 oder dem letzten Satz mit dem
|
||||
festen Steuersatz zu versteuern sind, nach Abs 10 im Kalendermonat
|
||||
der Zahlung zu erfassen; nach Abzug der §-62-Z-3/4/5-Beiträge ist
|
||||
ein Fünftel steuerfrei (Deckel ein Fünftel des Neunfachen der
|
||||
monatlichen HBG), Abs 2 (Sechstel) ist nicht anzuwenden. Erkennbare
|
||||
Abfertigungsanteile laufen getrennt über Abs 3 (VwGH
|
||||
2013/13/0001 = ARD 6490/20/2016: ausdrücklich vereinbarte
|
||||
gesetzliche Abfertigung → gesamt Abs 3) bzw. Abs 6. Fallen die
|
||||
Vergleichssummen bei oder nach Beendigung an UND betreffen sie
|
||||
Zeiträume mit BV-Kassen-Anwartschaft, sind sie bis 7 500 € mit 6 %
|
||||
zu versteuern (parametrisiert, §-33a-Indexkette); der übersteigende
|
||||
Teil fällt in die Fünftelregelung zurück. SV-Aufrollung aktiver
|
||||
Ansprüche je Beitragsmonat bzw. PV-Verlängerung: lb-end-22
|
||||
(E-MVB 011-02-00-001), Kern-Mechanismus l10n_at_beitragsmonat.
|
||||
"""
|
||||
from datetime import timedelta
|
||||
|
||||
@@ -53,6 +69,13 @@ class HrSalaryRule(models.Model):
|
||||
'(Deckel: ein Fünftel des Neunfachen der monatlichen HBG), '
|
||||
'der Rest läuft tarifisch im Zuflussmonat — ohne '
|
||||
'Jahressechstel-Erhöhung (Abs 2 nicht anzuwenden).')
|
||||
l10n_at_vergleich_bv = fields.Boolean(
|
||||
string='AT § 67 Abs 8 lit a — BV-Anwartschafts-Teil',
|
||||
help='Teil einer Vergleichssumme, der bei oder nach Beendigung '
|
||||
'für Zeiträume mit BV-Kassen-Anwartschaft ausbezahlt wird: '
|
||||
'bis zum Deckel (at_lst_67_abs8_vergleich_bv, 2026: 7 500 €) '
|
||||
'mit 6 %, der übersteigende Teil fällt in die '
|
||||
'Fünftelregelung zurück. SV-pflichtig und LNK-pflichtig.')
|
||||
l10n_at_s26_z4_reise = fields.Boolean(
|
||||
string='AT § 26 Z 4 Reisevergütung',
|
||||
help='§-26-Z-4-Reisevergütungen zählen nicht in die '
|
||||
@@ -115,6 +138,13 @@ class HrPayslip(models.Model):
|
||||
l10n_at_abf_frei_nachweis = fields.Text(
|
||||
string='AT Freiwillige Abfertigung — Nachweis/Begründung',
|
||||
copy=False)
|
||||
l10n_at_vergleich_nachweis = fields.Text(
|
||||
string='AT Vergleich — Nachweis/Begründung', copy=False,
|
||||
help='Aufgliederung der Vergleichsvereinbarung (lb-end-21): '
|
||||
'strittige Ansprüche, erkennbare Abfertigungsanteile, '
|
||||
'BV-Anwartschafts-Zeiträume; beim Pauschalvergleich der '
|
||||
'Verhältnisfaktor Forderungsbetrag : Vergleichssumme '
|
||||
'(E-MVB 011-02-00-001).')
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# SV-Tage-Umrechnung und Verlängerungsmonate (§ 11 Abs 2 ASVG)
|
||||
@@ -401,6 +431,9 @@ class HrPayslip(models.Model):
|
||||
else:
|
||||
linie = self.line_ids.filtered(lambda l: l.code == rule.code)
|
||||
total += sum(linie.mapped('total'))
|
||||
# § 67 Abs 8 lit a: der über den BV-6-%-Deckel hinausgehende
|
||||
# Teil der Vergleichssumme fällt in die Fünftelregelung zurück.
|
||||
total += self._at_vergleich_bv_ueberhang(result_rules)
|
||||
return total
|
||||
|
||||
def _at_fuenftel_tarif_basis(self, result_rules=None):
|
||||
@@ -425,6 +458,77 @@ class HrPayslip(models.Model):
|
||||
frei = min(bemessung / 5.0, deckel)
|
||||
return bemessung - frei
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# Vergleichssumme — § 67 Abs 8 lit a (Rest, BV-Anwartschafts-Teil)
|
||||
# ------------------------------------------------------------------
|
||||
def _at_vergleich_bv_total(self, result_rules=None):
|
||||
"""Summe der als BV-Anwartschafts-Teil gekennzeichneten
|
||||
Vergleichs-Zeilen (Zeiträume mit BV-Kassen-Anwartschaft,
|
||||
§ 67 Abs 8 lit a letzter Satz)."""
|
||||
self.ensure_one()
|
||||
total = 0.0
|
||||
for rule in self.struct_id.rule_ids:
|
||||
if not rule.l10n_at_vergleich_bv:
|
||||
continue
|
||||
if result_rules is not None:
|
||||
if rule.code in result_rules:
|
||||
total += result_rules[rule.code]['total']
|
||||
else:
|
||||
total += sum(self.line_ids.filtered(
|
||||
lambda l, c=rule.code: l.code == c).mapped('total'))
|
||||
return total
|
||||
|
||||
def _at_vergleich_bv_beguenstigt(self, result_rules=None):
|
||||
"""Bis zum Deckel (2026: 7 500 €) begünstigter Teil — 6 %-Fahrspur
|
||||
(parametrisiert: § 67 Abs 8 unterliegt der Inflationsanpassung
|
||||
§ 33a/§ 124b EStG)."""
|
||||
self.ensure_one()
|
||||
deckel = float(self._l10n_at_param('at_lst_67_abs8_vergleich_bv'))
|
||||
return min(self._at_vergleich_bv_total(result_rules), deckel)
|
||||
|
||||
def _at_vergleich_bv_ueberhang(self, result_rules=None):
|
||||
"""Über den BV-Deckel hinausgehender Teil — fällt in die
|
||||
Fünftelregelung zurück (erster Satz des lit a)."""
|
||||
self.ensure_one()
|
||||
deckel = float(self._l10n_at_param('at_lst_67_abs8_vergleich_bv'))
|
||||
return max(self._at_vergleich_bv_total(result_rules) - deckel, 0.0)
|
||||
|
||||
def _at_vergleich_bv_lst_6(self, result_rules=None):
|
||||
"""6 % auf den begünstigten BV-Teil nach anteiligem §-62-Abzug
|
||||
(LStR Rz 1102b: die SV-Beiträge sind den Teilbeträgen
|
||||
anteilsmäßig zuzuordnen — approximiert über den effektiven
|
||||
DN-Satz der laufenden Basis, wie im Fünftelpfad)."""
|
||||
self.ensure_one()
|
||||
beguenstigt = self._at_vergleich_bv_beguenstigt(result_rules)
|
||||
if beguenstigt <= 0:
|
||||
return 0.0
|
||||
satz = sum(self._l10n_at_sv_satz(
|
||||
'dn', komponente,
|
||||
staffel_basis=self._l10n_at_sv_basis_roh(result_rules))
|
||||
for komponente in ('kv', 'pv', 'av', 'ak', 'wf'))
|
||||
bemessung = beguenstigt * (1.0 - satz / 100.0)
|
||||
steuersatz = float(self._l10n_at_param(
|
||||
'at_endabrechnung')['abfertigung_steuersatz'])
|
||||
return bemessung * steuersatz / 100.0
|
||||
|
||||
def _at_fuenftel_frei_betr(self, result_rules=None):
|
||||
"""Steuerfreies Fünftel der Fünftel-Bezüge (inkl. BV-Überhang),
|
||||
gedeckelt mit einem Fünftel des Neunfachen der monatlichen HBG
|
||||
(lb-end-21: 2026 6.930 × 9/5 = 12.474) — getrennt vom
|
||||
tarifischen Rest für die Wizard-Vorschau."""
|
||||
self.ensure_one()
|
||||
total = self._at_fuenftel_total(result_rules)
|
||||
if total <= 0:
|
||||
return 0.0
|
||||
satz = sum(self._l10n_at_sv_satz(
|
||||
'dn', komponente,
|
||||
staffel_basis=self._l10n_at_sv_basis_roh(result_rules))
|
||||
for komponente in ('kv', 'pv', 'av', 'ak', 'wf'))
|
||||
bemessung = max(total * (1.0 - satz / 100.0), 0.0)
|
||||
deckel = float(self._l10n_at_param('at_sv_hbg_monatlich')) \
|
||||
* 9.0 / 5.0
|
||||
return min(bemessung / 5.0, deckel)
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# Engine-Anbindung: Tarif-Teil ohne Sechstel, LNK-Pflicht, SV-Umlegung
|
||||
# ------------------------------------------------------------------
|
||||
@@ -438,11 +542,12 @@ class HrPayslip(models.Model):
|
||||
def _at_lnk_basis(self, steuer, result_rules=None):
|
||||
"""Upstream-Überschreibung (Muster account_posting_private;
|
||||
Vorlage payslip_private._at_lnk_basis — bei Änderungen dort
|
||||
gegen diesen Pin neu abgleichen): Kündigungsentschädigungen
|
||||
sind Arbeitslöhne iSd § 41 Abs 3 FLAG und unterliegen NICHT
|
||||
den Abs-4-Ausschlüssen (lit b nennt nur § 67 Abs 3 und 6) —
|
||||
sie sind VOR der Freibetragsstaffel in die LNK-Basis
|
||||
aufzunehmen."""
|
||||
gegen diesen Pin neu abgleichen): Kündigungsentschädigungen und
|
||||
Vergleichssummen sind Arbeitslöhne iSd § 41 Abs 3 FLAG und
|
||||
unterliegen NICHT den Abs-4-Ausschlüssen (lit b nennt nur
|
||||
§ 67 Abs 3 und 6 — der lit-a-BV-Teil ist ebenfalls nicht
|
||||
ausgenommen) — sie sind VOR der Freibetragsstaffel in die
|
||||
LNK-Basis aufzunehmen."""
|
||||
self.ensure_one()
|
||||
basis = (self._l10n_at_brutto('laufend', result_rules)
|
||||
+ self._l10n_at_brutto('sonstig', result_rules)
|
||||
@@ -457,6 +562,10 @@ class HrPayslip(models.Model):
|
||||
lambda l: l.code == rule.code)
|
||||
basis -= sum(linie.mapped('total'))
|
||||
basis += self._at_fuenftel_total(result_rules)
|
||||
# BV-Anwartschafts-Teil: begünstigter ≤-Deckel-Teil hier, der
|
||||
# Überhang läuft bereits über _at_fuenftel_total — zusammen
|
||||
# die volle Vergleichssumme, LNK-pflichtig (lb-end-20).
|
||||
basis += self._at_vergleich_bv_beguenstigt(result_rules)
|
||||
basis = max(basis, 0.0)
|
||||
if steuer in ('flaf', 'dz'):
|
||||
version = self.version_id
|
||||
|
||||
Reference in New Issue
Block a user