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: GP3 payroll tax integration (DN/SV and LSt rules, 67/68 rule flags, tests)
This commit is contained in:
@@ -0,0 +1,107 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<!-- ============================================================ -->
|
||||
<!-- GP3: Dünne DN-Regeln für die privatwirtschaftliche Structure. -->
|
||||
<!-- Logik/Werte vollständig im Kern (models/lohnsteuer.py + -->
|
||||
<!-- rule_parameters_lst_2026.xml): hr.salary.rule.struct_id ist -->
|
||||
<!-- required und rule_ids One2many — geteilte Kern-Regeln sind -->
|
||||
<!-- mechanisch unmöglich; hier nur 1-Zeilen-Bindungen in die -->
|
||||
<!-- lokale Abzugs-Kategorie (kein Wertefork, keine Logikfork). -->
|
||||
<!-- ============================================================ -->
|
||||
|
||||
<!-- DN-SV (§ 62-Abzugsposten; laufende Basis, HBG-capped). -->
|
||||
<record id="rule_svdn_kv" model="hr.salary.rule">
|
||||
<field name="name">SV-DN Krankenversicherung (§ 62 Z 1 iVm § 16 Abs 3)</field>
|
||||
<field name="code">SVDN_KV</field>
|
||||
<field name="sequence" eval="60"/>
|
||||
<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._l10n_at_svdn('kv', result_rules) > 0</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="l10n_at_bemessung">neutral</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
result = payslip._l10n_at_svdn('kv', result_rules)
|
||||
]]></field>
|
||||
</record>
|
||||
<record id="rule_svdn_pv" model="hr.salary.rule">
|
||||
<field name="name">SV-DN Pensionsversicherung (§ 62 Z 1 iVm § 16 Abs 3)</field>
|
||||
<field name="code">SVDN_PV</field>
|
||||
<field name="sequence" eval="61"/>
|
||||
<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._l10n_at_svdn('pv', result_rules) > 0</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
result = payslip._l10n_at_svdn('pv', result_rules)
|
||||
]]></field>
|
||||
</record>
|
||||
<record id="rule_svdn_av" model="hr.salary.rule">
|
||||
<field name="name">SV-DN Arbeitslosenversicherung (§ 62 Z 1 iVm § 16 Abs 3)</field>
|
||||
<field name="code">SVDN_AV</field>
|
||||
<field name="sequence" eval="62"/>
|
||||
<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._l10n_at_svdn('av', result_rules) > 0</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
result = payslip._l10n_at_svdn('av', result_rules)
|
||||
]]></field>
|
||||
</record>
|
||||
<record id="rule_svdn_ak" model="hr.salary.rule">
|
||||
<field name="name">AK-Umlage DN (§ 61 AKG; § 62 Z 3)</field>
|
||||
<field name="code">SVDN_AK</field>
|
||||
<field name="sequence" eval="63"/>
|
||||
<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._l10n_at_svdn('ak', result_rules) > 0</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
result = payslip._l10n_at_svdn('ak', result_rules)
|
||||
]]></field>
|
||||
</record>
|
||||
<record id="rule_svdn_wf" model="hr.salary.rule">
|
||||
<field name="name">WF-Beitrag DN (§ 62 Z 5; Wien 0,75 % via Company-Flag)</field>
|
||||
<field name="code">SVDN_WF</field>
|
||||
<field name="sequence" eval="64"/>
|
||||
<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._l10n_at_svdn('wf', result_rules) > 0</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
result = payslip._l10n_at_svdn('wf', result_rules)
|
||||
]]></field>
|
||||
</record>
|
||||
|
||||
<!-- Lohnsteuer: § 66 kumulativ (Rollung) + § 67 Fixsätze. -->
|
||||
<record id="rule_lst_lfd" model="hr.salary.rule">
|
||||
<field name="name">Lohnsteuer laufend (§ 66, kumulativ mit Rollung)</field>
|
||||
<field name="code">LST_LFD</field>
|
||||
<field name="sequence" eval="70"/>
|
||||
<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._l10n_at_lst_laufend(result_rules) > 0</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
result = payslip._l10n_at_lst_laufend(result_rules)
|
||||
]]></field>
|
||||
</record>
|
||||
<record id="rule_lst_sz" model="hr.salary.rule">
|
||||
<field name="name">Lohnsteuer sonstige Bezüge (§ 67 Fixsätze, Aufrollung)</field>
|
||||
<field name="code">LST_SZ</field>
|
||||
<field name="sequence" eval="71"/>
|
||||
<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._l10n_at_lst_sonstige(result_rules) > 0</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
result = payslip._l10n_at_lst_sonstige(result_rules)
|
||||
]]></field>
|
||||
</record>
|
||||
</odoo>
|
||||
@@ -19,6 +19,7 @@
|
||||
<field name="struct_id" ref="l10n_at_hr_payroll_private.structure_at_privat"/>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = bool(employee.kv_id and employee.kv_gruppe_id and (employee.ueberzahlung or employee.erfahrungsstufe))</field>
|
||||
<field name="l10n_at_bemessung">laufend</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
# § 17 KV: Stufen-Mindestgrundgehalt zum Stichtag; individuelle
|
||||
@@ -42,12 +43,16 @@ result = payslip._at_kv_gehalt_basis() * payslip._at_arbeitstage_faktor()
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = payslip._at_nacht_sv_stunden() > 0</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="l10n_at_bemessung">laufend</field>
|
||||
<field name="l10n_at_steuerbefreiung_68">szfn</field>
|
||||
<field name="l10n_at_zuschlagsanteil" eval="100.0"/>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
# § 6 KV: €-Satz je Nachtstunde (22–6), unabhängig von Gehalt,
|
||||
# Werk-/Sonn-/Feiertag und Zuschlagsstatus; Version je date_from
|
||||
# (2748: 2,71 € ab 2026, 2,76 € ab 2027).
|
||||
satz = float(employee.kv_id._wert('nacht_sonderverguetung', payslip.date_to))
|
||||
result = payslip._at_nacht_sv_stunden() * satz
|
||||
# (2748: 2,71 € ab 2026, 2,76 € ab 2027). § 68 Abs 1: SZFN-
|
||||
# steuerfrei (Regel-Flag szfn, Anteil 100 %).
|
||||
result = float(employee.kv_id._wert('nacht_sonderverguetung', payslip.date_to))
|
||||
result_qty = payslip._at_nacht_sv_stunden()
|
||||
]]></field>
|
||||
</record>
|
||||
|
||||
@@ -62,14 +67,17 @@ result = payslip._at_nacht_sv_stunden() * satz
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = 'ATP_UE_STD' in worked_days and worked_days['ATP_UE_STD'].number_of_hours > 0</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="l10n_at_bemessung">laufend</field>
|
||||
<field name="l10n_at_steuerbefreiung_68">ue_std</field>
|
||||
<field name="l10n_at_zuschlagsanteil" eval="100.0 * 50.0 / 150.0"/>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
# Grundstunde ÷ Teilungsfaktor ÜStd (§ 5 Abs 6 KV) + Zuschlag
|
||||
# Tag (kv.wert ue_zuschlag_tag). Höchstzuschlag § 5 Abs 7 über
|
||||
# die WET-Klassifikation (je Stunde genau ein Zuschlagstyp).
|
||||
# Grundstunde ÷ Teilungsfaktor ÜStd (§ 5 Abs 6 KV) + Zuschlag Tag
|
||||
# (kv.wert ue_zuschlag_tag). Pro Einheit (Stunde); Menge über
|
||||
# result_qty (§ 68 Abs 2: erste ÜStd — Steuerfreiheit über Regel-Flag).
|
||||
grund = payslip._at_grundstunde_ue()
|
||||
zuschlag = float(employee.kv_id._wert('ue_zuschlag_tag', payslip.date_to))
|
||||
stunden = worked_days['ATP_UE_STD'].number_of_hours
|
||||
result = stunden * grund * (1 + zuschlag / 100.0)
|
||||
result = grund * (1 + zuschlag / 100.0)
|
||||
result_qty = worked_days['ATP_UE_STD'].number_of_hours
|
||||
]]></field>
|
||||
</record>
|
||||
<record id="rule_ue_nacht" model="hr.salary.rule">
|
||||
@@ -81,13 +89,17 @@ result = stunden * grund * (1 + zuschlag / 100.0)
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = 'ATP_UE_NACHT' in worked_days and worked_days['ATP_UE_NACHT'].number_of_hours > 0</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="l10n_at_bemessung">laufend</field>
|
||||
<field name="l10n_at_steuerbefreiung_68">szfn</field>
|
||||
<field name="l10n_at_zuschlagsanteil" eval="50.0"/>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
# 100 %-Zuschlag-Fenster 20–6 (kv.wert ue_fenster_von/bis);
|
||||
# hier der Anteil 22–6 (€-Sondervergütung läuft über NACHT_SV).
|
||||
# § 68 Abs 1: SFN-Zuschläge steuerfrei bis 400 € (Regel-Flag szfn).
|
||||
grund = payslip._at_grundstunde_ue()
|
||||
zuschlag = float(employee.kv_id._wert('ue_zuschlag_nacht', payslip.date_to))
|
||||
stunden = worked_days['ATP_UE_NACHT'].number_of_hours
|
||||
result = stunden * grund * (1 + zuschlag / 100.0)
|
||||
result = grund * (1 + zuschlag / 100.0)
|
||||
result_qty = worked_days['ATP_UE_NACHT'].number_of_hours
|
||||
]]></field>
|
||||
</record>
|
||||
<record id="rule_ue_nacht_frueh" model="hr.salary.rule">
|
||||
@@ -99,13 +111,16 @@ result = stunden * grund * (1 + zuschlag / 100.0)
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = 'ATP_UE_NACHT_FRUEH' in worked_days and worked_days['ATP_UE_NACHT_FRUEH'].number_of_hours > 0</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="l10n_at_bemessung">laufend</field>
|
||||
<field name="l10n_at_steuerbefreiung_68">szfn</field>
|
||||
<field name="l10n_at_zuschlagsanteil" eval="50.0"/>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
# Randfenster 20–22 des 100 %-Zuschlags — keine €-Sondervergütung
|
||||
# (Abgrenzung RF-Z6: Zuschlag ja, Nacht-SV nein).
|
||||
grund = payslip._at_grundstunde_ue()
|
||||
zuschlag = float(employee.kv_id._wert('ue_zuschlag_nacht', payslip.date_to))
|
||||
stunden = worked_days['ATP_UE_NACHT_FRUEH'].number_of_hours
|
||||
result = stunden * grund * (1 + zuschlag / 100.0)
|
||||
result = grund * (1 + zuschlag / 100.0)
|
||||
result_qty = worked_days['ATP_UE_NACHT_FRUEH'].number_of_hours
|
||||
]]></field>
|
||||
</record>
|
||||
<record id="rule_ue_sofei" model="hr.salary.rule">
|
||||
@@ -117,13 +132,16 @@ result = stunden * grund * (1 + zuschlag / 100.0)
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = 'ATP_UE_SOFEI' in worked_days and worked_days['ATP_UE_SOFEI'].number_of_hours > 0</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="l10n_at_bemessung">laufend</field>
|
||||
<field name="l10n_at_steuerbefreiung_68">szfn</field>
|
||||
<field name="l10n_at_zuschlagsanteil" eval="50.0"/>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
# SonntagsüStd § 5 Abs 4, FeiertagsüStd ab erster Stunde § 5 Abs 5
|
||||
# iVm ARG — Zuschlag je kv.wert so_feiertag_zuschlag.
|
||||
grund = payslip._at_grundstunde_ue()
|
||||
zuschlag = float(employee.kv_id._wert('so_feiertag_zuschlag', payslip.date_to))
|
||||
stunden = worked_days['ATP_UE_SOFEI'].number_of_hours
|
||||
result = stunden * grund * (1 + zuschlag / 100.0)
|
||||
result = grund * (1 + zuschlag / 100.0)
|
||||
result_qty = worked_days['ATP_UE_SOFEI'].number_of_hours
|
||||
]]></field>
|
||||
</record>
|
||||
<record id="rule_ue_sofei_nacht" model="hr.salary.rule">
|
||||
@@ -135,14 +153,17 @@ result = stunden * grund * (1 + zuschlag / 100.0)
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = 'ATP_UE_SOFEI_NACHT' in worked_days and worked_days['ATP_UE_SOFEI_NACHT'].number_of_hours > 0</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="l10n_at_bemessung">laufend</field>
|
||||
<field name="l10n_at_steuerbefreiung_68">szfn</field>
|
||||
<field name="l10n_at_zuschlagsanteil" eval="50.0"/>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
# Zuschlagskumulation So/Fei × Nacht: nur der höchste Zuschlag
|
||||
# (§ 5 Abs 7) = 100 % einmal (Höchstzuschlag über WET-Klasse);
|
||||
# €-Sondervergütung separat über NACHT_SV.
|
||||
grund = payslip._at_grundstunde_ue()
|
||||
zuschlag = float(employee.kv_id._wert('so_feiertag_zuschlag', payslip.date_to))
|
||||
stunden = worked_days['ATP_UE_SOFEI_NACHT'].number_of_hours
|
||||
result = stunden * grund * (1 + zuschlag / 100.0)
|
||||
result = grund * (1 + zuschlag / 100.0)
|
||||
result_qty = worked_days['ATP_UE_SOFEI_NACHT'].number_of_hours
|
||||
]]></field>
|
||||
</record>
|
||||
|
||||
@@ -159,15 +180,18 @@ result = stunden * grund * (1 + zuschlag / 100.0)
|
||||
result = 'ATP_MEHR_VZ' in worked_days and worked_days['ATP_MEHR_VZ'].number_of_hours > 0 and bool(employee.kv_id._wert('mehrarbeit_zuschlag', payslip.date_to, raise_if_not_found=False))
|
||||
]]></field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="l10n_at_bemessung">laufend</field>
|
||||
<field name="l10n_at_steuerbefreiung_68">ue_std</field>
|
||||
<field name="l10n_at_zuschlagsanteil" eval="100.0 * 50.0 / 150.0"/>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
# § 4a KV: Zuschlag auf die Normalstunde (Basis ÷ Teilungsfaktor
|
||||
# Normalstunde, 2748: ÷ 167); zählt nicht gegen das ÜStd-Ausmaß;
|
||||
# Stunden mit > 50 %-Zuschlag sind ÜStd (§ 4a letzter Satz —
|
||||
# Klassifikation stromauf).
|
||||
# Normalstunde, 2748: ÷ 167); zählt nicht gegen das ÜStd-Ausmaß.
|
||||
# LSt: Differenzstunden-Zuschläge abgabenrechtlich wie ÜStd-Zuschläge
|
||||
# (LStR Rz 1146) → § 68 Abs 2-Bucket (Regel-Flag ue_std).
|
||||
grund = payslip._at_grundstunde_norm()
|
||||
zuschlag = float(employee.kv_id._wert('mehrarbeit_zuschlag', payslip.date_to))
|
||||
stunden = worked_days['ATP_MEHR_VZ'].number_of_hours
|
||||
result = stunden * grund * (1 + zuschlag / 100.0)
|
||||
result = grund * (1 + zuschlag / 100.0)
|
||||
result_qty = worked_days['ATP_MEHR_VZ'].number_of_hours
|
||||
]]></field>
|
||||
</record>
|
||||
<record id="rule_mehr_vz_nacht" model="hr.salary.rule">
|
||||
@@ -181,11 +205,14 @@ result = stunden * grund * (1 + zuschlag / 100.0)
|
||||
result = 'ATP_MEHR_VZ_NACHT' in worked_days and worked_days['ATP_MEHR_VZ_NACHT'].number_of_hours > 0 and bool(employee.kv_id._wert('mehrarbeit_zuschlag', payslip.date_to, raise_if_not_found=False))
|
||||
]]></field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="l10n_at_bemessung">laufend</field>
|
||||
<field name="l10n_at_steuerbefreiung_68">ue_std</field>
|
||||
<field name="l10n_at_zuschlagsanteil" eval="100.0 * 50.0 / 150.0"/>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
grund = payslip._at_grundstunde_norm()
|
||||
zuschlag = float(employee.kv_id._wert('mehrarbeit_zuschlag', payslip.date_to))
|
||||
stunden = worked_days['ATP_MEHR_VZ_NACHT'].number_of_hours
|
||||
result = stunden * grund * (1 + zuschlag / 100.0)
|
||||
result = grund * (1 + zuschlag / 100.0)
|
||||
result_qty = worked_days['ATP_MEHR_VZ_NACHT'].number_of_hours
|
||||
]]></field>
|
||||
</record>
|
||||
|
||||
@@ -201,15 +228,18 @@ result = stunden * grund * (1 + zuschlag / 100.0)
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = 'ATP_MEHR_TZ' in worked_days and worked_days['ATP_MEHR_TZ'].number_of_hours > 0</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="l10n_at_bemessung">laufend</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
# § 19d AZG: Stunden über Teilzeit-Ausmaß bis Vollzeit-NAZ;
|
||||
# Zuschlag 25 % gesetzlich (Kern-Parameter), KV kann besser
|
||||
# stellen (kv.wert-Code mehrarbeit_teilzeit_zuschlag).
|
||||
# LSt: Teilzeit-Mehrarbeitszuschläge voll steuerpflichtig
|
||||
# (kein §-68-Freibetrag — Regel-Flag keine).
|
||||
grund = payslip._at_grundstunde_norm()
|
||||
kv_zuschlag = employee.kv_id._wert('mehrarbeit_teilzeit_zuschlag', payslip.date_to, raise_if_not_found=False)
|
||||
zuschlag = float(kv_zuschlag) if kv_zuschlag else float(payslip._rule_parameter('at_mehrarbeit_teilzeit_zuschlag'))
|
||||
stunden = worked_days['ATP_MEHR_TZ'].number_of_hours
|
||||
result = stunden * grund * (1 + zuschlag / 100.0)
|
||||
result = grund * (1 + zuschlag / 100.0)
|
||||
result_qty = worked_days['ATP_MEHR_TZ'].number_of_hours
|
||||
]]></field>
|
||||
</record>
|
||||
<record id="rule_mehr_tz_nacht" model="hr.salary.rule">
|
||||
@@ -221,12 +251,13 @@ result = stunden * grund * (1 + zuschlag / 100.0)
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = 'ATP_MEHR_TZ_NACHT' in worked_days and worked_days['ATP_MEHR_TZ_NACHT'].number_of_hours > 0</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="l10n_at_bemessung">laufend</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
grund = payslip._at_grundstunde_norm()
|
||||
kv_zuschlag = employee.kv_id._wert('mehrarbeit_teilzeit_zuschlag', payslip.date_to, raise_if_not_found=False)
|
||||
zuschlag = float(kv_zuschlag) if kv_zuschlag else float(payslip._rule_parameter('at_mehrarbeit_teilzeit_zuschlag'))
|
||||
stunden = worked_days['ATP_MEHR_TZ_NACHT'].number_of_hours
|
||||
result = stunden * grund * (1 + zuschlag / 100.0)
|
||||
result = grund * (1 + zuschlag / 100.0)
|
||||
result_qty = worked_days['ATP_MEHR_TZ_NACHT'].number_of_hours
|
||||
]]></field>
|
||||
</record>
|
||||
|
||||
@@ -243,6 +274,7 @@ result = stunden * grund * (1 + zuschlag / 100.0)
|
||||
<field name="condition_python"><![CDATA[
|
||||
result = payslip._at_urlaub_ue_avg()[0] and any(wd.work_entry_type_id.is_leave for wd in payslip.worked_days_line_ids)
|
||||
]]></field>
|
||||
<field name="l10n_at_bemessung">laufend</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
# § 6 UrlG Abs 2: laufendes (monatsweises) Entgelt bleibt
|
||||
@@ -265,6 +297,7 @@ result = avg * urlaubstage / arbeitstage if arbeitstage and regelmaessig else 0.
|
||||
<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_PRAMIE' in inputs and inputs['ATP_PRAMIE'].amount</field>
|
||||
<field name="l10n_at_bemessung">laufend</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
result = inputs['ATP_PRAMIE'].amount
|
||||
@@ -281,6 +314,7 @@ result = inputs['ATP_PRAMIE'].amount
|
||||
<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_b13_faellig()</field>
|
||||
<field name="l10n_at_bemessung">sonstig</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
# Basis je kv.wert sz13_basis_monat: 'auszahlung' (2203) =
|
||||
@@ -301,6 +335,7 @@ result = payslip._at_sz_basis(basis_datum) * payslip._at_sz_dienstzeit_faktor()
|
||||
<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_b14_faellig()</field>
|
||||
<field name="l10n_at_bemessung">sonstig</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
# Fälligkeit § 11 Abs 3: bei Urlaubsantritt (R1: erstfälliger
|
||||
@@ -322,6 +357,7 @@ result = payslip._at_sz_basis(payslip.date_to) * payslip._at_sz_dienstzeit_fakto
|
||||
austritt = version.contract_date_end and payslip.date_from <= version.contract_date_end <= payslip.date_to
|
||||
result = bool(austritt and payslip._at_sz_bereits_bezahlt('B14'))
|
||||
]]></field>
|
||||
<field name="l10n_at_bemessung">sonstig</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
# § 11 Abs 4, 2. Satz: bei Austritt nach vollem B14-Bezug ist
|
||||
|
||||
Reference in New Issue
Block a user