[IMP] l10n_at_gemeinde_payroll: implement AP1 pay scale model (GemBG Bgld.)
Katalogmodell nach Implementierungsplan AP1 (freigegeben 2026-09-09): - ``gemeinde.payroll.entlohnungsgruppe`` (Code, Schema, §, Bundesland, Vorrückungszeitraum je Gruppe; § 66 Abs 2 GemBG: 4 Jahre, abweichend 2 Jahre für Betreuungspersonen-/Sondergruppen) und ``gemeinde.payroll.entlohnungsstufe`` (Stufe, Monatsentgelt, Stichtag, unique je Gruppe/Stufe/Stichtag) mit Stichtags-Lookup-Helfern. - Seed 2026: 35 Entlohnungsgruppen, 433 Werte (Schemata I/gv, II/gh, Ia/bv, IIa/bh, kb, av sowie §-Gruppen 150c/151/151c), Werte aus der konsolidierten GemBG-Fassung 09.09.2026 (Wert 1.7.2026 gemäß Artikel 4 RV 0715/XXIII. GP; 2025er-Stichtagsannahme für nicht 2026 angepasste Tabellen als AP0-Verifikationspunkt dokumentiert). Generator mit Herkunftsnachweis: personalverrechnung/tools/extract_gembg_katalog.py. - GemBG-Felder auf der Payroll-Version (hr.version) plus Employee-Spiegel nach dem Engine-Muster (related/inherited): Entlohnungsgruppe, Stufe, Besoldungsdienstalter, Vorrückungstermin — berechnet nach § 66 Abs 2 (erster Tag des Monats nach Vollendung weiterer n Jahre BDA), manuell überschreibbar für Überleitungsfälle (§§ 157a ff). - Vorrückungs-Wizard (§ 66 Abs 2): fällige Versionen zum Stichtag, Stufenerhöhung mit Höchststufen-Schutz und Ergebnis-Notification — bewusst kein stilles Mutieren im Lohnlauf (Dokumentationspflicht). - Views/Menüs (Personalverrechnung Bgld. unter Payroll), Security auf hr_payroll-Gruppen, Employee-Form-Anbindung in payroll_group. - Tests (Rechenfälle AP1): Seed-Werte inkl. Quellenanomalie kb1a/6, Stichtags-Lookup, Jahresversionierung, Vorrückungstermin (BDA 15.03.2020 -> 1.4.2028), Wizard-Anwendung mit Höchststufen-Skip. Statische Validierung grün (py_compile, XML, Manifest, CSV-Integrität); Runtime-Testlauf auf dem Dev-Host (gem360_dev) ausständig, wie im Implementierungsplan M2 vorgesehen.
This commit is contained in:
@@ -1 +1,3 @@
|
||||
from . import models
|
||||
# Part of the gem360 onboarding. See LICENSE / project docs for details.
|
||||
from . import models
|
||||
from . import wizard
|
||||
@@ -1,7 +1,7 @@
|
||||
# Part of the gem360 onboarding. See LICENSE / project docs for details.
|
||||
{
|
||||
'name': 'Österreich - Gemeinde-Personalverrechnung (Bgld. GemBG)',
|
||||
'version': '19.0.1.0.0',
|
||||
'version': '19.0.1.1.0',
|
||||
'author': 'ixsol / gem360',
|
||||
'website': 'https://gem360.at',
|
||||
'category': 'Human Resources/Payroll',
|
||||
@@ -30,14 +30,25 @@ Gemeindebedienstetengesetz 2014** (LGBl. Nr. 42/2014):
|
||||
Mehr-Bundesland-Architektur: Landes-Kataloge und landesspezifische
|
||||
Regeln sind von Anfang an getrennt (Burgenland zuerst).
|
||||
|
||||
**Status:** Modulgerüst (Scaffold). Strukturen, Regeln, Daten und Tests
|
||||
folgen dem freigegebenen Implementierungsplan — Grundlagen:
|
||||
``personalverrechnung/PLAN-payroll-bgld.md``,
|
||||
``personalverrechnung/RECHTSQUELLEN-Bgld.md`` und der
|
||||
**Status:** AP1 (Katalogmodell) implementiert: Entlohnungsgruppen/-stufen
|
||||
mit Jahresversionierung aus den Bezügeanpassungs-Tabellen (Seed 2026:
|
||||
35 Gruppen, 433 Werte), GemBG-Felder auf der Payroll-Version
|
||||
(Entlohnungsgruppe, Stufe, Besoldungsdienstalter, Vorrückungstermin
|
||||
nach § 66 Abs 2) und Vorrückungs-Wizard mit Protokoll. Strukturen,
|
||||
Regeln, Meldewesen und VRV-Buchung folgen dem freigegebenen
|
||||
Implementierungsplan — Grundlagen: ``personalverrechnung/PLAN-payroll-bgld.md``,
|
||||
``personalverrechnung/RECHTSQUELLEN-Bgld.md``,
|
||||
``personalverrechnung/IMPLEMENTIERUNGSPLAN-Bgld.md`` und der
|
||||
``payroll``-Agent-Skill.
|
||||
""",
|
||||
'depends': ['hr_payroll', 'hr_payroll_account', 'l10n_at_vrv2015'],
|
||||
'data': [],
|
||||
'data': [
|
||||
'security/ir.model.access.csv',
|
||||
'data/gemeinde.payroll.entlohnungsgruppe.csv',
|
||||
'data/gemeinde.payroll.entlohnungsstufe.csv',
|
||||
'views/entlohnung_views.xml',
|
||||
'views/hr_version_bgld_views.xml',
|
||||
],
|
||||
'countries': ['at'],
|
||||
'license': 'LGPL-3',
|
||||
'installable': True,
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
id,code,schema,paragraph,bundesland,vorrueckungszeitraum_jahre
|
||||
bgld_grp_i_gv1,gv1,I,57,bgld,4
|
||||
bgld_grp_i_gv2,gv2,I,57,bgld,4
|
||||
bgld_grp_i_gv3,gv3,I,57,bgld,4
|
||||
bgld_grp_i_gv4,gv4,I,57,bgld,4
|
||||
bgld_grp_i_gv5,gv5,I,57,bgld,4
|
||||
bgld_grp_ii_gh1,gh1,II,58,bgld,4
|
||||
bgld_grp_ii_gh2,gh2,II,58,bgld,4
|
||||
bgld_grp_ii_gh3,gh3,II,58,bgld,4
|
||||
bgld_grp_ii_gh4,gh4,II,58,bgld,4
|
||||
bgld_grp_ii_gh5,gh5,II,58,bgld,4
|
||||
bgld_grp_iia_bh1,bh1,IIa,133i,bgld,4
|
||||
bgld_grp_iia_bh2,bh2,IIa,133i,bgld,4
|
||||
bgld_grp_iia_bh3,bh3,IIa,133i,bgld,4
|
||||
bgld_grp_iia_bh4,bh4,IIa,133i,bgld,4
|
||||
bgld_grp_iia_bh5,bh5,IIa,133i,bgld,4
|
||||
bgld_grp_ia_bv1,bv1,Ia,133g,bgld,4
|
||||
bgld_grp_ia_bv2,bv2,Ia,133g,bgld,4
|
||||
bgld_grp_ia_bv3,bv3,Ia,133g,bgld,4
|
||||
bgld_grp_ia_bv4,bv4,Ia,133g,bgld,4
|
||||
bgld_grp_ia_bv5,bv5,Ia,133g,bgld,4
|
||||
bgld_grp_av_av1,av1,av,133u,bgld,4
|
||||
bgld_grp_av_av2,av2,av,133u,bgld,4
|
||||
bgld_grp_av_av3,av3,av,133u,bgld,4
|
||||
bgld_grp_av_av4,av4,av,133u,bgld,4
|
||||
bgld_grp_av_av5,av5,av,133u,bgld,4
|
||||
bgld_grp_kb_kb1,kb1,kb,133j,bgld,4
|
||||
bgld_grp_kb_kb1a,kb1a,kb,133j,bgld,4
|
||||
bgld_grp_kb_kb2,kb2,kb,133j,bgld,4
|
||||
bgld_grp_kb_kb3,kb3,kb,133j,bgld,4
|
||||
bgld_grp__150c_l2b1,l2b1,§150c,150c,bgld,2
|
||||
bgld_grp__150c_l3,l3,§150c,150c,bgld,2
|
||||
bgld_grp__151_gb1,gb1,§151,151,bgld,2
|
||||
bgld_grp__151_gb2,gb2,§151,151,bgld,2
|
||||
bgld_grp__151c_gb1a,gb1a,§151c,151c,bgld,2
|
||||
bgld_grp__151c_gb3,gb3,§151c,151c,bgld,2
|
||||
|
@@ -0,0 +1,434 @@
|
||||
id,entlohnungsgruppe_id:id,stufe,monatsentgelt,gueltig_ab
|
||||
bgld_st_i_gv1_1,l10n_at_gemeinde_payroll.bgld_grp_i_gv1,1,4919.80,2026-07-01
|
||||
bgld_st_i_gv1_2,l10n_at_gemeinde_payroll.bgld_grp_i_gv1,2,5148.80,2026-07-01
|
||||
bgld_st_i_gv1_3,l10n_at_gemeinde_payroll.bgld_grp_i_gv1,3,5377.80,2026-07-01
|
||||
bgld_st_i_gv1_4,l10n_at_gemeinde_payroll.bgld_grp_i_gv1,4,5606.50,2026-07-01
|
||||
bgld_st_i_gv1_5,l10n_at_gemeinde_payroll.bgld_grp_i_gv1,5,5812.10,2026-07-01
|
||||
bgld_st_i_gv1_6,l10n_at_gemeinde_payroll.bgld_grp_i_gv1,6,6014.20,2026-07-01
|
||||
bgld_st_i_gv1_7,l10n_at_gemeinde_payroll.bgld_grp_i_gv1,7,6216.60,2026-07-01
|
||||
bgld_st_i_gv1_8,l10n_at_gemeinde_payroll.bgld_grp_i_gv1,8,6418.60,2026-07-01
|
||||
bgld_st_i_gv1_9,l10n_at_gemeinde_payroll.bgld_grp_i_gv1,9,6620.80,2026-07-01
|
||||
bgld_st_i_gv1_10,l10n_at_gemeinde_payroll.bgld_grp_i_gv1,10,6823.20,2026-07-01
|
||||
bgld_st_i_gv1_11,l10n_at_gemeinde_payroll.bgld_grp_i_gv1,11,6899.20,2026-07-01
|
||||
bgld_st_i_gv2_1,l10n_at_gemeinde_payroll.bgld_grp_i_gv2,1,3840.70,2026-07-01
|
||||
bgld_st_i_gv2_2,l10n_at_gemeinde_payroll.bgld_grp_i_gv2,2,3992.80,2026-07-01
|
||||
bgld_st_i_gv2_3,l10n_at_gemeinde_payroll.bgld_grp_i_gv2,3,4144.70,2026-07-01
|
||||
bgld_st_i_gv2_4,l10n_at_gemeinde_payroll.bgld_grp_i_gv2,4,4296.90,2026-07-01
|
||||
bgld_st_i_gv2_5,l10n_at_gemeinde_payroll.bgld_grp_i_gv2,5,4449.00,2026-07-01
|
||||
bgld_st_i_gv2_6,l10n_at_gemeinde_payroll.bgld_grp_i_gv2,6,4601.30,2026-07-01
|
||||
bgld_st_i_gv2_7,l10n_at_gemeinde_payroll.bgld_grp_i_gv2,7,4753.00,2026-07-01
|
||||
bgld_st_i_gv2_8,l10n_at_gemeinde_payroll.bgld_grp_i_gv2,8,4905.30,2026-07-01
|
||||
bgld_st_i_gv2_9,l10n_at_gemeinde_payroll.bgld_grp_i_gv2,9,5057.20,2026-07-01
|
||||
bgld_st_i_gv2_10,l10n_at_gemeinde_payroll.bgld_grp_i_gv2,10,5209.40,2026-07-01
|
||||
bgld_st_i_gv2_11,l10n_at_gemeinde_payroll.bgld_grp_i_gv2,11,5361.30,2026-07-01
|
||||
bgld_st_i_gv2_12,l10n_at_gemeinde_payroll.bgld_grp_i_gv2,12,5456.60,2026-07-01
|
||||
bgld_st_i_gv3_1,l10n_at_gemeinde_payroll.bgld_grp_i_gv3,1,3199.90,2026-07-01
|
||||
bgld_st_i_gv3_2,l10n_at_gemeinde_payroll.bgld_grp_i_gv3,2,3271.60,2026-07-01
|
||||
bgld_st_i_gv3_3,l10n_at_gemeinde_payroll.bgld_grp_i_gv3,3,3345.00,2026-07-01
|
||||
bgld_st_i_gv3_4,l10n_at_gemeinde_payroll.bgld_grp_i_gv3,4,3418.20,2026-07-01
|
||||
bgld_st_i_gv3_5,l10n_at_gemeinde_payroll.bgld_grp_i_gv3,5,3491.70,2026-07-01
|
||||
bgld_st_i_gv3_6,l10n_at_gemeinde_payroll.bgld_grp_i_gv3,6,3565.50,2026-07-01
|
||||
bgld_st_i_gv3_7,l10n_at_gemeinde_payroll.bgld_grp_i_gv3,7,3638.70,2026-07-01
|
||||
bgld_st_i_gv3_8,l10n_at_gemeinde_payroll.bgld_grp_i_gv3,8,3712.30,2026-07-01
|
||||
bgld_st_i_gv3_9,l10n_at_gemeinde_payroll.bgld_grp_i_gv3,9,3785.70,2026-07-01
|
||||
bgld_st_i_gv3_10,l10n_at_gemeinde_payroll.bgld_grp_i_gv3,10,3859.10,2026-07-01
|
||||
bgld_st_i_gv3_11,l10n_at_gemeinde_payroll.bgld_grp_i_gv3,11,3932.70,2026-07-01
|
||||
bgld_st_i_gv3_12,l10n_at_gemeinde_payroll.bgld_grp_i_gv3,12,3987.70,2026-07-01
|
||||
bgld_st_i_gv4_1,l10n_at_gemeinde_payroll.bgld_grp_i_gv4,1,3019.80,2026-07-01
|
||||
bgld_st_i_gv4_2,l10n_at_gemeinde_payroll.bgld_grp_i_gv4,2,3063.30,2026-07-01
|
||||
bgld_st_i_gv4_3,l10n_at_gemeinde_payroll.bgld_grp_i_gv4,3,3106.90,2026-07-01
|
||||
bgld_st_i_gv4_4,l10n_at_gemeinde_payroll.bgld_grp_i_gv4,4,3150.10,2026-07-01
|
||||
bgld_st_i_gv4_5,l10n_at_gemeinde_payroll.bgld_grp_i_gv4,5,3193.30,2026-07-01
|
||||
bgld_st_i_gv4_6,l10n_at_gemeinde_payroll.bgld_grp_i_gv4,6,3236.80,2026-07-01
|
||||
bgld_st_i_gv4_7,l10n_at_gemeinde_payroll.bgld_grp_i_gv4,7,3280.40,2026-07-01
|
||||
bgld_st_i_gv4_8,l10n_at_gemeinde_payroll.bgld_grp_i_gv4,8,3324.40,2026-07-01
|
||||
bgld_st_i_gv4_9,l10n_at_gemeinde_payroll.bgld_grp_i_gv4,9,3369.20,2026-07-01
|
||||
bgld_st_i_gv4_10,l10n_at_gemeinde_payroll.bgld_grp_i_gv4,10,3413.30,2026-07-01
|
||||
bgld_st_i_gv4_11,l10n_at_gemeinde_payroll.bgld_grp_i_gv4,11,3457.60,2026-07-01
|
||||
bgld_st_i_gv4_12,l10n_at_gemeinde_payroll.bgld_grp_i_gv4,12,3491.20,2026-07-01
|
||||
bgld_st_i_gv5_1,l10n_at_gemeinde_payroll.bgld_grp_i_gv5,1,2933.40,2026-07-01
|
||||
bgld_st_i_gv5_2,l10n_at_gemeinde_payroll.bgld_grp_i_gv5,2,2968.60,2026-07-01
|
||||
bgld_st_i_gv5_3,l10n_at_gemeinde_payroll.bgld_grp_i_gv5,3,3003.90,2026-07-01
|
||||
bgld_st_i_gv5_4,l10n_at_gemeinde_payroll.bgld_grp_i_gv5,4,3038.80,2026-07-01
|
||||
bgld_st_i_gv5_5,l10n_at_gemeinde_payroll.bgld_grp_i_gv5,5,3074.00,2026-07-01
|
||||
bgld_st_i_gv5_6,l10n_at_gemeinde_payroll.bgld_grp_i_gv5,6,3109.10,2026-07-01
|
||||
bgld_st_i_gv5_7,l10n_at_gemeinde_payroll.bgld_grp_i_gv5,7,3144.20,2026-07-01
|
||||
bgld_st_i_gv5_8,l10n_at_gemeinde_payroll.bgld_grp_i_gv5,8,3179.70,2026-07-01
|
||||
bgld_st_i_gv5_9,l10n_at_gemeinde_payroll.bgld_grp_i_gv5,9,3214.60,2026-07-01
|
||||
bgld_st_i_gv5_10,l10n_at_gemeinde_payroll.bgld_grp_i_gv5,10,3249.70,2026-07-01
|
||||
bgld_st_i_gv5_11,l10n_at_gemeinde_payroll.bgld_grp_i_gv5,11,3284.90,2026-07-01
|
||||
bgld_st_i_gv5_12,l10n_at_gemeinde_payroll.bgld_grp_i_gv5,12,3312.10,2026-07-01
|
||||
bgld_st_ii_gh1_1,l10n_at_gemeinde_payroll.bgld_grp_ii_gh1,1,3139.50,2026-07-01
|
||||
bgld_st_ii_gh1_2,l10n_at_gemeinde_payroll.bgld_grp_ii_gh1,2,3203.70,2026-07-01
|
||||
bgld_st_ii_gh1_3,l10n_at_gemeinde_payroll.bgld_grp_ii_gh1,3,3268.00,2026-07-01
|
||||
bgld_st_ii_gh1_4,l10n_at_gemeinde_payroll.bgld_grp_ii_gh1,4,3333.60,2026-07-01
|
||||
bgld_st_ii_gh1_5,l10n_at_gemeinde_payroll.bgld_grp_ii_gh1,5,3399.60,2026-07-01
|
||||
bgld_st_ii_gh1_6,l10n_at_gemeinde_payroll.bgld_grp_ii_gh1,6,3465.40,2026-07-01
|
||||
bgld_st_ii_gh1_7,l10n_at_gemeinde_payroll.bgld_grp_ii_gh1,7,3531.40,2026-07-01
|
||||
bgld_st_ii_gh1_8,l10n_at_gemeinde_payroll.bgld_grp_ii_gh1,8,3597.30,2026-07-01
|
||||
bgld_st_ii_gh1_9,l10n_at_gemeinde_payroll.bgld_grp_ii_gh1,9,3663.00,2026-07-01
|
||||
bgld_st_ii_gh1_10,l10n_at_gemeinde_payroll.bgld_grp_ii_gh1,10,3728.90,2026-07-01
|
||||
bgld_st_ii_gh1_11,l10n_at_gemeinde_payroll.bgld_grp_ii_gh1,11,3794.60,2026-07-01
|
||||
bgld_st_ii_gh1_12,l10n_at_gemeinde_payroll.bgld_grp_ii_gh1,12,3844.10,2026-07-01
|
||||
bgld_st_ii_gh2_1,l10n_at_gemeinde_payroll.bgld_grp_ii_gh2,1,3028.90,2026-07-01
|
||||
bgld_st_ii_gh2_2,l10n_at_gemeinde_payroll.bgld_grp_ii_gh2,2,3082.20,2026-07-01
|
||||
bgld_st_ii_gh2_3,l10n_at_gemeinde_payroll.bgld_grp_ii_gh2,3,3135.50,2026-07-01
|
||||
bgld_st_ii_gh2_4,l10n_at_gemeinde_payroll.bgld_grp_ii_gh2,4,3189.00,2026-07-01
|
||||
bgld_st_ii_gh2_5,l10n_at_gemeinde_payroll.bgld_grp_ii_gh2,5,3242.50,2026-07-01
|
||||
bgld_st_ii_gh2_6,l10n_at_gemeinde_payroll.bgld_grp_ii_gh2,6,3295.90,2026-07-01
|
||||
bgld_st_ii_gh2_7,l10n_at_gemeinde_payroll.bgld_grp_ii_gh2,7,3350.40,2026-07-01
|
||||
bgld_st_ii_gh2_8,l10n_at_gemeinde_payroll.bgld_grp_ii_gh2,8,3404.90,2026-07-01
|
||||
bgld_st_ii_gh2_9,l10n_at_gemeinde_payroll.bgld_grp_ii_gh2,9,3459.60,2026-07-01
|
||||
bgld_st_ii_gh2_10,l10n_at_gemeinde_payroll.bgld_grp_ii_gh2,10,3514.20,2026-07-01
|
||||
bgld_st_ii_gh2_11,l10n_at_gemeinde_payroll.bgld_grp_ii_gh2,11,3568.60,2026-07-01
|
||||
bgld_st_ii_gh2_12,l10n_at_gemeinde_payroll.bgld_grp_ii_gh2,12,3609.50,2026-07-01
|
||||
bgld_st_ii_gh3_1,l10n_at_gemeinde_payroll.bgld_grp_ii_gh3,1,2982.10,2026-07-01
|
||||
bgld_st_ii_gh3_2,l10n_at_gemeinde_payroll.bgld_grp_ii_gh3,2,3026.80,2026-07-01
|
||||
bgld_st_ii_gh3_3,l10n_at_gemeinde_payroll.bgld_grp_ii_gh3,3,3072.70,2026-07-01
|
||||
bgld_st_ii_gh3_4,l10n_at_gemeinde_payroll.bgld_grp_ii_gh3,4,3118.10,2026-07-01
|
||||
bgld_st_ii_gh3_5,l10n_at_gemeinde_payroll.bgld_grp_ii_gh3,5,3163.40,2026-07-01
|
||||
bgld_st_ii_gh3_6,l10n_at_gemeinde_payroll.bgld_grp_ii_gh3,6,3208.70,2026-07-01
|
||||
bgld_st_ii_gh3_7,l10n_at_gemeinde_payroll.bgld_grp_ii_gh3,7,3254.10,2026-07-01
|
||||
bgld_st_ii_gh3_8,l10n_at_gemeinde_payroll.bgld_grp_ii_gh3,8,3299.90,2026-07-01
|
||||
bgld_st_ii_gh3_9,l10n_at_gemeinde_payroll.bgld_grp_ii_gh3,9,3346.30,2026-07-01
|
||||
bgld_st_ii_gh3_10,l10n_at_gemeinde_payroll.bgld_grp_ii_gh3,10,3392.80,2026-07-01
|
||||
bgld_st_ii_gh3_11,l10n_at_gemeinde_payroll.bgld_grp_ii_gh3,11,3439.20,2026-07-01
|
||||
bgld_st_ii_gh3_12,l10n_at_gemeinde_payroll.bgld_grp_ii_gh3,12,3473.80,2026-07-01
|
||||
bgld_st_ii_gh4_1,l10n_at_gemeinde_payroll.bgld_grp_ii_gh4,1,2933.40,2026-07-01
|
||||
bgld_st_ii_gh4_2,l10n_at_gemeinde_payroll.bgld_grp_ii_gh4,2,2968.60,2026-07-01
|
||||
bgld_st_ii_gh4_3,l10n_at_gemeinde_payroll.bgld_grp_ii_gh4,3,3003.90,2026-07-01
|
||||
bgld_st_ii_gh4_4,l10n_at_gemeinde_payroll.bgld_grp_ii_gh4,4,3038.80,2026-07-01
|
||||
bgld_st_ii_gh4_5,l10n_at_gemeinde_payroll.bgld_grp_ii_gh4,5,3074.00,2026-07-01
|
||||
bgld_st_ii_gh4_6,l10n_at_gemeinde_payroll.bgld_grp_ii_gh4,6,3109.10,2026-07-01
|
||||
bgld_st_ii_gh4_7,l10n_at_gemeinde_payroll.bgld_grp_ii_gh4,7,3144.20,2026-07-01
|
||||
bgld_st_ii_gh4_8,l10n_at_gemeinde_payroll.bgld_grp_ii_gh4,8,3179.70,2026-07-01
|
||||
bgld_st_ii_gh4_9,l10n_at_gemeinde_payroll.bgld_grp_ii_gh4,9,3214.60,2026-07-01
|
||||
bgld_st_ii_gh4_10,l10n_at_gemeinde_payroll.bgld_grp_ii_gh4,10,3249.70,2026-07-01
|
||||
bgld_st_ii_gh4_11,l10n_at_gemeinde_payroll.bgld_grp_ii_gh4,11,3284.90,2026-07-01
|
||||
bgld_st_ii_gh4_12,l10n_at_gemeinde_payroll.bgld_grp_ii_gh4,12,3312.10,2026-07-01
|
||||
bgld_st_ii_gh5_1,l10n_at_gemeinde_payroll.bgld_grp_ii_gh5,1,2881.70,2026-07-01
|
||||
bgld_st_ii_gh5_2,l10n_at_gemeinde_payroll.bgld_grp_ii_gh5,2,2901.50,2026-07-01
|
||||
bgld_st_ii_gh5_3,l10n_at_gemeinde_payroll.bgld_grp_ii_gh5,3,2920.80,2026-07-01
|
||||
bgld_st_ii_gh5_4,l10n_at_gemeinde_payroll.bgld_grp_ii_gh5,4,2940.40,2026-07-01
|
||||
bgld_st_ii_gh5_5,l10n_at_gemeinde_payroll.bgld_grp_ii_gh5,5,2959.60,2026-07-01
|
||||
bgld_st_ii_gh5_6,l10n_at_gemeinde_payroll.bgld_grp_ii_gh5,6,2979.30,2026-07-01
|
||||
bgld_st_ii_gh5_7,l10n_at_gemeinde_payroll.bgld_grp_ii_gh5,7,2998.60,2026-07-01
|
||||
bgld_st_ii_gh5_8,l10n_at_gemeinde_payroll.bgld_grp_ii_gh5,8,3018.10,2026-07-01
|
||||
bgld_st_ii_gh5_9,l10n_at_gemeinde_payroll.bgld_grp_ii_gh5,9,3037.50,2026-07-01
|
||||
bgld_st_ii_gh5_10,l10n_at_gemeinde_payroll.bgld_grp_ii_gh5,10,3057.10,2026-07-01
|
||||
bgld_st_ii_gh5_11,l10n_at_gemeinde_payroll.bgld_grp_ii_gh5,11,3076.70,2026-07-01
|
||||
bgld_st_ii_gh5_12,l10n_at_gemeinde_payroll.bgld_grp_ii_gh5,12,3091.00,2026-07-01
|
||||
bgld_st_iia_bh1_1,l10n_at_gemeinde_payroll.bgld_grp_iia_bh1,1,3541.40,2026-07-01
|
||||
bgld_st_iia_bh1_2,l10n_at_gemeinde_payroll.bgld_grp_iia_bh1,2,3639.50,2026-07-01
|
||||
bgld_st_iia_bh1_3,l10n_at_gemeinde_payroll.bgld_grp_iia_bh1,3,3706.50,2026-07-01
|
||||
bgld_st_iia_bh1_4,l10n_at_gemeinde_payroll.bgld_grp_iia_bh1,4,3772.10,2026-07-01
|
||||
bgld_st_iia_bh1_5,l10n_at_gemeinde_payroll.bgld_grp_iia_bh1,5,3837.90,2026-07-01
|
||||
bgld_st_iia_bh1_6,l10n_at_gemeinde_payroll.bgld_grp_iia_bh1,6,3903.70,2026-07-01
|
||||
bgld_st_iia_bh1_7,l10n_at_gemeinde_payroll.bgld_grp_iia_bh1,7,3937.20,2026-07-01
|
||||
bgld_st_iia_bh1_8,l10n_at_gemeinde_payroll.bgld_grp_iia_bh1,8,3937.20,2026-07-01
|
||||
bgld_st_iia_bh1_9,l10n_at_gemeinde_payroll.bgld_grp_iia_bh1,9,3937.20,2026-07-01
|
||||
bgld_st_iia_bh1_10,l10n_at_gemeinde_payroll.bgld_grp_iia_bh1,10,3937.20,2026-07-01
|
||||
bgld_st_iia_bh1_11,l10n_at_gemeinde_payroll.bgld_grp_iia_bh1,11,3937.20,2026-07-01
|
||||
bgld_st_iia_bh1_12,l10n_at_gemeinde_payroll.bgld_grp_iia_bh1,12,3937.20,2026-07-01
|
||||
bgld_st_iia_bh2_1,l10n_at_gemeinde_payroll.bgld_grp_iia_bh2,1,3430.70,2026-07-01
|
||||
bgld_st_iia_bh2_2,l10n_at_gemeinde_payroll.bgld_grp_iia_bh2,2,3493.80,2026-07-01
|
||||
bgld_st_iia_bh2_3,l10n_at_gemeinde_payroll.bgld_grp_iia_bh2,3,3558.30,2026-07-01
|
||||
bgld_st_iia_bh2_4,l10n_at_gemeinde_payroll.bgld_grp_iia_bh2,4,3621.40,2026-07-01
|
||||
bgld_st_iia_bh2_5,l10n_at_gemeinde_payroll.bgld_grp_iia_bh2,5,3685.80,2026-07-01
|
||||
bgld_st_iia_bh2_6,l10n_at_gemeinde_payroll.bgld_grp_iia_bh2,6,3685.80,2026-07-01
|
||||
bgld_st_iia_bh2_7,l10n_at_gemeinde_payroll.bgld_grp_iia_bh2,7,3685.80,2026-07-01
|
||||
bgld_st_iia_bh2_8,l10n_at_gemeinde_payroll.bgld_grp_iia_bh2,8,3685.80,2026-07-01
|
||||
bgld_st_iia_bh2_9,l10n_at_gemeinde_payroll.bgld_grp_iia_bh2,9,3685.80,2026-07-01
|
||||
bgld_st_iia_bh2_10,l10n_at_gemeinde_payroll.bgld_grp_iia_bh2,10,3685.80,2026-07-01
|
||||
bgld_st_iia_bh2_11,l10n_at_gemeinde_payroll.bgld_grp_iia_bh2,11,3685.80,2026-07-01
|
||||
bgld_st_iia_bh2_12,l10n_at_gemeinde_payroll.bgld_grp_iia_bh2,12,3685.80,2026-07-01
|
||||
bgld_st_iia_bh3_1,l10n_at_gemeinde_payroll.bgld_grp_iia_bh3,1,3395.90,2026-07-01
|
||||
bgld_st_iia_bh3_2,l10n_at_gemeinde_payroll.bgld_grp_iia_bh3,2,3460.30,2026-07-01
|
||||
bgld_st_iia_bh3_3,l10n_at_gemeinde_payroll.bgld_grp_iia_bh3,3,3524.80,2026-07-01
|
||||
bgld_st_iia_bh3_4,l10n_at_gemeinde_payroll.bgld_grp_iia_bh3,4,3589.20,2026-07-01
|
||||
bgld_st_iia_bh3_5,l10n_at_gemeinde_payroll.bgld_grp_iia_bh3,5,3589.20,2026-07-01
|
||||
bgld_st_iia_bh3_6,l10n_at_gemeinde_payroll.bgld_grp_iia_bh3,6,3589.20,2026-07-01
|
||||
bgld_st_iia_bh3_7,l10n_at_gemeinde_payroll.bgld_grp_iia_bh3,7,3589.20,2026-07-01
|
||||
bgld_st_iia_bh3_8,l10n_at_gemeinde_payroll.bgld_grp_iia_bh3,8,3589.20,2026-07-01
|
||||
bgld_st_iia_bh3_9,l10n_at_gemeinde_payroll.bgld_grp_iia_bh3,9,3589.20,2026-07-01
|
||||
bgld_st_iia_bh3_10,l10n_at_gemeinde_payroll.bgld_grp_iia_bh3,10,3589.20,2026-07-01
|
||||
bgld_st_iia_bh3_11,l10n_at_gemeinde_payroll.bgld_grp_iia_bh3,11,3589.20,2026-07-01
|
||||
bgld_st_iia_bh3_12,l10n_at_gemeinde_payroll.bgld_grp_iia_bh3,12,3589.20,2026-07-01
|
||||
bgld_st_iia_bh4_1,l10n_at_gemeinde_payroll.bgld_grp_iia_bh4,1,3395.90,2026-07-01
|
||||
bgld_st_iia_bh4_2,l10n_at_gemeinde_payroll.bgld_grp_iia_bh4,2,3460.30,2026-07-01
|
||||
bgld_st_iia_bh4_3,l10n_at_gemeinde_payroll.bgld_grp_iia_bh4,3,3524.80,2026-07-01
|
||||
bgld_st_iia_bh4_4,l10n_at_gemeinde_payroll.bgld_grp_iia_bh4,4,3524.80,2026-07-01
|
||||
bgld_st_iia_bh4_5,l10n_at_gemeinde_payroll.bgld_grp_iia_bh4,5,3524.80,2026-07-01
|
||||
bgld_st_iia_bh4_6,l10n_at_gemeinde_payroll.bgld_grp_iia_bh4,6,3524.80,2026-07-01
|
||||
bgld_st_iia_bh4_7,l10n_at_gemeinde_payroll.bgld_grp_iia_bh4,7,3524.80,2026-07-01
|
||||
bgld_st_iia_bh4_8,l10n_at_gemeinde_payroll.bgld_grp_iia_bh4,8,3524.80,2026-07-01
|
||||
bgld_st_iia_bh4_9,l10n_at_gemeinde_payroll.bgld_grp_iia_bh4,9,3524.80,2026-07-01
|
||||
bgld_st_iia_bh4_10,l10n_at_gemeinde_payroll.bgld_grp_iia_bh4,10,3524.80,2026-07-01
|
||||
bgld_st_iia_bh4_11,l10n_at_gemeinde_payroll.bgld_grp_iia_bh4,11,3524.80,2026-07-01
|
||||
bgld_st_iia_bh4_12,l10n_at_gemeinde_payroll.bgld_grp_iia_bh4,12,3524.80,2026-07-01
|
||||
bgld_st_iia_bh5_1,l10n_at_gemeinde_payroll.bgld_grp_iia_bh5,1,3395.90,2026-07-01
|
||||
bgld_st_iia_bh5_2,l10n_at_gemeinde_payroll.bgld_grp_iia_bh5,2,3395.90,2026-07-01
|
||||
bgld_st_iia_bh5_3,l10n_at_gemeinde_payroll.bgld_grp_iia_bh5,3,3395.90,2026-07-01
|
||||
bgld_st_iia_bh5_4,l10n_at_gemeinde_payroll.bgld_grp_iia_bh5,4,3395.90,2026-07-01
|
||||
bgld_st_iia_bh5_5,l10n_at_gemeinde_payroll.bgld_grp_iia_bh5,5,3395.90,2026-07-01
|
||||
bgld_st_iia_bh5_6,l10n_at_gemeinde_payroll.bgld_grp_iia_bh5,6,3395.90,2026-07-01
|
||||
bgld_st_iia_bh5_7,l10n_at_gemeinde_payroll.bgld_grp_iia_bh5,7,3395.90,2026-07-01
|
||||
bgld_st_iia_bh5_8,l10n_at_gemeinde_payroll.bgld_grp_iia_bh5,8,3395.90,2026-07-01
|
||||
bgld_st_iia_bh5_9,l10n_at_gemeinde_payroll.bgld_grp_iia_bh5,9,3395.90,2026-07-01
|
||||
bgld_st_iia_bh5_10,l10n_at_gemeinde_payroll.bgld_grp_iia_bh5,10,3395.90,2026-07-01
|
||||
bgld_st_iia_bh5_11,l10n_at_gemeinde_payroll.bgld_grp_iia_bh5,11,3395.90,2026-07-01
|
||||
bgld_st_iia_bh5_12,l10n_at_gemeinde_payroll.bgld_grp_iia_bh5,12,3395.90,2026-07-01
|
||||
bgld_st_ia_bv1_1,l10n_at_gemeinde_payroll.bgld_grp_ia_bv1,1,5329.00,2026-07-01
|
||||
bgld_st_ia_bv1_2,l10n_at_gemeinde_payroll.bgld_grp_ia_bv1,2,5455.70,2026-07-01
|
||||
bgld_st_ia_bv1_3,l10n_at_gemeinde_payroll.bgld_grp_ia_bv1,3,5582.20,2026-07-01
|
||||
bgld_st_ia_bv1_4,l10n_at_gemeinde_payroll.bgld_grp_ia_bv1,4,5690.40,2026-07-01
|
||||
bgld_st_ia_bv1_5,l10n_at_gemeinde_payroll.bgld_grp_ia_bv1,5,5798.40,2026-07-01
|
||||
bgld_st_ia_bv1_6,l10n_at_gemeinde_payroll.bgld_grp_ia_bv1,6,5906.60,2026-07-01
|
||||
bgld_st_ia_bv1_7,l10n_at_gemeinde_payroll.bgld_grp_ia_bv1,7,6014.60,2026-07-01
|
||||
bgld_st_ia_bv1_8,l10n_at_gemeinde_payroll.bgld_grp_ia_bv1,8,6122.70,2026-07-01
|
||||
bgld_st_ia_bv1_9,l10n_at_gemeinde_payroll.bgld_grp_ia_bv1,9,6230.80,2026-07-01
|
||||
bgld_st_ia_bv1_10,l10n_at_gemeinde_payroll.bgld_grp_ia_bv1,10,6338.90,2026-07-01
|
||||
bgld_st_ia_bv1_11,l10n_at_gemeinde_payroll.bgld_grp_ia_bv1,11,6447.10,2026-07-01
|
||||
bgld_st_ia_bv1_12,l10n_at_gemeinde_payroll.bgld_grp_ia_bv1,12,6555.10,2026-07-01
|
||||
bgld_st_ia_bv2_1,l10n_at_gemeinde_payroll.bgld_grp_ia_bv2,1,4460.40,2026-07-01
|
||||
bgld_st_ia_bv2_2,l10n_at_gemeinde_payroll.bgld_grp_ia_bv2,2,4586.70,2026-07-01
|
||||
bgld_st_ia_bv2_3,l10n_at_gemeinde_payroll.bgld_grp_ia_bv2,3,4671.70,2026-07-01
|
||||
bgld_st_ia_bv2_4,l10n_at_gemeinde_payroll.bgld_grp_ia_bv2,4,4755.50,2026-07-01
|
||||
bgld_st_ia_bv2_5,l10n_at_gemeinde_payroll.bgld_grp_ia_bv2,5,4840.60,2026-07-01
|
||||
bgld_st_ia_bv2_6,l10n_at_gemeinde_payroll.bgld_grp_ia_bv2,6,4924.30,2026-07-01
|
||||
bgld_st_ia_bv2_7,l10n_at_gemeinde_payroll.bgld_grp_ia_bv2,7,5009.40,2026-07-01
|
||||
bgld_st_ia_bv2_8,l10n_at_gemeinde_payroll.bgld_grp_ia_bv2,8,5093.20,2026-07-01
|
||||
bgld_st_ia_bv2_9,l10n_at_gemeinde_payroll.bgld_grp_ia_bv2,9,5135.70,2026-07-01
|
||||
bgld_st_ia_bv2_10,l10n_at_gemeinde_payroll.bgld_grp_ia_bv2,10,5135.70,2026-07-01
|
||||
bgld_st_ia_bv2_11,l10n_at_gemeinde_payroll.bgld_grp_ia_bv2,11,5135.70,2026-07-01
|
||||
bgld_st_ia_bv2_12,l10n_at_gemeinde_payroll.bgld_grp_ia_bv2,12,5135.70,2026-07-01
|
||||
bgld_st_ia_bv3_1,l10n_at_gemeinde_payroll.bgld_grp_ia_bv3,1,3460.30,2026-07-01
|
||||
bgld_st_ia_bv3_2,l10n_at_gemeinde_payroll.bgld_grp_ia_bv3,2,3475.00,2026-07-01
|
||||
bgld_st_ia_bv3_3,l10n_at_gemeinde_payroll.bgld_grp_ia_bv3,3,3489.70,2026-07-01
|
||||
bgld_st_ia_bv3_4,l10n_at_gemeinde_payroll.bgld_grp_ia_bv3,4,3504.30,2026-07-01
|
||||
bgld_st_ia_bv3_5,l10n_at_gemeinde_payroll.bgld_grp_ia_bv3,5,3519.00,2026-07-01
|
||||
bgld_st_ia_bv3_6,l10n_at_gemeinde_payroll.bgld_grp_ia_bv3,6,3533.80,2026-07-01
|
||||
bgld_st_ia_bv3_7,l10n_at_gemeinde_payroll.bgld_grp_ia_bv3,7,3548.50,2026-07-01
|
||||
bgld_st_ia_bv3_8,l10n_at_gemeinde_payroll.bgld_grp_ia_bv3,8,3563.10,2026-07-01
|
||||
bgld_st_ia_bv3_9,l10n_at_gemeinde_payroll.bgld_grp_ia_bv3,9,3577.80,2026-07-01
|
||||
bgld_st_ia_bv3_10,l10n_at_gemeinde_payroll.bgld_grp_ia_bv3,10,3592.60,2026-07-01
|
||||
bgld_st_ia_bv3_11,l10n_at_gemeinde_payroll.bgld_grp_ia_bv3,11,3607.20,2026-07-01
|
||||
bgld_st_ia_bv3_12,l10n_at_gemeinde_payroll.bgld_grp_ia_bv3,12,3621.90,2026-07-01
|
||||
bgld_st_ia_bv4_1,l10n_at_gemeinde_payroll.bgld_grp_ia_bv4,1,3421.70,2026-07-01
|
||||
bgld_st_ia_bv4_2,l10n_at_gemeinde_payroll.bgld_grp_ia_bv4,2,3421.70,2026-07-01
|
||||
bgld_st_ia_bv4_3,l10n_at_gemeinde_payroll.bgld_grp_ia_bv4,3,3421.70,2026-07-01
|
||||
bgld_st_ia_bv4_4,l10n_at_gemeinde_payroll.bgld_grp_ia_bv4,4,3421.70,2026-07-01
|
||||
bgld_st_ia_bv4_5,l10n_at_gemeinde_payroll.bgld_grp_ia_bv4,5,3421.70,2026-07-01
|
||||
bgld_st_ia_bv4_6,l10n_at_gemeinde_payroll.bgld_grp_ia_bv4,6,3421.70,2026-07-01
|
||||
bgld_st_ia_bv4_7,l10n_at_gemeinde_payroll.bgld_grp_ia_bv4,7,3421.70,2026-07-01
|
||||
bgld_st_ia_bv4_8,l10n_at_gemeinde_payroll.bgld_grp_ia_bv4,8,3421.70,2026-07-01
|
||||
bgld_st_ia_bv4_9,l10n_at_gemeinde_payroll.bgld_grp_ia_bv4,9,3421.70,2026-07-01
|
||||
bgld_st_ia_bv4_10,l10n_at_gemeinde_payroll.bgld_grp_ia_bv4,10,3421.70,2026-07-01
|
||||
bgld_st_ia_bv4_11,l10n_at_gemeinde_payroll.bgld_grp_ia_bv4,11,3421.70,2026-07-01
|
||||
bgld_st_ia_bv4_12,l10n_at_gemeinde_payroll.bgld_grp_ia_bv4,12,3421.70,2026-07-01
|
||||
bgld_st_ia_bv5_1,l10n_at_gemeinde_payroll.bgld_grp_ia_bv5,1,3395.90,2026-07-01
|
||||
bgld_st_ia_bv5_2,l10n_at_gemeinde_payroll.bgld_grp_ia_bv5,2,3395.90,2026-07-01
|
||||
bgld_st_ia_bv5_3,l10n_at_gemeinde_payroll.bgld_grp_ia_bv5,3,3395.90,2026-07-01
|
||||
bgld_st_ia_bv5_4,l10n_at_gemeinde_payroll.bgld_grp_ia_bv5,4,3395.90,2026-07-01
|
||||
bgld_st_ia_bv5_5,l10n_at_gemeinde_payroll.bgld_grp_ia_bv5,5,3395.90,2026-07-01
|
||||
bgld_st_ia_bv5_6,l10n_at_gemeinde_payroll.bgld_grp_ia_bv5,6,3395.90,2026-07-01
|
||||
bgld_st_ia_bv5_7,l10n_at_gemeinde_payroll.bgld_grp_ia_bv5,7,3395.90,2026-07-01
|
||||
bgld_st_ia_bv5_8,l10n_at_gemeinde_payroll.bgld_grp_ia_bv5,8,3395.90,2026-07-01
|
||||
bgld_st_ia_bv5_9,l10n_at_gemeinde_payroll.bgld_grp_ia_bv5,9,3395.90,2026-07-01
|
||||
bgld_st_ia_bv5_10,l10n_at_gemeinde_payroll.bgld_grp_ia_bv5,10,3395.90,2026-07-01
|
||||
bgld_st_ia_bv5_11,l10n_at_gemeinde_payroll.bgld_grp_ia_bv5,11,3395.90,2026-07-01
|
||||
bgld_st_ia_bv5_12,l10n_at_gemeinde_payroll.bgld_grp_ia_bv5,12,3395.90,2026-07-01
|
||||
bgld_st_av_av1_1,l10n_at_gemeinde_payroll.bgld_grp_av_av1,1,7135.20,2026-07-01
|
||||
bgld_st_av_av1_2,l10n_at_gemeinde_payroll.bgld_grp_av_av1,2,7206.90,2026-07-01
|
||||
bgld_st_av_av1_3,l10n_at_gemeinde_payroll.bgld_grp_av_av1,3,7350.30,2026-07-01
|
||||
bgld_st_av_av1_4,l10n_at_gemeinde_payroll.bgld_grp_av_av1,4,7493.70,2026-07-01
|
||||
bgld_st_av_av1_5,l10n_at_gemeinde_payroll.bgld_grp_av_av1,5,7637.10,2026-07-01
|
||||
bgld_st_av_av1_6,l10n_at_gemeinde_payroll.bgld_grp_av_av1,6,7852.10,2026-07-01
|
||||
bgld_st_av_av1_7,l10n_at_gemeinde_payroll.bgld_grp_av_av1,7,7995.50,2026-07-01
|
||||
bgld_st_av_av1_8,l10n_at_gemeinde_payroll.bgld_grp_av_av1,8,8138.90,2026-07-01
|
||||
bgld_st_av_av1_9,l10n_at_gemeinde_payroll.bgld_grp_av_av1,9,8354.10,2026-07-01
|
||||
bgld_st_av_av1_10,l10n_at_gemeinde_payroll.bgld_grp_av_av1,10,8497.50,2026-07-01
|
||||
bgld_st_av_av1_11,l10n_at_gemeinde_payroll.bgld_grp_av_av1,11,8640.80,2026-07-01
|
||||
bgld_st_av_av1_12,l10n_at_gemeinde_payroll.bgld_grp_av_av1,12,8712.50,2026-07-01
|
||||
bgld_st_av_av2_1,l10n_at_gemeinde_payroll.bgld_grp_av_av2,1,6714.20,2026-07-01
|
||||
bgld_st_av_av2_2,l10n_at_gemeinde_payroll.bgld_grp_av_av2,2,6778.40,2026-07-01
|
||||
bgld_st_av_av2_3,l10n_at_gemeinde_payroll.bgld_grp_av_av2,3,6907.10,2026-07-01
|
||||
bgld_st_av_av2_4,l10n_at_gemeinde_payroll.bgld_grp_av_av2,4,7035.60,2026-07-01
|
||||
bgld_st_av_av2_5,l10n_at_gemeinde_payroll.bgld_grp_av_av2,5,7164.20,2026-07-01
|
||||
bgld_st_av_av2_6,l10n_at_gemeinde_payroll.bgld_grp_av_av2,6,7357.00,2026-07-01
|
||||
bgld_st_av_av2_7,l10n_at_gemeinde_payroll.bgld_grp_av_av2,7,7485.60,2026-07-01
|
||||
bgld_st_av_av2_8,l10n_at_gemeinde_payroll.bgld_grp_av_av2,8,7614.10,2026-07-01
|
||||
bgld_st_av_av2_9,l10n_at_gemeinde_payroll.bgld_grp_av_av2,9,7807.00,2026-07-01
|
||||
bgld_st_av_av2_10,l10n_at_gemeinde_payroll.bgld_grp_av_av2,10,7935.60,2026-07-01
|
||||
bgld_st_av_av2_11,l10n_at_gemeinde_payroll.bgld_grp_av_av2,11,8064.20,2026-07-01
|
||||
bgld_st_av_av2_12,l10n_at_gemeinde_payroll.bgld_grp_av_av2,12,8128.50,2026-07-01
|
||||
bgld_st_av_av3_1,l10n_at_gemeinde_payroll.bgld_grp_av_av3,1,6320.10,2026-07-01
|
||||
bgld_st_av_av3_2,l10n_at_gemeinde_payroll.bgld_grp_av_av3,2,6377.60,2026-07-01
|
||||
bgld_st_av_av3_3,l10n_at_gemeinde_payroll.bgld_grp_av_av3,3,6492.80,2026-07-01
|
||||
bgld_st_av_av3_4,l10n_at_gemeinde_payroll.bgld_grp_av_av3,4,6607.90,2026-07-01
|
||||
bgld_st_av_av3_5,l10n_at_gemeinde_payroll.bgld_grp_av_av3,5,6723.10,2026-07-01
|
||||
bgld_st_av_av3_6,l10n_at_gemeinde_payroll.bgld_grp_av_av3,6,6895.80,2026-07-01
|
||||
bgld_st_av_av3_7,l10n_at_gemeinde_payroll.bgld_grp_av_av3,7,7011.00,2026-07-01
|
||||
bgld_st_av_av3_8,l10n_at_gemeinde_payroll.bgld_grp_av_av3,8,7126.20,2026-07-01
|
||||
bgld_st_av_av3_9,l10n_at_gemeinde_payroll.bgld_grp_av_av3,9,7298.90,2026-07-01
|
||||
bgld_st_av_av3_10,l10n_at_gemeinde_payroll.bgld_grp_av_av3,10,7413.90,2026-07-01
|
||||
bgld_st_av_av3_11,l10n_at_gemeinde_payroll.bgld_grp_av_av3,11,7529.10,2026-07-01
|
||||
bgld_st_av_av3_12,l10n_at_gemeinde_payroll.bgld_grp_av_av3,12,7586.70,2026-07-01
|
||||
bgld_st_av_av4_1,l10n_at_gemeinde_payroll.bgld_grp_av_av4,1,5960.00,2026-07-01
|
||||
bgld_st_av_av4_2,l10n_at_gemeinde_payroll.bgld_grp_av_av4,2,6011.50,2026-07-01
|
||||
bgld_st_av_av4_3,l10n_at_gemeinde_payroll.bgld_grp_av_av4,3,6114.60,2026-07-01
|
||||
bgld_st_av_av4_4,l10n_at_gemeinde_payroll.bgld_grp_av_av4,4,6217.70,2026-07-01
|
||||
bgld_st_av_av4_5,l10n_at_gemeinde_payroll.bgld_grp_av_av4,5,6320.80,2026-07-01
|
||||
bgld_st_av_av4_6,l10n_at_gemeinde_payroll.bgld_grp_av_av4,6,6475.50,2026-07-01
|
||||
bgld_st_av_av4_7,l10n_at_gemeinde_payroll.bgld_grp_av_av4,7,6578.60,2026-07-01
|
||||
bgld_st_av_av4_8,l10n_at_gemeinde_payroll.bgld_grp_av_av4,8,6681.70,2026-07-01
|
||||
bgld_st_av_av4_9,l10n_at_gemeinde_payroll.bgld_grp_av_av4,9,6836.30,2026-07-01
|
||||
bgld_st_av_av4_10,l10n_at_gemeinde_payroll.bgld_grp_av_av4,10,6939.40,2026-07-01
|
||||
bgld_st_av_av4_11,l10n_at_gemeinde_payroll.bgld_grp_av_av4,11,7042.50,2026-07-01
|
||||
bgld_st_av_av4_12,l10n_at_gemeinde_payroll.bgld_grp_av_av4,12,7094.00,2026-07-01
|
||||
bgld_st_av_av5_1,l10n_at_gemeinde_payroll.bgld_grp_av_av5,1,5619.80,2026-07-01
|
||||
bgld_st_av_av5_2,l10n_at_gemeinde_payroll.bgld_grp_av_av5,2,5665.80,2026-07-01
|
||||
bgld_st_av_av5_3,l10n_at_gemeinde_payroll.bgld_grp_av_av5,3,5757.80,2026-07-01
|
||||
bgld_st_av_av5_4,l10n_at_gemeinde_payroll.bgld_grp_av_av5,4,5849.90,2026-07-01
|
||||
bgld_st_av_av5_5,l10n_at_gemeinde_payroll.bgld_grp_av_av5,5,5941.90,2026-07-01
|
||||
bgld_st_av_av5_6,l10n_at_gemeinde_payroll.bgld_grp_av_av5,6,6079.90,2026-07-01
|
||||
bgld_st_av_av5_7,l10n_at_gemeinde_payroll.bgld_grp_av_av5,7,6172.00,2026-07-01
|
||||
bgld_st_av_av5_8,l10n_at_gemeinde_payroll.bgld_grp_av_av5,8,6264.00,2026-07-01
|
||||
bgld_st_av_av5_9,l10n_at_gemeinde_payroll.bgld_grp_av_av5,9,6402.00,2026-07-01
|
||||
bgld_st_av_av5_10,l10n_at_gemeinde_payroll.bgld_grp_av_av5,10,6494.10,2026-07-01
|
||||
bgld_st_av_av5_11,l10n_at_gemeinde_payroll.bgld_grp_av_av5,11,6586.10,2026-07-01
|
||||
bgld_st_av_av5_12,l10n_at_gemeinde_payroll.bgld_grp_av_av5,12,6632.10,2026-07-01
|
||||
bgld_st_kb_kb1_1,l10n_at_gemeinde_payroll.bgld_grp_kb_kb1,1,3892.00,2026-07-01
|
||||
bgld_st_kb_kb1_2,l10n_at_gemeinde_payroll.bgld_grp_kb_kb1,2,3968.20,2026-07-01
|
||||
bgld_st_kb_kb1_3,l10n_at_gemeinde_payroll.bgld_grp_kb_kb1,3,4040.30,2026-07-01
|
||||
bgld_st_kb_kb1_4,l10n_at_gemeinde_payroll.bgld_grp_kb_kb1,4,4117.60,2026-07-01
|
||||
bgld_st_kb_kb1_5,l10n_at_gemeinde_payroll.bgld_grp_kb_kb1,5,4189.70,2026-07-01
|
||||
bgld_st_kb_kb1_6,l10n_at_gemeinde_payroll.bgld_grp_kb_kb1,6,4265.90,2026-07-01
|
||||
bgld_st_kb_kb1_7,l10n_at_gemeinde_payroll.bgld_grp_kb_kb1,7,4339.30,2026-07-01
|
||||
bgld_st_kb_kb1_8,l10n_at_gemeinde_payroll.bgld_grp_kb_kb1,8,4413.90,2026-07-01
|
||||
bgld_st_kb_kb1_9,l10n_at_gemeinde_payroll.bgld_grp_kb_kb1,9,4487.60,2026-07-01
|
||||
bgld_st_kb_kb1_10,l10n_at_gemeinde_payroll.bgld_grp_kb_kb1,10,4562.10,2026-07-01
|
||||
bgld_st_kb_kb1_11,l10n_at_gemeinde_payroll.bgld_grp_kb_kb1,11,4638.30,2026-07-01
|
||||
bgld_st_kb_kb1_12,l10n_at_gemeinde_payroll.bgld_grp_kb_kb1,12,4711.70,2026-07-01
|
||||
bgld_st_kb_kb1a_1,l10n_at_gemeinde_payroll.bgld_grp_kb_kb1a,1,3656.80,2026-07-01
|
||||
bgld_st_kb_kb1a_2,l10n_at_gemeinde_payroll.bgld_grp_kb_kb1a,2,3694.90,2026-07-01
|
||||
bgld_st_kb_kb1a_3,l10n_at_gemeinde_payroll.bgld_grp_kb_kb1a,3,3731.00,2026-07-01
|
||||
bgld_st_kb_kb1a_4,l10n_at_gemeinde_payroll.bgld_grp_kb_kb1a,4,3769.60,2026-07-01
|
||||
bgld_st_kb_kb1a_5,l10n_at_gemeinde_payroll.bgld_grp_kb_kb1a,5,3805.70,2026-07-01
|
||||
bgld_st_kb_kb1a_6,l10n_at_gemeinde_payroll.bgld_grp_kb_kb1a,6,3843.80,2026-07-01
|
||||
bgld_st_kb_kb1a_7,l10n_at_gemeinde_payroll.bgld_grp_kb_kb1a,7,3880.50,2026-07-01
|
||||
bgld_st_kb_kb1a_8,l10n_at_gemeinde_payroll.bgld_grp_kb_kb1a,8,3917.90,2026-07-01
|
||||
bgld_st_kb_kb1a_9,l10n_at_gemeinde_payroll.bgld_grp_kb_kb1a,9,3954.60,2026-07-01
|
||||
bgld_st_kb_kb1a_10,l10n_at_gemeinde_payroll.bgld_grp_kb_kb1a,10,3991.90,2026-07-01
|
||||
bgld_st_kb_kb1a_11,l10n_at_gemeinde_payroll.bgld_grp_kb_kb1a,11,4029.90,2026-07-01
|
||||
bgld_st_kb_kb1a_12,l10n_at_gemeinde_payroll.bgld_grp_kb_kb1a,12,4066.70,2026-07-01
|
||||
bgld_st_kb_kb2_1,l10n_at_gemeinde_payroll.bgld_grp_kb_kb2,1,3576.20,2026-07-01
|
||||
bgld_st_kb_kb2_2,l10n_at_gemeinde_payroll.bgld_grp_kb_kb2,2,3576.20,2026-07-01
|
||||
bgld_st_kb_kb2_3,l10n_at_gemeinde_payroll.bgld_grp_kb_kb2,3,3595.60,2026-07-01
|
||||
bgld_st_kb_kb2_4,l10n_at_gemeinde_payroll.bgld_grp_kb_kb2,4,3595.60,2026-07-01
|
||||
bgld_st_kb_kb2_5,l10n_at_gemeinde_payroll.bgld_grp_kb_kb2,5,3595.60,2026-07-01
|
||||
bgld_st_kb_kb2_6,l10n_at_gemeinde_payroll.bgld_grp_kb_kb2,6,3615.00,2026-07-01
|
||||
bgld_st_kb_kb2_7,l10n_at_gemeinde_payroll.bgld_grp_kb_kb2,7,3615.00,2026-07-01
|
||||
bgld_st_kb_kb2_8,l10n_at_gemeinde_payroll.bgld_grp_kb_kb2,8,3615.00,2026-07-01
|
||||
bgld_st_kb_kb2_9,l10n_at_gemeinde_payroll.bgld_grp_kb_kb2,9,3634.30,2026-07-01
|
||||
bgld_st_kb_kb2_10,l10n_at_gemeinde_payroll.bgld_grp_kb_kb2,10,3634.30,2026-07-01
|
||||
bgld_st_kb_kb2_11,l10n_at_gemeinde_payroll.bgld_grp_kb_kb2,11,3634.30,2026-07-01
|
||||
bgld_st_kb_kb2_12,l10n_at_gemeinde_payroll.bgld_grp_kb_kb2,12,3653.60,2026-07-01
|
||||
bgld_st_kb_kb3_1,l10n_at_gemeinde_payroll.bgld_grp_kb_kb3,1,3421.70,2026-07-01
|
||||
bgld_st_kb_kb3_2,l10n_at_gemeinde_payroll.bgld_grp_kb_kb3,2,3421.70,2026-07-01
|
||||
bgld_st_kb_kb3_3,l10n_at_gemeinde_payroll.bgld_grp_kb_kb3,3,3421.70,2026-07-01
|
||||
bgld_st_kb_kb3_4,l10n_at_gemeinde_payroll.bgld_grp_kb_kb3,4,3421.70,2026-07-01
|
||||
bgld_st_kb_kb3_5,l10n_at_gemeinde_payroll.bgld_grp_kb_kb3,5,3421.70,2026-07-01
|
||||
bgld_st_kb_kb3_6,l10n_at_gemeinde_payroll.bgld_grp_kb_kb3,6,3421.70,2026-07-01
|
||||
bgld_st_kb_kb3_7,l10n_at_gemeinde_payroll.bgld_grp_kb_kb3,7,3421.70,2026-07-01
|
||||
bgld_st_kb_kb3_8,l10n_at_gemeinde_payroll.bgld_grp_kb_kb3,8,3421.70,2026-07-01
|
||||
bgld_st_kb_kb3_9,l10n_at_gemeinde_payroll.bgld_grp_kb_kb3,9,3421.70,2026-07-01
|
||||
bgld_st_kb_kb3_10,l10n_at_gemeinde_payroll.bgld_grp_kb_kb3,10,3421.70,2026-07-01
|
||||
bgld_st_kb_kb3_11,l10n_at_gemeinde_payroll.bgld_grp_kb_kb3,11,3421.70,2026-07-01
|
||||
bgld_st_kb_kb3_12,l10n_at_gemeinde_payroll.bgld_grp_kb_kb3,12,3421.70,2026-07-01
|
||||
bgld_st__150c_l2b1_1,l10n_at_gemeinde_payroll.bgld_grp__150c_l2b1,1,2997.00,2026-07-01
|
||||
bgld_st__150c_l2b1_2,l10n_at_gemeinde_payroll.bgld_grp__150c_l2b1,2,3040.60,2026-07-01
|
||||
bgld_st__150c_l2b1_3,l10n_at_gemeinde_payroll.bgld_grp__150c_l2b1,3,3085.40,2026-07-01
|
||||
bgld_st__150c_l2b1_4,l10n_at_gemeinde_payroll.bgld_grp__150c_l2b1,4,3132.50,2026-07-01
|
||||
bgld_st__150c_l2b1_5,l10n_at_gemeinde_payroll.bgld_grp__150c_l2b1,5,3237.10,2026-07-01
|
||||
bgld_st__150c_l2b1_6,l10n_at_gemeinde_payroll.bgld_grp__150c_l2b1,6,3363.70,2026-07-01
|
||||
bgld_st__150c_l2b1_7,l10n_at_gemeinde_payroll.bgld_grp__150c_l2b1,7,3492.50,2026-07-01
|
||||
bgld_st__150c_l2b1_8,l10n_at_gemeinde_payroll.bgld_grp__150c_l2b1,8,3619.70,2026-07-01
|
||||
bgld_st__150c_l2b1_9,l10n_at_gemeinde_payroll.bgld_grp__150c_l2b1,9,3747.70,2026-07-01
|
||||
bgld_st__150c_l2b1_10,l10n_at_gemeinde_payroll.bgld_grp__150c_l2b1,10,3875.50,2026-07-01
|
||||
bgld_st__150c_l2b1_11,l10n_at_gemeinde_payroll.bgld_grp__150c_l2b1,11,4040.30,2026-07-01
|
||||
bgld_st__150c_l2b1_12,l10n_at_gemeinde_payroll.bgld_grp__150c_l2b1,12,4217.10,2026-07-01
|
||||
bgld_st__150c_l2b1_13,l10n_at_gemeinde_payroll.bgld_grp__150c_l2b1,13,4393.70,2026-07-01
|
||||
bgld_st__150c_l2b1_14,l10n_at_gemeinde_payroll.bgld_grp__150c_l2b1,14,4569.80,2026-07-01
|
||||
bgld_st__150c_l2b1_15,l10n_at_gemeinde_payroll.bgld_grp__150c_l2b1,15,4730.90,2026-07-01
|
||||
bgld_st__150c_l2b1_16,l10n_at_gemeinde_payroll.bgld_grp__150c_l2b1,16,4892.20,2026-07-01
|
||||
bgld_st__150c_l2b1_17,l10n_at_gemeinde_payroll.bgld_grp__150c_l2b1,17,5065.10,2026-07-01
|
||||
bgld_st__150c_l2b1_18,l10n_at_gemeinde_payroll.bgld_grp__150c_l2b1,18,5229.00,2026-07-01
|
||||
bgld_st__150c_l2b1_19,l10n_at_gemeinde_payroll.bgld_grp__150c_l2b1,19,5269.20,2026-07-01
|
||||
bgld_st__150c_l3_1,l10n_at_gemeinde_payroll.bgld_grp__150c_l3,1,2749.20,2026-07-01
|
||||
bgld_st__150c_l3_2,l10n_at_gemeinde_payroll.bgld_grp__150c_l3,2,2784.20,2026-07-01
|
||||
bgld_st__150c_l3_3,l10n_at_gemeinde_payroll.bgld_grp__150c_l3,3,2819.30,2026-07-01
|
||||
bgld_st__150c_l3_4,l10n_at_gemeinde_payroll.bgld_grp__150c_l3,4,2854.40,2026-07-01
|
||||
bgld_st__150c_l3_5,l10n_at_gemeinde_payroll.bgld_grp__150c_l3,5,2899.30,2026-07-01
|
||||
bgld_st__150c_l3_6,l10n_at_gemeinde_payroll.bgld_grp__150c_l3,6,2968.90,2026-07-01
|
||||
bgld_st__150c_l3_7,l10n_at_gemeinde_payroll.bgld_grp__150c_l3,7,3056.90,2026-07-01
|
||||
bgld_st__150c_l3_8,l10n_at_gemeinde_payroll.bgld_grp__150c_l3,8,3149.30,2026-07-01
|
||||
bgld_st__150c_l3_9,l10n_at_gemeinde_payroll.bgld_grp__150c_l3,9,3244.70,2026-07-01
|
||||
bgld_st__150c_l3_10,l10n_at_gemeinde_payroll.bgld_grp__150c_l3,10,3342.90,2026-07-01
|
||||
bgld_st__150c_l3_11,l10n_at_gemeinde_payroll.bgld_grp__150c_l3,11,3441.20,2026-07-01
|
||||
bgld_st__150c_l3_12,l10n_at_gemeinde_payroll.bgld_grp__150c_l3,12,3540.00,2026-07-01
|
||||
bgld_st__150c_l3_13,l10n_at_gemeinde_payroll.bgld_grp__150c_l3,13,3639.80,2026-07-01
|
||||
bgld_st__150c_l3_14,l10n_at_gemeinde_payroll.bgld_grp__150c_l3,14,3757.70,2026-07-01
|
||||
bgld_st__150c_l3_15,l10n_at_gemeinde_payroll.bgld_grp__150c_l3,15,3894.80,2026-07-01
|
||||
bgld_st__150c_l3_16,l10n_at_gemeinde_payroll.bgld_grp__150c_l3,16,4031.10,2026-07-01
|
||||
bgld_st__150c_l3_17,l10n_at_gemeinde_payroll.bgld_grp__150c_l3,17,4166.80,2026-07-01
|
||||
bgld_st__150c_l3_18,l10n_at_gemeinde_payroll.bgld_grp__150c_l3,18,4303.10,2026-07-01
|
||||
bgld_st__150c_l3_19,l10n_at_gemeinde_payroll.bgld_grp__150c_l3,19,4371.10,2026-07-01
|
||||
bgld_st__151_gb1_1,l10n_at_gemeinde_payroll.bgld_grp__151_gb1,1,3636.70,2026-07-01
|
||||
bgld_st__151_gb1_2,l10n_at_gemeinde_payroll.bgld_grp__151_gb1,2,3779.40,2026-07-01
|
||||
bgld_st__151_gb1_3,l10n_at_gemeinde_payroll.bgld_grp__151_gb1,3,3922.40,2026-07-01
|
||||
bgld_st__151_gb1_4,l10n_at_gemeinde_payroll.bgld_grp__151_gb1,4,4065.30,2026-07-01
|
||||
bgld_st__151_gb1_5,l10n_at_gemeinde_payroll.bgld_grp__151_gb1,5,4208.60,2026-07-01
|
||||
bgld_st__151_gb1_6,l10n_at_gemeinde_payroll.bgld_grp__151_gb1,6,4351.30,2026-07-01
|
||||
bgld_st__151_gb1_7,l10n_at_gemeinde_payroll.bgld_grp__151_gb1,7,4494.40,2026-07-01
|
||||
bgld_st__151_gb1_8,l10n_at_gemeinde_payroll.bgld_grp__151_gb1,8,4637.10,2026-07-01
|
||||
bgld_st__151_gb1_9,l10n_at_gemeinde_payroll.bgld_grp__151_gb1,9,4780.10,2026-07-01
|
||||
bgld_st__151_gb1_10,l10n_at_gemeinde_payroll.bgld_grp__151_gb1,10,4923.20,2026-07-01
|
||||
bgld_st__151_gb1_11,l10n_at_gemeinde_payroll.bgld_grp__151_gb1,11,5066.00,2026-07-01
|
||||
bgld_st__151_gb1_12,l10n_at_gemeinde_payroll.bgld_grp__151_gb1,12,5155.50,2026-07-01
|
||||
bgld_st__151_gb2_1,l10n_at_gemeinde_payroll.bgld_grp__151_gb2,1,3308.30,2026-07-01
|
||||
bgld_st__151_gb2_2,l10n_at_gemeinde_payroll.bgld_grp__151_gb2,2,3384.80,2026-07-01
|
||||
bgld_st__151_gb2_3,l10n_at_gemeinde_payroll.bgld_grp__151_gb2,3,3461.30,2026-07-01
|
||||
bgld_st__151_gb2_4,l10n_at_gemeinde_payroll.bgld_grp__151_gb2,4,3537.40,2026-07-01
|
||||
bgld_st__151_gb2_5,l10n_at_gemeinde_payroll.bgld_grp__151_gb2,5,3614.00,2026-07-01
|
||||
bgld_st__151_gb2_6,l10n_at_gemeinde_payroll.bgld_grp__151_gb2,6,3690.40,2026-07-01
|
||||
bgld_st__151_gb2_7,l10n_at_gemeinde_payroll.bgld_grp__151_gb2,7,3766.70,2026-07-01
|
||||
bgld_st__151_gb2_8,l10n_at_gemeinde_payroll.bgld_grp__151_gb2,8,3843.30,2026-07-01
|
||||
bgld_st__151_gb2_9,l10n_at_gemeinde_payroll.bgld_grp__151_gb2,9,3919.60,2026-07-01
|
||||
bgld_st__151_gb2_10,l10n_at_gemeinde_payroll.bgld_grp__151_gb2,10,3995.90,2026-07-01
|
||||
bgld_st__151_gb2_11,l10n_at_gemeinde_payroll.bgld_grp__151_gb2,11,4072.40,2026-07-01
|
||||
bgld_st__151_gb2_12,l10n_at_gemeinde_payroll.bgld_grp__151_gb2,12,4129.60,2026-07-01
|
||||
bgld_st__151c_gb1a_1,l10n_at_gemeinde_payroll.bgld_grp__151c_gb1a,1,3328.20,2026-07-01
|
||||
bgld_st__151c_gb1a_2,l10n_at_gemeinde_payroll.bgld_grp__151c_gb1a,2,3421.40,2026-07-01
|
||||
bgld_st__151c_gb1a_3,l10n_at_gemeinde_payroll.bgld_grp__151c_gb1a,3,3514.60,2026-07-01
|
||||
bgld_st__151c_gb1a_4,l10n_at_gemeinde_payroll.bgld_grp__151c_gb1a,4,3607.60,2026-07-01
|
||||
bgld_st__151c_gb1a_5,l10n_at_gemeinde_payroll.bgld_grp__151c_gb1a,5,3701.00,2026-07-01
|
||||
bgld_st__151c_gb1a_6,l10n_at_gemeinde_payroll.bgld_grp__151c_gb1a,6,3794.10,2026-07-01
|
||||
bgld_st__151c_gb1a_7,l10n_at_gemeinde_payroll.bgld_grp__151c_gb1a,7,3887.40,2026-07-01
|
||||
bgld_st__151c_gb1a_8,l10n_at_gemeinde_payroll.bgld_grp__151c_gb1a,8,3980.80,2026-07-01
|
||||
bgld_st__151c_gb1a_9,l10n_at_gemeinde_payroll.bgld_grp__151c_gb1a,9,4074.70,2026-07-01
|
||||
bgld_st__151c_gb1a_10,l10n_at_gemeinde_payroll.bgld_grp__151c_gb1a,10,4168.30,2026-07-01
|
||||
bgld_st__151c_gb1a_11,l10n_at_gemeinde_payroll.bgld_grp__151c_gb1a,11,4261.70,2026-07-01
|
||||
bgld_st__151c_gb1a_12,l10n_at_gemeinde_payroll.bgld_grp__151c_gb1a,12,4323.30,2026-07-01
|
||||
bgld_st__151c_gb3_1,l10n_at_gemeinde_payroll.bgld_grp__151c_gb3,1,3019.80,2026-07-01
|
||||
bgld_st__151c_gb3_2,l10n_at_gemeinde_payroll.bgld_grp__151c_gb3,2,3063.30,2026-07-01
|
||||
bgld_st__151c_gb3_3,l10n_at_gemeinde_payroll.bgld_grp__151c_gb3,3,3106.90,2026-07-01
|
||||
bgld_st__151c_gb3_4,l10n_at_gemeinde_payroll.bgld_grp__151c_gb3,4,3150.10,2026-07-01
|
||||
bgld_st__151c_gb3_5,l10n_at_gemeinde_payroll.bgld_grp__151c_gb3,5,3193.30,2026-07-01
|
||||
bgld_st__151c_gb3_6,l10n_at_gemeinde_payroll.bgld_grp__151c_gb3,6,3236.80,2026-07-01
|
||||
bgld_st__151c_gb3_7,l10n_at_gemeinde_payroll.bgld_grp__151c_gb3,7,3280.40,2026-07-01
|
||||
bgld_st__151c_gb3_8,l10n_at_gemeinde_payroll.bgld_grp__151c_gb3,8,3324.40,2026-07-01
|
||||
bgld_st__151c_gb3_9,l10n_at_gemeinde_payroll.bgld_grp__151c_gb3,9,3369.20,2026-07-01
|
||||
bgld_st__151c_gb3_10,l10n_at_gemeinde_payroll.bgld_grp__151c_gb3,10,3413.30,2026-07-01
|
||||
bgld_st__151c_gb3_11,l10n_at_gemeinde_payroll.bgld_grp__151c_gb3,11,3457.60,2026-07-01
|
||||
bgld_st__151c_gb3_12,l10n_at_gemeinde_payroll.bgld_grp__151c_gb3,12,3491.20,2026-07-01
|
||||
|
@@ -1,3 +1,3 @@
|
||||
# Models are implemented as part of the approved implementation plan;
|
||||
# see personalverrechnung/PLAN-payroll-bgld.md and
|
||||
# personalverrechnung/RECHTSQUELLEN-Bgld.md.
|
||||
# Part of the gem360 onboarding. See LICENSE / project docs for details.
|
||||
from . import entlohnung
|
||||
from . import hr_version_bgld
|
||||
@@ -0,0 +1,98 @@
|
||||
# Part of the gem360 onboarding. See LICENSE / project docs for details.
|
||||
from odoo import _, api, fields, models
|
||||
|
||||
|
||||
class GemeindePayrollEntlohnungsgruppe(models.Model):
|
||||
"""Entlohnungsgruppe des Bgld. GemBG 2014 (z. B. bv1, kb2, av1).
|
||||
|
||||
Die Entlohnungsstruktur des GemBG ist schemenbasiert (Entlohnungs-
|
||||
schemata I, II, Ia, IIa, kb, av sowie Sondergruppen je §). Eine Gruppe
|
||||
gehört zu genau einem Schema; die Monatsentgelte je Stufe stehen auf
|
||||
``gemeinde.payroll.entlohnungsstufe`` (Jahreswerte aus den Bgld.
|
||||
Bezügeanpassungs-Sammelgesetzen, siehe personalverrechnung/).
|
||||
"""
|
||||
_name = 'gemeinde.payroll.entlohnungsgruppe'
|
||||
_description = 'GemBG Entlohnungsgruppe (Bgld.)'
|
||||
_order = 'bundesland, schema, code'
|
||||
|
||||
code = fields.Char(required=True, index=True)
|
||||
schema = fields.Char(
|
||||
required=True, index=True,
|
||||
help="Entlohnungsschema gemäß GemBG (z. B. I, II, Ia, IIa, kb, av "
|
||||
"oder §-Kennung für Sondergruppen).")
|
||||
paragraph = fields.Char(
|
||||
help="Paragraf der Monatsentgelt-Tabelle im Bgld. GemBG 2014.")
|
||||
bundesland = fields.Selection(
|
||||
[('bgld', 'Burgenland')], required=True, default='bgld', index=True)
|
||||
vorrueckungszeitraum_jahre = fields.Integer(
|
||||
string='Vorrückungszeitraum (Jahre)', required=True, default=4,
|
||||
help="§ 66 Abs 2 GemBG: 4 Jahre; abweichend 2 Jahre für bestimmte "
|
||||
"Gruppen (§ 150c Abs 2, Betreuungspersonen nach § 150d ff).")
|
||||
active = fields.Boolean(default=True)
|
||||
entlohnungsstufe_ids = fields.One2many(
|
||||
'gemeinde.payroll.entlohnungsstufe', 'entlohnungsgruppe_id',
|
||||
string='Entlohnungsstufen')
|
||||
|
||||
_unique_group = models.Constraint(
|
||||
'unique (bundesland, schema, code)',
|
||||
"Eine Entlohnungsgruppe existiert je Schema und Bundesland nur einmal.")
|
||||
|
||||
@api.depends('code', 'schema')
|
||||
def _compute_display_name(self):
|
||||
for gruppe in self:
|
||||
gruppe.display_name = f"{gruppe.code} ({gruppe.schema})"
|
||||
|
||||
def _get_entgelt(self, stufe, datum=None):
|
||||
"""Liefert die Entlohnungsstufen-Position zum Stichtag (oder leer)."""
|
||||
self.ensure_one()
|
||||
datum = datum or fields.Date.context_today(self)
|
||||
return self.env['gemeinde.payroll.entlohnungsstufe'].search(
|
||||
[('entlohnungsgruppe_id', '=', self.id),
|
||||
('stufe', '=', stufe),
|
||||
('gueltig_ab', '<=', datum)],
|
||||
order='gueltig_ab desc', limit=1)
|
||||
|
||||
def _max_stufe(self, datum=None):
|
||||
"""Höchste Stufe mit gültigem Monatsentgelt zum Stichtag."""
|
||||
self.ensure_one()
|
||||
datum = datum or fields.Date.context_today(self)
|
||||
stufe = self.env['gemeinde.payroll.entlohnungsstufe'].search(
|
||||
[('entlohnungsgruppe_id', '=', self.id),
|
||||
('gueltig_ab', '<=', datum)],
|
||||
order='stufe desc', limit=1)
|
||||
return stufe.stufe or 0
|
||||
|
||||
|
||||
class GemeindePayrollEntlohnungsstufe(models.Model):
|
||||
"""Monatsentgelt einer Entlohnungsgruppe in einer Stufe ab einem
|
||||
Stichtag (Jahresversionen aus den Bezügeanpassungs-Tabellen)."""
|
||||
_name = 'gemeinde.payroll.entlohnungsstufe'
|
||||
_description = 'GemBG Monatsentgelt je Entlohnungsstufe (Bgld.)'
|
||||
_order = 'entlohnungsgruppe_id, stufe, gueltig_ab desc'
|
||||
_rec_names_search = ['entlohnungsgruppe_id']
|
||||
|
||||
entlohnungsgruppe_id = fields.Many2one(
|
||||
'gemeinde.payroll.entlohnungsgruppe', required=True, index=True,
|
||||
ondelete='cascade')
|
||||
stufe = fields.Integer(required=True, index=True)
|
||||
monatsentgelt = fields.Monetary(currency_field='currency_id')
|
||||
currency_id = fields.Many2one(
|
||||
'res.currency', default=lambda self: self.env.company.currency_id)
|
||||
gueltig_ab = fields.Date(
|
||||
required=True, index=True,
|
||||
default=lambda self: fields.Date.today().replace(month=1, day=1))
|
||||
|
||||
_unique_stufe = models.Constraint(
|
||||
'unique (entlohnungsgruppe_id, stufe, gueltig_ab)',
|
||||
"Je Entlohnungsgruppe und Stufe gibt es nur einen Wert je Stichtag.")
|
||||
|
||||
@api.depends('entlohnungsgruppe_id', 'stufe', 'monatsentgelt', 'gueltig_ab')
|
||||
def _compute_display_name(self):
|
||||
for stufe in self:
|
||||
stufe.display_name = _(
|
||||
"%(gruppe)s, Stufe %(stufe)s (%(betrag)s ab %(ab)s)",
|
||||
gruppe=stufe.entlohnungsgruppe_id.code,
|
||||
stufe=stufe.stufe,
|
||||
betrag=stufe.monatsentgelt,
|
||||
ab=stufe.gueltig_ab,
|
||||
)
|
||||
@@ -0,0 +1,72 @@
|
||||
# Part of the gem360 onboarding. See LICENSE / project docs for details.
|
||||
from dateutil.relativedelta import relativedelta
|
||||
|
||||
from odoo import api, fields, models
|
||||
|
||||
|
||||
class HrVersion(models.Model):
|
||||
"""GemBG-Besoldungsfelder auf der Payroll-Version des Mitarbeiters.
|
||||
|
||||
§ 66 Abs 2 Bgld. GemBG 2014: Die Vorrückung erfolgt mit dem ersten Tag
|
||||
jenes Monats, der auf die Vollendung weiterer vier Jahre des
|
||||
Besoldungsdienstalters folgt (Vorrückungstermin); für bestimmte Gruppen
|
||||
zwei Jahre (§ 150c Abs 2, § 150d ff). Überleitungsfälle (§§ 157a ff)
|
||||
können einen einmalig vorgezogenen Termin haben — daher ist der
|
||||
berechnete Termin manuell überschreibbar.
|
||||
"""
|
||||
_inherit = 'hr.version'
|
||||
|
||||
entlohnungsgruppe_id = fields.Many2one(
|
||||
'gemeinde.payroll.entlohnungsgruppe', index=True,
|
||||
groups="hr_payroll.group_hr_payroll_user", tracking=True)
|
||||
entlohnungsstufe = fields.Integer(
|
||||
groups="hr_payroll.group_hr_payroll_user", tracking=True)
|
||||
besoldungsdienstalter = fields.Date(
|
||||
string='Besoldungsdienstalter (ab)',
|
||||
groups="hr_payroll.group_hr_payroll_user", tracking=True)
|
||||
vorrueckungstermin = fields.Date(
|
||||
compute='_compute_vorrueckungstermin', store=True, readonly=False,
|
||||
groups="hr_payroll.group_hr_payroll_user", tracking=True,
|
||||
help="Vorschlag nach § 66 Abs 2 GemBG (BDA + Vorrückungszeitraum); "
|
||||
"bei Überleitungsfällen manuell korrigierbar.")
|
||||
|
||||
@api.depends('entlohnungsgruppe_id', 'besoldungsdienstalter')
|
||||
def _compute_vorrueckungstermin(self):
|
||||
for version in self:
|
||||
bda = version.besoldungsdienstalter
|
||||
gruppe = version.entlohnungsgruppe_id
|
||||
if not bda or not gruppe:
|
||||
version.vorrueckungstermin = False
|
||||
continue
|
||||
period = gruppe.vorrueckungszeitraum_jahre or 4
|
||||
today = fields.Date.context_today(version)
|
||||
elapsed_years = relativedelta(today, bda).years
|
||||
next_maturity = bda + relativedelta(
|
||||
years=(elapsed_years // period + 1) * period)
|
||||
version.vorrueckungstermin = (
|
||||
fields.Date.end_of(next_maturity, 'month')
|
||||
+ relativedelta(days=1)
|
||||
)
|
||||
|
||||
def _get_katalog_entgelt(self, datum=None):
|
||||
"""Katalog-Position (Monatsentgelt) der Version zum Stichtag."""
|
||||
self.ensure_one()
|
||||
return self.entlohnungsgruppe_id._get_entgelt(
|
||||
self.entlohnungsstufe, datum)
|
||||
|
||||
|
||||
class HrEmployee(models.Model):
|
||||
_inherit = 'hr.employee'
|
||||
|
||||
entlohnungsgruppe_id = fields.Many2one(
|
||||
related="version_id.entlohnungsgruppe_id", inherited=True,
|
||||
readonly=False, groups="hr_payroll.group_hr_payroll_user")
|
||||
entlohnungsstufe = fields.Integer(
|
||||
related="version_id.entlohnungsstufe", inherited=True,
|
||||
readonly=False, groups="hr_payroll.group_hr_payroll_user")
|
||||
besoldungsdienstalter = fields.Date(
|
||||
related="version_id.besoldungsdienstalter", inherited=True,
|
||||
readonly=False, groups="hr_payroll.group_hr_payroll_user")
|
||||
vorrueckungstermin = fields.Date(
|
||||
related="version_id.vorrueckungstermin", inherited=True,
|
||||
readonly=False, groups="hr_payroll.group_hr_payroll_user")
|
||||
@@ -0,0 +1,5 @@
|
||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_gemeinde_payroll_entlohnungsgruppe_user,Gemeinde Payroll Entlohnungsgruppe User,model_gemeinde_payroll_entlohnungsgruppe,hr_payroll.group_hr_payroll_user,1,0,0,0
|
||||
access_gemeinde_payroll_entlohnungsgruppe_manager,Gemeinde Payroll Entlohnungsgruppe Manager,model_gemeinde_payroll_entlohnungsgruppe,hr_payroll.group_hr_payroll_manager,1,1,1,1
|
||||
access_gemeinde_payroll_entlohnungsstufe_user,Gemeinde Payroll Entlohnungsstufe User,model_gemeinde_payroll_entlohnungsstufe,hr_payroll.group_hr_payroll_user,1,0,0,0
|
||||
access_gemeinde_payroll_entlohnungsstufe_manager,Gemeinde Payroll Entlohnungsstufe Manager,model_gemeinde_payroll_entlohnungsstufe,hr_payroll.group_hr_payroll_manager,1,1,1,1
|
||||
|
@@ -0,0 +1,2 @@
|
||||
# Part of the gem360 onboarding. See LICENSE / project docs for details.
|
||||
from . import test_katalog
|
||||
@@ -0,0 +1,95 @@
|
||||
# Part of the gem360 onboarding. See LICENSE / project docs for details.
|
||||
from datetime import date
|
||||
|
||||
from odoo.tests import TransactionCase, tagged
|
||||
|
||||
|
||||
@tagged('post_install', '-at_install')
|
||||
class KatalogTest(TransactionCase):
|
||||
"""Rechenfälle AP1: Katalog-Seed 2026, Stichtags-Lookup, Versionierung,
|
||||
Vorrückungstermin nach § 66 Abs 2 GemBG und Vorrückungs-Wizard."""
|
||||
|
||||
def test_01_seed_2026_values(self):
|
||||
"""Seed-Werte der konsolidierten GemBG-Fassung (Wert 1.7.2026)."""
|
||||
av1 = self.env.ref('l10n_at_gemeinde_payroll.bgld_grp_av_av1')
|
||||
bv1 = self.env.ref('l10n_at_gemeinde_payroll.bgld_grp_ia_bv1')
|
||||
kb1a = self.env.ref('l10n_at_gemeinde_payroll.bgld_grp_kb_kb1a')
|
||||
gb1a = self.env.ref('l10n_at_gemeinde_payroll.bgld_grp__151c_gb1a')
|
||||
gv1 = self.env.ref('l10n_at_gemeinde_payroll.bgld_grp_i_gv1')
|
||||
stichtag = date(2026, 7, 1)
|
||||
self.assertEqual(av1._get_entgelt(1, stichtag).monatsentgelt, 7135.20)
|
||||
self.assertEqual(av1._get_entgelt(12, stichtag).monatsentgelt, 8712.50)
|
||||
self.assertEqual(bv1._get_entgelt(1, stichtag).monatsentgelt, 5329.00)
|
||||
# Quellenanomalie "3843,80" (fehlender Tausenderpunkt) korrekt geparst
|
||||
self.assertEqual(kb1a._get_entgelt(6, stichtag).monatsentgelt, 3843.80)
|
||||
self.assertEqual(gb1a._get_entgelt(1, stichtag).monatsentgelt, 3328.20)
|
||||
# gv1 endet laut Tabelle bei Stufe 11
|
||||
self.assertEqual(gv1._max_stufe(stichtag), 11)
|
||||
self.assertEqual(av1._max_stufe(stichtag), 12)
|
||||
|
||||
def test_02_lookup_before_gueltig_ab(self):
|
||||
"""Vor dem Stichtag gibt es keinen Wert (Vorrückungsbasis alt)."""
|
||||
av1 = self.env.ref('l10n_at_gemeinde_payroll.bgld_grp_av_av1')
|
||||
self.assertFalse(av1._get_entgelt(1, date(2026, 6, 30)))
|
||||
|
||||
def test_03_versioning(self):
|
||||
"""Jahresversionen: neuer Wert greift erst ab seinem Stichtag."""
|
||||
av1 = self.env.ref('l10n_at_gemeinde_payroll.bgld_grp_av_av1')
|
||||
self.env['gemeinde.payroll.entlohnungsstufe'].create({
|
||||
'entlohnungsgruppe_id': av1.id,
|
||||
'stufe': 1,
|
||||
'monatsentgelt': 7300.00,
|
||||
'gueltig_ab': date(2027, 7, 1),
|
||||
})
|
||||
self.assertEqual(
|
||||
av1._get_entgelt(1, date(2026, 12, 31)).monatsentgelt, 7135.20)
|
||||
self.assertEqual(
|
||||
av1._get_entgelt(1, date(2027, 7, 1)).monatsentgelt, 7300.00)
|
||||
|
||||
def _version_mit_katalog(self, bda, stufe=1):
|
||||
employee = self.env['hr.employee'].create({'name': 'Test GemBG'})
|
||||
version = self.env['hr.version'].search(
|
||||
[('employee_id', '=', employee.id)], limit=1)
|
||||
if not version:
|
||||
version = self.env['hr.version'].create({
|
||||
'employee_id': employee.id,
|
||||
'date_start': date(2020, 1, 1),
|
||||
})
|
||||
version.write({
|
||||
'entlohnungsgruppe_id':
|
||||
self.env.ref('l10n_at_gemeinde_payroll.bgld_grp_av_av1').id,
|
||||
'entlohnungsstufe': stufe,
|
||||
'besoldungsdienstalter': bda,
|
||||
})
|
||||
return version
|
||||
|
||||
def test_04_vorrueckungstermin(self):
|
||||
"""§ 66 Abs 2: 4-Jahres-Rhythmus, erster Tag des Folgemonats.
|
||||
|
||||
BDA 15.03.2020, heute >= 2026: die nächste Vollendung weiterer
|
||||
4 Jahre ist 15.03.2028 → Vorrückungstermin 1.4.2028.
|
||||
"""
|
||||
version = self._version_mit_katalog(date(2020, 3, 15))
|
||||
self.assertEqual(version.vorrueckungstermin, date(2028, 4, 1))
|
||||
|
||||
def test_05_wizard_apply(self):
|
||||
"""Wizard erhöht die Stufe fälliger Versionen und überspringt
|
||||
die Höchststufe."""
|
||||
version = self._version_mit_katalog(date(2014, 3, 15), stufe=3)
|
||||
version.vorrueckungstermin = date(2024, 4, 1)
|
||||
max_stufe = version.entlohnungsgruppe_id._max_stufe(date(2024, 4, 1))
|
||||
wizard = self.env['gemeinde.payroll.vorrueckung.wizard'].create({
|
||||
'stichtag': date(2024, 4, 1),
|
||||
})
|
||||
self.assertIn(version, wizard.version_ids)
|
||||
wizard.action_apply()
|
||||
self.assertEqual(version.entlohnungsstufe, 4)
|
||||
|
||||
version_top = self._version_mit_katalog(date(2014, 3, 15),
|
||||
stufe=max_stufe)
|
||||
version_top.vorrueckungstermin = date(2024, 4, 1)
|
||||
wizard2 = self.env['gemeinde.payroll.vorrueckung.wizard'].create({
|
||||
'stichtag': date(2024, 4, 1),
|
||||
})
|
||||
wizard2.action_apply()
|
||||
self.assertEqual(version_top.entlohnungsstufe, max_stufe)
|
||||
@@ -0,0 +1,131 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="entlohnungsgruppe_list_view" model="ir.ui.view">
|
||||
<field name="name">gemeinde.payroll.entlohnungsgruppe.list</field>
|
||||
<field name="model">gemeinde.payroll.entlohnungsgruppe</field>
|
||||
<field name="arch" type="xml">
|
||||
<list string="Entlohnungsgruppen">
|
||||
<field name="code"/>
|
||||
<field name="schema"/>
|
||||
<field name="paragraph"/>
|
||||
<field name="vorrueckungszeitraum_jahre"/>
|
||||
<field name="bundesland" column_invisible="1"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="entlohnungsgruppe_form_view" model="ir.ui.view">
|
||||
<field name="name">gemeinde.payroll.entlohnungsgruppe.form</field>
|
||||
<field name="model">gemeinde.payroll.entlohnungsgruppe</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Entlohnungsgruppe">
|
||||
<sheet>
|
||||
<group>
|
||||
<group>
|
||||
<field name="code"/>
|
||||
<field name="schema"/>
|
||||
<field name="paragraph"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="bundesland"/>
|
||||
<field name="vorrueckungszeitraum_jahre"/>
|
||||
<field name="active" widget="boolean_toggle"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page string="Entlohnungsstufen" name="stufen">
|
||||
<field name="entlohnungsstufe_ids">
|
||||
<list editable="bottom">
|
||||
<field name="stufe"/>
|
||||
<field name="monatsentgelt"/>
|
||||
<field name="gueltig_ab"/>
|
||||
</list>
|
||||
</field>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="entlohnungsstufe_list_view" model="ir.ui.view">
|
||||
<field name="name">gemeinde.payroll.entlohnungsstufe.list</field>
|
||||
<field name="model">gemeinde.payroll.entlohnungsstufe</field>
|
||||
<field name="arch" type="xml">
|
||||
<list string="Entlohnungsstufen" multi_edit="1">
|
||||
<field name="entlohnungsgruppe_id"/>
|
||||
<field name="stufe"/>
|
||||
<field name="monatsentgelt" sum="Summe"/>
|
||||
<field name="gueltig_ab"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_entlohnungsgruppe" model="ir.actions.act_window">
|
||||
<field name="name">Entlohnungsgruppen (GemBG)</field>
|
||||
<field name="res_model">gemeinde.payroll.entlohnungsgruppe</field>
|
||||
<field name="view_mode">list,form</field>
|
||||
</record>
|
||||
|
||||
<record id="action_entlohnungsstufe" model="ir.actions.act_window">
|
||||
<field name="name">Entlohnungsstufen (GemBG)</field>
|
||||
<field name="res_model">gemeinde.payroll.entlohnungsstufe</field>
|
||||
<field name="view_mode">list</field>
|
||||
<field name="context">{'search_default_groupby_entlohnungsgruppe_id': 1}</field>
|
||||
</record>
|
||||
|
||||
<record id="vorrueckung_wizard_form_view" model="ir.ui.view">
|
||||
<field name="name">gemeinde.payroll.vorrueckung.wizard.form</field>
|
||||
<field name="model">gemeinde.payroll.vorrueckung.wizard</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Vorrückungen anwenden">
|
||||
<group>
|
||||
<field name="stichtag"/>
|
||||
</group>
|
||||
<field name="anzahl" invisible="1"/>
|
||||
<field name="version_ids">
|
||||
<list create="0" delete="0">
|
||||
<field name="employee_id"/>
|
||||
<field name="entlohnungsgruppe_id"/>
|
||||
<field name="entlohnungsstufe"/>
|
||||
<field name="besoldungsdienstalter"/>
|
||||
<field name="vorrueckungstermin"/>
|
||||
</list>
|
||||
</field>
|
||||
<footer>
|
||||
<button string="Vorrückungen anwenden" name="action_apply"
|
||||
type="object" class="btn-primary"/>
|
||||
<button string="Abbrechen" class="btn-secondary"
|
||||
special="cancel"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_vorrueckung_wizard" model="ir.actions.act_window">
|
||||
<field name="name">Vorrückungen anwenden (§ 66 Abs 2)</field>
|
||||
<field name="res_model">gemeinde.payroll.vorrueckung.wizard</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_gemeinde_payroll_root"
|
||||
name="Personalverrechnung (Bgld.)"
|
||||
parent="hr_work_entry_enterprise.menu_hr_payroll_root"
|
||||
sequence="90"/>
|
||||
|
||||
<menuitem id="menu_gemeinde_payroll_gruppen"
|
||||
name="Entlohnungsgruppen"
|
||||
parent="menu_gemeinde_payroll_root"
|
||||
action="action_entlohnungsgruppe" sequence="10"/>
|
||||
|
||||
<menuitem id="menu_gemeinde_payroll_stufen"
|
||||
name="Entlohnungsstufen"
|
||||
parent="menu_gemeinde_payroll_root"
|
||||
action="action_entlohnungsstufe" sequence="20"/>
|
||||
|
||||
<menuitem id="menu_gemeinde_payroll_vorrueckung"
|
||||
name="Vorrückungen anwenden"
|
||||
parent="menu_gemeinde_payroll_root"
|
||||
action="action_vorrueckung_wizard" sequence="30"/>
|
||||
</odoo>
|
||||
@@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="payroll_hr_employee_view_form_gembg" model="ir.ui.view">
|
||||
<field name="name">hr.employee.form.gembg</field>
|
||||
<field name="model">hr.employee</field>
|
||||
<field name="inherit_id" ref="hr_payroll.payroll_hr_employee_view_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<group name="payroll_group" position="inside">
|
||||
<group name="gembg_besoldung" string="Bgld. GemBG"
|
||||
groups="hr_payroll.group_hr_payroll_user">
|
||||
<field name="entlohnungsgruppe_id"/>
|
||||
<field name="entlohnungsstufe" invisible="not entlohnungsgruppe_id"/>
|
||||
<field name="besoldungsdienstalter" invisible="not entlohnungsgruppe_id"/>
|
||||
<field name="vorrueckungstermin" invisible="not entlohnungsgruppe_id"/>
|
||||
</group>
|
||||
</group>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
@@ -0,0 +1,2 @@
|
||||
# Part of the gem360 onboarding. See LICENSE / project docs for details.
|
||||
from . import vorrueckung_run
|
||||
@@ -0,0 +1,70 @@
|
||||
# Part of the gem360 onboarding. See LICENSE / project docs for details.
|
||||
from odoo import _, api, fields, models
|
||||
|
||||
|
||||
class GemeindePayrollVorrueckungWizard(models.TransientModel):
|
||||
"""Wendet fällige GemBG-Vorrückungen (§ 66 Abs 2) explizit an.
|
||||
|
||||
Vorrückungen werden bewusst nicht still im Lohnlauf mutiert: Der
|
||||
Vorrückungstermin ist ein dokumentationspflichtiger Verwaltungsakt.
|
||||
Der Wizard listet die fälligen Versionen zum Stichtag, erhöht die
|
||||
Entlohnungsstufe und setzt den nächsten Vorrückungstermin (BDA-
|
||||
Logik, siehe hr_version_bgld).
|
||||
"""
|
||||
_name = 'gemeinde.payroll.vorrueckung.wizard'
|
||||
_description = 'GemBG Vorrückungen anwenden (§ 66 Abs 2)'
|
||||
|
||||
stichtag = fields.Date(
|
||||
required=True, default=fields.Date.today,
|
||||
help="Vorrückungstermine bis zu diesem Tag werden berücksichtigt.")
|
||||
version_ids = fields.Many2many(
|
||||
'hr.version', string='Fällige Dienstverhältnisse',
|
||||
compute='_compute_version_ids', readonly=False)
|
||||
anzahl = fields.Integer(compute='_compute_anzahl')
|
||||
|
||||
@api.depends('stichtag')
|
||||
def _compute_version_ids(self):
|
||||
for wizard in self:
|
||||
wizard.version_ids = wizard._get_faellige_versionen()
|
||||
|
||||
@api.depends('version_ids')
|
||||
def _compute_anzahl(self):
|
||||
for wizard in self:
|
||||
wizard.anzahl = len(wizard.version_ids)
|
||||
|
||||
def _get_faellige_versionen(self):
|
||||
self.ensure_one()
|
||||
if not self.stichtag:
|
||||
return self.env['hr.version']
|
||||
return self.env['hr.version'].search([
|
||||
('entlohnungsgruppe_id', '!=', False),
|
||||
('vorrueckungstermin', '<=', self.stichtag),
|
||||
('date_start', '<=', self.stichtag),
|
||||
'|', ('date_end', '=', False),
|
||||
('date_end', '>=', self.stichtag),
|
||||
])
|
||||
|
||||
def action_apply(self):
|
||||
self.ensure_one()
|
||||
applied = self.env['hr.version']
|
||||
skipped = 0
|
||||
for version in self.version_ids:
|
||||
max_stufe = version.entlohnungsgruppe_id._max_stufe(self.stichtag)
|
||||
if version.entlohnungsstufe >= max_stufe:
|
||||
skipped += 1
|
||||
continue
|
||||
version.entlohnungsstufe += 1
|
||||
applied |= version
|
||||
return {
|
||||
'type': 'ir.actions.client',
|
||||
'tag': 'display_notification',
|
||||
'params': {
|
||||
'type': 'success' if applied else 'warning',
|
||||
'message': _(
|
||||
"%(applied)s Vorrückung(en) angewendet, "
|
||||
"%(skipped)s an der Höchststufe übersprungen.",
|
||||
applied=len(applied), skipped=skipped,
|
||||
),
|
||||
'next': {'type': 'ir.actions.act_window_close'},
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,172 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Extract Bgld. GemBG 2014 pay scale tables (Entlohnungsschemata) into
|
||||
module CSV seed data for l10n_at_gemeinde_payroll.
|
||||
|
||||
Source of truth: consolidated GemBG text (RIS LrBgld GesNr 20001002,
|
||||
Fassung 09.09.2026, incl. Bezügeanpassung 2026 / RV 0715/XXIII. GP).
|
||||
Run from the repository root:
|
||||
|
||||
python3 personalverrechnung/tools/extract_gembg_katalog.py
|
||||
|
||||
Outputs:
|
||||
addons/l10n_at_gemeinde_payroll/data/gemeinde.payroll.entlohnungsgruppe.csv
|
||||
addons/l10n_at_gemeinde_payroll/data/gemeinde.payroll.entlohnungsstufe.csv
|
||||
plus a protocol printed to stdout. Effective dates: tables amended by
|
||||
Artikel 4 RV 0715 carry the "mit 1. Juli 2026" entry into force; all other
|
||||
tables are dated 2025-07-01 as a documented assumption to be verified
|
||||
against the LGBl in AP0 (see personalverrechnung/IMPLEMENTIERUNGSPLAN-Bgld.md).
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import csv
|
||||
import re
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
REPO = Path(__file__).resolve().parents[2]
|
||||
SOURCE = REPO / ".firecrawl" / "ris-gbg-konsolidiert.md"
|
||||
TARGET_DIR = REPO / "addons" / "l10n_at_gemeinde_payroll" / "data"
|
||||
GRUPPE_CSV = TARGET_DIR / "gemeinde.payroll.entlohnungsgruppe.csv"
|
||||
STUFE_CSV = TARGET_DIR / "gemeinde.payroll.entlohnungsstufe.csv"
|
||||
|
||||
# Tables amended by Artikel 4 RV 0715 with effect from 1 July 2026.
|
||||
AMENDED_2026 = {"57", "58", "62", "88", "133g", "133i", "133j", "133u",
|
||||
"150c", "151", "151c", "151e", "157m", "158a"}
|
||||
DEFAULT_GUELTIG_AB = "2025-07-01"
|
||||
AMENDED_GUELTIG_AB = "2026-07-01"
|
||||
|
||||
# § 66 Abs 2 GemBG: default 4 years; § 150c Abs 2 and § 150d (Betreuungs-
|
||||
# personen gb1/gb2): 2 years for these groups. To verify in AP0.
|
||||
TWO_YEAR_GROUPS = {"gb1", "gb2", "l2b1", "l3", "gb1a", "gb3"}
|
||||
|
||||
PARAGRAF_RE = re.compile(r"^#### § (\d+[a-z]?)")
|
||||
SECTION_RE = re.compile(r"^#### (Monatsentgelt|Einstufung)(?!.*Ausbildungsphase)")
|
||||
SCHEMA_RE = re.compile(r"Entlohnungsschemas (.+?)(?:Monatsentgelt|$)")
|
||||
GROUP_CELL_RE = re.compile(r"^[a-z][a-z0-9]*$")
|
||||
GLUED_GROUP_RE = re.compile(r"Entlohnungsgruppe\s+([a-z][a-z0-9]*)")
|
||||
|
||||
|
||||
def parse_german_number(raw: str) -> float | None:
|
||||
raw = raw.strip().replace("Euro", "").strip()
|
||||
if not re.match(r"^\d{1,3}(\.\d{3})*,\d{2}$|^\d+,\d{2}$", raw):
|
||||
return None
|
||||
return float(raw.replace(".", "").replace(",", "."))
|
||||
|
||||
|
||||
def cells(row: str) -> list[str]:
|
||||
return [c.strip() for c in row.strip().strip("|").split("|")]
|
||||
|
||||
|
||||
def sanitize(code: str) -> str:
|
||||
return re.sub(r"[^a-z0-9_]", "_", code.lower())
|
||||
|
||||
|
||||
def main() -> int:
|
||||
text = [line.replace("\xa0", " ")
|
||||
for line in SOURCE.read_text(encoding="utf-8").splitlines()]
|
||||
gruppen: dict[tuple[str, str], dict] = {}
|
||||
stufen: list[dict] = []
|
||||
protocol: list[str] = []
|
||||
paragraf = None
|
||||
schema = None
|
||||
in_monatsentgelt = False
|
||||
current_groups: list[str] = []
|
||||
|
||||
for line in text:
|
||||
m = PARAGRAF_RE.match(line)
|
||||
if m:
|
||||
paragraf = m.group(1)
|
||||
in_monatsentgelt = False
|
||||
current_groups = []
|
||||
continue
|
||||
if SECTION_RE.match(line):
|
||||
in_monatsentgelt = True
|
||||
ms = SCHEMA_RE.search(line)
|
||||
schema = ms.group(1) if ms else (f"§{paragraf}" if paragraf else "unbekannt")
|
||||
current_groups = []
|
||||
continue
|
||||
if not in_monatsentgelt or not line.startswith("|"):
|
||||
continue
|
||||
|
||||
row = cells(line)
|
||||
if row and all(c and GROUP_CELL_RE.match(c) for c in row):
|
||||
current_groups = row # codes on their own row
|
||||
continue
|
||||
if "Entlohnungsgruppe" in line:
|
||||
glued = [m.group(1) for m in
|
||||
(GLUED_GROUP_RE.search(c) for c in row) if m]
|
||||
if glued:
|
||||
current_groups = glued # codes glued into the header row
|
||||
continue
|
||||
if not current_groups:
|
||||
continue
|
||||
if len(row) >= 2 and row[0].isdigit():
|
||||
stufe_nr = int(row[0])
|
||||
values = row[1:]
|
||||
if len(values) < len(current_groups):
|
||||
continue
|
||||
for group, raw in zip(current_groups, values):
|
||||
amount = parse_german_number(raw)
|
||||
if amount is None:
|
||||
protocol.append(
|
||||
f"WARN §{paragraf} {group} Stufe {stufe_nr}: "
|
||||
f"unverständlicher Wert {raw!r}")
|
||||
continue
|
||||
key = (schema, group)
|
||||
if key not in gruppen:
|
||||
gueltig_ab = (AMENDED_GUELTIG_AB if paragraf in AMENDED_2026
|
||||
else DEFAULT_GUELTIG_AB)
|
||||
gruppen[key] = {
|
||||
"code": group,
|
||||
"schema": schema,
|
||||
"paragraph": paragraf or "",
|
||||
"bundesland": "bgld",
|
||||
"vorrueckungszeitraum_jahre": 2 if group in TWO_YEAR_GROUPS else 4,
|
||||
"gueltig_ab": gueltig_ab,
|
||||
"max_stufe": 0,
|
||||
}
|
||||
else:
|
||||
gueltig_ab = gruppen[key]["gueltig_ab"]
|
||||
gruppen[key]["max_stufe"] = max(gruppen[key]["max_stufe"], stufe_nr)
|
||||
stufen.append({
|
||||
"group": group,
|
||||
"schema": schema,
|
||||
"stufe": stufe_nr,
|
||||
"monatsentgelt": f"{amount:.2f}",
|
||||
"gueltig_ab": gueltig_ab,
|
||||
})
|
||||
|
||||
TARGET_DIR.mkdir(parents=True, exist_ok=True)
|
||||
with GRUPPE_CSV.open("w", newline="", encoding="utf-8") as fh:
|
||||
writer = csv.writer(fh)
|
||||
writer.writerow(["id", "code", "schema", "paragraph", "bundesland",
|
||||
"vorrueckungszeitraum_jahre"])
|
||||
for (schema_id, group), data in sorted(gruppen.items()):
|
||||
writer.writerow([f"bgld_grp_{sanitize(schema_id)}_{sanitize(group)}",
|
||||
group, schema_id, data["paragraph"],
|
||||
data["bundesland"], data["vorrueckungszeitraum_jahre"]])
|
||||
with STUFE_CSV.open("w", newline="", encoding="utf-8") as fh:
|
||||
writer = csv.writer(fh)
|
||||
writer.writerow(["id", "entlohnungsgruppe_id:id", "stufe",
|
||||
"monatsentgelt", "gueltig_ab"])
|
||||
for s in sorted(stufen, key=lambda r: (r["schema"], r["group"], r["stufe"])):
|
||||
writer.writerow([
|
||||
f"bgld_st_{sanitize(s['schema'])}_{sanitize(s['group'])}_{s['stufe']}",
|
||||
f"l10n_at_gemeinde_payroll.bgld_grp_{sanitize(s['schema'])}_{sanitize(s['group'])}",
|
||||
s["stufe"], s["monatsentgelt"], s["gueltig_ab"],
|
||||
])
|
||||
|
||||
for (schema_id, group), data in sorted(gruppen.items()):
|
||||
protocol.append(
|
||||
f"§{data['paragraph']:>6} | Schema {schema_id:>7} | {group:<6} "
|
||||
f"| {data['max_stufe']:>2} Stufen | ab {data['gueltig_ab']} "
|
||||
f"| Vorrückung {data['vorrueckungszeitraum_jahre']} J.")
|
||||
protocol.append(f"\n{len(gruppen)} Entlohnungsgruppen, {len(stufen)} Stufenwerte.")
|
||||
protocol.append("Annahme: nicht 2026 angepasste Tabellen = Wert 1.7.2025 "
|
||||
"(AP0 gegen LGBl verifizieren).")
|
||||
print("\n".join(protocol))
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
Reference in New Issue
Block a user