Files
odoo-at-payroll/addons/l10n_at_hr_payroll_private/README.md
T
fegger 14940ac31a [IMP] l10n_at_hr_payroll_private: GP7 mBGM/JASV + Versichertenmeldung + fallweise Anmeldung auf dem ELDA-Framework
mBGM/JASV (models/mbgm.py — DM-ORG 42.7.0 E.32, BEST MB, Version 02): Paket PS (BKNR/DGNA/BZRM/GSUM/ANZM) → mBGM G1 (REFW/VSNR/FANA/VONA/VSUM/VERG=1) → Tarifblock T1 (BSGR/VVON) → Verrechnungsbasis BS (VBTY/VBBT) → Verrechnungsposition V1 (VPTY/VPVZ/VPTA/RSVZ/RSUM). KEIN DN/DG-Zweig-Split: T01 = GESAMT-Prozentsatz des Tarifsystems je Beschäftigtengruppe (Parameter at_mbgm_tarif, normativ: laufend 39,05 % = KV 7,65 + PV 22,80 + AV 5,90 + UV 1,10 + WF 1,00 + IESG 0,10; SZ 37,55 % = DN KV 3,87 + PV 10,25 + AV 2,95 + DG 20,48). Abschläge als EIGENE Verrechnungspositionen je Basis: A03/A02/A01 = Minderung AV auf 0/1/2 % (§ 2a AMPFG, nur DN-AV, je Verrechnungsbasis AB UND SZ), A09 = UV-Entfall 60, A10 = AV+IE-Entfall Pensionsanspruch (Konkurrenz a4: sperrt Staffelabschlag), A15 = PV-Halbierung Bonusphase — konsistent mit der GP4-§-2a-DN-seitig-Konvention. BV (BMSVG): eigene Verrechnungsbasis BV (ungedeckelt, GP5) + Position V01 1,53 %. RSUM = Basis x Satz (mBGM-Tarifierung), Konsistenz-Check gegen GP4-Payslip-Beitragssummen ±0,10 € als Prüfwarnung. Storno: R1-Sätze mit REFU/VSUM wie Original. Fehlanzeige: Paket ohne mBGM-Sätze (ANZM 0). Geringfügige/fallweise ohne Parametrisierung: listenweiser Abbruch (keine Tarif-Erfindung; BSGR B044/B045/B010/B030 aus dem SV-Tarifsystem pflegen).

Versichertenmeldung (models/versichertenmeldung.py — DM-ORG E.29, BEST VR, Version 03, Satzlänge 772): M3 vor Arbeitsantritt / M4 (7 Kalendertage ab PV-Ende) mit deklarativer Event-Erkennung über die Meldungs-Registry (l10n.at.payroll.vr.event) — idempotente Läufe, Dimona-auto-Idee ohne write-diff-Hacks. Felder: BKNR/VSNR/GEBD/FANA/VONA (Namenssplit am letzten Leerzeichen), ADAT/EBSV, BBER 01-04 aus l10n_at_personalgruppe/lehrling, GERF (Kataloggehalt vs. GFG), FRDV, BVAB/BVJN aus dem GP5-BMSVG-Flag, VWAZ (Stunden x100, neu ab 01.01.2026), AGRD aus dem hr.departure.reason-Mapping (Standard 00). Fallweise Anmeldung (BEST MA, SART 32, Version 07, Länge 450): MVP je Anmeldetag am Vertragsbeginn; tagesgenaue Einsatztage via Work-Entry-Auswertung = dokumentierter Rest.

NSchAB-Branche als Company-Flag (l10n_at_nschab): B001-T01 + 3,80 % (Schlechtwetterentschädigung, ÖGK-Tarifsystem Normalbetriebe mit Schlechtwetterentschädigung).

Tests: test_meldewesen_private (2 — mBGM-Satzhierarchie mit A03 je Basis aus November-Fixture + GSUM-Konsistenz; VR M3/M4 mit Registry-Idempotenz und AGRD). Rechenfälle docs/rechenfaelle/meldewesen.md. 19.0.7.0.0.
2026-09-12 17:31:12 +02:00

