[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.
This commit is contained in:
@@ -0,0 +1,228 @@
|
||||
# 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_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 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.
|
||||
Reference in New Issue
Block a user