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 voluntary severance under § 67 Abs 6 (AP15-B)
Split the voluntary severance into its privileged part and a tariff remainder on the exit run: the privileged part combines the quarter rule (1/4 of the last twelve months' running pay, capped at nine times the monthly HBG) with the twelfth rule (2/12 to 12/12 by proven service, capped at n × 3 × HBG), reduced per Z 3 by severance already received and the statutory claim due at this termination, all taxed at the flat 6 % rate. The excess runs as its own rule flagged l10n_at_s67_abs6_ueberhang: taxed with the running tariff of the payment month but excluded from the annual sixth, since Z 5 exempts only the Z 1/Z 2 amounts and the excess is a special payment, not running pay. The twelve-month basis aggregates validated prior runs plus own lines, excluding the flagged excess and § 26 Z 4 travel overhang via a dedicated rule flag. Free of SV (§ 49 Abs 3 Z 7 ASVG), payroll levies regardless of the 6 %/tarif split (§ 41 Abs 4 lit b FLAG, § 122 Abs 8 WKG, § 5 Abs 2 lit b KommStG) and BV contributions; the former BV-Anwartschaft exclusion Z 7 is repealed (BGBl I 118/2015). The wizard proposes the rolling basis and the statutory claim, previews Z 1/Z 2/reduction/privileged/excess/tax and requires explicit confirmation against claim-conversion risk. The § 291d EO termination pot nets both severance wage-tax rules; key 260 now includes LST_ABF_FREI. Verified against the original statute text in .ris/ (EStG § 67 Abs 6) and the knowledge-base sources lb-end-12/13/15; KZ positioning of Abs-6 amounts and the excess's § 291d pot allocation remain documented verification points against LStR Rz 1087 ff. Version 19.0.14.0.0 (private), 19.0.10.0.0 (core)
This commit is contained in:
@@ -35,4 +35,8 @@
|
||||
<field name="name">Gesetzliche Abfertigung Alt (Brutto)</field>
|
||||
<field name="code">ATP_ABF_ALT</field>
|
||||
</record>
|
||||
<record id="input_type_atp_abf_frei" model="hr.payslip.input.type">
|
||||
<field name="name">Freiwillige Abfertigung (Brutto)</field>
|
||||
<field name="code">ATP_ABF_FREI</field>
|
||||
</record>
|
||||
</odoo>
|
||||
@@ -91,6 +91,45 @@ result = inputs['ATP_ABF_ALT'].amount
|
||||
]]></field>
|
||||
</record>
|
||||
|
||||
<!-- Freiwillige Abfertigung (§ 67 Abs 6 EStG): begünstigter Teil
|
||||
(Viertel-/Zwölftelregelung mit 6 %) und tarifischer Überhang
|
||||
(Z 6) als getrennte Zeilen. -->
|
||||
<record id="rule_abf_frei" model="hr.salary.rule">
|
||||
<field name="name">Freiwillige Abfertigung — begünstigter Teil (§ 67 Abs 6)</field>
|
||||
<field name="code">ABF_FREI</field>
|
||||
<field name="sequence" eval="31"/>
|
||||
<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_FREI' in inputs and inputs['ATP_ABF_FREI'].amount</field>
|
||||
<field name="l10n_at_bemessung">neutral</field>
|
||||
<field name="l10n_at_sv_art">keine</field>
|
||||
<field name="l10n_at_s67_abs">abs6</field>
|
||||
<field name="l10n_at_pfandung_beendigung" eval="True"/>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
result = payslip._at_abf_frei_beguenstigt(result_rules)
|
||||
]]></field>
|
||||
</record>
|
||||
|
||||
<record id="rule_abf_frei_tarif" model="hr.salary.rule">
|
||||
<field name="name">Freiwillige Abfertigung — Überhang (§ 67 Abs 6 Z 6)</field>
|
||||
<field name="code">ABF_FREI_TARIF</field>
|
||||
<field name="sequence" eval="32"/>
|
||||
<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 = payslip._at_abf_frei_ueberhang(result_rules) > 0</field>
|
||||
<field name="l10n_at_bemessung">laufend</field>
|
||||
<field name="l10n_at_sv_art">keine</field>
|
||||
<field name="l10n_at_s67_abs">abs6</field>
|
||||
<field name="l10n_at_s67_abs6_ueberhang" eval="True"/>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
result = payslip._at_abf_frei_ueberhang(result_rules)
|
||||
]]></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>
|
||||
|
||||
@@ -119,4 +119,19 @@ result = payslip._l10n_at_lst_sonstige(result_rules)
|
||||
result = payslip._at_abf_alt_lohnsteuer(result_rules)
|
||||
]]></field>
|
||||
</record>
|
||||
<record id="rule_lst_abf_frei" model="hr.salary.rule">
|
||||
<field name="name">Lohnsteuer freiwillige Abfertigung (§ 67 Abs 6)</field>
|
||||
<field name="code">LST_ABF_FREI</field>
|
||||
<field name="sequence" eval="73"/>
|
||||
<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_frei_lst_6(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_frei_lst_6(result_rules)
|
||||
]]></field>
|
||||
</record>
|
||||
</odoo>
|
||||
@@ -33,6 +33,7 @@ result = inputs['EXPENSES'].amount
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = 'ATP_REISE_STEUERPFLICHTIG' in inputs and inputs['ATP_REISE_STEUERPFLICHTIG'].amount</field>
|
||||
<field name="l10n_at_bemessung">laufend</field>
|
||||
<field name="l10n_at_s26_z4_reise" eval="True"/>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
result = inputs['ATP_REISE_STEUERPFLICHTIG'].amount
|
||||
|
||||
Reference in New Issue
Block a user