diff --git a/.agents/MEMORY.md b/.agents/MEMORY.md index ccde291..35dc3d3 100644 --- a/.agents/MEMORY.md +++ b/.agents/MEMORY.md @@ -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 ∈ [Start−12M, + 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/ diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index b34e06f..111069d 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -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` diff --git a/personalverrechnung/IMPLEMENTIERUNGSPLAN-Privat.md b/personalverrechnung/IMPLEMENTIERUNGSPLAN-Privat.md index c5551da..25e3a25 100644 --- a/personalverrechnung/IMPLEMENTIERUNGSPLAN-Privat.md +++ b/personalverrechnung/IMPLEMENTIERUNGSPLAN-Privat.md @@ -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