From 8e0b169b73cecf85000e02938bdb58d07ddf0c09 Mon Sep 17 00:00:00 2001 From: Florian Egger Date: Wed, 9 Sep 2026 12:26:14 +0200 Subject: [PATCH] [ADD] personalverrechnung: Plan SV-Werte-Implementierung (TASY-LSWH) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Analyse des ÖGK-TASY-Exports (Stichtag 2026-07-01, 5 MB): tarife/tarifsets/ tarifgruppen/beschaeftigtengruppen-Kette mit DN/DG-Anteilen je Zweig (KV/PV/AV/UV/IE/DG/AK/WF/BV), bbwerte in Cent mit Gültigkeit; verifizierte Deckung mit dem SV-Werte-Report 2026 (GFG 551,10 EUR, HBG SZ 13.860 EUR, KV 3,87/3,78, AV 2,95/2,95). Plan: hr.rule.parameter bleibt alleiniger Wertespeicher (Engine-Mechanik, Konsum via payslip._rule_parameter); Seed 2026 per Generator mit Herkunftsnachweis + jährlicher TASY-Import-Wizard (stichtagsbasierte Auflösung über die Gruppenkette, Preview-Differenz mit Plausibilitätswarnung, explizite Bestätigung) + Mapping-Tabelle TASY-Code/Zweig -> Parameter. Nicht in TASY: öffentlicher FLAF-DB (§ 49a Abs 8/9, AP0/RIS), Lohnsteuer, KommSt. Offene Punkte (HBG x30-Konvention, AMPFG-Staffelauflösung, Commit der 5-MB-Quelldatei) im Plan dokumentiert; Freigabe-Antrag gestellt. --- personalverrechnung/PLAN-TASY-SV-Import.md | 119 +++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 personalverrechnung/PLAN-TASY-SV-Import.md diff --git a/personalverrechnung/PLAN-TASY-SV-Import.md b/personalverrechnung/PLAN-TASY-SV-Import.md new file mode 100644 index 0000000..779415e --- /dev/null +++ b/personalverrechnung/PLAN-TASY-SV-Import.md @@ -0,0 +1,119 @@ +# Plan — SV-Werte-Implementierung (AP4) auf Basis TASY-LSWH-Export + +**Status:** Plan zur Freigabe (AGENTS.md-Workflow). Ergänzt den +freigegebenen `IMPLEMENTIERUNGSPLAN-Bgld.md` (AP4/AP8) um den +TASY-gestützten Wertelayer. + +- **Stand:** 2026-09-09 · Branch `dev-payroll` +- **Quelle:** `personalverrechnung/TASY-LSWH-Export-20260324.xml` + (ÖGK-Tarifsystem-Export, Gültigkeitstichtag 2026-07-01, 5 MB) + +## 1. Befunde aus der Datei (verifiziert) + +| Aspekt | Befund | +|---|---| +| Aufbau | `tarife` (356) mit DN/DG-Anteil je `tarifZweig` + Gültigkeit; `tarifsets`/`tarifgruppen`/`tarifgruppeSetZuordnungen` als Zuordnungskette zu `beschaeftigtengruppen` (B-Codes, 408); `beitragbemessungsbetraege` (158 Codes) mit `bbbwerten` (612, **Cent-Werte** je von/bis) | +| Zweige | KV, PV, AV, UV, **IE (Insolvenz/IESG)**, DG (SV-Dienstgeberbeitrag), AK, WF, BV, LK, SW, … | +| Verifizierte 2026er Werte | Geringfügigkeitsgrenze **551,10 €** (`GFGBTG`), HBG SZ **13.860 €** (`HBGSZ`), KV-Split **3,87/3,78**, AV **2,95/2,95**, PV-DG **12,55** — deckungsgleich mit dem offiziellen SV-Werte-Report 2026 ✓ | +| Raten-Auflösung | Am Stichtag gelten je Zweig 21–67 Tarif-Varianten (Sondergruppen, §-2a-AMPFG-Staffelanteile, freie DN …). Der **Standard-Angestelltensatz** muss über `beschaeftigtengruppe` (z. B. „Angestellte") → `tarifgruppeSetZuordnung` → `tarifset` → `tarife` aufgelöst werden | +| Nicht enthalten | Öffentlicher FLAF-DB (§ 49a Abs 8/9 — null Treffer), Lohnsteuer, Kommunalsteuer → bleiben separate, RIS/usg-basierte Parameter (AP0) | +| Offene Detailpunkte | HBG monatlich = `HBGALLG` (tgl.) × 30 oder eigener bbbwert; exakte Abbildung der §-2a-AMPFG-Staffel über Tarif-Varianten (Grenzwerte werden zusätzlich gegen den SV-Werte-Report gespiegelt) | + +## 2. Zielbild + +Zwei Schichten — **kein Eigenbau-Speicher**, die Engine-Mechanik bleibt +alleiniger Wertespeicher: + +1. **Seed 2026** (`data/rule_parameters_2026.xml`): `hr.rule.parameter` + + `hr.rule.parameter.value` (date_from = Stichtag) aus DIESEM Export, + einmalig per Generator-Script generiert und gegen den SV-Werte-Report + 2026 gespiegelt (Herkunftsnachweis wie beim GemBG-Katalog). +2. **TASY-Import-Wizard** (`gemeinde.payroll.tasy.import.wizard`, + TransientModel) für die Jahrespflege (AP8): + - Upload des jährlichen Exports (ir.attachment), sicheres Parsen + (lxml, resolve_entities=False); + - Auflösung am `gueltigkeitstichtag`: bbwerte der Mapping-Codes + (Cent→€) + Standard-Raten über die Gruppenkette; fehlende/ + mehrdeutige Auflösungen landen zur manuellen Klärung im Preview; + - **Preview-Differenz** (Parameter, alter Wert, neuer Wert, + Stichtag, Plausibilitätsprüfung ±10 % Sprungwarnung); + - Bestätigung schreibt `hr.rule.parameter.value` (date_from = + Stichtag; historische Werte bleiben versioniert), Protokoll. +3. **Mapping-Tabelle** `gemeinde.payroll.tasy.mapping` (TASY-Code/Zweig → + rule-parameter-code) als data XML — transparent, ohne feste Werte im + Code, erweiterbar (z. B. BVAEB-Export später). + +Regeln (AP2/AP4) konsumieren ausschließlich +`payslip._rule_parameter('at_sv_kv_dn')` usw. — keine Literale +(payroll-Skill-Architekturregel). + +## 3. Parameter-Katalog (Seed 2026) + +| hr.rule.parameter | Wert 2026 | TASY-Quelle | +|---|---|---| +| `at_sv_gfg_monatlich` | 551.10 | GFGBTG | +| `at_sv_hbg_monatlich` | 6.930,00 | HBGALLG (tgl. 231,00 × 30; Auflösung klären) | +| `at_sv_hbg_sz_jaehrlich` | 13.860,00 | HBGSZ | +| `at_sv_kv_dn` / `at_sv_kv_dg` | 3.87 / 3.78 | Tarif KV (Standard-Angestellte) | +| `at_sv_pv_dn` / `at_sv_pv_dg` | 10.25 / 12.55 | Tarif PV | +| `at_sv_av_dn` / `at_sv_av_dg` | 2.95 / 2.95 | Tarif AV | +| `at_sv_uv_dg` | 1.10 | Tarif UV | +| `at_sv_iesg_dg` | 0.10 | Tarif IE | +| `at_sv_bv_dg` | 1.53 | Tarif BV | +| `at_sv_ak_dn` / `at_sv_wf_…` | (geführt; für GemBG nicht anwendbar — Datenbasis vollständig, Anwendungslogik entscheidet) | AK/WF | +| `at_sv_av_staffel_ampfg` | Grenzen 2.225/2.427/2.630 + Anteile 0/1/2 % | SV-Report + TASY-Kreuzcheck | + +**Getrennt gepflegt (nicht TASY):** `at_flaf_db_oeffentlich` +(§ 49a Abs 8/9 — AP0/RIS), Lohnsteuer-Parameter (usp/RIS). + +## 4. Umfang / Dateien + +``` +l10n_at_gemeinde_payroll/ + models/tasy.py # gemeinde.payroll.tasy.mapping + import-wizard + data/rule_parameters_2026.xml # Seed (generator-erzeugt) + data/tasy_mapping.xml + wizard/… (transient im models-File oder wizard/ je nach Konvention) + views/tasy_views.xml # Mapping-View + Wizard-Form + security/ir.model.access.csv (Ergänzung) + tests/test_tasy_import.py # Parser-/Resolutions-Tests (kleines Fixture) +personalverrechnung/tools/gen_sv_parameters_2026.py # Herkunftsnachweis +``` + +Die 5-MB-Exportdatei: **Vorschlag** unter +`personalverrechnung/quellen/TASY-LSWH-Export-20260324.xml` committen +(öffentliches Tarifdatenmaterial, keine Personendaten) — oder unversioniert +lassen, wenn du das Repo klein halten willst (bitte entscheiden). + +## 5. Tests (Rechenfälle) + +1. Parser: Fixture-Slice (handgebaut, gleiche Struktur) → bbwerte + Cent→€, Stichtagsfilterung, fehlende Werte → Preview-Fehler. +2. Auflösung: Standard-Raten für „Angestellte" (KV 3.87/3.78 …) aus der + **echten Exportdatei** (Test liest sie aus dem Repo, wenn committet; + sonst aus dem Fixture mit den verifizierten Werten). +3. Seed-Spiegelung: `at_sv_kv_dn` == 3.87 usw. gegen SV-Werte-Report + (gleiche Anker wie RECHTSQUELLEN Abschnitt 4). +4. Wizard: neuer Stichtag → neue `hr.rule.parameter.value`, alte + Version bleibt; Sprungwarnung bei >10 % Abweichung. +5. HBG-Rechnung tgl. × 30 gegen monatlich (je nach Auflösungsvariante). + +## 6. Risiken / offene Fragen + +1. Auflösungstiefe der Tarif-Varianten (Standardgruppe vs. Sonderfälle) + — im Wizard als Preview-Schritt sichtbar, mehrdeutige Sätze werden + nie automatisch übernommen. +2. HBG monatlich (×30-Konvention vs. eigener bbbwert) — Klärung in der + Implementierung mit Quellenabgleich. +3. TASY liefert ÖGK-Werte; BVAEB-Angelegenheiten (falls je benötigt) + folgen über dasselbe Mapping-Modell als eigener Import. +4. FLAF-DB öffentlich bleibt AP0 (RIS) — bewusst außerhalb TASY. +5. Verbindlichkeit: Wizard schreibt erst nach expliziter Bestätigung + (kein stiller Jahresüberschreib). + +## 7. Freigabe-Antrag + +Mit Freigabe: (a) TASY-Datei committen ja/nein (Abschnitt 4), (b) +Seed 2026 generieren + `rule_parameters_2026.xml`, (c) Mapping-Modell + +Import-Wizard, (d) Tests; Gesamtaufwand ~6–9 PT (in AP4/AP8-Kalkulation +enthalten — ersetzt die dort angesetzte manuelle Wertepflege zum Großteil). \ No newline at end of file