Files
odoo-at-payroll/personalverrechnung/IMPLEMENTIERUNGSPLAN-Bgld.md
T
fegger 4e79c8b8b1 [ADD] personalverrechnung: Implementierungsplan Bgld. Personalverrechnung
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.
2026-09-09 11:39:41 +02:00

228 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 P1P10),
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` L10511072 | 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` L54222 | **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` L130735 | 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 (AP2AP4)
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_credit` auf 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) auf `hr.salary.rule`; der Posting-Hook setzt
`budget_position_id` je Move-Line (Vererbung von `_prepare_line_values`)
→ damit laufen die Bezüge automatisch durch die bestehende Detailnachweis-/
Anlage-1a/2a-Engine des `l10n_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>.xml` je 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):
1. `test_katalog`: Import 2026, Versionierung, Lookup Stichtag, Vorrückungstermin
2. `test_entgelt`: Vollzeit/Stufe; Teilzeit 50 % (KIZU ungekürzt); Eintritt
am 15. (Prorate); Überstunden; Journaldienst/Bereitschaft; Jubiläum
3. `test_sz_quartalsweise`: Q-Ende voll; unterbrochenes Vierteljahr anteilig
4. `test_lohnsteuer`: Tarifgrenzen 2026 (0 %-Zone, Mittelzone, > 104.859),
§ 68-ÜStd-Pauschale, SZ-Behandlung (per LStR-Konvention AP0)
5. `test_sv`: HBG je Zweig inkl. SZ-HBG; Geringfügigkeit 551,10 + § 53a;
AV-Staffel; FLAF-DB (Parameter); IESG 0,10 %
6. `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ührung
7. `test_meldewesen`: Schema-/Beispielvalidierung L16 + ELDA (sobald Specs);
Prüfprotokolle
8. 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_id` je 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)
1. **Buchungsmatrix**: exakte Anlage-3b-Konten je Bezugsart mit der
Gemeindebuchhaltung (AP0-Workshop) — Voraussetzung für 4.3.
2. **FLAF-DB öffentlich (P5)**: exakter aktueller Satz § 49a Abs 8/9 ASVG
(RIS-Verifikation; Firecrawl-Limit ausnehmen).
3. **SZ ↔ Lohnsteuer (P9)**: quartalsweise SZ in der § 68 Abs 5/6-Systematik
(LStR 2002; ggf. BMF-Auskunft) — betrifft Regel `LSTSZ`.
4. **ELDA-/FinOnl-Specs**: Beschaffung + Testdaten (AP0) — bis dahin werden
die Exporte als „strukturvalidiert gegen Spec-Beispiel“ abgenommen.
5. **Prorate-Konvention** Ein-/Austritt (Kalender-/Arbeitstage) aus
GemBG § 64 und Praxis der Gemeinde (AP0/Bestandsaufnahme).
6. **SV-Träger** ÖGK Bgld. (P6) aus Unterwart-Läufen bestätigen.
7. Bestands-Sonderfälle (Lehrlinge/Organe/Altpensionen) — Optionen O1O3.
## 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 | AP2AP4 | ~6 Wo |
| M4 | Meldedateien + Belege | AP5AP6 | ~4 Wo |
| M5 | VRV-Buchung + Rückstellung + Jahreswechsel-Importer | AP7AP8 | ~3 Wo |
| M6 | Rechenfall-Suiten komplett, UI/Security/Doku/Schulung, **23 Monate Parallellauf**, Abnahme | AP9AP10, PM | ~2,5 Mo |
Gesamtkalkulation unverändert ≈ 260 PT (Kalkulationsdokument);
M1-M5 sequenziell, M6 teilweise parallel zu M3M5.
## 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.