8.3 KiB
Raw Blame History

l10n_at_hr_payroll_private (General-AT)

General-AT-Payroll (KV-basierte Privatwirtschaft: KV-Gehaltskataloge, AZG/UrlG-Arbeitszeit, 13./14. Bezüge, Abfertigung Neu) für Odoo 19.

Implementierungsplan (freigegeben, M0): personalverrechnung/IMPLEMENTIERUNGSPLAN-Privat.md · verbindliche Rechtslage: personalverrechnung/RECHTSQUELLEN-Privat.md

GP1 umgesetzt (KV-Framework):

  • l10n.at.payroll.kv — KV-Stammdaten mit Trace-Link zur KV-Library (library_variant_idpersonalverrechnung/quellen/kv/kv-catalog.json) und Quellen-URL der Arbeitgeberkammer;
  • l10n.at.payroll.kv.wert — versionierte KV-Eckwerte (Muster hr.rule.parameter.value, KV-Scope): Regelkonsum über employee.kv_id._wert('code', payslip.date_to);
  • l10n.at.payroll.kv.gruppe / .stufe — Verwendungs-/Lohngruppen mit Erfahrungsstufen, Jahrestabellen je gueltig_ab (unique(Gruppe, Stufe, Stichtag));
  • Vertragsfelder auf hr.version (durchgereicht auf hr.employee): kv_id, kv_gruppe_id, erfahrungsstufe, ueberzahlung;
  • Import-Wizard „KV-Katalog importieren": Tabellenpaste/CSV (Gruppe;Stufe;Gehalt[;Bezeichnung]) mit Vorschau, Sprungwarnung

    10 % (Warnzeilen werden nie automatisch übernommen) und Versionierung über gueltig_ab — historische Werte bleiben unangetastet.

Seed D2 (Referenz-KVs R1): SI-2203 „Handwerk und Gewerbe" + SI-2748 „Metallgewerbe", Gehaltstabellen ab 1. 1. 2026 kuratiert aus den KV-Library-Volltexten (quellen/kv/oegb/texts/). Besonderheiten im Seed:

  • SI-2203: VG I ist ab 1. 1. 2026 aufgelassen (Vorrückung nach § 17 Abs 6); Meistergruppen M IM III als eigene Gruppen (M II ohne/mit Fachschule);
  • SI-2748: eigene Vorrückungsverläufe als eigene Gruppen (IV-M = Meister in VG IV bis „nach 17 VWGJ", V-OM = Obermeister bis „nach 12 VWGJ"); Nacht-Sondervergütung 2,71 € (2026) bzw. 2,76 € (2027) als Jahresversionen.

Kern-Vorfinanzierung (D3): Lohnsteuer (AP3) und SV/DB-Regeln (AP4) werden im Kern-Modul l10n_at_hr_payroll gebaut und von beiden Produkten konsumiert; bei Bgld.-Auftragserteilung Anrechnung per Change-Request.

GP2 Entgelt-Engine (umgesetzt 2026-09-11): Structure „AT Privatwirtschaft (KV)", AZG-Fenster-WETs, Regelinventar KVGEO/NACHT_SV/UE_/MEHR_/URL_UE/B13/B14/B14_RUECK/NETTO — vollständig kv.wert-getrieben (Rechenfälle docs/rechenfaelle/).

GP3 Lohnsteuer (umgesetzt 2026-09-11): dünne Regeln SVDN_KV/PV/AV/AK/WF + LST_LFD/LST_SZ auf dem AP3-Kern (§ 66 kumulativ mit Rollung, § 67 Sechstel/Fixsätze mit Günstig- Aufrollung, § 68-Steuerfreiheiten; Rechenfälle docs/rechenfaelle/ lohnsteuer.md).

