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 statutory old-system severance (AP15-A)
Pay the pre-2003 AngG severance from the end-of-employment run as its own neutral benefit line: free of SV (§ 49 Abs 3 Z 7 ASVG) and payroll levies, outside the annual sixth, and collected into the § 291d EO termination pot net of its own wage tax. Taxation follows the binding better-of rule of § 67 Abs 3 EStG: multiple-of-method (tariff wage tax on the running monthly wage × the statutory multiple of the payout) versus the flat 6 % rate, applied mandatorily in favour of the employee. The tariff wage tax is captured as a separately confirmed value instead of deriving it from gross pay through the § 62 engine. The wizard enforces § 23a Abs 3 AngG (parental exit needs five uninterrupted years), blocks BMSVG-new contracts except frozen claims and validates AGRD 02/06 against the claim type. The LNK basis subtracts § 67 Abs 3/6 rules only when they actually run in the tax base, the L16 generator reports LST_ABF in key 260 outside 210/220, and result_rules access in the garnishment paths avoids DefaultDictPayroll materialisation. Verified against the original statute texts in .ris/ (AngG §§ 23/23a, EStG § 67 Abs 3). Version 19.0.13.0.0 (private), 19.0.9.0.0 (core)
This commit is contained in:
@@ -31,4 +31,8 @@
|
||||
<field name="name">Aufrechnung offener Vorschuss (Netto)</field>
|
||||
<field name="code">ATP_ABRECHNUNG_VORSCHUSS</field>
|
||||
</record>
|
||||
<record id="input_type_atp_abf_alt" model="hr.payslip.input.type">
|
||||
<field name="name">Gesetzliche Abfertigung Alt (Brutto)</field>
|
||||
<field name="code">ATP_ABF_ALT</field>
|
||||
</record>
|
||||
</odoo>
|
||||
@@ -12,6 +12,6 @@
|
||||
model="hr.rule.parameter.value">
|
||||
<field name="rule_parameter_id" ref="hr_rule_parameter_at_endabrechnung"/>
|
||||
<field name="date_from">2026-01-01</field>
|
||||
<field name="parameter_value">{'divisor_werktage': 26.0, 'divisor_arbeitstage': 22.0}</field>
|
||||
<field name="parameter_value">{'divisor_werktage': 26.0, 'divisor_arbeitstage': 22.0, 'abfertigung_alt_staffel': [[36, 2.0], [60, 3.0], [120, 4.0], [180, 6.0], [240, 9.0], [300, 12.0]], 'abfertigung_steuersatz': 6.0}</field>
|
||||
</record>
|
||||
</odoo>
|
||||
@@ -72,6 +72,25 @@ result = inputs['ATP_ABGANG'].amount
|
||||
]]></field>
|
||||
</record>
|
||||
|
||||
<!-- Gesetzliche Abfertigung Alt (§§ 23/23a AngG, § 67 Abs 3 EStG). -->
|
||||
<record id="rule_abf_alt" model="hr.salary.rule">
|
||||
<field name="name">Gesetzliche Abfertigung Alt (§ 67 Abs 3)</field>
|
||||
<field name="code">ABF_ALT</field>
|
||||
<field name="sequence" eval="30"/>
|
||||
<field name="category_id" ref="l10n_at_hr_payroll_private.category_atp_brutto"/>
|
||||
<field name="struct_id" ref="l10n_at_hr_payroll_private.structure_at_privat"/>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = 'ATP_ABF_ALT' in inputs and inputs['ATP_ABF_ALT'].amount</field>
|
||||
<field name="l10n_at_bemessung">neutral</field>
|
||||
<field name="l10n_at_sv_art">keine</field>
|
||||
<field name="l10n_at_s67_abs">abs3</field>
|
||||
<field name="l10n_at_pfandung_beendigung" eval="True"/>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
result = inputs['ATP_ABF_ALT'].amount
|
||||
]]></field>
|
||||
</record>
|
||||
|
||||
<!-- Zeitguthaben an Normalarbeitszeit (§ 19e Abs 2 AZG: + 50 %). -->
|
||||
<record id="rule_zeit_guthaben" model="hr.salary.rule">
|
||||
<field name="name">Zeitguthaben Normalarbeitszeit + 50 % (§ 19e Abs 2 AZG)</field>
|
||||
|
||||
@@ -104,4 +104,19 @@ result = payslip._l10n_at_lst_laufend(result_rules)
|
||||
result = payslip._l10n_at_lst_sonstige(result_rules)
|
||||
]]></field>
|
||||
</record>
|
||||
<record id="rule_lst_abf" model="hr.salary.rule">
|
||||
<field name="name">Lohnsteuer Abfertigung Alt (§ 67 Abs 3)</field>
|
||||
<field name="code">LST_ABF</field>
|
||||
<field name="sequence" eval="72"/>
|
||||
<field name="category_id" ref="l10n_at_hr_payroll_private.category_atp_abzug"/>
|
||||
<field name="struct_id" ref="l10n_at_hr_payroll_private.structure_at_privat"/>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = payslip._at_abf_alt_lohnsteuer(result_rules) > 0</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="l10n_at_bemessung">neutral</field>
|
||||
<field name="l10n_at_sv_art">keine</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
result = payslip._at_abf_alt_lohnsteuer(result_rules)
|
||||
]]></field>
|
||||
</record>
|
||||
</odoo>
|
||||
@@ -56,4 +56,23 @@ result = (payslip._at_pfaendung_masse(result_rules, 'sz13')
|
||||
+ payslip._at_pfaendung_masse(result_rules, 'sz14'))
|
||||
]]></field>
|
||||
</record>
|
||||
|
||||
<record id="rule_pfaendung_end" model="hr.salary.rule">
|
||||
<field name="name">Lohnpfändung — Beendigungsansprüche (§ 291d EO)</field>
|
||||
<field name="code">PFAENDUNG_END</field>
|
||||
<field name="sequence" eval="77"/>
|
||||
<field name="category_id" ref="l10n_at_hr_payroll_private.category_atp_abzug"/>
|
||||
<field name="struct_id" ref="l10n_at_hr_payroll_private.structure_at_privat"/>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python"><![CDATA[
|
||||
result = bool(payslip.employee_id._at_pfaendungen_aktiv(payslip.date_to)) \
|
||||
and payslip._at_pfaendung_masse(result_rules, 'beendigung') > 0
|
||||
]]></field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="l10n_at_bemessung">neutral</field>
|
||||
<field name="l10n_at_sv_art">keine</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
result = payslip._at_pfaendung_masse(result_rules, 'beendigung')
|
||||
]]></field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
||||
Reference in New Issue
Block a user