Plan zur Freigabe (AGENTS.md Phase 3): Anforderungsbild, am Odoo-19-Source verifizierte Erweiterungspunkte (hr.rule.parameter-Konsum via payslip._rule_parameter, localdict-Kontext, Regel-Konten, Posting-Hook _prepare_line_values für budget_position_id, Refund-Mechanik, Work-Entry-Types), Modul-Layout, Katalogmodell (Entlohnungsgruppen/-stufen mit Jahresversionierung aus Bezügeanpassungs-Tabellen), Regelinventar (Monatsentgelt, Kinderzulage ungekürzt, Zulagen, Über-/Mehrdienstleistung, quartalsweise SZ, Lohnsteuer § 33/§ 68, SV/DG, öffentlicher FLAF-DB, IESG), VRV-Buchung über vrv_ansatz_id auf hr.salary.rule, eigene Abfertigungsrückstellungs-Engine, dateibasiertes Meldewesen (L16/ELDA), Jahreswechsel-Wizard, Rechenfall-Testplan mit VRV-L2-Verprobungsankern, Risiken (Buchungsmatrix AP0, FLAF-DB-Satz, SZ-Lohnsteuer-Zuordnung, ELDA/FinOnl-Specs, Prorate-Konvention) und Meilensteine M0–M6 im AP-Rahmen der Angebotskalkulation.
14 KiB
Implementierungsplan — Gemeinde-Personalverrechnung Bgld.
Modul l10n_at_gemeinde_payroll (Odoo 19)
Status: Plan zur Freigabe (AGENTS.md-Workflow, Phase 3 — Implementierung
startet erst nach ausdrücklicher Freigabe). Basis: Rechtsquellen
(RECHTSQUELLEN-Bgld.md), Angebotskalkulation (APs, Prämissen P1–P10),
payroll-Skill. Alle Odoo-APIs wurden am vorliegenden Odoo-19-Source
verifiziert (Nachweise in Abschnitt 2).
- Stand: 2026-09-09 · Branch
dev-payroll· lokal - Scope R1: GemBG-Gemeindebedienstete (inkl. Kinderbetreuungspersonal); Optionen (Organe, Altpensionen, Lehrlinge, Folgebundesländer) und Ausschlüsse gem. Kalkulation Abschnitt 5/6.
1. Anforderung (Verständnis)
Vollständige Monatsverrechnung für Bedienstete burgenländischer Gemeinden nach dem Bgld. GemBG 2014-Eigenregime: Entlohnung aus Entlohnungsgruppen/-stufen (Jahreswerte aus Bgld. Bezügeanpassungs- Sammelgesetzen), quartalsweise Sonderzahlung, Zulagen, Über-/Mehrdienst- leistung; Lohnsteuer (§ 33/§ 68 EStG) und SV/Dienstgeberbeiträge (ASVG, öffentlicher FLAF-DB, IESG); Belege (Lohnzettel, Monatsdienstliste, Monatsjournal); Meldedateien (L16/FinOnl, eSV/ELDA-XML, Beitragsgrundlagen- nachweis) — dateibasiert, Übertragung beim Kunden (P7); FI-Buchung auf den VRV-Kontenplan mit Ansatz-/MVAG-Attribution und EHH/FHH-korrektem Verhalten plus Abfertigungsrückstellung; Jahreswechsel-Prozess.
2. Verifizierte Odoo-Basen (Erweiterungspunkte)
| Mechanismus | Nachweis (odoo/addons/…) | Verwendung im Plan |
|---|---|---|
hr.rule.parameter + Werte je date_from (Python-Datenstruktur, safe_eval) |
hr_payroll/models/hr_rule_parameter.py |
Alle jährlichen/variablen Werte: LSt-Tarif & Absetzbeträge, SV-Sätze, Grenzen, FLAF-DB-Satz, IESG, Überstundenfreibetrag |
Konsum in Regeln: payslip._rule_parameter('code') |
hr_payslip.py L951; Praxis l10n_be (data/cp200/*_data.xml) |
Regeln lesen keine Literale |
Regel-Kontext localdict: categories, rules, payslip, worked_days, inputs, employee, result_rules, version |
hr_payslip.py L1051–1072 |
Entgelt-/Abzugsregeln; GemBG-Komponenten als Work-Entry-Types/Inputs |
Strukturen: hr.payroll.structure (mit journal_id), hr.payroll.structure.type; Zuordnung über Mitarbeiter-Version |
hr_payroll_structure.py, hr_version.py |
EINE Struktur „GemBG Bgld. Gemeindebedienstete“; Gruppen/Stufen über Vertragsfelder, nicht über Struktur-Vielfalt |
Work-Entry-Types (hr.work.entry.type: Rounding, unpaid_structure_ids) |
hr_work_entry_type.py |
Dienstzeit-Komponenten: Über-/Mehrdienstleistung, Journaldienst, Bereitschaft, Karenz/Herabsetzung |
Buchung: hr.salary.rule.account_debit/account_credit (company_dependent, restrict), Netto-Ausschluss-Flag, Tags |
hr_payroll_account/models/hr_salary_rule.py, hr_payslip.py |
Regel→VRV-Konto-Mapping direkt am Regelobjekt; Buchungs-ohne-Netto-Regeln für DG-Sicht |
Posting-Batch je Journal+Monat: _action_create_account_move → _prepare_slip_lines/_prepare_line_values/_prepare_adjust_line |
hr_payroll_account/models/hr_payslip.py L54–222 |
Hook: Überschreiben von _prepare_line_values, um je Regel budget_position_id (Ansatz aus l10n_at_vrv2015) + korrekte HH-Attribution zu setzen |
Retro/Korrekturen: is_refund_payslip, _action_refund_payslips |
hr_payslip.py L130–735 |
Korrekturläufe ohne Eigenbau |
Batches hr.payslip.run; SEPA-Auszahlung hr_payroll_account_iso20022 |
Engine | Monatsläufe, Zahlungsdatei (FHH via Zahlungslauf) |
3. Modul-Layout (Dateien/Komponenten)
l10n_at_gemeinde_payroll/
models/
entlohnung.py # Katalog: gemeinde.payroll.entlohnungsgruppe / -stufe
hr_employee_contract.py# GemBG-Felder auf Employee/Contract-Version
hr_salary_rule.py # vrv_ansatz_id (+ VRV-Default-Konto je Regel)
hr_payslip.py # Posting-Hook (Ansatz/HH), SZ-Quartil-Helfer
lohnsteuer.py # § 33-Tarif als pure Python-Utility (unit-testbar)
vorrueckung.py # BDA-/Vorrückungstermin-Berechnung
abfertigung.py # §-130-Rückstellungs-Engine (Anwartschaft, Zuführung)
l16_export.py # FinOnl-L16-Export (Datei + Prüfprotokoll)
elda_export.py # eSV/ELDA-XML (JASV, An-/Ab-/Änderung, Fehlanzeige, BGN)
data/
structure_bgld.xml # Structure-Type + Structure (Journal-Verweis)
salary_rules_bgld.xml # Kategorien + Regelinventar (Abschnitt 4.2)
rule_parameters_2026.xml # LSt/SV/Grenzen/FLAF-DB/IESG/ÜStd-Freibetrag 2026
katalog_bgld_2026.xml # Entlohnungsgruppen/-stufen 2026 (aus RV 0715; Seed)
work_entry_types.xml, input_types.xml
wizard/
bezuegeanpassung_import.py # Jahreswechsel: Tabellen-Import + Validierung
vorrueckung_run.py # Vorrückungen je Stichtag anwenden (explizit)
report/ # Lohnzettel (AT-Layout), Monatsdienstliste, Monatsjournal
security/ir.model.access.csv
tests/ (Abschnitt 6)
4. Vorgeschlagene Umsetzung
4.1 Katalogmodell (AP1)
gemeinde.payroll.entlohnungsgruppe:code(z. B.gv1,gb3), Name,bundesland(Auswahl; Bgld. befüllt, weitere Länder als Daten), Verwendungsbeschreibung.gemeinde.payroll.entlohnungsstufe:gruppe_id,stufe(int),monatsentgelt,gueltig_ab(Datum); unique(Gruppe, Stufe, gueltig_ab) → jährliche Versionen aus der Bezügeanpassung; Seed 2026 aus RV 0715 (.firecrawl/bezuege2026-rv0715.md), Folgejahre über den Import-Wizard (Tabellenpaste + Plausibilitätsprüfung ±x %).- Mitarbeiter/Vertragsversion (erben in
hr.employee/hr.version-Kontext):entlohnungsgruppe_id,entlohnungsstufe(bezogen auf Stichtag),besoldungsdienstalter(Datum; Anrechnungszeiten als Zusatzfelder),vorrueckungstermin(compute), Teilzeit-Ausmaß via Resource-Kalender. - Vorrückungen werden nicht still im Lohnlauf mutiert: eigener Wizard/Cron je Stichtag mit Protokoll (Vorrückung ist besoldungs- rechtlich ein Verwaltungsakt mit Dokumentationspflicht).
4.2 Regelinventar (AP2–AP4)
Kategorien: GEMBG_BRUTTO, GEMBG_ABZUG, GEMBG_NETTO, GEMBG_DG
(Arbeitgeberanteile, buchungs-/journalwirksam), VRV_BUCHUNG
(nicht netto-wirksam).
| Regel (Code) | Quelle/Mechanik |
|---|---|
ME Monatsentgelt |
Katalog-Lookup Gruppe+Stufe(Stichtag); Prorate Ein-/Austritt (Konvention AP1: Kalender- vs. Arbeitstage) und Teilzeit-Ausmaß |
KIZU Kinderzulage |
Kinder-Anzahl × Satz (Rule-Parameter); bei Teilzeit ungekürzt (§ 59) |
FUZU/ERZU/JZU/SFZU/BERB Funktions-/Erschwernis-/Journaldienst-/Sonn-Feiertags-/Bereitschafts-Bezüge |
Inputs/Work-Entry-Types mit Sätzen aus Rule-Parametern |
UEZ Über-/Mehrdienstleistung |
Inputs + § 68-Pauschalbesteuerung (steuerfreier Anteil; 2026: max. 170 €/15 ÜStd — Mechanik nach LStR, siehe 8.) |
JUB Jubiläumszuwendung |
Stichtagslogik (Dienstzeit) aus § 89/§ 157d |
SZQ Sonderzahlung |
Quartalsweise: im Auszahlungsmonat (Ende Q) 50 % des Monatsentgelts (inkl. KIZU); anteilig bei unterbrochenem Vierteljahr (§ 60 Abs 3: „nur der entsprechende Teil“) |
LSTL Lohnsteuer laufend |
lohnsteuer.py-Utility: § 33-Tarif auf Jahres-Progressionsbasis (LStBMG-Systematik), Absetzbeträge (Rule-Parameter 2026) |
LSTSZ Lohnsteuer SZ |
Begünstigte Bezüge (§ 68 Abs 5/6): Grenzwerte aus Rule-Parametern; Zuordnung quartalsweiser SZ — offene Detailfrage (Abschnitt 8) |
SVDN SV Dienstnehmer |
KV+PV+AV mit je-Zweig-HBG (6.930 €/13.860 € SZ), Geringfügigkeits-Check (551,10 €), AV-Staffel § 2a AMPFG |
SVDG SV Dienstgeber |
DG-Anteile (KV/UV/PV/AV) |
FLAFDB |
Öffentlicher FLAF-DB (§ 49a ASVG; Satz als Parameter — P5, AP0-Wert) |
IESG |
Insolvenz-Zuschlag 0,10 % (DG) |
NETTO |
Kategoriensummen |
| Abfertigungs-Rückstellung | Nicht als Slip-Regel: eigene Engine (4.4) |
4.3 VRV-Buchung (AP7)
- Regel→Konto:
account_debit/account_creditauf den Regeln (Anlage-3b- Konten Klassen 4/5/6; exakte Codes aus der Buchungsmatrix AP0 mit der Gemeindebuchhaltung; Ansätze 2211/2212/… aus dem verifizierten Bereichsbudget-Export ableitbar). - Regel→Ansatz: neues Feld
vrv_ansatz_id(vrv2015.va.position, company_dependent) aufhr.salary.rule; der Posting-Hook setztbudget_position_idje Move-Line (Vererbung von_prepare_line_values) → damit laufen die Bezüge automatisch durch die bestehende Detailnachweis-/ Anlage-1a/2a-Engine desl10n_at_vrv2015. - EHH/FHH: Lohnlauf bucht EHH (Ergebnishaushalt); die Auszahlung läuft über den Zahlungsverkehr (SEPA/Iso20022) → FHH über die normale Zahlungs- Verrechnung des VRV-Moduls (kein Sonderweg).
- DG-Beiträge (SV-DG, FLAF-DB, IESG) als buchungswirksame Regeln ohne Nettoeffekt (Netto-Ausschluss-Flag der Engine).
4.4 Abfertigungsrückstellung (AP7)
gemeinde.payroll.abfertigung-Engine: Anwartschaft je Dienstverhältnis
(§ 130-GemBG-Matrix), monatliche Zuführungsberechnung, Buchungs-Wizard
(Aufwandkonto Ansatz 2211 ↔ Rückstellungskonto 37x) mit Verprobungs-
Anker zur VRV-Engine. Keine Pseudo-Slip-Regel.
4.5 Meldewesen (AP5, dateibasiert — P7)
l16_export: Wizard → L16-Datei (FinOnl-Format; Spec in AP0 beschaffen) + Prüfprotokoll; Jahresbelegmeldung bis Ende Februar.elda_export: eSV-XML-Dateien (JASV-Monatsmeldung, An-/Ab-/Änderung, Fehlanzeige, Beitragsgrundlagennachweis; eSV-XML-Spec in AP0) + Validierungsprotokoll.- Struktur der Dateien als Schema-Test gegen Spec-Beispiele (Abschnitt 6).
4.6 Jahreswechsel (AP8)
- Bezügeanpassungs-Import-Wizard (Tabellen des neuen Sammelgesetzes →
neue
entlohnungsstufe-Versionen; Plausibilitätsprüfung, Freigabe, Änderungsprotokoll). rule_parameters_<jahr>.xmlje Jahr (LSt/SV/Grenzen) als normale Modul-Daten; Fristenkalender (L16 Ende Februar, JASV 15. Folgemonat — AP0 verifizieren).
5. Daten-/Modell-/Report-Implikationen
- Multi-Company je Gemeinde unverändert über Engine/Security; Katalog-
Daten global (kein
company_id), Regeln company-dependent-Konten. - Reports: Lohnzettel = Payslip-Report im AT-Layout (qweb), Monatsdienst-
liste (je Mitarbeiter/Periode), Monatsjournal (je Ansatz/Konto, DG-Summen)
— alles qweb auf
hr.payslip/Aggregaten, keine eigene Reporting-Engine. - Rechenfall-Dokumentation je Regel (im
docs/des Moduls) als Review-Grundlage.
6. Tests (hinzuzufügen)
tests/ mit Rechenfall-Suiten (Lohntarif- und SV-Werte aus den verifizierten
2026er Quellen; Katalogwerte aus RV 0715):
test_katalog: Import 2026, Versionierung, Lookup Stichtag, Vorrückungstermintest_entgelt: Vollzeit/Stufe; Teilzeit 50 % (KIZU ungekürzt); Eintritt am 15. (Prorate); Überstunden; Journaldienst/Bereitschaft; Jubiläumtest_sz_quartalsweise: Q-Ende voll; unterbrochenes Vierteljahr anteiligtest_lohnsteuer: Tarifgrenzen 2026 (0 %-Zone, Mittelzone, > 104.859), § 68-ÜStd-Pauschale, SZ-Behandlung (per LStR-Konvention AP0)test_sv: HBG je Zweig inkl. SZ-HBG; Geringfügigkeit 551,10 + § 53a; AV-Staffel; FLAF-DB (Parameter); IESG 0,10 %test_posting_vrv: Regel→Konto/Ansatz; Summe je Ansatz = Summe Regel; L2-Anker: Kontenklasse-5-Ist des Lohnlaufs = Anlage-1a-Engine-Wert (Muster wie im VRV-Modul); Rückstellungszuführungtest_meldewesen: Schema-/Beispielvalidierung L16 + ELDA (sobald Specs); Prüfprotokolle- Refund-Lauf (Korrektur) ohne Doppelbuchung
7. VRV-/Buchhaltungs-Überlegungen
- EHH zuerst, FHH über Zahlungsverkehr (keine künstlichen FHH-Buchungen im Lohnlauf); § 12/Barvorlagen irrelevant für Personal.
- Ansatz-Attribution über
budget_position_idje Move-Line (bestehende Felder/Engine des VRV-Moduls; keine Parallelstruktur). - Rückstellungen (Abfertigung § 130) buchungsseitig mit Verprobungsankern; Altpensionen/Versorgung sind Option O2, nicht R1.
8. Risiken / offene Fragen (vor Implementierungsbeginne in AP0 klären)
- Buchungsmatrix: exakte Anlage-3b-Konten je Bezugsart mit der Gemeindebuchhaltung (AP0-Workshop) — Voraussetzung für 4.3.
- FLAF-DB öffentlich (P5): exakter aktueller Satz § 49a Abs 8/9 ASVG (RIS-Verifikation; Firecrawl-Limit ausnehmen).
- SZ ↔ Lohnsteuer (P9): quartalsweise SZ in der § 68 Abs 5/6-Systematik
(LStR 2002; ggf. BMF-Auskunft) — betrifft Regel
LSTSZ. - ELDA-/FinOnl-Specs: Beschaffung + Testdaten (AP0) — bis dahin werden die Exporte als „strukturvalidiert gegen Spec-Beispiel“ abgenommen.
- Prorate-Konvention Ein-/Austritt (Kalender-/Arbeitstage) aus GemBG § 64 und Praxis der Gemeinde (AP0/Bestandsaufnahme).
- SV-Träger ÖGK Bgld. (P6) aus Unterwart-Läufen bestätigen.
- Bestands-Sonderfälle (Lehrlinge/Organe/Altpensionen) — Optionen O1–O3.
9. Meilensteine (AP-Mapping, post-Auftragserteilung)
| M | Inhalt | APs | Dauer |
|---|---|---|---|
| M0 | Freigabe dieses Plans | — | heute |
| M1 | Bestandsaufnahme Pilotmandant, Buchungsmatrix, P5/Träger/Specs, Konventionen | AP0 | ~2 Wo |
| M2 | Katalogmodell + 2026er Daten + Vertragsfelder + Erstläufe intern | AP1 | ~3 Wo |
| M3 | Entgelt-Engine (Zulagen/ÜStd/SZ), Lohnsteuer, SV/DB | AP2–AP4 | ~6 Wo |
| M4 | Meldedateien + Belege | AP5–AP6 | ~4 Wo |
| M5 | VRV-Buchung + Rückstellung + Jahreswechsel-Importer | AP7–AP8 | ~3 Wo |
| M6 | Rechenfall-Suiten komplett, UI/Security/Doku/Schulung, 2–3 Monate Parallellauf, Abnahme | AP9–AP10, PM | ~2,5 Mo |
Gesamtkalkulation unverändert ≈ 260 PT (Kalkulationsdokument); M1-M5 sequenziell, M6 teilweise parallel zu M3–M5.
10. Freigabe-Antrag
Mit Freigabe dieses Plans startet die Umsetzung mit M1 (AP0) und anschließend M2 (AP1: Katalogmodell + Seed-Daten + Vertragsfelder). Änderungen am Scope (Prämissen-Verletzungen, Optionen) laufen über Change-Requests.