[IMP] odoo-at-payroll: GP5-Bau und Nutzer-Rechtsklarstellungen dokumentiert

CHANGELOG-GP5-Eintrag; Plan-Abschnitt-10-Update (Fensterkonvention mit Monatsjubiläum statt Folgetag, Wiederzulassung auch bei kurzem Vor-AV, eigene BV-Grundlage, bewusste Nicht-Ziele); MEMORY-Handoff (84/84 auf Wegwerf-DB, GP6/GP7/GP8-Anschlüsse, GP4-Beobachtung SV-SZ/§-49-Abs-3-Z-7 offen, D4-Fund zur hr.version-date_version-Synchronisation).
This commit is contained in:
2026-09-12 08:22:17 +02:00
parent 0ea7f54682
commit 63913a04ba
3 changed files with 177 additions and 7 deletions
+87 -7
View File
@@ -2,8 +2,53 @@
## Current focus
**GP4 SV/DB umgesetzt und grün (74/74 Tests) — GP5 Abfertigung Neu
(BMSVG) ist der nächste Bauabschnitt** (2026-09-11): Kern 19.0.3.0.0
**GP5 Abfertigung Neu (BMSVG) umgesetzt und grün (84/84 Tests) —
nächster Bauabschnitt GP6 FI-Buchung UGB bzw. GP7 Meldewesen
(Priorität mit Nutzer klären)** (2026-09-11): Kern 19.0.3.1.0
(`at_sv_bv_dg` 1,53 % in `rule_parameters_sv_2026.xml`); privat
19.0.5.0.0 — Regel `BVG` (ATP_DG, ohne Nettoeffekt) auf **EIGENER
ungecappter BV-Grundlage** (§ 6 Abs 5 iVm § 49 ASVG: kein HBG-/
Jahresdeckel; ohne §-67-Abs-3/6-Zeilen, § 49 Abs 3 Z 7 ASVG —
bewusst KEIN Rückgriff auf die SV-SZ-Basis des Kerns, deren
Z-7-Ausschluss fehlt = GP4-Beobachtung, offen dokumentiert;
Nutzer-Entscheidung „eigene BV-Grundlage").
`models/abfertigung_private.py`: beitragsfreier erster Monat
**taggenau** — Fenster [Eintritt, Eintritt+1M), Pflicht ab
Monatsjubiläum (15. 06. → 15. 07.; Nutzer-Lesart „ab Folgetag
16. 04." = Off-by-one, verworfen gegen KB-Beispiel lb-vor-03:
4.500/30 × 17 = 2.550), 30-Tage-Aliquotierung via Lohnsteuertage
(Teilmonat-Doppelabzug-Schutz), Monatsende-Klippe (31. 01. → frei
bis Ultimo, Pflicht ab Folgemonatserstem), AV ≤ 1 Monat gänzlich
frei; **Wiederzulassung binnen 12 Monaten ab Tag 1** — Vor-AV
beliebiger Dauer (auch < 1 Monat), schlägt auch die Kurz-AV-Freiheit
(Nutzer-Klarstellung 2026-09-11; OGH 9 ObA 30/16a; Suche über frühere
`hr.version` mit contract_date_end); SZ ohne Fenster-Kürzung, frei
nur bei Beitragsmonat im Fenster (**voller Datumstag** — Monats-
anfangs-Kürzung wäre für Fälligkeit 20. 07. bei Fensterende 15. 07.
falsch); läuft auch für Geringfügige + Lehrlinge (§ 46, § 1 Abs 2
Z 1). Anwartschaft (§ 15: Beiträge + Erträge, KEINE Staffel)
on-the-fly aus validierten BVG-Linien (`_at_bv_anwartschaft`, je
Beitragsmonat/Jahr); Anwartschaftsreport QWeb auf `hr.employee`
(AbstractModel `bv_report.py`) + Endabrechnungs-Wizard
`l10n.at.bv.endabrechnung.wizard` (§§ 14-17: §-14-Abs-2-Matrix,
< 36 Beitragsmonate IMMER-Sperre, §-16-Fälligkeit Ende des
zweitfolgenden Monats, 6-Monats-Erklärungsfrist, 5 Optionen;
Auszahlung durch die MV-Kasse, kein Payslip). Stammdaten:
`l10n_at_abfertigung_neu` + `l10n.at.bv.kasse` (Leitzahl eSV/mBGM,
7er-Namen-Seed noupdate, lb-gsv-11 — Leitzahlen aus Mandats-Unter-
lagen, nie geraten) + `l10n_at_bv_ertraege`/`l10n_at_bv_monate_
extern` am Mitarbeiter (Kassen-Auszug). Bewusst nicht: §-7-Fiktiv-
fälle (Präsenzdienst/Kranken-/Wochengeld — dokumentierte Option,
Entgeltersatzleistungen fehlen im Modul), Geringfügigen-Jahres-
zahlung + 2,5 % (GP7), BV-Provider (Option). Tests: `test_bv_private`
(10) neu — **84/84 grün** auf Wegwerf-DB `gp5_test` (frischer
`-i`-Lauf; QWeb-Rendering selbst nur py/XML-validiert, kein
Render-Test); Rechenfälle `docs/rechenfaelle/abfertigung.md`.
Offen: GP6-BVG-FI-Konto, GP7 mBGM (Leitzahl, DG-Kontonummer, Jahres-
zahlung), GP8 Fristenkalender; SV-SZ-Z-7-Folgefix im Kern
(GP4-Beobachtung) separat entscheiden.
**GP4 SV/DB umgesetzt und grün (74/74 Tests)** (2026-09-11): Kern 19.0.3.0.0
(`models/sozialversicherung.py`: DG-Beiträge 20,98 %/Wien 21,23,
§-54-SZ 20,48 %, Geringfügigkeit § 5/§ 810-3 mit Hochrechnung +
§-53a-UV 6,50 €, §-49-Abs-3-Jahreskumulative, Altersstichtage als
@@ -109,6 +154,39 @@ B17-Inhalt/B18; Kleinverifikationen s. KB-KONFLIKTE „Nächste Schritte“).
## Completed
- **GP5 Abfertigung Neu (BMSVG) umgesetzt (84/84 grün)**
(2026-09-11): `l10n_at_hr_payroll` 19.0.3.1.0 — Parameter
`at_sv_bv_dg` (1,53 %, ab 2003-01-01) in `rule_parameters_sv_2026.xml`.
`l10n_at_hr_payroll_private` 19.0.5.0.0: Regel `BVG`
(`salary_rules_bvg_private.xml`, ATP_DG seq 95, 1-Zeilen-Bindung)
auf `models/abfertigung_private.py` — eigene, ungecappte
BV-Grundlage (§ 6 Abs 5 iVm § 49 ASVG; §-67-Abs-3/6-Zeilen aus-
geschlossen, § 49 Abs 3 Z 7 ASVG); Fenstermechanik taggenau
(Monatsjubiläum, 30-Tage-Aliquotierung über Lohnsteuertage,
Monatsende-Klippe via relativedelta+1 Tag, Kurz-AV < Jubiläum);
Wiederzulassung: hr.version-Suche contract_date_end ∈ [Start12M,
Start) → Pflicht ab Tag 1 (Vor-AV beliebiger Dauer — Nutzer-
Klarstellung, schlägt auch Kurz-AV); SZ-Fensterfreiheit über vollen
Beitragsmonats-Datum der Regel (kein .replace(day=1)!); Gering-
führende + Lehrlinge erfasst (kein Geringfügig-Lehrling-Switch).
Anwartschaft `_at_bv_anwartschaft` (BVG-Linien validierter Läufe,
je Beitragsmonat/Jahr, Refund-nettend); `l10n.at.bv.kasse` (name,
leitzahl; 7er-Seed noupdate — Allianz/APK/BONUS/BUAK/NÖ/Valida
Plus/VBV, lb-gsv-11) + `l10n_at_bv_endabrechnung.wizard` (§-14-
Matrix + 36-IMMER-Sperre + §-16/§-17-Fristen + 5-Optionen-Info;
report_action auf Anwartschaftsreport) + QWeb-Report auf
hr.employee (`report/bv_report.xml` + AbstractModel `bv_report.py`;
binding hr.model_hr_employee). Views: Kasse list/form, Employee-
Form-Gruppe „Abfertigung Neu (BMSVG)" in payroll_group, Wizard,
Menüs seq 50/60. Security: Kasse user/manager + Wizard.
Tests `test_bv_private` (10: RF-BV1..10) + Rechenfälle
`docs/rechenfaelle/abfertigung.md`**84/84 grün** auf Wegwerf-
DB `gp5_test` (frischer `-i`-Lauf); README/CHANGELOG/PLAN-10/
MEMORY nachgezogen. D4-Fund: hr.version.write setzt bei
Einzelversion `date_version` automatisch auf contract_date_start
mit; _get_version(date) = max(date_version ≤ date), Fallback
versions[0] — Fixture-Mechanik für Mehrversionen-Tests.
- **GP3 Lohnsteuer komplett im Kern umgesetzt (52/52 grün)**
(2026-09-11): `l10n_at_hr_payroll` 19.0.2.0.0 —
`models/lohnsteuer.py` (§ 33-Zonentarif; § 66 kumulativ mit
@@ -1005,11 +1083,13 @@ B17-Inhalt/B18; Kleinverifikationen s. KB-KONFLIKTE „Nächste Schritte“).
- `.venv/` — Python-3.14-venv mit editable install (lokal,
unversioniert); Dev-DB `odoo_dev` (PostgreSQL lokal)
- `addons/l10n_at_hr_payroll_private/` — General-AT (GP1 KV-Framework
+ Seed D2; GP2 Entgelt-Engine; GP3 LSt-Anbindung; **GP4 SV/DB
umgesetzt 2026-09-11** — `test_kv_katalog` 8 + `test_entgelt_private`
21 + `test_lst_private` 6 + `test_sv_private` 8 grün auf `odoo_dev`;
Rechenfall-Fixtures unter `docs/rechenfaelle/` inkl.
sozialversicherung.md; GP5 Abfertigung Neu als Nächstes)
+ Seed D2; GP2 Entgelt-Engine; GP3 LSt-Anbindung; GP4 SV/DB;
**GP5 Abfertigung Neu umgesetzt 2026-09-11**`test_kv_katalog` 8 +
`test_entgelt_private` 21 + `test_lst_private` 6 + `test_sv_private`
8 + `test_bv_private` 10 grün auf Wegwerf-DB `gp5_test` (**84/84**,
frischer `-i`-Lauf — `odoo_dev` noch auf GP4-Stand, Update
nachholen); Rechenfall-Fixtures unter `docs/rechenfaelle/` inkl.
abfertigung.md; GP6 FI-Buchung / GP7 Meldewesen als Nächstes)
- `addons/l10n_at_hr_payroll/` — Bundes-Kern (SV/TASY + GP3 Lohnsteuer
`models/lohnsteuer.py` + **GP4 SV/DB `models/sozialversicherung.py`**
(DG/Geringfügigkeit/§ 49/Altersstichtage/§ 2a-Staffel/WF-Vektor/
+50
View File
@@ -1,5 +1,55 @@
# CHANGELOG — odoo-at-payroll
## 2026-09-11 — General-AT GP5: Abfertigung Neu (BMSVG) umgesetzt (M6, Teil 1)
- `addons/l10n_at_hr_payroll` (19.0.3.1.0): Kern-Parameter
`at_sv_bv_dg` = 1,53 % (§ 6 Abs 1 BMSVG, ab 2003-01-01) in
`rule_parameters_sv_2026.xml`.
- `addons/l10n_at_hr_payroll_private` (19.0.5.0.0): **GP5 Abfertigung
Neu** — Regel `BVG` (ATP_DG, ohne Nettoeffekt) auf **EIGENER,
ungecappter BV-Grundlage** (§ 6 Abs 5 iVm § 49 ASVG: kein HBG-/
Jahresdeckel; ohne §-67-Abs-3/6-Zeilen — § 49 Abs 3 Z 7 ASVG;
Nutzer-Entscheidung: kein Rückgriff auf die SV-SZ-Basis des Kerns,
deren Z-7-Ausschluss fehlt → GP4-Beobachtung bleibt offen
dokumentiert); `models/abfertigung_private.py`:
- **Beitragsfreier erster Monat taggenau** (§ 6 Abs 1): Fenster
[Eintritt, Eintritt + 1 Monat), Pflicht ab Monatsjubiläum
(15. 06. → 15. 07. — KB-Beispiel 4.500/30 × 17 = 2.550,
30-Tage-Aliquotierung via Lohnsteuertage); **Monatsende-Klippe**
(Eintritt 31. 01.) → frei bis Monatsultimo, Pflicht ab
Folgemonatserstem (ABGB-Fristrechnung); **AV ≤ 1 Monat zur
Gänze beitragsfrei**;
- **Wiederzulassung binnen 12 Monaten → Beitragspflicht ab dem
1. Tag** (OGH 9 ObA 30/16a) — Vor-AV **beliebiger Dauer** (auch
< 1 Monat) und schlägt auch die Kurz-AV-Freiheit
(Nutzer-Klarstellung 2026-09-11); Suche über frühere
`hr.version`-Verträge;
- **SZ ohne Fenster-Kürzung**, frei nur bei Beitragsmonat im
Fenster (**taggenau**: Fälligkeit 20. 07. bei Fensterende 15. 07.
pflichtig); läuft **auch für geringfügig Beschäftigte und
Lehrlinge** (§ 46, § 1 Abs 2 Z 1);
- Vertragsfelder `l10n_at_abfertigung_neu` (§ 46-Flag) +
`l10n_at_bv_kasse_id` (neues Modell `l10n.at.bv.kasse` mit
Leitzahl für eSV/mBGM; Seed der 7 Kassen-Namen, lb-gsv-11,
noupdate); Mitarbeiter-Felder `l10n_at_bv_ertraege`/
`l10n_at_bv_monate_extern` (Kassen-Auszug);
- **Anwartschaft** (§ 15: gutgebrachte Beiträge + Erträge, KEINE
Monatsentgelt-Staffel) on-the-fly aus validierten Läufen
(`_at_bv_anwartschaft`); **Anwartschaftsreport** (QWeb auf
`hr.employee`, AbstractModel `bv_report.py`) + **Endabrechnungs-
Wizard** `l10n.at.bv.endabrechnung.wizard` (§§ 14-17: §-14-Abs-2-
Verfügungsmatrix, 36-Beitragsmonate-IMMER-Sperre mit Vor-Monaten,
§-16-Fälligkeit Ende des zweitfolgenden Monats, 6-Monats-
Erklärungsfrist, 5 §-17-Optionen) — Auszahlung durch die MV-Kasse,
kein Payslip-Bestandteil.
- **Bewusst nicht in GP5:** §-7-BMSVG-Fiktivfälle (Präsenz-/Kranken-/
Wochengeld — setzt fehlende Entgeltersatzleistungs-Modellierung
voraus; dokumentierte Option), Geringfügigen-Jahreszahlung +
2,5 % (Zahlungsmodus GP7), BV-Provider (Option).
- Tests: `test_bv_private` (10) neu; **84/84 grün** auf Wegwerf-DB
`gp5_test` (frischer `-i`-Lauf; Aufruf s. README). Rechenfälle
`docs/rechenfaelle/abfertigung.md`.
## 2026-09-11 — General-AT GP4: SV/DB komplett im Kern umgesetzt (M5)
- `addons/l10n_at_hr_payroll` (19.0.3.0.0): `models/sozialversicherung.py`
@@ -783,6 +783,46 @@ Budget: die Kandidaten 8.13, der DZ (8.11) und die Regel-Optionen
(NSchAB, DAG) laufen über die GP0-/Pilotmandant-Entscheidung bzw.
Change-Requests.
**Update 2026-09-11 (GP5 umgesetzt):** Abfertigung Neu (BMSVG)
umgesetzt und grün: Kern-Parameter `at_sv_bv_dg` (1,53 %,
19.0.3.1.0); privat (19.0.5.0.0) Regel `BVG` (ATP_DG, ohne
Nettoeffekt) auf **EIGENER, ungecappter BV-Grundlage** (§ 6 Abs 5
iVm § 49 ASVG — kein HBG-/Jahresdeckel; ohne §-67-Abs-3/6-Zeilen,
§ 49 Abs 3 Z 7 ASVG; Nutzer-Entscheidung: kein Rückgriff auf die
SV-SZ-Basis des Kerns, deren Z-7-Ausschluss fehlt — GP4-Beobachtung
bleibt offen). `models/abfertigung_private.py`: beitragsfreier erster
Monat **taggenau** (Fenster [Eintritt, Eintritt+1 Monat), Pflicht ab
Monatsjubiläum 15. 06. → 15. 07.; 30-Tage-Aliquotierung via
Lohnsteuertage; Monatsende-Klippe 31. 01. → frei bis Ultimo, Pflicht
ab Folgemonatserstem); AV ≤ 1 Monat gänzlich frei; Wiederzulassung
binnen 12 Monaten ab 1. Tag — Vor-AV beliebiger Dauer, auch < 1
Monat, schlägt auch die Kurz-AV-Freiheit (Nutzer-Klarstellung
2026-09-11; OGH 9 ObA 30/16a; Suche über frühere `hr.version`); SZ
ohne Fenster-Kürzung, frei nur bei Beitragsmonat im Fenster
(taggenau); läuft auch für Geringfügige und Lehrlinge (§ 46,
§ 1 Abs 2 Z 1). Stammdaten: Vertrags-Flag `l10n_at_abfertigung_neu`
+ `l10n.at.bv.kasse` (Leitzahl eSV/mBGM; Seed der 7 Kassen-Namen,
lb-gsv-11, noupdate — Leitzahlen aus Mandats-Unterlagen) +
Mitarbeiter-Felder `l10n_at_bv_ertraege`/`l10n_at_bv_monate_extern`
(Kassen-Auszug). Anwartschaft (§ 15: gutgebrachte Beiträge + Erträge,
KEINE Monatsentgelt-Staffel) on-the-fly aus validierten Läufen;
Anwartschaftsreport (QWeb auf `hr.employee`) + Endabrechnungs-Wizard
(§§ 14-17: Verfügungsmatrix mit 36-Beitragsmonate-IMMER-Sperre,
§-16-Fälligkeit Ende des zweitfolgenden Monats, 6-Monats-
Erklärungsfrist, 5 §-17-Optionen; Auszahlung durch die MV-Kasse,
kein Payslip-Bestandteil). Nutzer-Fensterklärung: „Pflicht ab
Folgemonatserstem (16. 04.)" = Off-by-one, verworfen gegen das
verifizierte KB-Beispiel (lb-vor-03: Eintritt 15. 06. → Pflicht ab
15. 07., 4.500/30 × 17 = 2.550). Bewusst nicht: §-7-Fiktivfälle
(Präsenzdienst/Kranken-/Wochengeld — dokumentierte Option, Entgelt-
ersatzleistungen fehlen im Modul), Geringfügigen-Jahreszahlung +
2,5 % (GP7), BV-Provider (Option). Tests: `test_bv_private` (10)
neu — **84/84 grün** (Wegwerf-DB `gp5_test`, frischer `-i`-Lauf).
Rechenfälle `docs/rechenfaelle/abfertigung.md`. Offen: GP6 FI-
Buchung (BVG-Konto), GP7 mBGM (Leitzahl/DG-Kontonummer, Jahres-
zahlung), GP8 Fristenkalender; SV-SZ-§-49-Abs-3-Z-7-Folgefix im
Kern (GP4-Beobachtung) separat entscheiden.
**Update 2026-09-11 (GP4 umgesetzt):** SV/DB komplett im Kern gebaut
(AP4, D3-Vorfinanzierung) und grün: `models/sozialversicherung.py`
(DG-Beiträge ÖGK 2026 20,98 %/Wien 21,23; § 54-SZ-Beiträge DG