mirror of
http://100.103.83.12:3003/fegger/odoo-at-payroll.git
synced 2026-09-17 08:52:45 +00:00
[FIX] l10n_at_gemeinde_payroll: Modul erstmals installierbar — 9 Odoo-19-Latenzfehler; BDA-Vordienstzeiten-Vorschlag (AP10+AP9)
AP10 — Latenzfehler des nie installierten Vorlaufs: - regular_pay auf hr.payroll.structure entfernt (Feld existiert nicht) - is_paid/round_days/round_days_type von WET-Records entfernt - Falscher XML-ID-Praefix payroll_structure_bgld. -> Modul-Referenzen - amount_select 'python' -> 'code' (Selection) - import in Regelcode entfernt (safe_eval verbietet IMPORT_NAME) - rules['ME'].total -> result_rules['ME']['total'] (Odoo 19 befuellt rules nie; SZQ-Sonderzahlung rechnete gegen Null) - categories.X -> categories['X'] (NETTO-Regel) - work_time_rate /100 entfernt (Odoo 19 speichert Bruchteil 0..1) - nie gelaufene Tests: Payslip-name-Pflichtfeld, Stichtag vor Katalog-Gueltigkeit (Wizard-Skip korrekt), date_start ist Compute aus contract_date_start AP9 — BDA-Vordienstzeiten (GemBG S 67 Abs 1-3, RIS LrB GesNr 20001002 verifiziert): Feld vordienstzeiten_monate (Help dokumentiert Anrechnungskatalog inkl. Obergrenzen), Compute bda_vorschlag (Vertragsbeginn - Monate), Uebernahme-Button als Verwaltungsakt, View-Erweiterung
This commit is contained in:
@@ -16,7 +16,6 @@
|
||||
<field name="name">Gemeindebedienstete (Bgld. GemBG 2014)</field>
|
||||
<field name="code">GEMBG.BGLD</field>
|
||||
<field name="type_id" ref="structure_type_gembg_bgld"/>
|
||||
<field name="regular_pay" eval="True"/>
|
||||
</record>
|
||||
|
||||
<!-- ============================================================ -->
|
||||
@@ -42,47 +41,32 @@
|
||||
<!-- ============================================================ -->
|
||||
<!-- Work-Entry-Types für GemBG-Komponenten -->
|
||||
<!-- ============================================================ -->
|
||||
<!-- Odoo 19: hr.work.entry.type hat weder is_paid noch
|
||||
round_days/round_days_type mehr (Latenzfehler des Bgld-
|
||||
Vorlaufs, entfernt). -->
|
||||
<record id="work_entry_type_ueberstunden_tag" model="hr.work.entry.type">
|
||||
<field name="name">Überstunden (tagsüber, § 76 GemBG)</field>
|
||||
<field name="code">GEMBG_UEB_TAG</field>
|
||||
<field name="round_days">NO</field>
|
||||
<field name="round_days_type">DOWN</field>
|
||||
<field name="is_paid" eval="True"/>
|
||||
</record>
|
||||
<record id="work_entry_type_ueberstunden_nacht" model="hr.work.entry.type">
|
||||
<field name="name">Überstunden (Nachtzeit 22-6 Uhr, § 76 GemBG)</field>
|
||||
<field name="code">GEMBG_UEB_NACHT</field>
|
||||
<field name="round_days">NO</field>
|
||||
<field name="round_days_type">DOWN</field>
|
||||
<field name="is_paid" eval="True"/>
|
||||
</record>
|
||||
<record id="work_entry_type_mehrdienst" model="hr.work.entry.type">
|
||||
<field name="name">Mehrdienstleistung (§ 76 GemBG)</field>
|
||||
<field name="code">GEMBG_MEHR</field>
|
||||
<field name="round_days">NO</field>
|
||||
<field name="round_days_type">DOWN</field>
|
||||
<field name="is_paid" eval="True"/>
|
||||
</record>
|
||||
<record id="work_entry_type_journaldienst" model="hr.work.entry.type">
|
||||
<field name="name">Journaldienst (§ 79 GemBG)</field>
|
||||
<field name="code">GEMBG_JOURNAL</field>
|
||||
<field name="round_days">NO</field>
|
||||
<field name="round_days_type">DOWN</field>
|
||||
<field name="is_paid" eval="True"/>
|
||||
</record>
|
||||
<record id="work_entry_type_bereitschaft" model="hr.work.entry.type">
|
||||
<field name="name">Bereitschaftsdienst (§ 80 GemBG)</field>
|
||||
<field name="code">GEMBG_BEREIT</field>
|
||||
<field name="round_days">NO</field>
|
||||
<field name="round_days_type">DOWN</field>
|
||||
<field name="is_paid" eval="True"/>
|
||||
</record>
|
||||
<record id="work_entry_type_sonn_feiertag" model="hr.work.entry.type">
|
||||
<field name="name">Sonn-/Feiertagsdienst (§ 78 GemBG)</field>
|
||||
<field name="code">GEMBG_SONNFEI</field>
|
||||
<field name="round_days">NO</field>
|
||||
<field name="round_days_type">DOWN</field>
|
||||
<field name="is_paid" eval="True"/>
|
||||
</record>
|
||||
|
||||
<!-- ============================================================ -->
|
||||
|
||||
@@ -7,11 +7,11 @@
|
||||
<field name="name">Monatsentgelt</field>
|
||||
<field name="code">ME</field>
|
||||
<field name="sequence" eval="1"/>
|
||||
<field name="category_id" ref="payroll_structure_bgld.category_gembg_brutto"/>
|
||||
<field name="struct_id" ref="payroll_structure_bgld.structure_gembg_bgld"/>
|
||||
<field name="category_id" ref="category_gembg_brutto"/>
|
||||
<field name="struct_id" ref="structure_gembg_bgld"/>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = bool(employee.entlohnungsgruppe_id and employee.entlohnungsstufe)</field>
|
||||
<field name="amount_select">python</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
# Monatsentgelt nach Bgld. GemBG 2014 (IVa. Hauptstück §§ 133 ff).
|
||||
# Katalog-Lookup: Entlohnungsgruppe + Stufe + Stichtag.
|
||||
@@ -24,9 +24,10 @@ else:
|
||||
# Ausbildungsphase: 5 % Abzug (§ 133h GemBG)
|
||||
if employee.ausbildungsphase:
|
||||
base *= 0.95
|
||||
# Teilzeit: anteilig über work_time_rate (§ 59 GemBG)
|
||||
work_rate = employee.work_time_rate or 100.0
|
||||
result = base * work_rate / 100.0
|
||||
# Teilzeit: anteilig über work_time_rate (§ 59 GemBG) — Odoo 19
|
||||
# speichert work_time_rate als Bruchteil 0..1 (nicht Prozent).
|
||||
work_rate = employee.work_time_rate or 1.0
|
||||
result = base * work_rate
|
||||
]]></field>
|
||||
</record>
|
||||
|
||||
@@ -37,8 +38,8 @@ else:
|
||||
<field name="name">Kinderzulage (§ 61 GemBG)</field>
|
||||
<field name="code">KIZU</field>
|
||||
<field name="sequence" eval="2"/>
|
||||
<field name="category_id" ref="payroll_structure_bgld.category_gembg_brutto"/>
|
||||
<field name="struct_id" ref="payroll_structure_bgld.structure_gembg_bgld"/>
|
||||
<field name="category_id" ref="category_gembg_brutto"/>
|
||||
<field name="struct_id" ref="structure_gembg_bgld"/>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = employee.kinder_anzahl > 0</field>
|
||||
<field name="amount_select">code</field>
|
||||
@@ -58,16 +59,16 @@ result = employee.kinder_anzahl * kiz_satz
|
||||
<field name="name">Funktionszulage (§ 62 GemBG)</field>
|
||||
<field name="code">FUZU</field>
|
||||
<field name="sequence" eval="3"/>
|
||||
<field name="category_id" ref="payroll_structure_bgld.category_gembg_brutto"/>
|
||||
<field name="struct_id" ref="payroll_structure_bgld.structure_gembg_bgld"/>
|
||||
<field name="category_id" ref="category_gembg_brutto"/>
|
||||
<field name="struct_id" ref="structure_gembg_bgld"/>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = employee.funktionszulage > 0</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
# Funktionszulage § 62 GemBG — Satz am Dienstvertrag (hr.version).
|
||||
# Bei Teilzeit anteilig (wie Monatsentgelt).
|
||||
work_rate = employee.work_time_rate or 100.0
|
||||
result = employee.funktionszulage * work_rate / 100.0
|
||||
# Bei Teilzeit anteilig (wie Monatsentgelt); work_time_rate = Bruchteil.
|
||||
work_rate = employee.work_time_rate or 1.0
|
||||
result = employee.funktionszulage * work_rate
|
||||
]]></field>
|
||||
</record>
|
||||
|
||||
@@ -78,8 +79,8 @@ result = employee.funktionszulage * work_rate / 100.0
|
||||
<field name="name">Überstundenvergütung tagsüber (§ 76 GemBG)</field>
|
||||
<field name="code">UEZ_TAG</field>
|
||||
<field name="sequence" eval="10"/>
|
||||
<field name="category_id" ref="payroll_structure_bgld.category_gembg_brutto"/>
|
||||
<field name="struct_id" ref="payroll_structure_bgld.structure_gembg_bgld"/>
|
||||
<field name="category_id" ref="category_gembg_brutto"/>
|
||||
<field name="struct_id" ref="structure_gembg_bgld"/>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = 'GEMBG_UEB_TAG' in worked_days and worked_days['GEMBG_UEB_TAG'].number_of_hours > 0</field>
|
||||
<field name="amount_select">code</field>
|
||||
@@ -100,8 +101,8 @@ else:
|
||||
<field name="name">Überstundenvergütung Nachtzeit (§ 76 GemBG)</field>
|
||||
<field name="code">UEZ_NACHT</field>
|
||||
<field name="sequence" eval="11"/>
|
||||
<field name="category_id" ref="payroll_structure_bgld.category_gembg_brutto"/>
|
||||
<field name="struct_id" ref="payroll_structure_bgld.structure_gembg_bgld"/>
|
||||
<field name="category_id" ref="category_gembg_brutto"/>
|
||||
<field name="struct_id" ref="structure_gembg_bgld"/>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = 'GEMBG_UEB_NACHT' in worked_days and worked_days['GEMBG_UEB_NACHT'].number_of_hours > 0</field>
|
||||
<field name="amount_select">code</field>
|
||||
@@ -125,8 +126,8 @@ else:
|
||||
<field name="name">Journaldienstzulage (§ 79 GemBG)</field>
|
||||
<field name="code">JZU</field>
|
||||
<field name="sequence" eval="12"/>
|
||||
<field name="category_id" ref="payroll_structure_bgld.category_gembg_brutto"/>
|
||||
<field name="struct_id" ref="payroll_structure_bgld.structure_gembg_bgld"/>
|
||||
<field name="category_id" ref="category_gembg_brutto"/>
|
||||
<field name="struct_id" ref="structure_gembg_bgld"/>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = 'GEMBG_JOURNAL' in worked_days and worked_days['GEMBG_JOURNAL'].number_of_hours > 0</field>
|
||||
<field name="amount_select">code</field>
|
||||
@@ -146,8 +147,8 @@ result = tage * satz
|
||||
<field name="name">Sonn-/Feiertagszulage (§ 78 GemBG)</field>
|
||||
<field name="code">SFZU</field>
|
||||
<field name="sequence" eval="13"/>
|
||||
<field name="category_id" ref="payroll_structure_bgld.category_gembg_brutto"/>
|
||||
<field name="struct_id" ref="payroll_structure_bgld.structure_gembg_bgld"/>
|
||||
<field name="category_id" ref="category_gembg_brutto"/>
|
||||
<field name="struct_id" ref="structure_gembg_bgld"/>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = 'GEMBG_SONNFEI' in worked_days and worked_days['GEMBG_SONNFEI'].number_of_hours > 0</field>
|
||||
<field name="amount_select">code</field>
|
||||
@@ -174,8 +175,8 @@ else:
|
||||
<field name="name">Bereitschaftsentschädigung (§ 80 GemBG)</field>
|
||||
<field name="code">BERB</field>
|
||||
<field name="sequence" eval="14"/>
|
||||
<field name="category_id" ref="payroll_structure_bgld.category_gembg_brutto"/>
|
||||
<field name="struct_id" ref="payroll_structure_bgld.structure_gembg_bgld"/>
|
||||
<field name="category_id" ref="category_gembg_brutto"/>
|
||||
<field name="struct_id" ref="structure_gembg_bgld"/>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = 'GEMBG_BEREIT' in worked_days and worked_days['GEMBG_BEREIT'].number_of_hours > 0</field>
|
||||
<field name="amount_select">code</field>
|
||||
@@ -195,8 +196,8 @@ result = stunden * satz
|
||||
<field name="name">Erschwerniszulage (§ 83 GemBG)</field>
|
||||
<field name="code">ERZU</field>
|
||||
<field name="sequence" eval="15"/>
|
||||
<field name="category_id" ref="payroll_structure_bgld.category_gembg_brutto"/>
|
||||
<field name="struct_id" ref="payroll_structure_bgld.structure_gembg_bgld"/>
|
||||
<field name="category_id" ref="category_gembg_brutto"/>
|
||||
<field name="struct_id" ref="structure_gembg_bgld"/>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = 'ERZU_INPUT' in inputs and inputs['ERZU_INPUT'].amount > 0</field>
|
||||
<field name="amount_select">code</field>
|
||||
@@ -212,8 +213,8 @@ result = inputs['ERZU_INPUT'].amount
|
||||
<field name="name">Jubiläumszuwendung (§ 89 GemBG)</field>
|
||||
<field name="code">JUB</field>
|
||||
<field name="sequence" eval="16"/>
|
||||
<field name="category_id" ref="payroll_structure_bgld.category_gembg_brutto"/>
|
||||
<field name="struct_id" ref="payroll_structure_bgld.structure_gembg_bgld"/>
|
||||
<field name="category_id" ref="category_gembg_brutto"/>
|
||||
<field name="struct_id" ref="structure_gembg_bgld"/>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = 'JUB_INPUT' in inputs and inputs['JUB_INPUT'].amount > 0</field>
|
||||
<field name="amount_select">code</field>
|
||||
@@ -229,8 +230,8 @@ result = inputs['JUB_INPUT'].amount
|
||||
<field name="name">Fahrtkostenzuschuss (§ 88 GemBG)</field>
|
||||
<field name="code">FKZ</field>
|
||||
<field name="sequence" eval="17"/>
|
||||
<field name="category_id" ref="payroll_structure_bgld.category_gembg_brutto"/>
|
||||
<field name="struct_id" ref="payroll_structure_bgld.structure_gembg_bgld"/>
|
||||
<field name="category_id" ref="category_gembg_brutto"/>
|
||||
<field name="struct_id" ref="structure_gembg_bgld"/>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = 'FKZ_INPUT' in inputs and inputs['FKZ_INPUT'].amount > 0</field>
|
||||
<field name="amount_select">code</field>
|
||||
@@ -246,8 +247,8 @@ result = inputs['FKZ_INPUT'].amount
|
||||
<field name="name">Sonderzahlung (quartalsweise, § 133n GemBG)</field>
|
||||
<field name="code">SZQ</field>
|
||||
<field name="sequence" eval="30"/>
|
||||
<field name="category_id" ref="payroll_structure_bgld.category_gembg_brutto"/>
|
||||
<field name="struct_id" ref="payroll_structure_bgld.structure_gembg_bgld"/>
|
||||
<field name="category_id" ref="category_gembg_brutto"/>
|
||||
<field name="struct_id" ref="structure_gembg_bgld"/>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python"><![CDATA[
|
||||
# § 133n GemBG: 50 % des Monatsentgelts (und der Kinderzulage)
|
||||
@@ -255,7 +256,6 @@ result = inputs['FKZ_INPUT'].amount
|
||||
# Quartalsende (März, Juni, September, Dezember).
|
||||
# Der Monat der Auszahlung ist der Monat, für den das Entgelt
|
||||
# gebührt (§ 56 Abs 2 GemBG: 15.3., 15.6., 15.9., 15.12.).
|
||||
import datetime
|
||||
month = payslip.date_to.month
|
||||
result = month in (3, 6, 9, 12)
|
||||
]]></field>
|
||||
@@ -266,8 +266,9 @@ result = month in (3, 6, 9, 12)
|
||||
# Kinderzulage), die ihnen für den Monat der Auszahlung zustehen").
|
||||
# Bei unterbrochenem Vierteljahr: nur der entsprechende Teil
|
||||
# (R1: Vollzeit-Rechnung; Anteil folgt mit der Zeit-Erfassung).
|
||||
me_total = rules['ME'].total or 0
|
||||
kizu_total = rules['KIZU'].total or 0
|
||||
# Odoo 19 befült result_rules (nicht rules) mit den Regelsummen.
|
||||
me_total = result_rules['ME']['total'] or 0
|
||||
kizu_total = result_rules['KIZU']['total'] or 0
|
||||
result = (me_total + kizu_total) * 0.5
|
||||
]]></field>
|
||||
</record>
|
||||
@@ -279,12 +280,12 @@ result = (me_total + kizu_total) * 0.5
|
||||
<field name="name">Netto</field>
|
||||
<field name="code">NETTO</field>
|
||||
<field name="sequence" eval="100"/>
|
||||
<field name="category_id" ref="payroll_structure_bgld.category_gembg_netto"/>
|
||||
<field name="struct_id" ref="payroll_structure_bgld.structure_gembg_bgld"/>
|
||||
<field name="category_id" ref="category_gembg_netto"/>
|
||||
<field name="struct_id" ref="structure_gembg_bgld"/>
|
||||
<field name="condition_select">none</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
result = categories.GEMBG_BRUTTO - categories.GEMBG_ABZUG
|
||||
result = categories['GEMBG_BRUTTO'] - categories['GEMBG_ABZUG']
|
||||
]]></field>
|
||||
</record>
|
||||
</odoo>
|
||||
Reference in New Issue
Block a user