GP4 SV/DB (umgesetzt 2026-09-11): SVDN_SZ-Nachtrag (§ 67 Abs 12 — Netto-Korrektur in §-67-Monaten), DG-Block SVDG_KV/PV/AV/UV/WF/IESG + SVDG_SZ_* + §-53a-UV Geringfügiger (Kategorie ATP_DG, ohne Nettoeffekt; ÖGK 2026: DG 20,98 % / Wien 21,23 %), Lohnnebenkosten FLAFDB (§ 41 FLAG), KOMMST (§ 9 KommStG) und DZ (§§ 122/126 WKG, company-flag-gated) mit Freibetragsstaffel 1.095/1.460 € — Logik/Werte im Bundes-Kern (models/sozialversicherung.py, D3-Vorfinanzierung): §-2a-ALV-DN-Staffel, Geringfügigkeit (§ 5 Abs 2 iVm § 810 Abs 3 ASVG), beitragsfreie Bezüge § 49 Abs 3 mit Jahres-Kumulativen, altersabhängige Satzausschaltungen (§ 1 Abs 2 lit e AlVG, § 51 Abs 6/7 ASVG, § 12 IESG), WF-Satzvektor Wien, Beitragsmonats- Allokation (Anspruchsprinzip) und DAG-Bewertung (§ 1 DAG). Rechenfälle docs/rechenfaelle/sozialversicherung.md.

GP5 Abfertigung Neu (umgesetzt 2026-09-11): BMSVG-Regel BVG (§ 6 Abs 1: 1,53 % DG auf Entgelt und SZ; Kern-Parameter at_sv_bv_dg) auf EIGENER, ungecappter BV-Grundlage (§ 6 Abs 5 iVm § 49 ASVG — kein HBG-/Jahresdeckel, ohne §-67-Abs-3/6-Zeilen gemäß § 49 Abs 3 Z 7 ASVG) — models/abfertigung_private.py:

  • Beitragsfreier erster Monat taggenau (§ 6 Abs 1): Fenster [Eintritt, Eintritt + 1 Monat), Pflicht ab Monatsjubiläum (15. 06. → 15. 07.); 30-Tage-Aliquotierung (KB 4.500/30 × 17 = 2.550); Monatsende-Klippe (31. 01.) → frei bis Monatsultimo, Pflicht ab Folgemonatserstem; AV ≤ 1 Monat zur Gänze beitragsfrei; Wiederzulassung binnen 12 Monaten → Pflicht ab dem 1. Tag (OGH 9 ObA 30/16a; Vor-AV beliebiger Dauer — auch < 1 Monat);
  • SZ ohne Fenster-Kürzung; frei nur bei Beitragsmonat im Fenster (taggenau); läuft auch für geringfügig Beschäftigte und Lehrlinge (§ 46, § 1 Abs 2 Z 1);
  • Anwartschaft (§ 15: gutgebrachte Beiträge + Erträge aus dem Kassen-Auszug, KEINE Monatsentgelt-Staffel) aus validierten Läufen; Vertragsfelder Abfertigung-Neu/BV-Kasse (l10n.at.bv.kasse mit Leitzahl für eSV/mBGM) + Erträge/Vor-Beitrags- monate am Mitarbeiter; Anwartschaftsreport (QWeb, am Mitarbeiter druckbar) + Endabrechnungs-Wizard (§§ 14-17: §-14-Abs-2- Verfügungsmatrix mit 36-Beitragsmonate-Kriterium, §-16-Fälligkeit, 6-Monats-Erklärungsfrist, 5 §-17-Optionen) — Auszahlung selbst läuft über die MV-Kasse, nicht über den Payslip.

Rechenfälle docs/rechenfaelle/abfertigung.md.

GP6 FI-Buchung UGB (umgesetzt 2026-09-12): Buchungsmatrix nach dem Österreichischen Einheitskontenrahmen (KFS/BW 6): Hook _configure_payroll_account_at (Chart-Load + <function>-Datendatei, idempotent; Konto-Suche exakt mit Längen-gebundenem Präfix-Fallback — kein Match auf Odoo-Scaffold-Konten) ordnet Regelkonten, Journal SLR (Default = Gehälterkonto, BE-Muster) und das NET-Konto 3850 „Verbindlichkeiten aus Lohn und Gehalt" (Anlage + reconcile) zu. EKR-Debit-Split Arbeiter/Angestellte: l10n_at_personalgruppe am Vertrag + Override-Feld l10n_at_account_debit_arbeiter je Regel (Option A minimal: Grundentgelt 6000, Sozialaufwand 6500, Abgaben 6600/6601/6602; Zuschläge/ÜStd/SZ/Prämien buchen bis zur Referenzbuchhaltungs-Fixierung auf die Angestellten-Konten); Gesamtüberschreibung von _prepare_slip_lines (Odoo bietet keinen Override-Punkt; durch Tests gepinnt). Netto-Regel auf Odoo-Konvention NET umbenannt + die automatisch kopierte Default-NET-Regel wird archiviert (Code-Kollision im result_rules-Dict; archiviert statt unlinkt — historische Linien behalten die Referenz). Auszahlung über hr_payroll_account_iso20022; kein VRV/MVAG (gem360-Brücke).

Rechenfälle docs/rechenfaelle/buchhaltung.md.

GP7 Meldewesen/Belege (umgesetzt 2026-09-12): auf dem Kern- Framework (ELDA-Fixlängen-Dateien, ISO-8859-15, CRLF-Annahme; L16 + Arbeitsstättenmeldung + Belege Lohnzettel AT/Monatsdienstliste/ Monatsjournal im Kern): mBGM/JASV (Paket/mBGM/Tarifblock/Verrech- nungsbasis/-position, T01-Gesamtsatz aus at_mbgm_tarif — normativ 39,05 % laufend / 37,55 % SZ; Abschläge A01/A02/A03 § 2a AMPFG je Basis AB und SZ, A09/A10/A15 aus GP4-Stichtagen; BV-Basis + V01 aus GP5; Storno-R-Sätze mit REFU; Fehlanzeige als Null-Paket; Gering- fährige/fallweise ohne Tarifparameter = listenweiser Laufabbruch); Versichertenmeldung M3/M4 (deklarative Event-Erkennung über die Meldungs-Registry — idempotent, kein write-diff; BBER 0104, GERF, FRDV, BVAB/BVJN aus GP5, VWAZ; AGRD-Mapping am Abgangsgrund) und fallweise Anmeldung (BEST MA, SART 32; MVP je Anmeldetag); NSchAB-Branche als Company-Flag (B001-T01 + 3,80 %).

Rechenfälle docs/rechenfaelle/meldewesen.md.

Offen (GP8+): Jahreswechsel (GP8); All-in-UI-Bericht (GP8); B14 längster-Urlaubs-Teil-Verfeinerung; DZ-WKO-Verifikation (8.11) vor Wien-Mandanten; §-7-BMSVG-Fiktivfälle (Option); Arbeiter-Sub- Konten-Endfixierung (Referenzbuchhaltung); Schwerarbeitsmeldung (nach ASchV-Datenmodell-Bau, DM-ORG E.22-Struktur liegt bei); § 109a (separater Baustein); Mitteilungsfile-Import (GP8); geringfügig/fallweise-Tarifparameter pflegen (at_mbgm_tarif).

Tests: test_kv_katalog + test_entgelt_private (GP2) + test_lst_private (GP3) + test_sv_private (GP4) + test_bv_private (GP5) + test_account_private (GP6) + test_elda_l16 (GP7 Kern) + test_meldewesen_private (GP7) — .venv/bin/python -m odoo -d <testdb> -i l10n_at_hr_payroll,l10n_at_hr_payroll_private --test-tags /l10n_at_hr_payroll,/l10n_at_hr_payroll_private --test-enable --stop-after-init --addons-path=odoo_19.0+e.20260910/odoo-19.0+e.20260910/odoo/addons,addons (Lokal grün am 2026-09-12 auf Wegwerf-DB, frischer -i-Lauf: 94/94 Tests.)