Compare commits
9 Commits
9ff977e0d4
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 1df5fb19c4 | |||
| efe76e6b3d | |||
| 27f3b4b7f9 | |||
| d53e1e64a1 | |||
| 850e99df20 | |||
| 472b19a4b2 | |||
| 4b86bcb790 | |||
| 9add58fe83 | |||
| ee94f4664f |
+367
-2
@@ -2,8 +2,373 @@
|
||||
|
||||
## Current focus
|
||||
|
||||
**Modul l10n_at_payroll_dokumente (Dokumentgenerierung) umgesetzt — 236/236 Tests grün**
|
||||
(2026-09-16, uncommittet bis Nutzerfreigabe; Modul **19.0.1.0.0**):
|
||||
|
||||
- **Anforderung (Nutzer):** Muster → Dokumente aus Stammdaten (Dienstvertrag,
|
||||
Kündigung, DSE …). Nutzer-Entscheidungen: neues Modul; DSE = vorhandene
|
||||
Pfändungs-DSE (kein Neubau); **eigene Texte nach Muster-Struktur** (kb_ref/
|
||||
quell_stand je Vorlage dokumentiert, kein Lexis-Volltext im Repo —
|
||||
Lizenzthema damit fürs Produkt gelöst; Muster werden laufend ergänzt,
|
||||
kein Warten nötig: neue Vorlagen = Datenarbeit).
|
||||
- **Bau:** Modell `l10n.at.payroll.dokument.vorlage` (+ feld): eigener Text
|
||||
`inhalt_html` (Html, sanitize=False), Feldliste (auto/manuell, pflicht),
|
||||
kb_ref/quell_stand/rechtsstatus (entwurf|geprueft), company + Rule.
|
||||
Wizard `l10n.at.payroll.dokument.wizard` (+ Zeilen-Transient): Stichtag →
|
||||
hr.version (date_version <= Stichtag!), Auto-Resolver (firma/firma_strasse/
|
||||
firma_plz/firma_ort/mitarbeiter/mitarbeiter_strasse/plz/ort/ead/funktion/
|
||||
geboren), Manuell-Eingaben, Pflicht-UserError, Vorschau, PDF via
|
||||
`ir.actions.report._render_qweb_pdf` **mit HTML-Fallback** ohne
|
||||
wkhtmltopdf (Anhang am hr.employee). Generisches QWeb-Print-Layout
|
||||
(AbstractModel + data['body'] als Markup, wie DSE-Muster).
|
||||
- **⚠️ Rendering-Weg (wichtig, abweichend vom Plan):** NICHT
|
||||
`mail.render.mixin._render_template` (engine inline_template) — deren
|
||||
Ausdrucks-Whitelist (`mail_allowed_qweb_expressions`, nur object.name u.ä.)
|
||||
sperrt `werte['…']`-Ausdrücke für Nicht-Template-Editoren (AccessError).
|
||||
Stattdessen: `rendering_tools.convert_inline_template_to_qweb` →
|
||||
`ir.qweb._render(lxml html.fragment_fromstring(src, create_parent='div'), …)`
|
||||
+ Wrapper-[5:-6]-Strip (Muster `_render_template_qweb`). Autor-Syntax
|
||||
bleibt identisch; **t-out escapt Werte automatisch** (kein manuelles
|
||||
Escaping). t-if-Blöcke für optionale Absätze sind möglich (QWeb direkt).
|
||||
- **Pilotvorlagen (eigen formuliert, Rechtsstatus 'entwurf'):** DV
|
||||
Angestellte (lb-bes-09), Kündigung DG (lb-bnd-55), einvernehmliche
|
||||
Auflösung (lb-bnd-52/62), Vordienstzeitenbestätigung (lb-end-35).
|
||||
§-Verifikation: § 27 AngG (wichtiger Grund) RIS ✅; **§ 34 AngG =
|
||||
Verjährung** (nicht Auflösung!) — Auflösungstexte zitieren bewusst keine §§.
|
||||
- **Tests 8** (Auto-Werte, Platzhalter-Ersetzung, Pflicht-UserError,
|
||||
Stichtags-Versionen, Anhang PDF/HTML, generisches Layout via
|
||||
`_render_qweb_html` ohne wkhtmltopdf, ACL hr.group_hr_user vs. base,
|
||||
Pilotvorlagen E2E). Suite **236/236** (73 Kern + 18 GemBG + 199 Privat
|
||||
+ 10 Dokumente) frischer -i-Lauf.
|
||||
- Offen: DSE-Pfändung-Link ins Dokumente-Menü (kosmetisch), mehr Vorlagen
|
||||
nach Nutzermustererweiterung, Produktivsetzung erst nach rechtlicher
|
||||
Prüfung (rechtsstatus je Vorlage).
|
||||
|
||||
**Erneuter Abgleich Modul ↔ Wissensbasis (2026-09-16, Read-only, Grep-Verifikation am Code):**
|
||||
Basis PLAN-Restluecken-AP11 (Abgleich 2026-09-12, 601 Einträge) + Zwischenstand AP8/AP11–AP16.
|
||||
Befund:
|
||||
- **Geplante Reste unverändert offen (0 Code-Treffer je Thema):** AP17 (L17, § 109a/
|
||||
§ 109b-Meldung, mBGM Geringfügigen-Jahreszahlung 2,5 %), AP18 (NSchG-Monatszähler,
|
||||
Schwerarbeitsmeldung — ASchV/NSchG-Beschaffungsgate), AP19 (GF/Vorstand-Flag,
|
||||
Ferialpraktikanten, DVH-Sonderfälle, Präsenzdienst-BV-Fiktion), AP20+-Optionen
|
||||
(ATZ, Kurzarbeit, Betriebspension/Beteiligung, Entsendung), Quer-LSt: FB+/ANV-
|
||||
Automatik, Prämien-Anspruchsprinzip (A3-blockiert), 2027-Werte.
|
||||
- **Zwischenzeitlich ✅ (Code-verifiziert):** All-in § 2g AVRAG (GP2-Deckungsrechnung,
|
||||
payslip_private `_at_allin_deckung`), Fallweise-Felder + mBGM G3/G4 tagesgenau,
|
||||
AVAB/AVB-Selection, Nachzahlungspfade (SV/LSt/Endabrechnung), Tod des DN =
|
||||
Abgangsursache 13, §§ 23f/§ 47-Übertritte in abfertigung_private.
|
||||
- **1 NEUER Restpunkt aus Batch 10:** **Ausbildungskostenrückersatz** (lb-end-27/28,
|
||||
Checkliste + Muster) — 0 Code-Treffer, auch nicht im AP11-Plan erfasst →
|
||||
als Zusatzpunkt in AP14/Endabrechnung (Scope-Gate Pilotmandant) aufnehmen.
|
||||
- Batch 10 sonst: keine neuen Cluster, keine neuen Berechnungslogiken (Muster/
|
||||
Checklisten/Übersichten); lb-end-30/31 (freiwillige Abf./Voll-Übertritt) und
|
||||
lb-end-29 (Zeitschulden) abgedeckt; lb-grz-09..11/lb-swa-06 stützen AP18/AP20.
|
||||
- KB-interne offene Punkte unverändert: A3 „Formel 7“, A4 All-In-Oberwert,
|
||||
A7-2026-GFG, C7-2027-Werte, B3 Pensionisten (VwGH), ASchV/NSchG-Beschaffung.
|
||||
- **Nachgetragen 2026-09-16 (Nutzer):** Ausbildungskostenrückersatz in
|
||||
`PLAN-Restluecken-AP11.md` (AP14-Umsetzung/Rechtsanker + Lücken-Liste 2.4).
|
||||
- **Neue Anfrage (2026-09-16, ERLEDIGT — siehe Modul-Block oben):**
|
||||
`.lexis360/muster/` für Dokumente in Odoo nutzen → Modul
|
||||
`l10n_at_payroll_dokumente` umgesetzt; Nutzer entschieden: eigene Texte
|
||||
nach Muster-Struktur (kein Lexis-Volltext im Repo), Lizenz-Redistribution
|
||||
damit fürs Produkt gelöst; Sammlung wird laufend ergänzt (kein Warten).
|
||||
|
||||
**Wissensbasis Batch 10 (3 neue Lexis-Subordner) ABGESCHLOSSEN — 64/64 kuratiert, `--registry` + `--check` grün**
|
||||
(2026-09-16, Nutzerfreigabe "bitte zur wissensbasis hinzufuegen"):
|
||||
|
||||
- 64 neue PDFs in `.lexis360/{beispiele,muster,uebersichten_checklisten}/`
|
||||
(dasselbe Werk *Lexis Briefings Personalrecht*, dieselbe Breadcrumb-
|
||||
Form; Stand 2026-06/07/08, wenige alte: 2020-12 … 2025-12). Cleanup
|
||||
erledigt: 4 Re-Export-Duplikate `(1)` → neuere (15.9.2026) behalten,
|
||||
ältere gelöscht; `grundklauseln_zu_ausma%c3%9f_...` → `..._ausmass_...`.
|
||||
- **Pipeline:** `build_lexis_kb.py` — `BATCH_LEXIS 9→10`, `SOURCES["lexis"]`
|
||||
um `"pdf_subdirs": ("beispiele","muster","uebersichten_checklisten")`;
|
||||
`extract_lexis()` globt Top-Level + Subordner, Slug-Kollisionsguard,
|
||||
`pdf_rel` via `relative_to(ROOT)`. `--extract --source lexis`:
|
||||
**635/635, 0 unclustered, 0 warnings**; IDs eingefroren (lb-bnd-45..66,
|
||||
lb-end-27..35, lb-son-06, lb-url-17, lb-tel-07..11, lb-ues-05..09,
|
||||
lb-bnd/azg/azm/bes/bso/grz/swa/aug-Erweiterungen).
|
||||
- **Kuration: 64/64 neue Layer-2-Einträge** in
|
||||
`personalverrechnung/wissensbasis/dokumente/` (ältere Stände mit
|
||||
„⚠ Alter Stand“ markiert: lb-tel-07/08/09/10, lb-ues-05/06/08,
|
||||
lb-bes-09/10, lb-end-27/28/33/34).
|
||||
- **Validierung grün:** `--registry` → kb.json + INDEX.md **665 Einträge,
|
||||
69 Cluster**; `--check` → 635 sources / 635 curated / **0 problems**.
|
||||
- RUNBOOK.md Wissensbasis-Paragraf um Batch 10 ergänzt.
|
||||
- Offene Restfragen: keine (Subordner-Integration war die letzte offene
|
||||
Frage dieses Themas). ODL-Extraktion (`.lexis360/odl/`) bleibt Spot-
|
||||
check-Auswahl, nicht Teil der Pipeline.
|
||||
|
||||
**AP16 Karenz-/Familien-Reste umgesetzt (8.13 freigegeben) — Kern 73/73, Privat 199/199 Tests grün**
|
||||
(2026-09-15, uncommittet bis Nutzerfreigabe; Privat **19.0.17.0.0**):
|
||||
|
||||
- **8.13 komplett freigegeben** (Nutzer, 2026-09-15) — Mutterschutz-/Karenz-
|
||||
Block im R1-Scope; §-Verifikation am Originalwortlaut (AVRAG §§ 11/11a/
|
||||
14a–14e/15a, VKG § 1a, MSchG § 15f, BMSVG § 7 Abs 4–6, ASVG §§ 163/166).
|
||||
KB-Synthesen (3 Subagenten): lb-kar/elt/kzs/pap/kbg — arbeitsrechtliche
|
||||
Kerne + Abrechnungstypologie (alle Voll-Freistellungen entgeltlos,
|
||||
Leistungen extern: AK/AMS/BASB/KV/Gesundheitskasse; elt-SV/LSt/BMSVG-Lücken
|
||||
verifizieren = erledigt über RIS/Bestandsmaschinerie; ⚠ lb-elt-06 §-8/§-8a-
|
||||
VKG-Zuordnung dokumentiert).
|
||||
- **Privat (19.0.17.0.0):** 6 neue WETs/Urlaubsarten (ATP_BILDUNGSKARENZ,
|
||||
ATP_HOSPIZKARENZ, ATP_KINDERKRANK, ATP_KINDERREHAB, ATP_PFLEGEKARENZ,
|
||||
ATP_PAPAMONAT); Regel `KARENZ_ENTGELT` (seq 48, negatives Tagesatz-Muster
|
||||
wie MSCH_ENTGELT, Ausschlüsse im geteilten `_at_efz_tagesatz`); Modell
|
||||
`models/karenz.py` (Status/Tage/Karenzarten-Map); vr.event-An-/Abmeldungen
|
||||
aus Karenz (M4 Tag vor Beginn, M3 Rückkehr, entfällt bei DV-Ende; Karenz-
|
||||
art-Strings im Protokoll, eSV-Sonderformate GP7); fiktive BV mit §-7-Abs-4-
|
||||
**Z-1–3-Brücke** (`_at_msch_referenz_stichtag_und_anzahl` in mutterschutz.py);
|
||||
BV-Vor-Entgelt-Feld `l10n_at_bv_vor_entgelt` (§ 6 Abs 4 BMSVG, Pflegeteilzeit)
|
||||
in `_at_bv_basis_laufen`; §-23-Abs-8-Hochrechnungs-Vorschau im Wizard
|
||||
(`abf_alt_hochrechnung_vorschau`); Sonderwochengeld-Erkennung (§ 163 ASVG)
|
||||
+ Ruhen-Warnungen (§ 166 ASVG) im msch_info.
|
||||
- **Tests:** neu `tests/test_karenz_private.py` 6 (Entgelt-Stopp, VR-Events
|
||||
inkl. Idempotenz + Protokoll, Z-1-Brücke, §-6-Abs-4-BV, § 163/§ 166,
|
||||
Wizard-Hochrechnung); Suite **214/214** (73 Kern + 199 Privat). Test-Details:
|
||||
hr.leave-Quere-Überlappung nur mit `leave_skip_date_check`+`leave_skip_state_check`
|
||||
+ direktem state='validate' umgehbar (Krankheit während Karenz);
|
||||
EFZ-Phasen lesen Leaves, `voll_arbeitstage` Work-Entries — überlappte Tage
|
||||
brauchen direkte hr.work.entry-Records; `hr.leave` hat KEIN
|
||||
work_entry_type_id (nur der Leave-Typ).
|
||||
- **Offen AP16-Reste (docs/rechenfaelle/karenz.md):** Urlaubs-Aliquotierung aus
|
||||
Karenz (§ 15f Abs 2 MSchG, hr_holidays-Allokationsseite), Leave-Überlappungs-
|
||||
Policy (allow_request_on_top/time_type — Mandanten-Entscheid), eSV-Sonderformate
|
||||
(Karenzart-Block, GP7), Sonderwochengeld-Vollrechnung (§ 141/§ 125/§ 108f =
|
||||
Anzeige-Stufe), lb-kar-02-13-Wochen-Über-/§ 2i-AVRAG-Konflikt (dokumentiert).
|
||||
- **Offen gesamt:** AP17 Meldewesen-Reste (L17/§ 109a/§ 109b, Geringfügigen-
|
||||
Jahreszahlung), AP18+ (Gates). Nicht committen ohne Nutzeranforderung.
|
||||
|
||||
**AP14-B Prämien bei Beendigung (§ 16 AngG) umgesetzt — Kern 73/73, Privat 191/191 Tests grün**
|
||||
(2026-09-15, uncommittet bis Nutzerfreigabe; Privat **19.0.16.0.0**):
|
||||
|
||||
- **Recht (RIS-Wortlaut § 16 AngG + § 6 Abs 5 BMSVG verifiziert, lb-end-18):**
|
||||
§-16-Aliquot = Betrag × zurückgelegte Dienstzeit / Dienstperiode;
|
||||
Angestellte: unabhängig vom Beendigungsgrund gebührend (Verlust-/Kündigungs-
|
||||
Klauseln unwirksam, 9 ObA 82/13v); Arbeiter: leistungsabhängige Prämien
|
||||
dürfen wirksam an „kein Verschulden“ gebunden sein; spezifische Leistungen
|
||||
(z. B. Bilanzgeld) ohne Tätigkeit nicht aliquot. LSt: mit Endabrechnung
|
||||
sonstiger Bezug im Sechstel (6 %); später zum VORHINREIN vereinbarten
|
||||
Fälligkeitszeitpunkt (Höhe erst nach Periodenablauf ermittelbar, z. B.
|
||||
Bilanzprämie) → § 67 Abs 10: Tarif im Zuflussmonat OHNE Sechstel, kein
|
||||
lit-c-Fall (98/14/0009), gesonderter Lohnzettel (Rz 911a). SV: SZ-artig
|
||||
→ SZ-HBG-Mechanik; spätere Prämie → Rollung ins Austrittsjahr (E-MVB
|
||||
044-01-00-006); LNK grundsätzlich pflichtig; BV 1,53 % ungecappt (§ 6 Abs 5).
|
||||
- **Privat (19.0.16.0.0):** Regeln `PRAM_END` (seq 35, bemessung sonstig —
|
||||
Sechstel/SZ-SV/LNK/BV) + `PRAM_END_TARIF` (seq 36, laufend + Kern-Flag
|
||||
`l10n_at_s67_abs6_ueberhang` = §-67-Abs-10-Pfad ohne Sechstel); Eingaben
|
||||
ATP_PRAM_END/ATP_PRAM_END_TARIF; Konten 6230 (LSt über LST_SZ/LST_LFD,
|
||||
keine eigene LSt-Regel); Wizard-Abschnitt (§-16-Aliquot-Vorschau, Zahlungs-
|
||||
art, Rollungs-Beitragsmonat, Bestätigungspflichten, Nachweis + Payslip-Tab
|
||||
`l10n_at_pram_nachweis`); Lauf-Feld `l10n_at_pram_beitragsmonat` + Roll-
|
||||
Branch in der bestehenden `_l10n_at_sv_basis_laufen_monate`-Überschreibung
|
||||
(Pin erweitert — **Achtung: keine zweite Methode mit gleichem Namen anlegen,
|
||||
die letzte Definition gewinnt**); LSt bleibt im Zuflussmonat.
|
||||
- **Tests:** endabrechnung 24 (RF-PRM-1..3: sonstig-Fall mit SZ-SV/LNK/BV,
|
||||
§-67-Abs-10 mit historischer Rollung 2025-06 aus 2026er-Auszahlung,
|
||||
Wizard-E2E + 3 UserError-Fälle); Suite **208/208** (73 Kern + 191 Privat)
|
||||
auf Wegwerf-DB. `compute_sheet()` löscht Linien neu — Linien-Overrides
|
||||
überleben nicht; Lauf-Felder (wie der Rollungs-Beitragsmonat) sind der
|
||||
richtige Weg.
|
||||
- **Verifikationsreste/GP7:** vollständige SZ-Aufrollung (Storno + Neurechnung
|
||||
gegen SZ-JahreshBG des Austrittsjahres) und mBGM-Storno/Neuübermittlung
|
||||
offen; BV-Basis der späteren Prämie verbleibt im Zuflussmonat
|
||||
(Approximation dokumentiert); gesonderter Lohnzettel Rz 911a (GP7).
|
||||
- **Offen:** AP16 Karenz-Reste (Gate 8.13). Nicht committen ohne
|
||||
Nutzeranforderung.
|
||||
|
||||
**AP15-C Vergleichssummen (§ 67 Abs 8 lit a) umgesetzt — Kern 73/73, Privat 188/188 Tests grün**
|
||||
(2026-09-15, uncommittet bis Nutzerfreigabe; Privat **19.0.15.0.0**):
|
||||
|
||||
- **Recht (RIS-Wortlaut § 67 Abs 8 lit a verifiziert, lb-end-21/22):**
|
||||
Vergleichssummen (gerichtl./außergerichtl. Vergleiche, Nachzahlungen aus
|
||||
Urteilen/Bescheiden, Kündigungsanfechtung) — soweit nicht Abs 3/6: Abs-10-
|
||||
Tarif im Zuflussmonat; nach §-62-Z-3/4/5-Abzug ist 1/5 steuerfrei (Deckel
|
||||
1/5 × 9 × mHBG = 12.474), Abs 2 (Sechstel) nicht anzuwenden;
|
||||
BV-Anwartschafts-Teil bis 7.500 € mit 6 % (parametrisiert
|
||||
`at_lst_67_abs8_vergleich_bv` — § 67 Abs 8 ist §-33a/§-124b-indexiert),
|
||||
Überhang fällt zurück ins Fünftel; LNK-PFLICHTIG (§ 41 Abs 4 lit b FLAG
|
||||
nennt nur Abs 3/6); SV-PFLICHTIG (Zuflussmonat; Aufrollung je Beitragsmonat
|
||||
via Kern-`l10n_at_beitragsmonat` bzw. PV-Verlängerung, lb-end-22/E-MVB
|
||||
011-02-00-001); Widmungen nur bei Strittigkeit anerkannt (VwGH);
|
||||
ausdrücklich vereinbarte gesetzl. Abfertigung → gesamt Abs 3 (VwGH
|
||||
2013/13/0001 = ARD 6490/20/2016); lit e (Pensionsabfindung)/lit f
|
||||
(Sozialplan) gehören NICHT zu lit a. Deckel-Reihenfolge: §-62-Abzug ERST,
|
||||
dann Fünftel — das 70.000-€-Quellenbeispiel meint die Bemessungsgrundlage,
|
||||
der Cap greift brutto-abhängig erst ab ~76.200 €.
|
||||
- **Privat (19.0.15.0.0):** Regeln `VERGLEICH` (seq 33, neutral/lauend,
|
||||
`l10n_at_s67_fuenftel`) + `VERGLEICH_BV` (seq 34, neutral/lauend, neues
|
||||
Regel-Flag `l10n_at_vergleich_bv`, KEIN `s67_abs` — sonst fälschlich
|
||||
LNK-frei), `LST_VERGLEICH_BV` (seq 74, 6 %); Eingaben
|
||||
ATP_VERGLEICH/ATP_VERGLEICH_BV; Helfer in endabrechnung.py:
|
||||
`_at_vergleich_bv_total/_beguenstigt/_ueberhang/_lst_6`,
|
||||
`_at_fuenftel_frei_betr`; `_at_fuenftel_total` zieht den BV-Überhang ins
|
||||
Fünftel, `_at_lnk_basis` + BV-begünstigter Teil (Pin-Kommentar
|
||||
aktualisiert); Konten 6200/6000 bzw. 3540 (vorläufig wie Abf);
|
||||
Wizard-Abschnitt (Bestätigungspflichten Aufgliederung/Strittigkeit +
|
||||
BV-Anwartschaft, BV ≤ Deckel erzwungen, Vorschau Fünftel/Tarif/BV-LSt);
|
||||
Payslip-Feld `l10n_at_vergleich_nachweis` + Tab.
|
||||
- **Tests:** endabrechnung 21 (RF-VGL-1..4: Rest-Fünftel 9.000 €, BV 9.000 €
|
||||
mit 7.500/1.500-Split und anteiliger Beitragszuordnung Rz 1102b, Deckel
|
||||
100.000 € brutto, Wizard-E2E + 3 UserError-Fälle); Suite **205/205** (73
|
||||
Kern + 188 Privat) auf Wegwerf-DB `ap15c_test5`.
|
||||
- **Verifikationsreste (dokumentiert, nicht geblockt):** KZ-Positionierung
|
||||
der lit-a-Tarif-Teile (laufend über LST_LFD) + §-291d-Zuordnung von
|
||||
`VERGLEICH`/`VERGLEICH_BV` (wie ABGANG ohne Pfändungs-Flag) gegen LStR
|
||||
Rz 1087 ff/§ 291d EO; Fünftel-Deckel-Pooling über ALLE Fünftel-Regeln
|
||||
(ABGANG + VERGLEICH im selben Lauf minimal konservativ);
|
||||
SV-Aufrollung aktiver Ansprüche nicht automatisiert; gesonderter
|
||||
Lohnzettel bei Zahlung nach dem Beendigungsmonat (LStR Rz 911a, GP7-Rest).
|
||||
- **Umgebung (wichtig für künftige Läufe):** nach dem Repo-Umzug war `.venv`
|
||||
tot (editable-Pfade ohne `odoo-projects`-Komponente, Shebangs auf alten
|
||||
python3.14-Pfad); repariert via sed über
|
||||
`__editable___odoo_19_0_e_20260910_finder.py`, `direct_url.json` und
|
||||
`.venv/bin/*`-Skripte. Aufruf `.venv/bin/python -m odoo` — im Baum fehlt
|
||||
`odoo/cli/main.py`, `-m odoo` geht über `__main__.py` → `cli.command`;
|
||||
setuptools fehlt im venv (pip install -e nicht möglich).
|
||||
- **Offen:** AP14-B (Prämien-Beendigung Feinschliff), AP16 Karenz-Reste
|
||||
(Gate 8.13). Nicht committen ohne Nutzeranforderung.
|
||||
|
||||
**AP15-B freiwillige Abfertigung (§ 67 Abs 6) umgesetzt — Kern 55/55, Privat 146/146 Tests grün**
|
||||
(2026-09-15, uncommittet bis Nutzerfreigabe; Privat **19.0.14.0.0**, Kern **19.0.10.0.0**):
|
||||
|
||||
- **Recht (RIS-Wortlaut § 67 Abs 6 verifiziert, lb-end-12/13/15):**
|
||||
Z 1 Viertelregelung (¼ der letzten-12-Monats-Bezüge, Deckel 9×HBG)
|
||||
+ Z 2 Zwölftelregelung (Staffel 3→2/12 … 25→12/12 = §-23-Grenzen,
|
||||
Deckel n × 3 × HBG), Z 3 Kürzung um erhaltene Abfertigungen (Abs 3
|
||||
ODER 6) und bestehenden gesetzlichen Anspruch am aktuellen Ende,
|
||||
Z 5 Sechstel-Exklusion nur für die 6 %-Beträge, Z 6 Überhang
|
||||
„wie ein laufender Bezug“ zum Zuflussmonat-Tarif, Z 7 (BV-Ausschluss)
|
||||
seit BGBl I 118/2015 AUFGEHOBEN. SV-frei § 49 Abs 3 Z 7, LNK-frei
|
||||
(§ 41 Abs 4 lit b FLAG, § 122 Abs 8 WKG, § 5 Abs 2 lit b KommStG)
|
||||
UNABHÄNGIG von 6 % vs Tarif, BV-frei (§ 6 Abs 5 BMSVG).
|
||||
- **Kern (19.0.10.0.0):** neuer Regel-Flag `l10n_at_s67_abs6_ueberhang`
|
||||
(lohnsteuer.py); `_l10n_at_brutto_laufen_ytd` zieht Flag-Regeln aus
|
||||
der Sechstel-Basis ab (Helfer `_l10n_at_abs6_ueberhang_total`, auch
|
||||
je YTD-Lauf) — der Überhang läuft über bemessung='laufend' in die
|
||||
laufende LSt-Bemessung und KZ 210, aber NICHT ins Sechstel;
|
||||
`LST_ABF_FREI` in KZ-260-Salden. Test test_20 + L16-Test erweitert.
|
||||
- **Privat:** Regeln `ABF_FREI` (seq 31, neutral/keine/abs6/
|
||||
pfandung_beendigung — begünstigter Teil), `ABF_FREI_TARIF` (seq 32,
|
||||
laufend/keine/abs6 + Überhang-Flag — Tarifrest), `LST_ABF_FREI`
|
||||
(seq 73, 6 %); Eingabe ATP_ABF_FREI; Helfer in endabrechnung.py:
|
||||
`_at_bezuege_12_monate` (validierte Vormonats-Läufe + eigene Zeilen,
|
||||
ohne Überhang-/§-26-Z-4-Regeln — neues privates Regel-Flag
|
||||
`l10n_at_s26_z4_reise` an REISE_STEUERPFLICHTIG), `_at_abf_frei_split`
|
||||
(Z 1/Z 2/Deckel aus at_sv_hbg_monatlich/Z-3-Kürzung),
|
||||
`_at_abf_frei_lst_6`. Wizard-Abschnitt mit auto 12-Monats-Basis +
|
||||
gesetzlicher Anspruch aus ABF_ALT, Vorschau Z 1/Z 2/Kürzung/
|
||||
begünstigt/Überhang/6 %/Netto, Bestätigungspflicht (Anspruchs-
|
||||
umwandlungs-Hinweis lb-end-15). Pfändungs-Beendigungstopf zieht
|
||||
LST_ABF + LST_ABF_FREI ab (test_09c). Konten: rule_abf_frei(_tarif)
|
||||
6200/6000 vorläufig, rule_lst_abf_frei 3540. RF-ABF-4…6 + offene
|
||||
Punkte in docs/rechenfaelle/endabrechnung.md.
|
||||
- **Tests:** endabrechnung 17 (Z 1/Z 2, Überhang ohne Sechstel mit
|
||||
SV/LNK/BV/LST_LFD-Asserts, Kürzung+Deckel, Wizard-E2E), pfändung 13,
|
||||
Kern-Suite 55/55, Privat-Suite 146/146 (ap13a_test); ein Testfehler
|
||||
(zweite `_input`-Eingabezeile statt Update) korrigiert.
|
||||
- **Verifikationsreste (dokumentiert, nicht geblockt):** KZ-Positionierung
|
||||
der Abs-6-Bezüge und §-291d-Zuordnung des Überhangs gegen LStR
|
||||
Rz 1087 ff; geminderte Bezüge in der 12-Monats-Basis (LStR vs VwGH)
|
||||
bewusst ohne Automatik.
|
||||
- **Offen:** AP15-C (§ 67 Abs 8 lit a Vergleichssummen). Nicht
|
||||
committen ohne Nutzeranforderung.
|
||||
|
||||
**AP15-A gesetzliche Abfertigung Alt umgesetzt — Privat 141/141, Kern 54/54 Tests grün**
|
||||
(2026-09-15, Commit **`9add58f`** nach Nutzerfreigabe):
|
||||
|
||||
- **Recht am Originalwortlaut verifiziert (.ris/):** § 23a Abs 3 AngG
|
||||
verlangt für den Elternaustritt ein **ununterbrochen fünfjähriges**
|
||||
DV (Hälfte des §-23-Betrags, Deckel 3 Monatsentgelte) — Vorschlag
|
||||
bei < 60 Monaten korrigiert (0-Faktor + Wizard-UserError). § 67
|
||||
Abs 3 EStG (RIS-Wortlaut): Tarif-LSt **auf den laufenden
|
||||
Arbeitslohn** × Mehrfaches, zwingend günstiger als 6 %. Neu:
|
||||
getrenntes, bestätigtes Feld `abf_alt_monatslohnsteuer`/
|
||||
`l10n_at_abf_alt_monatslohnsteuer` (Tarif-LSt des laufenden
|
||||
Monats nach persönlichen Verhältnissen) — Bruttolohn wird NICHT
|
||||
über die §-62-Engine tarifiert. Rechenfall lb-end-01 exakt:
|
||||
101,96 × 10,5 = 1.070,58 (< 1.134 = 6 %).
|
||||
- **Privat:** `models/endabrechnung.py` ABF_ALT-Helfer (Staffel,
|
||||
Mehrfach-Vorschlag eltern/tod, 6 %, Vervielfachung, günstige LSt),
|
||||
Regel `ABF_ALT` (neutral/keine/abs3/pfandung_beendigung),
|
||||
`LST_ABF` seq 72, `PFAENDUNG_END` seq 77 (Beendigungstopf −
|
||||
LST_ABF, Gesamttopf + beendigung), LNK-Fix in beiden Kopien
|
||||
(`_at_lnk_basis` zieht Abs-3/6-Regeln nur mit bemessung
|
||||
laufend/sonstig ab), Wizard-Felder + Validierungen (BMSVG-Neu-
|
||||
Sperre außer eingefroren, AGRD 02/06-Regeln, Eltern < 5 J),
|
||||
Payslip-Tab, Konten `rule_abf_alt` 6200/6000 (vorläufig),
|
||||
`rule_lst_abf` → 3540. `.get()`-Zugriffe auf `result_rules` in
|
||||
`models/pfaendung.py` durch Membership-Prüfung ersetzt.
|
||||
- **Kern:** LST_ABF in KZ-260-Salden (Lohnsteuer), außerhalb
|
||||
KZ 210/220 (test_01b). Kern-Hilfer `_l10n_at_monatslohnsteuer`
|
||||
des Subagenten wieder ENTFERNT (ungenutzt, semantisch
|
||||
irreführend) samt test_02b.
|
||||
- **Tests:** endabrechnung 13 (inkl. Arbeitnehmerkündigung-
|
||||
UserError, Eltern < 5 J, Wizard-E2E, Pfändungsbasis), pfändung
|
||||
12 (test_09b Beendigungstopf), Privat-Suite 141/141 (`ap13a_test`),
|
||||
Kern-Suite 54/54 (auf `ap13a_test` mit Privatmodul — **Achtung:
|
||||
L16-Tests referenzieren `l10n_at_hr_payroll_private.`
|
||||
`structure_at_privat`, Kern-Rein-DB scheitert an setUp, ist
|
||||
Bestandsverhalten**). Python/XML/`git diff --check` grün.
|
||||
- **Offen:** AP15-B (freiwillige Abfertigung § 67 Abs 6, 6 %-Bänder
|
||||
+ rollierende 12-Monats-Basis), AP15-C (§ 67 Abs 8 lit a
|
||||
Vergleichssummen). Wizard-Transient NOT-NULL-Warnung für
|
||||
`departure_reason_id` ist kosmetisch (Alt-Zeilen). Nicht
|
||||
committen ohne Nutzeranforderung.
|
||||
|
||||
**AP14-A Endabrechnungs-Zyklus umgesetzt — 133 Tests grün**
|
||||
(2026-09-14, Commit **`ee94f46`** nach Nutzerfreigabe):
|
||||
|
||||
- **Rechtskorrektur gegen Originalwortlaut (.ris/, RIS-Gate erledigt):**
|
||||
§ 67 Abs 6 (freiwillige Abfertigung/Abfindung) = 6 %-Bänder
|
||||
(Z 1 ¼ der letzten-12-Monate-Bezüge, Deckel 9×HBG; Z 2 Dienstzeit-
|
||||
bänder), NICHT Fünftel → nach AP15 verschoben. Fünftelregelung gilt
|
||||
§ 67 Abs 8 lit b (Kündigungs-/Abgangsentschädigung) — diese sind
|
||||
SV-PFLICHTIG (Umlegung auf Kündigungsfrist, § 11 Abs 2 ASVG) und
|
||||
LNK-PFLICHTIG (FLAG § 41 Abs 4 lit b nennt nur Abs 3 und 6).
|
||||
§ 11 Abs 2 ASVG verifiziert: PV-Verlängerung für UEL-Bezug UND
|
||||
Kündigungsentschädigung, bei beiden ZUERST Kündigungsentschädigung,
|
||||
dann UEL (sequentielle Fenster); 6-WT/5-AT-Tage-Umrechnung ist
|
||||
Verwaltungspraxis (lb-url-15), nicht Gesetzeswortlaut. § 67 Abs 8
|
||||
lit d (UEL-Zweikomponenten) wortwörtlich bestätigt. § 19e Abs 2
|
||||
AZG (+50 % auf NAZ-Guthaben) verifiziert.
|
||||
- **Umsetzung (Privat 19.0.12.0.0):** `models/endabrechnung.py` mit
|
||||
Regel-Flags `l10n_at_sv_verlaengerung` (urlaubsersatz/abgang) und
|
||||
`l10n_at_s67_fuenftel`; UEL-Helfer (Divisor 26/22, SZ-Tageswert
|
||||
2×SZ-Basis/12); Upstream-Replicas mit Pin-Kommentar für
|
||||
`_at_lnk_basis` (Abgang VOR der Freibetragsstaffel) und
|
||||
`_l10n_at_sv_basis_laufen_monate` (Verlängerungsanteile mit
|
||||
Tageswert-Deckel HBG×Tage/30, Standardanteile volle Monats-HBG);
|
||||
`_l10n_at_bemessung_laufen` += Fünftel-Tarifteil (4/5, Deckel
|
||||
12.474 = 9×HBG/5) ohne Sechstel-Effekt.
|
||||
- **Regeln:** URL_ERSATZ_LFD (laufend, verlaengerung=urlaubsersatz),
|
||||
URL_ERSATZ_SZ (sonstig), ABGANG (neutral, sv_art=laufend,
|
||||
verlaengerung=abgang, fuenftel), ZEIT_GUTHABEN (laufend ×1,5,
|
||||
KEIN §-68), ZEIT_SCHULDEN (negativ), END_ABRECHNUNG_VORSCHUSS
|
||||
(neutral/keine — Netto-Abzug § 293 Abs 3 EO). Eingaben
|
||||
ATP_UEL_TAGE/ABGANG/ABGANG_FFRIST_TAGE/ZEIT_GUTHABEN/ZEIT_SCHULDEN/
|
||||
ABRECHNUNG_VORSCHUSS; Parameter at_endabrechnung (Divisoren).
|
||||
- **Wizard** `l10n.at.payroll.endabrechnung.wizard` (ACL, Views,
|
||||
Menü seq 42): sammelt UEL-Tage/Abgang/Frist/Zeit/Vorschuss, Vorschau
|
||||
über flüchtigen new()-Payslip, Button legt Endabrechnungs-Lauf im
|
||||
Austrittsmonat mit vorbefüllten Eingaben an. Achtung: hr.version-
|
||||
Strukturfeld heißt `structure_id` (nicht struct_id).
|
||||
- **Fund beim Testlauf:** Eingabetypen-Datei fehlte zunächst in der
|
||||
Manifest-Datenliste → NOT-NULL input_type_id; zwei Testassertionen
|
||||
mussten SV-DN-Differenzen bzw. den KVGEO-Standardanteil im März
|
||||
berücksichtigen.
|
||||
- **Tests** test_endabrechnung_private.py (6): UEL-Zweikomponenten
|
||||
(1.320/220 €, Sechstel +5.280), SV-Tage-Schema (23→31, 12→14,
|
||||
6→21) + Monatsverteilung, Abgang-Fünftel (Sechstel unverändert,
|
||||
LNK +9.000, Umlegung 16/26 Tage), Vorschuss-Netto (Abgaben neutral),
|
||||
Zeitguthaben ±, Wizard E2E. Suite **133/133** in ap13a_test.
|
||||
- **Offen AP14-B/AP15:** Vergleich § 67 Abs 8 lit a + freiwillige
|
||||
Abfertigung § 67 Abs 6 (beides mit Abf-Alt-Günstiger-Maschine,
|
||||
rollierende 12-Monats-Basis), Prämien-Beendigungs-Rollung,
|
||||
Meldewesen-Schnittstellen („Ende des Entgeltanspruchs“ in mBGM,
|
||||
gesonderter Lohnzettel LStR Rz 911a).
|
||||
|
||||
**AP13-B Pendlerförderung umgesetzt — 127 Tests grün**
|
||||
(2026-09-14, uncommittet bis Nutzerfreigabe):
|
||||
(2026-09-14, Commit **`9ff977e`** nach Nutzerfreigabe):
|
||||
|
||||
- Neu `models/pendler.py`: Modell `l10n.at.payroll.pendler.erklaerung`
|
||||
(effektiv datiert, L-34-/Pendlerrechner-Nachweis als Attachment,
|
||||
@@ -39,7 +404,7 @@
|
||||
(Odoo 19: quantity/price_unit/total_amount) — Test-Helfer korrigiert.
|
||||
- Doku docs/rechenfaelle/pendler.md (RF-PEN-1…5 + offene Punkte: erhöhter
|
||||
VAB 853 €/Zuschlag 804 € als Quer-LSt-Rest, L-34-1-Monats-Meldeprozess).
|
||||
- Version **19.0.11.0.0**. Commit ausstehend (Nutzerfreigabe).
|
||||
- Version **19.0.11.0.0**.
|
||||
|
||||
**AP13-A Reisekosten Inland committed — 127-er Suite grün**
|
||||
(2026-09-14, Commit **`3f307a0`**):
|
||||
|
||||
@@ -10,6 +10,7 @@ seit 2026-09-09 — Überführung aus `gem360-git` per History-Import; siehe
|
||||
|---|---|
|
||||
| `l10n_at_hr_payroll` | **Bundes-Kern** (sektor-neutral): SV-Werte 2026 als `hr.rule.parameter`-Seed, TASY-Import-Wizard; folgen: Lohnsteuer (AP3), Meldewesen L16/eSV (AP5), Belege (AP6) |
|
||||
| `l10n_at_gemeinde_payroll` | **Bgld. GemBG 2014**: Katalogmodell (AP1), Entgelt-Engine (AP2); AP3+ gemäß `personalverrechnung/IMPLEMENTIERUNGSPLAN-Bgld.md` |
|
||||
| `l10n_at_payroll_dokumente` | **Dokumente aus Vorlagen**: Dokumentgenerierung (Dienstvertrag, Kündigung, Bescheinigungen …) aus hr-Stammdaten; eigene Texte, Struktur-Referenz (kb_ref) dokumentiert; Wizard mit Auto-/Manuellfeldern, Vorschau, PDF/HTML-Ablage |
|
||||
| `l10n_at_hr_payroll_private` | **General-AT** (KV-basierte Privatwirtschaft) — Gerüst; Implementierungsplan freigegeben ([`IMPLEMENTIERUNGSPLAN-Privat.md`](personalverrechnung/IMPLEMENTIERUNGSPLAN-Privat.md)), Umsetzung ab M1 (GP0) |
|
||||
|
||||
VRV-Buchung für Gemeinden (Anlage 3b, Ansatz/MVAG, EHH/FHH) läuft über
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Part of the odoo-at-payroll project. License: LGPL-3.
|
||||
{
|
||||
'name': 'Österreich - Personalverrechnung Kern (AT Payroll Core)',
|
||||
'version': '19.0.8.0.0',
|
||||
'version': '19.0.10.0.0',
|
||||
'author': 'Florian Egger',
|
||||
'website': 'https://gem360.at',
|
||||
'category': 'Human Resources/Payroll',
|
||||
|
||||
@@ -70,6 +70,15 @@ class HrSalaryRule(models.Model):
|
||||
'abgezogen; Grenzen als Jahres-Kumulative je Dienstnehmer '
|
||||
'(at_st_grenzen). Nur der übersteigende Teil ist '
|
||||
'steuerpflichtig. Menge = Arbeitstage (Z 17/Z 9).')
|
||||
l10n_at_s67_abs6_ueberhang = fields.Boolean(
|
||||
string='AT § 67 Abs 6 Z 6 — Überhang',
|
||||
help='Übersteigender Teil einer freiwilligen Abfertigung/Abfindung '
|
||||
'(§ 67 Abs 6 Z 6 EStG): wird wie ein laufender Bezug zum '
|
||||
'Tarif des Zuflussmonats versteuert, erhöht aber das '
|
||||
'Jahressechstel nicht — Abs 2 ist nur auf die mit 6 % '
|
||||
'versteuerten Z-1/Z-2-Beträge nicht anzuwendbar (Z 5), der '
|
||||
'Überhang ist ein sonstiger Bezug, kein laufender. LNK-frei '
|
||||
'über § 67 Abs 6 (lb-end-12), SV-frei über § 49 Abs 3 Z 7.')
|
||||
|
||||
|
||||
class HrVersion(models.Model):
|
||||
@@ -351,11 +360,32 @@ class HrPayslip(models.Model):
|
||||
|
||||
def _l10n_at_brutto_laufen_ytd(self, result_rules=None):
|
||||
"""Kumulierte laufende Bruttobezüge des Jahres (Sechstel-Basis
|
||||
ist Brutto, § 67 Abs 2 — inkl. Auszahlungsmonat-Laufendem)."""
|
||||
ist Brutto, § 67 Abs 2 — inkl. Auszahlungsmonat-Laufendem).
|
||||
Der §-67-Abs-6-Überhang (Flag) läuft tarifisch im Zuflussmonat,
|
||||
ist aber ein sonstiger Bezug und erhöht das Jahressechstel
|
||||
nicht."""
|
||||
self.ensure_one()
|
||||
total = self._l10n_at_brutto('laufend', result_rules)
|
||||
total = self._l10n_at_brutto('laufend', result_rules) \
|
||||
- self._l10n_at_abs6_ueberhang_total(result_rules)
|
||||
for slip in self._l10n_at_ytd_slaeufe():
|
||||
total += slip._l10n_at_brutto('laufend')
|
||||
total += slip._l10n_at_brutto('laufend') \
|
||||
- slip._l10n_at_abs6_ueberhang_total()
|
||||
return total
|
||||
|
||||
def _l10n_at_abs6_ueberhang_total(self, result_rules=None):
|
||||
"""Summe der als §-67-Abs-6-Z-6-Überhang gekennzeichneten
|
||||
Regel-Zeilen (tarifisch im Zuflussmonat, ohne Sechstel-Effekt)."""
|
||||
self.ensure_one()
|
||||
total = 0.0
|
||||
for rule in self.struct_id.rule_ids:
|
||||
if not rule.l10n_at_s67_abs6_ueberhang:
|
||||
continue
|
||||
if result_rules is not None:
|
||||
if rule.code in result_rules:
|
||||
total += result_rules[rule.code]['total']
|
||||
else:
|
||||
total += sum(self.line_ids.filtered(
|
||||
lambda l, c=rule.code: l.code == c).mapped('total'))
|
||||
return total
|
||||
|
||||
def _l10n_at_sechstel(self, result_rules=None):
|
||||
@@ -400,6 +430,7 @@ class HrPayslip(models.Model):
|
||||
# ------------------------------------------------------------------
|
||||
# § 66 Monatslohnsteuer — kumulativ mit Rollung
|
||||
# ------------------------------------------------------------------
|
||||
|
||||
def _l10n_at_lst_laufend(self, result_rules=None):
|
||||
"""LSt auf laufende Bezüge (§ 66): kumulative Hochrechnung
|
||||
(360-Tage-Jahr) minus bereits einbehaltene LSt — Vormonats-
|
||||
|
||||
@@ -390,7 +390,7 @@ class L10nAtPayrollL16Line(models.Model):
|
||||
GP3-Kerns (Monats-Caps 400/600 und ÜStd 15/170 eingerechnet);
|
||||
220 = sonstige § 67 Abs 1/2/5 ohne Abs-3/6; 225 = SV-DN auf
|
||||
KZ 220; 230 = laufende SV-DN + AK + WF; VIEB = 230 + 225 +
|
||||
226; 260/BIEL = LST_LFD + LST_SZ."""
|
||||
226; 260/BIEL = LST_LFD + LST_SZ + LST_ABF + LST_ABF_FREI."""
|
||||
self.ensure_one()
|
||||
salden = dict.fromkeys(
|
||||
('kz210', 'kz215', 'kz220', 'kz225', 'kz226', 'kz230',
|
||||
@@ -411,7 +411,8 @@ class L10nAtPayrollL16Line(models.Model):
|
||||
elif line.code in ('SVDN_KV', 'SVDN_PV', 'SVDN_AV',
|
||||
'SVDN_AK', 'SVDN_WF'):
|
||||
salden['kz230'] += line.total
|
||||
elif line.code in ('LST_LFD', 'LST_SZ'):
|
||||
elif line.code in ('LST_LFD', 'LST_SZ', 'LST_ABF',
|
||||
'LST_ABF_FREI'):
|
||||
salden['lohnsteuer'] += line.total
|
||||
freibe = slip._l10n_at_freibetraege_68()
|
||||
salden['kz215'] += freibe['szfn'] + freibe['ue_std']
|
||||
|
||||
@@ -5,6 +5,7 @@ Satz-Assertions, CRLF/ISO-8859-15-Encoding, SANR/SANZ-Kette,
|
||||
KZ-245-Formel-Konsistenz aus GP3-Daten."""
|
||||
import base64
|
||||
import datetime
|
||||
import types
|
||||
|
||||
from odoo.tests import TransactionCase, tagged
|
||||
|
||||
@@ -213,6 +214,40 @@ class L16GeneratorTest(TransactionCase):
|
||||
self.assertEqual(schluss[0:2], '99')
|
||||
self.assertEqual(schluss[20:26], '000004') # SANZ
|
||||
|
||||
def test_01b_abfertigung_lohnsteuer_salden(self):
|
||||
"""Abs.-3-Bezug bleibt außerhalb KZ 210/220; LST_ABF zählt zu 260."""
|
||||
deklaration = self.env['l10n.at.payroll.l16'].create({
|
||||
'company_id': self.company.id,
|
||||
'jahr': 2026,
|
||||
'art': '01',
|
||||
})
|
||||
l16_line = self.env['l10n.at.payroll.l16.line'].create({
|
||||
'l16_id': deklaration.id,
|
||||
'employee_id': self.employee.id,
|
||||
})
|
||||
abs3_rule = types.SimpleNamespace(
|
||||
l10n_at_bemessung='sonstig', l10n_at_s67_abs='abs3')
|
||||
lst_rule = types.SimpleNamespace(
|
||||
l10n_at_bemessung='neutral', l10n_at_s67_abs='keine')
|
||||
slip = types.SimpleNamespace(
|
||||
line_ids=[
|
||||
types.SimpleNamespace(
|
||||
salary_rule_id=abs3_rule, code='ABF_ALT', total=12000.0),
|
||||
types.SimpleNamespace(
|
||||
salary_rule_id=lst_rule, code='LST_ABF', total=720.0),
|
||||
types.SimpleNamespace(
|
||||
salary_rule_id=lst_rule, code='LST_ABF_FREI',
|
||||
total=300.0),
|
||||
],
|
||||
_l10n_at_freibetraege_68=lambda: {'szfn': 0.0, 'ue_std': 0.0},
|
||||
)
|
||||
|
||||
salden = l16_line._kz_salden([slip])
|
||||
|
||||
self.assertEqual(salden['kz210'], 0.0)
|
||||
self.assertEqual(salden['kz220'], 0.0)
|
||||
self.assertEqual(salden['lohnsteuer'], 1020.0)
|
||||
|
||||
def test_02_arbeitsstaette(self):
|
||||
"""§ 34 Abs 6 ASVG: je AN ein Satz 45 (Länge 300) mit BKNR,
|
||||
VSNR, STNR und GKZ aus dem Dienstort-Partner; Warnung, wenn
|
||||
|
||||
@@ -108,6 +108,7 @@ class LohnsteuerTest(TransactionCase):
|
||||
slip._l10n_at_absetzbetraege(20000.0),
|
||||
496.0 + 828.0 + 273.0, places=2)
|
||||
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# Lohnsteuertage (user decision: 30 je vollem Monat)
|
||||
# ------------------------------------------------------------------
|
||||
@@ -124,6 +125,27 @@ class LohnsteuerTest(TransactionCase):
|
||||
'contract_date_end': date(2026, 1, 10)})
|
||||
self.assertEqual(slip._l10n_at_lohnsteuertage(), 10)
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# § 67 Abs 6 Z 6 — Überhang (tarifisch, ohne Sechstel-Effekt)
|
||||
# ------------------------------------------------------------------
|
||||
def test_20_abs6_ueberhang_ohne_sechstel(self):
|
||||
"""Der gekennzeichnete Überhang läuft tarifisch in der laufenden
|
||||
Bemessung, erhöht aber das Jahressechstel nicht."""
|
||||
employee = self._employee()
|
||||
slip_ohne = self._slip(employee, 1)
|
||||
regel = self._regel('T_ABS6_UEB', 1000.0, sv_art='keine')
|
||||
regel.l10n_at_s67_abs6_ueberhang = True
|
||||
slip_mit = self._slip(employee, 2)
|
||||
|
||||
self.assertAlmostEqual(
|
||||
slip_mit._l10n_at_abs6_ueberhang_total(), 1000.0, places=2)
|
||||
self.assertAlmostEqual(
|
||||
slip_mit._l10n_at_bemessung_laufen()
|
||||
- slip_ohne._l10n_at_bemessung_laufen(), 1000.0, places=2)
|
||||
self.assertAlmostEqual(
|
||||
slip_mit._l10n_at_sechstel() - slip_ohne._l10n_at_sechstel(),
|
||||
0.0, places=2)
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# § 68 Freibeträge (Buckets über Regel-Flags)
|
||||
# ------------------------------------------------------------------
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# Part of the odoo-at-payroll project. License: LGPL-3.
|
||||
{
|
||||
'name': 'Österreich - Privatwirtschaft Personalverrechnung (General-AT)',
|
||||
'version': '19.0.11.0.0',
|
||||
'version': '19.0.17.0.0',
|
||||
'author': 'Florian Egger',
|
||||
'website': 'https://gem360.at',
|
||||
'category': 'Human Resources/Payroll',
|
||||
@@ -104,18 +104,20 @@ gem360-Brücke).
|
||||
'data/work_entry_types_private.xml',
|
||||
'data/absence_private.xml',
|
||||
'data/input_types_private.xml',
|
||||
'data/input_types_endabrechnung_private.xml',
|
||||
'data/salary_rules_private.xml',
|
||||
'data/salary_rules_lst_private.xml',
|
||||
'data/salary_rules_efzg_private.xml',
|
||||
'data/salary_rules_msch_private.xml',
|
||||
'data/salary_rules_karenz_private.xml',
|
||||
|
||||
'data/salary_rules_pfaendung_private.xml',
|
||||
'data/salary_rules_sb_private.xml',
|
||||
'data/salary_rules_sb2_private.xml',
|
||||
'data/salary_rules_reisekosten_private.xml',
|
||||
'data/salary_rules_endabrechnung_private.xml',
|
||||
'data/salary_rules_sv_private.xml',
|
||||
'data/salary_rules_bvg_private.xml',
|
||||
'data/salary_rules_bvg_private.xml',
|
||||
'data/hr_payroll_account_private.xml',
|
||||
'data/rule_parameters_mbgm_private.xml',
|
||||
'data/rule_parameters_wien_private.xml',
|
||||
@@ -126,6 +128,7 @@ gem360-Brücke).
|
||||
'data/rule_parameters_sb2_private.xml',
|
||||
'data/rule_parameters_reisekosten_private.xml',
|
||||
'data/rule_parameters_pendler_private.xml',
|
||||
'data/rule_parameters_endabrechnung_private.xml',
|
||||
'data/bv_kasse_seed.xml',
|
||||
'views/kv_views.xml',
|
||||
'views/bv_views.xml',
|
||||
@@ -137,6 +140,7 @@ gem360-Brücke).
|
||||
'views/sachbezuege_views.xml',
|
||||
'views/reisekosten_views.xml',
|
||||
'views/pendler_views.xml',
|
||||
'views/endabrechnung_views.xml',
|
||||
'report/gp8_reports.xml',
|
||||
'report/buchungsbeleg_report.xml',
|
||||
'report/bv_report.xml',
|
||||
|
||||
@@ -113,4 +113,117 @@
|
||||
<field name="work_entry_type_id"
|
||||
ref="l10n_at_hr_payroll_private.wett_atp_karenz"/>
|
||||
</record>
|
||||
|
||||
<!-- AP16 (8.13): unbezahlte Karenz-Arten — alle entgeltlos
|
||||
(Entgelt-Stopp über KARENZ_ENTGELT), je Art eigene eSV-Events;
|
||||
Dienstzeit: Papamonat anrechnen (§ 1a Abs 7 VKG), Bildungs-/
|
||||
Pflegekarenz nicht (§ 11 Abs 2, § 14c/14d AVRAG). -->
|
||||
<record id="wett_atp_bildungskarenz" model="hr.work.entry.type">
|
||||
<field name="name">Bildungskarenz (§ 11 AVRAG)</field>
|
||||
<field name="color">4</field>
|
||||
<field name="display_code">BLK</field>
|
||||
<field name="code">ATP_BILDUNGSKARENZ</field>
|
||||
<field name="country_id" ref="base.at"/>
|
||||
<field name="is_leave" eval="True"/>
|
||||
</record>
|
||||
<record id="wett_atp_hospizkarenz" model="hr.work.entry.type">
|
||||
<field name="name">Familienhospizkarenz — Sterbebegleitung (§ 14a AVRAG)</field>
|
||||
<field name="color">5</field>
|
||||
<field name="display_code">HSP</field>
|
||||
<field name="code">ATP_HOSPIZKARENZ</field>
|
||||
<field name="country_id" ref="base.at"/>
|
||||
<field name="is_leave" eval="True"/>
|
||||
</record>
|
||||
<record id="wett_atp_kinderkrank" model="hr.work.entry.type">
|
||||
<field name="name">Begleitung schwerst erkrankter Kinder (§ 14b AVRAG)</field>
|
||||
<field name="color">7</field>
|
||||
<field name="display_code">KKB</field>
|
||||
<field name="code">ATP_KINDERKRANK</field>
|
||||
<field name="country_id" ref="base.at"/>
|
||||
<field name="is_leave" eval="True"/>
|
||||
</record>
|
||||
<record id="wett_atp_kinderrehab" model="hr.work.entry.type">
|
||||
<field name="name">Freistellung Kinderrehabilitation (§ 14e AVRAG)</field>
|
||||
<field name="color">10</field>
|
||||
<field name="display_code">KRE</field>
|
||||
<field name="code">ATP_KINDERREHAB</field>
|
||||
<field name="country_id" ref="base.at"/>
|
||||
<field name="is_leave" eval="True"/>
|
||||
</record>
|
||||
<record id="wett_atp_pflegekarenz" model="hr.work.entry.type">
|
||||
<field name="name">Pflegekarenz (§ 14c AVRAG)</field>
|
||||
<field name="color">1</field>
|
||||
<field name="display_code">PFG</field>
|
||||
<field name="code">ATP_PFLEGEKARENZ</field>
|
||||
<field name="country_id" ref="base.at"/>
|
||||
<field name="is_leave" eval="True"/>
|
||||
</record>
|
||||
<record id="wett_atp_papamonat" model="hr.work.entry.type">
|
||||
<field name="name">Papa-Monat (§ 1a VKG)</field>
|
||||
<field name="color">0</field>
|
||||
<field name="display_code">PAP</field>
|
||||
<field name="code">ATP_PAPAMONAT</field>
|
||||
<field name="country_id" ref="base.at"/>
|
||||
<field name="is_leave" eval="True"/>
|
||||
</record>
|
||||
<record id="leave_type_at_bildungskarenz" model="hr.leave.type">
|
||||
<field name="name">Bildungskarenz (§ 11 AVRAG)</field>
|
||||
<field name="requires_allocation" eval="False"/>
|
||||
<field name="leave_validation_type">hr</field>
|
||||
<field name="request_unit">day</field>
|
||||
<field name="company_id" eval="False"/>
|
||||
<field name="country_id" ref="base.at"/>
|
||||
<field name="work_entry_type_id"
|
||||
ref="l10n_at_hr_payroll_private.wett_atp_bildungskarenz"/>
|
||||
</record>
|
||||
<record id="leave_type_at_hospizkarenz" model="hr.leave.type">
|
||||
<field name="name">Familienhospizkarenz — Sterbebegleitung</field>
|
||||
<field name="requires_allocation" eval="False"/>
|
||||
<field name="leave_validation_type">hr</field>
|
||||
<field name="request_unit">day</field>
|
||||
<field name="company_id" eval="False"/>
|
||||
<field name="country_id" ref="base.at"/>
|
||||
<field name="work_entry_type_id"
|
||||
ref="l10n_at_hr_payroll_private.wett_atp_hospizkarenz"/>
|
||||
</record>
|
||||
<record id="leave_type_at_kinderkrank" model="hr.leave.type">
|
||||
<field name="name">Begleitung schwerst erkrankter Kinder</field>
|
||||
<field name="requires_allocation" eval="False"/>
|
||||
<field name="leave_validation_type">hr</field>
|
||||
<field name="request_unit">day</field>
|
||||
<field name="company_id" eval="False"/>
|
||||
<field name="country_id" ref="base.at"/>
|
||||
<field name="work_entry_type_id"
|
||||
ref="l10n_at_hr_payroll_private.wett_atp_kinderkrank"/>
|
||||
</record>
|
||||
<record id="leave_type_at_kinderrehab" model="hr.leave.type">
|
||||
<field name="name">Freistellung Kinderrehabilitation</field>
|
||||
<field name="requires_allocation" eval="False"/>
|
||||
<field name="leave_validation_type">hr</field>
|
||||
<field name="request_unit">day</field>
|
||||
<field name="company_id" eval="False"/>
|
||||
<field name="country_id" ref="base.at"/>
|
||||
<field name="work_entry_type_id"
|
||||
ref="l10n_at_hr_payroll_private.wett_atp_kinderrehab"/>
|
||||
</record>
|
||||
<record id="leave_type_at_pflegekarenz" model="hr.leave.type">
|
||||
<field name="name">Pflegekarenz (§ 14c AVRAG)</field>
|
||||
<field name="requires_allocation" eval="False"/>
|
||||
<field name="leave_validation_type">hr</field>
|
||||
<field name="request_unit">day</field>
|
||||
<field name="company_id" eval="False"/>
|
||||
<field name="country_id" ref="base.at"/>
|
||||
<field name="work_entry_type_id"
|
||||
ref="l10n_at_hr_payroll_private.wett_atp_pflegekarenz"/>
|
||||
</record>
|
||||
<record id="leave_type_at_papamonat" model="hr.leave.type">
|
||||
<field name="name">Papa-Monat (§ 1a VKG)</field>
|
||||
<field name="requires_allocation" eval="False"/>
|
||||
<field name="leave_validation_type">hr</field>
|
||||
<field name="request_unit">day</field>
|
||||
<field name="company_id" eval="False"/>
|
||||
<field name="country_id" ref="base.at"/>
|
||||
<field name="work_entry_type_id"
|
||||
ref="l10n_at_hr_payroll_private.wett_atp_papamonat"/>
|
||||
</record>
|
||||
</odoo>
|
||||
@@ -0,0 +1,58 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<!-- AP14-A: Endabrechnungs-Eingaben. Mengen-Eingaben (Tage/Stunden)
|
||||
tragen die Menge im amount-Feld (Muster ATP_SB_MAHLZEIT); die
|
||||
Regeln leiten daraus die Beträge ab. -->
|
||||
<record id="input_type_atp_uel_tage" model="hr.payslip.input.type">
|
||||
<field name="name">Urlaubsersatzleistung — offene Urlaubstage</field>
|
||||
<field name="code">ATP_UEL_TAGE</field>
|
||||
<field name="is_quantity" eval="True"/>
|
||||
</record>
|
||||
<record id="input_type_atp_abgang" model="hr.payslip.input.type">
|
||||
<field name="name">Abgangsentschädigung (Brutto)</field>
|
||||
<field name="code">ATP_ABGANG</field>
|
||||
</record>
|
||||
<record id="input_type_atp_abgang_ffrist_tage" model="hr.payslip.input.type">
|
||||
<field name="name">Abgangsentschädigung — Kündigungsfrist (Kalendertage)</field>
|
||||
<field name="code">ATP_ABGANG_FFRIST_TAGE</field>
|
||||
<field name="is_quantity" eval="True"/>
|
||||
</record>
|
||||
<record id="input_type_atp_zeit_guthaben" model="hr.payslip.input.type">
|
||||
<field name="name">Zeitguthaben Normalarbeitszeit (Stunden)</field>
|
||||
<field name="code">ATP_ZEIT_GUTHABEN</field>
|
||||
<field name="is_quantity" eval="True"/>
|
||||
</record>
|
||||
<record id="input_type_atp_zeit_schulden" model="hr.payslip.input.type">
|
||||
<field name="name">Zeitschulden (Stunden)</field>
|
||||
<field name="code">ATP_ZEIT_SCHULDEN</field>
|
||||
<field name="is_quantity" eval="True"/>
|
||||
</record>
|
||||
<record id="input_type_atp_abrechnung_vorschuss" model="hr.payslip.input.type">
|
||||
<field name="name">Aufrechnung offener Vorschuss (Netto)</field>
|
||||
<field name="code">ATP_ABRECHNUNG_VORSCHUSS</field>
|
||||
</record>
|
||||
<record id="input_type_atp_abf_alt" model="hr.payslip.input.type">
|
||||
<field name="name">Gesetzliche Abfertigung Alt (Brutto)</field>
|
||||
<field name="code">ATP_ABF_ALT</field>
|
||||
</record>
|
||||
<record id="input_type_atp_abf_frei" model="hr.payslip.input.type">
|
||||
<field name="name">Freiwillige Abfertigung (Brutto)</field>
|
||||
<field name="code">ATP_ABF_FREI</field>
|
||||
</record>
|
||||
<record id="input_type_atp_vergleich" model="hr.payslip.input.type">
|
||||
<field name="name">Vergleichssumme — Rest (Brutto, Fünftelregelung)</field>
|
||||
<field name="code">ATP_VERGLEICH</field>
|
||||
</record>
|
||||
<record id="input_type_atp_vergleich_bv" model="hr.payslip.input.type">
|
||||
<field name="name">Vergleichssumme — BV-Anwartschafts-Teil (Brutto)</field>
|
||||
<field name="code">ATP_VERGLEICH_BV</field>
|
||||
</record>
|
||||
<record id="input_type_atp_pram_end" model="hr.payslip.input.type">
|
||||
<field name="name">Aliquote Prämie bei Beendigung (Brutto, § 16 AngG)</field>
|
||||
<field name="code">ATP_PRAM_END</field>
|
||||
</record>
|
||||
<record id="input_type_atp_pram_end_tarif" model="hr.payslip.input.type">
|
||||
<field name="name">Später fällige anteilige Prämie (Brutto, § 67 Abs 10)</field>
|
||||
<field name="code">ATP_PRAM_END_TARIF</field>
|
||||
</record>
|
||||
</odoo>
|
||||
@@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<!-- AP14-A: Endabrechnungs-Parameter (lb-url-16 Tagewert-Divisoren;
|
||||
§-10-Aliquotierung läuft über die Urlaubstage-Eingabe, der
|
||||
Fünftel-Deckel dynamisch aus 9 × at_sv_hbg_monatlich / 5). -->
|
||||
<record id="hr_rule_parameter_at_endabrechnung" model="hr.rule.parameter">
|
||||
<field name="name">Endabrechnung — UEL-Tagewert-Divisoren</field>
|
||||
<field name="code">at_endabrechnung</field>
|
||||
<field name="country_id" ref="base.at"/>
|
||||
</record>
|
||||
<record id="hr_rule_parameter_value_at_endabrechnung"
|
||||
model="hr.rule.parameter.value">
|
||||
<field name="rule_parameter_id" ref="hr_rule_parameter_at_endabrechnung"/>
|
||||
<field name="date_from">2026-01-01</field>
|
||||
<field name="parameter_value">{'divisor_werktage': 26.0, 'divisor_arbeitstage': 22.0, 'abfertigung_alt_staffel': [[36, 2.0], [60, 3.0], [120, 4.0], [180, 6.0], [240, 9.0], [300, 12.0]], 'abfertigung_steuersatz': 6.0}</field>
|
||||
</record>
|
||||
<!-- AP15-C: §-67-Abs-8-lit-a-BV-Deckel; § 67 Abs 8 unterliegt der
|
||||
Inflationsanpassung (§ 33a/§ 124b EStG), daher Parameter. -->
|
||||
<record id="hr_rule_parameter_at_lst_67_abs8_vergleich_bv" model="hr.rule.parameter">
|
||||
<field name="name">§ 67 Abs 8 lit a — Vergleich BV-Anwartschafts-Teil Deckel</field>
|
||||
<field name="code">at_lst_67_abs8_vergleich_bv</field>
|
||||
<field name="country_id" ref="base.at"/>
|
||||
</record>
|
||||
<record id="hr_rule_parameter_value_at_lst_67_abs8_vergleich_bv" model="hr.rule.parameter.value">
|
||||
<field name="rule_parameter_id" ref="hr_rule_parameter_at_lst_67_abs8_vergleich_bv"/>
|
||||
<field name="date_from">2026-01-01</field>
|
||||
<field name="parameter_value">7500.0</field>
|
||||
</record>
|
||||
</odoo>
|
||||
@@ -0,0 +1,280 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<!-- ============================================================ -->
|
||||
<!-- AP14-A: Endabrechnungs-Regeln. -->
|
||||
<!-- UEL: § 67 Abs 8 lit d — laufender Anteil als laufender -->
|
||||
<!-- Bezug (Tarif + Sechstel nativ), SZ-Anteil als sonstiger Bezug -->
|
||||
<!-- (6 %-Band, Freibetrag/Freigrenze im Kern). SV: nur der -->
|
||||
<!-- laufende Anteil verlängert die Pflichtversicherung (§ 11 -->
|
||||
<!-- Abs 2 ASVG, Tage-Umrechnung lb-url-15). -->
|
||||
<!-- Abgang: § 67 Abs 8 lit b — neutral (kein Sechstel), LSt über -->
|
||||
<!-- Fünftel-Override; SV-pflichtig mit Umlegung auf die -->
|
||||
<!-- Kündigungsfrist; LNK-pflichtig (FLAG § 41 Abs 4 nennt nur -->
|
||||
<!-- § 67 Abs 3 und 6). -->
|
||||
<!-- Vergleich: § 67 Abs 8 lit a (AP15-C) — Rest über Fünftel- -->
|
||||
<!-- Override, BV-Anwartschafts-Teil bis 7.500 € mit 6 %; beide -->
|
||||
<!-- SV-pflichtig (Zuflussmonat; Aufrollung je Beitragsmonat bzw. -->
|
||||
<!-- PV-Verlängerung siehe lb-end-22) und LNK-pflichtig. -->
|
||||
<!-- Prämie: § 16 AngG-Aliquot bei Beendigung (AP14-B, lb-end-18) — -->
|
||||
<!-- mit Endabrechnung sonstiger Bezug (Sechstel, SZ-SV); später -->
|
||||
<!-- fällig über § 67 Abs 10 (tarifisch im Zuflussmonat ohne -->
|
||||
<!-- Sechstel, Kern-Flag) mit Rollung des SV-Beitragsmonats ins -->
|
||||
<!-- Austrittsjahr (Wizard-Write auf die Linie; mBGM-Storno GP7). -->
|
||||
<!-- ============================================================ -->
|
||||
|
||||
<!-- Urlaubsersatzleistung — laufender Anteil (§ 67 Abs 8 lit d). -->
|
||||
<record id="rule_url_ersatz_lfd" model="hr.salary.rule">
|
||||
<field name="name">Urlaubsersatzleistung — laufender Anteil (§ 67 Abs 8 lit d)</field>
|
||||
<field name="code">URL_ERSATZ_LFD</field>
|
||||
<field name="sequence" eval="25"/>
|
||||
<field name="category_id" ref="l10n_at_hr_payroll_private.category_atp_brutto"/>
|
||||
<field name="struct_id" ref="l10n_at_hr_payroll_private.structure_at_privat"/>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = 'ATP_UEL_TAGE' in inputs and inputs['ATP_UEL_TAGE'].amount</field>
|
||||
<field name="l10n_at_bemessung">laufend</field>
|
||||
<field name="l10n_at_sv_verlaengerung">urlaubsersatz</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
# § 10 UrlG (lb-url-16): Tageswert = Monatsentgelt / Divisor
|
||||
# (26 Werktage / 22 Arbeitstage); keine Rundung auf ganze Tage.
|
||||
result = payslip._at_kv_gehalt_basis() / payslip._at_uel_divisor()
|
||||
result_qty = inputs['ATP_UEL_TAGE'].amount
|
||||
]]></field>
|
||||
</record>
|
||||
|
||||
<!-- Urlaubsersatzleistung — Sonderzahlungsanteil (§ 67 Abs 8 lit d). -->
|
||||
<record id="rule_url_ersatz_sz" model="hr.salary.rule">
|
||||
<field name="name">Urlaubsersatzleistung — Sonderzahlungsanteil (§ 67 Abs 8 lit d)</field>
|
||||
<field name="code">URL_ERSATZ_SZ</field>
|
||||
<field name="sequence" eval="26"/>
|
||||
<field name="category_id" ref="l10n_at_hr_payroll_private.category_atp_brutto"/>
|
||||
<field name="struct_id" ref="l10n_at_hr_payroll_private.structure_at_privat"/>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = 'ATP_UEL_TAGE' in inputs and inputs['ATP_UEL_TAGE'].amount</field>
|
||||
<field name="l10n_at_bemessung">sonstig</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
# SZ-Anteil der Urlaubsentgelt-Basis (lb-url-16): 2 Sonderzahlungen
|
||||
# à Monatsentgelt pro Jahr → je Monat 2 × SZ-Basis/12, als Tageswert
|
||||
# (auch bei bereits überaliquot bezahlten SZ).
|
||||
result = payslip._at_uel_sz_tageswert()
|
||||
result_qty = inputs['ATP_UEL_TAGE'].amount
|
||||
]]></field>
|
||||
</record>
|
||||
|
||||
<!-- Abgangsentschädigung (§ 67 Abs 8 lit b — Kündigungsentschädigung). -->
|
||||
<record id="rule_abgang" model="hr.salary.rule">
|
||||
<field name="name">Abgangsentschädigung (§ 67 Abs 8 lit b)</field>
|
||||
<field name="code">ABGANG</field>
|
||||
<field name="sequence" eval="29"/>
|
||||
<field name="category_id" ref="l10n_at_hr_payroll_private.category_atp_brutto"/>
|
||||
<field name="struct_id" ref="l10n_at_hr_payroll_private.structure_at_privat"/>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = 'ATP_ABGANG' in inputs and inputs['ATP_ABGANG'].amount</field>
|
||||
<field name="l10n_at_bemessung">neutral</field>
|
||||
<field name="l10n_at_sv_art">laufend</field>
|
||||
<field name="l10n_at_s67_fuenftel" eval="True"/>
|
||||
<field name="l10n_at_sv_verlaengerung">abgang</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
result = inputs['ATP_ABGANG'].amount
|
||||
]]></field>
|
||||
</record>
|
||||
|
||||
<!-- Gesetzliche Abfertigung Alt (§§ 23/23a AngG, § 67 Abs 3 EStG). -->
|
||||
<record id="rule_abf_alt" model="hr.salary.rule">
|
||||
<field name="name">Gesetzliche Abfertigung Alt (§ 67 Abs 3)</field>
|
||||
<field name="code">ABF_ALT</field>
|
||||
<field name="sequence" eval="30"/>
|
||||
<field name="category_id" ref="l10n_at_hr_payroll_private.category_atp_brutto"/>
|
||||
<field name="struct_id" ref="l10n_at_hr_payroll_private.structure_at_privat"/>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = 'ATP_ABF_ALT' in inputs and inputs['ATP_ABF_ALT'].amount</field>
|
||||
<field name="l10n_at_bemessung">neutral</field>
|
||||
<field name="l10n_at_sv_art">keine</field>
|
||||
<field name="l10n_at_s67_abs">abs3</field>
|
||||
<field name="l10n_at_pfandung_beendigung" eval="True"/>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
result = inputs['ATP_ABF_ALT'].amount
|
||||
]]></field>
|
||||
</record>
|
||||
|
||||
<!-- Freiwillige Abfertigung (§ 67 Abs 6 EStG): begünstigter Teil
|
||||
(Viertel-/Zwölftelregelung mit 6 %) und tarifischer Überhang
|
||||
(Z 6) als getrennte Zeilen. -->
|
||||
<record id="rule_abf_frei" model="hr.salary.rule">
|
||||
<field name="name">Freiwillige Abfertigung — begünstigter Teil (§ 67 Abs 6)</field>
|
||||
<field name="code">ABF_FREI</field>
|
||||
<field name="sequence" eval="31"/>
|
||||
<field name="category_id" ref="l10n_at_hr_payroll_private.category_atp_brutto"/>
|
||||
<field name="struct_id" ref="l10n_at_hr_payroll_private.structure_at_privat"/>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = 'ATP_ABF_FREI' in inputs and inputs['ATP_ABF_FREI'].amount</field>
|
||||
<field name="l10n_at_bemessung">neutral</field>
|
||||
<field name="l10n_at_sv_art">keine</field>
|
||||
<field name="l10n_at_s67_abs">abs6</field>
|
||||
<field name="l10n_at_pfandung_beendigung" eval="True"/>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
result = payslip._at_abf_frei_beguenstigt(result_rules)
|
||||
]]></field>
|
||||
</record>
|
||||
|
||||
<record id="rule_abf_frei_tarif" model="hr.salary.rule">
|
||||
<field name="name">Freiwillige Abfertigung — Überhang (§ 67 Abs 6 Z 6)</field>
|
||||
<field name="code">ABF_FREI_TARIF</field>
|
||||
<field name="sequence" eval="32"/>
|
||||
<field name="category_id" ref="l10n_at_hr_payroll_private.category_atp_brutto"/>
|
||||
<field name="struct_id" ref="l10n_at_hr_payroll_private.structure_at_privat"/>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = payslip._at_abf_frei_ueberhang(result_rules) > 0</field>
|
||||
<field name="l10n_at_bemessung">laufend</field>
|
||||
<field name="l10n_at_sv_art">keine</field>
|
||||
<field name="l10n_at_s67_abs">abs6</field>
|
||||
<field name="l10n_at_s67_abs6_ueberhang" eval="True"/>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
result = payslip._at_abf_frei_ueberhang(result_rules)
|
||||
]]></field>
|
||||
</record>
|
||||
|
||||
<!-- Vergleichssumme — Rest (§ 67 Abs 8 lit a, Fünftelregelung). -->
|
||||
<record id="rule_vergleich" model="hr.salary.rule">
|
||||
<field name="name">Vergleichssumme — Rest (§ 67 Abs 8 lit a)</field>
|
||||
<field name="code">VERGLEICH</field>
|
||||
<field name="sequence" eval="33"/>
|
||||
<field name="category_id" ref="l10n_at_hr_payroll_private.category_atp_brutto"/>
|
||||
<field name="struct_id" ref="l10n_at_hr_payroll_private.structure_at_privat"/>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = 'ATP_VERGLEICH' in inputs and inputs['ATP_VERGLEICH'].amount</field>
|
||||
<field name="l10n_at_bemessung">neutral</field>
|
||||
<field name="l10n_at_sv_art">laufend</field>
|
||||
<field name="l10n_at_s67_fuenftel" eval="True"/>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
result = inputs['ATP_VERGLEICH'].amount
|
||||
]]></field>
|
||||
</record>
|
||||
|
||||
<!-- Vergleichssumme — BV-Anwartschafts-Teil (§ 67 Abs 8 lit a
|
||||
letzter Satz): bis 7.500 € mit 6 % (LST_VERGLEICH_BV), Überhang
|
||||
fällt in die Fünftelregelung zurück. Erkennbare Abfertigungs-
|
||||
anteile werden getrennt als ABF_ALT/ABF_FREI erfasst. -->
|
||||
<record id="rule_vergleich_bv" model="hr.salary.rule">
|
||||
<field name="name">Vergleichssumme — BV-Anwartschafts-Teil (§ 67 Abs 8 lit a)</field>
|
||||
<field name="code">VERGLEICH_BV</field>
|
||||
<field name="sequence" eval="34"/>
|
||||
<field name="category_id" ref="l10n_at_hr_payroll_private.category_atp_brutto"/>
|
||||
<field name="struct_id" ref="l10n_at_hr_payroll_private.structure_at_privat"/>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = 'ATP_VERGLEICH_BV' in inputs and inputs['ATP_VERGLEICH_BV'].amount</field>
|
||||
<field name="l10n_at_bemessung">neutral</field>
|
||||
<field name="l10n_at_sv_art">laufend</field>
|
||||
<field name="l10n_at_vergleich_bv" eval="True"/>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
result = inputs['ATP_VERGLEICH_BV'].amount
|
||||
]]></field>
|
||||
</record>
|
||||
|
||||
<!-- Aliquote Prämie/Sonderzahlung bei Beendigung (§ 16 AngG):
|
||||
mit der Endabrechnung ausgezahlt — sonstiger Bezug im
|
||||
Jahressechstel (6 %, Freibetrag/Freigrenze), SZ-SV, voll
|
||||
LNK- und BV-pflichtig (lb-end-18). -->
|
||||
<record id="rule_pram_end" model="hr.salary.rule">
|
||||
<field name="name">Aliquote Prämie bei Beendigung (§ 16 AngG)</field>
|
||||
<field name="code">PRAM_END</field>
|
||||
<field name="sequence" eval="35"/>
|
||||
<field name="category_id" ref="l10n_at_hr_payroll_private.category_atp_brutto"/>
|
||||
<field name="struct_id" ref="l10n_at_hr_payroll_private.structure_at_privat"/>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = 'ATP_PRAM_END' in inputs and inputs['ATP_PRAM_END'].amount</field>
|
||||
<field name="l10n_at_bemessung">sonstig</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
result = inputs['ATP_PRAM_END'].amount
|
||||
]]></field>
|
||||
</record>
|
||||
|
||||
<!-- Später fällige anteilige Prämie (§ 67 Abs 10): die Höhe ist
|
||||
erst nach Ablauf der Anspruchsperiode ermittelbar und wird zum
|
||||
vereinbarten Fälligkeitszeitpunkt ausgezahlt — wie ein laufender
|
||||
Bezug zum Tarif des Zuflussmonats, OHNE Sechstel-Erhöhung
|
||||
(Kern-Flag), gesonderter Lohnzettel (LStR Rz 911a); der
|
||||
SV-Beitragsmonat wird per Rollung ins Austrittsjahr auf die
|
||||
Linie geschrieben (E-MVB 044-01-00-006). -->
|
||||
<record id="rule_pram_end_tarif" model="hr.salary.rule">
|
||||
<field name="name">Später fällige anteilige Prämie (§ 67 Abs 10)</field>
|
||||
<field name="code">PRAM_END_TARIF</field>
|
||||
<field name="sequence" eval="36"/>
|
||||
<field name="category_id" ref="l10n_at_hr_payroll_private.category_atp_brutto"/>
|
||||
<field name="struct_id" ref="l10n_at_hr_payroll_private.structure_at_privat"/>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = 'ATP_PRAM_END_TARIF' in inputs and inputs['ATP_PRAM_END_TARIF'].amount</field>
|
||||
<field name="l10n_at_bemessung">laufend</field>
|
||||
<field name="l10n_at_s67_abs6_ueberhang" eval="True"/>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
result = inputs['ATP_PRAM_END_TARIF'].amount
|
||||
]]></field>
|
||||
</record>
|
||||
|
||||
<!-- Zeitguthaben an Normalarbeitszeit (§ 19e Abs 2 AZG: + 50 %). -->
|
||||
<record id="rule_zeit_guthaben" model="hr.salary.rule">
|
||||
<field name="name">Zeitguthaben Normalarbeitszeit + 50 % (§ 19e Abs 2 AZG)</field>
|
||||
<field name="code">ZEIT_GUTHABEN</field>
|
||||
<field name="sequence" eval="27"/>
|
||||
<field name="category_id" ref="l10n_at_hr_payroll_private.category_atp_brutto"/>
|
||||
<field name="struct_id" ref="l10n_at_hr_payroll_private.structure_at_privat"/>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = 'ATP_ZEIT_GUTHABEN' in inputs and inputs['ATP_ZEIT_GUTHABEN'].amount</field>
|
||||
<field name="l10n_at_bemessung">laufend</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
# § 19e Abs 2 AZG: Guthaben an Normalarbeitszeit + 50 % Zuschlag,
|
||||
# bemessen mit der Normalstunde (lb-end-10); der Zuschlag ist KEIN
|
||||
# Überstundenzuschlag iSd § 68 EStG (kein Freibetrags-Flag).
|
||||
result = payslip._at_grundstunde_norm() * 1.5
|
||||
result_qty = inputs['ATP_ZEIT_GUTHABEN'].amount
|
||||
]]></field>
|
||||
</record>
|
||||
|
||||
<!-- Zeitschulden (Abrechnung mit der aktuellen Normalstunde). -->
|
||||
<record id="rule_zeit_schulden" model="hr.salary.rule">
|
||||
<field name="name">Zeitschulden-Abrechnung (negative Zeile)</field>
|
||||
<field name="code">ZEIT_SCHULDEN</field>
|
||||
<field name="sequence" eval="28"/>
|
||||
<field name="category_id" ref="l10n_at_hr_payroll_private.category_atp_brutto"/>
|
||||
<field name="struct_id" ref="l10n_at_hr_payroll_private.structure_at_privat"/>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = 'ATP_ZEIT_SCHULDEN' in inputs and inputs['ATP_ZEIT_SCHULDEN'].amount</field>
|
||||
<field name="l10n_at_bemessung">laufend</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
# Abrechnung offener Zeitschulden mit der aktuellen Normalstunde
|
||||
# (lb-end-08); negative laufende Bezugszeile.
|
||||
result = -payslip._at_grundstunde_norm()
|
||||
result_qty = inputs['ATP_ZEIT_SCHULDEN'].amount
|
||||
]]></field>
|
||||
</record>
|
||||
|
||||
<!-- Aufrechnung offener Vorschüsse: Rückverrechnung vom Netto
|
||||
NACH SV und Lohnsteuer (§ 293 Abs 3 EO, lb-end-06) — neutral,
|
||||
ohne SV-/LSt-/LNK-Wirkung. -->
|
||||
<record id="rule_end_abrechnung_vorschuss" model="hr.salary.rule">
|
||||
<field name="name">Aufrechnung offener Vorschuss (Netto)</field>
|
||||
<field name="code">END_ABRECHNUNG_VORSCHUSS</field>
|
||||
<field name="sequence" eval="80"/>
|
||||
<field name="category_id" ref="l10n_at_hr_payroll_private.category_atp_abzug"/>
|
||||
<field name="struct_id" ref="l10n_at_hr_payroll_private.structure_at_privat"/>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = 'ATP_ABRECHNUNG_VORSCHUSS' in inputs and inputs['ATP_ABRECHNUNG_VORSCHUSS'].amount</field>
|
||||
<field name="l10n_at_bemessung">neutral</field>
|
||||
<field name="l10n_at_sv_art">keine</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
result = inputs['ATP_ABRECHNUNG_VORSCHUSS'].amount
|
||||
]]></field>
|
||||
</record>
|
||||
</odoo>
|
||||
@@ -0,0 +1,32 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<!-- ============================================================ -->
|
||||
<!-- AP16 (8.13): Karenz-Entgelt-Stopp — entgeltlose Voll- -->
|
||||
<!-- Freistellungen (AVRAG §§ 11/14a/14b/14e/14c, VKG § 1a): -->
|
||||
<!-- das Karenzgeld/Pflegekarenzgeld zahlen AK/Bund (nicht der -->
|
||||
<!-- AG), der Dienstgeber schuldet für die Freistellungs-Tage -->
|
||||
<!-- kein Entgelt. Negative Brutto-Zeile je Arbeitstag aus dem -->
|
||||
<!-- Arbeitseintragssatz (Muster MSCH_ENTGELT, AP7); der Tagesatz -->
|
||||
<!-- teilt die Ausschlüsse mit EFZG/MSCH (_at_efz_tagesatz). -->
|
||||
<!-- ============================================================ -->
|
||||
|
||||
<record id="rule_karenz_entgelt" model="hr.salary.rule">
|
||||
<field name="name">Karenz-Freistellung (kein Dienstgeber-Entgelt; Leistungen extern)</field>
|
||||
<field name="code">KARENZ_ENTGELT</field>
|
||||
<field name="sequence" eval="48"/>
|
||||
<field name="category_id" ref="l10n_at_hr_payroll_private.category_atp_brutto"/>
|
||||
<field name="struct_id" ref="l10n_at_hr_payroll_private.structure_at_privat"/>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python"><![CDATA[
|
||||
result = payslip._at_karenz_entgelt_tage() > 0
|
||||
]]></field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="l10n_at_bemessung">laufend</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
# Freistellung je Arbeitstag: volle Tages-Entgelt-Reduktion
|
||||
# (Tagesatz teilt die Ausschlüsse mit EFZG/MSCH/KARENZ).
|
||||
result = -payslip._at_efz_tagesatz(result_rules) \
|
||||
* payslip._at_karenz_entgelt_tage()
|
||||
]]></field>
|
||||
</record>
|
||||
</odoo>
|
||||
@@ -104,4 +104,49 @@ result = payslip._l10n_at_lst_laufend(result_rules)
|
||||
result = payslip._l10n_at_lst_sonstige(result_rules)
|
||||
]]></field>
|
||||
</record>
|
||||
<record id="rule_lst_abf" model="hr.salary.rule">
|
||||
<field name="name">Lohnsteuer Abfertigung Alt (§ 67 Abs 3)</field>
|
||||
<field name="code">LST_ABF</field>
|
||||
<field name="sequence" eval="72"/>
|
||||
<field name="category_id" ref="l10n_at_hr_payroll_private.category_atp_abzug"/>
|
||||
<field name="struct_id" ref="l10n_at_hr_payroll_private.structure_at_privat"/>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = payslip._at_abf_alt_lohnsteuer(result_rules) > 0</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="l10n_at_bemessung">neutral</field>
|
||||
<field name="l10n_at_sv_art">keine</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
result = payslip._at_abf_alt_lohnsteuer(result_rules)
|
||||
]]></field>
|
||||
</record>
|
||||
<record id="rule_lst_abf_frei" model="hr.salary.rule">
|
||||
<field name="name">Lohnsteuer freiwillige Abfertigung (§ 67 Abs 6)</field>
|
||||
<field name="code">LST_ABF_FREI</field>
|
||||
<field name="sequence" eval="73"/>
|
||||
<field name="category_id" ref="l10n_at_hr_payroll_private.category_atp_abzug"/>
|
||||
<field name="struct_id" ref="l10n_at_hr_payroll_private.structure_at_privat"/>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = payslip._at_abf_frei_lst_6(result_rules) > 0</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="l10n_at_bemessung">neutral</field>
|
||||
<field name="l10n_at_sv_art">keine</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
result = payslip._at_abf_frei_lst_6(result_rules)
|
||||
]]></field>
|
||||
</record>
|
||||
<record id="rule_lst_vergleich_bv" model="hr.salary.rule">
|
||||
<field name="name">Lohnsteuer Vergleich — BV-Anwartschafts-Teil (§ 67 Abs 8 lit a)</field>
|
||||
<field name="code">LST_VERGLEICH_BV</field>
|
||||
<field name="sequence" eval="74"/>
|
||||
<field name="category_id" ref="l10n_at_hr_payroll_private.category_atp_abzug"/>
|
||||
<field name="struct_id" ref="l10n_at_hr_payroll_private.structure_at_privat"/>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = payslip._at_vergleich_bv_lst_6(result_rules) > 0</field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="l10n_at_bemessung">neutral</field>
|
||||
<field name="l10n_at_sv_art">keine</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
result = payslip._at_vergleich_bv_lst_6(result_rules)
|
||||
]]></field>
|
||||
</record>
|
||||
</odoo>
|
||||
@@ -56,4 +56,23 @@ result = (payslip._at_pfaendung_masse(result_rules, 'sz13')
|
||||
+ payslip._at_pfaendung_masse(result_rules, 'sz14'))
|
||||
]]></field>
|
||||
</record>
|
||||
|
||||
<record id="rule_pfaendung_end" model="hr.salary.rule">
|
||||
<field name="name">Lohnpfändung — Beendigungsansprüche (§ 291d EO)</field>
|
||||
<field name="code">PFAENDUNG_END</field>
|
||||
<field name="sequence" eval="77"/>
|
||||
<field name="category_id" ref="l10n_at_hr_payroll_private.category_atp_abzug"/>
|
||||
<field name="struct_id" ref="l10n_at_hr_payroll_private.structure_at_privat"/>
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python"><![CDATA[
|
||||
result = bool(payslip.employee_id._at_pfaendungen_aktiv(payslip.date_to)) \
|
||||
and payslip._at_pfaendung_masse(result_rules, 'beendigung') > 0
|
||||
]]></field>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="l10n_at_bemessung">neutral</field>
|
||||
<field name="l10n_at_sv_art">keine</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
result = payslip._at_pfaendung_masse(result_rules, 'beendigung')
|
||||
]]></field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
||||
@@ -33,6 +33,7 @@ result = inputs['EXPENSES'].amount
|
||||
<field name="condition_select">python</field>
|
||||
<field name="condition_python">result = 'ATP_REISE_STEUERPFLICHTIG' in inputs and inputs['ATP_REISE_STEUERPFLICHTIG'].amount</field>
|
||||
<field name="l10n_at_bemessung">laufend</field>
|
||||
<field name="l10n_at_s26_z4_reise" eval="True"/>
|
||||
<field name="amount_select">code</field>
|
||||
<field name="amount_python_compute"><![CDATA[
|
||||
result = inputs['ATP_REISE_STEUERPFLICHTIG'].amount
|
||||
|
||||
@@ -0,0 +1,308 @@
|
||||
# Endabrechnungs-Zyklus — Rechenfälle AP14-A / AP14-B / AP15-A / AP15-C
|
||||
|
||||
Stand: 2026-09. AP14-A bildet die Beendigungs-Abrechnung auf der
|
||||
privaten Structure ab: Urlaubsersatzleistung (UEL), Abgangsentschädigung,
|
||||
Aufrechnung offener Vorschüsse und Zeitguthaben/-schulden. Grundlagen
|
||||
sind am Originalwortlaut verifiziert (`.ris/`, Stand 2026-09-14):
|
||||
§ 11 Abs 2 ASVG, § 67 Abs 8 lit b und lit d EStG, § 19e Abs 2 AZG,
|
||||
§ 41 Abs 4 FLAG.
|
||||
|
||||
## Rechts- und Systemgrenzen
|
||||
|
||||
- **UEL (§ 10 UrlG, § 67 Abs 8 lit d EStG):** Zweikomponenten — der
|
||||
laufende Anteil läuft als laufender Bezug durch den Tarif des
|
||||
Austrittsmonats und erhöht das Jahressechstel (nativ über
|
||||
`bemessung='laufend'`); der Sonderzahlungsanteil läuft als sonstiger
|
||||
Bezug durch das 6 %-Band (Freibetrag 620 €, Freigrenze 2.615 € im
|
||||
Kern). Nur der laufende Anteil verlängert die Pflichtversicherung
|
||||
(§ 11 Abs 2 ASVG). Tagewert-Divisoren 26 (Werktage) / 22 (5-AT); die
|
||||
SV-Tage-Umrechnung (je volle Woche à N AT + 7−N KT, nur ganze
|
||||
Blöcke) ist Verwaltungspraxis (lb-url-15), nicht Gesetzeswortlaut.
|
||||
- **Abgangsentschädigung (§ 67 Abs 8 lit b):** nach Abzug der §-62-
|
||||
Beiträge ein Fünftel steuerfrei, gedeckelt mit einem Fünftel des
|
||||
Neunfachen der monatlichen HBG (2026: 6.930 × 9/5 = **12.474 €**);
|
||||
der Rest läuft tarifisch im Zuflussmonat — Abs 2 (Sechstel) ist nicht
|
||||
anzuwenden. SV-pflichtig mit Umlegung auf den Kündigungsfrist-
|
||||
Zeitraum; voll lohnnebenkostenpflichtig (FLAG § 41 Abs 4 nennt nur
|
||||
§ 67 Abs 3 und 6).
|
||||
- **Sequentielle Verlängerungsfenster:** Gebühren sowohl eine
|
||||
Kündigungsentschädigung als auch eine UEL, ist zur Bestimmung des
|
||||
Zeitraumes zunächst die Kündigungsentschädigung und im Anschluss die
|
||||
Ersatzleistung heranzuziehen (§ 11 Abs 2 ASVG) — die SV-Basen werden
|
||||
fensterweise auf die Monate verteilt, Standardanteile bleiben auf
|
||||
die volle monatliche HBG gedeckelt, Verlängerungsanteile auf den
|
||||
Tageswert (HBG × Tage/30).
|
||||
- **Aufrechnung offener Vorschüsse (§ 293 Abs 3 EO):** Rückverrechnung
|
||||
vom Netto nach SV und Lohnsteuer — zulässig auch gegen das
|
||||
Existenzminimum; keine Abgabenberührung (lb-end-06).
|
||||
- **Zeitguthaben (§ 19e Abs 2 AZG):** Guthaben an Normalarbeitszeit
|
||||
+ 50 % Zuschlag, bemessen mit der Normalstunde; der Zuschlag ist
|
||||
KEIN Überstundenzuschlag iSd § 68 EStG (lb-end-10). Entfall bei
|
||||
unberechtigtem vorzeitigem Austritt (Eingabe weglassen); KV kann
|
||||
abweichen.
|
||||
|
||||
## RF-END-1 — UEL-Zweikomponenten
|
||||
|
||||
Ende 15. 3., 11 offene AT à 120 € (2.640 € Gehalt / 22):
|
||||
|
||||
- `URL_ERSATZ_LFD` = 1.320 €: tarifisch im März, Sechstel +5.280 €
|
||||
(annualisiert 60/15);
|
||||
- `URL_ERSATZ_SZ` = 220 € (2 × 2.640/12 = 440/Monat → 20/Tag):
|
||||
6 %-Band;
|
||||
- SV: 1.320 € auf die Verlängerungsmonate (Tage-Schema), 220 € als
|
||||
sonstige Beitragsgrundlage gegen Monats- und Jahres-HBGl.
|
||||
|
||||
## RF-END-2 — SV-Tage-Umrechnung (§ 11 Abs 2)
|
||||
|
||||
- 23 AT (5-AT-Woche) → +4×2 KT = **31 SV-Tage**;
|
||||
- 12 WT (6-WT-Woche) → +2×1 KT = **14**;
|
||||
- 6 AT (2-Tage-Teilzeitwoche) → +3×5 KT = **21** (lb-url-15-Beispiel).
|
||||
- Ende 15. 3., 31 SV-Tage → Verlängerung 16. 3.–15. 4.; UEL-lfd-Basis
|
||||
tageproportional (März 16/31, April 15/31), Tageswert-Deckel je
|
||||
Verlängerungsmonat.
|
||||
|
||||
## RF-END-3 — Abgangsentschädigung (Fünftelregelung)
|
||||
|
||||
9.000 € Entschädigung, 42 Tage Kündigungsfrist, DN-Satz s:
|
||||
|
||||
- Bemessung 9.000 × (1 − s/100); davon 1/5 steuerfrei (≤ 12.474 €);
|
||||
4/5 tarifisch im Zuflussmonat, ohne Sechstelerhöhung;
|
||||
- SV: Umlegung 16. 3.–26. 4. (Kündigungsfrist zuerst);
|
||||
- LNK: volle 9.000 € in der Basis (§ 41 Abs 3 FLAG).
|
||||
|
||||
## RF-END-4 — Aufrechnung
|
||||
|
||||
2.000 € offener Vorschuss: `END_ABRECHNUNG_VORSCHUSS` mindert nur das
|
||||
Netto; LSt-, SV- und LNK-Basen unverändert.
|
||||
|
||||
## RF-END-5 — Zeitguthaben/-schulden
|
||||
|
||||
10 h Normalarbeitszeit-Guthaben × 1,5 + 5 h Zeitschulden × (−1):
|
||||
beides laufender Bezug, kein §-68-Freibetrag.
|
||||
|
||||
## RF-ABF-1 — Abfertigung Alt, Vervielfachung günstiger
|
||||
|
||||
21 Dienstjahre ergeben nach § 23 Abs 1 AngG 9 Monatsentgelte. Bei
|
||||
1.800 € laufendem Monatsarbeitslohn und 2.100 € arbeitsrechtlicher
|
||||
Bemessungsgrundlage einschließlich 2/12 Sonderzahlungen:
|
||||
|
||||
- Bruttoabfertigung: 2.100 × 9 = **18.900 €**;
|
||||
- steuerlicher Vervielfacher: 18.900 / 1.800 = **10,5** — nicht 9;
|
||||
- auf den maßgeblichen laufenden Bezug entfallende Tarif-LSt laut
|
||||
Ausgangsfall: **101,96 €**;
|
||||
- Vervielfachungssteuer: 101,96 × 10,5 = **1.070,58 €**;
|
||||
- Vergleich mit 18.900 × 6 % = **1.134 €**;
|
||||
- zwingend wird der niedrigere Steuerbetrag angesetzt.
|
||||
|
||||
`ABF_ALT` ist SV-, BV-, DB-, DZ- und KommSt-frei, verbraucht kein
|
||||
Jahressechstel und läuft als Beendigungsanspruch in den §-291d-EO-Topf.
|
||||
|
||||
## RF-ABF-2 — 6 % günstiger
|
||||
|
||||
Bei hohem laufendem Monatsarbeitslohn kann die vervielfachte Tarif-LSt
|
||||
den Fixsatz überschreiten. Für 9.333,34 € Abfertigung wird dann zwingend
|
||||
**560,00 €** Lohnsteuer (6 %) angesetzt.
|
||||
|
||||
## RF-ABF-3 — Staffel und Sonderfälle
|
||||
|
||||
- 3/5/10/15/20/25 Jahre → 2/3/4/6/9/12 Monatsentgelte;
|
||||
- Elternaustritt nach § 23a Abs 3/4: erst nach mindestens fünf Jahren,
|
||||
dann Hälfte, maximal 3 Monatsentgelte;
|
||||
- Tod nach § 23 Abs 6: Hälfte des normalen Anspruchs;
|
||||
- normale Arbeitnehmerkündigung, unberechtigter Austritt und
|
||||
verschuldete Entlassung begründen grundsätzlich keinen Anspruch;
|
||||
- Abfertigung-Neu-Verträge sind gesperrt, außer ein eingefrorener
|
||||
Altanspruch wird ausdrücklich nachgewiesen.
|
||||
|
||||
Der Wizard schlägt Dienstzeit, Faktor und eine Basis aus laufendem Entgelt
|
||||
plus aliquoten Sonderzahlungen vor. Die auf den maßgeblichen laufenden
|
||||
Monatsarbeitslohn entfallende Tarif-LSt wird getrennt bestätigt, weil sie
|
||||
von der §-62-Bemessung und den persönlichen Absetzbeträgen abhängt und nicht
|
||||
mit dem Bruttolohn gleichgesetzt werden darf. Wegen regelmäßiger Zulagen,
|
||||
Durchschnittsbezügen, Lehrzeiten, Teilübertritten und §-23a-Sonderfällen
|
||||
müssen Anspruch, Basis und Nachweis vor Anlage des Laufs bestätigt werden.
|
||||
Die geprüften Angaben werden am Payslip gespeichert.
|
||||
|
||||
## RF-ABF-4 — Freiwillige Abfertigung, Viertel-/Zwölftelregelung
|
||||
|
||||
15 nachgewiesene Dienstjahre (6/12), 12-Monats-Basis 36.000 € (alle
|
||||
steuerbaren Bezugsteile inklusive steuerfreier Zuschläge und Sachbezüge,
|
||||
ohne Sonderzahlungen und ohne §-26-Z-4-Reisevergütungen), Brutto
|
||||
40.000 €:
|
||||
|
||||
- Z 1 Viertelregelung: 36.000 / 4 = **9.000 €** (Deckel 9 × HBG =
|
||||
62.370 € nicht greifend);
|
||||
- Z 2 Zwölftelregelung: 36.000 × 6/12 = **18.000 €** (Deckel
|
||||
6 × 3 × HBG = 124.740 € nicht greifend);
|
||||
- begünstigter Teil: min(40.000, 9.000 + 18.000) = **27.000 €** mit
|
||||
6 % = **1.620 €** Lohnsteuer (`ABF_FREI`/`LST_ABF_FREI`);
|
||||
- Überhang **13.000 €** als `ABF_FREI_TARIF`: tarifisch in der
|
||||
LSt-Bemessung des Zuflussmonats (LST_LFD), ohne Jahressechstel-Erhöhung
|
||||
(Kern-Flag `l10n_at_s67_abs6_ueberhang`);
|
||||
- SV-frei (§ 49 Abs 3 Z 7 ASVG), LNK-frei unabhängig von der
|
||||
Besteuerungsart (§ 41 Abs 4 lit b FLAG, § 122 Abs 8 WKG,
|
||||
§ 5 Abs 2 lit b KommStG), BV-frei (§ 6 Abs 5 BMSVG); Z 7 (BV-
|
||||
Anwartschafts-Ausschluss) ist seit BGBl I 118/2015 aufgehoben.
|
||||
|
||||
## RF-ABF-5 — Z-3-Kürzung und Deckel
|
||||
|
||||
4.000 € bereits erhaltene Abfertigungen plus 9.000 € gesetzlicher
|
||||
Anspruch am aktuellen Ende kürzen das Z-2-Ausmaß von 18.000 € auf
|
||||
5.000 €; begünstigt sind 9.000 + 5.000 = 14.000 € von 20.000 € Brutto,
|
||||
der Rest läuft zum Tarif. Bei einer 12-Monats-Basis von 12.000.000 €
|
||||
begrenzen die Deckel auf 62.370 € (Z 1) plus 124.740 € (Z 2, 6 × 3 ×
|
||||
HBG), begünstigt sind also höchstens 187.110 €.
|
||||
|
||||
## RF-ABF-6 — Pfändung und Wizard
|
||||
|
||||
- `ABF_FREI` (begünstigter Teil) läuft über den §-291d-Beendigungstopf,
|
||||
vermindert um `LST_ABF` und `LST_ABF_FREI`; der Überhang
|
||||
(`ABF_FREI_TARIF`) bleibt über die laufende Bemessung pfändbar, seine
|
||||
Lohnsteuer steckt bereits in `LST_LFD`.
|
||||
- Der Wizard schlägt die 12-Monats-Basis aus den letzten zwölf
|
||||
validierten Läufen vor (ohne Überhang- und Reise-Regeln, geminderte
|
||||
Bezüge nicht automatisch zurückgerechnet) und den gesetzlichen
|
||||
Anspruch aus der Alt-Abfertigung; Prüfung und Nachweise werden
|
||||
bestätigt (lückenlose Vordienstzeiten zum Lohnkonto, § 76 EStG,
|
||||
keine Anspruchsumwandlung, lb-end-15).
|
||||
|
||||
## RF-VGL-1 — Vergleichssumme Rest, Fünftelregelung (§ 67 Abs 8 lit a)
|
||||
|
||||
Außergerichtlicher Vergleich 9.000 € brutto für nachgeforderte
|
||||
Mehleistungen (lb-end-21 Beispiel 1; kein erkennbarer Abfertigungs-
|
||||
anteil, Ansprüche strittig):
|
||||
|
||||
- `VERGLEICH` (bemessung neutral, `l10n_at_s67_fuenftel`): nach Abzug
|
||||
der §-62-DN-Beiträge (Beispiel: 18,07 % → 1.626,30 €) ist 1/5 der
|
||||
Bemessung steuerfrei (1.474,74 €), Deckel 12.474 € (= 1/5 × 9 ×
|
||||
HBG) greift hier nicht;
|
||||
- 4/5 (5.898,96 € im Beispiel) laufen tarifisch im Zuflussmonat
|
||||
(LST_LFD), ohne Jahressechstel-Erhöhung (Abs 2 nicht anzuwenden);
|
||||
bei Zahlung Monate nach dem DV-Ende ohne weitere laufende Bezüge
|
||||
ist die Bemessungsgrundlage nur der Vergleichsbetrag;
|
||||
- SV-pflichtig im Zuflussmonat (Pauschalvergleich im Zweifel
|
||||
beitragspflichtig, E-MVB 011-02-00-001); Ansprüche aus der aktiven
|
||||
DV-Zeit sind je Beitragsmonat aufzurollen (Kern-Feld
|
||||
`l10n_at_beitragsmonat`), Ansprüche nach DV-Ende verlängern die
|
||||
Pflichtversicherung (lb-end-22);
|
||||
- voll LNK-pflichtig (§ 41 Abs 4 lit b FLAG nennt nur Abs 3 und 6).
|
||||
|
||||
## RF-VGL-2 — BV-Anwartschafts-Teil (6 %, Deckel 7.500 €)
|
||||
|
||||
Vergleichssumme 9.000 €, davon Anteil für Zeiträume mit
|
||||
BV-Kassen-Anwartschaft (lb-end-21 Beispiel 2):
|
||||
|
||||
- erste 7.500 € (`VERGLEICH_BV`): nach anteiligem §-62-Abzug
|
||||
(83,33 % der Beiträge) mit 6 % = `LST_VERGLEICH_BV`;
|
||||
- Überhang 1.500 € (16,67 % der Beiträge) fällt in die
|
||||
Fünftelregelung zurück (1/5 steuerfrei, 4/5 tarifisch);
|
||||
- SV und LNK zur Gänze pflichtig; Deckel parametrisiert
|
||||
(`at_lst_67_abs8_vergleich_bv` — § 67 Abs 8 unterliegt der
|
||||
Inflationsanpassung § 33a/§ 124b EStG);
|
||||
- beim Übertritt Alt→Neu gilt der 6-%-Teil nur für übertragene
|
||||
Zeiträume; eingefrorene Zeiträume laufen über die Fünftelregelung
|
||||
(lb-end-21 Hinweis).
|
||||
|
||||
## RF-VGL-3 — Deckelfälle
|
||||
|
||||
- Rest mit Bemessungsgrundlage 70.000 € (lb-end-21 Deckelbeispiel;
|
||||
das ist bereits die §-62-gekürzte Grundlage): Fünftel an der Grenze
|
||||
12.474 € (9 × HBG/5), Rest tarifisch. Da die Engine erst den
|
||||
§-62-Abzug ansetzt und DANACH das Fünftel deckelt, greift der Deckel
|
||||
brutto-abhängig ab ca. 76.200 € (Testfall 100.000 € brutto);
|
||||
- BV-Teil 10.000 €: begünstigt 7.500 € mit 6 %, Überhang 2.500 € in
|
||||
die Fünftelregelung.
|
||||
|
||||
## RF-VGL-4 — Wizard, Aufteilung und Pfändung
|
||||
|
||||
- Erkennbare Abfertigungsanteile werden getrennt erfasst: gesetzliche
|
||||
Abfertigung über den Abf-Alt-Abschnitt (§ 67 Abs 3; ausdrücklich
|
||||
vereinbarte Abfertigung unterhalb der Klagsforderung → gesamt § 67
|
||||
Abs 3, VwGH 2013/13/0001 = ARD 6490/20/2016), freiwillige über den
|
||||
Abf-Frei-Abschnitt (§ 67 Abs 6); der Rest über den Vergleichs-
|
||||
abschnitt. Widmungen sind nur anzuerkennen, wenn die Ansprüche
|
||||
strittig waren (lb-end-22); beim Pauschalvergleich ist der
|
||||
Verhältnisfaktor Forderung : Vergleichssumme zu dokumentieren
|
||||
(E-MVB 011-02-00-001); Pensionsabfindungen (lit e) und
|
||||
Sozialplan-Zahlungen (lit f) gehören nicht in lit a.
|
||||
- Wizard-Bestätigungspflichten: Aufgliederung/Strittigkeit,
|
||||
BV-Anwartschaft je betroffenem Zeitraum, BV-Teil ≤ Deckel (über-
|
||||
steigender Betrag als Rest erfassen). Vergleichs-Nachweis landet
|
||||
auf dem Lauf (Payslip-Tab) und ist für den gesonderten Lohnzettel
|
||||
bei Zahlung nach dem Beendigungsmonat aufzubereiten (LStR Rz 911a,
|
||||
GP7-Rest).
|
||||
- `VERGLEICH`/`VERGLEICH_BV` laufen — wie `ABGANG` — NICHT über den
|
||||
§-291d-Beendigungstopf (offener Verifikationspunkt, s. u.); der
|
||||
Fünftel-Tarifteil ist über die laufende Bemessung pfändbar, seine
|
||||
Lohnsteuer steckt in `LST_LFD`.
|
||||
|
||||
## RF-PRM-1 — Aliquote Prämie, mit Endabrechnung (§ 16 AngG)
|
||||
|
||||
3.000 € aliquote Jahres-/Leistungsprämie für 3 der 12 Monate
|
||||
Anspruchszeitraum (voller Betrag 12.000 € × 3/12, lb-end-18):
|
||||
|
||||
- `PRAM_END` (bemessung „sonstig“): sonstiger Bezug innerhalb des
|
||||
Jahressechstels mit 6 % (`LST_SZ`-Pfad, Freibetrag 620/Freigrenze
|
||||
2.615 vom Kern geprüft), ohne Sechstel-Erhöhung;
|
||||
- SZ-SV: KV/PV/AV ohne AK/WF (§ 62 Z 3/Z 5), monatliche HBG und
|
||||
SZ-Jahreshöchstbetrag (Kern `_l10n_at_svdn_basis_sz`);
|
||||
- voll LNK-pflichtig (DB/DZ/KommSt, lb-end-18), BV 1,53 % ungecappt
|
||||
(§ 6 Abs 1 iVm Abs 5 BMSVG);
|
||||
- § 16: für Angestellte unabhängig vom Beendigungsgrund gebührend;
|
||||
leistungsabhängige Prämien bei Arbeitern dürfen wirksam an „kein
|
||||
Verschulden“ gebunden sein; Prämien mit spezifischer Leistungs-
|
||||
verknüpfung (z. B. Bilanzgeld) sind ohne Tätigkeit nicht aliquot
|
||||
zu leisten. Wizard bestätigt die Leistungs-/Anspruchsgrundlage.
|
||||
|
||||
## RF-PRM-2 — Später fällige Prämie (§ 67 Abs 10) mit SV-Rollung
|
||||
|
||||
3.000 € anteilige Prämie für Leistungen im Austrittsjahr 2025, Höhe
|
||||
erst nach Ablauf der Periode ermittelbar, Fälligkeit und Auszahlung
|
||||
März 2026 (lb-end-18):
|
||||
|
||||
- `PRAM_END_TARIF` (bemessung „laufend“ + Kern-Flag
|
||||
`l10n_at_s67_abs6_ueberhang`): wie ein laufender Bezug zum Tarif des
|
||||
Zuflussmonats (LST_LFD), OHNE Sechstel-Erhöhung (§ 67 Abs 10);
|
||||
- keine Nachzahlung iSd § 67 Abs 8 lit c, weil die Zahlung nicht
|
||||
später als zum vereinbarten Fälligkeitszeitpunkt erfolgt
|
||||
(98/14/0009 = ARD 5483/14/2004);
|
||||
- SV-Rollung: Lauf-Feld `l10n_at_pram_beitragsmonat` ordnet die
|
||||
Zeile dem Beitragsmonat des Austrittsjahres zu (E-MVB
|
||||
044-01-00-006) — historische HBG (2025: 6.450 €) und Sätze des
|
||||
Rollmonats, private Überschreibung von
|
||||
`_l10n_at_sv_basis_laufen_monate` (Pin); LSt und mBGM-Schnittstelle
|
||||
(Storno/Neuübermittlung) bleiben im GP7-Track;
|
||||
- gesonderter Lohnzettel für den Kalendermonat der Zahlung
|
||||
(LStR Rz 911a); LNK und BV wie RF-PRM-1.
|
||||
|
||||
## RF-PRM-3 — Wizard-Aliquot und Validierungen
|
||||
|
||||
Der Wizard-Abschnitt schlägt den §-16-Aliquot-Betrag vor (voller
|
||||
Betrag × zurückgelegte Dienstzeit / Anspruchsperiode), der zahlende
|
||||
Betrag bleibt bestätigbar (KV-Vereinbarung). Validierungen:
|
||||
Leistungs-/Anspruchsgrundlage bestätigen, Dienstzeit ≤ Anspruchszeit-
|
||||
raum, bei späterer Fälligkeit Beitragsmonat der Rollung erforderlich.
|
||||
|
||||
## Offene Punkte (Verifikationsreste)
|
||||
|
||||
- KZ-Positionierung der Abs-6-Bezüge (außerhalb KZ 210/220, LSt in
|
||||
KZ 260 — GP3-Konvention wie Abs 3) und die Zuordnung des Z-6-Überhangs
|
||||
zum §-291d-EO-Topf sind gegen LStR Rz 1087 ff / § 291d EO zu
|
||||
verifizieren, bevor der MVP freigegeben wird. Dasselbe gilt für die
|
||||
KZ-Positionierung der lit-a-Tarif-Teile (laufend über LST_LFD) und
|
||||
die §-291d-Zuordnung von `VERGLEICH`/`VERGLEICH_BV`.
|
||||
- Geminderte Bezüge in der 12-Monats-Basis: die LStR-Rückrechnungs-
|
||||
praxis (zwölf Monate voller Bezüge) widerspricht dem VwGH
|
||||
(Krankengeld 6/7 einbeziehen) — bewusst ohne Automatik, Basis ist
|
||||
bestätigbar (lb-end-13 ⚠).
|
||||
- Prämien-Beendigung (§ 16 AngG-Aliquotierung, Rollung) — mit AP14-B
|
||||
umgesetzt (`PRAM_END`/`PRAM_END_TARIF`, Wizard-Abschnitt,
|
||||
Beitragsmonat-Rollung auf dem Lauf); offen bleibt die vollständige
|
||||
SZ-Aufrollung (Storno + Neurechnung gegen die SZ-Jahreshöchst-
|
||||
betrag des Austrittsjahres) und das mBGM-Storno/Neuübermitteln
|
||||
(GP7/Meldewesen-Track).
|
||||
- Meldewesen-Schnittstellen: „Ende des Entgeltanspruches" in mBGM/
|
||||
Abmeldung (GP7), gesonderter Lohnzettel bei Zahlung außerhalb des
|
||||
Beendigungsmonats (LStR 2002 Rz 911a).
|
||||
- Der §-62-Abzug des Fünftelpfades ist über den effektiven DN-Satz
|
||||
approximiert (HBG-Caps der Verlängerungsmonate laufen im SV-Pfad).
|
||||
@@ -0,0 +1,113 @@
|
||||
# Karenz-/Familien-Freistellungen — Rechenfälle AP16 (8.13 freigegeben)
|
||||
|
||||
Karenz-Familie im Privatmodul: unbezahlte Voll-Freistellungen (Eltern-
|
||||
karenz generisch, Bildungs-, Familienhospiz-/Sterbebegleitungs-,
|
||||
Kinderkranken-Begleitungs-, Kinderrehabilitations- und Pflegekarenz,
|
||||
Papa-Monat) mit Entgelt-Stopp, eSV-An-/Abmeldungen, fiktiver BV mit
|
||||
§-7-Abs-4-Brücke, §-6-Abs-4-BV bei Teilzeit, Sonderwochengeld (§ 163
|
||||
ASVG) und Ruhen (§ 166 ASVG). Grundlagen: KB lb-kar-01…06, lb-elt-
|
||||
01…06, lb-kzs-01…07, lb-pap-01/02, lb-kbg-06 (Stand 2026-07) und die
|
||||
verifizierten Originaltexte in `.ris/` (AVRAG, VKG, MSchG, KBGG,
|
||||
FamZeitbG, BMSVG § 7, ASVG §§ 162/163/166).
|
||||
|
||||
## RF-KAR-1 — Entgelt-Stopp je Karenz-Art (test_01)
|
||||
|
||||
Bildungskarenz 1.–15. 11. 2026 (§ 11 AVRAG: 2–12 Monate, teilbar ≥ 2,
|
||||
Rahmenfrist 4 Jahre, kein Rechtsanspruch — Einvernehmen): das
|
||||
Karenzgeld zahlt die **AK** (nicht der AG) — `KARENZ_ENTGELT` stoppt
|
||||
das Dienstgeber-Entgelt je Arbeitstag (negatives Tagesatz-Muster von
|
||||
`MSCH_ENTGELT`, geteilter Tagesatz-Helfer `_at_efz_tagesatz`, der
|
||||
Ausschlüsse mit EFZG/MSCH teilt). 10 AT → −(2.059,41/21) × 10.
|
||||
Gleiches Muster für Hospizkarenz (§ 14a, 3/6 Monate), Begleitung
|
||||
schwerst erkrankter Kinder (§ 14b, 5/9 Monate), Kinderrehabilitation
|
||||
(§ 14e, 4 Wochen/Jahr), Pflegekarenz (§ 14c, 1–3 Monate, unteilbar)
|
||||
und Papa-Monat (§ 1a VKG, 1 Monat).
|
||||
|
||||
## RF-KAR-2 — eSV-An-/Abmeldungen (vr.event)
|
||||
|
||||
- Abmeldung zum **Ende des Entgeltanspruchs** = Tag vor dem Karenz-
|
||||
beginn; Anmeldung zum ersten Arbeitstag nach dem Karenzende —
|
||||
entfällt, wenn das DV mit der Karenz endet (normale Vertrags-
|
||||
Abmeldung).
|
||||
- **Papa-Monat/Familienzeit tagesgenau:** Abmeldung am Tag **vor**
|
||||
Beginn der Familienzeit (§ 11 Abs 3 lit a ASVG — unbezahlter Urlaub
|
||||
hält die Pflichtversicherung nur bis 1 Monat, nicht bei Familien-
|
||||
zeit; lb-pap-01), Anmeldung vor Arbeitsantritt.
|
||||
- Karenzart-Strings („Familienhospizkarenz/Pflegekarenz An-/Abmeldung",
|
||||
lb-kzs-05) laufen als Protokoll-Info; erweiterte eSV-Sonderformate
|
||||
= GP7-Rest. Idempotenz über die Registry (employee, art, adatum).
|
||||
|
||||
## RF-KAR-3 — Fiktive BV mit Karenz-Brücke (§ 7 Abs 4 Z 1–3 BMSVG)
|
||||
|
||||
Mutterschutz-Frist 1.–15. 11. 2026 (Verbot 1) → Elternkarenz
|
||||
16. 11. 2026–28. 2. 2027 → neuerliches Beschäftigungsverbot 1. 3. 2027
|
||||
(Z 1, unmittelbar nach der Karenz): die fiktive BV-Basis des
|
||||
neuerlichen Verbots bemisst sich nach dem **Monatsentgelt des
|
||||
Kalendermonats vor dem Verbot 1** — Referenzmonate Aug/Sep/Okt 2026
|
||||
(statt Dez 2026–Feb 2027, die karenzbedingt leer wären). Z 2
|
||||
(Beschäftigung < 3 Monate zwischen Karenz und Verbot): gleicher
|
||||
Stichtag. Z 3 (neues DV binnen 3 Monaten nach Beendigung des
|
||||
karenzierten DV mit Karenz): der letzte volle Kalendermonat vor dem
|
||||
neuerlichen Verbot als EINZELNER Referenzmonat („volles Monatsentgelt").
|
||||
|
||||
## RF-KAR-4 — BV-Vor-Entgelt bei Pflegeteilzeit (§ 6 Abs 4 BMSVG)
|
||||
|
||||
20-h-Teilzeit (work_time_rate 0,5) mit Vor-Reduzierungs-Entgelt
|
||||
2.059,41 €: die BV-Basis läuft während der Maßnahme auf dem
|
||||
Vor-Reduzierungs-Entgelt (§ 6 Abs 4 BMSVG), nicht auf der reduzierten
|
||||
laufenden Basis (1.029,71 €). Bildungs-/Hospizteilzeit analog über
|
||||
das Feld `l10n_at_bv_vor_entgelt` am Vertrag.
|
||||
|
||||
## RF-KAR-5 — Sonderwochengeld (§ 163 ASVG) und Ruhen (§ 166 ASVG)
|
||||
|
||||
- Mutterschutz-Frist **innerhalb** einer Karenz: kein Wochengeld
|
||||
(§ 162), sondern **Sonderwochengeld** — Zahlung durch die ÖGK
|
||||
(erhöhtes Krankengeld § 141 Abs 2, Bemessungsgrundlage § 125 aus
|
||||
dem Arbeitsverdienst vor dem Ende des letzten Entgeltanspruchs,
|
||||
§-108f-Anpassung); Ausweis im Mutterschutz-Status.
|
||||
- Ruhen (§ 166 Abs 1): Fortbezug > 50 % (Entgeltfortzahlung 100 %-
|
||||
Phase) → Ruhen zur Gänze, = 50 % (Halbphase) → hälftig; Zeiten der
|
||||
Urlaubsersatzleistung/UEL/KE gelten nicht als weitergeleistete
|
||||
Bezüge; Z 3 Erwerbstätigkeit (in Höhe des Einkommens) und Z 4
|
||||
Pflegekarenzgeld (in dessen Höhe) = Bezugszeitraum-Daten der ÖGK
|
||||
(Hinweis).
|
||||
|
||||
## RF-KAR-6 — Elternteilzeit: Entgelt und Beendigungs-Basen
|
||||
|
||||
- Entgelt: letzter voller Lohn/Gehalt, aliquotiert nach der
|
||||
herabgesetzten Wochenstundenzahl (lb-elt-02) — maschinell über
|
||||
`work_time_rate` der Version (Versionskalender ÷ Firmenzalender).
|
||||
- SZ-Mischberechnung (§ 15j Abs 7 MSchG / § 8b Abs 7 VKG): B13/B14
|
||||
bemessen je Monat aus dem jeweiligen (reduzierten) Monatsentgelt ×
|
||||
Dienstzeitfaktor — VZ-/TZ-Anteile im Kalenderjahr ergeben sich
|
||||
automatisch.
|
||||
- Endabrechnungs-Wizard: §-23-Abs-8-Hochrechnung (DV während
|
||||
MSchG-/VKG-Teilzeit: frühere Normalarbeitszeit = Monatsentgelt ÷
|
||||
work_time_rate, Vorschau); für Arbeitnehmerkündigung § 23a Abs 4a
|
||||
(5-Jahres-Ø der geleisteten Arbeitszeit ohne Karenz, manuell);
|
||||
UEL § 10 Abs 4 UrlG (überwiegende Arbeitszeit des Urlaubsjahres).
|
||||
Dienstzeitanrechnung: Karenzzeiten je Kind in vollem Umfang
|
||||
(§ 15f Abs 1 MSchG, Geburten ab 1. 8. 2019, max. 22./24. Lebens-
|
||||
monat); Papa-Monat anrechnen (§ 1a Abs 7 VKG).
|
||||
|
||||
## Offene Punkte (AP16-Reste)
|
||||
|
||||
- **Urlaubs-Aliquotierung aus Karenz** (§ 15f Abs 2 MSchG: 30 WT/25 AT
|
||||
: 365 × aktive KT, Teiltage aufrunden) greift in die hr_holidays-
|
||||
Allokationsseite — eigener Folgeschritt; Urlaubsverjährung
|
||||
verlängert sich um die Karenz (§ 4 Abs 5 UrlG).
|
||||
- **Krankheit während Karenz/Mutterschutz** ist als gleichzeitige
|
||||
Abwesenheit in hr.leave nur mit einer Überlappungs-Policy-
|
||||
Entscheidung umsetzbar (Odoo sperrt Quere-Überlappungen;
|
||||
`allow_request_on_top` erfordert time_type „other") —
|
||||
Mandanten-Entscheid; der Test umgeht mit dem offiziellen
|
||||
leave_skip_date_check-Bypass.
|
||||
- Fristen der AG↔AN-Kommunikation (3-/2-Monats-Bekanntgaben,
|
||||
5/10-Arbeitstage, Begründungspflichten 5 Kalendertage) = Help-Texte;
|
||||
keine Fristen-Automatik.
|
||||
- eSV-Sonderformate (Karenzart-Block „Familienhospizkarenz/Pflege-
|
||||
karenz") und mBGM-Feinschliff = GP7; Sonderwochengeld-Vollrechnung
|
||||
(§ 141 Abs 2/§ 125/§ 108f) = Anzeige-Stufe, kein Eigenrechenpfad.
|
||||
- lb-kar-02: Folgen der 13-Wochen-Überschreitung + § 2i-AVRAG-Konflikt
|
||||
und lb-elt-06 §-8-/§-8a-VKG-Zuordnung — keine Implementierung auf
|
||||
kontroversen Literaturansichten (dokumentiert ⚠).
|
||||
@@ -14,9 +14,11 @@ from . import buchungsbeleg
|
||||
from . import wien_dag
|
||||
from . import efzg
|
||||
from . import mutterschutz
|
||||
from . import karenz
|
||||
from . import aeb
|
||||
from . import pfaendung
|
||||
from . import pfaendung_report
|
||||
from . import sachbezuege_private
|
||||
from . import reisekosten
|
||||
from . import pendler
|
||||
from . import endabrechnung
|
||||
|
||||
@@ -206,12 +206,18 @@ class HrPayslip(models.Model):
|
||||
Erstfenster — 30-Tage-Monat (KB-Beispiel 4.500/30 × 17 =
|
||||
2.550); Teilmonate über die Lohnsteuertage, um Doppelabzüge
|
||||
zu vermeiden (das Entgelt ist für die Teilzeit bereits
|
||||
aliquotiert)."""
|
||||
aliquotiert). AP16 (§ 6 Abs 4 BMSVG): während einer
|
||||
Arbeitszeit-Reduzierung mit gesetztem Feld
|
||||
l10n_at_bv_vor_entgelt (z. B. Pflegeteilzeit § 14d AVRAG)
|
||||
läuft der Beitrag auf dem Vor-Reduzierungs-Entgelt."""
|
||||
self.ensure_one()
|
||||
pflichtig_ab, kurz_av = self._at_bv_fenster()
|
||||
if kurz_av:
|
||||
return 0.0
|
||||
vor_entgelt = self.version_id.l10n_at_bv_vor_entgelt
|
||||
basis = self._l10n_at_sv_basis_roh(result_rules)
|
||||
if vor_entgelt:
|
||||
basis = max(basis, float(vor_entgelt))
|
||||
if pflichtig_ab is None or pflichtig_ab <= self.date_from:
|
||||
# AP4: fiktive BG während des Krankengeldbezugs (§ 7 Abs 3
|
||||
# BMSVG) und des Wochengeldbezugs (§ 7 Abs 4, AP7) — nur
|
||||
|
||||
@@ -68,6 +68,25 @@ L10N_AT_BUCHUNGSMATRIX = {
|
||||
'rule_svdn_sz': {'credit': ('3600',)},
|
||||
'rule_lst_lfd': {'credit': ('3540',)},
|
||||
'rule_lst_sz': {'credit': ('3540',)},
|
||||
'rule_lst_abf': {'credit': ('3540',)},
|
||||
'rule_lst_abf_frei': {'credit': ('3540',)},
|
||||
'rule_lst_vergleich_bv': {'credit': ('3540',)},
|
||||
# Gesetzliche Abfertigung Alt: bis zur Referenzbuchhaltungs-
|
||||
# Fixierung allgemeiner Gehalts-/Lohnaufwand, company-dependent
|
||||
# Regelkonto bleibt übersteuerbar.
|
||||
'rule_abf_alt': {'debit': ('6200',), 'debit_arbeiter': ('6000',)},
|
||||
# Freiwillige Abfertigung (§ 67 Abs 6): begünstigter Teil und
|
||||
# tarifischer Überhang — gleiche vorläufige Aufwandskonten.
|
||||
'rule_abf_frei': {'debit': ('6200',), 'debit_arbeiter': ('6000',)},
|
||||
'rule_abf_frei_tarif': {'debit': ('6200',), 'debit_arbeiter': ('6000',)},
|
||||
# Vergleichssumme (§ 67 Abs 8 lit a): Rest und BV-Anwartschafts-
|
||||
# Teil — gleiche vorläufige Aufwandskonten wie die Abfertigungen.
|
||||
'rule_vergleich': {'debit': ('6200',), 'debit_arbeiter': ('6000',)},
|
||||
'rule_vergleich_bv': {'debit': ('6200',), 'debit_arbeiter': ('6000',)},
|
||||
# Prämie bei Beendigung (§ 16 AngG): mit Endabrechnung und später
|
||||
# fällig — Prämien-Aufwandskonto wie rule_pram.
|
||||
'rule_pram_end': {'debit': ('6230',)},
|
||||
'rule_pram_end_tarif': {'debit': ('6230',)},
|
||||
# Nettoauszahlung (reconcilable, s. o.)
|
||||
'rule_netto': {'credit': ('3850',)},
|
||||
# DG-Beiträge (650–655 SV Arbeiter · 656–659 SV Angestellte)
|
||||
|
||||
@@ -275,7 +275,7 @@ class HrPayslip(models.Model):
|
||||
self.ensure_one()
|
||||
basis = self._l10n_at_sv_basis_roh(result_rules)
|
||||
for code in ('TEIL_ENTGELT_HALB', 'KRANKENTGELT_PHASE',
|
||||
'MSCH_ENTGELT'):
|
||||
'MSCH_ENTGELT', 'KARENZ_ENTGELT'):
|
||||
if result_rules is not None and code in result_rules \
|
||||
and result_rules[code]['total']:
|
||||
basis -= result_rules[code]['total']
|
||||
|
||||
@@ -0,0 +1,656 @@
|
||||
# Part of the odoo-at-payroll project. License: LGPL-3.
|
||||
"""AP14-A: Endabrechnungs-Zyklus — Urlaubsersatzleistung (UEL),
|
||||
Abgangsentschädigung (§ 67 Abs 8 lit b), Aufrechnung offener Vorschüsse
|
||||
und Zeitguthaben/-schulden (§ 19e AZG).
|
||||
AP15-C: Vergleichssummen (§ 67 Abs 8 lit a).
|
||||
|
||||
Am Originalwortlaut verifiziert (.ris/, Stand 2026-09-14):
|
||||
- § 11 Abs 2 ASVG: die Pflichtversicherung besteht für die Zeit des
|
||||
Bezuges einer Ersatzleistung für Urlaubsentgelt (und einer
|
||||
Kündigungsentschädigung) weiter; gebühren beide, ist zur Bestimmung
|
||||
des Zeitraumes ZUERST die Kündigungsentschädigung und im Anschluss
|
||||
die Ersatzleistung heranzuziehen (sequentielle Verlängerungsfenster).
|
||||
Die 6-WT/5-AT-Tage-Umrechnung ist Verwaltungspraxis (lb-url-15),
|
||||
nicht Gesetzeswortlaut.
|
||||
- § 67 Abs 8 lit d EStG: UEL „soweit sie laufenden Arbeitslohn
|
||||
betreffen, als laufender Arbeitslohn, soweit sie sonstige Bezüge
|
||||
betreffen, als sonstiger Bezug im Kalendermonat der Zahlung" — die
|
||||
Zweikomponenten-Abbildung läuft nativ über l10n_at_bemessung.
|
||||
- § 67 Abs 8 lit b EStG (Kündigungs-/Abgangsentschädigung): nach
|
||||
Abzug der §-62-Beiträge ist ein Fünftel steuerfrei zu belassen,
|
||||
höchstens ein Fünftel des Neunfachen der monatlichen HBG; der Rest
|
||||
läuft tarifisch im Zuflussmonat (Abs 10), Abs 2 (Sechstel) ist
|
||||
NICHT anzuwenden. LNK-pflichtig (FLAG § 41 Abs 4 nennt nur
|
||||
§ 67 Abs 3 und 6) und SV-pflichtig (keine §-49-Abs-3-Z-7-Befreiung)
|
||||
mit Umlegung auf den Kündigungsfrist-Zeitraum.
|
||||
- § 19e Abs 2 AZG: Guthaben an Normalarbeitszeit + 50 % Zuschlag
|
||||
(Entfall bei unberechtigtem vorzeitigem Austritt; KV kann
|
||||
abweichend regeln).
|
||||
- § 67 Abs 8 lit a EStG (AP15-C, Stand 2026-09-15): Vergleichssummen
|
||||
sind, SOWEIT sie nicht nach Abs 3, 6 oder dem letzten Satz mit dem
|
||||
festen Steuersatz zu versteuern sind, nach Abs 10 im Kalendermonat
|
||||
der Zahlung zu erfassen; nach Abzug der §-62-Z-3/4/5-Beiträge ist
|
||||
ein Fünftel steuerfrei (Deckel ein Fünftel des Neunfachen der
|
||||
monatlichen HBG), Abs 2 (Sechstel) ist nicht anzuwenden. Erkennbare
|
||||
Abfertigungsanteile laufen getrennt über Abs 3 (VwGH
|
||||
2013/13/0001 = ARD 6490/20/2016: ausdrücklich vereinbarte
|
||||
gesetzliche Abfertigung → gesamt Abs 3) bzw. Abs 6. Fallen die
|
||||
Vergleichssummen bei oder nach Beendigung an UND betreffen sie
|
||||
Zeiträume mit BV-Kassen-Anwartschaft, sind sie bis 7 500 € mit 6 %
|
||||
zu versteuern (parametrisiert, §-33a-Indexkette); der übersteigende
|
||||
Teil fällt in die Fünftelregelung zurück. SV-Aufrollung aktiver
|
||||
Ansprüche je Beitragsmonat bzw. PV-Verlängerung: lb-end-22
|
||||
(E-MVB 011-02-00-001), Kern-Mechanismus l10n_at_beitragsmonat.
|
||||
"""
|
||||
from datetime import timedelta
|
||||
|
||||
from dateutil.relativedelta import relativedelta
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class HrSalaryRule(models.Model):
|
||||
_inherit = 'hr.salary.rule'
|
||||
|
||||
l10n_at_sv_verlaengerung = fields.Selection(
|
||||
[('keine', 'Keine SV-Verlängerung (§ 11 Abs 2 ASVG)'),
|
||||
('urlaubsersatz', 'UEL-Tage-Schema (Urlaubsersatzleistung)'),
|
||||
('abgang', 'Kündigungsfrist (Abgangsentschädigung)')],
|
||||
string='AT SV-Verlängerung', default='keine',
|
||||
help='Verteilt die laufende SV-Basis dieser Regel auf die '
|
||||
'Pflichtversicherungs-Verlängerungsmonate nach § 11 Abs 2 '
|
||||
'ASVG statt auf den Abrechnungsmonat: Abgangsentschädigung '
|
||||
'zuerst (Kündigungsfrist), UEL anschließend (Tage-Schema '
|
||||
'lb-url-15).')
|
||||
l10n_at_s67_fuenftel = fields.Boolean(
|
||||
string='AT § 67 Abs 8 lit a/b (Fünftelregelung)',
|
||||
help='LSt-Pfad der Vergleichs-/Kündigungsentschädigungen: nach '
|
||||
'Abzug der §-62-Beiträge ist ein Fünftel steuerfrei '
|
||||
'(Deckel: ein Fünftel des Neunfachen der monatlichen HBG), '
|
||||
'der Rest läuft tarifisch im Zuflussmonat — ohne '
|
||||
'Jahressechstel-Erhöhung (Abs 2 nicht anzuwenden).')
|
||||
l10n_at_vergleich_bv = fields.Boolean(
|
||||
string='AT § 67 Abs 8 lit a — BV-Anwartschafts-Teil',
|
||||
help='Teil einer Vergleichssumme, der bei oder nach Beendigung '
|
||||
'für Zeiträume mit BV-Kassen-Anwartschaft ausbezahlt wird: '
|
||||
'bis zum Deckel (at_lst_67_abs8_vergleich_bv, 2026: 7 500 €) '
|
||||
'mit 6 %, der übersteigende Teil fällt in die '
|
||||
'Fünftelregelung zurück. SV-pflichtig und LNK-pflichtig.')
|
||||
l10n_at_s26_z4_reise = fields.Boolean(
|
||||
string='AT § 26 Z 4 Reisevergütung',
|
||||
help='§-26-Z-4-Reisevergütungen zählen nicht in die '
|
||||
'12-Monats-Basis der §-67-Abs-6-Begünstigung (lb-end-13); '
|
||||
'Sonderzahlungen sind ohnehin nicht bemessung „laufend“.')
|
||||
|
||||
|
||||
class HrPayslip(models.Model):
|
||||
_inherit = 'hr.payslip'
|
||||
|
||||
l10n_at_abf_alt_anspruchsart = fields.Selection(
|
||||
[('normal', 'Normalanspruch (§ 23 AngG)'),
|
||||
('eltern', 'Elternaustritt (§ 23a Abs 3/4 AngG)'),
|
||||
('tod', 'Tod (§ 23 Abs 6 AngG)'),
|
||||
('pension', 'Pension/Invalidität (§ 23a Abs 1 AngG)'),
|
||||
('eingefroren', 'Eingefrorener Altanspruch (§ 47 BMSVG)'),
|
||||
('manuell', 'Sonstiger nachgewiesener Anspruch')],
|
||||
string='AT Abfertigung Alt — Anspruchsart', copy=False)
|
||||
l10n_at_abf_alt_dienstzeit_monate = fields.Integer(
|
||||
string='AT Abfertigung Alt — Dienstzeitmonate', copy=False)
|
||||
l10n_at_abf_alt_monatsentgelt = fields.Float(
|
||||
string='AT Abfertigung Alt — Monatsentgelt', copy=False,
|
||||
help='Bestätigte arbeitsrechtliche Bemessungsgrundlage inklusive '
|
||||
'regelmäßiger Bezugsbestandteile und aliquoter Sonderzahlungen.')
|
||||
l10n_at_abf_alt_laufender_arbeitslohn = fields.Float(
|
||||
string='AT Abfertigung Alt — laufender Arbeitslohn', copy=False,
|
||||
help='Laufender Monatsarbeitslohn für den steuerlichen '
|
||||
'Vervielfacher nach § 67 Abs 3 EStG.')
|
||||
l10n_at_abf_alt_monatslohnsteuer = fields.Float(
|
||||
string='AT Abfertigung Alt — tarifmäßige Monatslohnsteuer',
|
||||
copy=False,
|
||||
help='Auf den maßgeblichen laufenden Monatsarbeitslohn entfallende '
|
||||
'tarifmäßige Lohnsteuer nach den persönlichen Verhältnissen.')
|
||||
l10n_at_abf_alt_mehrfach = fields.Float(
|
||||
string='AT Abfertigung Alt — Anspruchsfaktor', copy=False)
|
||||
l10n_at_abf_alt_nachweis = fields.Text(
|
||||
string='AT Abfertigung Alt — Nachweis/Begründung', copy=False)
|
||||
l10n_at_abf_frei_basis_12 = fields.Float(
|
||||
string='AT Freiwillige Abfertigung — 12-Monats-Basis', copy=False,
|
||||
help='Laufende Bezüge der letzten zwölf Monate (§ 67 Abs 6 Z 1/2 '
|
||||
'EStG): vom Wizard bestätigt — alle steuerbaren Bezugsteile '
|
||||
'inklusive steuerfreier Zuschläge und Sachbezüge, ohne '
|
||||
'Sonderzahlungen und ohne §-26-Z-4-Reisevergütungen; keine '
|
||||
'Bezüge anderer Arbeitgeber, keine Hochrechnung kurzer DV.')
|
||||
l10n_at_abf_frei_dienstzeit_monate = fields.Integer(
|
||||
string='AT Freiwillige Abfertigung — nachgewiesene Dienstzeit '
|
||||
'(Monate)', copy=False)
|
||||
l10n_at_abf_frei_erhaltene_abfertigungen = fields.Float(
|
||||
string='AT Freiwillige Abfertigung — erhaltene Abfertigungen',
|
||||
copy=False,
|
||||
help='Während der nachgewiesenen Dienstzeit bereits erhaltene '
|
||||
'Abfertigungen nach § 67 Abs 3 oder Abs 6 EStG — kürzen das '
|
||||
'Z-2-Ausmaß (§ 67 Abs 6 Z 3).')
|
||||
l10n_at_abf_frei_gesetzlicher_anspruch = fields.Float(
|
||||
string='AT Freiwillige Abfertigung — bestehender gesetzlicher '
|
||||
'Anspruch', copy=False,
|
||||
help='Bestehender Anspruch auf eine gesetzliche Abfertigung am '
|
||||
'aktuellen Dienstverhältnis-Ende (§ 67 Abs 6 Z 3 EStG) — '
|
||||
'kürzt das Z-2-Ausmaß.')
|
||||
l10n_at_abf_frei_nachweis = fields.Text(
|
||||
string='AT Freiwillige Abfertigung — Nachweis/Begründung',
|
||||
copy=False)
|
||||
l10n_at_vergleich_nachweis = fields.Text(
|
||||
string='AT Vergleich — Nachweis/Begründung', copy=False,
|
||||
help='Aufgliederung der Vergleichsvereinbarung (lb-end-21): '
|
||||
'strittige Ansprüche, erkennbare Abfertigungsanteile, '
|
||||
'BV-Anwartschafts-Zeiträume; beim Pauschalvergleich der '
|
||||
'Verhältnisfaktor Forderungsbetrag : Vergleichssumme '
|
||||
'(E-MVB 011-02-00-001).')
|
||||
l10n_at_pram_nachweis = fields.Text(
|
||||
string='AT Prämie bei Beendigung — Nachweis/Begründung', copy=False,
|
||||
help='Anspruchsgrundlage (KV-/Vertragsvereinbarung, '
|
||||
'Anspruchszeitraum), §-16-Aliquotierung, '
|
||||
'Leistungsverknüpfung und Fälligkeitsvereinbarung '
|
||||
'dokumentieren (lb-end-18).')
|
||||
l10n_at_pram_beitragsmonat = fields.Date(
|
||||
string='AT Prämie (§ 67 Abs 10) — SV-Beitragsmonat der Rollung',
|
||||
copy=False,
|
||||
help='Beitragsmonat, dem die später fällige anteilige Prämie '
|
||||
'sv-rechtlich zuzuordnen ist — der Zeitraum, in dem die '
|
||||
'Leistungen erbracht wurden (E-MVB 044-01-00-006, lb-end-18). '
|
||||
'Leer = Zuflussmonat.')
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# SV-Tage-Umrechnung und Verlängerungsmonate (§ 11 Abs 2 ASVG)
|
||||
# ------------------------------------------------------------------
|
||||
def _at_end_arbeitsrechtliches_ende(self):
|
||||
"""Arbeitsrechtliches Ende = letzter Arbeitstag; das SV-Ende
|
||||
(„Ende des Entgeltanspruches") liegt darüber hinaus, wenn ein
|
||||
Entgeltanspruch über das Ende hinaus läuft."""
|
||||
self.ensure_one()
|
||||
return self.version_id.contract_date_end or self.date_to
|
||||
|
||||
def _at_end_arbeitstage_woche(self):
|
||||
"""Arbeitstage pro Woche des Vertragskalenders (Schema-Grundlage
|
||||
der SV-Tage-Umrechnung: 5-AT-Woche, 6-WT-Woche, Teilzeitwoche)."""
|
||||
self.ensure_one()
|
||||
calendar = self.version_id.resource_calendar_id
|
||||
days = {int(att.dayofweek) for att in calendar.attendance_ids} \
|
||||
if calendar else set()
|
||||
return len(days) or 5
|
||||
|
||||
def _at_end_sv_tage(self, tage):
|
||||
"""SV-Tage aus abzurechnenden Urlaubstagen (Verwaltungspraxis
|
||||
lb-url-15): je volle Woche à N Arbeitstage werden 7−N
|
||||
Kalendertage hinzugerechnet (5-AT-Woche +2, 6-WT-Woche +1,
|
||||
2-Tage-Teilzeitwoche +5) — nur ganze Wochenblöcke."""
|
||||
self.ensure_one()
|
||||
at_woche = self._at_end_arbeitstage_woche()
|
||||
blocks = int(tage // at_woche)
|
||||
return tage + blocks * (7 - at_woche)
|
||||
|
||||
def _at_end_verlaengerungs_monate(self, sv_tage, start):
|
||||
"""[(Monatsanfang, Tage im Monat)] eines Verlängerungsfensters
|
||||
ab dem übergebenen Starttag (§ 11 Abs 2 ASVG)."""
|
||||
self.ensure_one()
|
||||
ergebnis = {}
|
||||
rest = int(sv_tage)
|
||||
tag = start
|
||||
while rest > 0:
|
||||
monatsende = (tag.replace(day=28) + timedelta(days=4)) \
|
||||
.replace(day=1) - timedelta(days=1)
|
||||
tage_dabei = min((monatsende - tag).days + 1, rest)
|
||||
monat = tag.replace(day=1)
|
||||
ergebnis[monat] = ergebnis.get(monat, 0) + tage_dabei
|
||||
tag = monatsende + timedelta(days=1)
|
||||
rest -= tage_dabei
|
||||
return sorted(ergebnis.items())
|
||||
|
||||
def _at_end_rule_verlaengerung(self, rule, result_rules=None):
|
||||
"""[(Monatsanfang, Tage, Anteil)] der Regel-Basis nach § 11
|
||||
Abs 2: die Abgangsentschädigung belegt ZUERST die (fiktive)
|
||||
Kündigungsfrist, die UEL SCHLIESSLICH die Urlaubstage — beide
|
||||
Fenster laufen ab dem Tag nach dem arbeitsrechtlichen Ende
|
||||
hintereinander (Gesetzeswortlaut: „zunächst die
|
||||
Kündigungsentschädigung und im Anschluss die Ersatzleistung")."""
|
||||
self.ensure_one()
|
||||
start = self._at_end_arbeitsrechtliches_ende() + timedelta(days=1)
|
||||
if rule.l10n_at_sv_verlaengerung == 'urlaubsersatz':
|
||||
ffrist = self._at_input_amount('ATP_ABGANG_FFRIST_TAGE')
|
||||
if ffrist:
|
||||
start += timedelta(days=int(ffrist))
|
||||
tage = self._at_end_sv_tage(self._at_uel_tage())
|
||||
else:
|
||||
ffrist = self._at_input_amount('ATP_ABGANG_FFRIST_TAGE')
|
||||
tage = int(ffrist) if ffrist else 0
|
||||
monate = self._at_end_verlaengerungs_monate(tage, start)
|
||||
if not monate:
|
||||
return []
|
||||
gesamt = sum(tage for _monat, tage in monate)
|
||||
return [(monat, tage, tage / float(gesamt))
|
||||
for monat, tage in monate]
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# Eingabe-Helfer
|
||||
# ------------------------------------------------------------------
|
||||
def _at_input_amount(self, code):
|
||||
self.ensure_one()
|
||||
linie = self.input_line_ids.filtered(
|
||||
lambda i: i.input_type_id.code == code)
|
||||
return linie[:1].amount or 0.0
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# Abfertigung Alt — §§ 23/23a AngG, § 67 Abs 3 EStG
|
||||
# ------------------------------------------------------------------
|
||||
def _at_abf_alt_staffel(self, dienstzeit_monate=None):
|
||||
"""Arbeitsrechtlicher Grundfaktor nach § 23 Abs 1 AngG."""
|
||||
self.ensure_one()
|
||||
monate = dienstzeit_monate
|
||||
if monate is None:
|
||||
monate = self.l10n_at_abf_alt_dienstzeit_monate
|
||||
staffel = self._l10n_at_param('at_endabrechnung').get(
|
||||
'abfertigung_alt_staffel', [])
|
||||
mehrfach = 0.0
|
||||
for grenze, faktor in staffel:
|
||||
if monate >= int(grenze):
|
||||
mehrfach = float(faktor)
|
||||
return mehrfach
|
||||
|
||||
def _at_abf_alt_mehrfach_vorschlag(self, dienstzeit_monate=None,
|
||||
anspruchsart=None):
|
||||
"""§-23-Faktor mit Halb-/Deckelregeln für Elternaustritt/Tod."""
|
||||
self.ensure_one()
|
||||
art = anspruchsart or self.l10n_at_abf_alt_anspruchsart
|
||||
monate = dienstzeit_monate
|
||||
if monate is None:
|
||||
monate = self.l10n_at_abf_alt_dienstzeit_monate
|
||||
mehrfach = self._at_abf_alt_staffel(monate)
|
||||
if art == 'eltern':
|
||||
if monate < 60:
|
||||
return 0.0
|
||||
return min(mehrfach / 2.0, 3.0) if mehrfach else 0.0
|
||||
if art == 'tod':
|
||||
return mehrfach / 2.0
|
||||
return mehrfach
|
||||
|
||||
def _at_abf_alt_betrag(self, result_rules=None):
|
||||
"""Gesetzliche Alt-Abfertigung als eigene Bezugszeile."""
|
||||
self.ensure_one()
|
||||
return self._at_input_amount('ATP_ABF_ALT')
|
||||
|
||||
def _at_abf_alt_steuer_6(self, result_rules=None):
|
||||
self.ensure_one()
|
||||
satz = float(self._l10n_at_param(
|
||||
'at_endabrechnung')['abfertigung_steuersatz'])
|
||||
return max(self._at_abf_alt_betrag(result_rules), 0.0) * satz / 100.0
|
||||
|
||||
def _at_abf_alt_steuer_vervielfachung(self, result_rules=None):
|
||||
"""§ 67 Abs 3: Monats-Tarif-LSt × steuerlicher Vervielfacher.
|
||||
|
||||
Der steuerliche Vervielfacher ist Abfertigungsbetrag dividiert
|
||||
durch den laufenden Arbeitslohn. Er kann vom arbeitsrechtlichen
|
||||
Staffel-Faktor abweichen, weil die Abfertigungsbasis etwa aliquote
|
||||
Sonderzahlungen enthält (lb-end-01, RF 21 Dienstjahre: 10,5 statt 9).
|
||||
"""
|
||||
self.ensure_one()
|
||||
betrag = self._at_abf_alt_betrag(result_rules)
|
||||
laufend = self.l10n_at_abf_alt_laufender_arbeitslohn
|
||||
if betrag <= 0 or laufend <= 0:
|
||||
return self._at_abf_alt_steuer_6(result_rules)
|
||||
vervielfacher = betrag / laufend
|
||||
return self.l10n_at_abf_alt_monatslohnsteuer * vervielfacher
|
||||
|
||||
def _at_abf_alt_lohnsteuer(self, result_rules=None):
|
||||
"""Zwingend günstigere Steuer aus Vervielfachung und 6 %."""
|
||||
self.ensure_one()
|
||||
if self._at_abf_alt_betrag(result_rules) <= 0:
|
||||
return 0.0
|
||||
return min(self._at_abf_alt_steuer_vervielfachung(result_rules),
|
||||
self._at_abf_alt_steuer_6(result_rules))
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# Freiwillige Abfertigung — § 67 Abs 6 EStG (Viertel-/Zwölftelregelung)
|
||||
# ------------------------------------------------------------------
|
||||
def _at_bezuege_12_monate(self):
|
||||
"""Laufende Bezüge der letzten zwölf Monate (§ 67 Abs 6 Z 1/2):
|
||||
validierte Vormonats-Läufe plus eigene Zeilen — ohne den als
|
||||
Abs-6-Überhang gekennzeichneten Betrag (das ist ein sonstiger
|
||||
Bezug, kein laufender) und ohne §-26-Z-4-Reisevergütungen;
|
||||
Sonderzahlungen sind ohnehin nicht bemessung „laufend“
|
||||
(lb-end-13)."""
|
||||
self.ensure_one()
|
||||
start = (self.date_from - relativedelta(months=11)).replace(day=1)
|
||||
vor_slips = self.env['hr.payslip'].search([
|
||||
('employee_id', '=', self.employee_id.id),
|
||||
('id', '!=', self.id),
|
||||
('date_from', '>=', start),
|
||||
('date_from', '<', self.date_from.replace(day=1)),
|
||||
]).filtered(lambda p: p.state not in ('draft', 'cancel'))
|
||||
total = 0.0
|
||||
for slip in list(vor_slips) + [self]:
|
||||
for line in slip.line_ids:
|
||||
rule = line.salary_rule_id
|
||||
if rule.l10n_at_bemessung != 'laufend':
|
||||
continue
|
||||
if (rule.l10n_at_s67_abs6_ueberhang
|
||||
or rule.l10n_at_s26_z4_reise):
|
||||
continue
|
||||
total += line.total
|
||||
return total
|
||||
|
||||
def _at_abf_frei_zwoelftel(self):
|
||||
"""Zwölftel-Anzahl nach § 67 Abs 6 Z 2: die Dienstzeitstaffel
|
||||
entspricht den §-23-Grenzen (36→2/12 … 300→12/12)."""
|
||||
self.ensure_one()
|
||||
return self._at_abf_alt_staffel(
|
||||
self.l10n_at_abf_frei_dienstzeit_monate)
|
||||
|
||||
def _at_abf_frei_split(self, result_rules=None):
|
||||
"""§ 67 Abs 6: begünstigter Teil (Viertel- und Zwölftelregelung,
|
||||
gedeckelt 9 × bzw. n × 3 × monatliche HBG, Z-3-Kürzung um
|
||||
erhaltene Abfertigungen und den bestehenden gesetzlichen
|
||||
Anspruch) und der tarifische Überhang (Z 6)."""
|
||||
self.ensure_one()
|
||||
brutto = max(self._at_input_amount('ATP_ABF_FREI'), 0.0)
|
||||
basis = self.l10n_at_abf_frei_basis_12
|
||||
if basis <= 0:
|
||||
basis = self._at_bezuege_12_monate()
|
||||
basis = max(basis, 0.0)
|
||||
hbg = float(self._l10n_at_param('at_sv_hbg_monatlich'))
|
||||
z1 = min(basis / 4.0, 9.0 * hbg)
|
||||
zwoelftel = self._at_abf_frei_zwoelftel()
|
||||
z2 = min(basis * zwoelftel / 12.0, zwoelftel * 3.0 * hbg)
|
||||
kuerzung = max(
|
||||
self.l10n_at_abf_frei_erhaltene_abfertigungen
|
||||
+ self.l10n_at_abf_frei_gesetzlicher_anspruch, 0.0)
|
||||
z2 = max(z2 - kuerzung, 0.0)
|
||||
beguenstigt = min(brutto, z1 + z2)
|
||||
return {
|
||||
'basis': basis,
|
||||
'z1': z1,
|
||||
'z2': z2,
|
||||
'kuerzung': kuerzung,
|
||||
'beguenstigt': beguenstigt,
|
||||
'ueberhang': brutto - beguenstigt,
|
||||
}
|
||||
|
||||
def _at_abf_frei_beguenstigt(self, result_rules=None):
|
||||
self.ensure_one()
|
||||
return self._at_abf_frei_split(result_rules)['beguenstigt']
|
||||
|
||||
def _at_abf_frei_ueberhang(self, result_rules=None):
|
||||
self.ensure_one()
|
||||
return self._at_abf_frei_split(result_rules)['ueberhang']
|
||||
|
||||
def _at_abf_frei_lst_6(self, result_rules=None):
|
||||
"""6 % auf den begünstigten Teil (§ 67 Abs 6, fester Steuersatz)."""
|
||||
self.ensure_one()
|
||||
satz = float(self._l10n_at_param(
|
||||
'at_endabrechnung')['abfertigung_steuersatz'])
|
||||
return self._at_abf_frei_beguenstigt(result_rules) * satz / 100.0
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# Urlaubsersatzleistung — § 67 Abs 8 lit d, lb-url-15/16
|
||||
# ------------------------------------------------------------------
|
||||
def _at_uel_tage(self):
|
||||
"""Offene Urlaubstage (Arbeitstage; keine Rundung, lb-url-16)."""
|
||||
self.ensure_one()
|
||||
return self._at_input_amount('ATP_UEL_TAGE')
|
||||
|
||||
def _at_uel_divisor(self):
|
||||
"""Tagewert-Divisor: /26 bei Werktags-, /22 bei 5-AT-Kalender
|
||||
(lb-url-16)."""
|
||||
self.ensure_one()
|
||||
params = self._l10n_at_param('at_endabrechnung')
|
||||
if self._at_end_arbeitstage_woche() >= 6:
|
||||
return float(params['divisor_werktage'])
|
||||
return float(params['divisor_arbeitstage'])
|
||||
|
||||
def _at_uel_lfd(self):
|
||||
"""UEL-laufender Anteil: Tage × Monatsentgelt / Divisor —
|
||||
läuft als laufender Bezug durch den Tarif des Austrittsmonats
|
||||
und erhöht das Jahressechstel (nativ über bemessung='laufend')."""
|
||||
self.ensure_one()
|
||||
return self._at_uel_tage() * self._at_kv_gehalt_basis() \
|
||||
/ self._at_uel_divisor()
|
||||
|
||||
def _at_uel_sz_tageswert(self):
|
||||
"""SZ-Anteil je Urlaubstag: 2 Sonderzahlungen à Monatsentgelt
|
||||
pro Jahr (KV § 11) → je Monat 2 × SZ-Basis/12, als Tageswert
|
||||
(auch bei bereits überaliquot bezahlten SZ, lb-url-16)."""
|
||||
self.ensure_one()
|
||||
sz_monat = 2.0 * self._at_sz_basis(self.date_to) / 12.0
|
||||
return sz_monat / self._at_uel_divisor()
|
||||
|
||||
def _at_uel_sz(self):
|
||||
"""UEL-Sonderzahlungsanteil: Tage × SZ-Tageswert."""
|
||||
self.ensure_one()
|
||||
return self._at_uel_tage() * self._at_uel_sz_tageswert()
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# Abgangsentschädigung — § 67 Abs 8 lit b (Fünftelregelung)
|
||||
# ------------------------------------------------------------------
|
||||
def _at_fuenftel_regeln(self):
|
||||
self.ensure_one()
|
||||
return self.struct_id.rule_ids.filtered(
|
||||
lambda rule: rule.l10n_at_s67_fuenftel)
|
||||
|
||||
def _at_fuenftel_total(self, result_rules=None):
|
||||
self.ensure_one()
|
||||
total = 0.0
|
||||
for rule in self._at_fuenftel_regeln():
|
||||
if result_rules is not None:
|
||||
if rule.code in result_rules:
|
||||
total += result_rules[rule.code]['total']
|
||||
else:
|
||||
linie = self.line_ids.filtered(lambda l: l.code == rule.code)
|
||||
total += sum(linie.mapped('total'))
|
||||
# § 67 Abs 8 lit a: der über den BV-6-%-Deckel hinausgehende
|
||||
# Teil der Vergleichssumme fällt in die Fünftelregelung zurück.
|
||||
total += self._at_vergleich_bv_ueberhang(result_rules)
|
||||
return total
|
||||
|
||||
def _at_fuenftel_tarif_basis(self, result_rules=None):
|
||||
"""Tarifischer Teil (4/5) der Fünftel-Bezüge: Bemessung nach
|
||||
Abzug der darauf entfallenden §-62-Beiträge (approximiert über
|
||||
den effektiven DN-Satz der laufenden Basis; die HBG-Caps der
|
||||
Verlängerungsmonate werden im SV-Pfad separat geführt); ein
|
||||
Fünftel ist steuerfrei, gedeckelt mit einem Fünftel des
|
||||
Neunfachen der monatlichen HBG (lb-end-21: 2026 6.930 × 9/5
|
||||
= 12.474)."""
|
||||
self.ensure_one()
|
||||
total = self._at_fuenftel_total(result_rules)
|
||||
if total <= 0:
|
||||
return 0.0
|
||||
satz = sum(self._l10n_at_sv_satz(
|
||||
'dn', komponente,
|
||||
staffel_basis=self._l10n_at_sv_basis_roh(result_rules))
|
||||
for komponente in ('kv', 'pv', 'av', 'ak', 'wf'))
|
||||
bemessung = max(total * (1.0 - satz / 100.0), 0.0)
|
||||
deckel = float(self._l10n_at_param('at_sv_hbg_monatlich')) \
|
||||
* 9.0 / 5.0
|
||||
frei = min(bemessung / 5.0, deckel)
|
||||
return bemessung - frei
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# Vergleichssumme — § 67 Abs 8 lit a (Rest, BV-Anwartschafts-Teil)
|
||||
# ------------------------------------------------------------------
|
||||
def _at_vergleich_bv_total(self, result_rules=None):
|
||||
"""Summe der als BV-Anwartschafts-Teil gekennzeichneten
|
||||
Vergleichs-Zeilen (Zeiträume mit BV-Kassen-Anwartschaft,
|
||||
§ 67 Abs 8 lit a letzter Satz)."""
|
||||
self.ensure_one()
|
||||
total = 0.0
|
||||
for rule in self.struct_id.rule_ids:
|
||||
if not rule.l10n_at_vergleich_bv:
|
||||
continue
|
||||
if result_rules is not None:
|
||||
if rule.code in result_rules:
|
||||
total += result_rules[rule.code]['total']
|
||||
else:
|
||||
total += sum(self.line_ids.filtered(
|
||||
lambda l, c=rule.code: l.code == c).mapped('total'))
|
||||
return total
|
||||
|
||||
def _at_vergleich_bv_beguenstigt(self, result_rules=None):
|
||||
"""Bis zum Deckel (2026: 7 500 €) begünstigter Teil — 6 %-Fahrspur
|
||||
(parametrisiert: § 67 Abs 8 unterliegt der Inflationsanpassung
|
||||
§ 33a/§ 124b EStG)."""
|
||||
self.ensure_one()
|
||||
deckel = float(self._l10n_at_param('at_lst_67_abs8_vergleich_bv'))
|
||||
return min(self._at_vergleich_bv_total(result_rules), deckel)
|
||||
|
||||
def _at_vergleich_bv_ueberhang(self, result_rules=None):
|
||||
"""Über den BV-Deckel hinausgehender Teil — fällt in die
|
||||
Fünftelregelung zurück (erster Satz des lit a)."""
|
||||
self.ensure_one()
|
||||
deckel = float(self._l10n_at_param('at_lst_67_abs8_vergleich_bv'))
|
||||
return max(self._at_vergleich_bv_total(result_rules) - deckel, 0.0)
|
||||
|
||||
def _at_vergleich_bv_lst_6(self, result_rules=None):
|
||||
"""6 % auf den begünstigten BV-Teil nach anteiligem §-62-Abzug
|
||||
(LStR Rz 1102b: die SV-Beiträge sind den Teilbeträgen
|
||||
anteilsmäßig zuzuordnen — approximiert über den effektiven
|
||||
DN-Satz der laufenden Basis, wie im Fünftelpfad)."""
|
||||
self.ensure_one()
|
||||
beguenstigt = self._at_vergleich_bv_beguenstigt(result_rules)
|
||||
if beguenstigt <= 0:
|
||||
return 0.0
|
||||
satz = sum(self._l10n_at_sv_satz(
|
||||
'dn', komponente,
|
||||
staffel_basis=self._l10n_at_sv_basis_roh(result_rules))
|
||||
for komponente in ('kv', 'pv', 'av', 'ak', 'wf'))
|
||||
bemessung = beguenstigt * (1.0 - satz / 100.0)
|
||||
steuersatz = float(self._l10n_at_param(
|
||||
'at_endabrechnung')['abfertigung_steuersatz'])
|
||||
return bemessung * steuersatz / 100.0
|
||||
|
||||
def _at_fuenftel_frei_betr(self, result_rules=None):
|
||||
"""Steuerfreies Fünftel der Fünftel-Bezüge (inkl. BV-Überhang),
|
||||
gedeckelt mit einem Fünftel des Neunfachen der monatlichen HBG
|
||||
(lb-end-21: 2026 6.930 × 9/5 = 12.474) — getrennt vom
|
||||
tarifischen Rest für die Wizard-Vorschau."""
|
||||
self.ensure_one()
|
||||
total = self._at_fuenftel_total(result_rules)
|
||||
if total <= 0:
|
||||
return 0.0
|
||||
satz = sum(self._l10n_at_sv_satz(
|
||||
'dn', komponente,
|
||||
staffel_basis=self._l10n_at_sv_basis_roh(result_rules))
|
||||
for komponente in ('kv', 'pv', 'av', 'ak', 'wf'))
|
||||
bemessung = max(total * (1.0 - satz / 100.0), 0.0)
|
||||
deckel = float(self._l10n_at_param('at_sv_hbg_monatlich')) \
|
||||
* 9.0 / 5.0
|
||||
return min(bemessung / 5.0, deckel)
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# Engine-Anbindung: Tarif-Teil ohne Sechstel, LNK-Pflicht, SV-Umlegung
|
||||
# ------------------------------------------------------------------
|
||||
def _l10n_at_bemessung_laufen(self, result_rules=None):
|
||||
basis = super()._l10n_at_bemessung_laufen(result_rules)
|
||||
# § 67 Abs 8 lit b: 4/5 tarifisch im Zuflussmonat; die Regel
|
||||
# selbst ist neutral und erhöht brutto('laufend') nicht → kein
|
||||
# Sechstel-Effekt (Abs 2 nicht anzuwenden).
|
||||
return basis + self._at_fuenftel_tarif_basis(result_rules)
|
||||
|
||||
def _at_lnk_basis(self, steuer, result_rules=None):
|
||||
"""Upstream-Überschreibung (Muster account_posting_private;
|
||||
Vorlage payslip_private._at_lnk_basis — bei Änderungen dort
|
||||
gegen diesen Pin neu abgleichen): Kündigungsentschädigungen und
|
||||
Vergleichssummen sind Arbeitslöhne iSd § 41 Abs 3 FLAG und
|
||||
unterliegen NICHT den Abs-4-Ausschlüssen (lit b nennt nur
|
||||
§ 67 Abs 3 und 6 — der lit-a-BV-Teil ist ebenfalls nicht
|
||||
ausgenommen) — sie sind VOR der Freibetragsstaffel in die
|
||||
LNK-Basis aufzunehmen."""
|
||||
self.ensure_one()
|
||||
basis = (self._l10n_at_brutto('laufend', result_rules)
|
||||
+ self._l10n_at_brutto('sonstig', result_rules)
|
||||
- self._l10n_at_st_frei_freie_laufen(result_rules))
|
||||
for rule in self.struct_id.rule_ids:
|
||||
if (rule.l10n_at_bemessung in ('laufend', 'sonstig')
|
||||
and rule.l10n_at_s67_abs in ('abs3', 'abs6')):
|
||||
if result_rules is not None and rule.code in result_rules:
|
||||
basis -= result_rules[rule.code]['total']
|
||||
elif result_rules is None:
|
||||
linie = self.line_ids.filtered(
|
||||
lambda l: l.code == rule.code)
|
||||
basis -= sum(linie.mapped('total'))
|
||||
basis += self._at_fuenftel_total(result_rules)
|
||||
# BV-Anwartschafts-Teil: begünstigter ≤-Deckel-Teil hier, der
|
||||
# Überhang läuft bereits über _at_fuenftel_total — zusammen
|
||||
# die volle Vergleichssumme, LNK-pflichtig (lb-end-20).
|
||||
basis += self._at_vergleich_bv_beguenstigt(result_rules)
|
||||
basis = max(basis, 0.0)
|
||||
if steuer in ('flaf', 'dz'):
|
||||
version = self.version_id
|
||||
if (version.l10n_at_lnkp_frei_ab
|
||||
and self.date_from >= version.l10n_at_lnkp_frei_ab):
|
||||
return 0.0
|
||||
freibetrag = self.env['hr.rule.parameter']._get_parameter_from_code(
|
||||
'at_lnk_freibetrag', self.date_to, raise_if_not_found=False) or {}
|
||||
grenze = float(freibetrag.get('grenze', 0.0))
|
||||
if basis <= 0.0:
|
||||
return 0.0
|
||||
if basis <= grenze:
|
||||
basis -= float(freibetrag.get('freibetrag', 0.0))
|
||||
return max(basis, 0.0)
|
||||
|
||||
def _l10n_at_sv_basis_laufen_monate(self, result_rules=None):
|
||||
"""Upstream-Überschreibung (Muster account_posting_private;
|
||||
Vorlage l10n_at_hr_payroll.sozialversicherung — bei Odoo- oder
|
||||
Kern-Upgrades gegen diesen Pin neu abgleichen): identischer
|
||||
Ablauf wie der Kern, zusätzlich werden Regeln mit AT-SV-
|
||||
Verlängerung tageproportional auf die Verlängerungsmonate
|
||||
gelegt. Der Standardanteil jedes Monats bleibt auf die volle
|
||||
monatliche HBG gedeckelt, der Verlängerungsanteil auf den
|
||||
Tageswert (monatliche HBG × Verlängerungstage/30, lb-url-15);
|
||||
die Fenster laufen sequenziell (Abgang zuerst, UEL danach).
|
||||
AP14-B: die später fällige Prämie (PRAM_END_TARIF) rollt über
|
||||
l10n_at_pram_beitragsmonat in den Beitragsmonat des
|
||||
Austrittsjahres (E-MVB 044, lb-end-18); die LSt bleibt im
|
||||
Zuflussmonat (§ 67 Abs 10)."""
|
||||
self.ensure_one()
|
||||
gruppen = {}
|
||||
verlaengerung = {}
|
||||
tage_pro_monat = {}
|
||||
for rule in self.struct_id.rule_ids:
|
||||
if self._l10n_at_sv_art(rule) != 'laufend':
|
||||
continue
|
||||
werte = None
|
||||
if result_rules is not None:
|
||||
if rule.code in result_rules:
|
||||
werte = result_rules[rule.code]
|
||||
else:
|
||||
linie = self.line_ids.filtered(
|
||||
lambda l: l.code == rule.code)
|
||||
if linie:
|
||||
werte = {'total': sum(linie.mapped('total'))}
|
||||
if not werte:
|
||||
continue
|
||||
if rule.l10n_at_sv_verlaengerung != 'keine':
|
||||
for monat, tage, anteil in \
|
||||
self._at_end_rule_verlaengerung(rule, result_rules):
|
||||
verlaengerung[monat] = verlaengerung.get(monat, 0.0) \
|
||||
+ werte['total'] * anteil
|
||||
tage_pro_monat[monat] = \
|
||||
tage_pro_monat.get(monat, 0) + tage
|
||||
continue
|
||||
if rule.code == 'PRAM_END_TARIF' \
|
||||
and self.l10n_at_pram_beitragsmonat:
|
||||
monat = self.l10n_at_pram_beitragsmonat.replace(day=1)
|
||||
else:
|
||||
monat = (rule.l10n_at_beitragsmonat or self.date_from) \
|
||||
.replace(day=1)
|
||||
gruppen[monat] = gruppen.get(monat, 0.0) + werte['total']
|
||||
standard = self.date_from.replace(day=1)
|
||||
if standard in gruppen:
|
||||
gruppen[standard] -= self._l10n_at_sv49_freie_laufen(
|
||||
result_rules)
|
||||
ergebnis = []
|
||||
for monat in sorted(set(gruppen) | set(verlaengerung)):
|
||||
hbg = float(self._l10n_at_param('at_sv_hbg_monatlich', monat))
|
||||
basis = min(max(gruppen.get(monat, 0.0), 0.0), hbg)
|
||||
if monat in verlaengerung:
|
||||
tageswert = hbg * tage_pro_monat[monat] / 30.0
|
||||
basis += min(max(verlaengerung[monat], 0.0), tageswert)
|
||||
ergebnis.append((monat, basis))
|
||||
return ergebnis
|
||||
@@ -0,0 +1,135 @@
|
||||
# Part of the odoo-at-payroll project. License: LGPL-3.
|
||||
"""AP16: Karenz-/Familien-Freistellungen — unbezahlte Karenz-Arten
|
||||
(Elternkarenz generisch, Bildungs-, Familienhospiz-, Kinderrehabilita-
|
||||
tions- und Pflegekarenz, Papa-Monat) mit Entgelt-Stopp, eSV-An- und
|
||||
Abmeldeereignissen und der BMSVG-§-7-Brücke.
|
||||
|
||||
Am Originalwortlaut verifiziert (.ris/, 8.13 freigegeben 2026-09-15):
|
||||
- Alle Voll-Freistellungen sind entgeltlos (AVRAG §§ 11, 14a, 14b,
|
||||
14e, 14c; VKG § 1a) — Entgelt-Stopp je Arbeitstag über die
|
||||
negative Regel ``KARENZ_ENTGELT`` (Muster MSCH_ENTGELT, AP7).
|
||||
- eSV: Abmeldung zum Ende des Entgeltanspruchs (Tag vor dem
|
||||
Karenzbeginn), Anmeldung zum ersten Arbeitstag nach dem Ende;
|
||||
Papamonat/Familienzeit: Abmeldung am Tag vor Beginn (§ 11 Abs 3
|
||||
lit a ASVG, lb-pap-01). Karenzart-Strings der Sonderformate
|
||||
„Familienhospizkarenz/Pflegekarenz An-/Abmeldung" (lb-kzs-05)
|
||||
laufen als Protokoll-Info — erweiterte eSV-Sonderformate = GP7-Rest.
|
||||
- BV: Elternkarenz/KBG zu Lasten FLAF (§ 7 Abs 5 BMSVG), Familien-
|
||||
hospiz-/Pflegekarenz zu Lasten des Bundes (§ 7 Abs 6 BMSVG,
|
||||
Fiktivgrundlage KBG § 5b Abs 1 KBGG idF vor BGBl I 53/2016);
|
||||
Pflegeteilzeit: AG-Beitrag auf Vor-Reduzierungs-Entgelt (§ 6 Abs 4
|
||||
BMSVG, Feld l10n_at_bv_vor_entgelt).
|
||||
- Dienstzeit: Papamonat ist ANZURECHNEN (§ 1a Abs 7 VKG iVm § 15f
|
||||
MSchG), Bildungs-/Pflegekarenz grundsätzlich NICHT (§ 11 Abs 2,
|
||||
§ 14c/14d AVRAG) — Wizard-bestätigte Dienstzeiten, dokumentiert.
|
||||
"""
|
||||
from datetime import timedelta
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
# Unbezahlte Karenz-WETs (generisch + AP16-Spezies)
|
||||
_KARENZ_WET = 'ATP_KARENZ'
|
||||
_BILDUNGSKARENZ_WET = 'ATP_BILDUNGSKARENZ'
|
||||
_HOSPIZKARENZ_WET = 'ATP_HOSPIZKARENZ'
|
||||
_KINDER_KRANK_WET = 'ATP_KINDERKRANK'
|
||||
_KINDER_REHAB_WET = 'ATP_KINDERREHAB'
|
||||
_PFLEGEKARENZ_WET = 'ATP_PFLEGEKARENZ'
|
||||
_PAPAMONAT_WET = 'ATP_PAPAMONAT'
|
||||
|
||||
KARENZ_ARTEN = {
|
||||
_KARENZ_WET: 'Elternkarenz (MSchG/VKG)',
|
||||
_BILDUNGSKARENZ_WET: 'Bildungskarenz (§ 11 AVRAG)',
|
||||
_HOSPIZKARENZ_WET: 'Familienhospizkarenz — Sterbebegleitung '
|
||||
'(§ 14a AVRAG)',
|
||||
_KINDER_KRANK_WET: 'Familienhospizkarenz — Begleitung schwerst '
|
||||
'erkrankter Kinder (§ 14b AVRAG)',
|
||||
_KINDER_REHAB_WET: 'Freistellung Kinderrehabilitation '
|
||||
'(§ 14e AVRAG)',
|
||||
_PFLEGEKARENZ_WET: 'Pflegekarenz (§ 14c AVRAG)',
|
||||
_PAPAMONAT_WET: 'Papa-Monat/Familienzeit (§ 1a VKG / FamZeitbG)',
|
||||
}
|
||||
|
||||
|
||||
class HrPayslip(models.Model):
|
||||
_inherit = 'hr.payslip'
|
||||
|
||||
def _at_karenz_wet_codes(self):
|
||||
"""Codes der unbezahlten Karenz-Freistellungen (inkl. generisch
|
||||
und AP16-Spezies)."""
|
||||
self.ensure_one()
|
||||
return list(KARENZ_ARTEN)
|
||||
|
||||
def _at_karenz_leaves(self):
|
||||
"""Validierte Karenz-Freistellungen: [(von, bis, wett_code)]
|
||||
chronologisch."""
|
||||
self.ensure_one()
|
||||
typen = self.env['hr.leave.type'].search([
|
||||
('work_entry_type_id.code', 'in', self._at_karenz_wet_codes())
|
||||
])
|
||||
leaves = self.env['hr.leave'].search([
|
||||
('employee_id', '=', self.employee_id.id),
|
||||
('holiday_status_id', 'in', typen.ids),
|
||||
('state', 'in', ('validate', 'validate1')),
|
||||
])
|
||||
ergebnis = []
|
||||
for leave in leaves:
|
||||
wett = leave.holiday_status_id.work_entry_type_id.code
|
||||
ergebnis.append((leave.request_date_from,
|
||||
leave.request_date_to, wett))
|
||||
return [(von, bis, wett) for von, bis, wett in ergebnis
|
||||
if von and bis]
|
||||
|
||||
def _at_karenz_status(self):
|
||||
"""Karenz-Tage je Abrechnungsperiode über alle unbezahlten
|
||||
Karenz-Arten: {'kalendertage', 'arbeitstage', 'arten'} — None
|
||||
ohne Freistellung im Zeitraum (Muster _at_msch_status)."""
|
||||
self.ensure_one()
|
||||
codes = set(self._at_karenz_wet_codes())
|
||||
tage = {}
|
||||
tag_art = {}
|
||||
for von, bis, wett in self._at_karenz_leaves():
|
||||
tag = fields.Date.to_date(von)
|
||||
ende = fields.Date.to_date(bis)
|
||||
while tag <= ende:
|
||||
tage[tag] = True
|
||||
tag_art[tag] = wett
|
||||
tag += timedelta(days=1)
|
||||
in_periode = sorted(
|
||||
tag for tag in tage
|
||||
if self.date_from <= tag <= self.date_to)
|
||||
if not in_periode:
|
||||
return None
|
||||
eintraege = self.env['hr.work.entry'].search([
|
||||
('employee_id', '=', self.employee_id.id),
|
||||
('date', '>=', self.date_from),
|
||||
('date', '<=', self.date_to),
|
||||
('state', '!=', 'cancelled'),
|
||||
('work_entry_type_id.code', 'in', list(codes)),
|
||||
])
|
||||
arten_aktuell = {tag_art[tag] for tag in in_periode}
|
||||
return {
|
||||
'kalendertage': in_periode,
|
||||
'arbeitstage': sorted({e.date for e in eintraege}),
|
||||
'arten': sorted(KARENZ_ARTEN[c] for c in arten_aktuell),
|
||||
}
|
||||
|
||||
def _at_karenz_entgelt_tage(self, result_rules=None):
|
||||
"""Arbeitstage der unbezahlten Karenz im Abrechnungszeitraum
|
||||
(Entgelt-Stopp-Basis der Regel KARENZ_ENTGELT)."""
|
||||
self.ensure_one()
|
||||
status = self._at_karenz_status()
|
||||
if not status:
|
||||
return 0
|
||||
return len(status['arbeitstage'])
|
||||
|
||||
|
||||
class HrVersion(models.Model):
|
||||
_inherit = 'hr.version'
|
||||
|
||||
l10n_at_bv_vor_entgelt = fields.Monetary(
|
||||
string='BV-Basis vor Arbeitszeit-Reduktion (§ 6 Abs 4 BMSVG)',
|
||||
currency_field='currency_id',
|
||||
help='Monatsentgelt vor der Reduzierung (z. B. Pflegeteilzeit '
|
||||
'§ 14d AVRAG): der BV-Beitrag läuft während der Maßnahme '
|
||||
'auf Grundlage der Arbeitszeit vor Herabsetzung '
|
||||
'(§ 6 Abs 4 BMSVG). Leer = laufende Basis.')
|
||||
@@ -36,11 +36,27 @@ Fristberechnung aus dem ärztlichen Zeugnis bleibt beim Mandanten.
|
||||
Urlaubsanspruch erwächst während des Wochengeldbezugs (lb-msf-03);
|
||||
Sonderwochengeld (§ 163 ASVG, Günstigkeitsvergleich § 162 Abs 3b) =
|
||||
dokumentierte Option.
|
||||
|
||||
AP16 (8.13): Karenz-Brücke nach § 7 Abs 4 Z 1–3 BMSVG — folgt das
|
||||
neuerliche Beschäftigungsverbot unmittelbar auf eine Karenz (Z 1) oder
|
||||
nach einer kürzeren als dreimonatigen Beschäftigung (Z 2), ist die
|
||||
Bemessungsgrundlage die des Kalendermonats vor dem der Karenz
|
||||
unmittelbar vorangegangenen Beschäftigungsverbots; Z 3 (neues DV nach
|
||||
Beendigung des karenzierten DV, < 3 Monate): der letzte volle
|
||||
Kalendermonat vor dem neuerlichen Verbot. BV während des KBG-Bezugs
|
||||
läuft zu Lasten des FLAF (§ 7 Abs 5), in der Familienhospiz-/Pflege-
|
||||
karenz zu Lasten des Bundes (§ 7 Abs 6) — keine AG-Regeln; das Ruhen
|
||||
des Wochengeldes (§ 166 ASVG) und das Sonderwochengeld während
|
||||
einer Karenz (§ 163 ASVG) werden als Info/Warnung ausgewiesen.
|
||||
"""
|
||||
from datetime import date, timedelta
|
||||
|
||||
from dateutil.relativedelta import relativedelta
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
from .karenz import KARENZ_ARTEN
|
||||
|
||||
_MSCH_WET = 'ATP_MSCH'
|
||||
|
||||
|
||||
@@ -61,13 +77,21 @@ class HrPayslip(models.Model):
|
||||
slip.l10n_at_msch_info = ''
|
||||
continue
|
||||
wochengeld = slip._at_wochengeld()
|
||||
slip.l10n_at_msch_info = (
|
||||
info = (
|
||||
'%d Kalendertage Bezug · WG %.2f/Kalendertag '
|
||||
'(Ø-Netto %.2f + %.0f %%)' % (
|
||||
len(msch['kalendertage']),
|
||||
wochengeld['tagesatz'],
|
||||
wochengeld['netto_drei_monate'],
|
||||
wochengeld['sz_prozent']))
|
||||
if slip._at_msch_sonderwochengeld():
|
||||
info += (' · Sonderwochengeld (§ 163 ASVG) statt '
|
||||
'Wochengeld — ÖGK, erhöhtes Krankengeld '
|
||||
'(§ 141 Abs 2, § 125 iVm § 108f)')
|
||||
warnungen = slip._at_msch_ruhen_warnungen()
|
||||
if warnungen:
|
||||
info += ' · Ruhen: ' + '; '.join(warnungen)
|
||||
slip.l10n_at_msch_info = info
|
||||
|
||||
def _at_msch_leaves(self):
|
||||
"""Validierte Mutterschutz-Frist-Abwesenheiten (ATP_MSCH)."""
|
||||
@@ -120,17 +144,109 @@ class HrPayslip(models.Model):
|
||||
'episode_beginn': block,
|
||||
}
|
||||
|
||||
def _at_msch_referenz_monate(self, episode_beginn):
|
||||
"""Die drei (vollen) Kalendermonate vor dem Versicherungsfall
|
||||
der Mutterschaft (§ 162 Abs 3: letzte 13 Wochen; § 7 Abs 4
|
||||
BMSVG: letzte drei Kalendermonate). Versicherungsfall im Monat
|
||||
X → Monate X-3, X-2, X-1 (aufsteigend)."""
|
||||
def _at_msch_sonderwochengeld(self):
|
||||
"""Sonderwochengeld statt Wochengeld (§ 163 ASVG, verifiziert):
|
||||
die Mutterschutz-Frist fällt in eine Karenz nach dem MSchG —
|
||||
kein Anspruch auf Wochengeld (§ 162), das Sonderwochengeld
|
||||
zahlt der Krankenversicherungsträger (erhöhtes Krankengeld
|
||||
§ 141 Abs 2, Bemessungsgrundlage § 125 aus dem Arbeits-
|
||||
verdienst vor dem Ende des letzten Entgeltanspruchs, mit
|
||||
§ 108f-Anpassung)."""
|
||||
self.ensure_one()
|
||||
msch = self._at_msch_status()
|
||||
if not msch:
|
||||
return False
|
||||
for von, bis, _wett in self._at_karenz_leaves():
|
||||
if any(von <= tag <= bis for tag in msch['kalendertage']):
|
||||
return True
|
||||
return False
|
||||
|
||||
def _at_msch_ruhen_warnungen(self):
|
||||
"""Ruhen des Wochengeldes (§ 166 ASVG, verifiziert) —
|
||||
Warnungen zu Fortbezug während der Frist:
|
||||
Z 2 Entgeltfortzahlung 100 % → Ruhen zur Gänze, 50 % →
|
||||
hälftig (Urlaubs-/UEL-/KE-Zeiten gelten nicht als weiterge-
|
||||
leistete Bezüge); Z 3 Erwerbstätigkeit und Z 4 Pflegekarenz-
|
||||
geld sind Bezugszeitraum-Daten (AEB/ÖGK-Seite, Hinweis)."""
|
||||
self.ensure_one()
|
||||
msch = self._at_msch_status()
|
||||
if not msch:
|
||||
return []
|
||||
tage = set(msch['kalendertage'])
|
||||
efz = self._at_efz_status()
|
||||
warnungen = []
|
||||
if efz:
|
||||
if any(tag in tage for tag in efz.get('voll_arbeitstage', [])):
|
||||
warnungen.append('Fortbezug > 50 % (Entgeltfortzahlung) '
|
||||
'— Ruhen zur Gänze (§ 166 Abs 1 Z 2)')
|
||||
elif any(tag in tage for tag in efz.get('halb_arbeitstage', [])):
|
||||
warnungen.append('Fortbezug = 50 % — Ruhen hälftig '
|
||||
'(§ 166 Abs 1 Z 2)')
|
||||
warnungen.append('Erwerbstätigkeit/Pflegekarenzgeld während der '
|
||||
'Frist prüfen (§ 166 Abs 1 Z 3/4)')
|
||||
return warnungen
|
||||
|
||||
def _at_msch_referenz_stichtag_und_anzahl(self, episode_beginn):
|
||||
"""(Stichtag, Referenz-Monatsanzahl) nach § 7 Abs 4 BMSVG mit
|
||||
Karenz-Brücke Z 1–3 (AP16):
|
||||
- Z 1/Z 2: endete eine Karenz innerhalb von drei Monaten vor
|
||||
dem neuerlichen Beschäftigungsverbot, gilt das der Karenz
|
||||
unmittelbar vorangegangene Beschäftigungsverbot als
|
||||
Bemessungsstichtag (Referenzmonate davor);
|
||||
- Z 3: neues DV binnen drei Monaten nach Beendigung des
|
||||
karenzierten DV (mit Karenz) → der letzte volle Kalendermonat
|
||||
vor dem neuerlichen Verbot als EINZELNER Referenzmonat
|
||||
(„volles Monatsentgelt");
|
||||
- sonst: Versicherungsfall selbst, drei Monate."""
|
||||
self.ensure_one()
|
||||
stichtag = episode_beginn or self.date_from
|
||||
grenze = stichtag - relativedelta(months=3)
|
||||
karenz_kandidat = None
|
||||
for von, bis, _wett in sorted(self._at_karenz_leaves(),
|
||||
key=lambda k: k[1], reverse=True):
|
||||
if grenze <= bis < stichtag:
|
||||
karenz_kandidat = (von, bis)
|
||||
break
|
||||
if karenz_kandidat:
|
||||
karenz_von = karenz_kandidat[0]
|
||||
frist = max(
|
||||
(m for m in self._at_msch_leaves()
|
||||
if m[1] <= karenz_von),
|
||||
key=lambda m: m[1], default=None)
|
||||
if frist:
|
||||
return frist[0], 3
|
||||
version = self.version_id
|
||||
vorher = self.env['hr.version'].search([
|
||||
('employee_id', '=', self.employee_id.id),
|
||||
('contract_date_end', '!=', False),
|
||||
('id', '!=', version.id),
|
||||
], order='contract_date_end desc', limit=1)
|
||||
if (vorher and vorher.contract_date_end
|
||||
and version.contract_date_start
|
||||
and vorher.contract_date_end
|
||||
<= version.contract_date_start
|
||||
and (version.contract_date_start
|
||||
- vorher.contract_date_end).days < 92
|
||||
and any(k[1] <= vorher.contract_date_end
|
||||
for k in self._at_karenz_leaves())):
|
||||
erster = date(stichtag.year, stichtag.month, 1)
|
||||
erster = (erster - timedelta(days=1)).replace(day=1)
|
||||
return erster, 1
|
||||
return stichtag, 3
|
||||
|
||||
def _at_msch_referenz_monate(self, episode_beginn):
|
||||
"""Referenzkalendermonate der fiktiven BV (§ 7 Abs 4 BMSVG:
|
||||
letzte drei Monate; Karenz-Brücke Z 1–3, AP16 — s.
|
||||
_at_msch_referenz_stichtag_und_anzahl; § 162 Abs 3: letzte
|
||||
13 Wochen). Versicherungsfall im Monat X → Monate X-3, X-2,
|
||||
X-1 (aufsteigend)."""
|
||||
self.ensure_one()
|
||||
stichtag, anzahl = self._at_msch_referenz_stichtag_und_anzahl(
|
||||
episode_beginn)
|
||||
erster = date(stichtag.year, stichtag.month, 1)
|
||||
monate = []
|
||||
hilf = erster
|
||||
for _ in range(3):
|
||||
for _ in range(anzahl):
|
||||
hilf = (hilf - timedelta(days=1)).replace(day=1)
|
||||
monate.append(hilf)
|
||||
return list(reversed(monate))
|
||||
|
||||
@@ -351,7 +351,8 @@ class HrPayslip(models.Model):
|
||||
+ self._l10n_at_brutto('sonstig', result_rules)
|
||||
- self._l10n_at_st_frei_freie_laufen(result_rules))
|
||||
for rule in self.struct_id.rule_ids:
|
||||
if rule.l10n_at_s67_abs in ('abs3', 'abs6'):
|
||||
if (rule.l10n_at_bemessung in ('laufend', 'sonstig')
|
||||
and rule.l10n_at_s67_abs in ('abs3', 'abs6')):
|
||||
if result_rules is not None and rule.code in result_rules:
|
||||
basis -= result_rules[rule.code]['total']
|
||||
elif result_rules is None:
|
||||
|
||||
@@ -322,7 +322,7 @@ class HrPayslip(models.Model):
|
||||
# ------------------------------------------------------------------
|
||||
def _at_pfa_rule_amount(self, result_rules, code):
|
||||
if result_rules is not None:
|
||||
werte = result_rules.get(code)
|
||||
werte = result_rules[code] if code in result_rules else None
|
||||
# result_rules enthält ungerundete Rule-Summen; die
|
||||
# Bezugsart ist der gerundete Zeilenbetrag (Cents) —
|
||||
# mit diesem wird auch die Pfändungsberechnungsgrundlage
|
||||
@@ -378,14 +378,17 @@ class HrPayslip(models.Model):
|
||||
if not rule.l10n_at_pfandung_beendigung:
|
||||
continue
|
||||
if result_rules is not None:
|
||||
werte = result_rules.get(rule.code)
|
||||
werte = result_rules[rule.code] \
|
||||
if rule.code in result_rules else None
|
||||
if werte:
|
||||
total += float(werte['total'])
|
||||
else:
|
||||
linie = self.line_ids.filtered(
|
||||
lambda l, c=rule.code: l.code == c)
|
||||
total += sum(linie.mapped('total'))
|
||||
return round(max(0.0, total), 2)
|
||||
steuer = sum(self._at_pfa_rule_amount(result_rules, c)
|
||||
for c in ('LST_ABF', 'LST_ABF_FREI'))
|
||||
return round(max(0.0, total - steuer), 2)
|
||||
raise UserError('Unbekannter Pfändungstopf: %s' % topf)
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
@@ -420,6 +423,7 @@ class HrPayslip(models.Model):
|
||||
total = self._at_pfaendung_masse(result_rules, 'laufend')
|
||||
total += self._at_pfaendung_masse(result_rules, 'sz13')
|
||||
total += self._at_pfaendung_masse(result_rules, 'sz14')
|
||||
total += self._at_pfaendung_masse(result_rules, 'beendigung')
|
||||
return round(total, 2)
|
||||
|
||||
def _at_pfaendung_kostenersatz(self, result_rules):
|
||||
|
||||
@@ -23,12 +23,15 @@ BVAB/BVJN aus dem GP5-BMSVG-Flag, VWAZ vereinbarte Wochenarbeitszeit
|
||||
(Stunden ×100, neu für Meldedaten ab 01.01.2026).
|
||||
|
||||
Dateibasiert (Prämisse P7); Bestätigungen/Übertragung beim Mandanten."""
|
||||
from datetime import date
|
||||
from datetime import date, timedelta
|
||||
import base64
|
||||
|
||||
from odoo import api, fields, models
|
||||
from odoo.exceptions import UserError
|
||||
|
||||
from odoo.addons.l10n_at_hr_payroll_private.models.karenz import \
|
||||
KARENZ_ARTEN
|
||||
|
||||
from odoo.addons.l10n_at_hr_payroll.models.elda import (
|
||||
L10N_AT_ELDA_IDTEIL,
|
||||
L10nAtEldaBestand,
|
||||
@@ -199,6 +202,58 @@ class L10nAtPayrollVr(models.Model):
|
||||
abmeldungen.append(version)
|
||||
return sorted(abmeldungen, key=lambda v: v.contract_date_end)
|
||||
|
||||
def _l10n_at_offene_karenz_events(self):
|
||||
"""AP16 (8.13): An-/Abmeldungen aus validierten Karenz-
|
||||
Freistellungen: M4 zum Ende des Entgeltanspruchs (Tag vor dem
|
||||
Karenzbeginn; Familienzeit am Tag vor Beginn, § 11 Abs 3 lit a
|
||||
ASVG, lb-pap-01), M3 zum ersten Arbeitstag nach dem Karenzende
|
||||
— entfällt, wenn das DV mit der Karenz endet (normale M4-
|
||||
Vertragsabmeldung deckt das Ende). Karenzart-Strings für die
|
||||
eSV-Sonderformate „Familienhospizkarenz/Pflegekarenz An-/
|
||||
Abmeldung" (lb-kzs-05) laufen als Protokoll-Info; erweiterte
|
||||
eSV-Sonderformate = GP7-Rest. Dedup über die Registry
|
||||
(employee, art, adatum); keine Events nach dem Stichtag."""
|
||||
self.ensure_one()
|
||||
typen = self.env['hr.leave.type'].search([
|
||||
('work_entry_type_id.code', 'in', list(KARENZ_ARTEN))])
|
||||
if not typen:
|
||||
return []
|
||||
leaves = self.env['hr.leave'].search([
|
||||
('company_id', 'in', self.company_id.ids),
|
||||
('holiday_status_id', 'in', typen.ids),
|
||||
('state', 'in', ('validate', 'validate1')),
|
||||
]).sorted('request_date_from')
|
||||
registry = self.env['l10n.at.payroll.vr.event'].search([
|
||||
('company_id', '=', self.company_id.id),
|
||||
])
|
||||
gesehen = {(e.employee_id.id, e.art, e.adatum) for e in registry}
|
||||
ereignisse = []
|
||||
for leave in leaves:
|
||||
von = leave.request_date_from
|
||||
bis = leave.request_date_to
|
||||
if not von or not bis:
|
||||
continue
|
||||
version = leave.employee_id.version_id
|
||||
if not version:
|
||||
continue
|
||||
wett_code = leave.holiday_status_id \
|
||||
.work_entry_type_id.code
|
||||
karenzart = KARENZ_ARTEN.get(wett_code, 'Karenz')
|
||||
abmeldetag = von - timedelta(days=1)
|
||||
if abmeldetag > self.stichtag:
|
||||
continue
|
||||
if (leave.employee_id.id, 'M4', abmeldetag) not in gesehen:
|
||||
ereignisse.append((version, 'M4', abmeldetag, karenzart))
|
||||
rueckkehr = bis + timedelta(days=1)
|
||||
if (version.contract_date_end
|
||||
and rueckkehr >= version.contract_date_end):
|
||||
continue
|
||||
if rueckkehr > self.stichtag:
|
||||
continue
|
||||
if (leave.employee_id.id, 'M3', rueckkehr) not in gesehen:
|
||||
ereignisse.append((version, 'M3', rueckkehr, karenzart))
|
||||
return ereignisse
|
||||
|
||||
def _l10n_at_bber(self, version):
|
||||
if version.l10n_at_lehrling:
|
||||
return '03' if getattr(
|
||||
@@ -234,6 +289,7 @@ class L10nAtPayrollVr(models.Model):
|
||||
raise UserError('Beitragskontonummer (BKNR) fehlt.')
|
||||
datensaetze = []
|
||||
ereignisse = []
|
||||
karenz_info = []
|
||||
vstr = bknr[:2]
|
||||
if lauf.nur_fallweise:
|
||||
versionen = self.env['hr.version'].search([
|
||||
@@ -366,6 +422,51 @@ class L10nAtPayrollVr(models.Model):
|
||||
ereignisse.append((version, 'M4',
|
||||
version.contract_date_end,
|
||||
refw))
|
||||
for version, art, adatum, karenzart in \
|
||||
lauf._l10n_at_offene_karenz_events():
|
||||
if not version.ssnid:
|
||||
fehler.append(
|
||||
'Karenz-Meldung %s ohne Versicherungsnummer.'
|
||||
% version.employee_id.name)
|
||||
continue
|
||||
satz = L10nAtEldaSatz(
|
||||
L10N_AT_ELDA_IDTEIL + VR_SATZ, 772,
|
||||
bezeichnung='%s Karenz %s' % (
|
||||
art, version.employee_id.name))
|
||||
refw = '%s-K%d-%s-%d' % (
|
||||
art, company.id,
|
||||
adatum.strftime('%Y%m%d'),
|
||||
version.employee_id.id)
|
||||
satz.setze('SART', art)
|
||||
satz.setze('VSTR', vstr)
|
||||
satz.setze('REFW', refw)
|
||||
satz.setze('BKNR', bknr)
|
||||
satz.setze('DGNA', company.name[:70])
|
||||
satz.setze('VSNR', version.ssnid)
|
||||
satz.setze_datum(
|
||||
'GEBD', version.employee_id.birthday)
|
||||
familienname, vorname = l10n_at_namen(
|
||||
version.employee_id)
|
||||
satz.setze('FANA', familienname[:70])
|
||||
satz.setze('VONA', (vorname or '')[:70])
|
||||
satz.setze_datum('ADAT', adatum)
|
||||
if art == 'M3':
|
||||
satz.setze('BBER', lauf._l10n_at_bber(version))
|
||||
satz.setze('GERF', 'N')
|
||||
satz.setze('FRDV', 'N')
|
||||
else:
|
||||
satz.setze_datum('EBSV', adatum)
|
||||
satz.setze('AGRD', '00')
|
||||
kalender = version.resource_calendar_id
|
||||
if kalender:
|
||||
satz.setze('VWAZ', kalender.hours_per_week,
|
||||
skala=2)
|
||||
datensaetze.append(satz)
|
||||
ereignisse.append((version, art, adatum, refw))
|
||||
karenz_info.append(
|
||||
'%s (ADAT %s) — %s' % (
|
||||
version.employee_id.name,
|
||||
adatum.strftime('%d.%m.%Y'), karenzart))
|
||||
if fehler:
|
||||
lauf.protokoll = 'FEHLER:\n' + '\n'.join(fehler)
|
||||
raise UserError('Versichertenmeldung mit Fehlern '
|
||||
@@ -395,12 +496,17 @@ class L10nAtPayrollVr(models.Model):
|
||||
ereignisse = self.env['l10n.at.payroll.vr.event'].create(
|
||||
ereignis_werte) if ereignis_werte else \
|
||||
self.env['l10n.at.payroll.vr.event']
|
||||
protokoll = 'Meldungen: %d' % len(datensaetze)
|
||||
if karenz_info:
|
||||
protokoll += ("\nKarenz (eSV-Sonderformate GP7-Rest; "
|
||||
"Karenzart zur Übergabe):\n"
|
||||
+ "\n".join(karenz_info))
|
||||
lauf.write({
|
||||
'datei': base64.b64encode(datei.render()),
|
||||
'datei_name': 'versichertenmeldung_%s.txt' % (
|
||||
fields.Date.today().strftime('%Y%m%d'),),
|
||||
'event_ids': [(6, 0, ereignisse.ids)],
|
||||
'state': 'done',
|
||||
'protokoll': 'Meldungen: %d' % len(datensaetze),
|
||||
'protokoll': protokoll,
|
||||
})
|
||||
return True
|
||||
@@ -23,3 +23,4 @@ access_l10n_at_payroll_pfaendung_user,L10n AT Payroll Pfaendung User,model_l10n_
|
||||
access_l10n_at_payroll_pfaendung_manager,L10n AT Payroll Pfaendung Manager,model_l10n_at_payroll_pfaendung,hr_payroll.group_hr_payroll_manager,1,1,1,1
|
||||
access_l10n_at_payroll_pendler_erklaerung_user,L10n AT Payroll Pendlererklaerung User,model_l10n_at_payroll_pendler_erklaerung,hr_payroll.group_hr_payroll_user,1,1,1,0
|
||||
access_l10n_at_payroll_pendler_erklaerung_manager,L10n AT Payroll Pendlererklaerung Manager,model_l10n_at_payroll_pendler_erklaerung,hr_payroll.group_hr_payroll_manager,1,1,1,1
|
||||
access_l10n_at_payroll_endabrechnung_wizard,L10n AT Payroll Endabrechnung Wizard,model_l10n_at_payroll_endabrechnung_wizard,hr_payroll.group_hr_payroll_user,1,1,1,1
|
||||
|
||||
|
@@ -17,3 +17,5 @@ from . import test_sachbezuege_private
|
||||
from . import test_sachbezuege2_private
|
||||
from . import test_reisekosten_private
|
||||
from . import test_pendler_private
|
||||
from . import test_endabrechnung_private
|
||||
from . import test_karenz_private
|
||||
|
||||
@@ -0,0 +1,952 @@
|
||||
# Part of the odoo-at-payroll project. License: LGPL-3.
|
||||
"""AP14-A: Endabrechnungs-Zyklus — UEL-Zweikomponenten (§ 67 Abs 8
|
||||
lit d), SV-Verlängerung (§ 11 Abs 2 ASVG, sequentielle Fenster),
|
||||
Abgangsentschädigung (§ 67 Abs 8 lit b Fünftel), Aufrechnung offener
|
||||
Vorschüsse (§ 293 Abs 3 EO) und Zeitguthaben (§ 19e Abs 2 AZG).
|
||||
AP15-C: Vergleichssummen (§ 67 Abs 8 lit a) — Rest-Fünftel,
|
||||
BV-Anwartschafts-Teil mit 6 %/7.500-€-Deckel, Wizard.
|
||||
AP14-B: Prämien bei Beendigung (§ 16 AngG-Aliquot, lb-end-18) —
|
||||
sonstiger Bezug mit Endabrechnung, § 67 Abs 10 mit Rollung."""
|
||||
from datetime import date, timedelta
|
||||
|
||||
from odoo.exceptions import UserError
|
||||
from odoo.tests import TransactionCase, tagged
|
||||
|
||||
|
||||
@tagged('post_install', '-at_install')
|
||||
class EndabrechnungPrivateTest(TransactionCase):
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.structure = self.env.ref(
|
||||
'l10n_at_hr_payroll_private.structure_at_privat')
|
||||
self.kv2203 = self.env.ref('l10n_at_hr_payroll_private.kv_si_2203')
|
||||
self.gruppe_ii = self.env.ref(
|
||||
'l10n_at_hr_payroll_private.kv2203_grp_ii')
|
||||
self.calendar = self.env['resource.calendar'].create({
|
||||
'name': 'AT Test End 40h Mo-Fr',
|
||||
'tz': 'Europe/Vienna',
|
||||
'hours_per_day': 8,
|
||||
'attendance_ids': [
|
||||
(0, 0, {'name': 'Tag %d' % weekday,
|
||||
'dayofweek': str(weekday),
|
||||
'hour_from': 8.0, 'hour_to': 16.0})
|
||||
for weekday in range(5)
|
||||
],
|
||||
})
|
||||
self.env.company.resource_calendar_id = self.calendar
|
||||
|
||||
def _calendar(self, weekdays):
|
||||
return self.env['resource.calendar'].create({
|
||||
'name': 'AT Test End %dTage' % len(weekdays),
|
||||
'tz': 'Europe/Vienna',
|
||||
'hours_per_day': 8,
|
||||
'attendance_ids': [
|
||||
(0, 0, {'name': 'Tag %d' % weekday,
|
||||
'dayofweek': str(weekday),
|
||||
'hour_from': 8.0, 'hour_to': 16.0})
|
||||
for weekday in weekdays
|
||||
],
|
||||
})
|
||||
|
||||
def _employee(self, ueberzahlung=2640.0,
|
||||
ende=date(2026, 3, 15), calendar=None):
|
||||
employee = self.env['hr.employee'].create(
|
||||
{'name': 'Test End privat'})
|
||||
version = self.env['hr.version'].search(
|
||||
[('employee_id', '=', employee.id)], limit=1)
|
||||
if not version:
|
||||
version = self.env['hr.version'].create({
|
||||
'employee_id': employee.id, 'date_start': date(2020, 1, 1)})
|
||||
version.write({
|
||||
'contract_date_start': date(2020, 1, 1),
|
||||
'contract_date_end': ende,
|
||||
'ueberzahlung': ueberzahlung,
|
||||
'kv_id': self.kv2203.id,
|
||||
'kv_gruppe_id': self.gruppe_ii.id,
|
||||
'erfahrungsstufe': 1,
|
||||
'resource_calendar_id': (calendar or self.calendar).id,
|
||||
})
|
||||
return employee
|
||||
|
||||
def _slip(self, employee, monat=3, jahr=2026):
|
||||
erster = date(jahr, monat, 1)
|
||||
naechster = (erster + timedelta(days=32)).replace(day=1)
|
||||
slip = self.env['hr.payslip'].create({
|
||||
'name': 'Test-End %d/%d' % (monat, jahr),
|
||||
'employee_id': employee.id,
|
||||
'struct_id': self.structure.id,
|
||||
'date_from': erster,
|
||||
'date_to': naechster - timedelta(days=1),
|
||||
})
|
||||
slip.compute_sheet()
|
||||
return slip
|
||||
|
||||
def _input(self, slip, code, amount):
|
||||
typ = self.env['hr.payslip.input.type'].search(
|
||||
[('code', '=', code)], limit=1)
|
||||
self.env['hr.payslip.input'].create({
|
||||
'payslip_id': slip.id,
|
||||
'input_type_id': typ.id,
|
||||
'amount': amount,
|
||||
})
|
||||
slip.compute_sheet()
|
||||
|
||||
def _total(self, slip, code):
|
||||
return sum(slip.line_ids.filtered(
|
||||
lambda line: line.code == code).mapped('total'))
|
||||
|
||||
def _basis_monate(self, slip):
|
||||
return dict(slip._l10n_at_sv_basis_laufen_monate())
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# RF-END-1: UEL-Zweikomponenten (§ 67 Abs 8 lit d)
|
||||
# ------------------------------------------------------------------
|
||||
def test_01_uel_zwei_komponenten(self):
|
||||
"""11 offene AT à 120 € (2.640/22): UEL-lfd 1.320 € läuft
|
||||
tarifisch und sechstelerhöhend; UEL-SZ 220 € (2×2.640/12/22)
|
||||
als sonstiger Bezug; nur der laufende Anteil verlängert die
|
||||
Pflichtversicherung."""
|
||||
emp_mit = self._employee()
|
||||
emp_ohne = self._employee()
|
||||
slip_mit = self._slip(emp_mit)
|
||||
slip_ohne = self._slip(emp_ohne)
|
||||
self._input(slip_mit, 'ATP_UEL_TAGE', 11)
|
||||
|
||||
self.assertAlmostEqual(
|
||||
self._total(slip_mit, 'URL_ERSATZ_LFD'), 1320.0, places=2)
|
||||
self.assertAlmostEqual(
|
||||
self._total(slip_mit, 'URL_ERSATZ_SZ'), 220.0, places=2)
|
||||
svdn_diff = (slip_mit._l10n_at_svdn_gesamt()
|
||||
- slip_ohne._l10n_at_svdn_gesamt())
|
||||
self.assertAlmostEqual(
|
||||
slip_mit._l10n_at_bemessung_laufen()
|
||||
- slip_ohne._l10n_at_bemessung_laufen() + svdn_diff,
|
||||
1320.0, places=2)
|
||||
# Sechstel wächst um den annualisierten laufenden Anteil
|
||||
# (60/Lohnsteuertage × 1.320; Teilmonat März: 15 Tage).
|
||||
self.assertAlmostEqual(
|
||||
slip_mit._l10n_at_sechstel() - slip_ohne._l10n_at_sechstel(),
|
||||
1320.0 * 60.0 / 15.0, places=2)
|
||||
# SZ-Bemessung enthält den UEL-SZ-Anteil (SV-DN nach § 67
|
||||
# Abs 12 abziehen, um den Brutto-Anteil zu isolieren)
|
||||
svdn_sz_diff = (slip_mit._l10n_at_svdn_sz()
|
||||
- slip_ohne._l10n_at_svdn_sz())
|
||||
self.assertAlmostEqual(
|
||||
slip_mit._l10n_at_sz_bemessung()
|
||||
- slip_ohne._l10n_at_sz_bemessung() + svdn_sz_diff,
|
||||
220.0, places=2)
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# RF-END-2: SV-Tage-Umrechnung und Verlängerungsmonate (§ 11 Abs 2)
|
||||
# ------------------------------------------------------------------
|
||||
def test_02_sv_tage_und_verlaengerung(self):
|
||||
"""Schema je voller Woche à N AT + (7−N) KT: 23 AT (5-Woche)
|
||||
→ 31 SV-Tage; 12 WT (6-Woche) → 14; 6 AT (2-Tage-Woche) → 21
|
||||
(lb-url-15). Ende 15. 3.: Verlängerung 16. 3.–15. 4. — die
|
||||
UEL-lfd-Basis liegt tageproportional auf den Monaten."""
|
||||
emp = self._employee()
|
||||
slip = self._slip(emp)
|
||||
self.assertEqual(slip._at_end_sv_tage(23), 31)
|
||||
self.assertEqual(slip._at_end_sv_tage(10), 14)
|
||||
|
||||
emp_6 = self._employee(calendar=self._calendar(range(6)))
|
||||
self.assertEqual(self._slip(emp_6)._at_end_sv_tage(12), 14)
|
||||
|
||||
emp_2 = self._employee(calendar=self._calendar([0, 3]))
|
||||
self.assertEqual(self._slip(emp_2)._at_end_sv_tage(6), 21)
|
||||
|
||||
self.assertEqual(
|
||||
slip._at_end_verlaengerungs_monate(
|
||||
31, date(2026, 3, 16)),
|
||||
[(date(2026, 3, 1), 16), (date(2026, 4, 1), 15)])
|
||||
|
||||
self._input(slip, 'ATP_UEL_TAGE', 23)
|
||||
basis = self._basis_monate(slip)
|
||||
self.assertAlmostEqual(
|
||||
basis[date(2026, 4, 1)], 2760.0 * 15.0 / 31.0, places=2)
|
||||
# März: KVGEO-Standardanteil + UEL-März-Anteil
|
||||
self.assertAlmostEqual(
|
||||
basis[date(2026, 3, 1)] - 2760.0 * 16.0 / 31.0,
|
||||
2640.0 * 10.0 / 22.0, places=2)
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# RF-END-3: Abgangsentschädigung (§ 67 Abs 8 lit b, Fünftel)
|
||||
# ------------------------------------------------------------------
|
||||
def test_03_abgang_fuenftel(self):
|
||||
"""9.000 € Abgangsentschädigung: Fünftel-LSt (1/5 steuerfrei
|
||||
nach §-62-Abzug, Deckel 12.474 €), 4/5 tarifisch OHNE
|
||||
Sechstelerhöhung; SV-Umlegung auf die 42 Tage Kündigungsfrist;
|
||||
voll LNK-pflichtig."""
|
||||
emp_mit = self._employee(ueberzahlung=3000.0)
|
||||
emp_ohne = self._employee(ueberzahlung=3000.0)
|
||||
slip_mit = self._slip(emp_mit)
|
||||
slip_ohne = self._slip(emp_ohne)
|
||||
self._input(slip_mit, 'ATP_ABGANG', 9000.0)
|
||||
self._input(slip_mit, 'ATP_ABGANG_FFRIST_TAGE', 42)
|
||||
|
||||
self.assertAlmostEqual(self._total(slip_mit, 'ABGANG'), 9000.0,
|
||||
places=2)
|
||||
# Sechstel unverändert (Abs 2 nicht anzuwenden)
|
||||
self.assertAlmostEqual(
|
||||
slip_mit._l10n_at_sechstel() - slip_ohne._l10n_at_sechstel(),
|
||||
0.0, places=2)
|
||||
# Tarifischer Teil: 9.000 minus §-62-Abzug, 1/5 frei
|
||||
satz = sum(slip_mit._l10n_at_sv_satz(
|
||||
'dn', k, staffel_basis=slip_mit._l10n_at_sv_basis_roh())
|
||||
for k in ('kv', 'pv', 'av', 'ak', 'wf'))
|
||||
bemessung = 9000.0 * (1.0 - satz / 100.0)
|
||||
deckel = float(slip_mit._l10n_at_param('at_sv_hbg_monatlich')) \
|
||||
* 9.0 / 5.0
|
||||
erwartet = bemessung - min(bemessung / 5.0, deckel)
|
||||
self.assertAlmostEqual(
|
||||
slip_mit._at_fuenftel_tarif_basis(), erwartet, places=2)
|
||||
svdn_diff = (slip_mit._l10n_at_svdn_gesamt()
|
||||
- slip_ohne._l10n_at_svdn_gesamt())
|
||||
self.assertAlmostEqual(
|
||||
slip_mit._l10n_at_bemessung_laufen()
|
||||
- slip_ohne._l10n_at_bemessung_laufen() + svdn_diff,
|
||||
erwartet, places=2)
|
||||
# LNK-Basis um die volle Entschädigung erhöht
|
||||
self.assertAlmostEqual(
|
||||
slip_mit._at_lnk_basis('flaf')
|
||||
- slip_ohne._at_lnk_basis('flaf'), 9000.0, places=2)
|
||||
# SV-Umlegung: 16. 3.–26. 4. (Kündigungsfrist zuerst); im März
|
||||
# liegt zusätzlich der aliquote KVGEO-Standardanteil
|
||||
basis = self._basis_monate(slip_mit)
|
||||
self.assertAlmostEqual(
|
||||
basis[date(2026, 4, 1)], 9000.0 * 26.0 / 42.0, places=2)
|
||||
self.assertAlmostEqual(
|
||||
basis[date(2026, 3, 1)] - 3000.0 * 10.0 / 22.0,
|
||||
9000.0 * 16.0 / 42.0, places=2)
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# RF-END-4: Aufrechnung offener Vorschüsse (§ 293 Abs 3 EO)
|
||||
# ------------------------------------------------------------------
|
||||
def test_04_aufrechnung_vorschuss(self):
|
||||
"""2.000 € offener Vorschuss wird vom Netto abgezogen — ohne
|
||||
jede Wirkung auf LSt-, SV- oder LNK-Basen (lb-end-06)."""
|
||||
emp_mit = self._employee()
|
||||
emp_ohne = self._employee()
|
||||
slip_mit = self._slip(emp_mit)
|
||||
slip_ohne = self._slip(emp_ohne)
|
||||
self._input(slip_mit, 'ATP_ABRECHNUNG_VORSCHUSS', 2000.0)
|
||||
|
||||
self.assertAlmostEqual(self._total(slip_mit, 'END_ABRECHNUNG_VORSCHUSS'),
|
||||
2000.0, places=2)
|
||||
self.assertAlmostEqual(
|
||||
slip_mit._l10n_at_bemessung_laufen()
|
||||
- slip_ohne._l10n_at_bemessung_laufen(), 0.0, places=2)
|
||||
self.assertAlmostEqual(
|
||||
slip_mit._l10n_at_sv_basis_roh()
|
||||
- slip_ohne._l10n_at_sv_basis_roh(), 0.0, places=2)
|
||||
self.assertAlmostEqual(
|
||||
slip_mit._at_lnk_basis('flaf')
|
||||
- slip_ohne._at_lnk_basis('flaf'), 0.0, places=2)
|
||||
self.assertAlmostEqual(
|
||||
self._total(slip_mit, 'NET') - self._total(slip_ohne, 'NET'),
|
||||
-2000.0, places=2)
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# RF-END-5: Zeitguthaben (§ 19e Abs 2 AZG) und Zeitschulden
|
||||
# ------------------------------------------------------------------
|
||||
def test_05_zeitguthaben_und_schulden(self):
|
||||
"""10 h Normalarbeitszeit-Guthaben + 50 % Zuschlag, 5 h
|
||||
Zeitschulden negativ — beides laufender Bezug, KEIN §-68-
|
||||
Freibetrag (lb-end-10)."""
|
||||
emp = self._employee(ueberzahlung=3000.0)
|
||||
slip = self._slip(emp)
|
||||
self._input(slip, 'ATP_ZEIT_GUTHABEN', 10.0)
|
||||
self._input(slip, 'ATP_ZEIT_SCHULDEN', 5.0)
|
||||
|
||||
stunde = slip._at_grundstunde_norm()
|
||||
self.assertAlmostEqual(
|
||||
self._total(slip, 'ZEIT_GUTHABEN'), 10.0 * stunde * 1.5,
|
||||
places=2)
|
||||
self.assertAlmostEqual(
|
||||
self._total(slip, 'ZEIT_SCHULDEN'), -5.0 * stunde, places=2)
|
||||
regel = slip.struct_id.rule_ids.filtered(
|
||||
lambda rule: rule.code == 'ZEIT_GUTHABEN')
|
||||
self.assertEqual(regel.l10n_at_steuerbefreiung_68, 'keine')
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# RF-END-6: Wizard legt den Endabrechnungs-Lauf vorbefüllt an
|
||||
# ------------------------------------------------------------------
|
||||
def test_06_wizard(self):
|
||||
"""Der Wizard sammelt UEL, Abgang, Zeitguthaben und Vorschuss
|
||||
und erzeugt den Payslip mit vorbefüllten Eingaben."""
|
||||
emp = self._employee()
|
||||
# Version auf die private Structure-Type binden, damit der
|
||||
# Wizard über version.struct_id die richtige Struktur findet.
|
||||
emp.version_id.write({'structure_type_id': self.env.ref(
|
||||
'l10n_at_hr_payroll_private.structure_type_at_privat').id})
|
||||
wizard = self.env['l10n.at.payroll.endabrechnung.wizard'].create({
|
||||
'employee_id': emp.id,
|
||||
'austrittsdatum': date(2026, 3, 15),
|
||||
'departure_reason_id': self.env.ref(
|
||||
'l10n_at_hr_payroll.departure_reason_einvernehmlich').id,
|
||||
'uel_tage': 11.0,
|
||||
'abgang_betrag': 9000.0,
|
||||
'abgang_ffrist_tage': 42.0,
|
||||
'zeit_guthaben_stunden': 10.0,
|
||||
'vorschuss_saldo': 500.0,
|
||||
})
|
||||
ergebnis = wizard.action_payslip()
|
||||
slip = self.env['hr.payslip'].browse(ergebnis['res_id'])
|
||||
codes = set(slip.input_line_ids.mapped(
|
||||
lambda line: line.input_type_id.code))
|
||||
self.assertIn('ATP_UEL_TAGE', codes)
|
||||
self.assertIn('ATP_ABGANG', codes)
|
||||
self.assertIn('ATP_ABRECHNUNG_VORSCHUSS', codes)
|
||||
self.assertAlmostEqual(
|
||||
self._total(slip, 'URL_ERSATZ_LFD'), 1320.0, places=2)
|
||||
self.assertAlmostEqual(self._total(slip, 'ABGANG'), 9000.0,
|
||||
places=2)
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# AP15-A: gesetzliche Abfertigung Alt (§§ 23/23a, § 67 Abs 3)
|
||||
# ------------------------------------------------------------------
|
||||
def test_07_abfertigung_alt_staffel_und_sonderfaelle(self):
|
||||
slip = self._slip(self._employee())
|
||||
for monate, erwartet in (
|
||||
(35, 0.0), (36, 2.0), (60, 3.0), (120, 4.0),
|
||||
(180, 6.0), (240, 9.0), (300, 12.0)):
|
||||
self.assertEqual(slip._at_abf_alt_staffel(monate), erwartet)
|
||||
self.assertEqual(
|
||||
slip._at_abf_alt_mehrfach_vorschlag(59, 'eltern'), 0.0)
|
||||
self.assertEqual(
|
||||
slip._at_abf_alt_mehrfach_vorschlag(60, 'eltern'), 1.5)
|
||||
self.assertEqual(
|
||||
slip._at_abf_alt_mehrfach_vorschlag(180, 'eltern'), 3.0)
|
||||
self.assertEqual(
|
||||
slip._at_abf_alt_mehrfach_vorschlag(240, 'tod'), 4.5)
|
||||
|
||||
def test_08_abfertigung_alt_vervielfachung_guenstiger(self):
|
||||
"""21 Jahre: 9 Monatsentgelte inklusive 2/12 SZ ergeben den
|
||||
steuerlichen Vervielfacher 10,5; der Tarif ist günstiger als 6 %."""
|
||||
emp_mit = self._employee(ueberzahlung=1800.0)
|
||||
emp_ohne = self._employee(ueberzahlung=1800.0)
|
||||
slip_mit = self._slip(emp_mit)
|
||||
slip_ohne = self._slip(emp_ohne)
|
||||
slip_mit.write({
|
||||
'l10n_at_abf_alt_anspruchsart': 'normal',
|
||||
'l10n_at_abf_alt_dienstzeit_monate': 252,
|
||||
'l10n_at_abf_alt_monatsentgelt': 2100.0,
|
||||
'l10n_at_abf_alt_laufender_arbeitslohn': 1800.0,
|
||||
'l10n_at_abf_alt_monatslohnsteuer': 101.96,
|
||||
'l10n_at_abf_alt_mehrfach': 9.0,
|
||||
'l10n_at_abf_alt_nachweis': 'Testnachweis',
|
||||
})
|
||||
self._input(slip_mit, 'ATP_ABF_ALT', 18900.0)
|
||||
|
||||
erwartet = 101.96 * 10.5
|
||||
self.assertAlmostEqual(self._total(slip_mit, 'ABF_ALT'), 18900.0,
|
||||
places=2)
|
||||
self.assertAlmostEqual(
|
||||
slip_mit._at_abf_alt_steuer_vervielfachung(), erwartet, places=2)
|
||||
self.assertLess(erwartet, 18900.0 * 0.06)
|
||||
self.assertAlmostEqual(
|
||||
self._total(slip_mit, 'LST_ABF'),
|
||||
self.env.company.currency_id.round(erwartet), places=2)
|
||||
self.assertAlmostEqual(
|
||||
slip_mit._l10n_at_sv_basis_roh()
|
||||
- slip_ohne._l10n_at_sv_basis_roh(), 0.0, places=2)
|
||||
self.assertAlmostEqual(
|
||||
slip_mit._at_lnk_basis('flaf')
|
||||
- slip_ohne._at_lnk_basis('flaf'), 0.0, places=2)
|
||||
self.assertAlmostEqual(
|
||||
slip_mit._at_bv_basis_sonst()
|
||||
- slip_ohne._at_bv_basis_sonst(), 0.0, places=2)
|
||||
self.assertAlmostEqual(
|
||||
slip_mit._l10n_at_sechstel() - slip_ohne._l10n_at_sechstel(),
|
||||
0.0, places=2)
|
||||
self.assertAlmostEqual(
|
||||
slip_mit._at_pfaendung_basis(None, 'beendigung'),
|
||||
18900.0 - self._total(slip_mit, 'LST_ABF'), places=2)
|
||||
|
||||
def test_09_abfertigung_alt_sechs_prozent_guenstiger(self):
|
||||
emp = self._employee(ueberzahlung=4000.0)
|
||||
slip = self._slip(emp)
|
||||
slip.write({
|
||||
'l10n_at_abf_alt_laufender_arbeitslohn': 4000.0,
|
||||
'l10n_at_abf_alt_monatslohnsteuer': 300.0,
|
||||
'l10n_at_abf_alt_mehrfach': 2.0,
|
||||
})
|
||||
self._input(slip, 'ATP_ABF_ALT', 9333.34)
|
||||
|
||||
self.assertGreater(
|
||||
slip._at_abf_alt_steuer_vervielfachung(), 9333.34 * 0.06)
|
||||
self.assertAlmostEqual(
|
||||
self._total(slip, 'LST_ABF'), 9333.34 * 0.06, places=2)
|
||||
|
||||
def test_10_abfertigung_alt_wizard(self):
|
||||
emp = self._employee(ueberzahlung=3000.0)
|
||||
version = emp.version_id
|
||||
version.write({
|
||||
'structure_type_id': self.env.ref(
|
||||
'l10n_at_hr_payroll_private.structure_type_at_privat').id,
|
||||
'l10n_at_abfertigung_neu': False,
|
||||
})
|
||||
reason = self.env.ref(
|
||||
'l10n_at_hr_payroll.departure_reason_einvernehmlich')
|
||||
wizard = self.env['l10n.at.payroll.endabrechnung.wizard'].create({
|
||||
'employee_id': emp.id,
|
||||
'austrittsdatum': date(2026, 3, 15),
|
||||
'departure_reason_id': reason.id,
|
||||
'abf_alt_aktiv': True,
|
||||
'abf_alt_anspruch_bestaetigt': True,
|
||||
'abf_alt_anspruchsart': 'normal',
|
||||
'abf_alt_dienstzeit_monate': 74,
|
||||
'abf_alt_monatsentgelt': 3500.0,
|
||||
'abf_alt_laufender_arbeitslohn': 3000.0,
|
||||
'abf_alt_monatslohnsteuer': 200.0,
|
||||
'abf_alt_mehrfach': 3.0,
|
||||
'abf_alt_nachweis': 'Dienstzeiten und Altstatus geprüft',
|
||||
})
|
||||
ergebnis = wizard.action_payslip()
|
||||
slip = self.env['hr.payslip'].browse(ergebnis['res_id'])
|
||||
|
||||
self.assertAlmostEqual(self._total(slip, 'ABF_ALT'), 10500.0,
|
||||
places=2)
|
||||
self.assertGreater(self._total(slip, 'LST_ABF'), 0.0)
|
||||
self.assertEqual(slip.l10n_at_abf_alt_dienstzeit_monate, 74)
|
||||
self.assertEqual(slip.l10n_at_abf_alt_nachweis,
|
||||
'Dienstzeiten und Altstatus geprüft')
|
||||
self.assertEqual(version.departure_reason_id, reason)
|
||||
|
||||
def test_11_abfertigung_alt_neu_sperre(self):
|
||||
emp = self._employee()
|
||||
emp.version_id.write({
|
||||
'structure_type_id': self.env.ref(
|
||||
'l10n_at_hr_payroll_private.structure_type_at_privat').id,
|
||||
'l10n_at_abfertigung_neu': True,
|
||||
})
|
||||
wizard = self.env['l10n.at.payroll.endabrechnung.wizard'].create({
|
||||
'employee_id': emp.id,
|
||||
'austrittsdatum': date(2026, 3, 15),
|
||||
'departure_reason_id': self.env.ref(
|
||||
'l10n_at_hr_payroll.departure_reason_einvernehmlich').id,
|
||||
'abf_alt_aktiv': True,
|
||||
'abf_alt_anspruch_bestaetigt': True,
|
||||
'abf_alt_anspruchsart': 'normal',
|
||||
'abf_alt_dienstzeit_monate': 74,
|
||||
'abf_alt_monatsentgelt': 3000.0,
|
||||
'abf_alt_laufender_arbeitslohn': 2640.0,
|
||||
'abf_alt_monatslohnsteuer': 150.0,
|
||||
'abf_alt_mehrfach': 3.0,
|
||||
})
|
||||
with self.assertRaises(UserError):
|
||||
wizard.action_payslip()
|
||||
|
||||
def test_12_abfertigung_alt_arbeitnehmerkuendigung_ohne_sonderfall(self):
|
||||
emp = self._employee()
|
||||
emp.version_id.write({
|
||||
'structure_type_id': self.env.ref(
|
||||
'l10n_at_hr_payroll_private.structure_type_at_privat').id,
|
||||
'l10n_at_abfertigung_neu': False,
|
||||
})
|
||||
wizard = self.env['l10n.at.payroll.endabrechnung.wizard'].create({
|
||||
'employee_id': emp.id,
|
||||
'austrittsdatum': date(2026, 3, 15),
|
||||
'departure_reason_id': self.env.ref('hr.departure_resigned').id,
|
||||
'abf_alt_aktiv': True,
|
||||
'abf_alt_anspruch_bestaetigt': True,
|
||||
'abf_alt_anspruchsart': 'normal',
|
||||
'abf_alt_dienstzeit_monate': 74,
|
||||
'abf_alt_monatsentgelt': 3000.0,
|
||||
'abf_alt_laufender_arbeitslohn': 2640.0,
|
||||
'abf_alt_monatslohnsteuer': 150.0,
|
||||
'abf_alt_mehrfach': 3.0,
|
||||
})
|
||||
with self.assertRaises(UserError):
|
||||
wizard.action_payslip()
|
||||
|
||||
def test_13_abfertigung_alt_elternaustritt_unter_fuenf_jahren(self):
|
||||
emp = self._employee()
|
||||
emp.version_id.write({
|
||||
'structure_type_id': self.env.ref(
|
||||
'l10n_at_hr_payroll_private.structure_type_at_privat').id,
|
||||
'l10n_at_abfertigung_neu': False,
|
||||
})
|
||||
wizard = self.env['l10n.at.payroll.endabrechnung.wizard'].create({
|
||||
'employee_id': emp.id,
|
||||
'austrittsdatum': date(2026, 3, 15),
|
||||
'departure_reason_id': self.env.ref('hr.departure_resigned').id,
|
||||
'abf_alt_aktiv': True,
|
||||
'abf_alt_anspruch_bestaetigt': True,
|
||||
'abf_alt_anspruchsart': 'eltern',
|
||||
'abf_alt_dienstzeit_monate': 59,
|
||||
'abf_alt_monatsentgelt': 3000.0,
|
||||
'abf_alt_laufender_arbeitslohn': 2640.0,
|
||||
'abf_alt_monatslohnsteuer': 150.0,
|
||||
'abf_alt_mehrfach': 1.0,
|
||||
})
|
||||
with self.assertRaises(UserError):
|
||||
wizard.action_payslip()
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# AP15-B: freiwillige Abfertigung (§ 67 Abs 6)
|
||||
# ------------------------------------------------------------------
|
||||
def test_14_abf_frei_viertel_und_zwoelftel(self):
|
||||
"""15 Jahre (6/12), Basis 36.000: Z 1 9.000 + Z 2 18.000; Brutto
|
||||
12.000 → voll begünstigt, 6 % = 720; kein Überhang."""
|
||||
emp = self._employee()
|
||||
slip = self._slip(emp)
|
||||
slip.write({
|
||||
'l10n_at_abf_frei_basis_12': 36000.0,
|
||||
'l10n_at_abf_frei_dienstzeit_monate': 180,
|
||||
})
|
||||
self._input(slip, 'ATP_ABF_FREI', 12000.0)
|
||||
|
||||
split = slip._at_abf_frei_split()
|
||||
self.assertAlmostEqual(split['z1'], 9000.0, places=2)
|
||||
self.assertAlmostEqual(split['z2'], 18000.0, places=2)
|
||||
self.assertAlmostEqual(split['beguenstigt'], 12000.0, places=2)
|
||||
self.assertAlmostEqual(split['ueberhang'], 0.0, places=2)
|
||||
self.assertAlmostEqual(
|
||||
self._total(slip, 'ABF_FREI'), 12000.0, places=2)
|
||||
self.assertAlmostEqual(
|
||||
self._total(slip, 'LST_ABF_FREI'), 720.0, places=2)
|
||||
self.assertFalse(self._total(slip, 'ABF_FREI_TARIF'))
|
||||
|
||||
def test_15_abf_frei_ueberhang_tarif_ohne_sechstel(self):
|
||||
"""Brutto 40.000: begünstigt 27.000 (Z 1 + Z 2), Überhang 13.000
|
||||
läuft tarifisch über die LSt-Bemessung, ohne das Jahressechstel
|
||||
zu erhöhen; SV, LNK und BV bleiben unberührt."""
|
||||
emp_mit = self._employee()
|
||||
emp_ohne = self._employee()
|
||||
slip_mit = self._slip(emp_mit)
|
||||
slip_ohne = self._slip(emp_ohne)
|
||||
slip_mit.write({
|
||||
'l10n_at_abf_frei_basis_12': 36000.0,
|
||||
'l10n_at_abf_frei_dienstzeit_monate': 180,
|
||||
})
|
||||
self._input(slip_mit, 'ATP_ABF_FREI', 40000.0)
|
||||
|
||||
self.assertAlmostEqual(
|
||||
self._total(slip_mit, 'ABF_FREI'), 27000.0, places=2)
|
||||
self.assertAlmostEqual(
|
||||
self._total(slip_mit, 'ABF_FREI_TARIF'), 13000.0, places=2)
|
||||
lst6 = self.env.company.currency_id.round(27000.0 * 0.06)
|
||||
self.assertAlmostEqual(
|
||||
self._total(slip_mit, 'LST_ABF_FREI'), lst6, places=2)
|
||||
self.assertAlmostEqual(
|
||||
slip_mit._l10n_at_bemessung_laufen()
|
||||
- slip_ohne._l10n_at_bemessung_laufen(), 13000.0, places=2)
|
||||
self.assertGreater(
|
||||
self._total(slip_mit, 'LST_LFD'), self._total(slip_ohne, 'LST_LFD'))
|
||||
self.assertAlmostEqual(
|
||||
slip_mit._l10n_at_sechstel() - slip_ohne._l10n_at_sechstel(),
|
||||
0.0, places=2)
|
||||
self.assertAlmostEqual(
|
||||
slip_mit._l10n_at_sv_basis_roh()
|
||||
- slip_ohne._l10n_at_sv_basis_roh(), 0.0, places=2)
|
||||
self.assertAlmostEqual(
|
||||
slip_mit._at_lnk_basis('flaf')
|
||||
- slip_ohne._at_lnk_basis('flaf'), 0.0, places=2)
|
||||
self.assertAlmostEqual(
|
||||
slip_mit._at_bv_basis_sonst()
|
||||
- slip_ohne._at_bv_basis_sonst(), 0.0, places=2)
|
||||
self.assertAlmostEqual(
|
||||
slip_mit._at_pfaendung_basis(None, 'beendigung'),
|
||||
27000.0 - lst6, places=2)
|
||||
|
||||
def test_16_abf_frei_kuerzung_und_deckel(self):
|
||||
"""Z 3: erhaltene Abfertigungen plus gesetzlicher Anspruch kürzen
|
||||
das Z-2-Ausmaß; bei großer Basis greifen die Deckel 9 × HBG
|
||||
(Z 1) und n × 3 × HBG (Z 2)."""
|
||||
emp = self._employee()
|
||||
slip = self._slip(emp)
|
||||
slip.write({
|
||||
'l10n_at_abf_frei_basis_12': 36000.0,
|
||||
'l10n_at_abf_frei_dienstzeit_monate': 180,
|
||||
'l10n_at_abf_frei_erhaltene_abfertigungen': 4000.0,
|
||||
'l10n_at_abf_frei_gesetzlicher_anspruch': 9000.0,
|
||||
})
|
||||
self._input(slip, 'ATP_ABF_FREI', 20000.0)
|
||||
|
||||
split = slip._at_abf_frei_split()
|
||||
self.assertAlmostEqual(split['kuerzung'], 13000.0, places=2)
|
||||
self.assertAlmostEqual(split['z2'], 5000.0, places=2)
|
||||
self.assertAlmostEqual(split['beguenstigt'], 14000.0, places=2)
|
||||
self.assertAlmostEqual(split['ueberhang'], 6000.0, places=2)
|
||||
|
||||
slip.write({
|
||||
'l10n_at_abf_frei_basis_12': 12000000.0,
|
||||
'l10n_at_abf_frei_erhaltene_abfertigungen': 0.0,
|
||||
'l10n_at_abf_frei_gesetzlicher_anspruch': 0.0,
|
||||
})
|
||||
slip.input_line_ids.filtered(
|
||||
lambda i: i.input_type_id.code == 'ATP_ABF_FREI').write(
|
||||
{'amount': 300000.0})
|
||||
slip.compute_sheet()
|
||||
split = slip._at_abf_frei_split()
|
||||
self.assertAlmostEqual(split['z1'], 62370.0, places=2)
|
||||
self.assertAlmostEqual(split['z2'], 124740.0, places=2)
|
||||
self.assertAlmostEqual(split['beguenstigt'], 187110.0, places=2)
|
||||
self.assertAlmostEqual(split['ueberhang'], 112890.0, places=2)
|
||||
|
||||
def test_17_abf_frei_wizard(self):
|
||||
emp = self._employee()
|
||||
emp.version_id.write({
|
||||
'structure_type_id': self.env.ref(
|
||||
'l10n_at_hr_payroll_private.structure_type_at_privat').id,
|
||||
'l10n_at_abfertigung_neu': False,
|
||||
})
|
||||
wizard = self.env['l10n.at.payroll.endabrechnung.wizard'].create({
|
||||
'employee_id': emp.id,
|
||||
'austrittsdatum': date(2026, 3, 15),
|
||||
'departure_reason_id': self.env.ref(
|
||||
'l10n_at_hr_payroll.departure_reason_einvernehmlich').id,
|
||||
'abf_frei_aktiv': True,
|
||||
'abf_frei_anspruch_bestaetigt': True,
|
||||
'abf_frei_betrag': 20000.0,
|
||||
'abf_frei_basis_12': 36000.0,
|
||||
'abf_frei_dienstzeit_monate': 180,
|
||||
'abf_frei_nachweis': 'Vordienstzeiten zum Lohnkonto nachgewiesen',
|
||||
})
|
||||
ergebnis = wizard.action_payslip()
|
||||
slip = self.env['hr.payslip'].browse(ergebnis['res_id'])
|
||||
|
||||
self.assertAlmostEqual(self._total(slip, 'ABF_FREI'), 20000.0,
|
||||
places=2)
|
||||
self.assertAlmostEqual(self._total(slip, 'LST_ABF_FREI'), 1200.0,
|
||||
places=2)
|
||||
self.assertEqual(slip.l10n_at_abf_frei_dienstzeit_monate, 180)
|
||||
self.assertEqual(slip.l10n_at_abf_frei_nachweis,
|
||||
'Vordienstzeiten zum Lohnkonto nachgewiesen')
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# RF-VGL-1: Vergleichssumme Rest (§ 67 Abs 8 lit a, Fünftelregelung)
|
||||
# ------------------------------------------------------------------
|
||||
def test_18_vergleich_rest_fuenftel(self):
|
||||
"""9.000 € Vergleich-Rest (lb-end-21 Beispiel 1): nach
|
||||
§-62-Abzug ist 1/5 steuerfrei (Deckel 12.474 €), 4/5 laufen
|
||||
tarifisch im Zuflussmonat OHNE Sechstel-Effekt; SV-pflichtig im
|
||||
Zuflussmonat, voll LNK-pflichtig."""
|
||||
emp_mit = self._employee(ueberzahlung=3000.0)
|
||||
emp_ohne = self._employee(ueberzahlung=3000.0)
|
||||
slip_mit = self._slip(emp_mit)
|
||||
slip_ohne = self._slip(emp_ohne)
|
||||
self._input(slip_mit, 'ATP_VERGLEICH', 9000.0)
|
||||
|
||||
self.assertAlmostEqual(self._total(slip_mit, 'VERGLEICH'), 9000.0,
|
||||
places=2)
|
||||
# Sechstel unverändert (Abs 2 nicht anzuwenden)
|
||||
self.assertAlmostEqual(
|
||||
slip_mit._l10n_at_sechstel() - slip_ohne._l10n_at_sechstel(),
|
||||
0.0, places=2)
|
||||
satz = sum(slip_mit._l10n_at_sv_satz(
|
||||
'dn', k, staffel_basis=slip_mit._l10n_at_sv_basis_roh())
|
||||
for k in ('kv', 'pv', 'av', 'ak', 'wf'))
|
||||
bemessung = 9000.0 * (1.0 - satz / 100.0)
|
||||
deckel = float(slip_mit._l10n_at_param('at_sv_hbg_monatlich')) \
|
||||
* 9.0 / 5.0
|
||||
frei = min(bemessung / 5.0, deckel)
|
||||
self.assertAlmostEqual(slip_mit._at_fuenftel_frei_betr(), frei,
|
||||
places=2)
|
||||
self.assertAlmostEqual(slip_mit._at_fuenftel_tarif_basis(),
|
||||
bemessung - frei, places=2)
|
||||
svdn_diff = (slip_mit._l10n_at_svdn_gesamt()
|
||||
- slip_ohne._l10n_at_svdn_gesamt())
|
||||
self.assertAlmostEqual(
|
||||
slip_mit._l10n_at_bemessung_laufen()
|
||||
- slip_ohne._l10n_at_bemessung_laufen() + svdn_diff,
|
||||
bemessung - frei, places=2)
|
||||
# LNK-Basis um die volle Vergleichssumme erhöht
|
||||
self.assertAlmostEqual(
|
||||
slip_mit._at_lnk_basis('flaf')
|
||||
- slip_ohne._at_lnk_basis('flaf'), 9000.0, places=2)
|
||||
# SV-pflichtig im Zuflussmonat (rohe Basis vor HBG-Cap)
|
||||
self.assertAlmostEqual(
|
||||
slip_mit._l10n_at_sv_basis_roh()
|
||||
- slip_ohne._l10n_at_sv_basis_roh(), 9000.0, places=2)
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# RF-VGL-2: BV-Anwartschafts-Teil (§ 67 Abs 8 lit a, 6 %/7.500 €)
|
||||
# ------------------------------------------------------------------
|
||||
def test_19_vergleich_bv_sechs_prozent(self):
|
||||
"""9.000 € Vergleichssumme mit BV-Anwartschaft (lb-end-21
|
||||
Beispiel 2): erste 7.500 € nach anteiligem §-62-Abzug mit 6 %,
|
||||
der Überhang von 1.500 € fällt in die Fünftelregelung zurück
|
||||
(anteilige Beitragszuordnung, LStR Rz 1102b)."""
|
||||
emp_mit = self._employee(ueberzahlung=3000.0)
|
||||
emp_ohne = self._employee(ueberzahlung=3000.0)
|
||||
slip_mit = self._slip(emp_mit)
|
||||
slip_ohne = self._slip(emp_ohne)
|
||||
self._input(slip_mit, 'ATP_VERGLEICH_BV', 9000.0)
|
||||
|
||||
self.assertAlmostEqual(self._total(slip_mit, 'VERGLEICH_BV'),
|
||||
9000.0, places=2)
|
||||
satz = sum(slip_mit._l10n_at_sv_satz(
|
||||
'dn', k, staffel_basis=slip_mit._l10n_at_sv_basis_roh())
|
||||
for k in ('kv', 'pv', 'av', 'ak', 'wf'))
|
||||
steuersatz = float(slip_mit._l10n_at_param(
|
||||
'at_endabrechnung')['abfertigung_steuersatz'])
|
||||
self.assertAlmostEqual(
|
||||
self._total(slip_mit, 'LST_VERGLEICH_BV'),
|
||||
7500.0 * (1.0 - satz / 100.0) * steuersatz / 100.0, places=2)
|
||||
# Überhang in die Fünftelregelung zurück
|
||||
self.assertAlmostEqual(slip_mit._at_fuenftel_total(), 1500.0,
|
||||
places=2)
|
||||
deckel = float(slip_mit._l10n_at_param('at_sv_hbg_monatlich')) \
|
||||
* 9.0 / 5.0
|
||||
ueberhang_bem = 1500.0 * (1.0 - satz / 100.0)
|
||||
self.assertAlmostEqual(
|
||||
slip_mit._at_fuenftel_frei_betr(),
|
||||
min(ueberhang_bem / 5.0, deckel), places=2)
|
||||
# Sechstel unverändert; LNK und SV über die volle Summe
|
||||
self.assertAlmostEqual(
|
||||
slip_mit._l10n_at_sechstel() - slip_ohne._l10n_at_sechstel(),
|
||||
0.0, places=2)
|
||||
self.assertAlmostEqual(
|
||||
slip_mit._at_lnk_basis('flaf')
|
||||
- slip_ohne._at_lnk_basis('flaf'), 9000.0, places=2)
|
||||
self.assertAlmostEqual(
|
||||
slip_mit._l10n_at_sv_basis_roh()
|
||||
- slip_ohne._l10n_at_sv_basis_roh(), 9000.0, places=2)
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# RF-VGL-3: Deckel — Fünftel an 9 × HBG/5, BV-Teil an 7.500 €
|
||||
# ------------------------------------------------------------------
|
||||
def test_20_vergleich_deckel(self):
|
||||
"""Deckelfälle (lb-end-21): der Fünftel-Deckel greift, wenn die
|
||||
§-62-gekürzte Bemessung 5 × 12.474 € übersteigt — bei Brutto
|
||||
100.000 € ist das der Fall; das 70.000-€-Beispiel der Quelle
|
||||
meint die bereits gekürzte Bemessungsgrundlage. BV-Teil
|
||||
10.000 € → 7.500 € begünstigt, 2.500 € zurück in die
|
||||
Fünftelregelung."""
|
||||
emp = self._employee(ueberzahlung=3000.0)
|
||||
slip = self._slip(emp)
|
||||
self._input(slip, 'ATP_VERGLEICH', 100000.0)
|
||||
satz = sum(slip._l10n_at_sv_satz(
|
||||
'dn', k, staffel_basis=slip._l10n_at_sv_basis_roh())
|
||||
for k in ('kv', 'pv', 'av', 'ak', 'wf'))
|
||||
bemessung = 100000.0 * (1.0 - satz / 100.0)
|
||||
deckel = float(slip._l10n_at_param('at_sv_hbg_monatlich')) \
|
||||
* 9.0 / 5.0
|
||||
self.assertGreater(bemessung / 5.0, deckel)
|
||||
self.assertAlmostEqual(slip._at_fuenftel_frei_betr(), deckel,
|
||||
places=2)
|
||||
self.assertAlmostEqual(
|
||||
slip._at_fuenftel_tarif_basis(), bemessung - deckel, places=2)
|
||||
|
||||
slip.input_line_ids.filtered(
|
||||
lambda i: i.input_type_id.code == 'ATP_VERGLEICH').write(
|
||||
{'amount': 0.0})
|
||||
self._input(slip, 'ATP_VERGLEICH_BV', 10000.0)
|
||||
self.assertAlmostEqual(slip._at_vergleich_bv_beguenstigt(), 7500.0,
|
||||
places=2)
|
||||
self.assertAlmostEqual(slip._at_vergleich_bv_ueberhang(), 2500.0,
|
||||
places=2)
|
||||
self.assertAlmostEqual(slip._at_fuenftel_total(), 2500.0,
|
||||
places=2)
|
||||
steuersatz = float(slip._l10n_at_param(
|
||||
'at_endabrechnung')['abfertigung_steuersatz'])
|
||||
self.assertAlmostEqual(
|
||||
self._total(slip, 'LST_VERGLEICH_BV'),
|
||||
7500.0 * (1.0 - satz / 100.0) * steuersatz / 100.0, places=2)
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# RF-VGL-4: Wizard-E2E und Validierungen (Bestätigungspflichten)
|
||||
# ------------------------------------------------------------------
|
||||
def test_21_vergleich_wizard(self):
|
||||
emp = self._employee()
|
||||
emp.version_id.write({
|
||||
'structure_type_id': self.env.ref(
|
||||
'l10n_at_hr_payroll_private.structure_type_at_privat').id,
|
||||
'l10n_at_abfertigung_neu': False,
|
||||
})
|
||||
basis = {
|
||||
'employee_id': emp.id,
|
||||
'austrittsdatum': date(2026, 3, 15),
|
||||
'departure_reason_id': self.env.ref(
|
||||
'l10n_at_hr_payroll.departure_reason_einvernehmlich').id,
|
||||
'vergleich_aktiv': True,
|
||||
'vergleich_rest_betrag': 9000.0,
|
||||
'vergleich_nachweis':
|
||||
'Außergerichtlicher Vergleich, Ansprüche strittig',
|
||||
}
|
||||
wizard = self.env['l10n.at.payroll.endabrechnung.wizard'].create(
|
||||
dict(basis))
|
||||
with self.assertRaises(UserError):
|
||||
wizard.action_payslip() # Aufgliederung nicht bestätigt
|
||||
wizard.write({'vergleich_aufteilung_bestaetigt': True,
|
||||
'vergleich_bv_betrag': 8000.0,
|
||||
'vergleich_bv_anwartschaft_bestaetigt': True})
|
||||
with self.assertRaises(UserError):
|
||||
wizard.action_payslip() # BV-Teil über 7.500 €
|
||||
wizard.write({'vergleich_bv_betrag': 5000.0,
|
||||
'vergleich_bv_anwartschaft_bestaetigt': False})
|
||||
with self.assertRaises(UserError):
|
||||
wizard.action_payslip() # BV-Anwartschaft nicht bestätigt
|
||||
wizard.write({'vergleich_bv_betrag': 7500.0,
|
||||
'vergleich_bv_anwartschaft_bestaetigt': True})
|
||||
ergebnis = wizard.action_payslip()
|
||||
slip = self.env['hr.payslip'].browse(ergebnis['res_id'])
|
||||
|
||||
self.assertAlmostEqual(self._total(slip, 'VERGLEICH'), 9000.0,
|
||||
places=2)
|
||||
self.assertAlmostEqual(self._total(slip, 'VERGLEICH_BV'), 7500.0,
|
||||
places=2)
|
||||
self.assertEqual(
|
||||
slip.l10n_at_vergleich_nachweis,
|
||||
'Außergerichtlicher Vergleich, Ansprüche strittig')
|
||||
satz = sum(slip._l10n_at_sv_satz(
|
||||
'dn', k, staffel_basis=slip._l10n_at_sv_basis_roh())
|
||||
for k in ('kv', 'pv', 'av', 'ak', 'wf'))
|
||||
steuersatz = float(slip._l10n_at_param(
|
||||
'at_endabrechnung')['abfertigung_steuersatz'])
|
||||
self.assertAlmostEqual(
|
||||
self._total(slip, 'LST_VERGLEICH_BV'),
|
||||
7500.0 * (1.0 - satz / 100.0) * steuersatz / 100.0, places=2)
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# RF-PRM-1: Prämie mit Endabrechnung (§ 16 AngG, sonstiger Bezug)
|
||||
# ------------------------------------------------------------------
|
||||
def test_22_pram_end_mit_endabrechnung(self):
|
||||
"""3.000 € aliquote Prämie, mit der Endabrechnung ausgezahlt
|
||||
(lb-end-18): sonstiger Bezug im Jahressechstel (6 %-Band,
|
||||
Sechstel unverändert), SZ-SV (ohne AK/WF), voll LNK-pflichtig,
|
||||
BV-Beitrag 1,53 % ungecappt (§ 6 Abs 5 BMSVG)."""
|
||||
emp_mit = self._employee(ueberzahlung=3000.0)
|
||||
emp_ohne = self._employee(ueberzahlung=3000.0)
|
||||
for emp in (emp_mit, emp_ohne):
|
||||
emp.version_id.write({'l10n_at_abfertigung_neu': True})
|
||||
slip_mit = self._slip(emp_mit)
|
||||
slip_ohne = self._slip(emp_ohne)
|
||||
self._input(slip_mit, 'ATP_PRAM_END', 3000.0)
|
||||
|
||||
self.assertAlmostEqual(self._total(slip_mit, 'PRAM_END'), 3000.0,
|
||||
places=2)
|
||||
# Sonstiger Bezug erhöht das Jahressechstel nicht
|
||||
self.assertAlmostEqual(
|
||||
slip_mit._l10n_at_sechstel() - slip_ohne._l10n_at_sechstel(),
|
||||
0.0, places=2)
|
||||
# SZ-Bemessung enthält die Prämie (SV-DN nach § 67 Abs 12
|
||||
# abziehen, um den Brutto-Anteil zu isolieren)
|
||||
svdn_sz_diff = (slip_mit._l10n_at_svdn_sz()
|
||||
- slip_ohne._l10n_at_svdn_sz())
|
||||
self.assertAlmostEqual(
|
||||
slip_mit._l10n_at_sz_bemessung()
|
||||
- slip_ohne._l10n_at_sz_bemessung() + svdn_sz_diff,
|
||||
3000.0, places=2)
|
||||
# SZ-SV: KV/PV/AV, ohne AK/WF (§ 62 Z 3/Z 5)
|
||||
satz_sz = sum(slip_mit._l10n_at_sv_satz(
|
||||
'dn', k, staffel_basis=slip_mit._l10n_at_sv_basis_roh())
|
||||
for k in ('kv', 'pv', 'av'))
|
||||
self.assertAlmostEqual(svdn_sz_diff, 3000.0 * satz_sz / 100.0,
|
||||
places=2)
|
||||
# LNK über die volle Prämie
|
||||
self.assertAlmostEqual(
|
||||
slip_mit._at_lnk_basis('flaf')
|
||||
- slip_ohne._at_lnk_basis('flaf'), 3000.0, places=2)
|
||||
# BV 1,53 % ungecappt (§ 6 Abs 1 iVm Abs 5 BMSVG)
|
||||
satz_bv = float(slip_mit._l10n_at_param('at_sv_bv_dg'))
|
||||
self.assertAlmostEqual(
|
||||
slip_mit._at_bv_beitrag() - slip_ohne._at_bv_beitrag(),
|
||||
3000.0 * satz_bv / 100.0, places=2)
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# RF-PRM-2: Später fällige Prämie (§ 67 Abs 10) mit SV-Rollung
|
||||
# ------------------------------------------------------------------
|
||||
def test_23_pram_end_tarif_und_rollung(self):
|
||||
"""3.000 € anteilige Prämie für Leistungen im Austrittsjahr 2025,
|
||||
fällig und ausgezahlt im März 2026 (lb-end-18): tarifisch im
|
||||
Zuflussmonat OHNE Sechstel-Erhöhung (§ 67 Abs 10); SV-Rollung
|
||||
auf den Beitragsmonat im Austrittsjahr mit historischen Sätzen
|
||||
und HBG (E-MVB 044)."""
|
||||
emp_mit = self._employee(ueberzahlung=3000.0,
|
||||
ende=date(2025, 12, 31))
|
||||
emp_ohne = self._employee(ueberzahlung=3000.0,
|
||||
ende=date(2025, 12, 31))
|
||||
slip_mit = self._slip(emp_mit, monat=3, jahr=2026)
|
||||
slip_ohne = self._slip(emp_ohne, monat=3, jahr=2026)
|
||||
self._input(slip_mit, 'ATP_PRAM_END_TARIF', 3000.0)
|
||||
|
||||
self.assertAlmostEqual(self._total(slip_mit, 'PRAM_END_TARIF'),
|
||||
3000.0, places=2)
|
||||
# Sechstel unverändert (§ 67 Abs 10: kein Jahressechstel-Effekt)
|
||||
self.assertAlmostEqual(
|
||||
slip_mit._l10n_at_sechstel() - slip_ohne._l10n_at_sechstel(),
|
||||
0.0, places=2)
|
||||
# Tarifisch in der laufenden Bemessung des Zuflussmonats
|
||||
svdn_diff = (slip_mit._l10n_at_svdn_gesamt()
|
||||
- slip_ohne._l10n_at_svdn_gesamt())
|
||||
self.assertAlmostEqual(
|
||||
slip_mit._l10n_at_bemessung_laufen()
|
||||
- slip_ohne._l10n_at_bemessung_laufen() + svdn_diff,
|
||||
3000.0, places=2)
|
||||
# LNK über die volle Prämie
|
||||
self.assertAlmostEqual(
|
||||
slip_mit._at_lnk_basis('flaf')
|
||||
- slip_ohne._at_lnk_basis('flaf'), 3000.0, places=2)
|
||||
# Rollung: SV-Beitragsmonat auf dem Lauf (Austrittsjahr 2025);
|
||||
# historische HBG (2025: 6.450 €) und Sätze des Rollmonats
|
||||
slip_mit.write({'l10n_at_pram_beitragsmonat': date(2025, 6, 1)})
|
||||
slip_mit.compute_sheet()
|
||||
basis = self._basis_monate(slip_mit)
|
||||
self.assertAlmostEqual(basis[date(2025, 6, 1)], 3000.0, places=2)
|
||||
# Im Zuflussmonat bleibt die Prämie außer Ansatz (§ 54 ASVG:
|
||||
# Zuordnung zum Leistungszeitraum) — die Basis entspricht der
|
||||
# eines Laufs ohne Prämie.
|
||||
basis_ohne = self._basis_monate(slip_ohne)
|
||||
self.assertAlmostEqual(basis[date(2026, 3, 1)],
|
||||
basis_ohne[date(2026, 3, 1)], places=2)
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# RF-PRM-3: Wizard-E2E und Validierungen (§-16-Aliquot, Rollung)
|
||||
# ------------------------------------------------------------------
|
||||
def test_24_pram_wizard(self):
|
||||
emp = self._employee()
|
||||
emp.version_id.write({
|
||||
'structure_type_id': self.env.ref(
|
||||
'l10n_at_hr_payroll_private.structure_type_at_privat').id,
|
||||
'l10n_at_abfertigung_neu': False,
|
||||
})
|
||||
basis = {
|
||||
'employee_id': emp.id,
|
||||
'austrittsdatum': date(2026, 3, 15),
|
||||
'departure_reason_id': self.env.ref(
|
||||
'l10n_at_hr_payroll.departure_reason_einvernehmlich').id,
|
||||
'pram_aktiv': True,
|
||||
'pram_voller_betrag': 6000.0,
|
||||
'pram_anspruchszeitraum_monate': 12,
|
||||
'pram_dienstzeit_monate': 3,
|
||||
'pram_nachweis': 'KV-Prämienvereinbarung, Leistungszeitraum',
|
||||
}
|
||||
wizard = self.env['l10n.at.payroll.endabrechnung.wizard'].create(
|
||||
dict(basis))
|
||||
self.assertAlmostEqual(wizard.pram_aliquot_vorschau, 1500.0,
|
||||
places=2)
|
||||
with self.assertRaises(UserError):
|
||||
wizard.action_payslip() # Leistungsgrundlage nicht bestätigt
|
||||
wizard.write({'pram_leistung_bestaetigt': True,
|
||||
'pram_betrag': 1000.0})
|
||||
ergebnis = wizard.action_payslip()
|
||||
slip = self.env['hr.payslip'].browse(ergebnis['res_id'])
|
||||
self.assertAlmostEqual(self._total(slip, 'PRAM_END'), 1000.0,
|
||||
places=2)
|
||||
self.assertEqual(
|
||||
slip.l10n_at_pram_nachweis,
|
||||
'KV-Prämienvereinbarung, Leistungszeitraum')
|
||||
|
||||
# Später fällig: Beitragsmonat der Rollung erforderlich
|
||||
wizard2 = self.env[
|
||||
'l10n.at.payroll.endabrechnung.wizard'].create({
|
||||
**basis,
|
||||
'pram_leistung_bestaetigt': True,
|
||||
'pram_betrag': 1000.0,
|
||||
'pram_zahlungsart': 'spaeter_faellig',
|
||||
})
|
||||
with self.assertRaises(UserError):
|
||||
wizard2.action_payslip() # Rollungs-Beitragsmonat fehlt
|
||||
wizard2.write({'pram_beitragsmonat': date(2026, 1, 1)})
|
||||
ergebnis = wizard2.action_payslip()
|
||||
slip2 = self.env['hr.payslip'].browse(ergebnis['res_id'])
|
||||
self.assertAlmostEqual(self._total(slip2, 'PRAM_END_TARIF'),
|
||||
1000.0, places=2)
|
||||
self.assertEqual(slip2.l10n_at_pram_beitragsmonat,
|
||||
date(2026, 1, 1))
|
||||
basis = self._basis_monate(slip2)
|
||||
self.assertIn(date(2026, 1, 1), basis)
|
||||
@@ -0,0 +1,323 @@
|
||||
# Part of the odoo-at-payroll project. License: LGPL-3.
|
||||
"""AP16 (8.13): Karenz-/Familien-Freistellungen — Entgelt-Stopp je
|
||||
unbezahlter Karenz-Art (KARENZ_ENTGELT, Muster MSCH_ENTGELT), eSV-An-/
|
||||
Abmeldungen aus der vr.event-Registry (Papa-Monat tagesgenau, Karenz-
|
||||
Art-Protokoll), fiktive BV mit §-7-Abs-4-Z-1–3-BMSVG-Karenz-Brücke,
|
||||
BV-Vor-Entgelt bei Pflegeteilzeit (§ 6 Abs 4 BMSVG), Sonderwochengeld
|
||||
(§ 163 ASVG) und Ruhen-Warnungen (§ 166 ASVG), §-23-Abs-8-ETZ-
|
||||
Hochrechnung im Endabrechnungs-Wizard."""
|
||||
import base64
|
||||
import datetime
|
||||
|
||||
from odoo import SUPERUSER_ID
|
||||
from odoo.exceptions import UserError
|
||||
from odoo.tests import TransactionCase, tagged
|
||||
|
||||
|
||||
@tagged('post_install', '-at_install')
|
||||
class KarenzPrivateTest(TransactionCase):
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.company = self.env.company
|
||||
self.structure = self.env.ref(
|
||||
'l10n_at_hr_payroll_private.structure_at_privat')
|
||||
self.kv2203 = self.env.ref(
|
||||
'l10n_at_hr_payroll_private.kv_si_2203')
|
||||
self.gruppe_ii = self.env.ref(
|
||||
'l10n_at_hr_payroll_private.kv2203_grp_ii')
|
||||
self.calendar = self.env['resource.calendar'].create({
|
||||
'name': 'AT Karenz 40h',
|
||||
'tz': 'Europe/Vienna',
|
||||
'hours_per_day': 8,
|
||||
'attendance_ids': [
|
||||
(0, 0, {'name': 'Tag %d' % wd, 'dayofweek': str(wd),
|
||||
'hour_from': 8.0, 'hour_to': 16.0})
|
||||
for wd in range(5)
|
||||
],
|
||||
})
|
||||
self.kalender_teilzeit = self.env['resource.calendar'].create({
|
||||
'name': 'AT Karenz 20h (Teilzeit)',
|
||||
'tz': 'Europe/Vienna',
|
||||
'hours_per_day': 4,
|
||||
'attendance_ids': [
|
||||
(0, 0, {'name': 'Tag %d' % wd, 'dayofweek': str(wd),
|
||||
'hour_from': 8.0, 'hour_to': 12.0})
|
||||
for wd in range(5)
|
||||
],
|
||||
})
|
||||
self.company.resource_calendar_id = self.calendar
|
||||
self.typ_bildung = self.env.ref(
|
||||
'l10n_at_hr_payroll_private.leave_type_at_bildungskarenz')
|
||||
self.typ_pflege = self.env.ref(
|
||||
'l10n_at_hr_payroll_private.leave_type_at_pflegekarenz')
|
||||
self.typ_karenz = self.env.ref(
|
||||
'l10n_at_hr_payroll_private.leave_type_at_karenz')
|
||||
self.typ_msch = self.env.ref(
|
||||
'l10n_at_hr_payroll_private.leave_type_at_mutterschutz')
|
||||
self.typ_krank = self.env.ref(
|
||||
'l10n_at_hr_payroll_private.leave_type_at_krankenstand')
|
||||
|
||||
def _employee(self, teilzeit=False, ssnid=False, ende=None):
|
||||
employee = self.env['hr.employee'].create({
|
||||
'name': 'Karenz Test', 'sex': 'female',
|
||||
'birthday': '1990-05-15'})
|
||||
version = self.env['hr.version'].search(
|
||||
[('employee_id', '=', employee.id)], limit=1)
|
||||
version.write({
|
||||
'contract_date_start': datetime.date(2020, 7, 1),
|
||||
'kv_id': self.kv2203.id,
|
||||
'kv_gruppe_id': self.gruppe_ii.id,
|
||||
'erfahrungsstufe': 1,
|
||||
'ueberzahlung': 2059.41,
|
||||
'resource_calendar_id': self.calendar.id,
|
||||
})
|
||||
if ssnid:
|
||||
version.write({'ssnid': '1234150590',
|
||||
'sex': 'female'})
|
||||
if ende:
|
||||
version.write({'contract_date_end': ende})
|
||||
version.generate_work_entries(
|
||||
datetime.date(2026, 8, 1), datetime.date(2027, 3, 31))
|
||||
return employee
|
||||
|
||||
def _slip(self, employee, monat, jahr=2026, confirm=False):
|
||||
erster = datetime.date(jahr, monat, 1)
|
||||
letzter = (erster.replace(day=28)
|
||||
+ datetime.timedelta(days=4)).replace(day=1) \
|
||||
- datetime.timedelta(days=1)
|
||||
slip = self.env['hr.payslip'].create({
|
||||
'name': 'Karenz %d/%d' % (monat, jahr),
|
||||
'employee_id': employee.id,
|
||||
'struct_id': self.structure.id,
|
||||
'date_from': erster,
|
||||
'date_to': letzter,
|
||||
})
|
||||
slip.compute_sheet()
|
||||
if confirm:
|
||||
slip.action_payslip_done()
|
||||
return slip
|
||||
|
||||
def _total(self, slip, code):
|
||||
return sum(slip.line_ids.filtered(
|
||||
lambda l: l.code == code).mapped('total'))
|
||||
|
||||
def _leave(self, employee, typ, von, bis, skip_check=False):
|
||||
vals = {
|
||||
'name': '%s %s' % (typ.name, von),
|
||||
'employee_id': employee.id,
|
||||
'holiday_status_id': typ.id,
|
||||
'request_date_from': von,
|
||||
'request_date_to': bis,
|
||||
}
|
||||
if skip_check:
|
||||
# Überlappende Freistellungen (Krankheit während Karenz/MSchG):
|
||||
# direkt auf state='validate' — _action_validate würde an
|
||||
# number_of_days == 0 (vom Karenz-Typ belegte Tage) scheitern.
|
||||
leave = self.env['hr.leave'].with_context(
|
||||
leave_skip_date_check=True,
|
||||
leave_skip_state_check=True).create(
|
||||
dict(vals, state='validate'))
|
||||
return leave
|
||||
leave = self.env['hr.leave'].create(vals)
|
||||
leave.with_user(SUPERUSER_ID)._action_validate()
|
||||
return leave
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# RF-KAR-1: Entgelt-Stopp je Karenz-Art (KARENZ_ENTGELT)
|
||||
# ------------------------------------------------------------------
|
||||
def test_01_entgelt_stopp_bildungskarenz(self):
|
||||
"""Bildungskarenz 1.-15. 11. (§ 11 AVRAG, 15 KT/10 AT): das
|
||||
Karenzgeld zahlt die AK — KARENZ_ENTGELT stoppt das
|
||||
Dienstgeber-Entgelt je Arbeitstag (Muster MSCH_ENTGELT)."""
|
||||
emp_mit = self._employee()
|
||||
emp_ohne = self._employee()
|
||||
slip_mit = self._slip(emp_mit, 11)
|
||||
slip_ohne = self._slip(emp_ohne, 11)
|
||||
self._leave(emp_mit, self.typ_bildung,
|
||||
datetime.date(2026, 11, 1),
|
||||
datetime.date(2026, 11, 15))
|
||||
slip_mit.compute_sheet()
|
||||
|
||||
status = slip_mit._at_karenz_status()
|
||||
self.assertEqual(len(status['kalendertage']), 15)
|
||||
self.assertEqual(len(status['arbeitstage']), 10)
|
||||
self.assertTrue(any('Bildungskarenz' in a
|
||||
for a in status['arten']))
|
||||
tagesatz = 2059.41 / 21
|
||||
self.assertAlmostEqual(self._total(slip_mit, 'KARENZ_ENTGELT'),
|
||||
-tagesatz * 10, places=2)
|
||||
# Keine MSCH-Wirkung; SV-Basis durch die negative Zeile reduziert
|
||||
self.assertEqual(self._total(slip_mit, 'MSCH_ENTGELT'), 0.0)
|
||||
basis_diff = (slip_ohne._l10n_at_sv_basis_roh()
|
||||
- slip_mit._l10n_at_sv_basis_roh())
|
||||
self.assertAlmostEqual(basis_diff, tagesatz * 10, places=2)
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# RF-KAR-2: eSV-An-/Abmeldungen aus Karenz (vr.event)
|
||||
# ------------------------------------------------------------------
|
||||
def test_02_vr_events_karenz(self):
|
||||
"""Pflegekarenz 1.-15. 11.: Abmeldung zum Tag vor Beginn
|
||||
(Ende des Entgeltanspruchs, § 163/§ 11 ASVG-Rahmen) und
|
||||
Anmeldung zur Rückkehr (16. 11.); Karenzart im Protokoll;
|
||||
erneuter Lauf idempotent (Registry-Dedup)."""
|
||||
self.company.write({
|
||||
'l10n_at_beitragskontonummer': '1412345678',
|
||||
})
|
||||
employee = self._employee(ssnid=True)
|
||||
self._leave(employee, self.typ_pflege,
|
||||
datetime.date(2026, 11, 1),
|
||||
datetime.date(2026, 11, 15))
|
||||
lauf = self.env['l10n.at.payroll.vr'].create({
|
||||
'company_id': self.company.id,
|
||||
'stichtag': datetime.date(2026, 12, 31),
|
||||
})
|
||||
lauf.action_erzeugen()
|
||||
self.assertEqual(lauf.state, 'done')
|
||||
events = self.env['l10n.at.payroll.vr.event'].search([
|
||||
('company_id', '=', self.company.id),
|
||||
('employee_id', '=', employee.id),
|
||||
])
|
||||
adate = {(e.art, e.adatum) for e in events}
|
||||
self.assertIn(('M4', datetime.date(2026, 10, 31)), adate)
|
||||
self.assertIn(('M3', datetime.date(2026, 11, 16)), adate)
|
||||
self.assertIn('Pflegekarenz', lauf.protokoll)
|
||||
roh = base64.b64decode(lauf.datei).decode('ISO-8859-15')
|
||||
self.assertIn('M4-K', roh)
|
||||
self.assertIn('M3-K', roh)
|
||||
# Idempotenz: zweite Meldungen sind registriert → Lauf leer
|
||||
lauf2 = self.env['l10n.at.payroll.vr'].create({
|
||||
'company_id': self.company.id,
|
||||
'stichtag': datetime.date(2026, 12, 31),
|
||||
})
|
||||
with self.assertRaises(UserError):
|
||||
lauf2.action_erzeugen()
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# RF-KAR-3: BMSVG-Karenz-Brücke (§ 7 Abs 4 Z 1–3)
|
||||
# ------------------------------------------------------------------
|
||||
def test_03_bmsvg_karenz_bruecke(self):
|
||||
"""Mutterschutz-Frist Nov 2026, Karenz Dez 2026–Feb 2027,
|
||||
neuerliches Verbot 1. 3. 2027 (Z 1): der Bemessungsstichtag der
|
||||
fiktiven BV ist das der Karenz unmittelbar vorangegangene
|
||||
Beschäftigungsverbot — Referenzmonate Aug/Sep/Okt 2026."""
|
||||
employee = self._employee()
|
||||
self._leave(employee, self.typ_msch,
|
||||
datetime.date(2026, 11, 1),
|
||||
datetime.date(2026, 11, 15))
|
||||
self._leave(employee, self.typ_karenz,
|
||||
datetime.date(2026, 11, 16),
|
||||
datetime.date(2027, 2, 28))
|
||||
self._leave(employee, self.typ_msch,
|
||||
datetime.date(2027, 3, 1),
|
||||
datetime.date(2027, 3, 15))
|
||||
slip = self._slip(employee, 11, jahr=2026)
|
||||
stichtag, anzahl = slip._at_msch_referenz_stichtag_und_anzahl(
|
||||
datetime.date(2027, 3, 1))
|
||||
self.assertEqual(stichtag, datetime.date(2026, 11, 1))
|
||||
self.assertEqual(anzahl, 3)
|
||||
monate = slip._at_msch_referenz_monate(datetime.date(2027, 3, 1))
|
||||
self.assertEqual(
|
||||
monate,
|
||||
[datetime.date(2026, 8, 1), datetime.date(2026, 9, 1),
|
||||
datetime.date(2026, 10, 1)])
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# RF-KAR-4: BV-Vor-Entgelt bei Pflegeteilzeit (§ 6 Abs 4 BMSVG)
|
||||
# ------------------------------------------------------------------
|
||||
def test_04_bv_vor_entgelt_pflegeteilzeit(self):
|
||||
"""20-h-Teilzeit (work_time_rate 0,5) mit gesetztem
|
||||
Vor-Reduzierungs-Entgelt: die BV-Basis läuft auf dem
|
||||
Vor-Reduzierungs-Entgelt (§ 6 Abs 4 BMSVG), nicht auf der
|
||||
reduzierten laufenden Basis."""
|
||||
employee = self._employee()
|
||||
version = employee.version_id
|
||||
version.write({
|
||||
'l10n_at_abfertigung_neu': True,
|
||||
'l10n_at_bv_vor_entgelt': 2059.41,
|
||||
})
|
||||
version.resource_calendar_id = self.kalender_teilzeit
|
||||
version.generate_work_entries(
|
||||
datetime.date(2026, 8, 1), datetime.date(2026, 11, 30))
|
||||
slip = self._slip(employee, 11)
|
||||
self.assertAlmostEqual(slip._at_bv_basis_laufen(), 2059.41,
|
||||
places=2)
|
||||
# OHNE §-6-Abs-4-Feld: reduzierte laufende Basis
|
||||
version.write({'l10n_at_bv_vor_entgelt': 0.0})
|
||||
slip.compute_sheet()
|
||||
self.assertAlmostEqual(slip._at_bv_basis_laufen(), 1029.71,
|
||||
places=2)
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# RF-KAR-5: Sonderwochengeld (§ 163) und Ruhen (§ 166)
|
||||
# ------------------------------------------------------------------
|
||||
def test_05_sonderwochengeld_und_ruhen(self):
|
||||
"""Mutterschutz-Frist 1.-15. 11. innerhalb einer Pflegekarenz:
|
||||
Sonderwochengeld statt Wochengeld (§ 163 ASVG); Krankenstand
|
||||
1.-10. 11. (Entgeltfortzahlung 100 %) → Ruhen-Warnung
|
||||
(§ 166 Abs 1 Z 2)."""
|
||||
employee = self._employee()
|
||||
# Karenz + Krankenstand + Mutterschutz überlappen real (Krankheit
|
||||
# während der Frist); Odos Quere-Overlap-Sperre wird im Test mit
|
||||
# dem offiziellen leave_skip_date_check-Bypass umgangen — die
|
||||
# Leave-Überlappungs-Policy ist Mandanten-Entscheid (offener
|
||||
# Punkt in docs/rechenfaelle/karenz.md).
|
||||
self._leave(employee, self.typ_pflege,
|
||||
datetime.date(2026, 11, 1),
|
||||
datetime.date(2026, 12, 15), skip_check=True)
|
||||
self._leave(employee, self.typ_krank,
|
||||
datetime.date(2026, 11, 1),
|
||||
datetime.date(2026, 11, 10), skip_check=True)
|
||||
self._leave(employee, self.typ_msch,
|
||||
datetime.date(2026, 11, 5),
|
||||
datetime.date(2026, 11, 15), skip_check=True)
|
||||
# Krankenstand Nov 1–10 als direkte Work Entries (ein Leave auf
|
||||
# denselben Tagen erzeugt der Work-Entry-Generator nicht — die
|
||||
# Karenz belegt die Tage bereits); die EFZ-Maschine liest die
|
||||
# KRANK-Entries für die Fortzahlungs-Phase.
|
||||
krank_typ = self.env['hr.work.entry.type'].search(
|
||||
[('code', '=', 'ATP_KRANK')], limit=1)
|
||||
arbeitstage = [datetime.date(2026, 11, d) for d in
|
||||
(2, 3, 4, 5, 6, 9, 10)]
|
||||
for tag in arbeitstage:
|
||||
self.env['hr.work.entry'].create({
|
||||
'name': 'Krankenstand %s' % tag,
|
||||
'employee_id': employee.id,
|
||||
'work_entry_type_id': krank_typ.id,
|
||||
'date': tag,
|
||||
'duration': 8.0,
|
||||
})
|
||||
slip = self._slip(employee, 11)
|
||||
slip.compute_sheet()
|
||||
self.assertTrue(slip._at_msch_sonderwochengeld())
|
||||
warnungen = slip._at_msch_ruhen_warnungen()
|
||||
self.assertTrue(any('Ruhen zur Gänze' in w for w in warnungen))
|
||||
self.assertIn('Sonderwochengeld', slip.l10n_at_msch_info)
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# RF-KAR-6: §-23-Abs-8-Hochrechnung im Wizard (Elternteilzeit)
|
||||
# ------------------------------------------------------------------
|
||||
def test_06_etz_hochrechnung_wizard(self):
|
||||
"""20-h-Versionskalender (work_time_rate 0,5): der §-23-Abs-8-
|
||||
Hochrechnungs-Vorschlag = Monatsentgelt ÷ work_time_rate; die
|
||||
Übernahme bleibt bestätigt (kein Auto-Write)."""
|
||||
employee = self._employee()
|
||||
version = employee.version_id
|
||||
version.resource_calendar_id = self.kalender_teilzeit
|
||||
version.generate_work_entries(
|
||||
datetime.date(2026, 8, 1), datetime.date(2026, 11, 30))
|
||||
wizard = self.env['l10n.at.payroll.endabrechnung.wizard'].create({
|
||||
'employee_id': employee.id,
|
||||
'austrittsdatum': datetime.date(2026, 11, 15),
|
||||
'departure_reason_id': self.env.ref(
|
||||
'l10n_at_hr_payroll'
|
||||
'.departure_reason_einvernehmlich').id,
|
||||
'abf_alt_aktiv': True,
|
||||
'abf_alt_monatsentgelt': 1029.71,
|
||||
'abf_alt_laufender_arbeitslohn': 1029.71,
|
||||
'abf_alt_monatslohnsteuer': 0.0,
|
||||
'abf_alt_mehrfach': 2.0,
|
||||
'abf_alt_anspruchsart': 'normal',
|
||||
})
|
||||
self.assertAlmostEqual(wizard.abf_alt_hochrechnung_vorschau,
|
||||
2059.42, places=2)
|
||||
@@ -185,6 +185,59 @@ class PfaendungPrivateTest(TransactionCase):
|
||||
self.assertAlmostEqual(self._total(slip, 'PFAENDUNG'),
|
||||
pfaendbar, places=2)
|
||||
|
||||
def test_09b_pfaendung_regel_beendigung(self):
|
||||
"""AP15-A: Netto-Abfertigung läuft über den eigenen §-291d-Topf."""
|
||||
employee = self._employee(datetime.date(2020, 1, 1), unterhalt=0)
|
||||
self._pfaendung(employee, datetime.date(2026, 2, 1))
|
||||
slip = self._slip(employee, 3)
|
||||
slip.write({
|
||||
'l10n_at_abf_alt_laufender_arbeitslohn': 3000.0,
|
||||
'l10n_at_abf_alt_monatslohnsteuer': 200.0,
|
||||
'l10n_at_abf_alt_mehrfach': 3.0,
|
||||
})
|
||||
input_type = self.env.ref(
|
||||
'l10n_at_hr_payroll_private.input_type_atp_abf_alt')
|
||||
self.env['hr.payslip.input'].create({
|
||||
'payslip_id': slip.id,
|
||||
'input_type_id': input_type.id,
|
||||
'amount': 10500.0,
|
||||
})
|
||||
slip.compute_sheet()
|
||||
|
||||
masse = slip._at_pfaendung_masse(None, 'beendigung')
|
||||
self.assertGreater(masse, 0.0)
|
||||
self.assertAlmostEqual(
|
||||
self._total(slip, 'PFAENDUNG_END'), masse, places=2)
|
||||
|
||||
def test_09c_pfaendung_abf_frei_topf(self):
|
||||
"""AP15-B: begünstigter Teil der freiwilligen Abfertigung läuft
|
||||
in den §-291d-Topf, abzüglich beider Abfertigungs-LSt-Arten; der
|
||||
Überhang bleibt über die laufende Bemessung pfändbar."""
|
||||
employee = self._employee(datetime.date(2020, 1, 1), unterhalt=0)
|
||||
self._pfaendung(employee, datetime.date(2026, 2, 1))
|
||||
slip = self._slip(employee, 3)
|
||||
slip.write({
|
||||
'l10n_at_abf_frei_basis_12': 36000.0,
|
||||
'l10n_at_abf_frei_dienstzeit_monate': 180,
|
||||
})
|
||||
input_type = self.env.ref(
|
||||
'l10n_at_hr_payroll_private.input_type_atp_abf_frei')
|
||||
self.env['hr.payslip.input'].create({
|
||||
'payslip_id': slip.id,
|
||||
'input_type_id': input_type.id,
|
||||
'amount': 40000.0,
|
||||
})
|
||||
slip.compute_sheet()
|
||||
|
||||
lst6 = self.env.company.currency_id.round(27000.0 * 0.06)
|
||||
self.assertAlmostEqual(
|
||||
self._total(slip, 'ABF_FREI'), 27000.0, places=2)
|
||||
self.assertAlmostEqual(
|
||||
self._total(slip, 'ABF_FREI_TARIF'), 13000.0, places=2)
|
||||
self.assertAlmostEqual(
|
||||
slip._at_pfaendung_basis(None, 'beendigung'),
|
||||
27000.0 - lst6, places=2)
|
||||
|
||||
def test_10_rang(self):
|
||||
"""Zwei Pfändungen → Rang 1 (früheres Einlangen) und Rang 2."""
|
||||
employee = self._employee(datetime.date(2026, 1, 1))
|
||||
|
||||
@@ -0,0 +1,218 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<!-- AP14-A: Endabrechnungs-Wizard (Beendigung) — sammelt UEL, -->
|
||||
<!-- Abgangsentschädigung, Zeitguthaben/-schulden und offene -->
|
||||
<!-- Vorschüsse und legt den Endabrechnungs-Lauf vorbefüllt an. -->
|
||||
<record id="endabrechnung_wizard_form_view" model="ir.ui.view">
|
||||
<field name="name">l10n.at.payroll.endabrechnung.wizard.form</field>
|
||||
<field name="model">l10n.at.payroll.endabrechnung.wizard</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Endabrechnung (Beendigung)">
|
||||
<group>
|
||||
<group string="Beendigung">
|
||||
<field name="employee_id"/>
|
||||
<field name="austrittsdatum"/>
|
||||
<field name="departure_reason_id" options="{'no_create': True}"/>
|
||||
</group>
|
||||
<group string="Offene Posten">
|
||||
<field name="uel_tage"/>
|
||||
<field name="zeit_guthaben_stunden"/>
|
||||
<field name="zeit_schulden_stunden"/>
|
||||
<field name="abgang_betrag"/>
|
||||
<field name="abgang_ffrist_tage"
|
||||
invisible="not abgang_betrag"/>
|
||||
<field name="vorschuss_saldo"/>
|
||||
</group>
|
||||
</group>
|
||||
<group string="Abfertigung Alt (§§ 23/23a AngG)">
|
||||
<field name="abf_alt_aktiv"/>
|
||||
<group invisible="not abf_alt_aktiv">
|
||||
<field name="abf_alt_anspruchsart"/>
|
||||
<field name="abf_alt_dienstzeit_monate"/>
|
||||
<field name="abf_alt_monatsentgelt"/>
|
||||
<field name="abf_alt_laufender_arbeitslohn"/>
|
||||
<field name="abf_alt_monatslohnsteuer"/>
|
||||
<field name="abf_alt_mehrfach"/>
|
||||
<field name="abf_alt_nachweis" placeholder="Dienstzeitnachweis, Alt-/Neu-Status und Anspruchsbegründung"/>
|
||||
<field name="abf_alt_anspruch_bestaetigt"/>
|
||||
</group>
|
||||
<group invisible="not abf_alt_aktiv">
|
||||
<field name="abf_alt_betrag_vorschau"/>
|
||||
<field name="abf_alt_hochrechnung_vorschau"
|
||||
invisible="not abf_alt_monatsentgelt"/>
|
||||
<field name="abf_alt_steuer_vervielfachung_vorschau"/>
|
||||
<field name="abf_alt_steuer_6_vorschau"/>
|
||||
<field name="abf_alt_lohnsteuer_vorschau"/>
|
||||
<field name="abf_alt_netto_vorschau"/>
|
||||
</group>
|
||||
</group>
|
||||
<group string="Freiwillige Abfertigung (§ 67 Abs 6 EStG)">
|
||||
<field name="abf_frei_aktiv"/>
|
||||
<group invisible="not abf_frei_aktiv">
|
||||
<field name="abf_frei_betrag"/>
|
||||
<field name="abf_frei_basis_12"/>
|
||||
<field name="abf_frei_dienstzeit_monate"/>
|
||||
<field name="abf_frei_erhaltene_abfertigungen"/>
|
||||
<field name="abf_frei_gesetzlicher_anspruch"/>
|
||||
<field name="abf_frei_nachweis" placeholder="Vordienstzeiten zum Lohnkonto (§ 76 EStG), erhaltene Abfertigungen, keine Anspruchsumwandlung"/>
|
||||
<field name="abf_frei_anspruch_bestaetigt"/>
|
||||
</group>
|
||||
<group invisible="not abf_frei_aktiv">
|
||||
<field name="abf_frei_z1_vorschau"/>
|
||||
<field name="abf_frei_z2_vorschau"/>
|
||||
<field name="abf_frei_kuerzung_vorschau"/>
|
||||
<field name="abf_frei_beguenstigt_vorschau"/>
|
||||
<field name="abf_frei_ueberhang_vorschau"/>
|
||||
<field name="abf_frei_lst_vorschau"/>
|
||||
<field name="abf_frei_netto_vorschau"/>
|
||||
</group>
|
||||
</group>
|
||||
<group string="Vergleichssumme (§ 67 Abs 8 lit a EStG)">
|
||||
<field name="vergleich_aktiv"/>
|
||||
<group invisible="not vergleich_aktiv">
|
||||
<field name="vergleich_rest_betrag"/>
|
||||
<field name="vergleich_bv_betrag"/>
|
||||
<field name="vergleich_bv_anwartschaft_bestaetigt"
|
||||
invisible="not vergleich_bv_betrag"/>
|
||||
<field name="vergleich_nachweis" placeholder="Aufgliederung der Vergleichsvereinbarung, strittige Ansprüche, BV-Zeiträume, Pauschalvergleich: Verhältnisfaktor"/>
|
||||
<field name="vergleich_aufteilung_bestaetigt"/>
|
||||
</group>
|
||||
<group invisible="not vergleich_aktiv">
|
||||
<field name="vergleich_fuenftel_frei_vorschau"/>
|
||||
<field name="vergleich_tarif_basis_vorschau"/>
|
||||
<field name="vergleich_bv_lst_vorschau"/>
|
||||
</group>
|
||||
</group>
|
||||
<group string="Prämie bei Beendigung (§ 16 AngG)">
|
||||
<field name="pram_aktiv"/>
|
||||
<group invisible="not pram_aktiv">
|
||||
<field name="pram_voller_betrag"/>
|
||||
<field name="pram_anspruchszeitraum_monate"/>
|
||||
<field name="pram_dienstzeit_monate"/>
|
||||
<field name="pram_aliquot_vorschau"/>
|
||||
<field name="pram_betrag"/>
|
||||
<field name="pram_zahlungsart"/>
|
||||
<field name="pram_beitragsmonat"
|
||||
invisible="pram_zahlungsart != 'spaeter_faellig'"/>
|
||||
<field name="pram_nachweis" placeholder="KV-/Vertragsvereinbarung, Aliquotierung, Fälligkeitszeitpunkt, Leistungsverknüpfung"/>
|
||||
<field name="pram_leistung_bestaetigt"/>
|
||||
</group>
|
||||
</group>
|
||||
<group string="Vorschau (§ 10 UrlG, § 11 Abs 2 ASVG)">
|
||||
<group>
|
||||
<field name="uel_lfd_vorschau"/>
|
||||
<field name="uel_sz_vorschau"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="sv_tage_vorschau"/>
|
||||
</group>
|
||||
</group>
|
||||
<footer>
|
||||
<button name="action_payslip" type="object"
|
||||
string="Endabrechnungs-Lauf anlegen"
|
||||
class="btn-primary"/>
|
||||
<button string="Abbrechen" special="cancel"
|
||||
class="btn-secondary"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_payslip_view_form_abf_alt" model="ir.ui.view">
|
||||
<field name="name">hr.payslip.form.abfertigung.alt</field>
|
||||
<field name="model">hr.payslip</field>
|
||||
<field name="inherit_id" ref="hr_payroll.view_hr_payslip_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//notebook" position="inside">
|
||||
<page string="Abfertigung Alt" name="l10n_at_abfertigung_alt"
|
||||
invisible="not l10n_at_abf_alt_mehrfach">
|
||||
<group>
|
||||
<group>
|
||||
<field name="l10n_at_abf_alt_anspruchsart" readonly="state != 'draft'"/>
|
||||
<field name="l10n_at_abf_alt_dienstzeit_monate" readonly="state != 'draft'"/>
|
||||
<field name="l10n_at_abf_alt_monatsentgelt" readonly="state != 'draft'"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="l10n_at_abf_alt_laufender_arbeitslohn" readonly="state != 'draft'"/>
|
||||
<field name="l10n_at_abf_alt_monatslohnsteuer" readonly="state != 'draft'"/>
|
||||
<field name="l10n_at_abf_alt_mehrfach" readonly="state != 'draft'"/>
|
||||
<field name="l10n_at_abf_alt_nachweis" readonly="state != 'draft'"/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_payslip_view_form_abf_frei" model="ir.ui.view">
|
||||
<field name="name">hr.payslip.form.abfertigung.frei</field>
|
||||
<field name="model">hr.payslip</field>
|
||||
<field name="inherit_id" ref="hr_payroll.view_hr_payslip_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//notebook" position="inside">
|
||||
<page string="Freiwillige Abfertigung" name="l10n_at_abfertigung_frei"
|
||||
invisible="not l10n_at_abf_frei_basis_12 and not l10n_at_abf_frei_dienstzeit_monate and not l10n_at_abf_frei_erhaltene_abfertigungen and not l10n_at_abf_frei_gesetzlicher_anspruch">
|
||||
<group>
|
||||
<group>
|
||||
<field name="l10n_at_abf_frei_basis_12" readonly="state != 'draft'"/>
|
||||
<field name="l10n_at_abf_frei_dienstzeit_monate" readonly="state != 'draft'"/>
|
||||
<field name="l10n_at_abf_frei_erhaltene_abfertigungen" readonly="state != 'draft'"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="l10n_at_abf_frei_gesetzlicher_anspruch" readonly="state != 'draft'"/>
|
||||
<field name="l10n_at_abf_frei_nachweis" readonly="state != 'draft'"/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_payslip_view_form_vergleich" model="ir.ui.view">
|
||||
<field name="name">hr.payslip.form.vergleich</field>
|
||||
<field name="model">hr.payslip</field>
|
||||
<field name="inherit_id" ref="hr_payroll.view_hr_payslip_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//notebook" position="inside">
|
||||
<page string="Vergleich (§ 67 Abs 8 lit a)"
|
||||
name="l10n_at_vergleich"
|
||||
invisible="not l10n_at_vergleich_nachweis">
|
||||
<group>
|
||||
<field name="l10n_at_vergleich_nachweis"
|
||||
readonly="state != 'draft'"/>
|
||||
</group>
|
||||
</page>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="hr_payslip_view_form_pram_end" model="ir.ui.view">
|
||||
<field name="name">hr.payslip.form.pram.end</field>
|
||||
<field name="model">hr.payslip</field>
|
||||
<field name="inherit_id" ref="hr_payroll.view_hr_payslip_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//notebook" position="inside">
|
||||
<page string="Prämie bei Beendigung (§ 16 AngG)"
|
||||
name="l10n_at_pram_end"
|
||||
invisible="not l10n_at_pram_nachweis">
|
||||
<group>
|
||||
<field name="l10n_at_pram_nachweis"
|
||||
readonly="state != 'draft'"/>
|
||||
</group>
|
||||
</page>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_endabrechnung_wizard" model="ir.actions.act_window">
|
||||
<field name="name">Endabrechnung (Beendigung)</field>
|
||||
<field name="res_model">l10n.at.payroll.endabrechnung.wizard</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_l10n_at_payroll_endabrechnung"
|
||||
name="Endabrechnung (Beendigung)"
|
||||
parent="hr_work_entry_enterprise.menu_hr_payroll_root"
|
||||
action="action_endabrechnung_wizard" sequence="42"/>
|
||||
</odoo>
|
||||
@@ -1,3 +1,4 @@
|
||||
# Part of the odoo-at-payroll project. License: LGPL-3.
|
||||
from . import kv_katalog_import
|
||||
from . import bv_endabrechnung
|
||||
from . import bv_endabrechnung
|
||||
from . import endabrechnung
|
||||
|
||||
@@ -0,0 +1,760 @@
|
||||
# Part of the odoo-at-payroll project. License: LGPL-3.
|
||||
"""AP14-A: Endabrechnungs-Wizard — sammelt die offenen Posten der
|
||||
Beendigungs-Abrechnung (Urlaubsersatzleistung, Abgangsentschädigung,
|
||||
Zeitguthaben/-schulden, offene Vorschüsse) und legt den
|
||||
Endabrechnungs-Lauf mit vorbefüllten Eingaben an. Reiner
|
||||
Sammel-/Anlageprozess; die BV-Anwartschaft läuft über den eigenen
|
||||
BV-Wizard (GP5), die Pfändung über die AP11-Maschine.
|
||||
AP15-C: Vergleichssumme (§ 67 Abs 8 lit a) — Rest (Fünftelregelung)
|
||||
und BV-Anwartschafts-Teil (bis 7.500 € mit 6 %)."""
|
||||
from datetime import timedelta
|
||||
|
||||
from dateutil.relativedelta import relativedelta
|
||||
|
||||
from odoo import _, api, fields, models
|
||||
from odoo.exceptions import UserError
|
||||
|
||||
|
||||
class L10nAtEndabrechnungWizard(models.TransientModel):
|
||||
_name = 'l10n.at.payroll.endabrechnung.wizard'
|
||||
_description = 'Endabrechnung (Beendigung des Dienstverhältnisses)'
|
||||
|
||||
employee_id = fields.Many2one(
|
||||
'hr.employee', string='Dienstnehmer:in', required=True)
|
||||
austrittsdatum = fields.Date(
|
||||
string='Austritt (Ende des Arbeitsverhältnisses)', required=True)
|
||||
departure_reason_id = fields.Many2one(
|
||||
'hr.departure.reason', string='Abgangsgrund', required=True,
|
||||
domain="['|', ('country_id', '=', False), ('country_id.code', '=', 'AT')]",
|
||||
help='Odoo-Abgangsgrund des Beschäftigtendatensatzes; die '
|
||||
'Abfertigungsberechtigung wird zusätzlich ausdrücklich bestätigt.')
|
||||
uel_tage = fields.Float(
|
||||
string='Offene Urlaubstage (Arbeitstage)',
|
||||
help='Resturlaub früherer Urlaubsjahre zur Gänze plus aliquoter '
|
||||
'Anspruch des laufenden Urlaubsjahres abzüglich verbrauchter '
|
||||
'Tage, ohne Rundung (§ 10 UrlG, lb-url-16). Für '
|
||||
'unberechtigten vorzeitigen Austritt sind die Tage der 5. '
|
||||
'und 6. Urlaubswoche des laufenden Jahres herauszurechnen.')
|
||||
abgang_betrag = fields.Monetary(
|
||||
string='Abgangsentschädigung (Brutto, § 67 Abs 8 lit b EStG)',
|
||||
currency_field='currency_id',
|
||||
help='Entschädigung für den Verzicht auf die Arbeitsleistung '
|
||||
'während der (fiktiven) Kündigungsfrist — LSt: Fünftelregelung; '
|
||||
'SV: Umlegung auf den Kündigungsfrist-Zeitraum (§ 11 Abs 2 '
|
||||
'ASVG); voll lohnnebenkostenpflichtig.')
|
||||
abgang_ffrist_tage = fields.Float(
|
||||
string='Kündigungsfrist (Kalendertage)',
|
||||
help='Kalendertage der (fiktiven) Kündigungsfrist, auf die die '
|
||||
'pauschalierte Abgangsentschädigung sv-rechtlich umzulegen '
|
||||
'ist (§ 11 Abs 2 ASVG).')
|
||||
zeit_guthaben_stunden = fields.Float(
|
||||
string='Zeitguthaben an Normalarbeitszeit (Stunden)',
|
||||
help='Offenes Guthaben an Normalarbeitszeit aus durchrechenbarem '
|
||||
'Arbeitszeitmodell — Abgeltung mit 50 % Zuschlag (§ 19e '
|
||||
'Abs 2 AZG); bei unberechtigtem vorzeitigem Austritt kein '
|
||||
'Zuschlag.')
|
||||
zeit_schulden_stunden = fields.Float(
|
||||
string='Zeitschulden (Stunden)',
|
||||
help='Offene Zeitschulden (negative Zeitguthaben), abgerechnet '
|
||||
'mit der aktuellen Normalstunde (lb-end-08).')
|
||||
vorschuss_saldo = fields.Monetary(
|
||||
string='Offener Vorschuss-/Darlehenssaldo',
|
||||
currency_field='currency_id',
|
||||
help='Bei Beendigung zur Gänze fälliger, noch offener '
|
||||
'Vorschusssaldo (lb-end-06) — Rückverrechnung vom Netto '
|
||||
'nach SV und Lohnsteuer, ohne Abgabenberührung '
|
||||
'(§ 293 Abs 3 EO).')
|
||||
abf_alt_aktiv = fields.Boolean(string='Gesetzliche Abfertigung Alt')
|
||||
abf_alt_anspruch_bestaetigt = fields.Boolean(
|
||||
string='Anspruch und Nachweise geprüft',
|
||||
help='Bestätigung, dass Alt-Anwartschaft, Beendigungsgrund, '
|
||||
'Dienstzeiten und Bemessungsgrundlage geprüft wurden.')
|
||||
abf_alt_anspruchsart = fields.Selection(
|
||||
[('normal', 'Normalanspruch (§ 23 AngG)'),
|
||||
('eltern', 'Elternaustritt (§ 23a Abs 3/4 AngG)'),
|
||||
('tod', 'Tod (§ 23 Abs 6 AngG)'),
|
||||
('pension', 'Pension/Invalidität (§ 23a Abs 1 AngG)'),
|
||||
('eingefroren', 'Eingefrorener Altanspruch (§ 47 BMSVG)'),
|
||||
('manuell', 'Sonstiger nachgewiesener Anspruch')],
|
||||
string='Anspruchsart', default='normal')
|
||||
abf_alt_dienstzeit_monate = fields.Integer(
|
||||
string='Nachgewiesene Abfertigungsdienstzeit (Monate)')
|
||||
abf_alt_monatsentgelt = fields.Monetary(
|
||||
string='Maßgebliches Monatsentgelt', currency_field='currency_id',
|
||||
help='Bestätigte arbeitsrechtliche Bemessungsgrundlage: letzter '
|
||||
'Monat einschließlich regelmäßiger Bezugsteile, Sachbezüge '
|
||||
'und aliquoter Sonderzahlungen.')
|
||||
abf_alt_laufender_arbeitslohn = fields.Monetary(
|
||||
string='Laufender Monatsarbeitslohn (§ 67 Abs 3)',
|
||||
currency_field='currency_id',
|
||||
help='Laufender Arbeitslohn für den steuerlichen Vervielfacher; '
|
||||
'aliquote Sonderzahlungen gehören hier nicht dazu.')
|
||||
abf_alt_monatslohnsteuer = fields.Monetary(
|
||||
string='Tarif-LSt des laufenden Monats', currency_field='currency_id',
|
||||
help='Die auf den maßgeblichen laufenden Monatsarbeitslohn '
|
||||
'entfallende tarifmäßige Lohnsteuer nach den persönlichen '
|
||||
'Verhältnissen. Bei steuerfreiem Monatslohn ausdrücklich 0 '
|
||||
'bestätigen.')
|
||||
abf_alt_hochrechnung_vorschau = fields.Monetary(
|
||||
string='§ 23 Abs 8 AngG — Hochrechnung Vollzeit (Vorschau)',
|
||||
currency_field='currency_id', compute='_compute_vorschau',
|
||||
help='Endet das DV während einer Teilzeitbeschäftigung nach '
|
||||
'MSchG/VKG (z. B. Elternteilzeit), ist die frühere '
|
||||
'Normalarbeitszeit zugrunde zu legen (§ 23 Abs 8 AngG; für '
|
||||
'Arbeitnehmerkündigung § 23a Abs 4a — 5-Jahres-Ø ohne '
|
||||
'Karenz, manuell einzugeben). Vorschlag: Monatsentgelt ÷ '
|
||||
'aktuelles work_time_rate; die Übernahme bleibt '
|
||||
'bestätigt (bei UEL-Basen gilt § 10 Abs 4 UrlG — '
|
||||
'überwiegende Arbeitszeit des Urlaubsjahres).')
|
||||
abf_alt_mehrfach = fields.Float(
|
||||
string='Bestätigter Anspruchsfaktor',
|
||||
help='§-23-Staffel, gegebenenfalls halbiert/gedeckelt oder als '
|
||||
'eingefrorener beziehungsweise nachgewiesener Faktor.')
|
||||
abf_alt_nachweis = fields.Text(
|
||||
string='Nachweis/Begründung',
|
||||
help='Quelle der Dienstzeiten, Anspruchsprüfung, Alt-/Neu-Status '
|
||||
'und allfällige manuelle Abweichung dokumentieren.')
|
||||
abf_frei_aktiv = fields.Boolean(
|
||||
string='Freiwillige Abfertigung (§ 67 Abs 6)')
|
||||
abf_frei_anspruch_bestaetigt = fields.Boolean(
|
||||
string='Prüfung und Nachweise bestätigt',
|
||||
help='Bestätigung, dass es sich um eine Beendigungsleistung ohne '
|
||||
'schädliche Anspruchsumwandlung handelt (KE/UE/SZ/Zeitguthaben '
|
||||
'müssen getrennt abrechnet werden — GPLB-Risiko, lb-end-15), '
|
||||
'dass die (Vor-)Dienstzeiten lückenlos zum Lohnkonto '
|
||||
'(§ 76 EStG) nachgewiesen sind und erhaltene Abfertigungen '
|
||||
'angegeben wurden.')
|
||||
abf_frei_betrag = fields.Monetary(
|
||||
string='Bruttobetrag', currency_field='currency_id')
|
||||
abf_frei_basis_12 = fields.Monetary(
|
||||
string='Laufende Bezüge letzte 12 Monate',
|
||||
currency_field='currency_id',
|
||||
help='Basis der Viertel-/Zwölftelregelung: alle steuerbaren '
|
||||
'Bezugsteile (auch steuerfreie Zuschläge, Sachbezüge), '
|
||||
'ohne Sonderzahlungen und ohne §-26-Z-4-Reisevergütungen; '
|
||||
'wird aus den letzten zwölf validierten Läufen vorgeschlagen '
|
||||
'und ist bestätigbar (lb-end-13).')
|
||||
abf_frei_dienstzeit_monate = fields.Integer(
|
||||
string='Nachgewiesene Dienstzeit (Monate)')
|
||||
abf_frei_erhaltene_abfertigungen = fields.Monetary(
|
||||
string='Bereits erhaltene Abfertigungen', currency_field='currency_id',
|
||||
help='In den nachgewiesenen Dienstzeiten erhaltene Abfertigungen '
|
||||
'(§ 67 Abs 3 oder Abs 6 EStG) — Kürzung nach Z 3.')
|
||||
abf_frei_gesetzlicher_anspruch = fields.Monetary(
|
||||
string='Bestehender gesetzlicher Anspruch',
|
||||
currency_field='currency_id',
|
||||
help='Anspruch auf eine gesetzliche Abfertigung am aktuellen '
|
||||
'Dienstverhältnis-Ende (Z 3); bei aktiver Alt-Abfertigung '
|
||||
'automatisch aus dem Alt-Anspruch vorgeschlagen.')
|
||||
abf_frei_nachweis = fields.Text(
|
||||
string='Nachweis/Begründung',
|
||||
help='Vordienstzeiten-Nachweis (Lohnkonto § 76 EStG), erhaltene '
|
||||
'Abfertigungen, Basis-Abweichungen und Anspruchsgrundlage '
|
||||
'dokumentieren.')
|
||||
vergleich_aktiv = fields.Boolean(
|
||||
string='Vergleich (§ 67 Abs 8 lit a)',
|
||||
help='Auf gerichtlichen oder außergerichtlichen Vergleichen '
|
||||
'beruhende Vergleichssummen sowie Bereinigungen/Nachzahlungen '
|
||||
'aus Urteilen/Bescheiden und Zahlungen bei '
|
||||
'Kündigungsanfechtung (lb-end-21). Erkennbare '
|
||||
'Abfertigungsanteile werden getrennt über die Abschnitte '
|
||||
'Abfertigung Alt (§ 67 Abs 3) bzw. freiwillige Abfertigung '
|
||||
'(§ 67 Abs 6) erfasst; Pensionsabfindungen (lit e) und '
|
||||
'Sozialplan-Zahlungen (lit f) gehören nicht hierher.')
|
||||
vergleich_rest_betrag = fields.Monetary(
|
||||
string='Vergleichssumme — Rest (Fünftelregelung)',
|
||||
currency_field='currency_id',
|
||||
help='Nach Abzug der §-62-Beiträge ist ein Fünftel steuerfrei '
|
||||
'(Deckel 1/5 × 9 × monatliche HBG), 4/5 laufen tarifisch im '
|
||||
'Zuflussmonat — ohne Jahressechstel-Effekt (§ 67 Abs 8 lit '
|
||||
'a iVm Abs 10).')
|
||||
vergleich_bv_betrag = fields.Monetary(
|
||||
string='Vergleichssumme — BV-Anwartschafts-Teil',
|
||||
currency_field='currency_id',
|
||||
help='Anteil für Zeiträume mit BV-Kassen-Anwartschaft: bis zum '
|
||||
'Deckel (2026: 7 500 €) mit 6 %, der übersteigende Teil '
|
||||
'fällt in die Fünftelregelung zurück. Der Alt-/Neu-Übertritt '
|
||||
'steuert die Anwendung (lb-end-21: eingefrorene Zeiträume '
|
||||
'kein 6 %-Teil).')
|
||||
vergleich_bv_anwartschaft_bestaetigt = fields.Boolean(
|
||||
string='BV-Anwartschaft für die betroffenen Zeiträume',
|
||||
help='Voraussetzung des 6-%-Teils: die Vergleichssumme wird für '
|
||||
'Zeiträume ausbezahlt, für die eine Anwartschaft gegenüber '
|
||||
'einer BV-Kasse besteht (§ 67 Abs 8 lit a letzter Satz).')
|
||||
vergleich_aufteilung_bestaetigt = fields.Boolean(
|
||||
string='Aufgliederung und Strittigkeit bestätigt',
|
||||
help='Bestätigung der Aufgliederung in der Vergleichsvereinbarung '
|
||||
'(Praxistipp lb-end-21): Widmungen sind abgabenrechtlich nur '
|
||||
'anerkannt, wenn die Ansprüche strittig waren (lb-end-22, '
|
||||
'VwGH); beim Pauschalvergleich ist der Verhältnisfaktor '
|
||||
'Forderungsbetrag : Vergleichssumme zu dokumentieren '
|
||||
'(E-MVB 011-02-00-001).')
|
||||
vergleich_nachweis = fields.Text(
|
||||
string='Nachweis/Begründung',
|
||||
help='Vergleichstext, strittige Ansprüche, erkennbare '
|
||||
'Abfertigungsanteile, BV-Zeiträume und allfälliger '
|
||||
'Verhältnisfaktor dokumentieren.')
|
||||
pram_aktiv = fields.Boolean(
|
||||
string='Prämie bei Beendigung (§ 16 AngG)',
|
||||
help='Aliquote periodische Prämie/Sonderzahlung (Jahres-, '
|
||||
'Umsatzprämie, Bonifikation, 15. Bezug), deren Anspruchs-'
|
||||
'zeitraum bei der Beendigung noch nicht abgelaufen ist '
|
||||
'(lb-end-18).')
|
||||
pram_zahlungsart = fields.Selection(
|
||||
[('mit_endabrechnung',
|
||||
'Mit der Endabrechnung ausgezahlt (sonstiger Bezug, '
|
||||
'Jahressechstel)'),
|
||||
('spaeter_faellig',
|
||||
'Später fällig (§ 67 Abs 10 — Tarif im Zahlungsmonat, '
|
||||
'ohne Sechstel; gesonderter Lohnzettel)')],
|
||||
string='Zahlungs-/Fälligkeitsart', default='mit_endabrechnung',
|
||||
help='Wird die Prämie erst zum im Vorhinein vereinbarten '
|
||||
'Fälligkeitszeitpunkt fällig, weil ihre Höhe erst nach '
|
||||
'Ablauf der Anspruchsperiode ermittelbar ist (z. B. '
|
||||
'Bilanzprämie), liegt keine Nachzahlung vor und läuft die '
|
||||
'Besteuerung über § 67 Abs 10 (lb-end-18).')
|
||||
pram_anspruchszeitraum_monate = fields.Integer(
|
||||
string='Anspruchszeitraum (Monate)', default=12,
|
||||
help='Dienstperiode, für die die Prämie gewährt wird — z. B. '
|
||||
'Kalenderjahr = 12 Monate (§ 16 AngG).')
|
||||
pram_dienstzeit_monate = fields.Integer(
|
||||
string='Zurückgelegte Dienstzeit im Anspruchszeitraum (Monate)',
|
||||
help='Grundlage der §-16-Aliquot-Vorschau; der tatsächliche '
|
||||
'Betrag folgt der KV-/Vertragsvereinbarung und bleibt '
|
||||
'bestätigbar.')
|
||||
pram_voller_betrag = fields.Monetary(
|
||||
string='Voller Prämien-Betrag (vor Aliquotierung)',
|
||||
currency_field='currency_id',
|
||||
help='Betrag für die gesamte Anspruchsperiode — Basis der '
|
||||
'§-16-Aliquot-Vorschau.')
|
||||
pram_betrag = fields.Monetary(
|
||||
string='Zu zahlender (aliquote) Brutto-Betrag',
|
||||
currency_field='currency_id')
|
||||
pram_beitragsmonat = fields.Date(
|
||||
string='SV-Beitragsmonat (Rollung ins Austrittsjahr)',
|
||||
help='Nur bei späterer Fälligkeit: Beitragsmonat, dem die '
|
||||
'Prämie sv-rechtlich zuzuordnen ist — der Zeitraum, in dem '
|
||||
'die Leistungen erbracht wurden (E-MVB 044-01-00-006). '
|
||||
'Die mBGM-Storno-/Neuübermittlung erfolgt im GP7-Track.')
|
||||
pram_leistung_bestaetigt = fields.Boolean(
|
||||
string='Leistungs-/Anspruchsgrundlage bestätigt',
|
||||
help='Bestätigung, dass die Prämie nicht an eine noch nicht '
|
||||
'erbrachte spezifische Leistung gebunden ist (z. B. '
|
||||
'Bilanzgeld — kein aliquoter Anspruch ohne Tätigkeit) und '
|
||||
'allfällige leistungsabhängige Verlustklauseln (nur '
|
||||
'Arbeiter, wirksam nur bei schuldhaftem Beendigungsgrund) '
|
||||
'geprüft sind. Für Angestellte gebührt die aliquote Prämie '
|
||||
'unabhängig von der Art der Beendigung (§ 16 AngG).')
|
||||
pram_nachweis = fields.Text(
|
||||
string='Nachweis/Begründung',
|
||||
help='KV-/Vertragsvereinbarung, Anspruchszeitraum, '
|
||||
'Aliquotierung, Fälligkeitszeitpunkt und '
|
||||
'Leistungsverknüpfung dokumentieren.')
|
||||
currency_id = fields.Many2one(
|
||||
'res.currency', default=lambda self: self.env.company.currency_id)
|
||||
|
||||
uel_lfd_vorschau = fields.Monetary(
|
||||
string='UEL laufender Anteil (Vorschau)',
|
||||
currency_field='currency_id', compute='_compute_vorschau')
|
||||
uel_sz_vorschau = fields.Monetary(
|
||||
string='UEL Sonderzahlungsanteil (Vorschau)',
|
||||
currency_field='currency_id', compute='_compute_vorschau')
|
||||
sv_tage_vorschau = fields.Integer(
|
||||
string='SV-Verlängerungstage (§ 11 Abs 2)',
|
||||
compute='_compute_vorschau')
|
||||
abf_alt_betrag_vorschau = fields.Monetary(
|
||||
string='Abfertigung Alt brutto', currency_field='currency_id',
|
||||
compute='_compute_vorschau')
|
||||
abf_alt_steuer_vervielfachung_vorschau = fields.Monetary(
|
||||
string='LSt Vervielfachungsmethode', currency_field='currency_id',
|
||||
compute='_compute_vorschau')
|
||||
abf_alt_steuer_6_vorschau = fields.Monetary(
|
||||
string='LSt 6 %', currency_field='currency_id',
|
||||
compute='_compute_vorschau')
|
||||
abf_alt_lohnsteuer_vorschau = fields.Monetary(
|
||||
string='Angewendete günstigere LSt', currency_field='currency_id',
|
||||
compute='_compute_vorschau')
|
||||
abf_alt_netto_vorschau = fields.Monetary(
|
||||
string='Abfertigung Alt netto', currency_field='currency_id',
|
||||
compute='_compute_vorschau')
|
||||
abf_frei_z1_vorschau = fields.Monetary(
|
||||
string='Z 1 Viertelregelung (Vorschau)', currency_field='currency_id',
|
||||
compute='_compute_vorschau')
|
||||
abf_frei_z2_vorschau = fields.Monetary(
|
||||
string='Z 2 Zwölftelregelung (Vorschau)', currency_field='currency_id',
|
||||
compute='_compute_vorschau')
|
||||
abf_frei_kuerzung_vorschau = fields.Monetary(
|
||||
string='Z 3 Kürzung (Vorschau)', currency_field='currency_id',
|
||||
compute='_compute_vorschau')
|
||||
abf_frei_beguenstigt_vorschau = fields.Monetary(
|
||||
string='Begünstigter Teil 6 % (Vorschau)', currency_field='currency_id',
|
||||
compute='_compute_vorschau')
|
||||
abf_frei_ueberhang_vorschau = fields.Monetary(
|
||||
string='Überhang zum Tarif (Vorschau)', currency_field='currency_id',
|
||||
compute='_compute_vorschau')
|
||||
abf_frei_lst_vorschau = fields.Monetary(
|
||||
string='LSt 6 % (Vorschau)', currency_field='currency_id',
|
||||
compute='_compute_vorschau')
|
||||
abf_frei_netto_vorschau = fields.Monetary(
|
||||
string='Begünstigter Teil netto (Vorschau)',
|
||||
currency_field='currency_id', compute='_compute_vorschau')
|
||||
vergleich_fuenftel_frei_vorschau = fields.Monetary(
|
||||
string='Steuerfreies Fünftel (Vorschau)', currency_field='currency_id',
|
||||
compute='_compute_vorschau')
|
||||
vergleich_tarif_basis_vorschau = fields.Monetary(
|
||||
string='Fünftel-Bezüge tarifischer Teil (Vorschau)',
|
||||
currency_field='currency_id', compute='_compute_vorschau')
|
||||
vergleich_bv_lst_vorschau = fields.Monetary(
|
||||
string='LSt 6 % BV-Teil (Vorschau)', currency_field='currency_id',
|
||||
compute='_compute_vorschau')
|
||||
pram_aliquot_vorschau = fields.Monetary(
|
||||
string='§-16-Aliquote Prämie (Vorschau)',
|
||||
currency_field='currency_id', compute='_compute_vorschau')
|
||||
|
||||
@api.onchange('employee_id')
|
||||
def _onchange_employee(self):
|
||||
for wizard in self:
|
||||
if not wizard.employee_id:
|
||||
continue
|
||||
version = wizard.employee_id.version_id
|
||||
wizard.austrittsdatum = (
|
||||
version.contract_date_end or fields.Date.today())
|
||||
wizard.departure_reason_id = version.departure_reason_id
|
||||
wizard._at_abf_alt_vorschlag_setzen()
|
||||
wizard._at_abf_frei_vorschlag_setzen()
|
||||
|
||||
@api.onchange('pram_aktiv', 'pram_voller_betrag',
|
||||
'pram_dienstzeit_monate', 'pram_anspruchszeitraum_monate')
|
||||
def _onchange_pram(self):
|
||||
for wizard in self:
|
||||
if not wizard.pram_aktiv:
|
||||
continue
|
||||
aliquote = wizard._at_pram_aliquot()
|
||||
if aliquote and not wizard.pram_betrag:
|
||||
wizard.pram_betrag = aliquote
|
||||
|
||||
def _at_pram_aliquot(self):
|
||||
"""§ 16 AngG (Originalwortlaut): Betrag, der dem Verhältnis
|
||||
zwischen der Dienstperiode des Anspruchs und der zurückgelegten
|
||||
Dienstzeit entspricht."""
|
||||
self.ensure_one()
|
||||
if (not self.pram_anspruchszeitraum_monate
|
||||
or self.pram_anspruchszeitraum_monate < 0
|
||||
or self.pram_dienstzeit_monate < 0
|
||||
or not self.pram_voller_betrag):
|
||||
return 0.0
|
||||
return (self.pram_voller_betrag
|
||||
* min(self.pram_dienstzeit_monate,
|
||||
self.pram_anspruchszeitraum_monate)
|
||||
/ self.pram_anspruchszeitraum_monate)
|
||||
|
||||
@api.onchange('austrittsdatum', 'abf_alt_anspruchsart',
|
||||
'abf_alt_dienstzeit_monate', 'abf_alt_aktiv',
|
||||
'abf_alt_monatsentgelt', 'abf_alt_mehrfach',
|
||||
'abf_frei_aktiv', 'abf_frei_dienstzeit_monate')
|
||||
def _onchange_abf_alt(self):
|
||||
for wizard in self:
|
||||
wizard._at_abf_alt_vorschlag_setzen()
|
||||
wizard._at_abf_frei_vorschlag_setzen()
|
||||
|
||||
def _at_abf_alt_vorschlag_setzen(self):
|
||||
self.ensure_one()
|
||||
if not self.employee_id or not self.austrittsdatum:
|
||||
return
|
||||
version = self.employee_id.version_id
|
||||
start = version.contract_date_start
|
||||
if start and not self.abf_alt_dienstzeit_monate:
|
||||
dauer = relativedelta(
|
||||
self.austrittsdatum + timedelta(days=1), start)
|
||||
self.abf_alt_dienstzeit_monate = dauer.years * 12 + dauer.months
|
||||
slip = self._vorschau_payslip()
|
||||
if not self.abf_alt_laufender_arbeitslohn:
|
||||
self.abf_alt_laufender_arbeitslohn = slip._at_kv_gehalt_basis()
|
||||
if not self.abf_alt_monatsentgelt:
|
||||
self.abf_alt_monatsentgelt = (
|
||||
self.abf_alt_laufender_arbeitslohn
|
||||
+ 2.0 * slip._at_sz_basis(self.austrittsdatum) / 12.0)
|
||||
vorgeschlagen = slip._at_abf_alt_mehrfach_vorschlag(
|
||||
self.abf_alt_dienstzeit_monate, self.abf_alt_anspruchsart)
|
||||
if vorgeschlagen or not self.abf_alt_mehrfach:
|
||||
self.abf_alt_mehrfach = vorgeschlagen
|
||||
|
||||
def _at_abf_frei_vorschlag_setzen(self):
|
||||
self.ensure_one()
|
||||
if not self.employee_id or not self.austrittsdatum:
|
||||
return
|
||||
slip = self._vorschau_payslip()
|
||||
if self.abf_frei_aktiv and not self.abf_frei_basis_12:
|
||||
self.abf_frei_basis_12 = slip._at_bezuege_12_monate()
|
||||
if (self.abf_frei_aktiv and self.abf_alt_aktiv
|
||||
and not self.abf_frei_gesetzlicher_anspruch):
|
||||
self.abf_frei_gesetzlicher_anspruch = (
|
||||
self.abf_alt_monatsentgelt * self.abf_alt_mehrfach)
|
||||
|
||||
@api.depends('employee_id', 'austrittsdatum', 'uel_tage',
|
||||
'abf_alt_aktiv', 'abf_alt_monatsentgelt',
|
||||
'abf_alt_laufender_arbeitslohn', 'abf_alt_monatslohnsteuer',
|
||||
'abf_alt_mehrfach',
|
||||
'abf_alt_dienstzeit_monate', 'abf_alt_anspruchsart',
|
||||
'abf_frei_aktiv', 'abf_frei_betrag', 'abf_frei_basis_12',
|
||||
'abf_frei_dienstzeit_monate',
|
||||
'abf_frei_erhaltene_abfertigungen',
|
||||
'abf_frei_gesetzlicher_anspruch',
|
||||
'vergleich_aktiv', 'vergleich_rest_betrag',
|
||||
'vergleich_bv_betrag',
|
||||
'pram_aktiv', 'pram_voller_betrag',
|
||||
'pram_dienstzeit_monate',
|
||||
'pram_anspruchszeitraum_monate')
|
||||
def _compute_vorschau(self):
|
||||
for wizard in self:
|
||||
wizard.uel_lfd_vorschau = 0.0
|
||||
wizard.uel_sz_vorschau = 0.0
|
||||
wizard.sv_tage_vorschau = 0
|
||||
wizard.abf_alt_betrag_vorschau = 0.0
|
||||
wizard.abf_alt_steuer_vervielfachung_vorschau = 0.0
|
||||
wizard.abf_alt_steuer_6_vorschau = 0.0
|
||||
wizard.abf_alt_lohnsteuer_vorschau = 0.0
|
||||
wizard.abf_alt_netto_vorschau = 0.0
|
||||
wizard.abf_alt_hochrechnung_vorschau = 0.0
|
||||
wizard.abf_frei_z1_vorschau = 0.0
|
||||
wizard.abf_frei_z2_vorschau = 0.0
|
||||
wizard.abf_frei_kuerzung_vorschau = 0.0
|
||||
wizard.abf_frei_beguenstigt_vorschau = 0.0
|
||||
wizard.abf_frei_ueberhang_vorschau = 0.0
|
||||
wizard.abf_frei_lst_vorschau = 0.0
|
||||
wizard.abf_frei_netto_vorschau = 0.0
|
||||
wizard.vergleich_fuenftel_frei_vorschau = 0.0
|
||||
wizard.vergleich_tarif_basis_vorschau = 0.0
|
||||
wizard.vergleich_bv_lst_vorschau = 0.0
|
||||
wizard.pram_aliquot_vorschau = 0.0
|
||||
if not wizard.employee_id or not wizard.austrittsdatum:
|
||||
continue
|
||||
slip = wizard._vorschau_payslip()
|
||||
wizard.uel_lfd_vorschau = slip._at_uel_lfd()
|
||||
wizard.uel_sz_vorschau = slip._at_uel_sz()
|
||||
wizard.sv_tage_vorschau = slip._at_end_sv_tage(
|
||||
wizard.uel_tage)
|
||||
if wizard.abf_alt_aktiv:
|
||||
betrag = slip._at_abf_alt_betrag()
|
||||
steuer_vervielfachung = \
|
||||
slip._at_abf_alt_steuer_vervielfachung()
|
||||
steuer_6 = slip._at_abf_alt_steuer_6()
|
||||
steuer = min(steuer_vervielfachung, steuer_6)
|
||||
wizard.abf_alt_betrag_vorschau = betrag
|
||||
wizard.abf_alt_steuer_vervielfachung_vorschau = \
|
||||
steuer_vervielfachung
|
||||
wizard.abf_alt_steuer_6_vorschau = steuer_6
|
||||
wizard.abf_alt_lohnsteuer_vorschau = steuer
|
||||
wizard.abf_alt_netto_vorschau = betrag - steuer
|
||||
rate = wizard.employee_id.version_id.work_time_rate
|
||||
if rate and rate < 1.0 and wizard.abf_alt_monatsentgelt:
|
||||
# § 23 Abs 8 AngG: frühere Normalarbeitszeit —
|
||||
# Hochrechnungs-Vorschlag, bestätigte Übernahme.
|
||||
wizard.abf_alt_hochrechnung_vorschau = \
|
||||
wizard.abf_alt_monatsentgelt / rate
|
||||
if wizard.abf_frei_aktiv:
|
||||
split = slip._at_abf_frei_split()
|
||||
satz = float(slip._l10n_at_param(
|
||||
'at_endabrechnung')['abfertigung_steuersatz'])
|
||||
wizard.abf_frei_z1_vorschau = split['z1']
|
||||
wizard.abf_frei_z2_vorschau = split['z2']
|
||||
wizard.abf_frei_kuerzung_vorschau = split['kuerzung']
|
||||
wizard.abf_frei_beguenstigt_vorschau = split['beguenstigt']
|
||||
wizard.abf_frei_ueberhang_vorschau = split['ueberhang']
|
||||
wizard.abf_frei_lst_vorschau = \
|
||||
split['beguenstigt'] * satz / 100.0
|
||||
wizard.abf_frei_netto_vorschau = \
|
||||
split['beguenstigt'] - wizard.abf_frei_lst_vorschau
|
||||
if wizard.vergleich_aktiv:
|
||||
# Der tarifische Fünftel-Teil läuft über die laufende
|
||||
# Bemessung (LST_LFD); die Vorschau zeigt die Pfade
|
||||
# getrennt (Fünftel-Pool inkl. ABGANG, falls erfasst).
|
||||
wizard.vergleich_fuenftel_frei_vorschau = \
|
||||
slip._at_fuenftel_frei_betr()
|
||||
wizard.vergleich_tarif_basis_vorschau = \
|
||||
slip._at_fuenftel_tarif_basis()
|
||||
wizard.vergleich_bv_lst_vorschau = \
|
||||
slip._at_vergleich_bv_lst_6()
|
||||
wizard.pram_aliquot_vorschau = wizard._at_pram_aliquot()
|
||||
|
||||
def _vorschau_payslip(self):
|
||||
"""Flüchtiger Payslip-Kontext für die Vorschau-Berechnung (kein
|
||||
Speichern): trägt Austrittsmonat, Struktur und die Eingaben."""
|
||||
self.ensure_one()
|
||||
erster = self.austrittsdatum.replace(day=1)
|
||||
letzter = (erster + timedelta(days=32)).replace(day=1) \
|
||||
- timedelta(days=1)
|
||||
struct = self.employee_id.version_id.structure_id
|
||||
if not struct:
|
||||
struct = self.env.ref(
|
||||
'l10n_at_hr_payroll_private.structure_at_privat')
|
||||
slip = self.env['hr.payslip'].new({
|
||||
'employee_id': self.employee_id.id,
|
||||
'struct_id': struct.id,
|
||||
'date_from': erster,
|
||||
'date_to': letzter,
|
||||
'l10n_at_abf_alt_anspruchsart': self.abf_alt_anspruchsart,
|
||||
'l10n_at_abf_alt_dienstzeit_monate':
|
||||
self.abf_alt_dienstzeit_monate,
|
||||
'l10n_at_abf_alt_monatsentgelt': self.abf_alt_monatsentgelt,
|
||||
'l10n_at_abf_alt_laufender_arbeitslohn':
|
||||
self.abf_alt_laufender_arbeitslohn,
|
||||
'l10n_at_abf_alt_monatslohnsteuer':
|
||||
self.abf_alt_monatslohnsteuer,
|
||||
'l10n_at_abf_alt_mehrfach': self.abf_alt_mehrfach,
|
||||
'l10n_at_abf_alt_nachweis': self.abf_alt_nachweis,
|
||||
'l10n_at_abf_frei_basis_12': self.abf_frei_basis_12,
|
||||
'l10n_at_abf_frei_dienstzeit_monate':
|
||||
self.abf_frei_dienstzeit_monate,
|
||||
'l10n_at_abf_frei_erhaltene_abfertigungen':
|
||||
self.abf_frei_erhaltene_abfertigungen,
|
||||
'l10n_at_abf_frei_gesetzlicher_anspruch':
|
||||
self.abf_frei_gesetzlicher_anspruch,
|
||||
'l10n_at_abf_frei_nachweis': self.abf_frei_nachweis,
|
||||
'l10n_at_vergleich_nachweis': self.vergleich_nachweis,
|
||||
'l10n_at_pram_nachweis': self.pram_nachweis,
|
||||
})
|
||||
eingaben = [
|
||||
('ATP_UEL_TAGE', self.uel_tage),
|
||||
('ATP_ABF_ALT', self.abf_alt_monatsentgelt
|
||||
* self.abf_alt_mehrfach if self.abf_alt_aktiv else 0.0),
|
||||
('ATP_ABF_FREI', self.abf_frei_betrag
|
||||
if self.abf_frei_aktiv else 0.0),
|
||||
('ATP_VERGLEICH', self.vergleich_rest_betrag
|
||||
if self.vergleich_aktiv else 0.0),
|
||||
('ATP_VERGLEICH_BV', self.vergleich_bv_betrag
|
||||
if self.vergleich_aktiv else 0.0),
|
||||
('ATP_PRAM_END', self.pram_betrag
|
||||
if self.pram_aktiv
|
||||
and self.pram_zahlungsart == 'mit_endabrechnung' else 0.0),
|
||||
('ATP_PRAM_END_TARIF', self.pram_betrag
|
||||
if self.pram_aktiv
|
||||
and self.pram_zahlungsart == 'spaeter_faellig' else 0.0),
|
||||
]
|
||||
slip.input_line_ids = [
|
||||
(0, 0, {
|
||||
'input_type_id': self.env['hr.payslip.input.type']
|
||||
.search([('code', '=', code)], limit=1).id,
|
||||
'amount': betrag,
|
||||
})
|
||||
for code, betrag in eingaben if betrag
|
||||
]
|
||||
return slip
|
||||
|
||||
def _eingaben(self):
|
||||
self.ensure_one()
|
||||
return [
|
||||
('ATP_UEL_TAGE', self.uel_tage),
|
||||
('ATP_ABGANG', self.abgang_betrag),
|
||||
('ATP_ABGANG_FFRIST_TAGE', self.abgang_ffrist_tage),
|
||||
('ATP_ZEIT_GUTHABEN', self.zeit_guthaben_stunden),
|
||||
('ATP_ZEIT_SCHULDEN', self.zeit_schulden_stunden),
|
||||
('ATP_ABRECHNUNG_VORSCHUSS', self.vorschuss_saldo),
|
||||
('ATP_ABF_ALT', self.abf_alt_monatsentgelt
|
||||
* self.abf_alt_mehrfach if self.abf_alt_aktiv else 0.0),
|
||||
('ATP_ABF_FREI', self.abf_frei_betrag
|
||||
if self.abf_frei_aktiv else 0.0),
|
||||
('ATP_VERGLEICH', self.vergleich_rest_betrag
|
||||
if self.vergleich_aktiv else 0.0),
|
||||
('ATP_VERGLEICH_BV', self.vergleich_bv_betrag
|
||||
if self.vergleich_aktiv else 0.0),
|
||||
('ATP_PRAM_END', self.pram_betrag
|
||||
if self.pram_aktiv
|
||||
and self.pram_zahlungsart == 'mit_endabrechnung' else 0.0),
|
||||
('ATP_PRAM_END_TARIF', self.pram_betrag
|
||||
if self.pram_aktiv
|
||||
and self.pram_zahlungsart == 'spaeter_faellig' else 0.0),
|
||||
]
|
||||
|
||||
def _abf_alt_validieren(self):
|
||||
self.ensure_one()
|
||||
if not self.abf_alt_aktiv:
|
||||
return
|
||||
if not self.abf_alt_anspruch_bestaetigt:
|
||||
raise UserError(_('Bitte Anspruch und Nachweise der '
|
||||
'Abfertigung Alt bestätigen.'))
|
||||
if self.employee_id.version_id.l10n_at_abfertigung_neu \
|
||||
and self.abf_alt_anspruchsart != 'eingefroren':
|
||||
raise UserError(_(
|
||||
'Das Dienstverhältnis ist als Abfertigung Neu markiert. '
|
||||
'Eine Alt-Abfertigung ist nur als nachgewiesener '
|
||||
'eingefrorener Anspruch zulässig.'))
|
||||
if self.abf_alt_anspruchsart == 'eltern' \
|
||||
and self.abf_alt_dienstzeit_monate < 60:
|
||||
raise UserError(_(
|
||||
'Ein Elternaustritt nach § 23a Abs. 3/4 AngG setzt ein '
|
||||
'ununterbrochenes Dienstverhältnis von fünf Jahren voraus.'))
|
||||
if (self.abf_alt_dienstzeit_monate <= 0
|
||||
or self.abf_alt_monatsentgelt <= 0
|
||||
or self.abf_alt_laufender_arbeitslohn <= 0
|
||||
or self.abf_alt_monatslohnsteuer < 0
|
||||
or self.abf_alt_mehrfach <= 0):
|
||||
raise UserError(_('Dienstzeit, Monatsentgelt, laufender '
|
||||
'Arbeitslohn und Anspruchsfaktor müssen '
|
||||
'größer als null sein; die Tarif-LSt darf '
|
||||
'nicht negativ sein.'))
|
||||
agrd = self.departure_reason_id.l10n_at_agrd
|
||||
if agrd == '02' and self.abf_alt_anspruchsart not in (
|
||||
'eltern', 'pension', 'manuell'):
|
||||
raise UserError(_(
|
||||
'Eine gewöhnliche Arbeitnehmerkündigung begründet keinen '
|
||||
'Anspruch nach § 23 AngG. Bitte einen §-23a-Sonderfall '
|
||||
'wählen oder den Anspruch manuell nachweisen.'))
|
||||
if agrd == '06' and self.abf_alt_anspruchsart != 'manuell':
|
||||
raise UserError(_(
|
||||
'Der Abgangsgrund „Fristlose Entlassung“ unterscheidet '
|
||||
'nicht zwischen verschuldeter und unverschuldeter '
|
||||
'Entlassung. Bitte den Anspruch manuell bestätigen und '
|
||||
'begründen.'))
|
||||
|
||||
def _abf_frei_validieren(self):
|
||||
self.ensure_one()
|
||||
if not self.abf_frei_aktiv:
|
||||
return
|
||||
if not self.abf_frei_anspruch_bestaetigt:
|
||||
raise UserError(_('Bitte Prüfung und Nachweise der freiwilligen '
|
||||
'Abfertigung bestätigen.'))
|
||||
if self.abf_frei_betrag <= 0:
|
||||
raise UserError(_('Der Bruttobetrag der freiwilligen '
|
||||
'Abfertigung muss größer als null sein.'))
|
||||
if (self.abf_frei_basis_12 < 0
|
||||
or self.abf_frei_erhaltene_abfertigungen < 0
|
||||
or self.abf_frei_gesetzlicher_anspruch < 0
|
||||
or self.abf_frei_dienstzeit_monate < 0):
|
||||
raise UserError(_('12-Monats-Basis, erhaltene Abfertigungen, '
|
||||
'gesetzlicher Anspruch und Dienstzeit dürfen '
|
||||
'nicht negativ sein.'))
|
||||
|
||||
def _vergleich_validieren(self):
|
||||
self.ensure_one()
|
||||
if not self.vergleich_aktiv:
|
||||
return
|
||||
if not self.vergleich_aufteilung_bestaetigt:
|
||||
raise UserError(_('Bitte die Aufgliederung der Vergleichs-'
|
||||
'summe und die Strittigkeit der Ansprüche '
|
||||
'bestätigen (lb-end-21/22).'))
|
||||
if self.vergleich_rest_betrag < 0 or self.vergleich_bv_betrag < 0:
|
||||
raise UserError(_('Vergleichsbeträge dürfen nicht negativ '
|
||||
'sein.'))
|
||||
if not self.vergleich_rest_betrag and not self.vergleich_bv_betrag:
|
||||
raise UserError(_('Bitte den Rest der Vergleichssumme oder '
|
||||
'den BV-Anwartschafts-Teil erfassen; '
|
||||
'erkennbare Abfertigungsanteile gehören in '
|
||||
'die Abfertigungs-Abschnitte.'))
|
||||
slip = self._vorschau_payslip()
|
||||
deckel = float(slip._l10n_at_param('at_lst_67_abs8_vergleich_bv'))
|
||||
if self.vergleich_bv_betrag > deckel:
|
||||
raise UserError(_(
|
||||
'Der BV-Anwartschafts-Teil ist mit %.2f € gedeckelt '
|
||||
'(§ 67 Abs 8 lit a letzter Satz); den übersteigenden '
|
||||
'Betrag als Rest (Fünftelregelung) erfassen.') % deckel)
|
||||
if self.vergleich_bv_betrag > 0 \
|
||||
and not self.vergleich_bv_anwartschaft_bestaetigt:
|
||||
raise UserError(_('Der 6-%-Teil setzt eine bestätigte '
|
||||
'BV-Anwartschaft für die betroffenen '
|
||||
'Zeiträume voraus (§ 67 Abs 8 lit a letzter '
|
||||
'Satz).'))
|
||||
|
||||
def _pram_validieren(self):
|
||||
self.ensure_one()
|
||||
if not self.pram_aktiv:
|
||||
return
|
||||
if not self.pram_leistung_bestaetigt:
|
||||
raise UserError(_('Bitte die Leistungs-/Anspruchsgrundlage '
|
||||
'der Prämie bestätigen (lb-end-18).'))
|
||||
if self.pram_betrag <= 0:
|
||||
raise UserError(_('Der zu zahlende Prämien-Betrag muss '
|
||||
'größer als null sein.'))
|
||||
if (self.pram_anspruchszeitraum_monate < 0
|
||||
or self.pram_dienstzeit_monate < 0
|
||||
or self.pram_voller_betrag < 0):
|
||||
raise UserError(_('Anspruchszeitraum, Dienstzeit und '
|
||||
'voller Betrag dürfen nicht negativ '
|
||||
'sein.'))
|
||||
if (self.pram_anspruchszeitraum_monate
|
||||
and self.pram_dienstzeit_monate
|
||||
> self.pram_anspruchszeitraum_monate):
|
||||
raise UserError(_('Die zurückgelegte Dienstzeit kann den '
|
||||
'Anspruchszeitraum nicht übersteigen.'))
|
||||
if (self.pram_zahlungsart == 'spaeter_faellig'
|
||||
and not self.pram_beitragsmonat):
|
||||
raise UserError(_('Bei späterer Fälligkeit ist der SV-'
|
||||
'Beitragsmonat der Rollung ins '
|
||||
'Austrittsjahr erforderlich '
|
||||
'(E-MVB 044-01-00-006).'))
|
||||
|
||||
def action_payslip(self):
|
||||
"""Endabrechnungs-Lauf im Austrittsmonat anlegen und die
|
||||
gesammelten offenen Posten als Eingaben vorbefüllen."""
|
||||
self.ensure_one()
|
||||
self._abf_alt_validieren()
|
||||
self._abf_frei_validieren()
|
||||
self._vergleich_validieren()
|
||||
self._pram_validieren()
|
||||
erster = self.austrittsdatum.replace(day=1)
|
||||
letzter = (erster + timedelta(days=32)).replace(day=1) \
|
||||
- timedelta(days=1)
|
||||
version = self.employee_id.version_id
|
||||
version.write({
|
||||
'contract_date_end': self.austrittsdatum,
|
||||
'departure_reason_id': self.departure_reason_id.id,
|
||||
})
|
||||
struct = version.structure_id \
|
||||
or self.env.ref('l10n_at_hr_payroll_private.structure_at_privat')
|
||||
slip = self.env['hr.payslip'].create({
|
||||
'name': _('Endabrechnung %s') % self.employee_id.name,
|
||||
'employee_id': self.employee_id.id,
|
||||
'struct_id': struct.id,
|
||||
'date_from': erster,
|
||||
'date_to': letzter,
|
||||
'l10n_at_abf_alt_anspruchsart': self.abf_alt_anspruchsart
|
||||
if self.abf_alt_aktiv else False,
|
||||
'l10n_at_abf_alt_dienstzeit_monate':
|
||||
self.abf_alt_dienstzeit_monate if self.abf_alt_aktiv else 0,
|
||||
'l10n_at_abf_alt_monatsentgelt':
|
||||
self.abf_alt_monatsentgelt if self.abf_alt_aktiv else 0.0,
|
||||
'l10n_at_abf_alt_laufender_arbeitslohn':
|
||||
self.abf_alt_laufender_arbeitslohn
|
||||
if self.abf_alt_aktiv else 0.0,
|
||||
'l10n_at_abf_alt_monatslohnsteuer':
|
||||
self.abf_alt_monatslohnsteuer if self.abf_alt_aktiv else 0.0,
|
||||
'l10n_at_abf_alt_mehrfach':
|
||||
self.abf_alt_mehrfach if self.abf_alt_aktiv else 0.0,
|
||||
'l10n_at_abf_alt_nachweis':
|
||||
self.abf_alt_nachweis if self.abf_alt_aktiv else False,
|
||||
'l10n_at_abf_frei_basis_12':
|
||||
self.abf_frei_basis_12 if self.abf_frei_aktiv else 0.0,
|
||||
'l10n_at_abf_frei_dienstzeit_monate':
|
||||
self.abf_frei_dienstzeit_monate if self.abf_frei_aktiv else 0,
|
||||
'l10n_at_abf_frei_erhaltene_abfertigungen':
|
||||
self.abf_frei_erhaltene_abfertigungen
|
||||
if self.abf_frei_aktiv else 0.0,
|
||||
'l10n_at_abf_frei_gesetzlicher_anspruch':
|
||||
self.abf_frei_gesetzlicher_anspruch
|
||||
if self.abf_frei_aktiv else 0.0,
|
||||
'l10n_at_abf_frei_nachweis':
|
||||
self.abf_frei_nachweis if self.abf_frei_aktiv else False,
|
||||
'l10n_at_vergleich_nachweis':
|
||||
self.vergleich_nachweis if self.vergleich_aktiv else False,
|
||||
'l10n_at_pram_nachweis':
|
||||
self.pram_nachweis if self.pram_aktiv else False,
|
||||
'l10n_at_pram_beitragsmonat': self.pram_beitragsmonat
|
||||
if (self.pram_aktiv
|
||||
and self.pram_zahlungsart == 'spaeter_faellig') else False,
|
||||
})
|
||||
typen = {code: self.env['hr.payslip.input.type'].search(
|
||||
[('code', '=', code)], limit=1)
|
||||
for code, _betrag in self._eingaben()}
|
||||
self.env['hr.payslip.input'].create([{
|
||||
'payslip_id': slip.id,
|
||||
'input_type_id': typen[code].id,
|
||||
'amount': betrag,
|
||||
} for code, betrag in self._eingaben() if betrag])
|
||||
slip.compute_sheet()
|
||||
return {
|
||||
'type': 'ir.actions.act_window',
|
||||
'name': _('Endabrechnung'),
|
||||
'res_model': 'hr.payslip',
|
||||
'view_mode': 'form',
|
||||
'res_id': slip.id,
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
# Part of the odoo-at-payroll project. License: LGPL-3.
|
||||
from . import models
|
||||
from . import tests
|
||||
@@ -0,0 +1,33 @@
|
||||
# Part of the odoo-at-payroll project. License: LGPL-3.
|
||||
{
|
||||
'name': 'AT Payroll: Dokumente aus Vorlagen',
|
||||
'version': '19.0.1.0.0',
|
||||
'category': 'Human Resources/Payroll',
|
||||
'summary': 'Dokumentgenerierung aus Vorlagen mit hr-Stammdaten (eigene Texte)',
|
||||
'description': """
|
||||
Dokumente (Dienstvertrag, Kündigung, Bescheinigungen, ...) aus Vorlagen,
|
||||
befüllt aus hr-Stammdaten und Wizard-Eingaben.
|
||||
|
||||
- Vorlagen enthalten ausschließlich eigenen Text; Struktur-Referenz und
|
||||
Quell-Stand sind pro Vorlage dokumentiert (kb_ref/quell_stand).
|
||||
- Platzhalter-Syntax des Standard-Inline-Renderers von mail.render.mixin:
|
||||
{{ werte['key'] }}, {{ object.feld }}, {{ format_date(...) }}.
|
||||
- PDF-Erzeugung über ir.actions.report (wkhtmltopdf); ohne PDF-Engine
|
||||
wird das gerenderte HTML abgelegt.
|
||||
""",
|
||||
'author': 'odoo-at-payroll',
|
||||
'website': 'https://example.com/odoo-at-payroll',
|
||||
'license': 'LGPL-3',
|
||||
'depends': ['hr', 'mail'],
|
||||
'data': [
|
||||
'security/ir.model.access.csv',
|
||||
'security/security_rules.xml',
|
||||
'data/vorlagen_pilot.xml',
|
||||
'views/dokument_vorlage_views.xml',
|
||||
'views/wizard_views.xml',
|
||||
'report/report_dokument.xml',
|
||||
],
|
||||
'demo': [],
|
||||
'installable': True,
|
||||
'application': False,
|
||||
}
|
||||
@@ -0,0 +1,232 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<!-- ============================================================ -->
|
||||
<!-- Pilot-Vorlagen: EIGENER Text, strukturiert nach den -->
|
||||
<!-- Wissensbasis-Mustern (kb_ref = Herkunftsnachweis der -->
|
||||
<!-- Struktur, nie lizenzierter Volltext). Rechtsstatus 'entwurf' -->
|
||||
<!-- — rechtliche Prüfung vor Produktivsetzung erforderlich. -->
|
||||
<!-- ============================================================ -->
|
||||
|
||||
<!-- ================= Dienstvertrag (Angestellte) ============== -->
|
||||
<record id="vorlage_dienstvertrag_angestellte" model="l10n.at.payroll.dokument.vorlage">
|
||||
<field name="name">Dienstvertrag (Angestellte)</field>
|
||||
<field name="thema">dienstvertrag</field>
|
||||
<field name="kb_ref">lb-bes-09</field>
|
||||
<field name="quell_stand">2025-06</field>
|
||||
<field name="rechtsstatus">entwurf</field>
|
||||
<field name="beschreibung">
|
||||
Rahmen-Dienstvertrag für Angestellte (privatrechtlich). Struktur nach dem
|
||||
Lexis-Muster lb-bes-09 (Stand 2025-06), Text eigen formuliert.
|
||||
Anzupassen je Mandant/KV: Einstufung, Entgelt, Überstundenregelung,
|
||||
Kündigungsfristen; optionale Blöcke (Geheimhaltung, Konkurrenzklausel)
|
||||
erscheinen nur, wenn befüllt. Vertragswerte (Fristen, Tage) sind
|
||||
Platzhalter — keine Gesetz/KV-Werte im Template verankert.
|
||||
</field>
|
||||
<field name="inhalt_html"><![CDATA[
|
||||
<div>
|
||||
<p>{{ werte['firma'] }}<br/>{{ werte['firma_strasse'] }}<br/>{{ werte['firma_plz'] }} {{ werte['firma_ort'] }}</p>
|
||||
<h2>Dienstvertrag</h2>
|
||||
<p>zwischen {{ werte['firma'] }}, {{ werte['firma_strasse'] }}, {{ werte['firma_plz'] }} {{ werte['firma_ort'] }} — im Folgenden „der Dienstgeber“ — und {{ werte['mitarbeiter'] }}, {{ werte['mitarbeiter_strasse'] }}, {{ werte['mitarbeiter_plz'] }} {{ werte['mitarbeiter_ort'] }} — im Folgenden „der Dienstnehmer“.</p>
|
||||
<h3>I. Tätigkeitsbereich</h3>
|
||||
<p>1. Der Dienstnehmer wird ab {{ werte['ead'] }} als {{ werte['funktion'] }} angestellt. Übertragen werden ihm insbesondere folgende Tätigkeiten:<br/>{{ werte['taetigkeit'] }}</p>
|
||||
<p>2. Der Dienstnehmer hat die übertragenen Tätigkeiten mit der Sorgfalt eines ordentlichen Dienstnehmers auszuüben; im Bedarfsfall sind auch verwandte Tätigkeiten nach Weisung des Dienstgebers zu verrichten.</p>
|
||||
<h3>II. Dienstort</h3>
|
||||
<p>Dienstort ist {{ werte['dienstort'] }}. Der Dienstnehmer verpflichtet sich, im Interesse des Dienstgebers auch außerhalb des Dienstortes vorübergehend tätig zu werden, wenn dies die Tätigkeit erfordert.</p>
|
||||
<h3>III. Einstufung</h3>
|
||||
<p>Die Einstufung erfolgt gemäß den anwendbaren kollektivvertraglichen Bestimmungen: {{ werte['einstufung'] }}.</p>
|
||||
<h3>IV. Entgelt</h3>
|
||||
<p>1. Für die geleisteten Dienste gebührt dem Dienstnehmer ein Monatsentgelt von EUR {{ werte['entgelt'] }} brutto, zahlbar monatlich nach Maßgabe der kollektivvertraglichen Bestimmungen ({{ werte['kv_verweis'] }}).</p>
|
||||
<p>2. Sonderzahlungen gebühren gemäß den anwendbaren kollektivvertraglichen Bestimmungen; die Abrechnung erfolgt nach den jeweils geltenden lohnsteuerlichen Vorgaben.</p>
|
||||
<h3>V. Arbeitszeit, Mehr- und Überstunden</h3>
|
||||
<p>1. Die regelmäßige Dienstzeit beträgt {{ werte['arbeitszeit'] }} je Woche, verteilt auf fünf Arbeitstage von Montag bis Freitag. Die Lage der Tagesarbeitszeit wird mit dem Dienstgeber vereinbart.</p>
|
||||
<p>2. Mehr- und Überstunden sind nach den Bestimmungen des Arbeitszeitgesetzes zu leisten; der Abgeltung liegen die anwendbaren kollektivvertraglichen Bestimmungen zugrunde.</p>
|
||||
<h3>VI. Spesen</h3>
|
||||
<p>Spesen im Zusammenhang mit der Dienstausübung werden nach den geltenden Regelungen des Dienstgebers abgerechnet.</p>
|
||||
<h3>VII. Urlaub</h3>
|
||||
<p>Der Dienstnehmer hat Anspruch auf bezahlten Urlaub im Ausmaß von {{ werte['urlaub_tage'] }} Arbeitstagen je Dienstjahr; im Übrigen gelten die Bestimmungen des Urlaubs- und Abfertigungsgesetzes.</p>
|
||||
<h3>VIII. Entgeltfortzahlung</h3>
|
||||
<p>Bei Dienstverhinderung gelten die gesetzlichen Bestimmungen über die Entgeltfortzahlung.</p>
|
||||
<h3>IX. Dauer</h3>
|
||||
<p>1. Das Dienstverhältnis beginnt am {{ werte['ead'] }} und wird auf unbestimmte Zeit geschlossen.</p>
|
||||
<p>2. Das Dienstverhältnis kann von beiden Vertragsparteien unter Einhaltung der gesetzlichen bzw. kollektivvertraglich vereinbarten Kündigungsfristen ordentlich gekündigt werden; geltend ist die Frist {{ werte['kuendigung_frist'] }}.</p>
|
||||
<div t-if="werte['geheimhaltung']">
|
||||
<h3>X. Geheimhaltung</h3>
|
||||
<p>{{ werte['geheimhaltung'] }}</p>
|
||||
</div>
|
||||
<div t-if="werte['konkurrenzklausel']">
|
||||
<h3>XI. Nebentätigkeit/Konkurrenzklausel</h3>
|
||||
<p>{{ werte['konkurrenzklausel'] }}</p>
|
||||
</div>
|
||||
<h3>XII. Schlussbestimmungen</h3>
|
||||
<p>1. Abfertigungsansprüche richten sich nach den Bestimmungen des BMSVG.</p>
|
||||
<p>2. Nebenabreden und Änderungen dieses Vertrages bedürfen der Schriftform; mündliche Nebenabreden bestehen nicht.</p>
|
||||
<p>3. Sollte eine Bestimmung dieses Vertrages unwirksam sein, bleibt die Wirksamkeit der übrigen Bestimmungen unberührt; an deren Stelle tritt eine wirksame Bestimmung mit gleichem wirtschaftlichem Gehalt.</p>
|
||||
<p>Ort, Datum: {{ werte['ort_datum'] }}<br/><br/>Dienstgeber: ________________________<br/><br/>Dienstnehmer: ______________________</p>
|
||||
</div>
|
||||
]]></field>
|
||||
<field name="feld_ids" eval="[
|
||||
Command.create({'sequence': 1, 'key': 'taetigkeit', 'bezeichnung': 'Tätigkeiten (mehrere Zeilen möglich)', 'quelle': 'manuell', 'pflicht': True}),
|
||||
Command.create({'sequence': 2, 'key': 'dienstort', 'bezeichnung': 'Dienstort', 'quelle': 'manuell', 'pflicht': True}),
|
||||
Command.create({'sequence': 3, 'key': 'einstufung', 'bezeichnung': 'Einstufung (KV/Gruppe/Stufe)', 'quelle': 'manuell', 'pflicht': True}),
|
||||
Command.create({'sequence': 3, 'key': 'entgelt', 'bezeichnung': 'Monatsentgelt brutto (EUR)', 'quelle': 'manuell', 'pflicht': True}),
|
||||
Command.create({'sequence': 4, 'key': 'kv_verweis', 'bezeichnung': 'KV-Verweis (z. B. KV Angestellte, Ausgabe ...)', 'quelle': 'manuell', 'pflicht': False}),
|
||||
Command.create({'sequence': 5, 'key': 'arbeitszeit', 'bezeichnung': 'Wöchentliche Dienstzeit (z. B. 40 Stunden)', 'quelle': 'manuell', 'pflicht': True}),
|
||||
Command.create({'sequence': 6, 'key': 'urlaub_tage', 'bezeichnung': 'Urlaubstage je Dienstjahr', 'quelle': 'manuell', 'pflicht': True}),
|
||||
Command.create({'sequence': 6, 'key': 'kuendigung_frist', 'bezeichnung': 'Kündigungsfrist', 'quelle': 'manuell', 'pflicht': True}),
|
||||
Command.create({'sequence': 7, 'key': 'geheimhaltung', 'bezeichnung': 'Geheimhaltungsblock (leer = Block entfällt)', 'quelle': 'manuell', 'pflicht': False}),
|
||||
Command.create({'sequence': 8, 'key': 'konkurrenzklausel', 'bezeichnung': 'Nebentätigkeit/Konkurrenzklausel (leer = Block entfällt)', 'quelle': 'manuell', 'pflicht': False}),
|
||||
Command.create({'sequence': 9, 'key': 'ort_datum', 'bezeichnung': 'Ort, Datum', 'quelle': 'manuell', 'pflicht': True}),
|
||||
Command.create({'sequence': 10, 'key': 'firma', 'bezeichnung': 'Firmenname', 'quelle': 'auto', 'pflicht': True}),
|
||||
Command.create({'sequence': 11, 'key': 'firma_strasse', 'bezeichnung': 'Firma: Straße', 'quelle': 'auto', 'pflicht': False}),
|
||||
Command.create({'sequence': 11, 'key': 'firma_plz', 'bezeichnung': 'Firma: PLZ', 'quelle': 'auto', 'pflicht': False}),
|
||||
Command.create({'sequence': 12, 'key': 'firma_ort', 'bezeichnung': 'Firma: Ort', 'quelle': 'auto', 'pflicht': False}),
|
||||
Command.create({'sequence': 13, 'key': 'mitarbeiter', 'bezeichnung': 'Dienstnehmer:in (Name)', 'quelle': 'auto', 'pflicht': True}),
|
||||
Command.create({'sequence': 14, 'key': 'mitarbeiter_strasse', 'bezeichnung': 'Dienstnehmer:in: Straße', 'quelle': 'auto', 'pflicht': False}),
|
||||
Command.create({'sequence': 15, 'key': 'mitarbeiter_plz', 'bezeichnung': 'Dienstnehmer:in: PLZ', 'quelle': 'auto', 'pflicht': False}),
|
||||
Command.create({'sequence': 16, 'key': 'mitarbeiter_ort', 'bezeichnung': 'Dienstnehmer:in: Ort', 'quelle': 'auto', 'pflicht': False}),
|
||||
Command.create({'sequence': 17, 'key': 'ead', 'bezeichnung': 'Dienstantritt (EAD)', 'quelle': 'auto', 'pflicht': True}),
|
||||
Command.create({'sequence': 18, 'key': 'funktion', 'bezeichnung': 'Funktion (Job)', 'quelle': 'auto', 'pflicht': False}),
|
||||
]"/>
|
||||
</record>
|
||||
|
||||
<!-- ================= Kündigung (Dienstgeber) ================== -->
|
||||
<record id="vorlage_kuendigung_dienstgeber" model="l10n.at.payroll.dokument.vorlage">
|
||||
<field name="name">Kündigung durch den Dienstgeber</field>
|
||||
<field name="thema">beendigung</field>
|
||||
<field name="kb_ref">lb-bnd-55</field>
|
||||
<field name="quell_stand">2026-07</field>
|
||||
<field name="rechtsstatus">entwurf</field>
|
||||
<field name="beschreibung">
|
||||
Ordentliche Kündigung durch den Dienstgeber (Rahmen). Struktur nach dem
|
||||
Lexis-Muster lb-bnd-55 (Stand 2026-07). Betriebsrat-Verweis und
|
||||
Resturlaubs-/Freistellungsblöcke sind optional (leer = entfällt);
|
||||
Personalvertretungsfälle (Gemeinden) sind gesondert zu ergänzen.
|
||||
</field>
|
||||
<field name="inhalt_html"><![CDATA[
|
||||
<div>
|
||||
<p>{{ werte['firma'] }}<br/>{{ werte['firma_strasse'] }}<br/>{{ werte['firma_plz'] }} {{ werte['firma_ort'] }}</p>
|
||||
<p>An {{ werte['anrede'] }} {{ werte['mitarbeiter'] }}<br/>{{ werte['mitarbeiter_strasse'] }}<br/>{{ werte['mitarbeiter_plz'] }} {{ werte['mitarbeiter_ort'] }}</p>
|
||||
<h2>Kündigung des Dienstverhältnisses</h2>
|
||||
<p>{{ werte['ort_datum'] }}</p>
|
||||
<p>{{ werte['anrede'] }},</p>
|
||||
<p>leider sehen wir uns gezwungen, das mit Ihnen bestehende Dienstverhältnis ordentlich, fristgerecht aufzukündigen. Es endet demnach am {{ werte['beendigungstermin'] }}.</p>
|
||||
<p>Die Kündigung erfolgt unter Einhaltung der für Ihr Dienstverhältnis geltenden Kündigungsfrist von {{ werte['kuendigung_frist'] }}.</p>
|
||||
<p t-if="werte['urlaub_rest']">Hinsichtlich Ihres bestehenden Resturlaubs bieten wir an, diesen in der Zeit von {{ werte['urlaub_rest'] }} zu verbrauchen.</p>
|
||||
<p t-if="werte['freistellung']">Weiters teilen wir mit, dass wir Sie in der Zeit von {{ werte['freistellung'] }} bezahlt vom Dienst freistellen.</p>
|
||||
<p>Um den Erhalt dieses Schreibens zu bestätigen, ersuchen wir Sie, die beiliegende Kopie zu unterfertigen und zurückzusenden.</p>
|
||||
<p>{{ werte['firma'] }}<br/><br/>______________________<br/>Dienstgeber</p>
|
||||
<p>Erhalten am: ____________<br/>Unterschrift Dienstnehmer:in: ______________________</p>
|
||||
</div>
|
||||
]]></field>
|
||||
<field name="feld_ids" eval="[
|
||||
Command.create({'sequence': 1, 'key': 'anrede', 'bezeichnung': 'Anrede (Herr/Frau/...)', 'quelle': 'manuell', 'pflicht': True}),
|
||||
Command.create({'sequence': 2, 'key': 'kuendigung_frist', 'bezeichnung': 'Kündigungsfrist', 'quelle': 'manuell', 'pflicht': True}),
|
||||
Command.create({'sequence': 3, 'key': 'beendigungstermin', 'bezeichnung': 'Endtermin', 'quelle': 'manuell', 'pflicht': True}),
|
||||
Command.create({'sequence': 4, 'key': 'urlaub_rest', 'bezeichnung': 'Resturlaub-Verbrauch (Zeitraum, leer = entfällt)', 'quelle': 'manuell', 'pflicht': False}),
|
||||
Command.create({'sequence': 5, 'key': 'freistellung', 'bezeichnung': 'Bezahlte Freistellung (Zeitraum, leer = entfällt)', 'quelle': 'manuell', 'pflicht': False}),
|
||||
Command.create({'sequence': 6, 'key': 'ort_datum', 'bezeichnung': 'Ort, Datum', 'quelle': 'manuell', 'pflicht': True}),
|
||||
Command.create({'sequence': 10, 'key': 'firma', 'bezeichnung': 'Firmenname', 'quelle': 'auto', 'pflicht': True}),
|
||||
Command.create({'sequence': 10, 'key': 'firma_strasse', 'bezeichnung': 'Firma: Straße', 'quelle': 'auto', 'pflicht': False}),
|
||||
Command.create({'sequence': 10, 'key': 'firma_plz', 'bezeichnung': 'Firma: PLZ', 'quelle': 'auto', 'pflicht': False}),
|
||||
Command.create({'sequence': 10, 'key': 'firma_ort', 'bezeichnung': 'Firma: Ort', 'quelle': 'auto', 'pflicht': False}),
|
||||
Command.create({'sequence': 10, 'key': 'mitarbeiter', 'bezeichnung': 'Dienstnehmer:in (Name)', 'quelle': 'auto', 'pflicht': True}),
|
||||
Command.create({'sequence': 10, 'key': 'mitarbeiter_strasse', 'bezeichnung': 'Dienstnehmer:in: Straße', 'quelle': 'auto', 'pflicht': False}),
|
||||
Command.create({'sequence': 10, 'key': 'mitarbeiter_plz', 'bezeichnung': 'Dienstnehmer:in: PLZ', 'quelle': 'auto', 'pflicht': False}),
|
||||
Command.create({'sequence': 10, 'key': 'mitarbeiter_ort', 'bezeichnung': 'Dienstnehmer:in: Ort', 'quelle': 'auto', 'pflicht': False}),
|
||||
]"/>
|
||||
</record>
|
||||
|
||||
<!-- ============ Einvernehmliche Auflösung ==================== -->
|
||||
<record id="vorlage_einvernehmliche_aufloesung" model="l10n.at.payroll.dokument.vorlage">
|
||||
<field name="name">Einvernehmliche Auflösung</field>
|
||||
<field name="thema">beendigung</field>
|
||||
<field name="kb_ref">lb-bnd-52, lb-bnd-62</field>
|
||||
<field name="quell_stand">2026-06</field>
|
||||
<field name="rechtsstatus">entwurf</field>
|
||||
<field name="beschreibung">
|
||||
Vereinbarung der einvernehmlichen Auflösung (Rahmen). Struktur nach dem
|
||||
Lexis-Muster lb-bnd-62 (Stand 2026-06). Hinweis-Konvention des Musters:
|
||||
Endtermin = letzter Arbeitstag, außer es wird Verbrauch von Zeitguthaben
|
||||
oder Urlaub vereinbart; optionale Blöcke leer lassen = entfällt.
|
||||
</field>
|
||||
<field name="inhalt_html"><![CDATA[
|
||||
<div>
|
||||
<p>{{ werte['firma'] }}, {{ werte['firma_strasse'] }}, {{ werte['firma_plz'] }} {{ werte['firma_ort'] }} — im Folgenden „der Dienstgeber“ —</p>
|
||||
<p>und</p>
|
||||
<p>{{ werte['mitarbeiter'] }}, {{ werte['mitarbeiter_strasse'] }}, {{ werte['mitarbeiter_plz'] }} {{ werte['mitarbeiter_ort'] }} — im Folgenden „die Dienstnehmerin/der Dienstnehmer“ —</p>
|
||||
<h2>Vereinbarung über die einvernehmliche Auflösung des Dienstverhältnisses</h2>
|
||||
<p>Die Parteien lösen das seit {{ werte['seit'] }} bestehende Dienstverhältnis einvernehmlich zum {{ werte['beendigungstermin'] }} auf. Mit diesem Tag endet das Dienstverhältnis; dieser Tag ist auch der letzte Arbeitstag.</p>
|
||||
<p t-if="werte['zeitguthaben']">Ein offenes Zeitguthaben von {{ werte['zeitguthaben'] }} wird in der Zeit von {{ werte['zeitguthaben_zeit'] }} verbraucht.</p>
|
||||
<p t-if="werte['urlaub_rest']">Offener Urlaub im Ausmaß von {{ werte['urlaub_rest'] }} wird in der Zeit von {{ werte['urlaub_zeit'] }} aufgebraucht.</p>
|
||||
<p t-if="werte['freistellung']">Die Dienstnehmerin/der Dienstnehmer wird in der Zeit von {{ werte['freistellung'] }} bezahlt vom Dienst freigestellt.</p>
|
||||
<p>Die letzte Entgeltabrechnung erfolgt zur gebührenden Ausfolgung mit der Beendigung; Urlaubsersatzleistungen und ausständige Beträge werden mit der Endabrechnung ausgewiesen.</p>
|
||||
<p>Die Dienstnehmerin/der Dienstnehmer verpflichtet sich, sämtliche Betriebsgegenstände, Dokumente und Zugänge bis zum Ende des Dienstverhältnisses zurückzustellen.</p>
|
||||
<p>Sämtliche gegenseitigen Ansprüche aus dem Dienstverhältnis — soweit gesetzlich zulässig und abweichend nicht geregelt — gelten mit diesem Tag als abgegolten.</p>
|
||||
<p>Änderungen dieser Vereinbarung bedürfen der Schriftform.</p>
|
||||
<p>Ort, Datum: {{ werte['ort_datum'] }}<br/><br/>Dienstgeber: ________________________<br/><br/>Dienstnehmer:in: ______________________</p>
|
||||
</div>
|
||||
]]></field>
|
||||
<field name="feld_ids" eval="[
|
||||
Command.create({'sequence': 1, 'key': 'seit', 'bezeichnung': 'Besteht seit (Dienstbeginn)', 'quelle': 'manuell', 'pflicht': True}),
|
||||
Command.create({'sequence': 2, 'key': 'beendigungstermin', 'bezeichnung': 'Beendigungstermin', 'quelle': 'manuell', 'pflicht': True}),
|
||||
Command.create({'sequence': 3, 'key': 'zeitguthaben', 'bezeichnung': 'Zeitguthaben (Stunden, leer = entfällt)', 'quelle': 'manuell', 'pflicht': False}),
|
||||
Command.create({'sequence': 3, 'key': 'zeitguthaben_zeit', 'bezeichnung': 'Zeitguthaben-Verbrauch (Zeitraum)', 'quelle': 'manuell', 'pflicht': False}),
|
||||
Command.create({'sequence': 4, 'key': 'urlaub_rest', 'bezeichnung': 'Resturlaub (Tage, leer = entfällt)', 'quelle': 'manuell', 'pflicht': False}),
|
||||
Command.create({'sequence': 4, 'key': 'urlaub_zeit', 'bezeichnung': 'Urlaubsverbrauch (Zeitraum)', 'quelle': 'manuell', 'pflicht': False}),
|
||||
Command.create({'sequence': 5, 'key': 'freistellung', 'bezeichnung': 'Bezahlte Freistellung (Zeitraum, leer = entfällt)', 'quelle': 'manuell', 'pflicht': False}),
|
||||
Command.create({'sequence': 6, 'key': 'ort_datum', 'bezeichnung': 'Ort, Datum', 'quelle': 'manuell', 'pflicht': True}),
|
||||
Command.create({'sequence': 10, 'key': 'firma', 'bezeichnung': 'Firmenname', 'quelle': 'auto', 'pflicht': True}),
|
||||
Command.create({'sequence': 10, 'key': 'firma_strasse', 'bezeichnung': 'Firma: Straße', 'quelle': 'auto', 'pflicht': False}),
|
||||
Command.create({'sequence': 10, 'key': 'firma_plz', 'bezeichnung': 'Firma: PLZ', 'quelle': 'auto', 'pflicht': False}),
|
||||
Command.create({'sequence': 10, 'key': 'firma_ort', 'bezeichnung': 'Firma: Ort', 'quelle': 'auto', 'pflicht': False}),
|
||||
Command.create({'sequence': 10, 'key': 'mitarbeiter', 'bezeichnung': 'Dienstnehmer:in (Name)', 'quelle': 'auto', 'pflicht': True}),
|
||||
Command.create({'sequence': 10, 'key': 'mitarbeiter_strasse', 'bezeichnung': 'Dienstnehmer:in: Straße', 'quelle': 'auto', 'pflicht': False}),
|
||||
Command.create({'sequence': 10, 'key': 'mitarbeiter_plz', 'bezeichnung': 'Dienstnehmer:in: PLZ', 'quelle': 'auto', 'pflicht': False}),
|
||||
Command.create({'sequence': 10, 'key': 'mitarbeiter_ort', 'bezeichnung': 'Dienstnehmer:in: Ort', 'quelle': 'auto', 'pflicht': False}),
|
||||
]"/>
|
||||
</record>
|
||||
|
||||
<!-- ============ Vordienstzeitenbestätigung =================== -->
|
||||
<record id="vorlage_vordienstzeiten" model="l10n.at.payroll.dokument.vorlage">
|
||||
<field name="name">Vordienstzeitenbestätigung</field>
|
||||
<field name="thema">bescheinigung</field>
|
||||
<field name="kb_ref">lb-end-35</field>
|
||||
<field name="quell_stand">2026-07</field>
|
||||
<field name="rechtsstatus">entwurf</field>
|
||||
<field name="beschreibung">
|
||||
Bestätigung des Vor-Dienstgebers über Beschäftigungsdauer und Abfertigungs-
|
||||
Status anlässlich der Beendigung (Anrechnung von Vordienstzeiten beim
|
||||
neuen Dienstgeber, lb-end-35, Stand 2026-07). Abfertigungs-Auswahl im
|
||||
Wizard befüllen (keine/gesetzliche/KV/freiwillige — nicht zutreffende
|
||||
Angaben entfallen).
|
||||
</field>
|
||||
<field name="inhalt_html"><![CDATA[
|
||||
<div>
|
||||
<p>{{ werte['firma'] }}, {{ werte['firma_strasse'] }}, {{ werte['firma_plz'] }} {{ werte['firma_ort'] }}</p>
|
||||
<h2>Bestätigung über Vordienstzeiten</h2>
|
||||
<p>Wir, {{ werte['firma'] }}, bestätigen, dass {{ werte['mitarbeiter'] }}, geboren am {{ werte['geboren'] }}, in der Zeit von {{ werte['von'] }} bis {{ werte['bis'] }} bei uns beschäftigt war und anlässlich der Beendigung des Dienstverhältnisses:</p>
|
||||
<ul>
|
||||
<li>{{ werte['abfertigung_art'] }}</li>
|
||||
</ul>
|
||||
<p>Die Bestätigung dient der Anrechnung von Vordienstzeiten für die Einstufung beim neuen Dienstgeber.</p>
|
||||
<p>Datum: {{ werte['ort_datum'] }}</p>
|
||||
<p>firmenmäßige Zeichnung: ________________________</p>
|
||||
</div>
|
||||
]]></field>
|
||||
<field name="feld_ids" eval="[
|
||||
Command.create({'sequence': 1, 'key': 'von', 'bezeichnung': 'Beschäftigt von', 'quelle': 'manuell', 'pflicht': True}),
|
||||
Command.create({'sequence': 2, 'key': 'bis', 'bezeichnung': 'Beschäftigt bis', 'quelle': 'manuell', 'pflicht': True}),
|
||||
Command.create({'sequence': 3, 'key': 'abfertigung_art', 'bezeichnung': 'Abfertigungsstatus (z. B. weder eine ... noch eine ... Abfertigung erhalten)', 'quelle': 'manuell', 'pflicht': True, 'hinweis': 'Text je Fall; Muster-Varianten: keine / gesetzliche / kollektivvertragliche / freiwillige Abfertigung samt Höhe'}),
|
||||
Command.create({'sequence': 3, 'key': 'ort_datum', 'bezeichnung': 'Ort, Datum', 'quelle': 'manuell', 'pflicht': True}),
|
||||
Command.create({'sequence': 10, 'key': 'firma', 'bezeichnung': 'Firmenname', 'quelle': 'auto', 'pflicht': True}),
|
||||
Command.create({'sequence': 10, 'key': 'firma_strasse', 'bezeichnung': 'Firma: Straße', 'quelle': 'auto', 'pflicht': False}),
|
||||
Command.create({'sequence': 10, 'key': 'firma_plz', 'bezeichnung': 'Firma: PLZ', 'quelle': 'auto', 'pflicht': False}),
|
||||
Command.create({'sequence': 10, 'key': 'firma_ort', 'bezeichnung': 'Firma: Ort', 'quelle': 'auto', 'pflicht': False}),
|
||||
Command.create({'sequence': 10, 'key': 'mitarbeiter', 'bezeichnung': 'Dienstnehmer:in (Name)', 'quelle': 'auto', 'pflicht': True}),
|
||||
Command.create({'sequence': 10, 'key': 'mitarbeiter_strasse', 'bezeichnung': 'Dienstnehmer:in: Straße', 'quelle': 'auto', 'pflicht': False}),
|
||||
Command.create({'sequence': 10, 'key': 'mitarbeiter_plz', 'bezeichnung': 'Dienstnehmer:in: PLZ', 'quelle': 'auto', 'pflicht': False}),
|
||||
Command.create({'sequence': 10, 'key': 'mitarbeiter_ort', 'bezeichnung': 'Dienstnehmer:in: Ort', 'quelle': 'auto', 'pflicht': False}),
|
||||
Command.create({'sequence': 10, 'key': 'geboren', 'bezeichnung': 'Geburtsdatum', 'quelle': 'auto', 'pflicht': False}),
|
||||
]"/>
|
||||
</record>
|
||||
</odoo>
|
||||
@@ -0,0 +1,4 @@
|
||||
# Part of the odoo-at-payroll project. License: LGPL-3.
|
||||
from . import dokument_vorlage
|
||||
from . import dokument_wizard
|
||||
from . import dokument_report
|
||||
@@ -0,0 +1,17 @@
|
||||
# Part of the odoo-at-payroll project. License: LGPL-3.
|
||||
"""Generisches Druck-Template: nimmt das vom Wizard gerenderte
|
||||
body-HTML entgegen und bettet es in die PDF-Seite ein."""
|
||||
from markupsafe import Markup
|
||||
from odoo import models
|
||||
|
||||
|
||||
class ReportDokumentGenerisch(models.AbstractModel):
|
||||
_name = 'report.l10n_at_payroll_dokumente.report_dokument_generisch'
|
||||
_description = 'Dokument aus Vorlage (generisches Drucklayout)'
|
||||
|
||||
def _get_report_values(self, docids, data=None):
|
||||
data = data or {}
|
||||
return {
|
||||
'titel': data.get('titel', ''),
|
||||
'body': Markup(data.get('body', '')),
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
# Part of the odoo-at-payroll project. License: LGPL-3.
|
||||
"""Dokumentgenerierung: Vorlagen mit eigenem Text und Platzhaltern.
|
||||
|
||||
Vorlagen enthalten ausschließlich eigenen Text; die Struktur-Referenz zu
|
||||
den Lexis-Mustern ist pro Vorlage dokumentiert (``kb_ref``/``quell_stand``),
|
||||
nie der lizenzierte Volltext.
|
||||
|
||||
Rendering: eigene Ausführung über ``ir.qweb`` mit den Framework-Bausteinen
|
||||
``rendering_tools.convert_inline_template_to_qweb`` — Autor-Syntax bleibt
|
||||
``{{ werte['key'] }}`` (identisch zu mail.render.mixin), t-out escapt die
|
||||
Werte automatisch. Bewusst NICHT ``mail.render.mixin._render_template``
|
||||
mit engine='inline_template': deren Ausdrucks-Whitelist
|
||||
(``mail_allowed_qweb_expressions``) lässt nur ``object.*``-Basistreffer zu
|
||||
und würde die ``werte['...']``-Platzhalter für Nicht-Template-Editoren
|
||||
sperren (AccessError).
|
||||
"""
|
||||
from odoo import fields, models
|
||||
from odoo.tools.rendering_tools import convert_inline_template_to_qweb
|
||||
|
||||
from lxml import html as lxml_html
|
||||
|
||||
|
||||
class L10nAtPayrollDokumentVorlage(models.Model):
|
||||
_name = 'l10n.at.payroll.dokument.vorlage'
|
||||
_description = 'Dokumentvorlage (eigener Text)'
|
||||
_order = 'thema, name'
|
||||
|
||||
name = fields.Char(required=True)
|
||||
thema = fields.Selection(
|
||||
[('dienstvertrag', 'Dienstvertrag'),
|
||||
('beendigung', 'Beendigung/Kündigung'),
|
||||
('bescheinigung', 'Bescheinigung'),
|
||||
('vereinbarung', 'Vereinbarung'),
|
||||
('exekution', 'Exekution/Pfändung'),
|
||||
('sonstiges', 'Sonstiges')],
|
||||
required=True, default='sonstiges')
|
||||
beschreibung = fields.Text(
|
||||
help="Zweck des Dokuments und Hinweise zum Rechtsanker; auch "
|
||||
"Platzhalter-Dokumentation für nicht in der Feldliste "
|
||||
"geführte Ausdrücke (object.*, version.*).")
|
||||
inhalt_html = fields.Html(
|
||||
string='Vorlagentext',
|
||||
sanitize=False,
|
||||
help="Eigener Vorlagentext; Platzhalter {{ werte['key'] }} werden "
|
||||
"im Generierungs-Wizard befüllt.")
|
||||
feld_ids = fields.One2many(
|
||||
'l10n.at.payroll.dokument.feld', 'vorlage_id',
|
||||
string='Befüllfelder')
|
||||
kb_ref = fields.Char(
|
||||
string='Struktur-Referenz',
|
||||
help="Wissensbasis-/Muster-ID, nach deren Struktur der eigene "
|
||||
"Text formuliert wurde (Herkunftsnachweis, kein Volltext).")
|
||||
quell_stand = fields.Char(
|
||||
string='Quell-Stand',
|
||||
help="Stand der Struktur-Referenz, z. B. '2025-06'.")
|
||||
rechtsstatus = fields.Selection(
|
||||
[('entwurf', 'Entwurf — rechtliche Prüfung offen'),
|
||||
('geprueft', 'Rechtlich geprüft')],
|
||||
default='entwurf', required=True, string='Rechtsstatus')
|
||||
active = fields.Boolean(default=True)
|
||||
company_id = fields.Many2one(
|
||||
'res.company', default=lambda self: self.env.company)
|
||||
|
||||
def _at_renderen(self, employee, version, werte, datum):
|
||||
"""Vorlagentext auf den Mitarbeiter rendern (HTML-String)."""
|
||||
self.ensure_one()
|
||||
variablen = self.env['mail.render.mixin']._render_eval_context()
|
||||
variablen.update({
|
||||
'werte': werte,
|
||||
'version': version,
|
||||
'datum': datum,
|
||||
'object': employee,
|
||||
})
|
||||
qweb_src = convert_inline_template_to_qweb(self.inhalt_html)
|
||||
element = lxml_html.fragment_fromstring(
|
||||
str(qweb_src), create_parent='div')
|
||||
html = self.env['ir.qweb']._render(
|
||||
element, variablen, minimal_qcontext=True)
|
||||
# Ummantelungs-<div> von fragment_fromstring entfernen
|
||||
# (Muster mail.render.mixin._render_template_qweb).
|
||||
return str(html)[5:-6]
|
||||
|
||||
_sql_constraints = [
|
||||
('name_uniq', 'unique(name, company_id)',
|
||||
'Vorlagenname je Company eindeutig.'),
|
||||
]
|
||||
|
||||
|
||||
class L10nAtPayrollDokumentFeld(models.Model):
|
||||
_name = 'l10n.at.payroll.dokument.feld'
|
||||
_description = 'Dokumentvorlage-Befüllfeld'
|
||||
_order = 'sequence, id'
|
||||
_rec_name = 'key'
|
||||
|
||||
sequence = fields.Integer(default=10)
|
||||
vorlage_id = fields.Many2one(
|
||||
'l10n.at.payroll.dokument.vorlage', required=True,
|
||||
ondelete='cascade', index=True)
|
||||
key = fields.Char(
|
||||
required=True,
|
||||
help="Platzhalter-Schlüssel; im Vorlagentext als "
|
||||
"{{ werte['key'] }} zu verwenden.")
|
||||
bezeichnung = fields.Char()
|
||||
quelle = fields.Selection(
|
||||
[('auto', 'Automatisch (hr-Stammdaten)'),
|
||||
('manuell', 'Manuelle Eingabe im Wizard')],
|
||||
default='manuell', required=True)
|
||||
pflicht = fields.Boolean(
|
||||
default=True,
|
||||
help="Pflichtfelder müssen im Wizard befüllt sein, bevor das "
|
||||
"Dokument erzeugt wird.")
|
||||
hinweis = fields.Char(
|
||||
help="Erklärung für die Wizard-Eingabe (z. B. KV-Bezug).")
|
||||
|
||||
_sql_constraints = [
|
||||
('key_vorlage_uniq', 'unique(vorlage_id, key)',
|
||||
'Platzhalter-Schlüssel je Vorlage eindeutig.'),
|
||||
]
|
||||
@@ -0,0 +1,188 @@
|
||||
# Part of the odoo-at-payroll project. License: LGPL-3.
|
||||
"""Wizard: Dokument aus Vorlage generieren.
|
||||
|
||||
Befüllt die Platzhalter der Vorlage aus hr-Stammdaten (automatische
|
||||
Felder) und Wizard-Eingaben (manuelle Felder), rendert eine Vorschau und
|
||||
erzeugt PDF (ir.actions.report, wkhtmltopdf) bzw. — ohne PDF-Engine —
|
||||
das gerenderte HTML als Anhang.
|
||||
"""
|
||||
import base64
|
||||
|
||||
from markupsafe import Markup
|
||||
from odoo import api, fields, models, _
|
||||
from odoo.exceptions import UserError
|
||||
from odoo.tools.misc import format_date
|
||||
|
||||
|
||||
class L10nAtPayrollDokumentWizard(models.TransientModel):
|
||||
_name = 'l10n.at.payroll.dokument.wizard'
|
||||
_description = 'Dokument aus Vorlage generieren'
|
||||
|
||||
vorlage_id = fields.Many2one(
|
||||
'l10n.at.payroll.dokument.vorlage', required=True,
|
||||
domain=[('active', '=', True)])
|
||||
employee_id = fields.Many2one('hr.employee', required=True)
|
||||
datum = fields.Date(
|
||||
string='Stichtag',
|
||||
default=fields.Date.context_today,
|
||||
help="Stichtag für den hr.version-Stand (Vertragsdaten).")
|
||||
version_id = fields.Many2one(
|
||||
'hr.version', compute='_compute_version_id',
|
||||
string='Vertragsstand (hr.version)')
|
||||
feld_wert_ids = fields.One2many(
|
||||
'l10n.at.payroll.dokument.wizard.feld', 'wizard_id',
|
||||
string='Befüllung')
|
||||
vorschau_html = fields.Html(
|
||||
string='Vorschau', readonly=True, sanitize=False)
|
||||
|
||||
@api.depends('employee_id', 'datum')
|
||||
def _compute_version_id(self):
|
||||
for wizard in self:
|
||||
wizard.version_id = wizard._at_version_am()
|
||||
|
||||
def _at_version_am(self):
|
||||
"""hr.version gültig am Stichtag (date_version <= Stichtag)."""
|
||||
self.ensure_one()
|
||||
if not self.datum or not self.employee_id:
|
||||
return self.env['hr.version']
|
||||
return self.env['hr.version'].search(
|
||||
[('employee_id', '=', self.employee_id.id),
|
||||
('date_version', '<=', self.datum)],
|
||||
order='date_version desc, id desc', limit=1)
|
||||
|
||||
@api.onchange('vorlage_id')
|
||||
def _onchange_vorlage_id(self):
|
||||
self.vorschau_html = False
|
||||
self.feld_wert_ids = self._at_linien()
|
||||
|
||||
def action_befuellen(self):
|
||||
"""Linien aus der Vorlage neu aufbauen (auch bei Wechsel)."""
|
||||
self.ensure_one()
|
||||
self.vorschau_html = False
|
||||
self.feld_wert_ids = self._at_linien()
|
||||
|
||||
def _at_linien(self):
|
||||
self.ensure_one()
|
||||
if not self.vorlage_id:
|
||||
return [(5, 0, 0)]
|
||||
return [(5, 0, 0)] + [
|
||||
(0, 0, {
|
||||
'key': feld.key,
|
||||
'bezeichnung': feld.bezeichnung,
|
||||
'quelle': feld.quelle,
|
||||
'pflicht': feld.pflicht,
|
||||
'hinweis': feld.hinweis,
|
||||
})
|
||||
for feld in self.vorlage_id.feld_ids.sorted('sequence')
|
||||
]
|
||||
|
||||
def _at_werte(self):
|
||||
"""Befüllwerte: automatisch aufgelöst + manuelle Eingaben."""
|
||||
self.ensure_one()
|
||||
werte = {}
|
||||
fehlen = []
|
||||
for feld in self.vorlage_id.feld_ids:
|
||||
line = self.feld_wert_ids.filtered(
|
||||
lambda l, k=feld.key: l.key == k)[:1]
|
||||
if feld.quelle == 'auto':
|
||||
werte[feld.key] = self._at_auto_wert(feld.key)
|
||||
else:
|
||||
wert = (line.wert or '').strip()
|
||||
if not wert and feld.pflicht:
|
||||
fehlen.append(feld.bezeichnung or feld.key)
|
||||
werte[feld.key] = wert
|
||||
if fehlen:
|
||||
raise UserError(_(
|
||||
"Pflichtfelder nicht befüllt: %s", ', '.join(fehlen)))
|
||||
return werte
|
||||
|
||||
def _at_auto_wert(self, key):
|
||||
self.ensure_one()
|
||||
employee = self.employee_id
|
||||
version = self.version_id
|
||||
company = employee.company_id
|
||||
if key == 'firma':
|
||||
return company.name or ''
|
||||
if key == 'firma_strasse':
|
||||
return company.partner_id.street or ''
|
||||
if key == 'firma_plz':
|
||||
return company.partner_id.zip or ''
|
||||
if key == 'firma_ort':
|
||||
return company.partner_id.city or ''
|
||||
if key == 'mitarbeiter':
|
||||
return employee.name or ''
|
||||
if key == 'mitarbeiter_strasse':
|
||||
return version.private_street or ''
|
||||
if key == 'mitarbeiter_plz':
|
||||
return version.private_zip or ''
|
||||
if key == 'mitarbeiter_ort':
|
||||
return version.private_city or ''
|
||||
if key == 'ead':
|
||||
datum = version.date_version or version.contract_date_start
|
||||
return format_date(self.env, datum) if datum else ''
|
||||
if key == 'funktion':
|
||||
return version.job_title or version.job_id.name or ''
|
||||
if key == 'geboren':
|
||||
return format_date(self.env, employee.birthday) if employee.birthday else ''
|
||||
raise UserError(_(
|
||||
"Kein automatischer Wert für Platzhalter '%s' definiert.", key))
|
||||
|
||||
def action_vorschau(self):
|
||||
self.ensure_one()
|
||||
werte = self._at_werte()
|
||||
self.vorschau_html = Markup(self.vorlage_id._at_renderen(
|
||||
self.employee_id, self.version_id, werte, self.datum))
|
||||
return {
|
||||
'type': 'ir.actions.act_window',
|
||||
'res_model': self._name,
|
||||
'res_id': self.id,
|
||||
'view_mode': 'form',
|
||||
'target': 'new',
|
||||
}
|
||||
|
||||
def action_pdf(self):
|
||||
self.ensure_one()
|
||||
werte = self._at_werte()
|
||||
body = Markup(self.vorlage_id._at_renderen(
|
||||
self.employee_id, self.version_id, werte, self.datum))
|
||||
name = '%s — %s (%s)' % (
|
||||
self.vorlage_id.name, self.employee_id.name, self.datum)
|
||||
if self.env['ir.actions.report'].get_wkhtmltopdf_state() == 'ok':
|
||||
pdf_content, _typ = self.env['ir.actions.report']._render_qweb_pdf(
|
||||
'l10n_at_payroll_dokumente.action_report_dokument_generisch',
|
||||
self.ids, data={'titel': name, 'body': body})
|
||||
datas = base64.b64encode(pdf_content)
|
||||
mimetype = 'application/pdf'
|
||||
suffix = '.pdf'
|
||||
else:
|
||||
datas = base64.b64encode(str(body).encode('utf-8'))
|
||||
mimetype = 'text/html'
|
||||
suffix = '.html'
|
||||
self.env['ir.attachment'].create({
|
||||
'name': name + suffix,
|
||||
'datas': datas,
|
||||
'mimetype': mimetype,
|
||||
'res_model': 'hr.employee',
|
||||
'res_id': self.employee_id.id,
|
||||
'description': 'Dokument aus Vorlage %s' % self.vorlage_id.name,
|
||||
})
|
||||
return {
|
||||
'type': 'ir.actions.act_window_close',
|
||||
}
|
||||
|
||||
|
||||
class L10nAtPayrollDokumentWizardFeld(models.TransientModel):
|
||||
_name = 'l10n.at.payroll.dokument.wizard.feld'
|
||||
_description = 'Dokument-Wizard Befüllzeile'
|
||||
|
||||
wizard_id = fields.Many2one(
|
||||
'l10n.at.payroll.dokument.wizard', required=True,
|
||||
ondelete='cascade')
|
||||
key = fields.Char(readonly=True, required=True)
|
||||
bezeichnung = fields.Char(readonly=True)
|
||||
quelle = fields.Selection(
|
||||
[('auto', 'Automatisch (hr-Stammdaten)'),
|
||||
('manuell', 'Manuelle Eingabe im Wizard')], readonly=True)
|
||||
pflicht = fields.Boolean(readonly=True)
|
||||
hinweis = fields.Char(readonly=True)
|
||||
wert = fields.Char()
|
||||
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<!-- Generisches Drucklayout für Dokumente aus Vorlagen. -->
|
||||
<!-- Aufgerufen vom Wizard (ir.actions.report._render_qweb_pdf); -->
|
||||
<!-- kein Menü-Binding, da der Inhalt je Generierung variiert. -->
|
||||
<record id="action_report_dokument_generisch" model="ir.actions.report">
|
||||
<field name="name">Dokument aus Vorlage</field>
|
||||
<field name="model">l10n.at.payroll.dokument.wizard</field>
|
||||
<field name="report_type">qweb-pdf</field>
|
||||
<field name="report_name">l10n_at_payroll_dokumente.report_dokument_generisch</field>
|
||||
<field name="report_file">l10n_at_payroll_dokumente.report_dokument_generisch</field>
|
||||
<field name="paperformat_id" ref="base.paperformat_euro"/>
|
||||
</record>
|
||||
|
||||
<template id="report_dokument_generisch">
|
||||
<t t-call="web.html_container">
|
||||
<div class="page">
|
||||
<h1 class="d-none"><t t-out="titel"/></h1>
|
||||
<div t-out="body"/>
|
||||
</div>
|
||||
</t>
|
||||
</template>
|
||||
</odoo>
|
||||
@@ -0,0 +1,5 @@
|
||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_dokument_vorlage_hr_user,l10n.at.payroll.dokument.vorlage hr.user,model_l10n_at_payroll_dokument_vorlage,hr.group_hr_user,1,0,0,0
|
||||
access_dokument_vorlage_hr_manager,l10n.at.payroll.dokument.vorlage hr.manager,model_l10n_at_payroll_dokument_vorlage,hr.group_hr_manager,1,1,1,1
|
||||
access_dokument_feld_hr_user,l10n.at.payroll.dokument.feld hr.user,model_l10n_at_payroll_dokument_feld,hr.group_hr_user,1,0,0,0
|
||||
access_dokument_feld_hr_manager,l10n.at.payroll.dokument.feld hr.manager,model_l10n_at_payroll_dokument_feld,hr.group_hr_manager,1,1,1,1
|
||||
|
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="rule_dokument_vorlage_company" model="ir.rule">
|
||||
<field name="name">Dokumentvorlage: eigene Company</field>
|
||||
<field name="model_id" ref="model_l10n_at_payroll_dokument_vorlage"/>
|
||||
<field name="domain_force">['|', ('company_id', '=', False), ('company_id', 'in', company_ids)]</field>
|
||||
</record>
|
||||
</odoo>
|
||||
@@ -0,0 +1,2 @@
|
||||
# Part of the odoo-at-payroll project. License: LGPL-3.
|
||||
from . import test_dokumente
|
||||
@@ -0,0 +1,183 @@
|
||||
# Part of the odoo-at-payroll project. License: LGPL-3.
|
||||
"""Tests: Dokumentgenerierung aus Vorlagen.
|
||||
|
||||
Rendering der eigenen Vorlagentexte (werte['key']-Platzhalter), Auto-Werte
|
||||
aus hr-Stammdaten, Pflichtfeld-Validierung, hr.version-Stichtagsauflösung,
|
||||
generisches Druck-Template und Anhang-Ablage (PDF wenn wkhtmltopdf
|
||||
verfügbar, sonst HTML-Fallback)."""
|
||||
import base64
|
||||
import datetime
|
||||
|
||||
from odoo.exceptions import AccessError, UserError
|
||||
from odoo.tests import TransactionCase, tagged
|
||||
|
||||
|
||||
@tagged('post_install', '-at_install')
|
||||
class DokumenteTest(TransactionCase):
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.company = self.env.company
|
||||
self.company.write({'name': 'Musterwerkstatt GmbH'})
|
||||
employee = self.env['hr.employee'].create({
|
||||
'name': 'Dokument Test'})
|
||||
version = self.env['hr.version'].search(
|
||||
[('employee_id', '=', employee.id)], limit=1)
|
||||
version.write({
|
||||
'date_version': datetime.date(2020, 1, 1),
|
||||
'contract_date_start': datetime.date(2020, 1, 1),
|
||||
'job_title': 'Techniker',
|
||||
'private_street': 'Testgasse 1',
|
||||
'private_zip': '1010',
|
||||
'private_city': 'Wien',
|
||||
})
|
||||
self.employee = employee
|
||||
self.version = version
|
||||
self.vorlage = self.env['l10n.at.payroll.dokument.vorlage'].create({
|
||||
'name': 'Testbescheinigung',
|
||||
'thema': 'bescheinigung',
|
||||
'kb_ref': 'lb-test',
|
||||
'rechtsstatus': 'entwurf',
|
||||
'inhalt_html':
|
||||
'<p>Firma: {{ werte[\'firma\'] }}</p>'
|
||||
'<p>Mitarbeiter: {{ werte[\'mitarbeiter\'] }}</p>'
|
||||
'<p>Funktion: {{ werte[\'funktion\'] }}</p>'
|
||||
'<p>EAD: {{ werte[\'ead\'] }}</p>'
|
||||
'<p>Zusatz: {{ werte[\'zusatz\'] }}</p>',
|
||||
'feld_ids': [
|
||||
(0, 0, {'sequence': 1, 'key': 'zusatz',
|
||||
'quelle': 'manuell', 'pflicht': True,
|
||||
'bezeichnung': 'Zusatzangabe'}),
|
||||
(0, 0, {'sequence': 2, 'key': 'firma', 'quelle': 'auto',
|
||||
'pflicht': True}),
|
||||
(0, 0, {'sequence': 3, 'key': 'mitarbeiter',
|
||||
'quelle': 'auto', 'pflicht': True}),
|
||||
(0, 0, {'sequence': 4, 'key': 'funktion', 'quelle': 'auto',
|
||||
'pflicht': False}),
|
||||
(0, 0, {'sequence': 5, 'key': 'ead', 'quelle': 'auto',
|
||||
'pflicht': False}),
|
||||
],
|
||||
})
|
||||
|
||||
def _wizard(self):
|
||||
wizard = self.env['l10n.at.payroll.dokument.wizard'].create({
|
||||
'vorlage_id': self.vorlage.id,
|
||||
'employee_id': self.employee.id,
|
||||
'datum': datetime.date(2026, 1, 15),
|
||||
})
|
||||
wizard.action_befuellen()
|
||||
return wizard
|
||||
|
||||
def test_01_auto_werte(self):
|
||||
wizard = self._wizard()
|
||||
wizard.feld_wert_ids.filtered(
|
||||
lambda l: l.key == 'zusatz').wert = 'X'
|
||||
werte = wizard._at_werte()
|
||||
self.assertEqual(werte['firma'], 'Musterwerkstatt GmbH')
|
||||
self.assertEqual(werte['mitarbeiter'], 'Dokument Test')
|
||||
self.assertEqual(werte['funktion'], 'Techniker')
|
||||
self.assertTrue(werte['ead'])
|
||||
|
||||
def test_02_vorschau_ersetzt_platzhalter(self):
|
||||
wizard = self._wizard()
|
||||
wizard.feld_wert_ids.filtered(
|
||||
lambda l: l.key == 'zusatz').wert = 'Projekt Alpha'
|
||||
wizard.action_vorschau()
|
||||
vorschau = wizard.vorschau_html
|
||||
self.assertIn('Musterwerkstatt GmbH', vorschau)
|
||||
self.assertIn('Dokument Test', vorschau)
|
||||
self.assertIn('Projekt Alpha', vorschau)
|
||||
self.assertNotIn('{{', vorschau)
|
||||
|
||||
def test_03_pflichtfeld_leist_user_error(self):
|
||||
wizard = self._wizard()
|
||||
with self.assertRaises(UserError):
|
||||
wizard._at_werte()
|
||||
|
||||
def test_04_version_am_stichtag(self):
|
||||
self.env['hr.version'].create({
|
||||
'employee_id': self.employee.id,
|
||||
'date_version': datetime.date(2026, 3, 1),
|
||||
'job_title': 'Senior Techniker',
|
||||
})
|
||||
wizard = self._wizard()
|
||||
self.assertEqual(wizard.version_id.job_title, 'Techniker')
|
||||
wizard.datum = datetime.date(2026, 6, 1)
|
||||
wizard._compute_version_id()
|
||||
self.assertEqual(wizard.version_id.job_title, 'Senior Techniker')
|
||||
|
||||
def test_05_pdf_ablegt_anhang(self):
|
||||
wizard = self._wizard()
|
||||
wizard.feld_wert_ids.filtered(
|
||||
lambda l: l.key == 'zusatz').wert = 'Fall 5'
|
||||
wizard.action_pdf()
|
||||
anh = self.env['ir.attachment'].search(
|
||||
[('res_model', '=', 'hr.employee'),
|
||||
('res_id', '=', self.employee.id)])
|
||||
self.assertEqual(len(anh), 1)
|
||||
self.assertIn(anh.mimetype, ('application/pdf', 'text/html'))
|
||||
if anh.mimetype == 'text/html':
|
||||
html = base64.b64decode(anh.datas).decode('utf-8')
|
||||
self.assertIn('Fall 5', html)
|
||||
|
||||
def test_06_report_values_generic(self):
|
||||
wizard = self._wizard()
|
||||
report = self.env[
|
||||
'report.l10n_at_payroll_dokumente'
|
||||
'.report_dokument_generisch']
|
||||
values = report._get_report_values(
|
||||
wizard.ids, data={'titel': 'T', 'body': '<p>Body</p>'})
|
||||
self.assertEqual(str(values['body']), '<p>Body</p>')
|
||||
html_content, _typ = self.env['ir.actions.report']._render_qweb_html(
|
||||
'l10n_at_payroll_dokumente.action_report_dokument_generisch',
|
||||
wizard.ids, data={'titel': 'T', 'body': values['body']})
|
||||
self.assertIn('Body', str(html_content))
|
||||
|
||||
def test_07_access_hr_user_lesen_manager_schreiben(self):
|
||||
hr_user = self.env['res.users'].create({
|
||||
'name': 'Dokument Lesetest',
|
||||
'login': 'dok_lesetest',
|
||||
'group_ids': [(4, self.env.ref('hr.group_hr_user').id)],
|
||||
})
|
||||
umgebung = self.env(user=hr_user.id)
|
||||
self.assertTrue(
|
||||
umgebung['l10n.at.payroll.dokument.vorlage'].browse(
|
||||
self.vorlage.id).name)
|
||||
kein_hr = self.env['res.users'].create({
|
||||
'name': 'Dokument Ohne HR',
|
||||
'login': 'dok_ohne_hr',
|
||||
'group_ids': [(4, self.env.ref('base.group_user').id)],
|
||||
})
|
||||
ohne = self.env(user=kein_hr.id)
|
||||
with self.assertRaises(AccessError):
|
||||
ohne['l10n.at.payroll.dokument.vorlage'].browse(
|
||||
self.vorlage.id).name
|
||||
|
||||
def test_08_pilot_vorlagen_installiert(self):
|
||||
for xmlid in ('vorlage_dienstvertrag_angestellte',
|
||||
'vorlage_kuendigung_dienstgeber',
|
||||
'vorlage_einvernehmliche_aufloesung',
|
||||
'vorlage_vordienstzeiten'):
|
||||
vorlage = self.env.ref(
|
||||
'l10n_at_payroll_dokumente.%s' % xmlid)
|
||||
self.assertTrue(vorlage.inhalt_html)
|
||||
self.assertEqual(vorlage.rechtsstatus, 'entwurf')
|
||||
kuendigung = self.env.ref(
|
||||
'l10n_at_payroll_dokumente.vorlage_kuendigung_dienstgeber')
|
||||
wizard = self.env['l10n.at.payroll.dokument.wizard'].create({
|
||||
'vorlage_id': kuendigung.id,
|
||||
'employee_id': self.employee.id,
|
||||
'datum': datetime.date(2026, 9, 1),
|
||||
})
|
||||
wizard.action_befuellen()
|
||||
wizard.feld_wert_ids.filtered(
|
||||
lambda l: l.key == 'anrede').wert = 'Sehr geehrter Herr'
|
||||
wizard.feld_wert_ids.filtered(
|
||||
lambda l: l.key == 'kuendigung_frist').wert = '6 Wochen'
|
||||
wizard.feld_wert_ids.filtered(
|
||||
lambda l: l.key == 'beendigungstermin').wert = '31.10.2026'
|
||||
wizard.feld_wert_ids.filtered(
|
||||
lambda l: l.key == 'ort_datum').wert = 'Wien, 1.9.2026'
|
||||
wizard.action_vorschau()
|
||||
self.assertIn('31.10.2026', wizard.vorschau_html)
|
||||
self.assertIn('Musterwerkstatt GmbH', wizard.vorschau_html)
|
||||
@@ -0,0 +1,92 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="view_dokument_vorlage_list" model="ir.ui.view">
|
||||
<field name="name">l10n.at.payroll.dokument.vorlage.list</field>
|
||||
<field name="model">l10n.at.payroll.dokument.vorlage</field>
|
||||
<field name="arch" type="xml">
|
||||
<list>
|
||||
<field name="name"/>
|
||||
<field name="thema"/>
|
||||
<field name="kb_ref"/>
|
||||
<field name="quell_stand"/>
|
||||
<field name="rechtsstatus"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_dokument_vorlage_form" model="ir.ui.view">
|
||||
<field name="name">l10n.at.payroll.dokument.vorlage.form</field>
|
||||
<field name="model">l10n.at.payroll.dokument.vorlage</field>
|
||||
<field name="arch" type="xml">
|
||||
<form>
|
||||
<header>
|
||||
<field name="rechtsstatus" widget="statusbar"
|
||||
options="{'clickable': true}"/>
|
||||
</header>
|
||||
<sheet>
|
||||
<div class="oe_title">
|
||||
<label for="name"/>
|
||||
<h1><field name="name" placeholder="z. B. Dienstvertrag (Angestellte)"/></h1>
|
||||
</div>
|
||||
<group>
|
||||
<group>
|
||||
<field name="thema"/>
|
||||
<field name="active"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="kb_ref"/>
|
||||
<field name="quell_stand"/>
|
||||
<field name="rechtsstatus"/>
|
||||
</group>
|
||||
</group>
|
||||
<group>
|
||||
<field name="beschreibung"/>
|
||||
</group>
|
||||
<notebook>
|
||||
<page string="Vorlagentext" name="text">
|
||||
<field name="inhalt_html"/>
|
||||
</page>
|
||||
<page string="Befüllfelder" name="felder">
|
||||
<field name="feld_ids">
|
||||
<list editable="bottom">
|
||||
<field name="sequence" widget="handle"/>
|
||||
<field name="key"/>
|
||||
<field name="bezeichnung"/>
|
||||
<field name="quelle"/>
|
||||
<field name="pflicht"/>
|
||||
<field name="hinweis"/>
|
||||
</list>
|
||||
</field>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_dokument_vorlage" model="ir.actions.act_window">
|
||||
<field name="name">Dokumentvorlagen</field>
|
||||
<field name="res_model">l10n.at.payroll.dokument.vorlage</field>
|
||||
<field name="view_mode">list,form</field>
|
||||
<field name="context">{'default_active': True}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Erste Dokumentvorlage anlegen
|
||||
</p>
|
||||
<p>
|
||||
Eigener Text mit Platzhaltern {{ werte['key'] }}; die
|
||||
Befüllfelder steuern, was der Generierungs-Wizard abfragt.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_dokumente_root"
|
||||
name="AT Dokumente"
|
||||
sequence="50"/>
|
||||
<menuitem id="menu_dokument_vorlage"
|
||||
action="action_dokument_vorlage"
|
||||
parent="menu_dokumente_root"
|
||||
sequence="10"/>
|
||||
</odoo>
|
||||
@@ -0,0 +1,68 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="view_dokument_wizard_form" model="ir.ui.view">
|
||||
<field name="name">l10n.at.payroll.dokument.wizard.form</field>
|
||||
<field name="model">l10n.at.payroll.dokument.wizard</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Dokument aus Vorlage generieren">
|
||||
<group>
|
||||
<group>
|
||||
<field name="vorlage_id" options="{'no_create': True}"/>
|
||||
<field name="employee_id"/>
|
||||
<field name="datum"/>
|
||||
<field name="version_id"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page string="Befüllung" name="befuellung">
|
||||
<field name="feld_wert_ids">
|
||||
<list editable="bottom">
|
||||
<field name="key" optional="show"/>
|
||||
<field name="bezeichnung" optional="show"/>
|
||||
<field name="hinweis" optional="hide"/>
|
||||
<field name="quelle" optional="show"/>
|
||||
<field name="pflicht" optional="hide"/>
|
||||
<field name="wert"
|
||||
readonly="key and quelle == 'auto'"
|
||||
required="pflicht"/>
|
||||
</list>
|
||||
</field>
|
||||
</page>
|
||||
<page string="Vorschau" name="vorschau">
|
||||
<field name="vorschau_html" nolabel="1"/>
|
||||
</page>
|
||||
</notebook>
|
||||
<footer>
|
||||
<button name="action_vorschau" type="object"
|
||||
string="Vorschau erzeugen" class="btn-primary"/>
|
||||
<button name="action_pdf" type="object"
|
||||
string="PDF erzeugen & ablegen"
|
||||
class="btn-primary"/>
|
||||
<button special="cancel" string="Abbrechen"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_dokument_generieren" model="ir.actions.act_window">
|
||||
<field name="name">Dokument aus Vorlage generieren</field>
|
||||
<field name="res_model">l10n.at.payroll.dokument.wizard</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
<record id="action_dokument_generieren_employee" model="ir.actions.act_window">
|
||||
<field name="name">Dokument aus Vorlage generieren</field>
|
||||
<field name="res_model">l10n.at.payroll.dokument.wizard</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
<field name="context">{'default_employee_id': active_id}</field>
|
||||
<field name="binding_model_id" ref="hr.model_hr_employee"/>
|
||||
<field name="binding_view_types">list,form</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_dokument_generieren"
|
||||
action="action_dokument_generieren"
|
||||
parent="menu_dokumente_root"
|
||||
sequence="20"/>
|
||||
</odoo>
|
||||
@@ -60,7 +60,9 @@ Absetzbeträgen — kein Pendlerpauschalen-Feature).
|
||||
4. **Endabrechnungs-Zyklus**: Urlaubsersatzleistung (lb-url-09/15/16),
|
||||
Abgangsentschädigung/Vergleich/Prämien bei Beendigung
|
||||
(lb-end-04/05/06/08…22), Aufrechnung Vorschüsse/Darlehen
|
||||
(lb-lvr-01/02), Zeitschulden/Zeitguthaben (lb-end-09/10)
|
||||
(lb-lvr-01/02), Zeitschulden/Zeitguthaben (lb-end-09/10),
|
||||
Ausbildungskostenrückersatz (lb-end-27/28 — **Nachtrag 2026-09-16**
|
||||
aus Batch 10; nicht im Abgleich-Stand 2026-09-12)
|
||||
5. **Abfertigung Alt**-Bezugszeile (lb-end-01/02, lb-kar-01)
|
||||
6. **Karenz-/Familien-Reste**: SV-An/-Abmeldung Karenz, Elternteilzeit
|
||||
(lb-elt-03), Bildungs-/Pflege-/Hospizkarenz (lb-kzs-01/02/06/07),
|
||||
@@ -191,8 +193,14 @@ Test-Integration.
|
||||
`l10n_at_s67_abs` ✅), Prämien bei Beendigung, Aufrechnung
|
||||
Vorschüsse/Darlehen (Rückzahlungsmodus lb-end-06, lb-lvr-01/02),
|
||||
Zeitguthaben/-schulden-Abrechnung.
|
||||
- **Nachtrag (2026-09-16, Batch 10):** **Ausbildungskostenrückersatz**
|
||||
bei vorzeitigem Austritt (lb-end-27 Checkliste, lb-end-28 Muster)
|
||||
als Endabrechnungs-Komponente im Wizard — Rechtsgrundlage vor Bau
|
||||
RIS-verifizieren (§ 32 AngG-Kontext/RL-VA); Scope-Gate Pilotmandant.
|
||||
- **Rechtsanker:** lb-url-09/15/16, lb-son-05, lb-end-04/05/06/08…22;
|
||||
§ 67 Abs 8 lit d EStG + § 11 Abs 2 ASVG RIS-Gate.
|
||||
§ 67 Abs 8 lit d EStG + § 11 Abs 2 ASVG RIS-Gate; **lb-end-27/28**
|
||||
(Ausbildungskostenrückersatz, Nachtrag 2026-09-16 — RIS-Gate vor
|
||||
Bau).
|
||||
- **Tests:** Rechenfälle `endabrechnung.md` — Urlaubsersatzleistung
|
||||
2 Komponenten, §-11-Abs-2-SV-Fall, Vergleich Günstiger § 67 Abs 3,
|
||||
Aufrechnung gegen SZ (pfändungsfest? — Schnittstelle AP11),
|
||||
|
||||
@@ -121,7 +121,17 @@ Cluster unverändert) — **insgesamt 571 Einträge, 67 Cluster**, Quell-Stände
|
||||
`gwe` (2, Güterbeförderung/Gastgewerbe), sonst Belegung bestehender
|
||||
Cluster (`wk-pfa-01` neben `lb-pfa-*`: vor 1 · kar 1 · bnd 1 · lvr 2 ·
|
||||
dvh 1 · bes 1 · rei 1 · gsf 1 · grz 1 · ins 1 · lsd 1 · pfa 1 · azg 1 ·
|
||||
sac 1 · son 1) → **gesamt 601 Einträge, 69 Cluster**. Siebzehn Briefings-Kapitel, aus Batch 9 neu:
|
||||
sac 1 · son 1) → **gesamt 601 Einträge, 69 Cluster**. **Batch 10
|
||||
(2026-09-16): 64 Einträge — Sektions-Exporte aus Subordnern**
|
||||
(`.lexis360/{beispiele,muster,uebersichten_checklisten}/`, dasselbe
|
||||
Werk, dieselbe Breadcrumb-Form; 4 Re-Export-Duplikate `(1)` gelöscht,
|
||||
1 URL-kodierter Dateiname normalisiert), bestehende Cluster erweitert:
|
||||
bnd 44→66 · end 25→34 · ues 4→9 · tel 6→11 · bso 10→16 · azg 4→9 ·
|
||||
azm 7→10 · grz 8→11 · bes 8→10 · son 5→6 · swa 5→6 · aug 2→3 ·
|
||||
url 16→17 — **gesamt 665 Einträge, 69 Cluster** (Quell-Stände
|
||||
2020-12 bis 2026-08; alte Stände mit ⚠ markiert: lb-tel-07/08
|
||||
2025-01, lb-tel-09 2024-01, lb-tel-10 2020-12, lb-ues-05/06/08
|
||||
2025-12, lb-bes-09/10 + lb-end-27/28/33/34 2025-06). Siebzehn Briefings-Kapitel, aus Batch 9 neu:
|
||||
„Sozialversicherung“ (Beitragsrecht ASVG/GSVG/BSVG, Neue
|
||||
Selbstständige, Krankenversicherung ASVG, Pensionsversicherung).
|
||||
„Beschäftigungsverhältnisse“, „Entgelt: Anspruch &
|
||||
|
||||
@@ -7,7 +7,10 @@ personalverrechnung/wissensbasis/ (development reference and future
|
||||
copilot corpus):
|
||||
|
||||
lexis .lexis360/*.pdf PDF exports of "Lexis Briefings Personalrecht"
|
||||
(LexisNexis AT, licensed Lexis 360 subscription)
|
||||
(LexisNexis AT, licensed Lexis 360 subscription);
|
||||
batch 10 adds the same work's sections in
|
||||
subfolders: .lexis360/{beispiele,muster,
|
||||
uebersichten_checklisten}/
|
||||
wiku .wiku/*.pdf WIKU Personal publications (Fachbroschüren,
|
||||
Arbeitsunterlagen, Casebooks, the periodical
|
||||
"WIKU Personal aktuell")
|
||||
@@ -61,7 +64,7 @@ CURATED_DIR = ROOT / "personalverrechnung" / "wissensbasis" / "dokumente"
|
||||
KB_JSON = CURATED_DIR.parent / "kb.json"
|
||||
|
||||
WORK_LEXIS = "Lexis Briefings Personalrecht"
|
||||
BATCH_LEXIS = 9
|
||||
BATCH_LEXIS = 10
|
||||
BATCH_WIKU = 1
|
||||
WIKU_SLUG_PREFIX = "wiku_"
|
||||
WIKU_WORKS = (
|
||||
@@ -77,6 +80,9 @@ SOURCES: dict[str, dict] = {
|
||||
"lexis": {
|
||||
"work": WORK_LEXIS,
|
||||
"pdf_dir": ROOT / ".lexis360",
|
||||
# batch 10 — same work, same breadcrumb format, section exports in
|
||||
# subfolders (Muster, Beispiele, Übersichten & Checklisten)
|
||||
"pdf_subdirs": ("beispiele", "muster", "uebersichten_checklisten"),
|
||||
"md_dir": ROOT / ".lexis360" / "md",
|
||||
"pdf_glob": "Lexis360_*.pdf",
|
||||
"id_prefix": "lb",
|
||||
@@ -913,6 +919,13 @@ BC_LINE_RE = re.compile(
|
||||
r"^\s*(?P<chapter>[^>·]+?)\s*>\s*(?P<topic>.+?)\s*·\s*(?P<author>.+?)"
|
||||
r"\s*·\s*(?P<month>[A-ZÄÖÜ][a-zäöüß]+)\s+(?P<year>\d{4})(?P<rest>.*)$"
|
||||
)
|
||||
# Breadcrumb variant WITHOUT an author segment (batch-10 Muster exports:
|
||||
# "Kapitel > Thema · <Monat> <Jahr>"). The author then defaults to the
|
||||
# editorial attribution in parse_meta().
|
||||
BC_LINE_NOAUTHOR_RE = re.compile(
|
||||
r"^\s*(?P<chapter>[^>·]+?)\s*>\s*(?P<topic>.+?)\s*·\s*"
|
||||
r"(?P<month>[A-ZÄÖÜ][a-zäöüß]+)\s+(?P<year>\d{4})(?P<rest>.*)$"
|
||||
)
|
||||
STAND_RE = re.compile(r"^\d{4}-\d{2}$")
|
||||
ID_RE = re.compile(r"^(lb|wk)-[a-z]{3}-\d{2}$")
|
||||
|
||||
@@ -968,14 +981,25 @@ def clean_wiku_text(raw: str) -> str:
|
||||
return text.strip() + "\n"
|
||||
|
||||
|
||||
def _match_bc(line: str):
|
||||
"""Try the author-carrying breadcrumb regex first, then the
|
||||
no-author variant (batch 10)."""
|
||||
for rx in (BC_LINE_RE, BC_LINE_NOAUTHOR_RE):
|
||||
m = rx.match(line)
|
||||
if m:
|
||||
return m
|
||||
return None
|
||||
|
||||
|
||||
def parse_meta(text: str, pdf_title: str = "") -> dict:
|
||||
"""Parse title + breadcrumb from the first page.
|
||||
|
||||
Layout: a line with the work marker, the chapter title, then the
|
||||
breadcrumb "Kapitel > Thema · Autor · <Monat> <Jahr>". Dossier-style
|
||||
exports merge breadcrumb and body text into one line; the regex tail
|
||||
(?P<rest>) tolerates that. If no separate title line exists, fall
|
||||
back to the pdfinfo Title.
|
||||
breadcrumb "Kapitel > Thema · Autor · <Monat> <Jahr>" (or the
|
||||
batch-10 no-author variant "Kapitel > Thema · <Monat> <Jahr>").
|
||||
Dossier-style exports merge breadcrumb and body into one line; the
|
||||
regex tail (?P<rest>) tolerates that. If no separate title line
|
||||
exists, fall back to the pdfinfo Title.
|
||||
"""
|
||||
lines = text.splitlines()
|
||||
marker_idx = None
|
||||
@@ -989,7 +1013,7 @@ def parse_meta(text: str, pdf_title: str = "") -> dict:
|
||||
m = None
|
||||
scan = lines[marker_idx + 1:]
|
||||
for pos, ln in enumerate(scan):
|
||||
cand = BC_LINE_RE.match(ln)
|
||||
cand = _match_bc(ln)
|
||||
if cand is None and ("·" in ln or " > " in ln):
|
||||
# dossier-style exports wrap the breadcrumb ("· Juli\n2026",
|
||||
# "... ·\nAutor · Juli 2026", or the topic split BEFORE the
|
||||
@@ -999,7 +1023,7 @@ def parse_meta(text: str, pdf_title: str = "") -> dict:
|
||||
joined = ln.rstrip()
|
||||
for nxt in scan[pos + 1:pos + 3]:
|
||||
joined = f"{joined} {nxt.strip()}".strip()
|
||||
cand = BC_LINE_RE.match(joined)
|
||||
cand = _match_bc(joined)
|
||||
if cand:
|
||||
break
|
||||
if cand:
|
||||
@@ -1020,7 +1044,8 @@ def parse_meta(text: str, pdf_title: str = "") -> dict:
|
||||
"title": title,
|
||||
"chapter": m.group("chapter").strip(),
|
||||
"topic_group": m.group("topic").strip(),
|
||||
"author": m.group("author").strip(),
|
||||
# batch-10 no-author variant: editorial default attribution
|
||||
"author": m.groupdict().get("author") or "Lexis Redaktion",
|
||||
"stand": f"{m.group('year')}-{month_no:02d}",
|
||||
"stand_human": f"{m.group('month')} {m.group('year')}",
|
||||
}
|
||||
@@ -1122,12 +1147,21 @@ def extract_lexis() -> int:
|
||||
if not src["pdf_dir"].is_dir():
|
||||
sys.exit(f"missing {src['pdf_dir']}")
|
||||
src["md_dir"].mkdir(exist_ok=True)
|
||||
pdfs = sorted(src["pdf_dir"].glob(src["pdf_glob"]))
|
||||
pdfs: list[Path] = []
|
||||
for sub in (None, *src.get("pdf_subdirs", ())):
|
||||
pdir = src["pdf_dir"] / sub if sub else src["pdf_dir"]
|
||||
if pdir.is_dir():
|
||||
pdfs.extend(sorted(pdir.glob(src["pdf_glob"])))
|
||||
catalog: list[dict] = []
|
||||
texts: dict[str, str] = {}
|
||||
warnings: list[str] = []
|
||||
seen_slugs: set[str] = set()
|
||||
for pdf in pdfs:
|
||||
slug = pdf.stem[len("Lexis360_"):]
|
||||
if slug in seen_slugs:
|
||||
warnings.append(f"{pdf.name}: slug {slug!r} collides - skipped")
|
||||
continue
|
||||
seen_slugs.add(slug)
|
||||
raw, pages, pdf_title = parse_pdf(pdf)
|
||||
text = clean_text(raw)
|
||||
texts[slug] = text
|
||||
@@ -1139,7 +1173,7 @@ def extract_lexis() -> int:
|
||||
entry = {
|
||||
"slug": slug,
|
||||
"source": "lexis",
|
||||
"pdf_rel": f".lexis360/{pdf.name}",
|
||||
"pdf_rel": pdf.relative_to(ROOT).as_posix(),
|
||||
"md_rel": f".lexis360/md/{slug}.md",
|
||||
"work": WORK_LEXIS,
|
||||
"pages": pages,
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
# Index — Wissensbasis Personalverrechnung
|
||||
|
||||
Generiert am 2026-09-11 · 601 Einträge · 69 Cluster. Quellen: Lexis Briefings Personalrecht (Lexis 360, lizenzierter Export) und WIKU Personal (Fachbroschüren, Arbeitsunterlagen, Casebooks, WIKU Personal aktuell). Volltexte lokal/unversioniert (`.lexis360/`, `.wiku/`). Werte gelten je zum Quell-Stand (`stand` im Frontmatter); Widersprüche und offene Punkte sind mit ⚠/❓ in den Einträgen selbst dokumentiert. Schema & Konventionen: `README.md`.
|
||||
Generiert am 2026-09-16 · 665 Einträge · 69 Cluster. Quellen: Lexis Briefings Personalrecht (Lexis 360, lizenzierter Export) und WIKU Personal (Fachbroschüren, Arbeitsunterlagen, Casebooks, WIKU Personal aktuell). Volltexte lokal/unversioniert (`.lexis360/`, `.wiku/`). Werte gelten je zum Quell-Stand (`stand` im Frontmatter); Widersprüche und offene Punkte sind mit ⚠/❓ in den Einträgen selbst dokumentiert. Schema & Konventionen: `README.md`.
|
||||
|
||||
|
||||
# Lexis Briefings Personalrecht (Lexis 360-Exporte) — 571 Einträge
|
||||
# Lexis Briefings Personalrecht (Lexis 360-Exporte) — 635 Einträge
|
||||
|
||||
|
||||
## Altersteilzeit (`topic: altersteilzeit`) — 15 Einträge · Stand 2026-01 bis 2026-09
|
||||
@@ -47,14 +47,15 @@ Generiert am 2026-09-11 · 601 Einträge · 69 Cluster. Quellen: Lexis Briefings
|
||||
| lb-asc-15 | Arbeitsunfall - Entgeltfortzahlung bei Arbeitern | Ruß/Radauer | 2026-07 | arbeitsunfall_entgeltfortzahlung_bei_arbeitern.md |
|
||||
| lb-asc-16 | Arbeitsunfall und Berufskrankheit - Begriffe | Ruß/Radauer | 2026-07 | arbeitsunfall_und_berufskrankheit_begriffe.md |
|
||||
|
||||
## Arbeitskräfteüberlassung (AÜG) (`topic: arbeitskrafteuberlassung`) — 2 Einträge · Stand 2026-06 bis 2026-06
|
||||
## Arbeitskräfteüberlassung (AÜG) (`topic: arbeitskrafteuberlassung`) — 3 Einträge · Stand 2026-06 bis 2026-06
|
||||
|
||||
| ID | Titel | Autor | Stand | Datei |
|
||||
|---|---|---|---|---|
|
||||
| lb-aug-01 | Arbeitskräfteüberlassung - Aufgaben von Überlasser und Beschäftiger | Thöny-Maier/David | 2026-06 | arbeitskrafteuberlassung_aufgaben_von_uberlasser_u.md |
|
||||
| lb-aug-02 | Arbeitskräfteüberlassung - wichtige Grundsätze | Thöny-Maier/David | 2026-06 | arbeitskrafteuberlassung_wichtige_grundsatze.md |
|
||||
| lb-aug-03 | Muster - Überlassungsmitteilung | Thöny-Maier | 2026-06 | muster_uberlassungsmitteilung.md |
|
||||
|
||||
## Arbeitszeitgrenzen (`topic: arbeitszeitgrenzen`) — 4 Einträge · Stand 2026-06 bis 2026-07
|
||||
## Arbeitszeitgrenzen (`topic: arbeitszeitgrenzen`) — 9 Einträge · Stand 2026-06 bis 2026-07
|
||||
|
||||
| ID | Titel | Autor | Stand | Datei |
|
||||
|---|---|---|---|---|
|
||||
@@ -62,8 +63,13 @@ Generiert am 2026-09-11 · 601 Einträge · 69 Cluster. Quellen: Lexis Briefings
|
||||
| lb-azg-02 | Arbeitszeitgrenzen allgemein | Thöny-Maier | 2026-06 | arbeitszeitgrenzen_allgemein.md |
|
||||
| lb-azg-03 | Normalarbeitszeit | Thöny-Maier | 2026-07 | normalarbeitszeit.md |
|
||||
| lb-azg-04 | Strafbarkeit von Arbeitszeitübertretungen | Thöny-Maier | 2026-07 | strafbarkeit_von_arbeitszeitubertretungen.md |
|
||||
| lb-azg-05 | Muster - Grundklauseln zu Ausmaß und Lage der Arbeitszeit | Lexis Redaktion | 2026-07 | muster_grundklauseln_zu_ausmass_und_lage_der_arbeit.md |
|
||||
| lb-azg-06 | Muster - Normalarbeitszeitdurchrechnungen bei Teilzeitkräften | Lexis Redaktion | 2026-07 | muster_normalarbeitszeitdurchrechnungen_bei_teilze.md |
|
||||
| lb-azg-07 | Muster - Teilzeitkräfte - Änderungen (Erhöhungen, Senkungen) des Teilzeitausmaßes | Lexis Redaktion | 2026-07 | muster_teilzeitkrafte_anderungen_erhohungen_senkun.md |
|
||||
| lb-azg-08 | Muster - Teilzeitkräfte - Vereinbarung unterschiedlicher Teilzeitausmaße | Lexis Redaktion | 2026-07 | muster_teilzeitkrafte_vereinbarung_unterschiedlich.md |
|
||||
| lb-azg-09 | Muster - Viertagewoche-Einzelvereinbarung | Lexis Redaktion | 2026-07 | muster_viertagewoche_einzelvereinbarung.md |
|
||||
|
||||
## Arbeitszeitmodelle (Gleitzeit, Schicht, Kurzarbeit) (`topic: arbeitszeitmodelle`) — 7 Einträge · Stand 2026-07 bis 2026-07
|
||||
## Arbeitszeitmodelle (Gleitzeit, Schicht, Kurzarbeit) (`topic: arbeitszeitmodelle`) — 10 Einträge · Stand 2026-07 bis 2026-07
|
||||
|
||||
| ID | Titel | Autor | Stand | Datei |
|
||||
|---|---|---|---|---|
|
||||
@@ -74,6 +80,9 @@ Generiert am 2026-09-11 · 601 Einträge · 69 Cluster. Quellen: Lexis Briefings
|
||||
| lb-azm-05 | Kurzarbeit – Inhaltliche Ausgestaltung | Niederfriniger | 2026-07 | kurzarbeit_inhaltliche_ausgestaltung.md |
|
||||
| lb-azm-06 | Kurzarbeitsbeihilfe | Niederfriniger | 2026-07 | kurzarbeitsbeihilfe.md |
|
||||
| lb-azm-07 | Schichtarbeit | Niederfriniger/David | 2026-07 | schichtarbeit.md |
|
||||
| lb-azm-08 | Muster-Einzelvereinbarung: Einarbeiten in Verbindung mit Feiertagen | Lexis Redaktion | 2026-07 | muster_einzelvereinbarung_einarbeiten_in_verbindun.md |
|
||||
| lb-azm-09 | Muster - Ergänzungsmodule zur Gleitzeitvereinbarung | Lexis Redaktion | 2026-07 | muster_erganzungsmodule_zur_gleitzeitvereinbarung.md |
|
||||
| lb-azm-10 | Muster - Gleitzeit-Einzelvereinbarung | Lexis Redaktion | 2026-07 | muster_gleitzeit_einzelvereinbarung.md |
|
||||
|
||||
## Bäuerliche Sozialversicherung (BSVG) (`topic: bauerliche-sozialversicherung`) — 18 Einträge · Stand 2025-01 bis 2026-01
|
||||
|
||||
@@ -98,7 +107,7 @@ Generiert am 2026-09-11 · 601 Einträge · 69 Cluster. Quellen: Lexis Briefings
|
||||
| lb-bsv-17 | Pflichtversicherung und Versicherungsgrenzen | Fiedler | 2026-01 | pflichtversicherung_und_versicherungsgrenzen.md |
|
||||
| lb-bsv-18 | Pflichtversicherung und Versicherungsgrenzen – Übergangsbestimmungen | Fiedler | 2026-01 | pflichtversicherung_und_versicherungsgrenzen_uberg.md |
|
||||
|
||||
## Beendigungsarten (Austritt, Entlassung, Kündigung) (`topic: beendigungsarten`) — 44 Einträge · Stand 2026-06 bis 2026-08
|
||||
## Beendigungsarten (Austritt, Entlassung, Kündigung) (`topic: beendigungsarten`) — 66 Einträge · Stand 2026-06 bis 2026-08
|
||||
|
||||
| ID | Titel | Autor | Stand | Datei |
|
||||
|---|---|---|---|---|
|
||||
@@ -146,8 +155,30 @@ Generiert am 2026-09-11 · 601 Einträge · 69 Cluster. Quellen: Lexis Briefings
|
||||
| lb-bnd-42 | Kündigungsfrühwarnsystem | Thöny-Maier | 2026-07 | kundigungsfruhwarnsystem.md |
|
||||
| lb-bnd-43 | Motivkündigung | Thöny-Maier | 2026-07 | motivkundigung.md |
|
||||
| lb-bnd-44 | Sozialwidrige Kündigung | Thöny-Maier | 2026-07 | sozialwidrige_kundigung.md |
|
||||
| lb-bnd-45 | Anspruchsübersicht - Tod des Arbeitnehmers | Thöny-Maier | 2026-06 | anspruchsubersicht_tod_des_arbeitnehmers.md |
|
||||
| lb-bnd-46 | Checkliste - Ansprüche bei der Entlassung | Thöny-Maier | 2026-06 | checkliste_anspruche_bei_der_entlassung.md |
|
||||
| lb-bnd-47 | Checkliste - Ansprüche beim Austritt | Thöny-Maier | 2026-06 | checkliste_anspruche_beim_austritt.md |
|
||||
| lb-bnd-48 | Checkliste - Befristetes Arbeitsverhältnis - worauf zu achten ist | Thöny-Maier | 2026-06 | checkliste_befristetes_arbeitsverhaltnis_worauf_zu.md |
|
||||
| lb-bnd-49 | Checkliste - Entlassung | Thöny-Maier | 2026-06 | checkliste_entlassung.md |
|
||||
| lb-bnd-50 | Checkliste - Kündigungsanfechtung Arbeitgeber | Thöny-Maier | 2026-07 | checkliste_kundigungsanfechtung_arbeitgeber.md |
|
||||
| lb-bnd-51 | Checkliste - Vorgehensweise Kündigung (Arbeitgeber) | Thöny-Maier | 2026-07 | checkliste_vorgehensweise_kundigung_arbeitgeber.md |
|
||||
| lb-bnd-52 | Checkliste - Vorüberlegungen zur einvernehmlichen Auflösung | Thöny-Maier | 2026-06 | checkliste_voruberlegungen_zur_einvernehmlichen_au.md |
|
||||
| lb-bnd-53 | Checkliste - Zu beachten bei Auflösung in der Probezeit | Thöny-Maier | 2026-06 | checkliste_zu_beachten_bei_auflosung_in_der_probez.md |
|
||||
| lb-bnd-54 | Muster: Änderungskündigung (auflösende Bedingung) | Thöny-Maier | 2026-07 | muster_anderungskundigung_auflosende_bedingung.md |
|
||||
| lb-bnd-55 | Muster - Arbeitgeberkündigung | Thöny-Maier | 2026-07 | muster_arbeitgeberkundigung.md |
|
||||
| lb-bnd-56 | Muster - Aufforderung Kontaktaufnahme | Thöny-Maier | 2026-06 | muster_aufforderung_kontaktaufnahme.md |
|
||||
| lb-bnd-57 | Muster - Auflösung in Probezeit | Thöny-Maier | 2026-06 | muster_auflosung_in_probezeit.md |
|
||||
| lb-bnd-58 | Muster - Einholung einer Rechtsauskunft | Thöny-Maier | 2026-06 | muster_einholung_einer_rechtsauskunft.md |
|
||||
| lb-bnd-59 | Muster - Entlassung | Thöny-Maier | 2026-06 | muster_entlassung.md |
|
||||
| lb-bnd-60 | Muster - Information über die Beendigung durch Fristablauf | Thöny-Maier | 2026-06 | muster_information_uber_die_beendigung_durch_frist.md |
|
||||
| lb-bnd-61 | Muster - Textbaustein Dienstvertrag Befristung zwecks Erprobung | Thöny-Maier | 2026-06 | muster_textbaustein_dienstvertrag_befristung_zweck.md |
|
||||
| lb-bnd-62 | Muster - Vereinbarung einer einvernehmlichen Lösung | Thöny-Maier | 2026-06 | muster_vereinbarung_einer_einvernehmlichen_losung.md |
|
||||
| lb-bnd-63 | Muster - Vereinbarung einer neuerlichen Befristung aus sozialen Gründen | Thöny-Maier | 2026-06 | muster_vereinbarung_einer_neuerlichen_befristung_a.md |
|
||||
| lb-bnd-64 | Muster - Verwarnung wegen Alkoholisierung | Vinzenz | 2026-08 | muster_verwarnung_wegen_alkoholisierung.md |
|
||||
| lb-bnd-65 | Muster - Verwarnung wegen wiederholten Zuspätkommens | Egger | 2026-08 | muster_verwarnung_wegen_wiederholten_zuspatkommens.md |
|
||||
| lb-bnd-66 | Muster - Vorübergehende Dienstfreistellung wegen Tatverdachts | Sabara | 2026-06 | muster_vorubergehende_dienstfreistellung_wegen_tat.md |
|
||||
|
||||
## Beendigungsphase – Sonstiges (Zeugnis, Konkurrenzklausel, Sozialplan, Postensuche) (`topic: beendigungsphase-sonstiges`) — 10 Einträge · Stand 2026-06 bis 2026-08
|
||||
## Beendigungsphase – Sonstiges (Zeugnis, Konkurrenzklausel, Sozialplan, Postensuche) (`topic: beendigungsphase-sonstiges`) — 16 Einträge · Stand 2026-06 bis 2026-08
|
||||
|
||||
| ID | Titel | Autor | Stand | Datei |
|
||||
|---|---|---|---|---|
|
||||
@@ -161,6 +192,12 @@ Generiert am 2026-09-11 · 601 Einträge · 69 Cluster. Quellen: Lexis Briefings
|
||||
| lb-bso-09 | Sozialplan - Abgaben | Mäder | 2026-07 | sozialplan_abgaben.md |
|
||||
| lb-bso-10 | Verfahren vor dem ASG | Thöny-Maier | 2026-07 | verfahren_vor_dem_asg.md |
|
||||
| lb-bso-11 | Auflösungsabgabe - bis 31. 12. 2019 | Vinzenz/Sabara | 2026-08 | auflosungsabgabe_bis_31_12_2019.md |
|
||||
| lb-bso-12 | Checkliste - Bewertungskriterien | Thöny-Maier | 2026-06 | checkliste_bewertungskriterien.md |
|
||||
| lb-bso-13 | Checkliste - notwendige Zeugnisbestandteile | Thöny-Maier | 2026-06 | checkliste_notwendige_zeugnisbestandteile.md |
|
||||
| lb-bso-14 | Checkliste - Sinnhaftigkeit Klage | Thöny-Maier | 2026-07 | checkliste_sinnhaftigkeit_klage.md |
|
||||
| lb-bso-15 | Checkliste - Unzulässige Anmerkungen | Thöny-Maier | 2026-06 | checkliste_unzulassige_anmerkungen.md |
|
||||
| lb-bso-16 | Checkliste - Zeugniserstellung | Thöny-Maier | 2026-06 | checkliste_zeugniserstellung.md |
|
||||
| lb-bso-17 | Übersicht - Verfahrensvorbereitung | Thöny-Maier | 2026-07 | ubersicht_verfahrensvorbereitung.md |
|
||||
|
||||
## Behinderte Arbeitnehmer (`topic: behinderte`) — 4 Einträge · Stand 2026-06 bis 2026-08
|
||||
|
||||
@@ -192,7 +229,7 @@ Generiert am 2026-09-11 · 601 Einträge · 69 Cluster. Quellen: Lexis Briefings
|
||||
| lb-sva-15 | Verjährung von Sozialversicherungsbeiträgen | Ihradska | 2026-06 | verjahrung_von_sozialversicherungsbeitragen.md |
|
||||
| lb-sva-16 | Versicherungsschutz in Sonderfällen | Eichinger | 2026-07 | versicherungsschutz_in_sonderfallen.md |
|
||||
|
||||
## Beschäftigungsformen & Abgrenzung (`topic: beschaftigungsformen`) — 8 Einträge · Stand 2026-07 bis 2026-08
|
||||
## Beschäftigungsformen & Abgrenzung (`topic: beschaftigungsformen`) — 10 Einträge · Stand 2025-06 bis 2026-08
|
||||
|
||||
| ID | Titel | Autor | Stand | Datei |
|
||||
|---|---|---|---|---|
|
||||
@@ -204,6 +241,8 @@ Generiert am 2026-09-11 · 601 Einträge · 69 Cluster. Quellen: Lexis Briefings
|
||||
| lb-bes-06 | Geringfügige Beschäftigung | Thöny-Maier | 2026-07 | geringfugige_beschaftigung.md |
|
||||
| lb-bes-07 | Vertragsangestellte | Egger/David | 2026-08 | vertragsangestellte.md |
|
||||
| lb-bes-08 | Werkvertrag | Egger/Knell | 2026-08 | werkvertrag.md |
|
||||
| lb-bes-09 | Muster - Angestelltendienstvertrag | Haider | 2025-06 | muster_angestelltendienstvertrag.md |
|
||||
| lb-bes-10 | Muster - Arbeiterdienstvertrag | Haider | 2025-06 | muster_arbeiterdienstvertrag.md |
|
||||
|
||||
## Betriebsrat & Betriebsvereinbarungen (`topic: betriebsrat`) — 35 Einträge · Stand 2026-07 bis 2026-07
|
||||
|
||||
@@ -277,7 +316,7 @@ Generiert am 2026-09-11 · 601 Einträge · 69 Cluster. Quellen: Lexis Briefings
|
||||
| lb-elt-05 | Elternteilzeit - Kündigungs- und Entlassungsschutz | Sabara | 2026-07 | elternteilzeit_kundigungs_und_entlassungsschutz.md |
|
||||
| lb-elt-06 | Elternteilzeit - Verfahren bei Nichteinigung | Sabara | 2026-07 | elternteilzeit_verfahren_bei_nichteinigung.md |
|
||||
|
||||
## Beendigungsansprüche & Endabrechnung (Abfertigung, Vergleich, Stundenguthaben) (`topic: endabrechnung`) — 25 Einträge · Stand 2025-06 bis 2026-08
|
||||
## Beendigungsansprüche & Endabrechnung (Abfertigung, Vergleich, Stundenguthaben) (`topic: endabrechnung`) — 34 Einträge · Stand 2025-06 bis 2026-08
|
||||
|
||||
| ID | Titel | Autor | Stand | Datei |
|
||||
|---|---|---|---|---|
|
||||
@@ -306,6 +345,15 @@ Generiert am 2026-09-11 · 601 Einträge · 69 Cluster. Quellen: Lexis Briefings
|
||||
| lb-end-24 | Kündigungsentschädigung - Arbeitsrecht | Haider | 2025-06 | kundigungsentschadigung_arbeitsrecht.md |
|
||||
| lb-end-25 | Rückzahlung von Darlehen | Posch/Haas | 2026-07 | ruckzahlung_von_darlehen.md |
|
||||
| lb-end-26 | Ausbildungskostenrückersatz | Haider | 2025-06 | ausbildungskostenruckersatz.md |
|
||||
| lb-end-27 | Ausbildungskostenrückersatz - Checkliste | Haider | 2025-06 | ausbildungskostenruckersatz_checkliste.md |
|
||||
| lb-end-28 | Ausbildungskostenrückersatz - Muster | Haider | 2025-06 | ausbildungskostenruckersatz_muster.md |
|
||||
| lb-end-29 | Beispiel ‒ Abrechnung von Zeitschulden | Posch | 2026-07 | beispiel_abrechnung_von_zeitschulden.md |
|
||||
| lb-end-30 | Beispiel: Freiwillige Abfertigung – „Viertel- und Zwölftelregelung" | Mäder | 2026-07 | beispiel_freiwillige_abfertigung_viertel_und_zwolf.md |
|
||||
| lb-end-31 | Beispiel: Freiwillige Abfertigung/Voll-Übertritt mit Übertragungsbetrag | Mäder | 2026-07 | beispiel_freiwillige_abfertigungvoll_ubertritt_mit.md |
|
||||
| lb-end-32 | Beispiel - Vergütung von Gleitzeitguthaben bei Beendigung des Arbeitsverhältnisses | Posch | 2026-07 | beispiel_vergutung_von_gleitzeitguthaben_bei_beend.md |
|
||||
| lb-end-33 | Checkliste - Kündigungsentschädigung | Haider | 2025-06 | checkliste_kundigungsentschadigung.md |
|
||||
| lb-end-34 | Muster: Vergleichsformulierungen | Haider | 2025-06 | muster_vergleichsformulierungen.md |
|
||||
| lb-end-35 | Muster: Vordienstzeitenbestätigung vom Vor-Arbeitgeber | Mäder | 2026-07 | muster_vordienstzeitenbestatigung_vom_vor_arbeitge.md |
|
||||
|
||||
## Entgelt: Anspruch & Abrechnung (`topic: entgelt`) — 11 Einträge · Stand 2026-06 bis 2026-08
|
||||
|
||||
@@ -330,7 +378,7 @@ Generiert am 2026-09-11 · 601 Einträge · 69 Cluster. Quellen: Lexis Briefings
|
||||
| lb-efz-01 | Entgeltfortzahlung an Feiertagen - Arbeitsrecht | Winkler/Radauer | 2026-07 | entgeltfortzahlung_an_feiertagen_arbeitsrecht.md |
|
||||
| lb-efz-02 | Entgeltfortzahlung an Feiertagen - Lohnabgaben | Posch | 2026-07 | entgeltfortzahlung_an_feiertagen_lohnabgaben.md |
|
||||
|
||||
## Grenzüberschreitender Einsatz & Entsendung (`topic: entsendung`) — 8 Einträge · Stand 2026-07 bis 2026-08
|
||||
## Grenzüberschreitender Einsatz & Entsendung (`topic: entsendung`) — 11 Einträge · Stand 2026-07 bis 2026-08
|
||||
|
||||
| ID | Titel | Autor | Stand | Datei |
|
||||
|---|---|---|---|---|
|
||||
@@ -342,6 +390,9 @@ Generiert am 2026-09-11 · 601 Einträge · 69 Cluster. Quellen: Lexis Briefings
|
||||
| lb-grz-06 | Entsendung - begünstigte Auslandstätigkeit | Sabara | 2026-08 | entsendung_begunstigte_auslandstatigkeit.md |
|
||||
| lb-grz-07 | Entsendung - Besteuerungsregelungen | Sabara/David | 2026-08 | entsendung_besteuerungsregelungen.md |
|
||||
| lb-grz-08 | Standortverlegung | Reissner | 2026-07 | standortverlegung.md |
|
||||
| lb-grz-09 | Übersicht: Doppelbesteuerungsabkommen | Sabara | 2026-08 | ubersicht_doppelbesteuerungsabkommen.md |
|
||||
| lb-grz-10 | Übersicht: Eckpunkte Entsendevereinbarung | Sabara | 2026-08 | ubersicht_eckpunkte_entsendevereinbarung.md |
|
||||
| lb-grz-11 | Übersicht Sozialversicherungsabkommen | Sabara | 2026-08 | ubersicht_sozialversicherungsabkommen.md |
|
||||
|
||||
## Papamonat & Familienzeitbonus (`topic: familienzeit`) — 2 Einträge · Stand 2026-07 bis 2026-07
|
||||
|
||||
@@ -779,7 +830,7 @@ Generiert am 2026-09-11 · 601 Einträge · 69 Cluster. Quellen: Lexis Briefings
|
||||
| lb-sch-07 | Schwangerschaft - Meldepflichten Arbeitnehmerin und Arbeitgeber | Sabara | 2026-07 | schwangerschaft_meldepflichten_arbeitnehmerin_und.md |
|
||||
| lb-sch-08 | Schwangerschaft - Probezeit, Befristung | Sabara | 2026-07 | schwangerschaft_probezeit_befristung.md |
|
||||
|
||||
## Schwerarbeit (`topic: schwerarbeit`) — 5 Einträge · Stand 2026-07 bis 2026-07
|
||||
## Schwerarbeit (`topic: schwerarbeit`) — 6 Einträge · Stand 2026-07 bis 2026-07
|
||||
|
||||
| ID | Titel | Autor | Stand | Datei |
|
||||
|---|---|---|---|---|
|
||||
@@ -788,8 +839,9 @@ Generiert am 2026-09-11 · 601 Einträge · 69 Cluster. Quellen: Lexis Briefings
|
||||
| lb-swa-03 | Schwerarbeitspensionen | Schreiber/Marek | 2026-07 | schwerarbeitspensionen.md |
|
||||
| lb-swa-04 | Schwerarbeitstatbestände | Schreiber/Marek | 2026-07 | schwerarbeitstatbestande.md |
|
||||
| lb-swa-05 | Schwerarbeit - Meldepflicht des Arbeitgebers | Schreiber/Marek | 2026-07 | schwerarbeit_meldepflicht_des_arbeitgebers.md |
|
||||
| lb-swa-06 | Checkliste - Vorliegen von Schwerarbeit | Schreiber | 2026-07 | checkliste_vorliegen_von_schwerarbeit.md |
|
||||
|
||||
## Sonderzahlungen (`topic: sonderzahlungen`) — 5 Einträge · Stand 2025-06 bis 2026-08
|
||||
## Sonderzahlungen (`topic: sonderzahlungen`) — 6 Einträge · Stand 2025-06 bis 2026-08
|
||||
|
||||
| ID | Titel | Autor | Stand | Datei |
|
||||
|---|---|---|---|---|
|
||||
@@ -798,6 +850,7 @@ Generiert am 2026-09-11 · 601 Einträge · 69 Cluster. Quellen: Lexis Briefings
|
||||
| lb-son-03 | Sonderzahlungen - Sozialversicherung | Haider | 2025-06 | sonderzahlungen_sozialversicherung.md |
|
||||
| lb-son-04 | Sonderzahlungen - Steuer | Gruber/Haas | 2026-08 | sonderzahlungen_steuer.md |
|
||||
| lb-son-05 | Sonderzahlungen bei Beendigung | Posch/Haas | 2026-07 | sonderzahlungen_bei_beendigung.md |
|
||||
| lb-son-06 | Sonderzahlungen - Beispiel | Posch | 2026-07 | sonderzahlungen_beispiel.md |
|
||||
|
||||
## Teilzeit & Bildungsteilzeit (`topic: teilzeit`) — 6 Einträge · Stand 2026-06 bis 2026-07
|
||||
|
||||
@@ -810,7 +863,7 @@ Generiert am 2026-09-11 · 601 Einträge · 69 Cluster. Quellen: Lexis Briefings
|
||||
| lb-tzb-05 | Teilzeitbeschäftigung - Sonderfälle | Thöny-Maier | 2026-07 | teilzeitbeschaftigung_sonderfalle.md |
|
||||
| lb-tzb-06 | Teilzeitbeschäftigung - Wechsel Vollzeit/Teilzeit | Thöny-Maier | 2026-07 | teilzeitbeschaftigung_wechsel_vollzeitteilzeit.md |
|
||||
|
||||
## Teleworking & Heimarbeit (`topic: telearbeit`) — 6 Einträge · Stand 2025-01 bis 2026-08
|
||||
## Teleworking & Heimarbeit (`topic: telearbeit`) — 11 Einträge · Stand 2020-12 bis 2026-08
|
||||
|
||||
| ID | Titel | Autor | Stand | Datei |
|
||||
|---|---|---|---|---|
|
||||
@@ -820,8 +873,13 @@ Generiert am 2026-09-11 · 601 Einträge · 69 Cluster. Quellen: Lexis Briefings
|
||||
| lb-tel-04 | Telearbeit (Homeoffice) - sozialversicherungsrechtliche Aspekte | Sabara | 2026-08 | telearbeit_homeoffice_sozialversicherungsrechtlich.md |
|
||||
| lb-tel-05 | Telearbeit (Homeoffice) - Überblick | Sabara | 2026-08 | telearbeit_homeoffice_uberblick.md |
|
||||
| lb-tel-06 | Telearbeit - steuerrechtliche Aspekte | Sabara | 2025-01 | telearbeit_steuerrechtliche_aspekte.md |
|
||||
| lb-tel-07 | Beispiel - Telearbeit Differenzwerbungskosten | Sabara | 2025-01 | beispiel_telearbeit_differenzwerbungskosten.md |
|
||||
| lb-tel-08 | Beispiel - Telearbeit Werbungskosten | Sabara | 2025-01 | beispiel_telearbeit_werbungskosten.md |
|
||||
| lb-tel-09 | Beispiel - Werbungskosten Arbeitszimmer und digitale Arbeitsmittel | Sabara | 2024-01 | beispiel_werbungskosten_arbeitszimmer_und_digitale.md |
|
||||
| lb-tel-10 | Muster: Vereinbarung Teleworking | Thöny-Maier | 2020-12 | muster_vereinbarung_teleworking.md |
|
||||
| lb-tel-11 | Übersicht Unterschiede Homeoffice und Telearbeit | Thöny-Maier | 2026-07 | ubersicht_unterschiede_homeoffice_und_telearbeit.md |
|
||||
|
||||
## Überstunden (`topic: uberstunden`) — 4 Einträge · Stand 2025-12 bis 2026-07
|
||||
## Überstunden (`topic: uberstunden`) — 9 Einträge · Stand 2025-12 bis 2026-07
|
||||
|
||||
| ID | Titel | Autor | Stand | Datei |
|
||||
|---|---|---|---|---|
|
||||
@@ -829,8 +887,13 @@ Generiert am 2026-09-11 · 601 Einträge · 69 Cluster. Quellen: Lexis Briefings
|
||||
| lb-ues-02 | Überstundenpauschale und All-in | Thöny-Maier | 2025-12 | uberstundenpauschale_und_all_in.md |
|
||||
| lb-ues-03 | Überstundenvergütung | Thöny-Maier | 2026-07 | uberstundenvergutung.md |
|
||||
| lb-ues-04 | Verpflichtung zur Überstundenarbeit | Thöny-Maier | 2026-07 | verpflichtung_zur_uberstundenarbeit.md |
|
||||
| lb-ues-05 | Muster - All-in-Teilzeitvereinbarungen | Schrank | 2025-12 | muster_all_in_teilzeitvereinbarungen.md |
|
||||
| lb-ues-06 | Muster - All-inclusive-Vereinbarung | Sabara | 2025-12 | muster_all_inclusive_vereinbarung.md |
|
||||
| lb-ues-07 | Muster - Überstunden - Allgemeine Vorsorgen | Lexis Redaktion | 2026-07 | muster_uberstunden_allgemeine_vorsorgen.md |
|
||||
| lb-ues-08 | Muster - Überstundepauschalvereinbarung | Sabara | 2025-12 | muster_uberstundepauschalvereinbarung.md |
|
||||
| lb-ues-09 | Muster - Zeitausgleichsvereinbarung | Thöny-Maier | 2026-07 | muster_zeitausgleichsvereinbarung.md |
|
||||
|
||||
## Urlaub (Anspruch, Entgelt, Verbrauch) (`topic: urlaub`) — 16 Einträge · Stand 2026-06 bis 2026-07
|
||||
## Urlaub (Anspruch, Entgelt, Verbrauch) (`topic: urlaub`) — 17 Einträge · Stand 2026-06 bis 2026-07
|
||||
|
||||
| ID | Titel | Autor | Stand | Datei |
|
||||
|---|---|---|---|---|
|
||||
@@ -850,6 +913,7 @@ Generiert am 2026-09-11 · 601 Einträge · 69 Cluster. Quellen: Lexis Briefings
|
||||
| lb-url-14 | Urlaubsentgelt | Niederfriniger/Krabath | 2026-07 | urlaubsentgelt.md |
|
||||
| lb-url-15 | Urlaubsersatzleistung - Abgaben | Sicher/Krabath | 2026-06 | urlaubsersatzleistung_abgaben.md |
|
||||
| lb-url-16 | Urlaubsersatzleistung - Arbeitsrecht | Niederfriniger/Radauer | 2026-07 | urlaubsersatzleistung_arbeitsrecht.md |
|
||||
| lb-url-17 | Beispiele: Berechnung der Urlaubsersatzleistung | Niederfriniger | 2026-07 | beispiele_berechnung_der_urlaubsersatzleistung.md |
|
||||
|
||||
## Vorsorgeleistungen (BMSVG, Betriebspension, Beteiligung) (`topic: vorsorgeleistungen`) — 11 Einträge · Stand 2026-08 bis 2026-08
|
||||
|
||||
|
||||
+113
@@ -0,0 +1,113 @@
|
||||
---
|
||||
id: lb-bnd-45
|
||||
batch: 10
|
||||
title: "Anspruchsübersicht - Tod des Arbeitnehmers"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Beendigungsarten"
|
||||
topic: beendigungsarten
|
||||
author: "Thöny-Maier"
|
||||
stand: 2026-06
|
||||
source:
|
||||
pdf: ".lexis360/uebersichten_checklisten/Lexis360_anspruchsubersicht_tod_des_arbeitnehmers.pdf"
|
||||
text: ".lexis360/md/anspruchsubersicht_tod_des_arbeitnehmers.md"
|
||||
legal_bases: ["§ 67 Abs 1 und 2 EStG", "§ 67 Abs 3 EStG", "§ 67 Abs 6 EStG"]
|
||||
tags: [tod-des-arbeitnehmers, abfertigung-alt, abfertigung-neu, urlaubsersatzleistung, sterbebezuege, verlassenschaft]
|
||||
cross_refs: ["lb-bnd-35", "lb-end-01", "lb-end-03", "lb-url-09", "lb-url-15"]
|
||||
---
|
||||
|
||||
# Anspruchsübersicht: Tod des Arbeitnehmers
|
||||
|
||||
*Lexis Briefings Personalrecht, Thöny-Maier, Stand Juni 2026 (lb-bnd-45).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
- **Übersichtstabelle** der Ansprüche bei Tod des Arbeitnehmers mit
|
||||
Spalten Anspruch / Höhe / Bezugsberechtigter / Lohnsteuer /
|
||||
Sozialversicherung / DB, DZ, KommSt:
|
||||
- **Laufende Bezüge bis zum Sterbetag:** Anspruch des AN;
|
||||
Bezugsberechtigter **Verlassenschaft**; LSt **nach Tarif**; SV ja;
|
||||
DB/DZ/KommSt ja.
|
||||
- **Sonderzahlungen bis zum Sterbetag:** Anspruch des AN;
|
||||
Verlassenschaft; LSt **§ 67 Abs 1 und 2 EStG**; SV ja;
|
||||
DB/DZ/KommSt ja.
|
||||
- **Mehrleistungen:** Anspruch des AN; Verlassenschaft; LSt
|
||||
**wie im aufrechten DV**; SV ja; DB/DZ/KommSt wie im
|
||||
aufrechten DV.
|
||||
- **Reisekosten:** Anspruch des AN; Verlassenschaft; LSt wie im
|
||||
aufrechten DV; SV wie im aufrechten DV; DB/DZ/KommSt wie im
|
||||
aufrechten DV.
|
||||
- **Abfertigung Alt:** **halber gesetzlicher
|
||||
Abfertigungsanspruch**; **gesetzliche Erben mit
|
||||
Unterhaltsanspruch**, bei deren Fehlen **verfällt der
|
||||
Anspruch**; LSt **6 %**; SV nein; DB/DZ/KommSt nein.
|
||||
- **Abfertigung Neu (BV-Kasse):** an **Ehegatte und Kinder, für die
|
||||
Familienbeihilfe bezogen wird**, bei deren Fehlen an die
|
||||
**Verlassenschaft**; LSt **6 %**; SV nein; DB/DZ/KommSt nein.
|
||||
- **Urlaubsersatzleistung:** Anspruch auf **offenen
|
||||
Urlaubsanspruch**; **Erben (auch testamentarisch eingesetzte
|
||||
Erben)**; LSt **entsprechend der letzten
|
||||
Bemessungsgrundlage**; SV nein; DB/DZ/KommSt ja.
|
||||
- **Sterbebezüge (restlicher und darauffolgender Monat):**
|
||||
**gemäß KV**; je nach KV; LSt nach Tarif; SV nein;
|
||||
DB/DZ/KommSt ja.
|
||||
- **Sterbequartal (abhängig von der Dauer des
|
||||
Arbeitsverhältnisses):** je nach KV; LSt **begünstigt nach
|
||||
§ 67 Abs 3 EStG** (beim Verstorbenen); SV nein; DB/DZ nein.
|
||||
- **Sterbequartal bei Abfertigung Alt (unabhängig von der
|
||||
Dauer des Arbeitsverhältnisses):** je nach KV; LSt **begünstigt
|
||||
nach § 67 Abs 6 EStG** (beim Verstorbenen); SV nein; DB/DZ nein.
|
||||
- **Begräbniskosten:** **ohne Rechtsanspruch**, freiwillig durch
|
||||
den AG; an **Ehegatte, eingetragenen Partner oder Kinder**; LSt
|
||||
**frei**; SV nein; DB/DZ nein.
|
||||
- ⚠ Die KommSt-/SV-Zeilen der Tabelle sind im Export teils
|
||||
umgebrochen; die Zuordnung oben folgt der Tabellenzeile.
|
||||
|
||||
## Kernwerte & Fristen (Stand 2026-06)
|
||||
|
||||
| Anspruch | Höhe | Bezugsberechtigter | LSt | SV |
|
||||
|---|---|---|---|---|
|
||||
| Laufende Bezüge bis Sterbetag | Anspruch des AN | Verlassenschaft | nach Tarif | ja |
|
||||
| Sonderzahlungen bis Sterbetag | Anspruch des AN | Verlassenschaft | **§ 67 Abs 1/2 EStG** | ja |
|
||||
| Mehrleistungen | Anspruch des AN | Verlassenschaft | wie aufrechtes DV | ja |
|
||||
| Reisekosten | Anspruch des AN | Verlassenschaft | wie aufrechtes DV | wie DV |
|
||||
| **Abfertigung Alt** | **halber gesetzlicher Anspruch** | **gesetzliche Erben mit Unterhaltsanspruch** (sonst Verfall) | **6 %** | nein |
|
||||
| **Abfertigung Neu (BV)** | — | **Ehegatte + Kinder mit Familienbeihilfe**, sonst Verlassenschaft | **6 %** | nein |
|
||||
| **Urlaubsersatzleistung** | **offener Urlaubsanspruch** | **Erben (auch testamentarisch eingesetzt)** | **entspr. letzter Bemessungsgrundlage** | nein |
|
||||
| **Sterbebezüge** (restl. Monat + Folge) | **gemäß KV** | je nach KV | nach Tarif | nein |
|
||||
| **Sterbequartal** (DV-Dauer-abhängig) | je nach KV | je nach KV | **begünstigt § 67 Abs 3 EStG** (beim Verstorbenen) | nein |
|
||||
| **Sterbequartal (Abf. Alt)** (DV-Dauer-unabhängig) | je nach KV | je nach KV | **begünstigt § 67 Abs 6 EStG** (beim Verstorbenen) | nein |
|
||||
| **Begräbniskosten** | **ohne Rechtsanspruch**, freiwillig AG | Ehegatte, eingetragener Partner, Kinder | **frei** | nein |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- **§ 67 Abs 1 und 2 EStG** (Sonderzahlungen bei Tod) — in der
|
||||
Tabelle zitiert.
|
||||
- **§ 67 Abs 3 EStG** (Sterbequartal, DV-Dauer-abhängig) und
|
||||
**§ 67 Abs 6 EStG** (Sterbequartal bei Abfertigung Alt) — in der
|
||||
Tabelle zitiert.
|
||||
- **Familienbeihilfe** (Bezugsberechtigung Abfertigung Neu) — als
|
||||
Begriff genannt, ohne §-Zitat ⚠.
|
||||
- KV-Bezug (Sterbebezüge, Sonderzahlungen) ohne §-Zitate.
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- **Abfertigung Alt: halber Anspruch** und **Erben mit
|
||||
Unterhaltsanspruch** (sonst Verfall) = Sonderfall in der
|
||||
Endabrechnung (→ lb-end-01/02); **Abfertigung Neu: 6 %-Tarif** an
|
||||
BV-Kasse (→ lb-end-03).
|
||||
- **Urlaubsersatzleistung an Erben** (offener Anspruch, auch
|
||||
testamentarische Erben) = Abrechnungsfall in der
|
||||
Endabrechnung (→ lb-url-09/15/16).
|
||||
- **Sterbebezüge nach KV** = KV-Parameter (Monat(s)bezug über den
|
||||
Sterbemonat hinaus).
|
||||
- **Bezugsberechtigten-Logik** (Verlassenschaft/Erben/BV-Kasse) ist
|
||||
eine Auszahlungs-/Meldedatenfrage (Lohnzettel, eSV), kein
|
||||
Entgeltwert.
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-bnd-35 (Tod des Arbeitnehmers) · lb-end-01
|
||||
(Abfertigung Alt – Abgabenrecht) · lb-end-03
|
||||
(Abfertigung Neu – Verfügungen) · lb-url-09
|
||||
(Urlaubsersatzleistung) · lb-url-15 (Urlaubsersatzleistung –
|
||||
Abgaben)
|
||||
@@ -0,0 +1,88 @@
|
||||
---
|
||||
id: lb-end-27
|
||||
batch: 10
|
||||
title: "Ausbildungskostenrückersatz - Checkliste"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Beendigungsansprüche & Endabrechnung"
|
||||
topic: endabrechnung
|
||||
author: "Haider"
|
||||
stand: 2025-06
|
||||
source:
|
||||
pdf: ".lexis360/uebersichten_checklisten/Lexis360_ausbildungskostenruckersatz_checkliste.pdf"
|
||||
text: ".lexis360/md/ausbildungskostenruckersatz_checkliste.md"
|
||||
legal_bases: ["§ 19 Abs 2 AngG", "§ 27 Z 2 AngG", "§ 82 lit b GewO 1859"]
|
||||
tags: [ausbildungskosten, rueckerstattung, bindungsdauer, aliquote, minderjaehrige]
|
||||
cross_refs: ["lb-end-26", "lb-end-28"]
|
||||
---
|
||||
|
||||
# Checkliste: Ausbildungskostenrückersatz
|
||||
|
||||
*Lexis Briefings Personalrecht, Haider, Stand Juni 2025 ⚠ Alter Stand (lb-end-27).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
Voraussetzungen für die Rückforderung von Ausbildungskosten:
|
||||
|
||||
- **Überbetriebliche Verwertbarkeit** der Bildungsmaßnahme
|
||||
(keine Einschulung).
|
||||
- **Schriftliche Vereinbarung.**
|
||||
- **Rückzahlungspflicht für die gesamten Aufwendungen** des
|
||||
Arbeitgebers vereinbart:
|
||||
- Kosten der Ausbildung **ohne USt** und unter Einrechnung von
|
||||
Förderungen etc.;
|
||||
- **Entgelt** (extra Erwähnung erforderlich!);
|
||||
- **Rahmenkosten** (Hotel, Anreise) — nur sofern notwendig und
|
||||
erforderlich.
|
||||
- **Aliquotierungsregelung** (zwingend: **monatliche** Reduktion der
|
||||
Rückzahlungsverpflichtung).
|
||||
- **Bindungsdauer** maximal **4** (in Ausnahmefällen **8**) **Jahre**
|
||||
nach Ende der Ausbildung.
|
||||
- Bei **Minderjährigen**: Zustimmung des Erziehungsberechtigten.
|
||||
- Kein Rückersatz, wenn das Arbeitsverhältnis endet
|
||||
- während der **Probezeit** iSd **§ 19 Abs 2 AngG** (oder
|
||||
gleichlautender gesetzlicher Bestimmungen),
|
||||
- durch **unbegründete Entlassung**,
|
||||
- durch **begründeten vorzeitigen Austritt**,
|
||||
- durch Entlassung wegen **dauernder Arbeitsunfähigkeit** nach
|
||||
**§ 27 Z 2 AngG** oder **§ 82 lit b GewO 1859**,
|
||||
- durch **Kündigung durch den Arbeitgeber** — es sei denn, der
|
||||
Arbeitnehmer hat durch schuldhaftes Verhalten dazu begründeten
|
||||
Anlass gegeben.
|
||||
|
||||
## Kernwerte & Fristen (Stand 2025-06, ⚠ Alter Stand)
|
||||
|
||||
| Kriterium | Regel |
|
||||
|---|---|
|
||||
| Verwertbarkeit | überbetrieblich (keine Einschulung) |
|
||||
| Form | schriftliche Vereinbarung |
|
||||
| Kostenbasis | Ausbildungskosten o. USt (Förderungen abgezogen) + Entgelt (extra!) + notwendige Rahmenkosten |
|
||||
| Aliquotierung | zwingend monatlich |
|
||||
| Bindungsdauer | max. **4 Jahre** (Ausnahme: 8) |
|
||||
| Minderjährige | Elterngenehmigung |
|
||||
| Beendigungsschutz | Probezeit / unbegründete Entlassung / begründeter Austritt / dauernde AU (§ 27 Z 2 AngG, § 82 lit b GewO) / AG-Kündigung ohne AN-Verschulden |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- **§ 19 Abs 2 AngG** (Probemonat, Angestellte) — zitiert.
|
||||
- **§ 27 Z 2 AngG** (Entlassung bei dauernder Arbeitsunfähigkeit) —
|
||||
zitiert.
|
||||
- **§ 82 lit b GewO 1859** (Arbeiter, dauernde Arbeitsunfähigkeit) —
|
||||
zitiert.
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- **Rückforderung von Ausbildungskosten** ist ein eigener
|
||||
Forderungsanspruch des Arbeitgebers → im End-of-employment-Modell als
|
||||
abgrenzbare Forderung abbilden (separat von Vorschüssen → lb-end-06,
|
||||
Darlehen → lb-end-25).
|
||||
- **Monatliche Aliquotierung** ist die zentrale Bemessungslogik
|
||||
(Rückstandsbetrag = Gesamtkosten × verbleibende Monate / Bindungsdauer).
|
||||
- **Beendigungsart-Abgrenzung**: die Checkliste listet Beendigungsarten,
|
||||
bei denen der Rückersatzanspruch entfällt — diese Abgrenzung muss in
|
||||
der Abrechnungslogik als Beendigungsart-Prüfung implementiert sein.
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-end-26 (Ausbildungskostenrückersatz — Rahmen) ·
|
||||
lb-end-28 (Muster) · lb-end-06 (Aufrechnung mit offenen Vorschüssen) ·
|
||||
lb-end-25 (Rückzahlung von Darlehen)
|
||||
@@ -0,0 +1,91 @@
|
||||
---
|
||||
id: lb-end-28
|
||||
batch: 10
|
||||
title: "Ausbildungskostenrückersatz - Muster"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Beendigungsansprüche & Endabrechnung"
|
||||
topic: endabrechnung
|
||||
author: "Haider"
|
||||
stand: 2025-06
|
||||
source:
|
||||
pdf: ".lexis360/uebersichten_checklisten/Lexis360_ausbildungskostenruckersatz_muster.pdf"
|
||||
text: ".lexis360/md/ausbildungskostenruckersatz_muster.md"
|
||||
legal_bases: ["§ 27 Z 2 AngG", "§ 82 lit b GewO 1859"]
|
||||
tags: [ausbildungskosten, rueckerstattung, bindungsdauer, aliquote, abbruch, muster]
|
||||
cross_refs: ["lb-end-26", "lb-end-27"]
|
||||
---
|
||||
|
||||
# Muster: Ausbildungskostenrückersatz
|
||||
|
||||
*Lexis Briefings Personalrecht, Haider, Stand Juni 2025 ⚠ Alter Stand (lb-end-28).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
- **Gegenstand:** Verpflichtung zur **Rückerstattung von
|
||||
Ausbildungskosten** — Lehrgang/Kurs/Seminar [Bezeichnung] in der Zeit
|
||||
von [ ] bis [ ].
|
||||
- **Verwertbarkeits-Klausel:** Die Maßnahme vermittelt
|
||||
„Spezialkenntnisse theoretischer und praktischer Art, die dieser auch
|
||||
**überbetrieblich** bei anderen Arbeitgebern verwerten kann. Die
|
||||
Aus- und Weiterbildungsmaßnahme **stellt keine Einschulung dar**."
|
||||
- **Dienstfreistellung + Entgelt:** Der Arbeitgeber stellt den
|
||||
Arbeitnehmer „unter **Fortzahlung des Entgelts** vom Dienst frei,
|
||||
soweit dies aufgrund der Kurszeiten erforderlich ist (maximal im
|
||||
Ausmaß von [X] Arbeitstagen)" — das fortbezahlte Entgelt wird in die
|
||||
Rückersatzverpflichtung einbezogen.
|
||||
- **Kostenbasis:** Kurskosten **zzgl USt** (bzw. „ohne USt" je nach
|
||||
Vereinbarung) + fortbezahltes Entgelt (inkl. allfälliger Sonder
|
||||
zahlungen) + Reisekosten (Zugfahrten + **Mittelklassehotel**).
|
||||
- **Bindungsdauer:** Beispiel: **drei Jahre** ab erfolgreichem
|
||||
Abschluss; **Verringerung um 1/36** nach jedem vollendeten Monat der
|
||||
Dienstzugehörigkeit ab Kursabschluss.
|
||||
- **Beendigungsschutz (wie Checkliste):** entfällt bei Ende während
|
||||
Probezeit, unbegründeter Entlassung, begründetem vorzeitigem Austritt,
|
||||
Entlassung wegen dauernder Arbeitsunfähigkeit (§ 27 Z 2 AngG /
|
||||
§ 82 lit b GewO 1859) oder AG-Kündigung ohne AN-Schuld.
|
||||
- **Abbruch:** „Wird die Ausbildung aus **Verschulden des
|
||||
Arbeitnehmers** vor Abschluss abgebrochen bzw deren erfolgreiche
|
||||
Absolvierung vereitelt, so verpflichtet sich der Arbeitnehmer zum
|
||||
**Rückersatz sämtlicher** dem Arbeitgeber dadurch entstehender
|
||||
Nachteile."
|
||||
- **Aliquotierung (Fußnote):** „Es ist **zwingend** eine monatliche
|
||||
Aliquotierung vorzunehmen, wobei die Rückforderungsfrist im
|
||||
Regelfall maximal **4 Jahre** betragen kann (also Verringerung um
|
||||
maximal **1/48**)."
|
||||
|
||||
## Kernwerte & Fristen (Stand 2025-06, ⚠ Alter Stand)
|
||||
|
||||
| Kriterium | Regel im Muster |
|
||||
|---|---|
|
||||
| Bindungsdauer | Beispiel: 3 Jahre (max. 4 Jahre, Ausnahme: 8) |
|
||||
| Aliquotierung | **zwingend monatlich**; max. 1/48 (4 Jahre) |
|
||||
| Kostenbasis | Kurskosten (+ USt) + Entgelt (inkl. SZ) + Reise (Zug + Mittelklassehotel) |
|
||||
| Dienstfreistellung | Fortzahlung während Kurszeit (max. X Arbeitstage) |
|
||||
| Abbruch (AN-Schuld) | Rückersatz sämtlicher Nachteile |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- **§ 27 Z 2 AngG** (dauernde Arbeitsunfähigkeit) — zitiert
|
||||
(Beendigungsschutz).
|
||||
- **§ 82 lit b GewO 1859** (Arbeiter, dauernde Arbeitsunfähigkeit) —
|
||||
zitiert (Beendigungsschutz).
|
||||
- Übrige Klauseln ohne §-Zitate (Vertragsmechanik).
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- **Fristen-Logik** (Bindungsdauer, monatliche Aliquotierung,
|
||||
Beendigungsart-Abgrenzung) ist ein eigenes Berechnungsmodul in der
|
||||
Endabrechnung — die Kostenbasis und die Beendigungsart-Prüfung sind
|
||||
die zwei zentralen Parameter.
|
||||
- **Entgeltfortzahlung während Dienstfreistellung** ist ein eigener
|
||||
Work-Entry-Typ (kein Urlaub) — in der Abrechnung als
|
||||
Fortzahlungsereignis kennzeichnen.
|
||||
- **Abbruch-Klausel** (AN-Schuld → volles Rückersatz) ist eine
|
||||
alternative Forderungsbemessung (kein Aliquot) — als separater
|
||||
Berechnungspfad implementieren.
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-end-26 (Ausbildungskostenrückersatz — Rahmen) ·
|
||||
lb-end-27 (Checkliste) · lb-end-06 (Aufrechnung mit offenen
|
||||
Vorschüssen) · lb-end-25 (Rückzahlung von Darlehen)
|
||||
@@ -0,0 +1,104 @@
|
||||
---
|
||||
id: lb-end-29
|
||||
batch: 10
|
||||
title: "Beispiel ‒ Abrechnung von Zeitschulden"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Beendigungsansprüche & Endabrechnung"
|
||||
topic: endabrechnung
|
||||
author: "Posch"
|
||||
stand: 2026-07
|
||||
source:
|
||||
pdf: ".lexis360/beispiele/Lexis360_beispiel_abrechnung_von_zeitschulden.pdf"
|
||||
text: ".lexis360/md/beispiel_abrechnung_von_zeitschulden.md"
|
||||
legal_bases: []
|
||||
tags: [zeitschulden, minusstunden, rollung, mbgm, bgn-storno, aufrollung]
|
||||
cross_refs: ["lb-end-08", "lb-end-09", "lb-end-10"]
|
||||
---
|
||||
|
||||
# Beispiel: Abrechnung von Zeitschulden
|
||||
|
||||
*Lexis Briefings Personalrecht, Posch, Stand Juli 2026 (lb-end-29).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
> **Hinweis der Quelle:** Das Beispiel zeigt die Rückverrechnung von
|
||||
> Zeitschulden, die in Beitragszeiträumen **bis 31. 12. 2018**
|
||||
> entstanden sind. Die Art der Berechnung gilt auch für Beitragszeiträume
|
||||
> **nach** dem 31. 12. 2018, allerdings sind **abweichende Meldungen
|
||||
> zur Sozialversicherung** zu beachten: Anstatt der berichtigten
|
||||
> Beitrags(grundlagen)nachweise ist die **mBGM durch Storno und
|
||||
> Neumeldung** zu korrigieren.
|
||||
|
||||
**Sachverhalt (Auszug; Beispiel entnommen aus PVP 2017/68):**
|
||||
Angestellte, 40 h/Woche, 12/2016 20 Minusstunden (Zeitschuld) — im
|
||||
1. Q 2017 einzuarbeiten, sonst Lohnabzug. 1/2017 2 Überstunden mit 50 %
|
||||
Zuschlag = 3 h Gegenrechnung → Rest **17 Minusstunden**. DV-Ende
|
||||
20. 3. 2017 durch **unberechtigten vorzeitigen Austritt** (DN-Kündigung
|
||||
ohne Frist; korrektes Ende wäre 30. 4. 2017). Gehalt 2016 € 2.340,– /
|
||||
2017 € 2.400,–; UZ + WR je 390,00 (12/2016).
|
||||
|
||||
**Berechnungsschritte:**
|
||||
1. **Bruttobetrag der Zeitschuld:** € 2.400,– (Gehalt 2017) : 4,33 :
|
||||
40 Wochenstunden × 17 Minusstunden = **€ 235,57**.
|
||||
2. **„Aufrollung" Dezember 2016 (Gutschrift der SV-Beiträge):**
|
||||
€ 235,57 × 18,12 % = **€ 42,69** (im Austrittsmonat
|
||||
SV-gutschriftlich).
|
||||
3. **Abrechnung März 2017 (Auszug):**
|
||||
- Bruttogehalt 20/30 Tage: € 1.600,–; UZ + WR aliquot:
|
||||
(€ 2.400,– : 365 × 79 KT) × 2 = € 1.038,90.
|
||||
- SV-Beiträge: Gehalt € 1.600,– × **17,12 %** = – € 273,92;
|
||||
Gutschrift Aufrollung + € 42,69; SZ € 1.038,90 × **14,12 %** =
|
||||
– € 146,69 (beides inkl. **AlV-Reduzierung wegen
|
||||
Niedrigverdienst**: laufend – 1 %, SZ – 3 %).
|
||||
- Lohnsteuer laufend: Bemessungsgrundlage € 1.133,20 (nach
|
||||
SV-Abzug, SV-Gutschrift und Abzug der Minusstunden-Brutto);
|
||||
35 % – € 13,94/tage → – € 117,89.
|
||||
- Lohnsteuer SZ: Bemessungsgrundlage € 272,21 (nach Abzug des
|
||||
SV-Beitrags und des **Freibetrags € 620,–**) × **6 %** →
|
||||
– € 16,33.
|
||||
- **Rückverrechnung Minusstunden – € 235,57** (vom
|
||||
Auszahlungsbetrag; Bemessungsgrundlagen für **KommSt (3 %),
|
||||
DB (4,1 %), DZ (Wien/NÖ 0,40 %)** bleiben unberührt).
|
||||
4. **SV-Meldungen 2016 (Rollung Minusstunden):** D1 – € 88,93,
|
||||
KU – € 1,18, WF – € 2,36, IESG – € 0,82 (Gesamt – € 93,29);
|
||||
**BGN 2016: Storno „alter" BGN** (laufende Bezüge € 4.680,– →
|
||||
€ 4.444,43; BV-Beitragsgrundlage 12/12 € 3.120,– → € 2.884,43),
|
||||
**neuer BGN** gemeldet.
|
||||
|
||||
## Kernwerte & Fristen (Stand 2026-07)
|
||||
|
||||
| Wert | Detail |
|
||||
|---|---|
|
||||
| Brutto-Zeitschuld | Gehalt : 4,33 : Wochenstunden × Minusstunden (hier € 235,57) |
|
||||
| SV-Gutschrift (Aufrollung) | Brutto-Zeitschuld × **18,12 %** (hier € 42,69) |
|
||||
| SV-Sätze 3/2017 | laufend **17,12 %**, SZ **14,12 %** (jeweils inkl. AlV-Niedrigverdienst-Reduktion: – 1 % / – 3 %) |
|
||||
| LSt SZ | **6 %** nach Freibetrag **€ 620,–** |
|
||||
| SV-Korridore 2016 | D1 37,75 %, KU 0,5 %, WF 1 %, IESG 0,35 % |
|
||||
| Abgaben-Bemessung | KommSt **3 %**, DB **4,1 %**, DZ **0,4 %** (Wien/NÖ) — durch Minusstunden nicht gekürzt |
|
||||
| SV-Meldung | bis 12/2018: berichtigter BGN (Storno/Neu); **ab 1/2019: mBGM-Storno + Neumeldung** |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- Keine §-Zitate im Beispiel (Berechnungs-/Meldepraxis). Quelle des
|
||||
Beispiels: **PVP 2017/68** (Pensionsversicherungsanstalt).
|
||||
- Rahmen der Endabrechnung: → lb-end-08 (Zeitschulden,
|
||||
Gehaltserhöhungen), lb-end-09/10 (Mehr-/Überstunden, Zeitguthaben).
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- **Zeitschulden-Rückverrechnung** = eigener Abrechnungspfad in der
|
||||
Endabrechnung: Brutto-Zeitschuld (Stundensatz aus Monatsgehalt,
|
||||
4,33-Tagester, Wochenstundenzahl), SV-Aufrollung, LSt-Satz und
|
||||
SV-Beitragskürzung müssen als Regelketten implementiert sein.
|
||||
- **Meldedatums-Abgrenzung (2018/2019)** ist ein harter
|
||||
Versionsanker: bis 2018 BGN-Korrektur, ab 2019 mBGM-Storno/Neu —
|
||||
je SV-Beitragsperiode zu unterscheiden.
|
||||
- **KommSt/DB/DZ-Bemessung** bleibt bei Zeitschulden-Rückrechnung
|
||||
unverändert — keine Kürzung der Bemessungsgrundlagen.
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-end-08 (Endabrechnung — Zeitschulden und
|
||||
Gehaltserhöhungen) · lb-end-09 (Mehr-/Überstunden ohne
|
||||
Durchrechnungszeitraum) · lb-end-10 (Zeitguthaben bei
|
||||
durchrechenbarer Arbeitszeit) · lb-end-32 (Gleitzeitguthaben-Beispiel)
|
||||
+100
@@ -0,0 +1,100 @@
|
||||
---
|
||||
id: lb-end-30
|
||||
batch: 10
|
||||
title: "Beispiel: Freiwillige Abfertigung – „Viertel- und Zwölftelregelung""
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Beendigungsansprüche & Endabrechnung"
|
||||
topic: endabrechnung
|
||||
author: "Mäder"
|
||||
stand: 2026-07
|
||||
source:
|
||||
pdf: ".lexis360/beispiele/Lexis360_beispiel_freiwillige_abfertigung_viertel_und_zwolf.pdf"
|
||||
text: ".lexis360/md/beispiel_freiwillige_abfertigung_viertel_und_zwolf.md"
|
||||
legal_bases: ["§ 67 Abs 6 EStG", "§ 67 Z 1 und Z 2 EStG"]
|
||||
tags: [freiwillige-abfertigung, viertelregelung, zwolftelregelung, sechstel, hbg-deckel, vordienstzeiten]
|
||||
cross_refs: ["lb-end-13", "lb-end-12", "lb-end-15", "lb-end-31", "lb-end-35"]
|
||||
---
|
||||
|
||||
# Beispiel: Freiwillige Abfertigung — „Viertel- und Zwölftelregelung"
|
||||
|
||||
*Lexis Briefings Personalrecht, Mäder, Stand Juli 2026 (lb-end-30).*
|
||||
|
||||
## Beispiel 1 — „Viertelregelung" (Abfertigung-Alt)
|
||||
|
||||
**Angaben:** Abfertigung-Alt; vertragliche freiwillige Abfertigung
|
||||
brutto € 25.000,–; laufende Bezüge der letzten 12 Monate € 85.000,–;
|
||||
kein Vordienstzeitennachweis.
|
||||
|
||||
| Schritt | Betrag |
|
||||
|---|---|
|
||||
| ¼ von € 85.000,– (letzte 12 Monate) | € 21.250,– |
|
||||
| abzüglich vereinbarter Abfertigungsanspruch | – € 25.000,– |
|
||||
| „Viertelregelung" übersteigender Teil | – € 3.750,– |
|
||||
|
||||
- **Begünstigt (mit 6 % abrechenbar):** € 21.250,– — geringer als das
|
||||
**Neunfache der HBG** (2026: € 62.370,–) → **keine Deckelung**.
|
||||
- **Nicht begünstigt (laufender Monatstarif, gemeinsam mit den
|
||||
laufenden Bezügen des Auszahlungsmonats):** € 3.750,–.
|
||||
|
||||
## Beispiel 2 — „Viertel- und Zwölftelregelung" (Abfertigung-Alt + Vordienstzeit)
|
||||
|
||||
**Angaben:** Abfertigung-Alt; Betriebszugehörigkeit **21 Jahre**;
|
||||
vertragliche freiwillige Abfertigung € 60.000,–; gesetzliche Abfertigung
|
||||
€ 63.750,–; laufende Bezüge letzte 12 Monate € 85.000,–;
|
||||
**Vordienstzeit: 7 Jahre** beim Vorarbeitgeber (Bestätigung vorgelegt;
|
||||
dort bereits € 18.591,– gesetzliche + freiwillige Abfertigung erhalten).
|
||||
|
||||
**a) Viertelregelung:** ¼ × € 85.000,– = € 21.250,–; abzüglich € 60.000,–
|
||||
→ übersteigender Teil – € 38.750,–.
|
||||
|
||||
**b) Zwölftelregelung:** (7 Jahre Vordienstzeit + 21 Jahre aktuelle
|
||||
Dienstzeit = 28 Jahre → **12/12** von € 85.000,–) = € 85.000,–;
|
||||
abzüglich: erhaltene Abfertigungszahlungen bei Vordienstgeber –
|
||||
€ 18.591,–; gesetzliche Abfertigungszahlung aus aktuellem DV –
|
||||
€ 63.750,–; **zusätzlich als begünstigte freiwillige Abfertigung
|
||||
abrechenbar: + € 2.659,–**.
|
||||
|
||||
- **Begünstigt (6 %):** € 21.250,– + € 2.659,– = **€ 23.909,–**.
|
||||
- **Nicht begünstigt (laufender Monatstarif):** € 60.000,– –
|
||||
€ 23.909,– = **€ 36.091,–** (begünstigter Abfertigungsteil gem
|
||||
**§ 67 Abs 6, 1. und 2. Satz EStG**).
|
||||
- **Hinweis der Quelle:** Die Deckelung der Abfertigung mit einem
|
||||
Vielfachen der ASVG-Höchstbeitragsgrundlage iSd **§ 67 Z 1 und
|
||||
Z 2 EStG** kommt in diesem Beispiel **nicht** zur Anwendung.
|
||||
|
||||
## Kernwerte & Fristen (Stand 2026-07)
|
||||
|
||||
| Wert | Detail |
|
||||
|---|---|
|
||||
| Viertelregelung | ¼ der laufenden Bezüge der letzten **12 Monate** |
|
||||
| Zwölftelregelung | (Vordienstzeit + aktuelle Dienstzeit) in 1/12-Schritten × 12-Monats-Bezüge; erhaltene Abfertigungen werden abgezogen |
|
||||
| Begünstigter Teil | **6 %** (Sechstel, § 67 Abs 6 EStG) |
|
||||
| Übersteigender Teil | **laufender Monatstarif** (gemeinsam mit den Bezügen des Auszahlungsmonats) |
|
||||
| HBG-Deckel (2026) | **9 × HBG = € 62.370,–** (iSd § 67 Z 1/Z 2 EStG; im Bsp. nicht erreicht) |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- **§ 67 Abs 6 EStG** (1. und 2. Satz — begünstigter Abfertigungsteil) —
|
||||
zitiert.
|
||||
- **§ 67 Z 1 und Z 2 EStG** (Deckelung mit Vielfachen der
|
||||
ASVG-Höchstbeitragsgrundlage) — im Hinweis zitiert.
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- **Viertel-/Zwölftel-Berechnung** sind zwei abgrenzbare
|
||||
Berechnungspfade in der Abfertigungs-Logik — die
|
||||
Vordienstzeitenbestätigung (→ lb-end-35) ist der Beleg für die
|
||||
Zwölftelregelung.
|
||||
- **Deckel (9 × HBG, § 67 Z 1/Z 2 EStG)** ist ein harter
|
||||
Versionsanker — als `hr.rule.parameter` je Jahr parametrisieren.
|
||||
- **SV- und BV-Folgen** der freiwilligen Abfertigung: → lb-end-15
|
||||
(Sozialversicherung), lb-end-12 (Lohnnebenkosten).
|
||||
- **Voll-Übertritt in Abfertigung Neu** mit Übertragungsbetrag →
|
||||
lb-end-31 (eigener Steuerpfad).
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-end-13 (Freiwillige Abfertigung — LSt,
|
||||
Abfertigung-Alt) · lb-end-12 (Lohnnebenkosten) · lb-end-15
|
||||
(Sozialversicherungsrecht) · lb-end-31 (Voll-Übertritt mit
|
||||
Übertragungsbetrag) · lb-end-35 (Vordienstzeitenbestätigung)
|
||||
+77
@@ -0,0 +1,77 @@
|
||||
---
|
||||
id: lb-end-31
|
||||
batch: 10
|
||||
title: "Beispiel: Freiwillige Abfertigung/Voll-Übertritt mit Übertragungsbetrag"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Beendigungsansprüche & Endabrechnung"
|
||||
topic: endabrechnung
|
||||
author: "Mäder"
|
||||
stand: 2026-07
|
||||
source:
|
||||
pdf: ".lexis360/beispiele/Lexis360_beispiel_freiwillige_abfertigungvoll_ubertritt_mit.pdf"
|
||||
text: ".lexis360/md/beispiel_freiwillige_abfertigungvoll_ubertritt_mit.md"
|
||||
legal_bases: ["§ 67 Abs 6 EStG"]
|
||||
tags: [freiwillige-abfertigung, voll-ubertritt, ubertragungsbetrag, jahresviertel, abfertigung-neu]
|
||||
cross_refs: ["lb-end-16", "lb-end-14", "lb-end-30", "lb-end-03"]
|
||||
---
|
||||
|
||||
# Beispiel: Freiwillige Abfertigung / Voll-Übertritt mit Übertragungsbetrag
|
||||
|
||||
*Lexis Briefings Personalrecht, Mäder, Stand Juli 2026 (lb-end-31).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
**Angaben:**
|
||||
- Eintritt: 1. 6. 1995
|
||||
- **Voll-Übertritt** in das System **Abfertigung Neu** per **1. 4. 2006**
|
||||
- **Übertragungsbetrag** anlässlich des Übertritts (inkl. Verzugszinsen):
|
||||
**€ 10.500,–**
|
||||
- Beendigung: einvernehmliche Auflösung
|
||||
- Laufende Bezüge der letzten 12 Monate (zum Zeitpunkt der Beendigung¹):
|
||||
**€ 32.400,–**
|
||||
- freiwillige Abfertigung anlässlich des Austritts: **€ 20.000,–**
|
||||
|
||||
¹ **LStR 2002 Rz 1087i.**
|
||||
|
||||
**Lösung — Versteuerung der freiwilligen Abfertigung:**
|
||||
|
||||
1. **Jahresviertel** gem. **§ 67 Abs 6, 1. Satz EStG** mit **6 %**:
|
||||
€ 32.400,– / 4 = **€ 8.100,–**
|
||||
2. Der € 8.100,– **übersteigende Betrag** wird wie ein laufender Bezug
|
||||
nach dem **Lohnsteuertarif** veranlagt:
|
||||
€ 20.000,– – € 8.100,– = **€ 11.900,–**
|
||||
|
||||
## Kernwerte & Fristen (Stand 2026-07)
|
||||
|
||||
| Wert | Detail |
|
||||
|---|---|
|
||||
| Begünstigter Teil | **Jahresviertel** (¼ der laufenden Bezüge der letzten 12 Monate) → **6 %** (§ 67 Abs 6, 1. Satz EStG) |
|
||||
| Übersteigender Teil | **laufender Lohnsteuertarif** (gemeinsam mit den Bezügen des Auszahlungsmonats) |
|
||||
| Übertragungsbetrag | € 10.500,– (inkl. Verzugszinsen) — im Beispiel nur als Sachverhalt, nicht in der Berechnung |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- **§ 67 Abs 6, 1. Satz EStG** (Jahresviertel / begünstigter Teil) —
|
||||
zitiert.
|
||||
- **LStR 2002 Rz 1087i** (Zeitpunkt der Bezugsfeststellung) — in
|
||||
Fußnote zitiert.
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- **Voll-Übertritt in Abfertigung Neu** ist ein eigener
|
||||
Abrechnungsfall: die freiwillige Abfertigung wird über das
|
||||
Jahresviertel (6 %) + laufender Tarif bemessen — **nicht** über die
|
||||
Viertel-/Zwölftelregelung der Abfertigung-Alt (→ lb-end-30).
|
||||
- **Übertragungsbetrag** (inkl. Verzugszinsen) ist ein eigener
|
||||
Entgeltbestandteil mit eigenen LSt/SV-Folgen → als
|
||||
`hr.rule.parameter` je Übertrittszeitpunkt abbilden.
|
||||
- **Abfertigung-Neu-System** (→ lb-end-03) hat eigene
|
||||
Verfügungsmöglichkeiten — die Abrechnungslogik muss das System
|
||||
(Alt/Neu) und den Übertrittszeitpunkt als harte Parameter führen.
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-end-16 (Freiwillige Abfertigung — LSt,
|
||||
Übertritt Abfertigung Neu) · lb-end-14 (Abfertigung Neu — LSt) ·
|
||||
lb-end-30 (Viertel-/Zwölftelregelung, Abfertigung-Alt) · lb-end-03
|
||||
(Abfertigung Neu — Verfügungsmöglichkeiten)
|
||||
+70
@@ -0,0 +1,70 @@
|
||||
---
|
||||
id: lb-tel-07
|
||||
batch: 10
|
||||
title: "Beispiel - Telearbeit Differenzwerbungskosten"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Außerhalb des Betriebsstandortes"
|
||||
topic: telearbeit
|
||||
author: "Sabara"
|
||||
stand: 2025-01
|
||||
source:
|
||||
pdf: ".lexis360/beispiele/Lexis360_beispiel_telearbeit_differenzwerbungskosten.pdf"
|
||||
text: ".lexis360/md/beispiel_telearbeit_differenzwerbungskosten.md"
|
||||
legal_bases: ["§ 16 Abs 1 Z 7a lit b EStG"]
|
||||
tags: [telearbeit, telearbeitspauschale, differenzwerbungskosten, veranlagung, lohnzettel]
|
||||
cross_refs: ["lb-tel-08", "lb-tel-06", "lb-tel-11"]
|
||||
---
|
||||
|
||||
# Beispiel: Telearbeit Differenzwerbungskosten
|
||||
|
||||
*Lexis Briefings Personalrecht, Sabara, Stand Jänner 2025 (lb-tel-07).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
- **Differenzwerbungskosten:** Zahlt der Arbeitgeber ein **niedrigeres**
|
||||
Telearbeitspauschale als den höchstmöglichen Tageswert, darf der
|
||||
Arbeitnehmer die **Differenz** in der Arbeitnehmerveranlagung als
|
||||
Werbungskosten gem. **§ 16 Abs 1 Z 7a lit b EStG** geltend machen.
|
||||
- **Beispiel 1:** 42 Telearbeitstage, AG zahlt € 2,50/Tag (€ 105); höchst
|
||||
zustehendes Pauschale € 3/Tag (€ 126) → Differenz **€ 21** in der
|
||||
Veranlagung.
|
||||
- **Beispiel 2:** 115 Telearbeitstage im Lohnzettel, AG zahlt nur für
|
||||
50 Tage (€ 150) → in der Arbeitnehmerveranlagung zusätzlich **€ 150** als
|
||||
Werbungskosten (Quellenwert; rechnerisch ergäben die 65 nicht bezahlten
|
||||
Tage × € 3 = € 195 — ⚠ Inkonsistenz der Quelle, nicht rekonstruieren;
|
||||
vor Verlässmachung im EStG-/LStR-Zusammenhang prüfen).
|
||||
- Voraussetzung in beiden Beispielen: Arbeitsleistung **ausschließlich in der
|
||||
Wohnung (außerhalb eines Arbeitszimmers)** — das ist die
|
||||
Telearbeitspauschale-Figur des § 16 Abs 1 Z 7a lit b EStG, nicht die
|
||||
Homeoffice-Pauschale-Figur (→ lb-tel-09).
|
||||
|
||||
## Kernwerte & Fristen (Stand 2025-01)
|
||||
|
||||
| Wert | Beispiel 1 | Beispiel 2 |
|
||||
|---|---|---|
|
||||
| Telearbeitstage | 42 | 115 (im Lohnzettel ausgewiesen) |
|
||||
| AG-Zuwendung | € 2,50/Tag = € 105 | € 3/Tag für 50 Tage = € 150 |
|
||||
| Höchstpauschale | € 3/Tag = € 126 | € 3/Tag (115 Tage) |
|
||||
| Differenz-Werbungskosten (Veranlagung) | **€ 21** | **€ 150** (Quellenwert, ⚠ s.o.) |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- **§ 16 Abs 1 Z 7a lit b EStG** (Differenzwerbungskosten bei
|
||||
Telearbeitspauschale) — im Beispiel 1 ausdrücklich zitiert; Beispiel 2
|
||||
wendet die gleiche Figur an.
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- Der AG-Zahlbetrag und die **Anzahl der Telearbeitstage** sind die
|
||||
Abrechnungsfakten; die Differenz ist **Arbeitnehmerseite** (Veranlagung) —
|
||||
in der Lohnabrechnung nur die nicht steuerbare Zuwendung und die
|
||||
Tagesausweisung im Lohnzettel (Meldung!) relevant.
|
||||
- **Lohnzettel-Telearbeitstage** (Beispiel 2) = Meldedaten (L16/eSV):
|
||||
Abwesenheit der Tagesausweisung führt zum Verlust des
|
||||
Differenzanspruchs → Tageszahlen sauber erfassen.
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-tel-08 (Telearbeit Werbungskosten, Pauschalen-
|
||||
Abzugslogik) · lb-tel-06 (Telearbeit steuerliche Aspekte) · lb-tel-11
|
||||
(Homeoffice vs. Telearbeit)
|
||||
@@ -0,0 +1,64 @@
|
||||
---
|
||||
id: lb-tel-08
|
||||
batch: 10
|
||||
title: "Beispiel - Telearbeit Werbungskosten"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Außerhalb des Betriebsstandortes"
|
||||
topic: telearbeit
|
||||
author: "Sabara"
|
||||
stand: 2025-01
|
||||
source:
|
||||
pdf: ".lexis360/beispiele/Lexis360_beispiel_telearbeit_werbungskosten.pdf"
|
||||
text: ".lexis360/md/beispiel_telearbeit_werbungskosten.md"
|
||||
legal_bases: []
|
||||
tags: [telearbeit, telearbeitspauschale, werbungskosten, digitale-arbeitsmittel, berufsnutzung]
|
||||
cross_refs: ["lb-tel-07", "lb-tel-09", "lb-tel-06"]
|
||||
---
|
||||
|
||||
# Beispiel: Telearbeit Werbungskosten
|
||||
|
||||
*Lexis Briefings Personalrecht, Sabara, Stand Jänner 2025 (lb-tel-08).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
- **Prinzip:** Das vom Arbeitgeber **nicht steuerbar** gezahlte
|
||||
Telearbeitspauschale wird vom anteiligen Anschaffungswert der digitalen
|
||||
Arbeitsmittel **abgezogen**; nur der Überhang ist Werbungskosten.
|
||||
- **Beispiel:** AG zahlt € 60 (€ 3 für 20 Telearbeitstage); Arbeitnehmer
|
||||
kauft einen € 200-Drucker mit **60 % beruflicher Nutzung** = € 120
|
||||
anrechnungsfähig; abzüglich € 60 Pauschale → **€ 60 Werbungskosten**.
|
||||
- **Variante:** Drucker € 100 (60 % = € 60) ist vollständig durch die
|
||||
€ 60 Pauschale gedeckt → **keine** zusätzlichen Werbungskosten.
|
||||
- Die Quelle zitiert keine §-Norm; die Figuren gehören zum
|
||||
Telearbeitspauschale-/Arbeitsmittel-Regime (§ 16 Abs 1 Z 7a lit b und
|
||||
§ 20 Abs 1 Z 2 lit d EStG) — ⚠ §-Zuordnung vor Verlässmachung gegen
|
||||
LStR verifizieren.
|
||||
|
||||
## Kernwerte & Fristen (Stand 2025-01)
|
||||
|
||||
| Posten | Beispiel | Variante |
|
||||
|---|---|---|
|
||||
| Telearbeitspauschale (AG, nicht steuerbar) | € 60 (20 Tage × € 3) | € 60 |
|
||||
| Anschaffung (Drucker) | € 200 | € 100 |
|
||||
| Berufsnutzung | 60 % = € 120 | 60 % = € 60 |
|
||||
| Werbungskosten (Überhang) | **€ 60** | **€ 0** |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- Keine §-Zitate in der Quelle (Beispiel ohne Normenkette) — ⚠ Figuren
|
||||
gehören zum EStG-Werbungskostenregime für Telearbeit (→ lb-tel-07 nennt
|
||||
§ 16 Abs 1 Z 7a lit b EStG, lb-tel-09 § 20 Abs 1 Z 2 lit d EStG).
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- AG-seitig: die **nicht steuerbare Pauschalzuwendung** und die
|
||||
Telearbeitstage im Lohnzettel (Meldung) sind die Abrechnungsfakten;
|
||||
die Werbungskosten-Seite liegt beim Arbeitnehmer.
|
||||
- **Berufsnutzung %** (60 %) ist ein Arbeitnehmereingabewert für die
|
||||
Veranlagung, kein Lohnverrechnungswert.
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-tel-07 (Differenzwerbungskosten) · lb-tel-09
|
||||
(Arbeitszimmer + digitale Arbeitsmittel) · lb-tel-06 (steuerliche
|
||||
Aspekte Telearbeit)
|
||||
+90
@@ -0,0 +1,90 @@
|
||||
---
|
||||
id: lb-end-32
|
||||
batch: 10
|
||||
title: "Beispiel - Vergütung von Gleitzeitguthaben bei Beendigung des Arbeitsverhältnisses"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Beendigungsansprüche & Endabrechnung"
|
||||
topic: endabrechnung
|
||||
author: "Posch"
|
||||
stand: 2026-07
|
||||
source:
|
||||
pdf: ".lexis360/beispiele/Lexis360_beispiel_vergutung_von_gleitzeitguthaben_bei_beend.pdf"
|
||||
text: ".lexis360/md/beispiel_vergutung_von_gleitzeitguthaben_bei_beend.md"
|
||||
legal_bases: ["§ 19e AZG"]
|
||||
tags: [gleitzeitguthaben, zeitausgleich, normalstundenteiler, zuschlag, laufender-bezug]
|
||||
cross_refs: ["lb-end-10", "lb-end-05", "lb-end-08"]
|
||||
---
|
||||
|
||||
# Beispiel: Vergütung von Gleitzeitguthaben bei Beendigung des Arbeitsverhältnisses
|
||||
|
||||
*Lexis Briefings Personalrecht, Posch, Stand Juli 2026 (lb-end-32).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
**Angaben:** Vollzeit-Angestellter; Beginn 1. 3. 2016
|
||||
(Abfertigungssystem **NEU**); Ende **31. 3. 2019** durch
|
||||
Arbeitnehmerkündigung; 40 h/Woche; **Normalstundenteiler = 173**;
|
||||
Resturlaubsanspruch 0; Bruttomonatsgehalt **€ 2.500,–**; UZ/WR je
|
||||
€ 2.500,– (im Austrittsjahr keine ausgezahlt); Gleitzeitperiode
|
||||
Kalenderjahr; offenes **Gleitzeitguthaben: 28,5 Stunden**.
|
||||
|
||||
**1. Berechnung der Beendigungsansprüche:**
|
||||
- **Anteiliger UZ/WR** für 1. 1.–31. 3. (90 KT):
|
||||
(€ 2.500,– × 90 KT / 365) = **€ 616,44 brutto** (je UZ und WR).
|
||||
- **Vergütung des Zeitguthabens** (1,5-fach):
|
||||
€ 2.500,– × 28,5 × 1,5 / **173** = **€ 617,77**.
|
||||
|
||||
**2. Abrechnung (Auszug März 2019):**
|
||||
- Brutto-Gesamt: Gehalt € 2.500,– + UZ € 616,44 + WR € 616,44 +
|
||||
Zeitguthaben € 617,77 = **€ 4.350,65**.
|
||||
- SV: laufende Bezüge € 3.117,77 × **18,12 %** = € 564,94 (FN 4:
|
||||
(€ 2.500,– + € 617,77) × 18,12 % = € 563,38); SZ € 1.232,88 ×
|
||||
**14,12 %** = € 174,08 (FN 3: (€ 616,44 + € 616,44) × 14,12 % =
|
||||
€ 173,47 → **AlV-Verminderung**).
|
||||
- LSt: Freibetrag € 620,– (SZ); Bemessungsgrundlagen
|
||||
LSt-laufend € 2.552,83 (€ 3.117,77 – € 564,94); LSt-SZ € 26,33.
|
||||
- **BVK-Beiträge**: laufend € 47,70, SZ € 18,86.
|
||||
- **Auszahlungsbetrag: € 3.109,91**.
|
||||
|
||||
**Kernregel (FN 2):** „Die Abgeltung für ein im Rahmen einer
|
||||
Gleitzeitvereinbarung entstandenes Zeitguthaben ist sowohl in der
|
||||
Sozialversicherung als auch in der Lohnsteuer im Auszahlungsmonat als
|
||||
**laufender Bezug** zu behandeln."
|
||||
|
||||
## Kernwerte & Fristen (Stand 2026-07)
|
||||
|
||||
| Wert | Detail |
|
||||
|---|---|
|
||||
| Normalstundenteiler | **173** (Abgeltung von Guthaben an Normalarbeitszeit, **§ 19e AZG**) |
|
||||
| Guthaben-Vergütung | Bruttomonatsgehalt × Stunden × **1,5** / 173 (hier € 617,77) |
|
||||
| Behandlung | **laufender Bezug** (SV + LSt) im Auszahlungsmonat |
|
||||
| UZ/WR | aliquot (90/365 KT) → je € 616,44; SZ-SV 14,12 % (inkl. AlV-Verminderung), SZ-LSt 6 % |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- **§ 19e AZG** (Normalstundenteiler 173 für die Abgeltung von
|
||||
Guthaben an Normalarbeitszeit) — in Fußnote 1 zitiert.
|
||||
- AlV-Verminderung (SZ) und BVK-Beiträge: ohne §-Zitat im Beispiel
|
||||
(SV-Mechanik, → lb-son-03).
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- **Gleitzeitguthaben-Abgeltung** = eigener Abrechnungspfad in der
|
||||
Endabrechnung: Normalstundenteiler (173), Zuschlagsfaktor (1,5),
|
||||
laufende-Bezug-Behandlung (SV + LSt) müssen als Regelkette
|
||||
implementiert sein.
|
||||
- **AlV-Verminderung** bei Sonderzahlungen (14,12 % vs. 17,12 %) ist
|
||||
ein harter SV-Parameter — als `hr.rule.parameter` je Jahr
|
||||
parametrisieren.
|
||||
- **Abgrenzung** Gleitzeitguthaben (laufender Bezug) vs.
|
||||
Überstundenpauschale (SZ-Bezug) ist eine zentrale
|
||||
Abrechnungslogik-Entscheidung → Belegtyp je
|
||||
Work-Entry-Datensatz zu kennzeichnen.
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-end-10 (Zeitguthaben bei durchrechenbarer
|
||||
Arbeitszeit) · lb-end-05 (Abgeltung von Mehrleistungen bei
|
||||
Beendigung — Überblick) · lb-end-08 (Zeitschulden) · lb-end-29
|
||||
(Zeitschulden-Beispiel) · lb-son-03 (Sonderzahlungen —
|
||||
Sozialversicherung)
|
||||
+70
@@ -0,0 +1,70 @@
|
||||
---
|
||||
id: lb-tel-09
|
||||
batch: 10
|
||||
title: "Beispiel - Werbungskosten Arbeitszimmer und digitale Arbeitsmittel"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Außerhalb des Betriebsstandortes"
|
||||
topic: telearbeit
|
||||
author: "Sabara"
|
||||
stand: 2024-01
|
||||
source:
|
||||
pdf: ".lexis360/beispiele/Lexis360_beispiel_werbungskosten_arbeitszimmer_und_digitale.pdf"
|
||||
text: ".lexis360/md/beispiel_werbungskosten_arbeitszimmer_und_digitale.md"
|
||||
legal_bases: ["§ 20 Abs 1 Z 2 lit d EStG"]
|
||||
tags: [homeoffice, arbeitszimmer, digitale-arbeitsmittel, homeoffice-pauschale, werbungskosten]
|
||||
cross_refs: ["lb-tel-08", "lb-tel-07", "lb-tel-11"]
|
||||
---
|
||||
|
||||
# Beispiel: Werbungskosten Arbeitszimmer und digitale Arbeitsmittel
|
||||
|
||||
*Lexis Briefings Personalrecht, Sabara, Stand Jänner 2024 (lb-tel-09).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
- **Zwei getrennte Werbungskosten-Töpfe:** (1) **digitale Arbeitsmittel** —
|
||||
hier wird die Homeoffice-Pauschale **abgezogen**; (2) **Arbeitszimmer**
|
||||
(Büroeinrichtung + anteilige Raumkosten) — hier wird die Pauschale
|
||||
**nicht** abgezogen.
|
||||
- **Beispiel:** den Anforderungen des **§ 20 Abs 1 Z 2 lit d EStG**
|
||||
entsprechendes Arbeitszimmer; 100 Arbeitstage 2023; AG zahlt € 200
|
||||
Homeoffice-Pauschale; Computer € 700 mit 60 % Berufsnutzung → € 420
|
||||
abzüglich € 200 Pauschale = **€ 220** Werbungskosten (digitales
|
||||
Arbeitsmittel); Bürostuhl € 450 + € 140 anteilige Arbeitszimmerkosten
|
||||
(Miete, Strom) = **€ 590** Arbeitszimmer-Werbungskosten.
|
||||
- ⚠ **Alter Stand (2024-01)** — Pauschalenhöhe und Arbeitszimmer-Regel
|
||||
(§ 20 Abs 1 Z 2 lit d EStG) sind eStG-Jahreswerte; nur für den
|
||||
dokumentierten Zeitraum anwenden.
|
||||
|
||||
## Kernwerte & Fristen (Stand 2024-01)
|
||||
|
||||
| Posten | Betrag |
|
||||
|---|---|
|
||||
| Homeoffice-Pauschale (AG) | € 200 |
|
||||
| Computer (60 % von € 700) | € 420 |
|
||||
| **Werbungskosten digitales Arbeitsmittel** (420 − 200) | **€ 220** |
|
||||
| Bürostuhl | € 450 |
|
||||
| anteilige Arbeitszimmerkosten (Miete, Strom) | € 140 |
|
||||
| **Werbungskosten Arbeitszimmer** (450 + 140) | **€ 590** |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- **§ 20 Abs 1 Z 2 lit d EStG** (Anforderungen an das Arbeitszimmer) —
|
||||
ausdrücklich zitiert.
|
||||
- Homeoffice-Pauschale und digitale-Arbeitsmittel-Figur: keine
|
||||
weiteren §-Zitate in der Quelle — ⚠ §-Zuordnung (u. a. § 16 Abs 1
|
||||
Z 7a EStG) vor Verlässmachung gegen LStR verifizieren.
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- AG-seitig nur die **Zahlung der Homeoffice-Pauschale** (nicht steuerbar)
|
||||
relevant; Arbeitstage (100) sind für die Lohnzettel-/Veranlagungs-
|
||||
Seitenausweis relevant.
|
||||
- Berufsnutzung % (60 %) und Arbeitszimmer-Kosten sind reine
|
||||
Arbeitnehmer-Veranlagungswerte — kein Eingabewert in der
|
||||
Lohnabrechnung.
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-tel-07 (Telearbeit Differenzwerbungskosten) ·
|
||||
lb-tel-08 (Telearbeitspauschale-Abschlag) · lb-tel-11
|
||||
(Homeoffice vs. Telearbeit)
|
||||
+172
@@ -0,0 +1,172 @@
|
||||
---
|
||||
id: lb-url-17
|
||||
batch: 10
|
||||
title: "Beispiele: Berechnung der Urlaubsersatzleistung"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Beendigungsansprüche & Endabrechnung"
|
||||
topic: urlaub
|
||||
author: "Niederfriniger"
|
||||
stand: 2026-07
|
||||
source:
|
||||
pdf: ".lexis360/beispiele/Lexis360_beispiele_berechnung_der_urlaubsersatzleistung.pdf"
|
||||
text: ".lexis360/md/beispiele_berechnung_der_urlaubsersatzleistung.md"
|
||||
legal_bases: []
|
||||
tags: [urlaubsersatzleistung, aliquote, pflichtversicherungsverlaengerung, schichtzulage, mehrleistung, rueckerstattung-urlaub, alv]
|
||||
cross_refs: ["lb-url-09", "lb-url-14", "lb-url-15", "lb-url-16", "lb-url-05"]
|
||||
---
|
||||
|
||||
# Beispiele: Berechnung der Urlaubsersatzleistung
|
||||
|
||||
*Lexis Briefings Personalrecht, Niederfriniger, Stand Juli 2026 (lb-url-17).*
|
||||
|
||||
## Beispiel 1 — Anzahl auszubezahlender Urlaubstage
|
||||
|
||||
Arbeitnehmer tritt am 5. 2. ein, wird zum 31. 10. desselben Jahres
|
||||
gekündigt; bisher 11 Urlaubstage (Arbeitstage) konsumiert.
|
||||
|
||||
| Schritt | Arbeitstage |
|
||||
|---|---|
|
||||
| 25 AT (jährl. Anspruch) / 365 KT × 269 KT | 18,42 |
|
||||
| zuzüglich Resturlaub Vorjahr | 0 |
|
||||
| abzüglich konsumierter Urlaub | – 11 |
|
||||
| **Urlaubsersatzleistung** | **7,42** |
|
||||
|
||||
## Beispiel 2 — Verlängerung der Pflichtversicherung
|
||||
|
||||
Aus 7,42 AT: **abgerundet 7 AT** + **Zusatztagen (für je 5 AT → 2
|
||||
Zusatztage): +2** = **9 Kalendertage**. Die **ASVG-Pflichtversicherung**
|
||||
(Ende Entgeltanspruch) endet somit am **9. 11.** (neun Tage nach dem
|
||||
31. 10.).
|
||||
|
||||
## Beispiel 3 — Auszahlung einer UEL (Arbeiter)
|
||||
|
||||
**Angaben (Auszug):** Beginn 1. 12. 2015, Ende **15. 8. 2026**
|
||||
(Arbeitnehmerkündigung); Urlaubsjahr = Arbeitsjahr; 25 AT (Mo–Fr);
|
||||
Resturlaub 0; 4 AT des laufenden Urlaubsjahres konsumiert;
|
||||
Bruttomonatslohn € 2.880,–; **Schichtzulage € 180,–** (Durchschnitt der
|
||||
letzten **13 voll gearbeiteten Wochen** — Drei-Monats-Schnitt);
|
||||
**Mehrleistungsvergütungen € 220,–** (ebenso 13-Wochen-Schnitt);
|
||||
UZ/WR à € 2.880,– (UZ fällig 31. 5., WR 30. 11.); KV: UZ/WR nur bei
|
||||
begründeter Entlassung/unbegründetem Austritt/DN-Kündigung aliquot
|
||||
rückzahlbar; **Leistungsprämie** € 280,– (anteilig im Austrittsjahr).
|
||||
|
||||
**1. Aliquoter Anspruch:** 25 AT / 365 KT × 258 KT = 17,67; − 4
|
||||
konsumiert = **13,67 AT**.
|
||||
|
||||
**2. UEL-Bemessung (Monatsbemessung):**
|
||||
|
||||
| Bestandteil | Betrag |
|
||||
|---|---|
|
||||
| Bruttomonatslohn | € 2.880,00 |
|
||||
| Schichtzulage (Ø) | € 180,00 |
|
||||
| Mehrleistungsvergütung (Ø) | € 220,00 |
|
||||
| anteiliger UZ (2.880 / 12) | € 240,00 |
|
||||
| anteilige WR (2.880 / 12) | € 240,00 |
|
||||
| anteilige Leistungsprämie (300 / 12) | € 20,00 |
|
||||
| **Monatsbemessung** | **€ 3.780,00** |
|
||||
|
||||
**UEL für 13,67 AT: € 3.780,00 / 22 × 13,67 AT = € 2.348,97 (brutto)**
|
||||
|
||||
- **UEL-laufend** (Gehalt + Schichtzulage + Mehrleistung):
|
||||
€ 3.280,00 / 22 × 13,67 AT = **€ 2.038,26**;
|
||||
SV-Beitrag: € 346,65 (18,07 % auf € 1.918,36 für 16.–31. 8. 2026) +
|
||||
€ 18,13 (15,12 % auf € 119,90 für den 1. 9. 2026 — **AlV-Beitrag
|
||||
2,95 % entfällt**, da BG im 9/2026 **unter € 2.225,–**) =
|
||||
**€ 364,78**.
|
||||
- **UEL-SZ** (UZ + WR + Leistungsprämie): € 500,– / 22 × 13,67 AT =
|
||||
**€ 309,55**; SV-Beitrag **€ 52,84** (17,07 % — vorausgesetzt die
|
||||
BG für den SZ-Anteil überschreitet zusammen mit den noch
|
||||
abzurechnenden aliquoten SZ **€ 2.225,–** — sonst AlV-Teil-/Voll-
|
||||
entfall).
|
||||
|
||||
**3. Verlängerung der Pflichtversicherung:** 13,67 AT → **abgerundet
|
||||
13 AT** + Zusatztagen (je 5 AT → 2) **+4** = **17 Kalendertage**;
|
||||
Pflichtversicherung endet am **1. 9.** (17 Tage nach dem 15. 8.).
|
||||
|
||||
## Beispiel 4 — Rückverrechnung zu viel konsumierten Urlaubs (Angestellter)
|
||||
|
||||
**Angaben (Auszug):** Beginn 8. 3. 2019, Ende **31. 5. 2026**
|
||||
(berechtigte Entlassung); 25 AT; Resturlaub 0; **10 AT** im April 2026
|
||||
konsumiert; Bruttomonatsentgelt € 2.500,–; UZ/WR à € 2.500,– (UZ
|
||||
fällig 30. 6., WR 30. 11.).
|
||||
|
||||
**1. Aliquoter Anspruch:** 25 AT / 365 KT × **85 KT**¹ = 5,82; − 10
|
||||
konsumiert = **4,18 rückzuerstattende AT**.
|
||||
|
||||
**2. Rückerstattungsbetrag:** Monatsentgelt Mai 2026 € 2.500,–;
|
||||
**€ 2.500,– / 22 × 4,18 AT = € 474,78 brutto** — im Austrittsmonat als
|
||||
**Rückzahlung von Arbeitslohn** abzurechnen.
|
||||
|
||||
**3. Netto-Berechnung (Auszug):** Gehalt 1.–31. 5. € 2.500,–; UZ/WR
|
||||
aliquot (1. 1.–31. 5. = 152 KT **abzüglich** Tage der
|
||||
Rückvergütung = **148 KT**) = je € 1.013,70; SV-SZ € 2.027,40 →
|
||||
€ 346,08; SV-lfd. € 2.500,– → € 451,75; LSt: Freibetrag € 620,–,
|
||||
LSt-lfd. € 63,12, LSt-SZ € 63,68; BVK € 69,27 (Grundlage
|
||||
€ 4.527,40²); **Auszahlungsbetrag: € 3.058,72**.
|
||||
|
||||
¹ Kalendertage im laufenden Urlaubsjahr bis zur Beendigung.
|
||||
² **Bemessungsgrundlagen zu beachten:**
|
||||
- (FN 2) Es ist jenes Urlaubsentgelt zurückzuzahlen, das der
|
||||
Arbeitnehmer für den zu viel verbrauchten Urlaub **tatsächlich
|
||||
erhalten hat** (Bruttogehalt zuzüglich etwaiger bezahlter
|
||||
Ausfallsentgelte nach dem Ausfallsprinzip für Mehr-/Überstunden,
|
||||
Zulagen etc.); die Sonderzahlung wird bei der Endabrechnung
|
||||
berücksichtigt (zurückzuzahlende Tage werden **nicht** in der
|
||||
Aliquotierung berücksichtigt); **KV unbedingt beachten**.
|
||||
- (FN 3) Übersteigt der durch die Rückzahlung unbezahlt gewordene
|
||||
Urlaub **nicht einen Monat**, kann **keine Beitragsrückverrechnung**
|
||||
erfolgen (AN-Anteil trägt der AN durch die Brutto-Rückerstattung
|
||||
selbst; AG-Anteil kann die GKK nicht wie bei unbezahlten Urlaeben
|
||||
einfordern).
|
||||
- (FN 4) Die **BV-Grundlage** ist grundsätzlich gleich der
|
||||
SV-Grundlage.
|
||||
- (FN 5) Die **LSt-Bemessungsgrundlage** wird durch den
|
||||
rückzuzahlenden Bruttobetrag **reduziert**; die Bemessungsgrundlagen
|
||||
für **DB, DZ und KommSt** werden durch die
|
||||
Rückzahlungsverpflichtung **nicht** gekürzt.
|
||||
|
||||
## Kernwerte & Fristen (Stand 2026-07)
|
||||
|
||||
| Wert | Detail |
|
||||
|---|---|
|
||||
| Aliquotierung | jährl. AT / 365 KT × KT im Urlaubsjahr + Resturlaub − konsumierte AT |
|
||||
| UEL-Bemessung | Monatsbemessung (Gehalt + regelmäßige Zulagen/Mehrarbeit [13-Wochen-Ø] + anteilige UZ/WR + anteilige Prämien) / 22 AT × AT |
|
||||
| SV-Beiträge | UEL-lfd. und UEL-SZ getrennt; AlV-Reduktion unter **€ 2.225,–** BG (9/2026) |
|
||||
| Pflichtversicherungsverlängerung | abgerundete AT + 2 Zusatztage je 5 AT = Kalendertage nach Beendigung |
|
||||
| Rückverrechnung (zu viel konsumiert) | tatsächlich empfangenes Entgelt (brutto, inkl. Ausfallsentgelte) als Rückzahlung von Arbeitslohn; keine SZ-Aliquotierung der rückzuzahlenden Tage; KV beachten |
|
||||
| Beitragsrückverrechnung | nur wenn unbezahlter Urlaub > 1 Monat |
|
||||
| LSt/BV/DB/DZ/KommSt | LSt-BG reduziert; BV = SV-BG; **DB/DZ/KommSt-BG nicht gekürzt** |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- **ASVG** (Pflichtversicherungsverlängerung durch UEL) — ohne §-Zitat
|
||||
referenziert.
|
||||
- **AlV-Beitrag** (2,95 %/1 % Reduktion unter € 2.225,–) — ohne
|
||||
§-Zitat (SV-Mechanik, → lb-son-03).
|
||||
- **Ausfallsprinzip** (Mehrarbeit) — in FN 2 referenziert (→
|
||||
lb-ues-01).
|
||||
- Rahmen: → lb-url-09 (UEL — Arbeitsrecht), lb-url-14 (Urlaubsentgelt),
|
||||
lb-url-15 (UEL — Abgaben), lb-url-16 (UEL — Arbeitsrecht).
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- **UEL-Bemessung** ist eine eigene Abrechnungslogik:
|
||||
Monatsbemessung (Gehalt + 13-Wochen-Ø für Schichtzulage/Mehrarbeit +
|
||||
anteilige UZ/WR/Prämien), 22-AT-Termin, AlV-Reduktion unter € 2.225,–
|
||||
— als Regelkette implementieren.
|
||||
- **Pflichtversicherungsverlängerung** (abgerundete AT + 2 je 5 AT)
|
||||
ist ein harter SV-Parameter — in der Endabrechnung berechnen.
|
||||
- **Rückverrechnung zu viel konsumierten Urlaubs** ist eine eigene
|
||||
Abrechnungslogik (Rückzahlung von Arbeitslohn, keine
|
||||
SZ-Aliquotierung der rückzuzahlenden Tage, KV beachten) → als
|
||||
separater Abzug in der Endabrechnung.
|
||||
- **DB/DZ/KommSt-Bemessung** bleibt bei UEL-Rückzahlung unverändert —
|
||||
keine Kürzung der Bemessungsgrundlagen.
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-url-09 (Urlaubsersatzleistung) · lb-url-14
|
||||
(Urlaubsentgelt) · lb-url-15 (UEL — Abgaben) · lb-url-16 (UEL —
|
||||
Arbeitsrecht) · lb-url-05 (Urlaub — Anspruch & Ausmaß) ·
|
||||
lb-ues-01 (Überstundenarbeit — Ausmaß) · lb-son-03 (Sonderzahlungen —
|
||||
Sozialversicherung)
|
||||
@@ -0,0 +1,93 @@
|
||||
---
|
||||
id: lb-bnd-46
|
||||
batch: 10
|
||||
title: "Checkliste - Ansprüche bei der Entlassung"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Beendigungsarten"
|
||||
topic: beendigungsarten
|
||||
author: "Thöny-Maier"
|
||||
stand: 2026-06
|
||||
source:
|
||||
pdf: ".lexis360/uebersichten_checklisten/Lexis360_checkliste_anspruche_bei_der_entlassung.pdf"
|
||||
text: ".lexis360/md/checkliste_anspruche_bei_der_entlassung.md"
|
||||
legal_bases: []
|
||||
tags: [entlassung, ansprueche, kuendigungsschadigung, abfertigung, urlaubsersatzleistung, konventionalstrafe]
|
||||
cross_refs: ["lb-bnd-31", "lb-bnd-33", "lb-end-18", "lb-end-24", "lb-url-09"]
|
||||
---
|
||||
|
||||
# Checkliste: Ansprüche bei der Entlassung
|
||||
|
||||
*Lexis Briefings Personalrecht, Thöny-Maier, Stand Juni 2026 (lb-bnd-46).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
- **Matrize** nach Entlassungsart (berechtigte/verschuldete ·
|
||||
berechtigte/unverschuldete · unberechtigte) × Anspruch:
|
||||
- **Ansprüche des Arbeitnehmers:**
|
||||
- **Laufendes Entgelt:** ja/ja/ja.
|
||||
- **(Anteilige) Sonderzahlungen:**
|
||||
- *verschuldete:* Angestellte ja, **Arbeiter meist nein**
|
||||
(KV-Regelung; **Rückverrechnung möglich**);
|
||||
- *unverschuldete:* Angestellte ja, **Arbeiter meist ja**
|
||||
(KV; Rückverrechnung möglich);
|
||||
- *unberechtigte:* Angestellte ja, **Arbeiter meist nein**
|
||||
(KV; Rückverrechnung möglich).
|
||||
- **Urlaubsersatzleistung (laufendes Urlaubsjahr):**
|
||||
- *verschuldete:* ja (aliquot); **keine Rückerstattung** des
|
||||
Urlaubsentgelts für über das aliquote Ausmaß hinaus
|
||||
verbrauchten Jahresurlaub;
|
||||
- *unverschuldete:* ja (aliquot); keine Rückerstattung;
|
||||
- *unberechtigte:* ja (aliquot); keine Rückerstattung.
|
||||
- **Abfertigung Alt/Neu:** ja bei *unverschuldeter* und
|
||||
*unberechtigter*; **nein bei verschuldeter** Entlassung.
|
||||
- **Kündigungsentschädigung:** nur bei **unberechtiger**
|
||||
Entlassung — hier **SZ-Anteil und Urlaubsanteil für die
|
||||
Kündigungsfrist** zu berücksichtigen.
|
||||
- **Guthaben an Normalarbeitszeit:** mit **50 % Zuschlag** (in
|
||||
allen Fällen; **KV kann Abweichendes vorsehen!**).
|
||||
- **Dienstzeugnis:** ja/ja/ja.
|
||||
- **Ansprüche des Arbeitgebers:**
|
||||
- **Ausbildungskostenrückersatz:** nur bei **verschuldeter**
|
||||
Entlassung.
|
||||
- **Konventionalstrafe:** nur bei **verschuldeter** Entlassung.
|
||||
- Keine §-Zitate in der Quelle (KV-/abgabenrechtliche Matrix).
|
||||
|
||||
## Kernwerte & Fristen (Stand 2026-06)
|
||||
|
||||
| Anspruch | verschuldete | unverschuldete | unberechtigte |
|
||||
|---|---|---|---|
|
||||
| Laufendes Entgelt | ja | ja | ja |
|
||||
| Sonderzahlungen | Ang.: ja / Arb.: meist nein (KV, Rückverrechnung möglich) | Ang.: ja / Arb.: meist ja (KV) | Ang.: ja / Arb.: meist nein (KV) |
|
||||
| Urlaubsersatzleistung | ja (aliquot), keine Rückerstattung | ja (aliquot), keine Rückerstattung | ja (aliquot), keine Rückerstattung |
|
||||
| Abfertigung Alt/Neu | **nein** | ja | ja |
|
||||
| Kündigungsentschädigung | nein | nein | **ja** (SZ-Anteil + Urlaubsanteil für Kündigungsfrist) |
|
||||
| Guthaben Normalarbeitszeit | **50 % Zuschlag** (KV-Vorbehalt) | 50 % Zuschlag (KV-Vorbehalt) | 50 % Zuschlag (KV-Vorbehalt) |
|
||||
| Dienstzeugnis | ja | ja | ja |
|
||||
| AG: Ausbildungskostenrückersatz | **ja** | nein | nein |
|
||||
| AG: Konventionalstrafe | **ja** | nein | nein |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- Keine §-Zitate in der Quelle; die Matrix berührt
|
||||
Sonderzahlungen (KV/§ 87 EStG), Abfertigung (AVRAG/BMSVG),
|
||||
Kündigungsentschädigung (§ 10 AngG) — ⚠ Normen nicht in der
|
||||
Quelle genannt, über lb-end-18/24 und Cluster `end`/`son`
|
||||
beziehen.
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- Die **Dreier-Matrix (verschuldet/unverschuldet/unberechtigt)** ist
|
||||
die Kernentscheidung der Endabrechnung bei Entlassung:
|
||||
Sonderzahlungs-Aliquot, Abfertigungs-Zufluss, Kündigungs-
|
||||
entschädigung (mit SZ-/Urlaubsanteil für die Kündigungsfrist).
|
||||
- **50 % Zuschlag für Normalarbeitszeitguthaben** (KV-Vorbehalt) =
|
||||
Zuschlagsparameter (→ lb-ues-03).
|
||||
- **Ausbildungskostenrückersatz/Konventionalstrafe** als
|
||||
Abzugsposition bei verschuldeter Entlassung (→ lb-end-26).
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-bnd-31 (Entlassung – Folgen und Ansprüche) ·
|
||||
lb-bnd-33 (Entlassungsgründe) · lb-end-18 (Prämien bei
|
||||
Beendigung) · lb-end-24 (Kündigungsentschädigung –
|
||||
Arbeitsrecht) · lb-url-09 (Urlaubsersatzleistung)
|
||||
@@ -0,0 +1,87 @@
|
||||
---
|
||||
id: lb-bnd-47
|
||||
batch: 10
|
||||
title: "Checkliste - Ansprüche beim Austritt"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Beendigungsarten"
|
||||
topic: beendigungsarten
|
||||
author: "Thöny-Maier"
|
||||
stand: 2026-06
|
||||
source:
|
||||
pdf: ".lexis360/uebersichten_checklisten/Lexis360_checkliste_anspruche_beim_austritt.pdf"
|
||||
text: ".lexis360/md/checkliste_anspruche_beim_austritt.md"
|
||||
legal_bases: []
|
||||
tags: [austritt, ansprueche, abfertigung, urlaubsersatzleistung, schadenersatz]
|
||||
cross_refs: ["lb-bnd-09", "lb-bnd-10", "lb-bnd-46"]
|
||||
---
|
||||
|
||||
# Checkliste: Ansprüche beim Austritt
|
||||
|
||||
*Lexis Briefings Personalrecht, Thöny-Maier, Stand Juni 2026 (lb-bnd-47).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
- **Matrize** nach Austrittsart (berechtigt/AG-verschuldet ·
|
||||
berechtigt/AG-unverschuldet · unberechtigter vorzeitiger Austritt) ×
|
||||
Anspruch:
|
||||
- **Ansprüche des Arbeitnehmers:**
|
||||
- **Laufendes Entgelt:** ja/ja/ja.
|
||||
- **(Anteilige) Sonderzahlungen:** ja/ja; **unberechtigt:**
|
||||
Angestellte ja, **Arbeiter meist nein** (KV; auch
|
||||
Rückverrechnung möglich).
|
||||
- **Urlaubsersatzleistung (laufendes Urlaubsjahr):** ja/ja;
|
||||
**unberechtigt: nein**.
|
||||
- **Abfertigung Alt/Neu:** ja/ja; **unberechtigt: nein**.
|
||||
- **Kündigungsentschädigung:** nur bei **AG-verschuldeter**
|
||||
(berechtigt unverschuldeter) — ja; sonst nein.
|
||||
- **Guthaben an Normalarbeitszeit:** mit **50 % Zuschlag**
|
||||
(berechtigte Fälle; **KV kann Abweichendes vorsehen!**);
|
||||
**unberechtigt: ohne 50 % Zuschlag**.
|
||||
- **Dienstzeugnis:** ja/ja/ja.
|
||||
- **Ansprüche des Arbeitgebers:**
|
||||
- **Ausbildungskostenrückersatz:** nur bei **unberechtigtem
|
||||
vorzeitigem Austritt** (ja).
|
||||
- **Konventionalstrafe:** nur bei **unberechtigtem vorzeitigem
|
||||
Austritt** (ja).
|
||||
- **Schadenersatz:** nur bei **unberechtigtem vorzeitigem
|
||||
Austritt** — **sofern konkreter Schaden eingetreten**.
|
||||
- Keine §-Zitate in der Quelle (KV-/arbeitsrechtliche Matrix).
|
||||
|
||||
## Kernwerte & Fristen (Stand 2026-06)
|
||||
|
||||
| Anspruch | berechtigt, AG-versch. | berechtigt, AG-unversch. | unberechtigt |
|
||||
|---|---|---|---|
|
||||
| Laufendes Entgelt | ja | ja | ja |
|
||||
| Sonderzahlungen | ja | ja | Ang.: ja / Arb.: meist nein (KV) |
|
||||
| Urlaubsersatzleistung | ja | ja | **nein** |
|
||||
| Abfertigung Alt/Neu | ja | ja | **nein** |
|
||||
| Kündigungsentschädigung | **ja** | nein | nein |
|
||||
| Guthaben Normalarbeitszeit | **50 % Zuschlag** (KV-Vorbehalt) | 50 % Zuschlag (KV-Vorbehalt) | **ohne 50 % Zuschlag** |
|
||||
| Dienstzeugnis | ja | ja | ja |
|
||||
| AG: Ausbildungskostenrückersatz | nein | nein | **ja** |
|
||||
| AG: Konventionalstrafe | nein | nein | **ja** |
|
||||
| AG: Schadenersatz | nein | nein | **ja (konkreter Schaden)** |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- Keine §-Zitate in der Quelle; die Matrix berührt
|
||||
Abfertigung (AVRAG/BMSVG), Sonderzahlungen (KV/§ 87 EStG),
|
||||
Schadenersatz/Conventionalstrafe (ABGB) — ⚠ Normen nicht in der
|
||||
Quelle genannt, über Cluster `end`/`bso` beziehen.
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- **Austrittsart-Klassifikation** (berechtigt/AG-verschuldet/
|
||||
unberechtigt) ist die Kernentscheidung der Endabrechnung beim
|
||||
Austritt: Abfertigungs-Zufluss, Urlaubsersatzleistung,
|
||||
Kündigungsentschädigung (nur AG-verschuldet), 50 %-Zuschlag
|
||||
(nur berechtigt).
|
||||
- **AG-Ansprüche** (Ausbildungskosten, Konventionalstrafe,
|
||||
Schadenersatz) bei unberechtigtem Austritt = Abzugs-/
|
||||
Regresspositionen (→ lb-end-26).
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-bnd-09 (Austritt – Folgen und Ansprüche) ·
|
||||
lb-bnd-10 (Austrittserklärung) · lb-bnd-46
|
||||
(Ansprüche bei der Entlassung)
|
||||
+90
@@ -0,0 +1,90 @@
|
||||
---
|
||||
id: lb-bnd-48
|
||||
batch: 10
|
||||
title: "Checkliste - Befristetes Arbeitsverhältnis - worauf zu achten ist"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Beendigungsarten"
|
||||
topic: beendigungsarten
|
||||
author: "Thöny-Maier"
|
||||
stand: 2026-06
|
||||
source:
|
||||
pdf: ".lexis360/uebersichten_checklisten/Lexis360_checkliste_befristetes_arbeitsverhaltnis_worauf_zu.pdf"
|
||||
text: ".lexis360/md/checkliste_befristetes_arbeitsverhaltnis_worauf_zu.md"
|
||||
legal_bases: []
|
||||
tags: [befristung, kettendienstvertrag, schwangerschaft, probezeit, zeitauslauf]
|
||||
cross_refs: ["lb-bnd-36", "lb-msf-02"]
|
||||
---
|
||||
|
||||
# Checkliste: Befristetes Arbeitsverhältnis – worauf zu achten ist
|
||||
|
||||
*Lexis Briefings Personalrecht, Thöny-Maier, Stand Juni 2026 (lb-bnd-48).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
- **Vor/bei Vertragsabschluss (am besten schriftlich):**
|
||||
- **Beginn und Ende** festlegen (datumsmäßiger Endtermin oder
|
||||
bestimmtes Ereignis); Befristung kann wenige Wochen bis
|
||||
mehrere Monate/Jahre betragen.
|
||||
- **Probezeit + Befristung** kombinieren (**maximal ein Monat
|
||||
Probezeit, dann Befristung**) oder nur befristen (falls keine
|
||||
automatische KV-Probezeit).
|
||||
- **Zusätzliche Kündigungsmöglichkeit** nur bei längeren
|
||||
Befristungen erwägen — **ab ca. vier, zur Sicherheit besser
|
||||
sechs Monaten** laut Rechtsprechung zulässig.
|
||||
- **Grund der Befristung angeben**.
|
||||
- **Auflösung vor Zeitablauf:** vorzeitige Kündigung **nur bei
|
||||
vereinbarter Kündigungsmöglichkeit**; ansonsten jederzeit
|
||||
möglich: **einvernehmliche Lösung** (am besten schriftlich),
|
||||
**berechtigte Entlassung**, **berechtigter vorzeitiger Austritt**
|
||||
bei wichtigem Grund.
|
||||
- **Zeitablauf:** **automatisches Ende** zum vereinbarten
|
||||
Endzeitpunkt ohne eigene Erklärung; **Empfehlung:** Arbeitnehmer
|
||||
vorher **schriftlich auf das baldige Ende hinweisen**; darauf
|
||||
achten, dass er nach dem letzten Tag **nicht wieder antritt** und
|
||||
**Schlüssel etc. am letzten Arbeitstag nach Arbeitsschluss
|
||||
abgibt**.
|
||||
- **Neuerliche Befristung:** nur bei **anerkennungswürdigem
|
||||
wirtschaftlichem oder sozialem Grund** zulässig, sonst Gefahr des
|
||||
**unzulässigen Kettendienstvertrages** (automatischer Übergang in
|
||||
ein unbefristetes Dienstverhältnis) — **schon bei einer
|
||||
einmaligen Verlängerung** wird die sachliche Rechtfertigung
|
||||
hinterfragt.
|
||||
- **Schwangere Arbeitnehmerin:** bei sachlich gerechtfertigtem
|
||||
Befristungsgrund bleibt der Befristungsablauf wirksam; **ohne
|
||||
sachlichen Grund → Verlängerung bis zum Beginn des
|
||||
Beschäftigungsverbots**.
|
||||
- Keine §-Zitate in der Quelle (Rechtsprechung/KV-Praxis).
|
||||
|
||||
## Kernwerte & Fristen (Stand 2026-06)
|
||||
|
||||
| Prüfpunkt | Regel |
|
||||
|---|---|
|
||||
| Endpunkt | datumsmäßig oder Ereignis; Grund angeben |
|
||||
| Probezeit + Befristung | **max. 1 Monat Probezeit**, dann Befristung |
|
||||
| Kündigungsmöglichkeit in der Befristung | ab **ca. 4–6 Monaten** Befristung (Rechtsprechung) |
|
||||
| Vorzeitige Beendigung | nur bei Klausel; sonst Einvernehmlichkeit/Entlassung/Austritt |
|
||||
| Zeitablauf | **automatisch**; schriftlicher Hinweis + kein Wiederaantritt |
|
||||
| **Neuerliche Befristung** | nur mit **sachlichem Grund**; sonst **Kettendienstvertrag → unbefristet** |
|
||||
| Schwangerschaft | ohne sachlichen Grund: **Verlängerung bis Beschäftigungsverbot** |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- Keine §-Zitate in der Quelle; Kettendienstvertrag-Judikatur
|
||||
(OGH), Schwangerschaftsschutz (§ 10 MSchG) — ⚠ Normen nicht in
|
||||
der Quelle genannt, über lb-bnd-36 und Cluster `msf` beziehen.
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- **Befristungs-Enddatum** = automatischer Vertragsende-Stichtag im
|
||||
Kalendermodell (keine Kündigung, → lb-bnd-36).
|
||||
- **Neuerliche Befristung (Kette)** ist ein Risikofeld (
|
||||
unbefristetes Verhältnis) → bei Vertragsverlängerung
|
||||
sachlichen Grund dokumentieren.
|
||||
- **Schwangerschaftsschutz** (Verlängerung bis
|
||||
Beschäftigungsverbot) = Ausnahme im Beendigungs-Workflow
|
||||
(→ Cluster `msf`).
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-bnd-36 (Zeitablauf bei Befristung) · lb-msf-02
|
||||
(Schwangerschaft, falls vorhanden)
|
||||
@@ -0,0 +1,63 @@
|
||||
---
|
||||
id: lb-bso-12
|
||||
batch: 10
|
||||
title: "Checkliste - Bewertungskriterien"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Beendigungsphase - Sonstiges"
|
||||
topic: beendigungsphase-sonstiges
|
||||
author: "Thöny-Maier"
|
||||
stand: 2026-06
|
||||
source:
|
||||
pdf: ".lexis360/uebersichten_checklisten/Lexis360_checkliste_bewertungskriterien.pdf"
|
||||
text: ".lexis360/md/checkliste_bewertungskriterien.md"
|
||||
legal_bases: []
|
||||
tags: [zeugnis, qualifiziertes-zeugnis, bewertungskriterien, leistungsbeurteilung]
|
||||
cross_refs: ["lb-bso-04", "lb-bso-13", "lb-bso-16"]
|
||||
---
|
||||
|
||||
# Checkliste: Bewertungskriterien
|
||||
|
||||
*Lexis Briefings Personalrecht, Thöny-Maier, Stand Juni 2026 (lb-bso-12).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
- Bei **qualifizierten Zeugnissen** erfolgt eine
|
||||
Leistungsbeurteilung des Dienstnehmers; die Bewertungskriterien
|
||||
stehen in **engem Zusammenhang mit der Art der ausgeübten
|
||||
Tätigkeit**.
|
||||
- **Mögliche Kriterien (Beispielkatalog):** Qualität der Arbeit;
|
||||
Arbeitsanfall/Arbeitsumfang, Erledigungsdauer/Schnelligkeit;
|
||||
Arbeitsweise/Genauigkeit/Gewissenhaftigkeit/Strukturiertheit/
|
||||
Organisationsfähigkeit; Selbständigkeit; Fachkenntnisse;
|
||||
Teamfähigkeit, Verhalten im Umgang mit Vorgesetzten, Kollegen und
|
||||
Kunden; Weiterbildungsbereitschaft; Führungsstärke/Führungsstil;
|
||||
etc.
|
||||
- **Grenze:** es sind **nur jene Kriterien im Zeugnis zu
|
||||
berücksichtigen, die für die ausgeübte Tätigkeit relevant sind**.
|
||||
|
||||
## Kernwerte & Fristen (Stand 2026-06)
|
||||
|
||||
| Punkt | Regel |
|
||||
|---|---|
|
||||
| Kriteriumsauswahl | an die **ausgeübte Tätigkeit** gebunden (relevante Kriterien nur) |
|
||||
| Kriterienkatalog | Qualität, Arbeitsanfall/Dauer, Arbeitsweise/Genauigkeit, Selbständigkeit, Fachkenntnisse, Teamfähigkeit/Umgang, Weiterbildung, Führung |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- Keine §-Zitate in der Quelle (zeugnisrechtliche
|
||||
Leistungsbeurteilung, OGH-Rechtsprechung zum qualifizierten
|
||||
Zeugnis) — ⚠ Norm/Judikatur nicht in der Quelle genannt.
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- Kein Entgelt-/Abrechnungswert; die Checkliste dient der
|
||||
**Zeugnisqualität** (Haftungs-/Anfechtungsrisiko-Minderung) im
|
||||
Beendigungsprozess (→ lb-bso-16).
|
||||
- Im HR-Modell optional als Vorlage für die
|
||||
Leistungsbeurteilungs-Felder nutzen.
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-bso-04 (Dienstzeugnis) · lb-bso-13
|
||||
(notwendige Zeugnisbestandteile) · lb-bso-16
|
||||
(Zeugniserstellung)
|
||||
@@ -0,0 +1,77 @@
|
||||
---
|
||||
id: lb-bnd-49
|
||||
batch: 10
|
||||
title: "Checkliste - Entlassung"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Beendigungsarten"
|
||||
topic: beendigungsarten
|
||||
author: "Thöny-Maier"
|
||||
stand: 2026-06
|
||||
source:
|
||||
pdf: ".lexis360/uebersichten_checklisten/Lexis360_checkliste_entlassung.pdf"
|
||||
text: ".lexis360/md/checkliste_entlassung.md"
|
||||
legal_bases: []
|
||||
tags: [entlassung, verfahren, betriebsrat, beweis, dienstfreistellung]
|
||||
cross_refs: ["lb-bnd-32", "lb-bnd-33", "lb-bnd-12"]
|
||||
---
|
||||
|
||||
# Checkliste: Entlassung
|
||||
|
||||
*Lexis Briefings Personalrecht, Thöny-Maier, Stand Juni 2026 (lb-bnd-49).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
- **Ablauf nach Kenntnis vom Vorfall (unverzüglich):**
|
||||
1. **Wann** war der Vorfall?
|
||||
2. Ist der **Sachverhalt klar**?
|
||||
3. **Zeugen** für den Vorfall suchen, **Protokoll erstellen**.
|
||||
4. Falls klar: Soll **wegen** des Vorfalls entlassen werden (falls
|
||||
möglich)? → **unverzügliche Kontaktaufnahme mit dem
|
||||
Rechtsvertreter**; reicht der Sachverhalt für eine Entlassung?
|
||||
5. **Gleichzeitig:** ob ein **besonderer Entlassungsschutz**
|
||||
besteht.
|
||||
6. Falls der Sachverhalt als Entlassungsgrund ausreicht:
|
||||
**unverzüglich Entlassung aussprechen** bzw. entsprechendes
|
||||
Verfahren einleiten; **zur Beweissicherung auch schriftlich
|
||||
aussprechen**; bei mündlicher Entlassung **Zeugen herbeirufen**.
|
||||
7. **Unverzügliche Verständigung des Betriebsrates** von der
|
||||
Entlassung.
|
||||
8. Falls Sachverhalt **unklar**: Arbeitnehmer **dienstfrei stellen**,
|
||||
**Entlassungsrecht vorbehalten** und darlegen, dass der
|
||||
Sachverhalt geklärt werden muss → **unverzüglich
|
||||
aufklären**, danach wie unter Punkt 3.
|
||||
- Keine §-Zitate in der Quelle (Prozesscheckliste).
|
||||
|
||||
## Kernwerte & Fristen (Stand 2026-06)
|
||||
|
||||
| Schritt | Kernaufgabe |
|
||||
|---|---|
|
||||
| 1–3 | Vorfall (Wann?), Sachverhalt klar?, Zeugen + Protokoll |
|
||||
| 4 | Entlassungsentscheidung + **Rechtsvertreter-Kontakt** |
|
||||
| 5 | **besonderer Entlassungsschutz** prüfen |
|
||||
| 6 | **unverzüglich** aussprechen; **schriftlich** (Beweissicherung); Zeugen |
|
||||
| 7 | **Betriebsrat unverzüglich verständigen** |
|
||||
| 8 | unklar → **dienstfrei stellen**, Entlassungsrecht vorbehalten, aufklären |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- Keine §-Zitate in der Quelle; die Checkliste berührt das
|
||||
Entlassungsrecht (Entlassungsausspruch, § 25 AngG; BR-
|
||||
Mitwirkung § 240 lit b ASchG) — ⚠ Normen nicht in der Quelle
|
||||
genannt, über lb-bnd-32/33 beziehen.
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- Kein Entgelt-/Abrechnungswert; die Checkliste ist ein
|
||||
**Prozessworkflow** im Beendigungs-Bereich (→ lb-bnd-32) und
|
||||
sichert die **Beweissicherung** (Schriftform, Zeugen) sowie die
|
||||
**BR-Verständigung** als Verfahrensvoraussetzung.
|
||||
- **Dienstfreistellung mit Entlassungsrechtsvorbehalt** (Punkt 8)
|
||||
ist ein Zwischenstatus im Kalendermodell (Entgeltfortzahlung
|
||||
prüfen, → Cluster `bso`).
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-bnd-32 (Entlassungsausspruch) · lb-bnd-33
|
||||
(Entlassungsgründe) · lb-bnd-12 (Besonderer
|
||||
Entlassungsschutz)
|
||||
+81
@@ -0,0 +1,81 @@
|
||||
---
|
||||
id: lb-bnd-50
|
||||
batch: 10
|
||||
title: "Checkliste - Kündigungsanfechtung Arbeitgeber"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Beendigungsarten"
|
||||
topic: beendigungsarten
|
||||
author: "Thöny-Maier"
|
||||
stand: 2026-07
|
||||
source:
|
||||
pdf: ".lexis360/uebersichten_checklisten/Lexis360_checkliste_kundigungsanfechtung_arbeitgeber.pdf"
|
||||
text: ".lexis360/md/checkliste_kundigungsanfechtung_arbeitgeber.md"
|
||||
legal_bases: []
|
||||
tags: [kundigungsanfechtung, asg, rechtschutz, vergleich, betriebsrat]
|
||||
cross_refs: ["lb-bnd-38", "lb-bso-14", "lb-bso-17", "lb-end-19"]
|
||||
---
|
||||
|
||||
# Checkliste: Kündigungsanfechtung (Arbeitgeber)
|
||||
|
||||
*Lexis Briefings Personalrecht, Thöny-Maier, Stand Juli 2026 (lb-bnd-50).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
- **Unmittelbare Schritte bei Anfechtung:**
|
||||
1. **Rechtsschutzversicherung** abklären (übernimmt die
|
||||
Verfahrenskosten)?
|
||||
2. **Unverzügliche Kontaktaufnahme mit dem Rechtsvertreter**
|
||||
(Rechtsanwalt, Wirtschaftskammer).
|
||||
3. **Klage genau durchlesen**, Verwendbarkeit überlegen,
|
||||
Stichworte notieren.
|
||||
- **⚠ Kostenhinweis der Quelle:** „In diesem Verfahren gibt es
|
||||
**keinen Kostenersatz durch die Gegenseite** — auch dann nicht,
|
||||
wenn man gewinnt."
|
||||
- **Unterlagen für die Besprechung:**
|
||||
1. alle zur **Kündigungsnotwendigkeit** (betriebliche
|
||||
Rationalisierungsmaßnahmen, personenbezogene Kündigungsgründe,
|
||||
Personalstruktur, Versetzungsmöglichkeit); **Zeugenliste**
|
||||
(Namen/Adressen).
|
||||
2. **Kopie der Klagsschrift**.
|
||||
3. **Kopie der Kündigung** sowie der **Schreiben an/vom
|
||||
Betriebsrat**.
|
||||
4. **Intern: finanzielle Vergleichsregelung** prüfen (Gerichts-
|
||||
Verfahren beilegen); mögliche Höhe der **Vergleichszahlung**
|
||||
abklären, **Handlungsvollmacht** für die Verhandlung erteilen
|
||||
lassen; **günstigste Verrechnungsmöglichkeit der
|
||||
Vergleichszahlung durch die Lohnverrechnung** berechnen
|
||||
lassen.
|
||||
- Keine §-Zitate in der Quelle (ASG-Praxis).
|
||||
|
||||
## Kernwerte & Fristen (Stand 2026-07)
|
||||
|
||||
| Schritt | Kernaufgabe |
|
||||
|---|---|
|
||||
| 1 | Rechtsschutzversicherung (Kosten) abklären |
|
||||
| 2 | **unverzüglich** Rechtsvertreter |
|
||||
| 3 | Klage lesen, Stichworte |
|
||||
| Unterlagen | Kündigungsnotwendigkeit + Zeugenliste; Klagsschrift; Kündigung + BR-Schreiben |
|
||||
| Vergleich | Höhe abklären, **Vollmacht**, **Lohnverrechnung: günstigste Verrechnung** |
|
||||
| Kosten | **kein Kostenersatz** durch Gegenseite (auch bei Sieg) |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- Keine §-Zitate in der Quelle (ASG-Klage, §§ 23/24 AngG;
|
||||
Vergleichszahlungen § 67 EStG) — ⚠ Normen nicht in der Quelle
|
||||
genannt, über lb-bso-10/17 und lb-end-19/21 beziehen.
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- **Vergleichszahlung: „günstigste Verrechnungsmöglichkeit
|
||||
durch die Lohnverrechnung"** ist die direkte Schnittstelle zur
|
||||
PV-Abrechnung (Sechstel/Fünftel-Aufteilung, SV/LSt-Behandlung —
|
||||
→ lb-end-19/20/21/22).
|
||||
- **BR-Schreiben** (Kommunikation an/vom Betriebsrat) als
|
||||
Verfahrensdokument im Beendigungs-Workflow (→ lb-bnd-38).
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-bnd-38 (Besonderer Kündigungsschutz) ·
|
||||
lb-bso-14 (Sinnhaftigkeit Klage) · lb-bso-17
|
||||
(Verfahrensvorbereitung) · lb-end-19 (Vergleich –
|
||||
Arbeitsrecht)
|
||||
@@ -0,0 +1,102 @@
|
||||
---
|
||||
id: lb-end-33
|
||||
batch: 10
|
||||
title: "Checkliste - Kündigungsentschädigung"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Beendigungsansprüche & Endabrechnung"
|
||||
topic: endabrechnung
|
||||
author: "Haider"
|
||||
stand: 2025-06
|
||||
source:
|
||||
pdf: ".lexis360/uebersichten_checklisten/Lexis360_checkliste_kundigungsentschadigung.pdf"
|
||||
text: ".lexis360/md/checkliste_kundigungsentschadigung.md"
|
||||
legal_bases: []
|
||||
tags: [kundigungsentschaedigung, bemessungsgrundlage, mitverschulden, verfallsfrist, bestandsschutz, anrechnung]
|
||||
cross_refs: ["lb-end-23", "lb-end-24", "lb-bnd-38"]
|
||||
---
|
||||
|
||||
# Checkliste: Kündigungsentschädigung — Was ist zu tun?
|
||||
|
||||
*Lexis Briefings Personalrecht, Haider, Stand Juni 2025 ⚠ Alter Stand (lb-end-33).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
- **Auflösungsform prüfen:** Anspruch besteht nur bei
|
||||
- **unbegründeter Entlassung**,
|
||||
- **gerechtfertigtem vorzeitigem Austritt** aus Verschulden des
|
||||
Arbeitgebers,
|
||||
- **Auflösung in der Probezeit** — so die Auflösungserklärung
|
||||
**außerhalb des Probemonats** zugeht,
|
||||
- **Dienstgeberkündigung** unter Nichteinhaltung der
|
||||
Kündigungsfristen bzw. Fehlen einer Kündigungsmöglichkeit (zB
|
||||
während einer Befristung, **bestandgeschützte Arbeitnehmer**).
|
||||
- **Zeitraum bestimmen:** Entgelt für jenen Zeitraum, der bei
|
||||
ordnungsgemäßer Arbeitgeberkündigung (Frist + Termin) einzuhalten
|
||||
gewesen wäre — bzw. bei befristetem DV: jener Zeitraum **bis zum
|
||||
Ablauf der Befristung**.
|
||||
- **Mitverschulden des Arbeitnehmers** prüfen → bei Vorliegen die
|
||||
Kündigungsentschädigung **entsprechend reduzieren**.
|
||||
- **Bemessungsgrundlage** (zu berücksichtigen):
|
||||
- laufende Bezüge,
|
||||
- Entgelt für **regelmäßig geleistete Überstunden**,
|
||||
- Zulagen,
|
||||
- Provisionen/Prämien,
|
||||
- Sachbezüge,
|
||||
- **Sonderzahlungen** für den Zeitraum der fiktiven
|
||||
Restvertragsdauer,
|
||||
- Erhöhung der **Urlaubsersatzleistung** für die fiktive
|
||||
Restvertragsdauer,
|
||||
- evtl. Erhöhung der **Abfertigungsansprüche** bei Sprung.
|
||||
- **Sonderregelungen für bestandgeschützte** Arbeitsverhältnisse
|
||||
berücksichtigen: **Betriebsräte, Mütter in Karenz, Lehrlinge,
|
||||
Präsenz-/Zivildiener und Behinderte** (→ lb-bnd-38).
|
||||
- **Verfallsfrist:** **sechs Monate** ab dem Tag der Auflösung (KV
|
||||
berücksichtigen) — danach nur noch gerichtlich geltend gemacht,
|
||||
sonst **verfallen**.
|
||||
- **Abgaben** der Kündigungsentschädigung berechnen (allfällige
|
||||
steuerliche Sonderregelungen beachten → lb-end-23).
|
||||
- **Anspruch über drei Monate:** Fälligkeit des übersteigenden Teils
|
||||
entsteht **wie bei fortlaufendem Dienstverhältnis**; für den
|
||||
über drei Monate liegenden Zeitraum jenes Entgelt **anrechnen**, das
|
||||
sich der Arbeitnehmer durch die ausgebliebene Arbeitsleistung
|
||||
erspart hat bzw. durch andere Einkommen erzielen konnte (ebenfalls
|
||||
anrechnen, wenn keine Anstrengungen zur Ersatzarbeitsplatzsuche
|
||||
unternommen wurden).
|
||||
|
||||
## Kernwerte & Fristen (Stand 2025-06, ⚠ Alter Stand)
|
||||
|
||||
| Kriterium | Regel |
|
||||
|---|---|
|
||||
| Anspruchstatbestände | unbegründete Entlassung · begründeter Austritt aus AN-Verschulden · Auflösung in Probezeit (Zugang außerhalb Probemonats) · AG-Kündigung (Fristverstoß/keine Möglichkeit) |
|
||||
| Zeitraum | Frist + nächster Termin (bzw. Befristungsende) |
|
||||
| Mitverschulden | Reduktion der Entschädigung |
|
||||
| Bemessung | laufende Bezüge + regelmäßige Überstunden + Zulagen + Provisionen/Prämien + Sachbezüge + SZ + UEL-Erhöhung + Abfertigungs-Sprung |
|
||||
| Verfallsfrist | **6 Monate** ab Auflösung (KV-Abweichung prüfen) |
|
||||
| Über 3 Monate | Fälligkeit wie bei Fortbestand; Anrechnung ersparter Kosten/anderer Einkommen |
|
||||
| Bestandsschutz | Betriebsrat, Karenzmütter, Lehrlinge, Präsenz-/Zivildiener, Behinderte |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- Keine §-Zitate in der Checkliste (Praxispunkte). Rechtsrahmen:
|
||||
→ lb-end-24 (Arbeitsrecht), lb-end-23 (Abgabenrecht);
|
||||
Besonderer Kündigungsschutz → lb-bnd-38.
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- **Kündigungsentschädigung** ist eine eigene Beendigungsleistung mit
|
||||
eigener Bemessungslogik (fiktive Restlaufzeit × Bezüge-Bestandteile)
|
||||
→ als Regelkette in der Endabrechnung implementieren, nicht als
|
||||
Pauschale.
|
||||
- **Mitverschulden-Reduktion** ist ein manueller Korrekturfaktor
|
||||
(Prozentsatz) — als `hr.rule.parameter`-Override je Fall.
|
||||
- **Verfallsfrist (6 Monate)** ist ein harter Fristanker — in der
|
||||
Fälligungslogik prüfen.
|
||||
- **Anrechnung (über 3 Monate)** ist eine eigene
|
||||
Bemessungsgrundlage-Korrektur — als separater Abzug in der
|
||||
Berechnung.
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-end-23 (Kündigungsentschädigung —
|
||||
Abgabenrecht) · lb-end-24 (Arbeitsrecht) · lb-bnd-38 (Besonderer
|
||||
Kündigungsschutz) · lb-bnd-40/41 (Kündigungsfristen)
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
---
|
||||
id: lb-bso-13
|
||||
batch: 10
|
||||
title: "Checkliste - notwendige Zeugnisbestandteile"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Beendigungsphase - Sonstiges"
|
||||
topic: beendigungsphase-sonstiges
|
||||
author: "Thöny-Maier"
|
||||
stand: 2026-06
|
||||
source:
|
||||
pdf: ".lexis360/uebersichten_checklisten/Lexis360_checkliste_notwendige_zeugnisbestandteile.pdf"
|
||||
text: ".lexis360/md/checkliste_notwendige_zeugnisbestandteile.md"
|
||||
legal_bases: []
|
||||
tags: [zeugnis, dienstzeugnis, arbeitszeugnis, zwischenzeugnis, bestandteile]
|
||||
cross_refs: ["lb-bso-04", "lb-bso-12", "lb-bso-15"]
|
||||
---
|
||||
|
||||
# Checkliste: notwendige Zeugnisbestandteile
|
||||
|
||||
*Lexis Briefings Personalrecht, Thöny-Maier, Stand Juni 2026 (lb-bso-13).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
- **Acht Pflichtbestandteile** (für alle Zeugnissorten):
|
||||
1. **Überschrift** (Dienstzeugnis bei Angestellten,
|
||||
Arbeitszeugnis bei Arbeitern, Zwischenzeugnis bei aufrechtem
|
||||
Arbeitsverhältnis).
|
||||
2. **Personalien** des Arbeitnehmers (Name, Titel, Geburtsdatum,
|
||||
Adresse).
|
||||
3. **Dauer der Beschäftigung** (Eintritt bis Endzeitpunkt; bei
|
||||
Zwischenzeugnis: Hinweis, dass das Arbeitsverhältnis in
|
||||
ungekündigtem Zustand aufrecht ist, allenfalls Begründung der
|
||||
Ausstellung, z. B. Wechsel in Leitung).
|
||||
4. **Art der Beschäftigung** (branchenübliche Bezeichnung).
|
||||
5. **Aufzählung der verrichteten Tätigkeiten** (Arbeiter) bzw. der
|
||||
**übertragenen Aufgabengebiete** (Angestellte) — genaue
|
||||
Tätigkeitsbeschreibung, **Leitungsbefugnisse,
|
||||
Vertretungsbefugnisse**.
|
||||
6. **Datum und Ort** der Ausstellung.
|
||||
7. **Eigenhändige Unterschrift**.
|
||||
8. Auszufertigen **auf dem auch sonst verwendeten Briefpapier**.
|
||||
|
||||
## Kernwerte & Fristen (Stand 2026-06)
|
||||
|
||||
| Bestandteil | Detail |
|
||||
|---|---|
|
||||
| 1 Überschrift | je Zeugnissorte (Dienst-/Arbeits-/Zwischenzeugnis) |
|
||||
| 2 Personalien | Name, Titel, Geburtsdatum, Adresse |
|
||||
| 3 Dauer | Eintritt–Ende; Zwischenzeugnis: ungekündigter Zustand + Begründung |
|
||||
| 4 Art | branchenübliche Bezeichnung |
|
||||
| 5 Tätigkeiten | Arbeiter: verrichtete Tätigkeiten; Angestellte: Aufgabengebiete, Leitung/Vertretung |
|
||||
| 6–8 Form | Datum/Ort; eigenhändige Unterschrift; übliches Briefpapier |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- Keine §-Zitate in der Quelle (zeugnisrechtliche Mindestinhalte,
|
||||
OGH-Praxis) — ⚠ Norm/Judikatur nicht in der Quelle genannt.
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- Kein Entgelt-/Abrechnungswert; **Dauer der Beschäftigung**
|
||||
(Eintritt–Ende) ist aber eine Abgrenzungsgröße für
|
||||
Abfertigungs-/Vordienstzeiten-Prüfungen (→ Cluster `end`, `bes`).
|
||||
- Die Checkliste dient der **Vollständigkeit** des Zeugnisses im
|
||||
Beendigungsprozess (→ lb-bso-04, lb-bso-16).
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-bso-04 (Dienstzeugnis) · lb-bso-12
|
||||
(Bewertungskriterien) · lb-bso-15 (unzulässige Anmerkungen) ·
|
||||
lb-bso-16 (Zeugniserstellung)
|
||||
@@ -0,0 +1,70 @@
|
||||
---
|
||||
id: lb-bso-14
|
||||
batch: 10
|
||||
title: "Checkliste - Sinnhaftigkeit Klage"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Beendigungsphase - Sonstiges"
|
||||
topic: beendigungsphase-sonstiges
|
||||
author: "Thöny-Maier"
|
||||
stand: 2026-07
|
||||
source:
|
||||
pdf: ".lexis360/uebersichten_checklisten/Lexis360_checkliste_sinnhaftigkeit_klage.pdf"
|
||||
text: ".lexis360/md/checkliste_sinnhaftigkeit_klage.md"
|
||||
legal_bases: []
|
||||
tags: [klage, asg, rechtsschutzversicherung, kostenrisiko, beweis]
|
||||
cross_refs: ["lb-bso-10", "lb-bso-17"]
|
||||
---
|
||||
|
||||
# Checkliste: Sinnhaftigkeit Klage
|
||||
|
||||
*Lexis Briefings Personalrecht, Thöny-Maier, Stand Juli 2026 (lb-bso-14).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
- **Vor Einbringung einer Klage** sind zu erwägen:
|
||||
- Wurde die Forderung **bereits außergerichtlich** gestellt (am
|
||||
besten **schriftlich mit Nachweis des Zugangs an die richtige
|
||||
Person**)?
|
||||
- Bestehen **Gegenforderungen**? Falls ja, in welcher Höhe?
|
||||
- Welche **Beweise** für die Richtigkeit der Forderung sind
|
||||
vorhanden? Sind diese Beweise auch **verfügbar**?
|
||||
- Ist eine **Rechtsschutzversicherung** vorhanden, die ein
|
||||
Kostenrisiko übernimmt? (Falls ja und die nachfolgenden Fragen
|
||||
ebenfalls bejaht: **gleich Versicherungsfall melden und
|
||||
Deckungsanfrage veranlassen**.)
|
||||
- Steht der **allfällige Gewinn mit den Aufwendungen in einem
|
||||
ökonomischen Verhältnis**?
|
||||
- Ist der **Beklagte überhaupt zahlungsfähig** und in der Lage, in
|
||||
absehbarer Zeit zu bezahlen? (Falls nicht: auch ein positives
|
||||
Urteil wirkt faktisch nichts.)
|
||||
- Keine §-Zitate in der Quelle (prozesstaktische Checkliste).
|
||||
|
||||
## Kernwerte & Fristen (Stand 2026-07)
|
||||
|
||||
| Prüfschritt | Kernaufgabe |
|
||||
|---|---|
|
||||
| Außergerichtliche Geltendmachung | schriftlich, Zugangsnachweis, richtige Person |
|
||||
| Gegenforderungen | Höhe eruieren |
|
||||
| Beweise | vorhanden + verfügbar |
|
||||
| Rechtsschutzversicherung | **Versicherungsfall melden, Deckungsanfrage** (vor Klag einbringen) |
|
||||
| Ökonomie | Gewinn vs. Aufwendungen |
|
||||
| Zahlungsunfähigkeit | Vollstreckbarkeit prüfen |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- Keine §-Zitate in der Quelle (ASG-Prozesspraxis) — ⚠
|
||||
Verfahrensrahmen (ASG, EO) nicht in der Quelle genannt.
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- Kein Entgelt-/Abrechnungswert; die Checkliste ist ein
|
||||
**Entscheidungsprozess** im Beendigungs-/Streitfall-Workflow
|
||||
(→ lb-bso-10, lb-bso-17) und schützt vor wirtschaftlich
|
||||
sinnlosen Verfahren.
|
||||
- **Zahlungsfähigkeitsprüfung** des Arbeitgebers/Arbeitnehmers als
|
||||
Risiko-Input im Prozess-Modell.
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-bso-10 (Verfahren vor dem ASG) · lb-bso-17
|
||||
(Verfahrensvorbereitung)
|
||||
@@ -0,0 +1,76 @@
|
||||
---
|
||||
id: lb-bso-15
|
||||
batch: 10
|
||||
title: "Checkliste - Unzulässige Anmerkungen"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Beendigungsphase - Sonstiges"
|
||||
topic: beendigungsphase-sonstiges
|
||||
author: "Thöny-Maier"
|
||||
stand: 2026-06
|
||||
source:
|
||||
pdf: ".lexis360/uebersichten_checklisten/Lexis360_checkliste_unzulassige_anmerkungen.pdf"
|
||||
text: ".lexis360/md/checkliste_unzulassige_anmerkungen.md"
|
||||
legal_bases: []
|
||||
tags: [zeugnis, unzulassige-anmerkungen, diskriminierung, betriebsrat, datenschutz]
|
||||
cross_refs: ["lb-bso-04", "lb-bso-13", "lb-glb-01"]
|
||||
---
|
||||
|
||||
# Checkliste: Unzulässige Anmerkungen
|
||||
|
||||
*Lexis Briefings Personalrecht, Thöny-Maier, Stand Juni 2026 (lb-bso-15).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
- **Nicht erwähnen dürfen im Zeugnis:**
|
||||
- eine **Betriebsratstätigkeit**;
|
||||
- die **Zugehörigkeit zur bzw. Tätigkeit in der
|
||||
Gewerkschaft**;
|
||||
- eine **Schwangerschaft**;
|
||||
- **Krankheiten oder krankheitsbedingte Abwesenheiten,
|
||||
Behinderteneigenschaft**;
|
||||
- **außerdienstliche Angelegenheiten und
|
||||
Verhaltensweisen**;
|
||||
- **Straftaten**;
|
||||
- die **Beendigungsart** (insbesondere bei Entlassung und
|
||||
Austritt) und/oder
|
||||
- **rechtliche Auseinandersetzungen** während des aufrechten
|
||||
Arbeitsverhältnisses oder im Zuge der Beendigung.
|
||||
- **Ausnahme für die ersten beiden Punkte** (Betriebsrat/
|
||||
Gewerkschaft): Erwähnung zulässig, **wenn der Arbeitnehmer es
|
||||
wünscht**.
|
||||
- ⚠ Die Checkliste führt keine §-Normen (Diskriminierungsverbot,
|
||||
Datenschutz, Zeugnisrecht) an — die Begründung der
|
||||
Verbotstatbestände über die Cluster `glb`, `mel` (Datenschutz)
|
||||
beziehen.
|
||||
|
||||
## Kernwerte & Fristen (Stand 2026-06)
|
||||
|
||||
| Verbotstatbestand | Ausnahme |
|
||||
|---|---|
|
||||
| Betriebsratstätigkeit | auf Wunsch des Arbeitnehmers |
|
||||
| Gewerkschaftszugehörigkeit/-tätigkeit | auf Wunsch des Arbeitnehmers |
|
||||
| Schwangerschaft | – |
|
||||
| Krankheiten/krankheitsbedingte Abwesenheiten, Behinderteneigenschaft | – |
|
||||
| Außerdienstliche Angelegenheiten/Verhaltensweisen | – |
|
||||
| Straftaten | – |
|
||||
| Beendigungsart (insb. Entlassung, Austritt) | – |
|
||||
| Rechtliche Auseinandersetzungen (aufrecht/bei Beendigung) | – |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- Keine §-Zitate in der Quelle; die Verbotstatbestände gründen im
|
||||
Diskriminierungsverbot (GlBG), im Datenschutz (DSGVO/DSB) und im
|
||||
Zeugnisrecht (OGH-Praxis) — ⚠ Normen nicht in der Quelle genannt.
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- Kein Entgelt-/Abrechnungswert; die Checkliste ist eine
|
||||
**Freigabe-/Prüfbarriere** im Zeugniserstellungsprozess
|
||||
(→ lb-bso-16) und reduziert Diskriminierungs-/Anfechtungsrisiko
|
||||
(→ Cluster `glb`).
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-bso-04 (Dienstzeugnis) · lb-bso-13
|
||||
(Zeugnisbestandteile) · lb-bso-16 (Zeugniserstellung) · lb-glb-01
|
||||
(Gleichbehandlung)
|
||||
+102
@@ -0,0 +1,102 @@
|
||||
---
|
||||
id: lb-bnd-51
|
||||
batch: 10
|
||||
title: "Checkliste - Vorgehensweise Kündigung (Arbeitgeber)"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Beendigungsarten"
|
||||
topic: beendigungsarten
|
||||
author: "Thöny-Maier"
|
||||
stand: 2026-07
|
||||
source:
|
||||
pdf: ".lexis360/uebersichten_checklisten/Lexis360_checkliste_vorgehensweise_kundigung_arbeitgeber.pdf"
|
||||
text: ".lexis360/md/checkliste_vorgehensweise_kundigung_arbeitgeber.md"
|
||||
legal_bases: ["§ 77 GewO 1859", "§§ 1159 ff ABGB"]
|
||||
tags: [kundigung, fruhwarnsystem, frist, termin, form, betriebsrat, arbeiter, angestellter]
|
||||
cross_refs: ["lb-bnd-39", "lb-bnd-40", "lb-bnd-41", "lb-bnd-42", "lb-bnd-50"]
|
||||
---
|
||||
|
||||
# Checkliste: Vorgehensweise Kündigung (Arbeitgeber)
|
||||
|
||||
*Lexis Briefings Personalrecht, Thöny-Maier, Stand Juli 2026 (lb-bnd-51).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
- **1. Kündigungsschutz prüfen:** falls vorhanden → jeweiliges
|
||||
Verfahren einhalten (z. B. **vorab Zustimmung des
|
||||
Gerichts**); ansonsten weiter.
|
||||
- **2. Frühwarnsystem (AMS)** prüfen: falls einzuhalten →
|
||||
**Mitteilung an das AMS**; **Sperrfrist bis zum Ausspruch**
|
||||
beachten.
|
||||
- **3. Befristungs-Prüfung:** Befristung **ohne**
|
||||
Kündigungsmöglichkeit → **Schreiben: keine Verlängerung über
|
||||
das Ende hinaus** senden; mit Kündigungsmöglichkeit → weiter.
|
||||
- **4. Arbeiter oder Angestellter?**
|
||||
- **4.1 Arbeiter** *(Anmerkung der Quelle: „noch gültig für
|
||||
Kündigungsausspruch bis zum 31. 12. 2020")*: KV auf
|
||||
Kündigungsfrist/-termin prüfen; **Einzelvertragliche
|
||||
Besserstellung** einhalten; ohne KV → **§ 77 GewO 1859**;
|
||||
ohne Gewerbebetrieb → **§§ 1159 ff ABGB** (je nach
|
||||
Tätigkeitsart); Besserstellung durch Arbeitsvertrag
|
||||
vorgehend.
|
||||
- **4.2 Angestellter:** Dienstvertrag auf Frist/Termin; keine
|
||||
Regelung → **gesetzliche Regelung**; Vertragliche Regelung
|
||||
darauf prüfen, ob sie **nicht durch den KV ausgeschlossen**
|
||||
ist.
|
||||
- **4.3 Beide:** **Formvorschrift** (schriftlich, Einschreiben)
|
||||
gegebenenfalls einhalten; ohne Formvorschrift auch mündlich
|
||||
möglich, **schriftlich aus Beweisgründen empfehlenswert**;
|
||||
**begründete Kündigung** im Kündigungsschreiben anführen;
|
||||
**Dienstfreistellung während der Kündigungsfrist** klären
|
||||
(Rücksprache Fachabteilung).
|
||||
- **5. Betriebsrat:** Info an den zuständigen BR, dass gekündigt
|
||||
werden soll; **Erhalt bestätigen lassen**; **Frist bzw.
|
||||
Stellungnahme abwarten**; danach unverzüglich weiter.
|
||||
- **6. Ausspruch:** aktuelle Adresse; **unverzüglich Post
|
||||
(eingeschrieben, Postweg einkalkulieren) oder direkte Übergabe
|
||||
(Erhalt bestätigen/Zeugen)**.
|
||||
- **7. Information:** **Kopie an die lohnverrechnende Stelle**;
|
||||
Mitteilung an den **direkten Vorgesetzten** (Kündigung erfolgt);
|
||||
Mitteilung an den **BR** (Kündigung erfolgt).
|
||||
- **Rechtsgrundlagen:** **§ 77 GewO 1859** und **§§ 1159 ff
|
||||
ABGB** — in der Checkliste zitiert (Arbeiter-Fall);
|
||||
KV/Einzelvertrag-Vorbehalt.
|
||||
|
||||
## Kernwerte & Fristen (Stand 2026-07)
|
||||
|
||||
| Schritt | Kernaufgabe |
|
||||
|---|---|
|
||||
| 1 | Kündigungsschutz (ggf. vorab Gerichts-Zustimmung) |
|
||||
| 2 | **AMS-Frühwarnsystem** + **Sperrfrist** |
|
||||
| 3 | Befristung ohne/mit Kündigungsmöglichkeit trennen |
|
||||
| 4 | **Frist/Termin:** KV → Einzelvertrag → (Arbeiter: § 77 GewO 1859 / §§ 1159 ff ABGB; Angestellter: gesetzliche Regelung) |
|
||||
| 4.3 | **Form** (ggf. Schrift/Einschreiben); Begründung; Dienstfreistellung klären |
|
||||
| 5 | **BR: Info + Erhalt + Frist/Stellungnahme abwarten** |
|
||||
| 6 | **Eingeschrieben (Postweg!) oder Übergabe mit Beweis** |
|
||||
| 7 | **Kopie an Lohnverrechnung**, Vorgesetzter, BR |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- **§ 77 GewO 1859** (Kündigungsfrist Arbeiter ohne KV) — zitiert.
|
||||
- **§§ 1159 ff ABGB** (Kündigungsfristen außerhalb Gewerbebetrieb) —
|
||||
zitiert.
|
||||
- Frühwarnsystem (FLAG), BR-Mitwirkung (§ 240 lit b ASchG) — als
|
||||
Begriffe genannt, ohne §-Zitat ⚠.
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- **Kündigungsausspruch + Kündigungsfrist/Termin** sind die
|
||||
Kernwerte des Beendigungs-Workflows (Enddatum,
|
||||
Kündigungsentschädigung, SZ-Aliquot, → lb-bnd-39/40/41).
|
||||
- **Kopie an die lohnverrechnende Stelle** = interner
|
||||
Beendigungs-Brief; die PV nimmt daraus das
|
||||
Beendigungsdatum/-art für die Endabrechnung.
|
||||
- **Frühwarnsystem (AMS) + Sperrfrist** ist eine
|
||||
Verfahrensvoraussetzung, die den **Ausspruchstermin** begrenzt
|
||||
(→ lb-bnd-42).
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-bnd-39 (Kündigungsausspruch) · lb-bnd-40/41
|
||||
(Kündigungsfristen Angestellte/Arbeiter) · lb-bnd-42
|
||||
(Kündigungsfrühwarnsystem) · lb-bnd-50
|
||||
(Kündigungsanfechtung)
|
||||
@@ -0,0 +1,103 @@
|
||||
---
|
||||
id: lb-swa-06
|
||||
batch: 10
|
||||
title: "Checkliste - Vorliegen von Schwerarbeit"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Arbeitszeit"
|
||||
topic: schwerarbeit
|
||||
author: "Schreiber"
|
||||
stand: 2026-07
|
||||
source:
|
||||
pdf: ".lexis360/uebersichten_checklisten/Lexis360_checkliste_vorliegen_von_schwerarbeit.pdf"
|
||||
text: ".lexis360/md/checkliste_vorliegen_von_schwerarbeit.md"
|
||||
legal_bases: ["Schwerarbeitsverordnung"]
|
||||
tags: [schwerarbeit, meldepflicht, schichtarbeit, nachtschichten, schwere-korperliche-arbeit, leiharbeiter]
|
||||
cross_refs: ["lb-swa-01", "lb-swa-02", "lb-swa-04", "lb-swa-05"]
|
||||
---
|
||||
|
||||
# Checkliste: Vorliegen von Schwerarbeit
|
||||
|
||||
*Lexis Briefings Personalrecht, Schreiber, Stand Juli 2026 (lb-swa-06).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
- **Allgemeines:** im Betrieb beschäftigte **Männer ab 40, Frauen ab 35
|
||||
Lebensjahr** herausfiltern; **Leiharbeiter** sind nicht vom
|
||||
Beschäftiger, sondern vom **Überlasser** zu melden. **Praxistipp:**
|
||||
der Beschäftiger gibt dem Überlasser am Jahresende bekannt, welche
|
||||
Leiharbeiter (altersgerecht) im abgelaufenen Kalenderjahr
|
||||
Schwerarbeit verrichtet haben, in welchen Kalendermonaten und nach
|
||||
welcher **Ziffer der Schwerarbeitsverordnung**.
|
||||
- **Schicht-/Wechseldienst:** Dauernde Nachtarbeit fällt **nicht**
|
||||
darunter — es muss pro Monat zumindest **ein Wechsel zu einem
|
||||
Tagdienst** stattfinden; Arbeitszeit **mind. 6 Stunden zwischen 22
|
||||
Uhr und 6 Uhr**; **überwiegend** (mehr als die Hälfte) nicht
|
||||
Arbeitsbereitschaft; **Nachtschichten-Schwelle (Staffelung):**
|
||||
mind. **6 im Kalendermonat**, sonst **12 in diesem + dem
|
||||
vorangegangenen Monat**, sonst **18 in diesem + den beiden
|
||||
vorangegangenen Monaten**, sonst (Durchrechnungszeitraum > 3
|
||||
Monate) **36 in diesem + den letzten 5 Kalendermonaten**.
|
||||
- **Hitze/Kälte:** Hitze muss durch die Arbeitsvorgänge verursacht
|
||||
sein; Werte: **30 °C bei 50 % Luftfeuchtigkeit bei 0,1 m/s
|
||||
Luftgeschwindigkeit** oder gleichwertig/ungünstiger; Kälte:
|
||||
überwiegender Aufenthalt in begehbaren Kühlräumen **unter –21 °C**
|
||||
oder ständiger Wechsel zwischen solchen und anderen Räumen.
|
||||
- **Chemische/physikalische Einflüsse:** Unterlagen so aufbewahren,
|
||||
dass **Jahre später dem Pensionsversicherungsträger** auf Anfrage
|
||||
Auskunft gegeben werden kann.
|
||||
- **Schwere körperliche Arbeit:** **tägliche Arbeitszeit 8 Stunden**;
|
||||
Tätigkeit in der **Liste „schwere körperliche Arbeit"** (Männer/
|
||||
Frauen/ nur Frauen?); mit Großgeräten oder manuell?; primär
|
||||
Planung/Aufsicht = Ausschlusskandidat. **Hinweis:** die
|
||||
Tätigkeitsliste ist **nicht taxativ**; auch bei kürzeren
|
||||
Arbeitszeiten vor, wenn der **Arbeitskilokalorienverbrauch pro
|
||||
Arbeitstag** erreicht wird (längere Arbeitszeit/besondere Schwere) —
|
||||
auch hier ist zu melden.
|
||||
- **Berufsbedingte Pflege** (erkrankte/behinderte Menschen mit
|
||||
besonderem Behandlungs-/Pflegebedarf): Arbeitszeit **mind. die
|
||||
Hälfte der Normalarbeitszeit**; Hospiz-/Palliativmedizin;
|
||||
Pflegelinge mit **Pflegebedarf ab Stufe 5**.
|
||||
- **Tätigkeiten trotz Pflegegeld ab Stufe 3:** Personen im Betrieb,
|
||||
die Pflegegeld ab Stufe 3 beziehen (praktisch: Rollstuhlfahrer,
|
||||
hochgradig Sehbehinderte/Blinde; **Behinderteneinstellungsgesetz-
|
||||
Einstufung ist irrelevant**).
|
||||
|
||||
## Kernwerte & Fristen (Stand 2026-07)
|
||||
|
||||
| Tatbestand | Schwelle |
|
||||
|---|---|
|
||||
| Alter (Meldepflicht-Bezug) | Männer **40**, Frauen **35** |
|
||||
| Leiharbeiter | Meldung durch den **Überlasser** (Jahresende-Bekanntgabe durch Beschäftiger) |
|
||||
| Schicht/Wechsel | **Wechsel zu Tagdienst pro Monat**; 22–6 Uhr mind. **6 Std**; keine überwiegende Arbeitsbereitschaft |
|
||||
| Nachtschichten (Staffel) | **6/Monat** → 12/2 Monate → 18/3 Monate → 36/6 Monate (Durchrechnungszeitraum > 3 Monate) |
|
||||
| Hitze | **30 °C, 50 % Feuchte, 0,1 m/s** (oder gleichwertig), arbeitsvorgangsbedingt |
|
||||
| Kälte | **unter –21 °C** (Kühlräume, überwiegend/ständiger Wechsel) |
|
||||
| Schwere körperliche Arbeit | **8 Std/Tag**; nicht-taxative Liste; Kcal-Regel |
|
||||
| Pflege | mind. **½ Normalarbeitszeit**; Hospiz/Palliativ; **Pflegestufe ≥ 5** |
|
||||
| Pflegegeld | Tätigkeit trotz **Pflegegeld Stufe ≥ 3** |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- **Schwerarbeitsverordnung** (Ziffern/Tätigkeitsliste) — ausdrücklich
|
||||
referenziert (ohne Ziffer).
|
||||
- Pensionsversicherungsträger-Auskunft = meldepflichtige Folge — ⚠
|
||||
§-Zuordnung (ASVG/Meldepflicht) über lb-swa-05 beziehen.
|
||||
- Behinderteneinstellungsgesetz — als **irrelevant** für die
|
||||
Einstufung genannt (ohne §-Zitat).
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- Die **Meldekriterien (Nachtschichten-Staffel, 22–6-Uhr-Fenster,
|
||||
8-Stunden-Schwelle)** sind Auswertungslogik auf Work-Entries/
|
||||
Dienstplänen — je Mitarbeiter und Monat prüfen.
|
||||
- **Leiharbeiter-Regel** (Meldung über den Überlasser) ist ein
|
||||
Zuordnungspunkt im Meldewesen (→ lb-aug-01/02).
|
||||
- **Dokumentationspflicht** (chem./physikalische Einflüsse) für
|
||||
spätere PVA-Auskünfte = Belegarchiv, nicht Abrechnungswert.
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-swa-01 (Feststellung von
|
||||
Schwerarbeitszeiten) · lb-swa-02 (Schwerarbeit —
|
||||
Allgemeines) · lb-swa-04 (Schwerarbeitstatbestände) · lb-swa-05
|
||||
(Meldepflicht des Arbeitgebers)
|
||||
+75
@@ -0,0 +1,75 @@
|
||||
---
|
||||
id: lb-bnd-52
|
||||
batch: 10
|
||||
title: "Checkliste - Vorüberlegungen zur einvernehmlichen Auflösung"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Beendigungsarten"
|
||||
topic: beendigungsarten
|
||||
author: "Thöny-Maier"
|
||||
stand: 2026-06
|
||||
source:
|
||||
pdf: ".lexis360/uebersichten_checklisten/Lexis360_checkliste_voruberlegungen_zur_einvernehmlichen_au.pdf"
|
||||
text: ".lexis360/md/checkliste_voruberlegungen_zur_einvernehmlichen_au.md"
|
||||
legal_bases: []
|
||||
tags: [einvernehmliche-losung, aufloesung, abfertigung, konkurrenzklausel, dienstfreistellung]
|
||||
cross_refs: ["lb-bnd-13", "lb-end-11", "lb-bso-07"]
|
||||
---
|
||||
|
||||
# Checkliste: Vorüberlegungen zur einvernehmlichen Auflösung
|
||||
|
||||
*Lexis Briefings Personalrecht, Thöny-Maier, Stand Juni 2026 (lb-bnd-52).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
- **11 Prüffragen vor Abschluss der Vereinbarung:**
|
||||
1. **Besondere Formerfordernisse** für die einvernehmliche
|
||||
Auflösung (schriftlich; **Bescheinigung von Arbeiterkammer
|
||||
oder Arbeitsgericht**; Zustimmung der gesetzlichen Vertreter)?
|
||||
2. **Abfertigung Alt oder Neu** — **Folgekosten**!
|
||||
3. Besteht eine **Konkurrenzklausel**?
|
||||
4. Wurde ein **Ausbildungskostenrückersatz** vereinbart?
|
||||
5. **Enddatum** genau festlegen.
|
||||
6. Bis dahin noch **Urlaub oder Zeitausgleich konsumieren**?
|
||||
7. **Freizeit zur Postensuche** in welchem Ausmaß?
|
||||
8. **Dienstfreistellung**?
|
||||
9. **Privatnutzung Firmen-Pkw** (Anspruch? Rückgabe-Wann)?
|
||||
10. **Dienstwohnung**?
|
||||
11. **Zusätzliche freiwillige Abfertigung** zahlen?
|
||||
- Keine §-Zitate in der Quelle (Vereinbarungs-Checkliste).
|
||||
|
||||
## Kernwerte & Fristen (Stand 2026-06)
|
||||
|
||||
| Prüffrage | Kernaufgabe |
|
||||
|---|---|
|
||||
| 1 | Formerfordernisse (Schrift, AK/Arbeitsgericht-Bescheinigung, Zustimmung) |
|
||||
| 2 | **Abfertigung Alt/Neu** (Folgekosten) |
|
||||
| 3–4 | Konkurrenzklausel; Ausbildungskostenrückersatz |
|
||||
| 5 | **Enddatum** exakt |
|
||||
| 6–7 | Urlaub/Zeitausgleich konsumieren; Postensuche-Freizeit |
|
||||
| 8 | Dienstfreistellung |
|
||||
| 9–10 | Firmen-Pkw (Rückgabe); Dienstwohnung |
|
||||
| 11 | **freiwillige Abfertigung** |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- Keine §-Zitate in der Quelle; die Fragen berühren
|
||||
Abfertigung (AVRAG/BMSVG), Konkurrenzklausel (ABGB),
|
||||
Postensuche (§ 35a AngG) — ⚠ Normen nicht in der Quelle genannt,
|
||||
über Cluster `end`/`bso` beziehen.
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- Die 11 Fragen sind die **Endabstellungs-Checkliste** der
|
||||
PV: Enddatum, Abfertigungs-Zufluss (Alt/Neu, freiwillige
|
||||
Abfertigung), Urlaubs-/Zeitguthaben-Abbau, Pkw-/Wohnung-
|
||||
Rückgabe (Sachbezüge, → Cluster `sac`), Postensuche-Freizeit
|
||||
(→ lb-bso-07).
|
||||
- **Folgekosten-Prüfung (Frage 2/11)** vor Unterschrift =
|
||||
wirtschaftliche Entscheidung der PV (→ lb-end-11/12).
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-bnd-13 (Einvernehmliche Lösung) · lb-end-11
|
||||
(Freiwillige Abfertigung – arbeitsrecht) · lb-end-12
|
||||
(Freiwillige Abfertigung – Lohnnebenkosten) · lb-bso-07
|
||||
(Postensuche)
|
||||
@@ -0,0 +1,83 @@
|
||||
---
|
||||
id: lb-bso-16
|
||||
batch: 10
|
||||
title: "Checkliste - Zeugniserstellung"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Beendigungsphase - Sonstiges"
|
||||
topic: beendigungsphase-sonstiges
|
||||
author: "Thöny-Maier"
|
||||
stand: 2026-06
|
||||
source:
|
||||
pdf: ".lexis360/uebersichten_checklisten/Lexis360_checkliste_zeugniserstellung.pdf"
|
||||
text: ".lexis360/md/checkliste_zeugniserstellung.md"
|
||||
legal_bases: []
|
||||
tags: [zeugnis, zeugniserstellung, qualifiziertes-zeugnis, prozess, beendigung]
|
||||
cross_refs: ["lb-bso-04", "lb-bso-12", "lb-bso-13", "lb-bso-15"]
|
||||
---
|
||||
|
||||
# Checkliste: Zeugniserstellung
|
||||
|
||||
*Lexis Briefings Personalrecht, Thöny-Maier, Stand Juni 2026 (lb-bso-16).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
- **Allgemein (alle Zeugnissorten):**
|
||||
- **Bei jeder Beendigung automatisch** alle Informationen für
|
||||
sofortige oder spätere Zeugniserstellung einholen.
|
||||
- **Intern klären:** gesetzliches oder qualifiziertes Zeugnis;
|
||||
gleich erstellt oder nur Vorvorsorge für zukünftige Anforderung.
|
||||
- **Direkte(n) Vorgesetzte(n) miteinbeziehen.**
|
||||
- Tätigkeit(en) eruieren — allenfalls der Arbeitnehmer beschreibt
|
||||
seine Tätigkeiten selbst.
|
||||
- Tätigkeit **konkret ausformulieren wie in einer
|
||||
Stellenausschreibung** — eine allgemeine Bezeichnung wie
|
||||
„Angestellte(r)/Arbeiter(in)" genügt **nicht**.
|
||||
- **Entwicklung des Mitarbeiters nachvollziehen:** inhaltliche
|
||||
Änderungen des Aufgabenbereichs mit Beginn/Ende der jeweiligen
|
||||
Verwendung **datumsmäßig**.
|
||||
- **Für ein qualifiziertes Zeugnis zusätzlich:**
|
||||
- Aufzeichnungen zu geführten **Mitarbeitergesprächen** einholen.
|
||||
- Ergebnisse von **Mitarbeiterbeurteilungen** sichten.
|
||||
- Je ausgeübter Tätigkeit die **Haupteigenschaften** ermitteln, die
|
||||
die Tätigkeit erfordert; **nur erforderliche Eigenschaften
|
||||
beurteilen** (keine Nebensächlichkeiten/Belanglosigkeiten).
|
||||
- **Nur Unternehmensangaben** mit unmittelbarem Bezug zur Tätigkeit
|
||||
bzw. zur Eindrücklichkeit des Tätigkeitsbilds.
|
||||
- **Nach Erstellung (beide Zeugnissorten):**
|
||||
- **Länge** kritisch hinterfragen.
|
||||
- **Rechtschreib-/Grammatikprüfung** gewissenhaft.
|
||||
- **Äußere Form** bewusst prüfen (Briefpapier, Schriftgröße,
|
||||
Abstände, Absätze, Länge, nicht falten, Sauberkeit).
|
||||
- **Unverzügliche Übermittlung** veranlassen bzw. Termin zur
|
||||
Abholung/Abklärungsgespräch vereinbaren.
|
||||
|
||||
## Kernwerte & Fristen (Stand 2026-06)
|
||||
|
||||
| Phase | Kernaufgabe |
|
||||
|---|---|
|
||||
| Beendigung (automatisch) | Informationen für (spätere) Zeugniserstellung sichern |
|
||||
| Klärung | gesetzlich/qualifiziert; sofort/Vorvorsorge |
|
||||
| Inhalt | Tätigkeiten konkret (Stellenanzeigen-Stil); Entwicklungen datumsmäßig |
|
||||
| Qualifiziert | Gesprächs-Protokolle, Beurteilungen; nur relevante Eigenschaften; nur tertiär bezogene Unternehmensangaben |
|
||||
| Nachbereitung | Länge, Rechtschreibung, äußere Form, unverzügliche Übermittlung |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- Keine §-Zitate in der Quelle (zeugnisrechtliche Praxis,
|
||||
OGH-Praxis zur qualitativen Aussage) — ⚠ Norm/Judikatur nicht in
|
||||
der Quelle genannt.
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- Kein Entgelt-/Abrechnungswert; die Checkliste ist ein
|
||||
**Prozessablauf** im Beendigungsworkflow (→ lb-bso-04), der die
|
||||
Haftungs-/Anfechtungssicherheit des Zeugnisses erhöht.
|
||||
- **Entwicklungen datumsmäßig** = Bezug auf
|
||||
Entgeltversions-/Aufstiegsdaten im Personalstamm (Abgrenzung für
|
||||
Vordienstzeiten, → lb-bso-13).
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-bso-04 (Dienstzeugnis) · lb-bso-12
|
||||
(Bewertungskriterien) · lb-bso-13 (Zeugnisbestandteile) ·
|
||||
lb-bso-15 (unzulässige Anmerkungen)
|
||||
+74
@@ -0,0 +1,74 @@
|
||||
---
|
||||
id: lb-bnd-53
|
||||
batch: 10
|
||||
title: "Checkliste - Zu beachten bei Auflösung in der Probezeit"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Beendigungsarten"
|
||||
topic: beendigungsarten
|
||||
author: "Thöny-Maier"
|
||||
stand: 2026-06
|
||||
source:
|
||||
pdf: ".lexis360/uebersichten_checklisten/Lexis360_checkliste_zu_beachten_bei_auflosung_in_der_probez.pdf"
|
||||
text: ".lexis360/md/checkliste_zu_beachten_bei_auflosung_in_der_probez.md"
|
||||
legal_bases: []
|
||||
tags: [probezeit, aufloesung, endabrechnung, gkk, l16, dienstzeugnis]
|
||||
cross_refs: ["lb-bnd-37", "lb-bnd-57", "lb-bso-01"]
|
||||
---
|
||||
|
||||
# Checkliste: Zu beachten bei Auflösung in der Probezeit
|
||||
|
||||
*Lexis Briefings Personalrecht, Thöny-Maier, Stand Juni 2026 (lb-bnd-53).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
- **Prüfreihenfolge:**
|
||||
- Sieht der **KV eine Probezeit vor**?
|
||||
- Wenn nein: wurde eine **Probezeit vereinbart** (**Schriftlichkeit
|
||||
unbedingt aus Nachweisgründen zu empfehlen**)?
|
||||
- **Dauer der Probezeit**.
|
||||
- **Rechtzeitige Auflösungserklärung** (letzter Tag der möglichen
|
||||
Zustellung/des möglichen Ausspruchs).
|
||||
- **Keine diskriminierende** Auflösungserklärung.
|
||||
- **Keine weitere (stillschweigende) Entgegennahme von
|
||||
Arbeitsleistung** nach der Auflösung.
|
||||
- **Korrekte Endabrechnung:**
|
||||
- **Abrechnung der zustehenden Entgeltansprüche**.
|
||||
- **Abmeldung bei der GKK**.
|
||||
- **Ausfertigung der erforderlichen Schriftstücke**
|
||||
(**Dienstzeugnis auf Verlangen**, **L16**).
|
||||
- Keine §-Zitate in der Quelle (KV-/PV-Praxis).
|
||||
|
||||
## Kernwerte & Fristen (Stand 2026-06)
|
||||
|
||||
| Prüfpunkt | Kernaufgabe |
|
||||
|---|---|
|
||||
| KV/Vertrag | Probezeit vorhanden? (Schrift = Nachweis) |
|
||||
| Dauer | Probezeit-Länge |
|
||||
| **Timing** | **rechtzeitig** (letzter Tag der Zustellung/des Ausspruchs) |
|
||||
| Inhalt | keine Diskriminierung |
|
||||
| Fortsetzung | **keine stillschweigende Arbeitsleistungsnahme** nach der Erklärung |
|
||||
| Abrechnung | Entgeltansprüche, **GKK-Abmeldung**, **Dienstzeugnis (auf Verlangen), L16** |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- Keine §-Zitate in der Quelle; die Punkte berühren
|
||||
Probezeit/KV, GKK-Abmeldung (ASVG), L16 (FLAG) — ⚠ Normen
|
||||
nicht in der Quelle genannt, über lb-bnd-37 und lb-bso-01
|
||||
beziehen.
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- **Stillschweigende Arbeitsleistungsnahme** nach der Erklärung
|
||||
kann die Probezeit verlängern/widerlegen — im Beendigungs-
|
||||
workflow als Stopp-Punkt (keine Work-Entries mehr nach
|
||||
Ausspruch).
|
||||
- **GKK-Abmeldung + L16** = eSV/L16-Meldepflicht (→ lb-bso-01);
|
||||
**Dienstzeugnis auf Verlangen** (→ lb-bso-04/13/16).
|
||||
- **Entgeltabrechnung** (laufend, aliquot) als Endabrechnung
|
||||
(→ lb-bnd-46/47).
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-bnd-37 (Auflösung in Probezeit) · lb-bnd-57
|
||||
(Muster Auflösung) · lb-bso-01 (Abmeldung
|
||||
Sozialversicherung)
|
||||
@@ -0,0 +1,71 @@
|
||||
---
|
||||
id: lb-ues-05
|
||||
batch: 10
|
||||
title: "Muster - All-in-Teilzeitvereinbarungen"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Arbeitszeit"
|
||||
topic: uberstunden
|
||||
author: "Schrank"
|
||||
stand: 2025-12
|
||||
source:
|
||||
pdf: ".lexis360/muster/Lexis360_muster_all_in_teilzeitvereinbarungen.pdf"
|
||||
text: ".lexis360/md/muster_all_in_teilzeitvereinbarungen.md"
|
||||
legal_bases: []
|
||||
tags: [all-in, teilzeit, mehrstunden, pauschale, zuschlaege]
|
||||
cross_refs: ["lb-ues-06", "lb-ues-07", "lb-ues-02"]
|
||||
---
|
||||
|
||||
# Muster: All-in-Teilzeitvereinbarungen
|
||||
|
||||
*Lexis Briefings Personalrecht, Schrank, Stand Dezember 2025 (lb-ues-05).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
- **Teilzeit-All-in-Gehalt:** Das **Teilzeit-Grundgehalt** (€ X brutto
|
||||
monatlich) und das **Teilzeit-All-in-Gehalt** (€ Y brutto monatlich)
|
||||
werden getrennt ausgeschrieben.
|
||||
- **Pauschalabgeltung:** Der über dem Grundgehalt liegende Teil des
|
||||
All-in-Gehalts **zuzüglich allfälliger weiterer Entgeltzahlungen**
|
||||
dient der pauschalen Abgeltung **aller Teilzeit-Mehrstunden,
|
||||
Dienstreisezeiten und Überstunden einschließlich entsprechender
|
||||
Zuschläge** — **im Durchschnitt von jeweils 12 Monaten**; bei
|
||||
ausreichender Deckung gebührt für solche Zeiten **kein weiteres
|
||||
Entgelt**.
|
||||
- **Herkunft:** Muster von o. Univ.-Prof. Dr. Franz Schrank, auch in
|
||||
Schrank, *Arbeitszeitgesetze, Kommentar* (Linde Verlag, 7. Auflage
|
||||
2023).
|
||||
- Keine §-Zitate in der Klausel selbst (Vertragsmechanik).
|
||||
|
||||
## Kernwerte & Fristen (Stand 2025-12)
|
||||
|
||||
| Klausel | Inhalt |
|
||||
|---|---|
|
||||
| Teilzeit-Grundgehalt | € X brutto/Monat |
|
||||
| Teilzeit-All-in-Gehalt | € Y brutto/Monat |
|
||||
| Abgeltungsumfang | alle Teilzeit-Mehrstunden, Dienstreisezeiten, Überstunden inkl. Zuschläge (+ allf. weitere Entgeltzahlungen) |
|
||||
| Durchschnittsperiode | **12 Monate** |
|
||||
| Deckungseffekt | bei ausreichender Deckung kein weiteres Entgelt |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- Keine §-Zitate in der Quelle (Vertragsklausel); zugrunde liegt das
|
||||
AZG-Überstundenregime — ⚠ §-Zuordnung über lb-ues-01/02/07 beziehen.
|
||||
- Kommentierung: Schrank, *Arbeitszeitgesetze* (7. Aufl. 2023) —
|
||||
Literaturhinweis der Quelle.
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- **12-Monate-Durchschnitt** = Abrechnungszeitraum der Deckung
|
||||
(Ist-Mehrstunden vs. Abgeltungsumfang) — Deckung je Periode prüfen.
|
||||
- **Grundgehalt/All-in-Trennung** bei Teilzeit ist identisch zum
|
||||
Vollzeitfall (→ lb-ues-06/07) — gleiche Entgeltlogik, Teilzeit-
|
||||
Parameter (Stundenmaß) zusätzlich.
|
||||
- **Zuschläge im Abgeltungsumfang** enthalten → Zuschlagsabrechnung
|
||||
entfällt bei Deckung; die Zuschlagsraten bleiben für die
|
||||
Deckungsberechnung Parameter.
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-ues-06 (All-inclusive) · lb-ues-07
|
||||
(All-in-Entgelt-Varianten) · lb-ues-02 (Überstundenpauschale und
|
||||
All-in)
|
||||
@@ -0,0 +1,66 @@
|
||||
---
|
||||
id: lb-ues-06
|
||||
batch: 10
|
||||
title: "Muster - All-inclusive-Vereinbarung"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Arbeitszeit"
|
||||
topic: uberstunden
|
||||
author: "Sabara"
|
||||
stand: 2025-12
|
||||
source:
|
||||
pdf: ".lexis360/muster/Lexis360_muster_all_inclusive_vereinbarung.pdf"
|
||||
text: ".lexis360/md/muster_all_inclusive_vereinbarung.md"
|
||||
legal_bases: []
|
||||
tags: [all-in, all-inclusive, leitende-angestellte, azg-ausnahme, grundgehalt]
|
||||
cross_refs: ["lb-ues-05", "lb-ues-07", "lb-ues-02", "lb-lei-01"]
|
||||
---
|
||||
|
||||
# Muster: All-inclusive-Vereinbarung
|
||||
|
||||
*Lexis Briefings Personalrecht, Sabara, Stand Dezember 2025 (lb-ues-06).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
- **All-in-Klausel (Basis):** Mit dem Bruttogehalt iHv € X, **darin
|
||||
enthalten das Grundgehalt iHv € Y**, sind sämtliche Leistungen, die
|
||||
über die geltende Normalarbeitszeit hinaus erbracht werden, pauschal
|
||||
abgegolten.
|
||||
- **Variante leitende Angestellte:** zusätzliches wohlverstandenes
|
||||
Überstundenleisten „bei Bedarf“; **ausdrückliche Ausnahme vom
|
||||
Anwendungsbereich des Arbeitszeitgesetzes und des
|
||||
Arbeitsruhegesetzes** als leitender Angestellter.
|
||||
- Die **Grundgehalt-Abgrenzung** (Anteil im Bruttogehalt) ist die
|
||||
zentrale Entgeltdefinition — relevant für Abfertigungs- und
|
||||
Pensionsbezüge (→ lb-ues-07 Klausel 6, § 2 Abs 2 Z 9 AVRAG).
|
||||
- Keine §-Zitate in der Basis-Klausel; die AZG/ARaG-Ausnahme
|
||||
(leitende Angestellte) ist im Text selbst enthalten, die
|
||||
Rechtsnorm ist aber nicht zitiert — ⚠ (ARaG/AZG §-Zuordnung über
|
||||
lb-ues-02 beziehen).
|
||||
|
||||
## Kernwerte & Fristen (Stand 2025-12)
|
||||
|
||||
| Klausel | Inhalt |
|
||||
|---|---|
|
||||
| Bruttogehalt | € X (inkl. Grundgehalt € Y) |
|
||||
| Pauschalabgeltung | sämtliche Mehrleistungen über der Normalarbeitszeit |
|
||||
| Variante leitende Angestellte | Überstunden „bei Bedarf“ wohlverstanden; AZG/ARaG-Ausnahme |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- Keine §-Zitate in der Quelle (Vertragsklausel); die
|
||||
Leitende-Angestellte-Ausnahme betrifft AZG/ARaG — ⚠ Normen nicht
|
||||
zitiert, über lb-ues-02/Cluster `lei` beziehen.
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- **Grundgehalt vs. All-in-Überhang** muss im Entgeltmodell getrennt
|
||||
geführt werden (Abfertigungs-/Pensionsrelevanz; → lb-ues-07).
|
||||
- **AZG/ARaG-Ausnahme (leitende Angestellte)** = Konfigurationsflag am
|
||||
Dienstverhältnis (keine Arbeitszeitgrenzen-Aufzeichnungspflicht) —
|
||||
aber Melde-/Aufzeichnungsfolgen prüfen (→ Cluster `zer`, `azg`).
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-ues-05 (All-in-Teilzeit) · lb-ues-07
|
||||
(All-in-Entgelt-Varianten) · lb-ues-02 (Überstundenpauschale und
|
||||
All-in) · lb-lei-01 (Leitende Angestellte)
|
||||
+73
@@ -0,0 +1,73 @@
|
||||
---
|
||||
id: lb-bnd-54
|
||||
batch: 10
|
||||
title: "Muster: Änderungskündigung (auflösende Bedingung)"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Beendigungsarten"
|
||||
topic: beendigungsarten
|
||||
author: "Thöny-Maier"
|
||||
stand: 2026-07
|
||||
source:
|
||||
pdf: ".lexis360/muster/Lexis360_muster_anderungskundigung_auflosende_bedingung.pdf"
|
||||
text: ".lexis360/md/muster_anderungskundigung_auflosende_bedingung.md"
|
||||
legal_bases: []
|
||||
tags: [anderungskundigung, aufloesende-bedingung, zuruecknahme, betriebsorganisatorische-gruende]
|
||||
cross_refs: ["lb-bnd-39", "lb-bnd-40", "lb-bnd-41", "lb-bnd-51"]
|
||||
---
|
||||
|
||||
# Muster: Änderungskündigung (auflösende Bedingung)
|
||||
|
||||
*Lexis Briefings Personalrecht, Thöny-Maier, Stand Juli 2026 (lb-bnd-54).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
- **Kernstruktur:** Ein Schreiben, das (1) die **Kündigung** aus
|
||||
wirtschaftlichen/betriebsorganisatorischen Gründen unter Einhaltung der
|
||||
gesetzlichen/kollektivvertraglichen/einzelvertraglichen Kündigungsfrist
|
||||
zum nächsten möglichen Endzeitpunkt ausspricht und (2) zeitgleich ein
|
||||
**befristetes Änderungsangebot** (geänderte Dienstvertragsbedingungen)
|
||||
unterbreitet.
|
||||
- **Automatische Zurücknahme:** Zustimmt der Arbeitnehmer dem
|
||||
Änderungsangebot, „führt dies zur **automatischen Zurücknahme** dieser
|
||||
Kündigung"; das Arbeitsverhältnis wird zu den geänderten Bedingungen
|
||||
**ununterbrochen** fortgesetzt.
|
||||
- **Fristmechanik:** Zustimmung **schriftlich bis spätestens [Datum]** —
|
||||
mit der Zustimmung erklärt sich der Arbeitnehmer „auch mit der
|
||||
Zurücknahme der Kündigung ausdrücklich einverstanden".
|
||||
- **Ablehnung/Schweigen:** Bei Nichtäußerung innerhalb der Frist oder
|
||||
Ablehnung „bleibt es bei der ausgesprochenen Kündigung" → das
|
||||
Dienstverhältnis endet am im Kündigungsteil genannten Datum.
|
||||
- **Betriebsrat:** Vorinformation der Kündigungsabsicht wird im Muster
|
||||
ausdrücklich bestätigt („ordnungsgemäß vorinformiert").
|
||||
|
||||
## Kernwerte & Fristen (Stand 2026-07)
|
||||
|
||||
| Baustein | Regel im Muster |
|
||||
|---|---|
|
||||
| Kündigungsfrist | gesetzliche/kollektivvertragliche/einzelvertragliche Frist (Tag/Woche/Monat) — Angabe im Schreiben empfohlen |
|
||||
| Änderungsangebot | befristet; Zustimmung schriftlich bis zum Stichtag |
|
||||
| Wirkung der Zustimmung | automatische Zurücknahme der Kündigung, ununterbrochene Weiterführung |
|
||||
| Wirkung der Ablehnung | Kündigung bleibt wirksam, Enddatum wie ausgesprochen |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- Keine §-Zitate im Muster (Vertrags-/Kündigungsmechanik).
|
||||
- Kündigungsfristen/-termine: → lb-bnd-40 (Angestellte) / lb-bnd-41
|
||||
(Arbeiter); Form und Ausspruch → lb-bnd-39.
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- Bei **Annahme des Änderungsangebots** ist das Dienstverhältnis
|
||||
fortlaufend (kein Ende/Neuantritt) → in der Abrechnung: Parameterwechsel
|
||||
(Entgeltgruppe, Arbeitszeit) zum Änderungsstichtag, keine
|
||||
Endabrechnung; Kündigungs-/Austritts-Logik muss das
|
||||
Annahme-/Ablehnungszweigtrennen (Status-Feld + Stichtag).
|
||||
- **Vertragsschluss-Nachweis** (schriftliche Zustimmung) ist für die
|
||||
Wirksamkeit der Zurücknahme relevant → Dokumentenbezug am
|
||||
hr.employee/dem Änderungsevent.
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-bnd-39 (Kündigungsausspruch) · lb-bnd-40/41
|
||||
(Kündigungsfristen Angestellte/Arbeiter) · lb-bnd-51 (Vorgehensweise
|
||||
Kündigung Arbeitgeber)
|
||||
@@ -0,0 +1,81 @@
|
||||
---
|
||||
id: lb-bes-09
|
||||
batch: 10
|
||||
title: "Muster - Angestelltendienstvertrag"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Bis zum Dienstantritt"
|
||||
topic: beschaftigungsformen
|
||||
author: "Haider"
|
||||
stand: 2025-06
|
||||
source:
|
||||
pdf: ".lexis360/muster/Lexis360_muster_angestelltendienstvertrag.pdf"
|
||||
text: ".lexis360/md/muster_angestelltendienstvertrag.md"
|
||||
legal_bases: ["§ 19c Abs 2 und 3 AZG"]
|
||||
tags: [dienstvertrag, angestellte, einstufung, mehrarbeit, ordnungsvorschriften, vorsorgekasse]
|
||||
cross_refs: ["lb-bes-10", "lb-bes-01", "lb-ues-04"]
|
||||
---
|
||||
|
||||
# Muster: Angestelltendienstvertrag
|
||||
|
||||
*Lexis Briefings Personalrecht, Haider, Stand Juni 2025 (lb-bes-09).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
- **Gliederung (XII Abschnitte):** I. Tätigkeitsbereich (Tätigkeit +
|
||||
verwandte Tätigkeiten nach Weisungen) · II. Dienstort (Abweichende
|
||||
Betriebsstätten mit Mehraufwands-Vergütung; Standortverlegung = neuer
|
||||
Dienstort) · III. Einstufung (KV-Gruppe, Berufsjahr, Jahreswechsel;
|
||||
Vordienstzeiten-Anrechnung; Erklärung der korrekten Einstufung) ·
|
||||
IV. Entgelt (monatliches Bruttogehalt, **vierzehnmal jährlich**,
|
||||
Zahlung am letzten Tag des Kalendermonats; **Urlaubszuschuss (13.) und
|
||||
Weihnachtsremuneration (14.)** mit Zahlungsmonat; weitere
|
||||
Entgeltbestandteile) · V. Arbeitszeit, Mehr- und Überstunden (Normal-
|
||||
arbeitszeit wöchentlich/täglich; **§ 19c Abs 2 und 3 AZG: Änderung der
|
||||
Lage bei objektiver Notwendigkeit mit 14-Tage-Vorankündigung**;
|
||||
Mehr-/Überstunden nur bei Anordnung, nachträgliche Genehmigung durch
|
||||
Vorgesetzten möglich; **nicht angeordnete/genehmigte Mehrarbeit gilt als
|
||||
nicht geleistet**; Meldefrist für Mehrleistungen; Vergütung nach
|
||||
Gesetzen/KV) · VI. Spesen (eigenes Kfz; Ersatz gegen Nachweis nach KV) ·
|
||||
VII. Urlaub · VIII. Entgeltfortzahlung · IX. Geheimhaltung · X. Dauer ·
|
||||
XI. Betriebliche Vorsorgekasse · XII. Nebentätigkeit/Konkurrenzklausel.
|
||||
- **Abrechnungsrelevante Klauseln:** Anordnungs-/Genehmigungsvorbehalt für
|
||||
Mehr-/Überstunden (Vergütung nur bei Anordnung), Meldefrist,
|
||||
Sonderzahlungen mit festen Zahlungsmonaten, Vordienstzeiten-Anrechnung.
|
||||
|
||||
## Kernwerte & Fristen (Stand 2025-06)
|
||||
|
||||
| Klausel | Regel im Muster |
|
||||
|---|---|
|
||||
| Entgeltstruktur | monatliches Bruttogehalt, 14x jährlich; 13./14. Monatsgehalt mit Zahlungsmonat |
|
||||
| Lageänderung Normalarbeitszeit | § 19c Abs 2/3 AZG, objektive Notwendigkeit, **14 Tage Vorankündigung** |
|
||||
| Mehr-/Überstunden | nur bei **Anordnung** (nachträgliche Genehmigung möglich); nicht angeordnete Mehrarbeit = nicht geleistet |
|
||||
| Meldefrist Mehrleistung | bis spätestens [Datum] schriftlich |
|
||||
| Spesen | eigenes Kfz; Ersatz gegen Aufzeichnung/Belege nach KV |
|
||||
| Vordienstzeiten | X Jahre/Y Monate angerechnet (Erklärung) |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- **§ 19c Abs 2 und 3 AZG** (Lage der Normalarbeitszeit; Änderung bei
|
||||
objektiver Notwendigkeit) — ausdrücklich zitiert.
|
||||
- Sonstige Stellen (Sonderzahlungen, Spesen, Vorsorgekasse) verweisen auf
|
||||
„gesetzliche und kollektivvertragliche Vorschriften" ohne §-Zitat — ⚠
|
||||
konkrete Normen je KV.
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- **Anordnungs-Vorbehalt** = Work-Entry-Prinzip: Mehrarbeit nur bei
|
||||
dokumentierter Anordnung genehmigungsfähig → Anordnungsfeld/Workflow im
|
||||
hr_work_entry (→ lb-ues-04).
|
||||
- **14-Tage-Vorankündigung** bei Lageänderung = Frist im
|
||||
Arbeitszeit-Änderungsprozess.
|
||||
- **13./14. Monatsgehalt mit Zahlungsmonat** = Sonderzahlungs-Parameter
|
||||
(→ Cluster `son`); Zahlung am letzten Tag des Monats =
|
||||
Abrechnungszyklus.
|
||||
- **Vordienstzeiten** sind Einstufungsfakt (KV), kein Entgeltwert — im
|
||||
Vertrag dokumentieren.
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-bes-10 (Arbeiterdienstvertrag) · lb-bes-01
|
||||
(echtes Arbeitsverhältnis) · lb-ues-04 (Verpflichtung zur
|
||||
Überstundenarbeit) · Cluster `son` (Sonderzahlungen)
|
||||
@@ -0,0 +1,82 @@
|
||||
---
|
||||
id: lb-bes-10
|
||||
batch: 10
|
||||
title: "Muster - Arbeiterdienstvertrag"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Bis zum Dienstantritt"
|
||||
topic: beschaftigungsformen
|
||||
author: "Haider"
|
||||
stand: 2025-06
|
||||
source:
|
||||
pdf: ".lexis360/muster/Lexis360_muster_arbeiterdienstvertrag.pdf"
|
||||
text: ".lexis360/md/muster_arbeiterdienstvertrag.md"
|
||||
legal_bases: ["§ 19c Abs 3 AZG"]
|
||||
tags: [dienstvertrag, arbeiter, probezeit, kuendigungsfrist, lohngruppe, nachtdienst]
|
||||
cross_refs: ["lb-bes-09", "lb-bes-01"]
|
||||
---
|
||||
|
||||
# Muster: Arbeiterdienstvertrag
|
||||
|
||||
*Lexis Briefings Personalrecht, Haider, Stand Juni 2025 (lb-bes-10).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
- **Gliederung (XII Abschnitte):** I. Vertragsdauer (bestimmt/unbestimmt)
|
||||
· II. Probezeit (jederzeitige begrundungslose Auflosung wahrend der
|
||||
Probezeit), Kündigungsfrist und -termin (KV bzw. gesetzliche Fristen/
|
||||
Termine) · III. Gewöhnlicher Dienstort (vorübergehende/dauernde
|
||||
Versetzung, regional begrenzt; Dienstreisen/Montagen In- und Ausland
|
||||
mit Mehraufwands-Vergütung) · IV. Tätigkeit/Aufgaben (Zuweisung
|
||||
qualifikationsentsprechender Arbeiten) · V. Einstufung und Lohnzahlung
|
||||
(Lohngruppe laut KV; Stundenlohn/Monatslohn; **Sonderzahlungen nach
|
||||
anwendbarem KV**; variable Entgeltbestandteile mit der Abrechnung des
|
||||
Folgemonats; Erklärung der korrekten Einstufung inkl.
|
||||
Vordienstzeiten) · VI. Arbeitszeit und Überstunden
|
||||
(Wochenstunden; tägliche Lage; **Lageänderung bei objektiven Gründen
|
||||
mit mindestens zwei Wochen Vorankündigung, Abweichung gem. § 19c
|
||||
Abs 3 AZG; einseitige Änderungen mit angemessener
|
||||
Berücksichtigungswürdiger Interessen**; Bereitschaft zu Nacht- und
|
||||
Sonn-/Feiertagsarbeit; Meldepflicht von Veränderungen) ·
|
||||
VII. Erholungsurlaub · VIII. Dienstverhinderung · IX. Nebenbeschäfti-
|
||||
gung, sonstige Erwerbstätigkeit · X. Betriebs- und Geschäftsgeheimnisse
|
||||
· XI. Konventionalstrafe · XII. Konkurrenzklausel.
|
||||
- **Unterschiede zum Angestellten-Muster (lb-bes-09):** Vertragsdauer-
|
||||
und Kündigungsfrist-Block explizit (Arbeiter), Stundenlohn/Monatslohn
|
||||
statt fester Monatsbezüge, Konventionalstrafe-/Konkurrenzklausel-Abschnitt
|
||||
ausgebaut.
|
||||
|
||||
## Kernwerte & Fristen (Stand 2025-06)
|
||||
|
||||
| Klausel | Regel im Muster |
|
||||
|---|---|
|
||||
| Probezeit | X Wochen/1 Monat, jederzeitige begrundungslose Auflosung |
|
||||
| Kündigungsfristen/-termine | KV bzw. gesetzliche Fristen, Termine je Partei |
|
||||
| Lohnstruktur | Lohngruppe laut KV; Stundenlohn oder Monatslohn; Sonderzahlungen nach KV; variable Bestandteile mit Folgemonat |
|
||||
| Lageänderung Arbeitszeit | objektive Gründe, **mindestens 2 Wochen Vorankündigung** (Abweichung gem. § 19c Abs 3 AZG) |
|
||||
| Nacht-/Sonn-/Feiertagsarbeit | einvernehmliche Bereitschaft erklärt |
|
||||
| Geheimhaltung | Betriebs- und Geschäftsgeheimnisse; Konventionalstrafe-Abschnitt |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- **§ 19c Abs 3 AZG** (Abweichung von der Vorankündigungsfrist bei
|
||||
Lageänderung der Arbeitszeit) — ausdrücklich zitiert.
|
||||
- Sonstige Stellen (Kündigungsfristen, Sonderzahlungen) verweisen auf
|
||||
KV/gesetzliche Bestimmungen ohne §-Zitat — ⚠ Normen je KV.
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- **Stundenlohn/Monatslohn** je nach KV = Entgeltart als
|
||||
Parameter (Stundensatz-Abrechnung bei Stundenlohn).
|
||||
- **Kündigungsfristen/-termine** (Arbeiter: Termine an
|
||||
Monats-/Quartalsende) = Fristenlogik im Vertragsende-Modell (→ Cluster
|
||||
`bnd`).
|
||||
- **Lageänderung mit 2-Wochen-Frist** + **Nacht-/Feiertags-Bereitschaft**
|
||||
= Work-Entry-/Planungsparameter (Zuschläge → Cluster `zus`).
|
||||
- **Konventionalstrafe/Konkurrenzklausel** sind Vertragsfolgen, keine
|
||||
Entgeltbestandteile der laufenden Abrechnung.
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-bes-09 (Angestelltendienstvertrag) · lb-bes-01
|
||||
(echtes Arbeitsverhältnis) · Cluster `bnd` (Beendigungsarten) ·
|
||||
Cluster `zus` (Zulagen/Zuschläge)
|
||||
@@ -0,0 +1,73 @@
|
||||
---
|
||||
id: lb-bnd-55
|
||||
batch: 10
|
||||
title: "Muster - Arbeitgeberkündigung"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Beendigungsarten"
|
||||
topic: beendigungsarten
|
||||
author: "Thöny-Maier"
|
||||
stand: 2026-07
|
||||
source:
|
||||
pdf: ".lexis360/muster/Lexis360_muster_arbeitgeberkundigung.pdf"
|
||||
text: ".lexis360/md/muster_arbeitgeberkundigung.md"
|
||||
legal_bases: []
|
||||
tags: [arbeitgeberkundigung, kundigungsfrist, betriebsrat-vorinformation, resturlaub, dienstfreistellung, erhaltsbestaetigung]
|
||||
cross_refs: ["lb-bnd-39", "lb-bnd-40", "lb-bnd-41", "lb-bnd-51"]
|
||||
---
|
||||
|
||||
# Muster: Arbeitgeberkündigung
|
||||
|
||||
*Lexis Briefings Personalrecht, Thöny-Maier, Stand Juli 2026 (lb-bnd-55).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
- **Kernformel:** Kündigung „unter Einhaltung der geltenden
|
||||
Kündigungsfrist von [X] Tagen/Wochen/Monaten zum **nächsten möglichen
|
||||
Endzeitpunkt**"; Enddatum des Arbeitsverhältnisses wird ausgeschrieben.
|
||||
- **Fristangabe (Fußnote *):** Empfehlenswert ist die Angabe der
|
||||
**gesetzlichen/kollektivvertraglichen/einzelvertraglichen**
|
||||
Kündigungsfrist.
|
||||
- **Unklare Frist (Fußnote **):** Bleibt der Endtermin unsicher, kann er
|
||||
„unmittelbar nach Einholung der notwendigen Erkundigungen" mitgeteilt
|
||||
werden (Vorgabeformulierung im Muster).
|
||||
- **Betriebsrat (Fußnote ***):** Vorinformation am [Datum] und
|
||||
Zustimmung/Widerspruch/Schweigen dokumentieren — diese Angabe ist
|
||||
**kein zwingender Bestandteil** des Schreibens.
|
||||
- **Resturlaub (Fußnote ****):** Angebot, den Resturlaub während der
|
||||
Kündigungsfrist in einer konkreten Zeitspanne zu verbrauchen — ein
|
||||
**Angebot**, das der Arbeitnehmer **nicht annehmen muss**.
|
||||
- **Dienstfreistellung (Fußnote *****):** Bezahlte Freistellung ab Ende
|
||||
des Urlaubskonsums oder unabhängig davon, beginnend mit [Datum].
|
||||
- **Erhaltsbestätigung (Fußnote ******):** Bei persönlicher Übergabe
|
||||
unterfertigte Kopie.
|
||||
|
||||
## Kernwerte & Fristen (Stand 2026-07)
|
||||
|
||||
| Baustein | Regel im Muster |
|
||||
|---|---|
|
||||
| Kündigungsfrist | Tag/Woche/Monats-Angabe; gesetzliche/KV/einzelvertragliche Frist wahlweise |
|
||||
| Endtermin | nächster möglicher Endzeitpunkt; bei Unklarheit nachträgliche Mitteilung zulässig |
|
||||
| Betriebsrat | Vorinformation + Position optional dokumentiert |
|
||||
| Resturlaub | Angebot (keine Pflicht) zum Verbrauch in der Kündigungsfrist |
|
||||
| Freistellung | bezahlt; optional ab Urlaubsende oder ab Datum |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- Keine §-Zitate im Muster. Kündigungsfristen/-termine: → lb-bnd-40
|
||||
(Angestellte) / lb-bnd-41 (Arbeiter); Ausspruch/Form → lb-bnd-39.
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- **Enddatum-Logik** (Frist + nächster möglicher Termin, z. B. Monatsende
|
||||
bei Angestellten) ist die Ankerberechnung für die Abmeldung/SV-
|
||||
Beitragsmonate — als Regelwerk abbilden, nicht manuell je Fall.
|
||||
- **Urlaubsverbrauch in der Kündigungsfrist** vs. **bezahlte
|
||||
Freistellung** sind zwei abgrenzbare Work-Entry-Typen (Urlaub vs.
|
||||
Freistellung) — das Muster verlangt beides korrekt zu
|
||||
kennzeichnen (Bemessungsgrundlagen unterscheiden sich).
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-bnd-39 (Kündigungsausspruch) · lb-bnd-40/41
|
||||
(Kündigungsfristen Angestellte/Arbeiter) · lb-bnd-51 (Vorgehensweise
|
||||
Kündigung Arbeitgeber) · lb-bnd-54 (Änderungskündigung)
|
||||
@@ -0,0 +1,71 @@
|
||||
---
|
||||
id: lb-bnd-56
|
||||
batch: 10
|
||||
title: "Muster - Aufforderung Kontaktaufnahme"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Beendigungsarten"
|
||||
topic: beendigungsarten
|
||||
author: "Thöny-Maier"
|
||||
stand: 2026-06
|
||||
source:
|
||||
pdf: ".lexis360/muster/Lexis360_muster_aufforderung_kontaktaufnahme.pdf"
|
||||
text: ".lexis360/md/muster_aufforderung_kontaktaufnahme.md"
|
||||
legal_bases: []
|
||||
tags: [austritt, fernbleiben, aufforderung, frist, endabrechnung, sozialversicherung]
|
||||
cross_refs: ["lb-bnd-09", "lb-bnd-10", "lb-bnd-47"]
|
||||
---
|
||||
|
||||
# Muster: Aufforderung Kontaktaufnahme
|
||||
|
||||
*Lexis Briefings Personalrecht, Thöny-Maier, Stand Juni 2026 (lb-bnd-56).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
- **Ausgangslage:** Arbeitnehmer **bleibt vom Arbeitsplatz fern**
|
||||
(seit [Datum]) ohne Mitteilung über den Grund.
|
||||
- **Aufforderung:** sich **bis längstens [Termin]** mit der
|
||||
zuständigen Stelle in Verbindung zu setzen.
|
||||
- **Folge bei unterlassener Kontaktaufnahme:** der Arbeitgeber
|
||||
**nimmt einen vorzeitigen Austritt** zum [Datum] **an** und
|
||||
**meldet mit diesem Datum von der Sozialversicherung ab** und
|
||||
erstellt eine **Endabrechnung auf Basis eines
|
||||
ungerechtfertigten vorzeitigen Austrittes**.
|
||||
- **Anmerkung der Quelle (Praxis):** **nicht nur ein Datum,
|
||||
sondern auch eine Uhrzeit** angeben und **unverzüglich nach
|
||||
Verstreichen des Termins die Abmeldung veranlassen**; **ohne
|
||||
Zeitangabe läuft die Frist bis 24:00 Uhr** des angegebenen Tages;
|
||||
außerdem **Wohnadresse/Ortsabwesenheit** verifizieren.
|
||||
- Keine §-Zitate in der Quelle (Aufforderungsmuster).
|
||||
|
||||
## Kernwerte & Fristen (Stand 2026-06)
|
||||
|
||||
| Element | Regel |
|
||||
|---|---|
|
||||
| Frist | **Datum + Uhrzeit** (sonst bis 24:00) |
|
||||
| Folge | **vorzeitiger Austritt** zum [Datum]; **SV-Abmeldung** mit diesem Datum |
|
||||
| Abrechnung | **ungerechtfertigter vorzeitiger Austritt** (→ lb-bnd-47) |
|
||||
| Praxis | **unverzügliche Abmeldung** nach Terminablauf; Wohnadresse prüfen |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- Keine §-Zitate in der Quelle; die Folgen berühren
|
||||
Austritt/Entlassung (ABGB/AngG), SV-Abmeldung (ASVG) — ⚠
|
||||
Normen nicht in der Quelle genannt, über lb-bnd-09/10/47
|
||||
beziehen.
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- **Austrittsdatum** (Annahme des vorzeitigen Austritts) ist der
|
||||
**Endabrechnungsstichtag** mit dem **ungerechtfertigten
|
||||
Austritt** als Art (Folgen: kein Urlaubsersatzanspruch, keine
|
||||
Abfertigung, ohne 50 % Zuschlag — → lb-bnd-47).
|
||||
- **SV-Abmeldung (GKK/eSV)** zum selben Datum (→ lb-bso-01);
|
||||
**L16** mit Austrittsgrund.
|
||||
- **Frist + Uhrzeit** und **unverzügliche Abmeldung** sind
|
||||
Prozess-Fristen im Beendigungs-Workflow (Beweissicherung).
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-bnd-09 (Austritt – Folgen und Ansprüche) ·
|
||||
lb-bnd-10 (Austrittserklärung) · lb-bnd-47
|
||||
(Ansprüche beim Austritt)
|
||||
@@ -0,0 +1,68 @@
|
||||
---
|
||||
id: lb-bnd-57
|
||||
batch: 10
|
||||
title: "Muster - Auflösung in Probezeit"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Beendigungsarten"
|
||||
topic: beendigungsarten
|
||||
author: "Thöny-Maier"
|
||||
stand: 2026-06
|
||||
source:
|
||||
pdf: ".lexis360/muster/Lexis360_muster_auflosung_in_probezeit.pdf"
|
||||
text: ".lexis360/md/muster_auflosung_in_probezeit.md"
|
||||
legal_bases: []
|
||||
tags: [probezeit, aufloesung, sofortige-wirkung, arbeitsmaterialien, l16]
|
||||
cross_refs: ["lb-bnd-53", "lb-bnd-37"]
|
||||
---
|
||||
|
||||
# Muster: Auflösung in Probezeit
|
||||
|
||||
*Lexis Briefings Personalrecht, Thöny-Maier, Stand Juni 2026 (lb-bnd-57).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
- **Ausspruch:** Mitteilung, dass das am [Datum] begonnene
|
||||
Arbeitsverhältnis **in der Probezeit aufgelöst** wird.
|
||||
- **Wirkung:** „endet daher mit **sofortiger Wirkung**" —
|
||||
**Alternative:** Ende am **letzten Tag der Probezeit**
|
||||
([Datum]).
|
||||
- **Rückgabeforderung:** umgehende **Aushändigung aller
|
||||
übergebenen Arbeitsmaterialien, Kleidung, Chip für die
|
||||
Zeiterfassung** etc. (bei Sofortbeendigung; sonst Streichen/
|
||||
anderes Datum).
|
||||
- **Abrechnung:** „Die **Abrechnung Ihrer Entgeltansprüche** und die
|
||||
**Arbeitspapiere** erhalten Sie am [Datum] zugesendet."
|
||||
- **Nachweis:** **Erhalt-Unterschrift des Arbeitnehmers**
|
||||
(„erhalten am: [Datum]").
|
||||
- Keine §-Zitate in der Quelle (Ausspruchsmuster).
|
||||
|
||||
## Kernwerte & Fristen (Stand 2026-06)
|
||||
|
||||
| Element | Inhalt |
|
||||
|---|---|
|
||||
| Wirkung | **sofort** (Alt.: letzter Tag der Probezeit) |
|
||||
| Rückgabe | Arbeitsmaterialien, Kleidung, Zeiterfassungs-Chip |
|
||||
| Nachweis | **Erhalt-Unterschrift** des Arbeitnehmers |
|
||||
| Abrechnung | Entgeltansprüche + Arbeitspapiere am [Datum] |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- Keine §-Zitate in der Quelle (Probezeit-Auflösung, KV-Regelung) —
|
||||
⚠ Norm/KV nicht in der Quelle genannt, über lb-bnd-37/53
|
||||
beziehen.
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- **Sofortbeendigungsdatum** = Endabrechnungsstichtag (lauffähiges
|
||||
Entgelt, aliquote Sonderzahlungen — → lb-bnd-46/47).
|
||||
- **Arbeitspapiere/L16** am [Datum] = Meldungs-/Dokumenten-
|
||||
folge (→ lb-bso-01).
|
||||
- **Rückgabe von Arbeitsmaterialien** (inkl. Zeiterfassungs-Chip)
|
||||
als Abschlusspunkt im Beendigungs-Workflow (Sachbezüge,
|
||||
→ Cluster `sac`).
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-bnd-53 (Zu beachten bei
|
||||
Probezeit-Auflösung) · lb-bnd-37 (Auflösung in
|
||||
Probezeit)
|
||||
@@ -0,0 +1,58 @@
|
||||
---
|
||||
id: lb-bnd-58
|
||||
batch: 10
|
||||
title: "Muster - Einholung einer Rechtsauskunft"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Beendigungsarten"
|
||||
topic: beendigungsarten
|
||||
author: "Thöny-Maier"
|
||||
stand: 2026-06
|
||||
source:
|
||||
pdf: ".lexis360/muster/Lexis360_muster_einholung_einer_rechtsauskunft.pdf"
|
||||
text: ".lexis360/md/muster_einholung_einer_rechtsauskunft.md"
|
||||
legal_bases: []
|
||||
tags: [entlassung, rechtsauskunft, anwalt, wirtschaftskammer]
|
||||
cross_refs: ["lb-bnd-49", "lb-bnd-59"]
|
||||
---
|
||||
|
||||
# Muster: Einholung einer Rechtsauskunft
|
||||
|
||||
*Lexis Briefings Personalrecht, Thöny-Maier, Stand Juni 2026 (lb-bnd-58).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
- **Dringende Anfrage an den Rechtsvertreter** (Rechtsanwalt,
|
||||
Wirtschaftskammer): „Ich ersuche Sie um eine **unverzügliche
|
||||
Mitteilung, ob folgender Sachverhalt einen Entlassungsgrund
|
||||
darstellt**: [detaillierte Schilderung]".
|
||||
- **Anmerkung der Quelle:** den **Sachverhalt detailliert
|
||||
schildern**; die Anschrift des Rechtsanwalts/der
|
||||
Wirtschaftskammer eintragen.
|
||||
- **Funktion:** standardisierte **Beweissicherung und
|
||||
Beratungsprotokollierung** vor dem Entlassungsausspruch
|
||||
(→ lb-bnd-49, Punkt 4).
|
||||
- Keine §-Zitate in der Quelle (Formular).
|
||||
|
||||
## Kernwerte & Fristen (Stand 2026-06)
|
||||
|
||||
| Element | Inhalt |
|
||||
|---|---|
|
||||
| Adressat | Rechtsanwalt / Wirtschaftskammer |
|
||||
| Frage | **darstellt der Sachverhalt einen Entlassungsgrund?** |
|
||||
| Dringlichkeit | **unverzüglich / ehestbaldige Kontaktierung** |
|
||||
| Inhalt | **detaillierte Sachverhaltsschilderung** |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- Keine §-Zitate in der Quelle (Entlassungsrecht, → lb-bnd-32/33).
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- Kein Entgelt-/Abrechnungswert; das Formular sichert die
|
||||
**Beratungskette** im Beendigungs-Workflow (→ lb-bnd-49) und
|
||||
ist ein Verfahrensdokument (Beweissicherung).
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-bnd-49 (Checkliste Entlassung) · lb-bnd-59
|
||||
(Muster Entlassung)
|
||||
+73
@@ -0,0 +1,73 @@
|
||||
---
|
||||
id: lb-azm-08
|
||||
batch: 10
|
||||
title: "Muster-Einzelvereinbarung: Einarbeiten in Verbindung mit Feiertagen"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Arbeitszeit"
|
||||
topic: arbeitszeitmodelle
|
||||
author: "Lexis Redaktion"
|
||||
stand: 2026-07
|
||||
source:
|
||||
pdf: ".lexis360/muster/Lexis360_muster_einzelvereinbarung_einarbeiten_in_verbindun.pdf"
|
||||
text: ".lexis360/md/muster_einzelvereinbarung_einarbeiten_in_verbindun.md"
|
||||
legal_bases: ["§ 4 Abs 3 AZG"]
|
||||
tags: [einarbeiten, feiertage, arbeitsfreie-tage, azg, einzelvereinbarung]
|
||||
cross_refs: ["lb-azm-02", "lb-azm-03", "lb-efz-01"]
|
||||
---
|
||||
|
||||
# Muster-Einzelvereinbarung: Einarbeiten in Verbindung mit Feiertagen
|
||||
|
||||
*Lexis Briefings Personalrecht, Lexis Redaktion, Stand Juli 2026 (lb-azm-08).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
- **Vereinbarung gem. § 4 Abs 3 AZG:** bestimmte Arbeitstage des
|
||||
(Kalender-)Jahres, die vor oder/und nach Feiertagen liegen, werden
|
||||
**gegen Einarbeiten arbeitsfrei** erklärt.
|
||||
- **Einarbeitungsfrist:** die ausfallenden Normalarbeitsstunden werden
|
||||
**jeweils innerhalb von 13 die Ausfallstage einschließenden Wochen**
|
||||
vor oder/und nach den Ausfallstagen **1:1 eingearbeitet**.
|
||||
- **Rahmen des Einarbeitens:** an Normalarbeitstagen der 13-Wochen-
|
||||
Zeiträume werden Zeiten **außerhalb der sonstigen Normalarbeitszeit**
|
||||
herangezogen, **höchstens 10 Gesamtstunden am Tag**; bei Bedarf auch
|
||||
**arbeitsfreie Werktage**.
|
||||
- **Betriebliche Einteilung** der Einarbeitungstage/-stunden **mindestens
|
||||
zwei Wochen im Voraus**.
|
||||
- Anmerkung der Quelle: neben dem Kalenderjahr ist ein abweichender
|
||||
12-Monats-Zeitraum denkbar.
|
||||
- **Herkunft:** Muster von o. Univ.-Prof. Dr. Franz Schrank, auch in
|
||||
Schrank, *Arbeitszeit Kommentar* (7. Aufl. 2023).
|
||||
|
||||
## Kernwerte & Fristen (Stand 2026-07)
|
||||
|
||||
| Wert / Regel | Detail |
|
||||
|---|---|
|
||||
| Rechtsbezug | **§ 4 Abs 3 AZG** (Einarbeiten gegen Arbeitsfreistellung) |
|
||||
| Einarbeitungszeitraum | **13 die Ausfallstage einschließende Wochen** (vor/nach) |
|
||||
| Verhältnis | 1:1 |
|
||||
| Tagesgrenze beim Einarbeiten | **max. 10 Gesamtstunden/Tag** |
|
||||
| Einarbeitungstage | Normalarbeitstage (außerhalb der Normalarbeitszeit) + ggf. arbeitsfreie Werktage |
|
||||
| Betriebs-Einteilung | **mindestens 2 Wochen im Voraus** |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- **§ 4 Abs 3 AZG** (Einarbeiten) — ausdrücklich zitiert.
|
||||
- 10-Stunden-Grenze und Ruhezeiten folgen dem AZG — ⚠ ohne weitere
|
||||
§-Zitate in der Quelle.
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- **Arbeitsfreie Feiertagstage gegen Einarbeitung** = Sonderfall der
|
||||
Feiertags-/Einarbeitungslogik: kein Feiertagsentgelt für die
|
||||
arbeitsfreien Tage, Einarbeitung als Normalarbeit (1:1, kein
|
||||
Zuschlag) → Work-Entry-Typ „arbeitsfrei (Einarbeitung)" mit
|
||||
Gegenbuchung.
|
||||
- **13-Wochen-Frist** und **10-Gesamtstunden-Grenze** sind
|
||||
Prüfparameter der Einarbeitungsplanung; **2-Wochen-Vorankündigung**
|
||||
des Betriebs als Frist.
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-azm-02 (Einarbeiten in Verbindung mit
|
||||
Feiertagen) · lb-azm-03 (Gleitzeit) · Cluster `efz`
|
||||
(Entgeltfortzahlung an Feiertagen)
|
||||
@@ -0,0 +1,64 @@
|
||||
---
|
||||
id: lb-bnd-59
|
||||
batch: 10
|
||||
title: "Muster - Entlassung"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Beendigungsarten"
|
||||
topic: beendigungsarten
|
||||
author: "Thöny-Maier"
|
||||
stand: 2026-06
|
||||
source:
|
||||
pdf: ".lexis360/muster/Lexis360_muster_entlassung.pdf"
|
||||
text: ".lexis360/md/muster_entlassung.md"
|
||||
legal_bases: []
|
||||
tags: [entlassung, fristlose, arbeitsmaterialien, abrechnungspapiere, uebergabe]
|
||||
cross_refs: ["lb-bnd-32", "lb-bnd-33", "lb-bnd-49"]
|
||||
---
|
||||
|
||||
# Muster: Entlassung
|
||||
|
||||
*Lexis Briefings Personalrecht, Thöny-Maier, Stand Juni 2026 (lb-bnd-59).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
- **Kernformel:** „Wegen Ihres Verhaltens am/des Vorfalles vom [Datum]
|
||||
sehen wir uns gezwungen, Sie entsprechend den einschlägigen gesetzlichen
|
||||
Bestimmungen hiermit **fristlos zu entlassen**."
|
||||
- **Materialrückgabe:** Ausgehändigte Arbeitsmaterialien,
|
||||
**Zeiterfassungs-Chip**, Arbeitskleidung, Pkw etc. sind „unverzüglich"
|
||||
an die benannte Person/Abteilung zu übergeben.
|
||||
- **Abrechnungspapiere:** Die Abrechnungsunterlagen und Arbeitspapiere
|
||||
werden „bis spätestens [Datum]" an die Adresse des Arbeitnehmers
|
||||
zugesandt (keine persönliche Aushändigung).
|
||||
- **Quittierung:** Unterschriftszeile für die „Bestätigung der
|
||||
Übernahme" (Arbeitnehmer) — die Entlassung selbst braucht keine
|
||||
Unterschrift des Arbeitnehmers zur Wirksamkeit.
|
||||
|
||||
## Kernwerte & Fristen (Stand 2026-06)
|
||||
|
||||
| Baustein | Regel im Muster |
|
||||
|---|---|
|
||||
| Vorfallsbezug | konkrete Datumsangabe des Vorfalls |
|
||||
| Rechtliche Grundlage | „einschlägige gesetzliche Bestimmungen" (ohne §-Nennung) |
|
||||
| Rückgabe | unverzüglich, an benannte Person/Abteilung |
|
||||
| Papiere/Endabrechnung | postalisch bis zum Stichtag |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- Keine §-Zitate im Muster (nur pauschale Bezugnahme auf die
|
||||
gesetzlichen Bestimmungen). Entlassungsgründe/Ansprüche: → lb-bnd-33,
|
||||
lb-bnd-31; Form des Ausspruchs → lb-bnd-32.
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- **Fristlose Entlassung** = Enddatum ohne Kündigungsfrist → in der
|
||||
Endabrechnung: keine Kündigungsentschädigung, aber Prüfung der
|
||||
Sonderzahlungen/Urlaubsersatzleistung (→ lb-end-05, lb-url-09).
|
||||
- **Zeiterfassungs-Chip-Rückgabe** ist ein Daten-Bezugspunkt für die
|
||||
letzten Work-Entries (Beweissicherung bei strittigen Zeitschulden).
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-bnd-32 (Entlassungsausspruch) · lb-bnd-33
|
||||
(Entlassungsgründe Arbeiter und Angestellte) · lb-bnd-49 (Checkliste
|
||||
Entlassung) · lb-bnd-66 (vorübergehende Dienstfreistellung)
|
||||
+94
@@ -0,0 +1,94 @@
|
||||
---
|
||||
id: lb-azm-09
|
||||
batch: 10
|
||||
title: "Muster - Ergänzungsmodule zur Gleitzeitvereinbarung"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Arbeitszeit"
|
||||
topic: arbeitszeitmodelle
|
||||
author: "Lexis Redaktion"
|
||||
stand: 2026-07
|
||||
source:
|
||||
pdf: ".lexis360/muster/Lexis360_muster_erganzungsmodule_zur_gleitzeitvereinbarung.pdf"
|
||||
text: ".lexis360/md/muster_erganzungsmodule_zur_gleitzeitvereinbarung.md"
|
||||
legal_bases: []
|
||||
tags: [gleitzeit, mindestbesetzung, kappung, pauschale, zeittopf, missbrauchsklausel]
|
||||
cross_refs: ["lb-azm-03", "lb-azm-10", "lb-ues-02"]
|
||||
---
|
||||
|
||||
# Muster: Ergänzungsmodule zur Gleitzeitvereinbarung
|
||||
|
||||
*Lexis Briefings Personalrecht, Lexis Redaktion, Stand Juli 2026 (lb-azm-09).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
- **a) Mindestbesetzungsklausel:** Über die Kernarbeitszeit hinaus hat
|
||||
die Organisationseinheit zu bestimmten Zeiten Mindestbesetzungen
|
||||
aufzuweisen; Verteilung durch **im Voraus zu treffende,
|
||||
arbeitnehmerseitig zu dokumentierende, fairne
|
||||
Teameinigung**; bei Nichteinigung/Fairnessverstößen/Verhinderung
|
||||
entscheidet ausnahmsweise der Arbeitgeber (Vorgesetzte).
|
||||
- **b) Öffnungsklausel:** An Tagen bestimmter Anlässe endet der
|
||||
Gleitzeitrahmen erst um späterer Uhrzeit; bis dahin **entfallen
|
||||
Gleitmöglichkeit und Kernarbeitszeit** (Haltbarkeit der
|
||||
maximalen Normalarbeitszeit).
|
||||
- **c) Gleittageklausel:** Mit Zustimmung des Vorgesetzten entfällt an
|
||||
einzelnen Tagen die Kernarbeitszeit; **Anzahl beschränkt**
|
||||
(X Gleittage je Y).
|
||||
- **d) „Pauschalisten“-Klausel:** Bei Überstundenpauschalen/All-in-
|
||||
Entgelten gelten die **zum Ende einer Gleitperiode bestehenden
|
||||
Salden** an Normalarbeitszeitguthaben im Überschreitungsumfang als
|
||||
Mehr-/Überstunden; zusätzlich zu bereits zwingend entstandenen
|
||||
Überstunden auf die **Pauschalen/All-in-Entgelte der
|
||||
Deckungsperiode anrechenbar** und wegen erfolgter Bezahlung
|
||||
**gekappt**.
|
||||
- **e) Vorsorge-/Kappungs-/Missbrauchsklauseln:** Die Salden an
|
||||
Zeitguthaben/Zeitschulden dürfen zu keinem Zeitpunkt (oder zu
|
||||
bestimmten Zeitpunkten der Gleitzeitperiode) die vereinbarten
|
||||
Stunden über- bzw. unterschreiten.
|
||||
- **Systematik (Abschluss):** Gleitzeit = Selbsteinteilung innerhalb
|
||||
des Rahmens/der Periode, begründet **kein Recht** zur
|
||||
Ausweitung/Verringerung der Normalarbeitszeit oder zur
|
||||
eigenmächtigen Mehrleistung. **Übertragbarkeitssaldo überschritten**
|
||||
ohne besondere Genehmigung → Übertragbarkeitsstunden **ersatzlos
|
||||
gestrichen**; **Unterschreitung des Übertragbarkeitssaldos an
|
||||
Zeitschulden** gilt grundsätzlich als **Pflichtverletzung** →
|
||||
**Entgeltkürzung bzw. Entgeltrückverrechnung** (unbeschadet
|
||||
sonstiger Folgen).
|
||||
- **Herkunft:** Muster von o. Univ.-Prof. Dr. Franz Schrank, auch in
|
||||
Schrank, *Arbeitszeit Kommentar* (7. Aufl. 2023).
|
||||
|
||||
## Kernwerte & Fristen (Stand 2026-07)
|
||||
|
||||
| Modul | Regel |
|
||||
|---|---|
|
||||
| Mindestbesetzung | Team-Einigung (fair, dokumentiert); Nichteinigung → Arbeitgeber-Entscheidung |
|
||||
| Öffnungsklausel | Gleitmöglichkeit + Kernarbeitszeit bis X entfallen (bestimmte Anlässe) |
|
||||
| Gleittage | Kernarbeitszeit-Entfall mit Vorgesetzten-Zustimmung, **Anzahl gedeckelt** |
|
||||
| Pauschalisten-Kappung | Gleitperioden-Endsaldo im Überschreitungsumfang = Überstunden → Pauschale/All-in Deckungsperiode, gekappt (bezahlte) |
|
||||
| Kappung | Zeitguthaben/-schulden dürfen nicht X Stunden über/unterschreiten |
|
||||
| Folge Übertretung | Guthaben: **ersatzlos gestrichen**; Schulden: **Pflichtverletzung → Entgeltkürzung/Rückverrechnung** |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- Keine §-Zitate in der Quelle (Klauselwerk zum § 4b AZG-Rahmen); die
|
||||
Kappungs-/Missbrauchssanktionen sind Vertragsfolgen — ⚠
|
||||
Verträglichkeit mit dem AZG-Überstundenregime (Abgeltungspflicht bei
|
||||
Anordnung) im Einzelfall prüfen.
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- **Saldo-Kappung und „gekappte" Überstunden** (Modul d) sind die
|
||||
kritische Schnittstelle zwischen Gleitzeit-Topf und
|
||||
Pauschalen-Deckung: die Abrechnung muss Gleitperioden-Salden in die
|
||||
Deckungsperiode der Pauschale überführen können.
|
||||
- **Kappungsgrenzen (e)** = Konfigurationswerte des
|
||||
Zeitguthaben-Modells (Warn-/Stopp-Schwellen).
|
||||
- **Entgeltkürzung bei Zeitschulden-Unterschreitung** (e) ist eine
|
||||
Vertragsfolge — als Sanktionsregel dokumentieren, nicht als
|
||||
automatische Abzugsmasche ohne Nachweis.
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-azm-03 (Gleitzeit) · lb-azm-10
|
||||
(Gleitzeit-Einzelvereinbarung) · lb-ues-02 (Überstundenpauschale und
|
||||
All-in)
|
||||
@@ -0,0 +1,93 @@
|
||||
---
|
||||
id: lb-azm-10
|
||||
batch: 10
|
||||
title: "Muster - Gleitzeit-Einzelvereinbarung"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Arbeitszeit"
|
||||
topic: arbeitszeitmodelle
|
||||
author: "Lexis Redaktion"
|
||||
stand: 2026-07
|
||||
source:
|
||||
pdf: ".lexis360/muster/Lexis360_muster_gleitzeit_einzelvereinbarung.pdf"
|
||||
text: ".lexis360/md/muster_gleitzeit_einzelvereinbarung.md"
|
||||
legal_bases: ["§ 4b AZG", "MSchG", "VKG"]
|
||||
tags: [gleitzeit, azg, kernarbeitszeit, gleitzeitperiode, zeiterfassung, eltern-gleitzeit]
|
||||
cross_refs: ["lb-azm-03", "lb-azm-09", "lb-azg-03"]
|
||||
---
|
||||
|
||||
# Muster: Gleitzeit-Einzelvereinbarung
|
||||
|
||||
*Lexis Briefings Personalrecht, Lexis Redaktion, Stand Juli 2026 (lb-azm-10).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
- **Basismuster gem. § 4b AZG** (Einzelvereinbarung; Anmerkung: nur
|
||||
für Arbeitnehmer ohne zuständigen Betriebsrat, allenfalls auch für
|
||||
besondere Elterngleitzeiten).
|
||||
- **Mindestinhalt laut Muster:**
|
||||
1. Ausmaß der Normalarbeitszeit/Teilzeitnormalarbeit (Stunden/Woche).
|
||||
2. **Gleitzeitperiode** (Dauer, Beginn), **Gleitzeitrahmen**
|
||||
(Arbeitstage, frühester Beginn, spätestes Ende; **die
|
||||
Normalarbeitszeitgrenze von 10 Stunden darf bei längerem
|
||||
Gleitzeittagesrahmen nicht überschritten werden**); Variante
|
||||
**erweiterte („große") Gleitmöglichkeit: bis 12 Stunden
|
||||
Normalarbeitszeit**, Zeitguthaben auch ganztägig verbraucht
|
||||
(Gleittage je Periode), Gleittage in Zusammenhang mit einer
|
||||
wöchentlichen Ruhezeit nicht ausgeschlossen.
|
||||
3. **Kernarbeitszeit** (feste Uhrzeiten oder Mindeststundenzahl/Tag;
|
||||
Ausnahmen/Gleittage bedürfen der Absprache mit dem Vorgesetzten).
|
||||
4. **Tägliche Ruhepausen:** bei über sechs Stunden Arbeit am Tag
|
||||
**mindestens eine halbe Stunde**, zu nehmen im vereinbarten
|
||||
Zeitfenster.
|
||||
5. **Übertragbarkeitsstunden** in die nächste Periode (Guthaben X,
|
||||
Schulden Y).
|
||||
6. **Fiktive Normalarbeitszeit** (Arbeitstage, Uhrzeiten).
|
||||
7. **Zeiterfassung** (Mittel; Eingabe auswärtiger Arbeitszeiten,
|
||||
Dienstweg/Dienstreise).
|
||||
8. **Vereinbarungsdauer:** unbefristet; **Arbeitgeber-Beendigungsrecht
|
||||
zum Ende einer jeden Gleitzeitperiode mit mindestens
|
||||
zweiwöchiger Vorankündigungsfrist** (Umstellung auf feste
|
||||
Einteilungen/Dienstplan); **Außer-Kraft-Treten beim Entstehen eines
|
||||
zuständigen Betriebsrats** (Ausnahme: Eltern-Gleitzeiten iSd
|
||||
MSchG/VKG), jedenfalls **Ersetzung durch Gleitzeit-/
|
||||
Arbeitszeit-Betriebsvereinbarung**.
|
||||
- **Herkunft:** Muster von o. Univ.-Prof. Dr. Franz Schrank, auch in
|
||||
Schrank, *Arbeitszeit Kommentar* (7. Aufl. 2023).
|
||||
|
||||
## Kernwerte & Fristen (Stand 2026-07)
|
||||
|
||||
| Wert / Regel | Detail |
|
||||
|---|---|
|
||||
| Rechtsbezug | **§ 4b AZG** (gleitende Arbeitszeit) |
|
||||
| Tagesgrenze | **10 Stunden** Normalarbeitszeit (erweitert: 12, Guthaben ganztägig, Gleittage) |
|
||||
| Ruhepause | > 6 Std/Tag → **mind. 30 Min.** |
|
||||
| Übertragbarkeit | X Guthaben- / Y Schuldenstunden in die nächste Periode |
|
||||
| Beendigung (AG) | zum Ende einer Periode, **mind. 2 Wochen Vorankündigung** |
|
||||
| Betriebsrat | Einzelvereinbarung tritt beim Entstehen eines BR außer Kraft (Ausnahme Eltern-Gleitzeit MSchG/VKG); BRV ersetzt |
|
||||
| Zeiterfassung | Pflicht (Mittel + auswärtige Zeiten) |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- **§ 4b AZG** (Gleitzeit) — ausdrücklich zitiert.
|
||||
- **MSchG/VKG** (Eltern-Gleitzeiten) — als Ausnahme erwähnt (ohne
|
||||
§-Zitat) ⚠.
|
||||
- 10/12-Stunden-Grenze, Ruhepausen: AZG-Rahmen — ⚠ §-Zitate über
|
||||
lb-azg-01/02 beziehen.
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- **Gleitzeitperiode + Übertragbarkeitsstunden** sind die Kernparameter
|
||||
des Zeitguthaben-Modells (Topf pro Periode, Übertragbarkeitslimit,
|
||||
Kappung — → lb-azm-09).
|
||||
- **Fiktive Normalarbeitszeit** = Bezugspunkt für die
|
||||
Normalarbeitsstunden-Ausweis (Melde-/Abrechnungsrelevant).
|
||||
- **10- bzw. 12-Stunden-Tagesrahmen** und **30-Minuten-Pause** sind
|
||||
harte AZG-Grenzen in der Work-Entry-Validierung.
|
||||
- **Zeiterfassung** (inkl. auswärtige Zeiten) = Pflichtfeld im
|
||||
Erfassungsprozess (→ Cluster `zer`).
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-azm-03 (Gleitzeit) · lb-azm-09
|
||||
(Ergänzungsmodule) · lb-azg-03 (Normalarbeitszeit) · lb-azm-08
|
||||
(Einarbeiten mit Feiertagen)
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
---
|
||||
id: lb-azg-05
|
||||
batch: 10
|
||||
title: "Muster - Grundklauseln zu Ausmaß und Lage der Arbeitszeit"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Arbeitszeit"
|
||||
topic: arbeitszeitgrenzen
|
||||
author: "Lexis Redaktion"
|
||||
stand: 2026-07
|
||||
source:
|
||||
pdf: ".lexis360/muster/Lexis360_muster_grundklauseln_zu_ausmass_und_lage_der_arbeit.pdf"
|
||||
text: ".lexis360/md/muster_grundklauseln_zu_ausmass_und_lage_der_arbeit.md"
|
||||
legal_bases: ["§ 4b AZG"]
|
||||
tags: [normalarbeitszeit, ausmass, lage, schichtarbeit, durchrechnungszeitraum, gleitzeit, teilzeit]
|
||||
cross_refs: ["lb-azg-02", "lb-azg-03", "lb-azm-10", "lb-tzb-03"]
|
||||
---
|
||||
|
||||
# Muster: Grundklauseln zu Ausmaß und Lage der Arbeitszeit
|
||||
|
||||
*Lexis Briefings Personalrecht, Lexis Redaktion, Stand Juli 2026 (lb-azg-05).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
- **A. Varianten bei Vollzeit:**
|
||||
- **Feste Einteilung:** Ausmaß nach jeweils geltendem KV; Einteilung
|
||||
(ohne BRV) im Rahmen einer **5-Tage-Woche** an festen Wochentagen
|
||||
und Uhrzeiten.
|
||||
- **Schichtarbeit:** Ausmaß nach KV; **Früh-/Nachmittags-/Nachtschicht**
|
||||
mit Zeiten; Schichten nach betrieblichem Schichtplan.
|
||||
- **Durchrechnungszeitraum:** Ausmaß nach KV; Erbringung im
|
||||
Durchschnitt eines Durchrechnungszeitraumes von X Wochen nach
|
||||
5-Tage-Woche-Dienstplänen.
|
||||
- **Gleitzeit:** Ausmaß nach KV; Erbringung als **gleitende
|
||||
Arbeitszeit iSv § 4b AZG**, Einzelheiten aus gesonderter
|
||||
Gleitzeitvereinbarung (→ lb-azm-10).
|
||||
- **B. Varianten bei Teilzeit:**
|
||||
- fester Wochenstundenmaß + feste Tages-/Uhrzeiten;
|
||||
- Durchschnitt eines **Durchrechnungszeitraumes (Wochen/Monate)** +
|
||||
zeitliche Lage (Tage, Uhrzeiten);
|
||||
- Durchrechnungszeitraum + **Dienstplan des Arbeitgebers,
|
||||
mindestens zwei Wochen im Voraus** erstellt, unter möglichster
|
||||
Berücksichtigung von Wünschen des Arbeitnehmers;
|
||||
- **Gleitzeit (Teilzeit)** iSv § 4b AZG, Einzelheiten gesondert.
|
||||
- Alle Varianten: KV-Ausmaß als Rahmen, Betriebsvereinbarung/Vorbehalt
|
||||
(„soweit sich die Einteilung nicht aus einer BRV ergibt").
|
||||
|
||||
## Kernwerte & Fristen (Stand 2026-07)
|
||||
|
||||
| Variante | Ausmaß | Lage |
|
||||
|---|---|---|
|
||||
| Vollzeit fest | KV-Stunden/Woche | 5-Tage-Woche, feste Tage/Uhrzeiten |
|
||||
| Vollzeit Schicht | KV-Stunden/Woche | Schichtplan (Früh/Nachmittag/Nacht) |
|
||||
| Vollzeit Durchrechnung | KV-Stunden/Woche | Ø in X-Wochen-Durchrechnungszeitraum, 5-Tage-Wochen-Pläne |
|
||||
| Vollzeit Gleitzeit | KV-Stunden/Woche | § 4b AZG, gesonderte Vereinbarung |
|
||||
| Teilzeit fest | X Stunden/Woche | feste Tage/Uhrzeiten |
|
||||
| Teilzeit Durchrechnung | X Stunden/Woche | Ø in X-Wochen/-Monaten; Dienstplan **mind. 2 Wochen im Voraus** |
|
||||
| Teilzeit Gleitzeit | X Stunden/Woche | § 4b AZG, gesonderte Vereinbarung |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- **§ 4b AZG** (gleitende Arbeitszeit) — in den Gleitzeit-Varianten
|
||||
zitiert.
|
||||
- KV-Ausmaß/BRV-Vorbehalt ohne §-Zitate — ⚠ je KV.
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- Die **Auswahl der Arbeitszeitvariante** (fest/Schicht/Durchrechnung/
|
||||
Gleitzeit) ist ein Stammdatenparameter des Dienstverhältnisses und
|
||||
bestimmt die Abrechnungslogik (Durchschnittsberechnung, Topf,
|
||||
Zeiterfassung) → Work-Entry-Setup je Variante.
|
||||
- **Dienstpläne mit 2-Wochen-Vorlauf** (Teilzeit-Durchrechnung) =
|
||||
Planungs- und Meldebasis.
|
||||
- KV-Ausmaß als **Versionswert** (KV-Änderung) führen, nicht
|
||||
hard-coden.
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-azg-02 (Arbeitszeitgrenzen allgemein) · lb-azg-03
|
||||
(Normalarbeitszeit) · lb-azm-10 (Gleitzeit-Muster) · lb-tzb-03
|
||||
(Teilzeitbeschäftigung – Arbeitszeit)
|
||||
+64
@@ -0,0 +1,64 @@
|
||||
---
|
||||
id: lb-bnd-60
|
||||
batch: 10
|
||||
title: "Muster - Information über die Beendigung durch Fristablauf"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Beendigungsarten"
|
||||
topic: beendigungsarten
|
||||
author: "Thöny-Maier"
|
||||
stand: 2026-06
|
||||
source:
|
||||
pdf: ".lexis360/muster/Lexis360_muster_information_uber_die_beendigung_durch_frist.pdf"
|
||||
text: ".lexis360/md/muster_information_uber_die_beendigung_durch_frist.md"
|
||||
legal_bases: []
|
||||
tags: [fristablauf, befristung, information, arbeitsmaterialien, endabrechnung]
|
||||
cross_refs: ["lb-bnd-36", "lb-bnd-48"]
|
||||
---
|
||||
|
||||
# Muster: Information über die Beendigung durch Fristablauf
|
||||
|
||||
*Lexis Briefings Personalrecht, Thöny-Maier, Stand Juni 2026 (lb-bnd-60).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
- **Kernformel:** „unter Bezugnahme auf den mit Ihnen am [Datum]
|
||||
abgeschlossenen Arbeitsvertrag halten wir fest, dass Ihr
|
||||
Arbeitsverhältnis am [Datum] **durch Fristablauf endet**."
|
||||
- **Keine Verlängerung:** „Eine Verlängerung bzw die Übernahme in ein
|
||||
unbefristetes Arbeitsverhältnis wird von uns **nicht angestrebt**."
|
||||
- **Materialrückgabe:** Bekleidungsgegenstände, Arbeitsunterlagen,
|
||||
Materialien, Zeiterfassungschip etc. am letzten Arbeitstag nach
|
||||
Arbeitsschluss an die benannte Person übergeben.
|
||||
- **Papiere/Endabrechnung:** per Post „bis spätestens [Datum]" übermittelt.
|
||||
- **Quittierung:** „zur Kenntnis genommen am [Datum]" (Unterschrift
|
||||
Arbeitnehmer) — die Kenntnisnahme ist für den Fristablauf nicht
|
||||
konstitutiv.
|
||||
|
||||
## Kernwerte & Fristen (Stand 2026-06)
|
||||
|
||||
| Baustein | Regel im Muster |
|
||||
|---|---|
|
||||
| Beendigungsart | Fristablauf (zweckbefristetes/zeitbefristetes DV) |
|
||||
| Letzter Arbeitstag | Benennung des konkreten Tages |
|
||||
| Rückgabe | am letzten Arbeitstag nach Arbeitsschluss |
|
||||
| Endabrechnung | postalisch, Stichtagsangabe |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- Keine §-Zitate im Muster. Rechtsrahmen der Befristung/Zeitablauf:
|
||||
→ lb-bnd-36 (Zeitablauf bei Befristung); Praxispunkte → lb-bnd-48.
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- **Fristablauf** erzeugt kein Kündigungsereignis: das DV-Enddatum ist
|
||||
der im Vertrag vereinbarte Befristungsendpunkt → die
|
||||
Endabrechnung/Abmelde-Logik muss Befristungsende und Kündigung sauber
|
||||
trennen (verschiedene Beendigungsarten mit unterschiedlichen
|
||||
Abgabenfolgen, z. B. Sonderzahlungs-Aliquotierung,
|
||||
Kündigungsentschädigung nur bei Kündigung/Auflösung).
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-bnd-36 (Zeitablauf bei Befristung) · lb-bnd-48
|
||||
(Checkliste befristetes Arbeitsverhältnis) · lb-bnd-61 (Textbaustein
|
||||
Befristung zwecks Erprobung) · lb-bnd-63 (neuerliche Befristung)
|
||||
+90
@@ -0,0 +1,90 @@
|
||||
---
|
||||
id: lb-azg-06
|
||||
batch: 10
|
||||
title: "Muster - Normalarbeitszeitdurchrechnungen bei Teilzeitkräften"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Arbeitszeit"
|
||||
topic: arbeitszeitgrenzen
|
||||
author: "Lexis Redaktion"
|
||||
stand: 2026-07
|
||||
source:
|
||||
pdf: ".lexis360/muster/Lexis360_muster_normalarbeitszeitdurchrechnungen_bei_teilze.pdf"
|
||||
text: ".lexis360/md/muster_normalarbeitszeitdurchrechnungen_bei_teilze.md"
|
||||
legal_bases: []
|
||||
tags: [teilzeit, durchrechnungszeitraum, dienstplan, mehrarbeitszuschlag, ogh]
|
||||
cross_refs: ["lb-azg-05", "lb-azg-03", "lb-tzb-03", "lb-tzb-04"]
|
||||
---
|
||||
|
||||
# Muster: Normalarbeitszeitdurchrechnungen bei Teilzeitkräften
|
||||
|
||||
*Lexis Briefings Personalrecht, Lexis Redaktion, Stand Juli 2026 (lb-azg-06).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
- **Dienstplan-Durchrechnungsmodell (Teilzeit):** (1) Ausmaß der
|
||||
Teilzeit (X Stunden/Woche); (2) Erbringung im Rahmen eines
|
||||
**Durchrechnungszeitraumes von jeweils X Wochen** (ab Y); (3)
|
||||
Normalarbeit **mindestens zwei Wochen im Vorhinein** durch
|
||||
betriebsseitige Dienstpläne festgelegt, Wünsche des Arbeitnehmers
|
||||
nach Möglichkeit berücksichtigt; (4) einvernehmliche
|
||||
**Einteilungsschwerpunkte** im Durchrechnungszeitraum (müssen so
|
||||
präzisiert sein, dass sich der Arbeitnehmer darauf einstellen und
|
||||
verlassen kann; auch ob Tagesausmaß oder nur Tagzahl schwankt).
|
||||
- **Anmerkung 1 (Wirkung ohne/ mit Durchrechnungsvereinbarung):**
|
||||
ohne Durchrechnungsvereinbarung kann ein 1:1-Ausgleich von Stunden
|
||||
**nur im jeweiligen Kalendervierteljahr** erfolgen; die
|
||||
Durchrechnungsvereinbarung **bedarf keiner kollektivvertraglichen
|
||||
Ermächtigung**, solange die Arbeitszeit in den für
|
||||
Vollzeitbeschäftigte geltenden **Einzelwochen- und
|
||||
Einzeltagesgrenzen** bleibt; bei bestehender
|
||||
kollektivvertraglicher Durchrechnungsbestimmung ist diese auch auf
|
||||
Teilzeitbeschäftigte grundsätzlich anwendbar (Überschreitung der
|
||||
direktgesetzlichen Grenzen bis zu den KV-geöffneten Grenzen, unter
|
||||
KV-Bedingungen).
|
||||
- **Anmerkung 2 (Fristen/Deckung):** Durchrechnungszeitraum als
|
||||
Mehr-/Vielfaches von Wochen wählen; bei Grenzüberschreitung KV-
|
||||
Grenzen beachten; **bei Fehlen einer längeren KV-Zulassung: für
|
||||
Plussalden jeweils zum Ende von jeweils drei Monaten gem. OGH
|
||||
dennoch die gesetzlichen Mehrarbeitszuschläge von 25 % anfallen und
|
||||
fällig** (die Grundstundenlöhne bleiben im Durchrechnungssystem).
|
||||
- **Anmerkung 3 (Inhaltspräzision):** Einteilungsschwerpunkte
|
||||
verbindlich fassen (Schulferien-Wunsch, AG-Quantitätsbedarfe mit
|
||||
Grund).
|
||||
- **Herkunft:** Muster von o. Univ.-Prof. Dr. Franz Schrank, auch in
|
||||
Schrank, *Arbeitszeitgesetze, Kommentar* (7. Aufl. 2023).
|
||||
|
||||
## Kernwerte & Fristen (Stand 2026-07)
|
||||
|
||||
| Wert / Regel | Detail |
|
||||
|---|---|
|
||||
| Ausgleich ohne Durchrechnungsvereinbarung | nur im **Kalendervierteljahr** (1:1) |
|
||||
| KV-Ermächtigung | nicht nötig, solange **Einzelwochen-/Einzeltagesgrenzen** (Vollzeitmaße) nicht überschritten |
|
||||
| KV-Durchrechnungsbestimmung | gilt auch für Teilzeit (bis zu KV-geöffneten Grenzen, unter KV-Bedingungen) |
|
||||
| **Fälligkeit (OGH)** | Plussalden zum Ende je **3 Monate**: **gesetzliche Mehrarbeitszuschläge 25 % fällig** (Grundstundenlöhne bleiben im System) |
|
||||
| Dienstplan | mind. **2 Wochen im Voraus** |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- **OGH-Judikatur** (3-Monats-Fälligkeit der 25-%-Zuschläge bei
|
||||
Plussalden ohne längere KV-Zulassung) — als „gem OGH" referenziert,
|
||||
ohne Aktenzahl ⚠.
|
||||
- 25 % Mehrarbeitszuschlag = **§ 15 AZG** — ⚠ in der Quelle nicht
|
||||
zitiert, Normzuordnung über lb-ues-01/03 beziehen.
|
||||
- Einzelwochen-/Einzeltagesgrenzen = **§§ 7–9 AZG** — ⚠ nicht zitiert.
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- **Deckungslogik:** Ist-Arbeitszeit vs. Teilzeit-Normalarbeitszeit im
|
||||
Durchrechnungszeitraum; der **3-Monats-Fälligkeit (OGH)** muss die
|
||||
Abrechnung Rechnung tragen (automatische Zuschlagsverrechnung bei
|
||||
Plussaldo zu Quartalsende, wenn keine längere KV-Zulassung).
|
||||
- **25 % Zuschlag** als gesetzlicher Wert (Versionsparameter, nicht
|
||||
hard-coden); Grundstundenlöhne bleiben im Durchschnittssystem.
|
||||
- **2-Wochen-Dienstplan-Vorlauf** als Planungsfrist; Einteilungs-
|
||||
schwergewichte als dokumentierte Erwartungsgrundlage (Anmerkung 3).
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-azg-05 (Grundklauseln) · lb-azg-03
|
||||
(Normalarbeitszeit) · lb-tzb-03 (Teilzeit – Arbeitszeit) · lb-tzb-04
|
||||
(Teilzeit – Mehrarbeit/Überstunden) · lb-ues-01 (Überstunden)
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
---
|
||||
id: lb-azg-07
|
||||
batch: 10
|
||||
title: "Muster - Teilzeitkräfte - Änderungen (Erhöhungen, Senkungen) des Teilzeitausmaßes"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Arbeitszeit"
|
||||
topic: arbeitszeitgrenzen
|
||||
author: "Lexis Redaktion"
|
||||
stand: 2026-07
|
||||
source:
|
||||
pdf: ".lexis360/muster/Lexis360_muster_teilzeitkrafte_anderungen_erhohungen_senkun.pdf"
|
||||
text: ".lexis360/md/muster_teilzeitkrafte_anderungen_erhohungen_senkun.md"
|
||||
legal_bases: []
|
||||
tags: [teilzeit, ausmassaenderung, gehaltsanpassung, sonderzahlungen, mischberechnung]
|
||||
cross_refs: ["lb-azg-08", "lb-azg-05", "lb-tzb-06", "lb-son-01"]
|
||||
---
|
||||
|
||||
# Muster: Teilzeitkräfte – Änderungen (Erhöhungen, Senkungen) des Teilzeitausmaßes
|
||||
|
||||
*Lexis Briefings Personalrecht, Lexis Redaktion, Stand Juli 2026 (lb-azg-07).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
- **Ausmaßänderungsvereinbarung:** (1) bisheriges Ausmaß (X Std/Woche);
|
||||
(2) **Mit Wirkung ab [Stichtag] Erhöhung/Senkung** auf Y Std/Woche;
|
||||
damit verbunden **entsprechende Anpassung des Gehalts/Lohnes** und —
|
||||
**bei Änderung während der
|
||||
Sonderzahlungsanspruchsperiode** (insbesondere während des
|
||||
Kalenderjahres) — eine **Mischberechnung der
|
||||
Sonderzahlungen**; (3) zeitliche Lage der neuen Normalarbeitszeit
|
||||
(neu festgelegt bzw. im Rahmen der bisherigen
|
||||
Durchrechnungs-/Gleitzeitvereinbarung); (4) **Dauer der
|
||||
Ausmaßänderung:** unbefristet / befristet bis [Datum] / befristet auf
|
||||
Dauer der **mutterschafts- und karenzbedingten Abwesenheit** /
|
||||
befristet auf Dauer der derzeitigen **Elternteilzeit**.
|
||||
- **Herkunft:** Muster von o. Univ.-Prof. Dr. Franz Schrank, auch in
|
||||
Schrank, *Arbeitszeitgesetze, Kommentar* (7. Aufl. 2023).
|
||||
|
||||
## Kernwerte & Fristen (Stand 2026-07)
|
||||
|
||||
| Element | Regel |
|
||||
|---|---|
|
||||
| Stichtag | Erhöhung/Senkung mit Wirkung ab [Datum] |
|
||||
| Entgelt | **korrespondierende Anpassung** des Gehalts/Lohnes |
|
||||
| Sonderzahlungen | **Mischberechnung** bei Änderung während der Anspruchsperiode (insb. Kalenderjahr) |
|
||||
| Lage | neu bzw. im bisherigen Durchrechnungs-/Gleitzeitrahmen |
|
||||
| Dauer | unbefristet / befristet / auf Dauer von Mutterschutz-Karenz / Elternteilzeit |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- Keine §-Zitate in der Quelle (Vertragsklausel); die
|
||||
Sonderzahlungen-Mischberechnung folgt dem **§ 87 EStG**-Regime —
|
||||
⚠ in der Quelle nicht zitiert, über lb-son-01/04 beziehen.
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- **Stichtags-Logik:** Ausmaß + Gehalt + (ggf.) Lageänderung treten
|
||||
gleichzeitig in Kraft — Versionswechsel im Entgeltmodell, kein
|
||||
Ad-hoc-Abzug.
|
||||
- **Mischberechnung der Sonderzahlungen** (Anteil
|
||||
altes/neues Ausmaß je Kalendermonat) ist die zentrale Abrechnungs-
|
||||
folge → Sonderzahlungs-Parameter (→ lb-son-01/05).
|
||||
- **Befristung auf Karenz/Elternteilzeit** = automatischer
|
||||
Rückkehr-Stichtag im Kalendermodell (→ Cluster `kar`, `elt`).
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-azg-08 (unterschiedliche Teilzeitausmaße) ·
|
||||
lb-azg-05 (Grundklauseln) · lb-tzb-06 (Wechsel
|
||||
Vollzeit/Teilzeit) · lb-son-01 (Aliquotierung von
|
||||
Sonderzahlungen)
|
||||
+65
@@ -0,0 +1,65 @@
|
||||
---
|
||||
id: lb-azg-08
|
||||
batch: 10
|
||||
title: "Muster - Teilzeitkräfte - Vereinbarung unterschiedlicher Teilzeitausmaße"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Arbeitszeit"
|
||||
topic: arbeitszeitgrenzen
|
||||
author: "Lexis Redaktion"
|
||||
stand: 2026-07
|
||||
source:
|
||||
pdf: ".lexis360/muster/Lexis360_muster_teilzeitkrafte_vereinbarung_unterschiedlich.pdf"
|
||||
text: ".lexis360/md/muster_teilzeitkrafte_vereinbarung_unterschiedlich.md"
|
||||
legal_bases: []
|
||||
tags: [teilzeit, jahresverlauf, saisonal, sonderzahlungen, mischberechnung]
|
||||
cross_refs: ["lb-azg-07", "lb-azg-05", "lb-tzb-03"]
|
||||
---
|
||||
|
||||
# Muster: Teilzeitkräfte – Vereinbarung unterschiedlicher Teilzeitausmaße
|
||||
|
||||
*Lexis Briefings Personalrecht, Lexis Redaktion, Stand Juli 2026 (lb-azg-08).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
- **Vereinbarung unterschiedlicher Teilzeitausmaße im
|
||||
Kalenderjahresverlauf:** (1) das Ausmaß der
|
||||
Teilzeitnormalarbeitszeit wird für **bestimmte Zeiträume (Monate)
|
||||
des Kalenderjahres unterschiedlich** festgelegt (Variante a/b/c:
|
||||
X Stunden/Woche in den Monaten …); (2) das **Gehalt/der Lohn
|
||||
entspricht dem jeweiligen Arbeitszeitausmaß der einzelnen
|
||||
Perioden**, wobei die **Jahressonderzahlungen gemischt
|
||||
berechnet** werden; (3) zeitliche Lage der Normalarbeitszeiten je
|
||||
Periode.
|
||||
- Typische Anwendung: saisonal schwankende Teilzeit (z. B. Tourismusspitzen)
|
||||
mit jahresbezogenem Entgelt- und Sonderzahlungs-Regelwerk.
|
||||
- **Herkunft:** Muster von o. Univ.-Prof. Dr. Franz Schrank, auch in
|
||||
Schrank, *Arbeitszeitgesetze, Kommentar* (7. Aufl. 2023).
|
||||
|
||||
## Kernwerte & Fristen (Stand 2026-07)
|
||||
|
||||
| Element | Regel |
|
||||
|---|---|
|
||||
| Ausmaße | je Periode (Monatsgruppen) unterschiedlich: a) X, b) Y, c) Z Std/Woche |
|
||||
| Entgelt | korrespondiert zum Ausmaß der jeweiligen Periode |
|
||||
| Jahressonderzahlungen | **gemischt berechnet** (Anteile der Periode-Ausmaße) |
|
||||
| Lage | je Periode festgelegt |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- Keine §-Zitate in der Quelle (Vertragsklausel); die
|
||||
Mischberechnung der Sonderzahlungen folgt dem **§ 87 EStG**-Regime —
|
||||
⚠ in der Quelle nicht zitiert, über lb-son-01/04 beziehen.
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- **Periodenbezogene Ausmaß-/Gehaltstabellen** sind ein
|
||||
Entgeltversions-Modell: Stichtag, Ausmaß, Gehalt je Periode.
|
||||
- **Gemischte Sonderzahlungen** über die Periode-Ausmaße =
|
||||
Sonderzahlungs-Abrechnungslogik (→ lb-son-01/05), identisch mit der
|
||||
Mischberechnung bei Ausmaßänderung (→ lb-azg-07).
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-azg-07 (Ausmaßänderungen) · lb-azg-05
|
||||
(Grundklauseln) · lb-tzb-03 (Teilzeit – Arbeitszeit) · lb-son-01
|
||||
(Aliquotierung Sonderzahlungen)
|
||||
+68
@@ -0,0 +1,68 @@
|
||||
---
|
||||
id: lb-bnd-61
|
||||
batch: 10
|
||||
title: "Muster - Textbaustein Dienstvertrag Befristung zwecks Erprobung"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Beendigungsarten"
|
||||
topic: beendigungsarten
|
||||
author: "Thöny-Maier"
|
||||
stand: 2026-06
|
||||
source:
|
||||
pdf: ".lexis360/muster/Lexis360_muster_textbaustein_dienstvertrag_befristung_zweck.pdf"
|
||||
text: ".lexis360/md/muster_textbaustein_dienstvertrag_befristung_zweck.md"
|
||||
legal_bases: ["§ 10a MSchG", "§ 19 Abs 2 AngG", "§ 1158 Abs 2 ABGB"]
|
||||
tags: [zweckbefristung, erprobung, probezeit, probezeitvertrag, msch-g]
|
||||
cross_refs: ["lb-bnd-36", "lb-bnd-48", "lb-bnd-37", "lb-bnd-53"]
|
||||
---
|
||||
|
||||
# Muster: Textbaustein Dienstvertrag — Befristung zwecks Erprobung
|
||||
|
||||
*Lexis Briefings Personalrecht, Thöny-Maier, Stand Juni 2026 (lb-bnd-61).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
- **Klausel:** „Aufgrund der spezifischen Qualifikation, die für die
|
||||
Erfüllung der vereinbarten Aufgaben des Dienstnehmers und seiner im
|
||||
gegenständlichen Vertrag vorgesehenen Verwendung erforderlich ist, wird
|
||||
zur **Erprobung** des Dienstnehmers das Dienstverhältnis auf [X]
|
||||
Monate/bis zum [Datum] befristet."
|
||||
- **Doppelte Angabe (Fußnote *):** entweder die **Zahl der
|
||||
Befristungsmonate** oder ein **konkretes Enddatum** einfügen und das
|
||||
Nichtzutreffende streichen.
|
||||
- **Frauen:** Bei Frauen ist **§ 10a MSchG** zu beachten (Fußnote *).
|
||||
- **Probemonat (Fußnote **):** „Der erste Monat gilt als Probemonat im
|
||||
Sinne des [ ]" — bei Angestellten: **§ 19 Abs 2 AngG**, bei
|
||||
Arbeitern: **§ 1158 Abs 2 ABGB**.
|
||||
|
||||
## Kernwerte & Fristen (Stand 2026-06)
|
||||
|
||||
| Baustein | Regel im Muster |
|
||||
|---|---|
|
||||
| Befristungsform | Zweckbefristung zur Erprobung (spezifische Qualifikation + Verwendung) |
|
||||
| Dauer | Monatszahl ODER konkretes Enddatum (Nichtzutreffendes streichen) |
|
||||
| Probemonat | 1. Monat = Probemonat (§ 19 Abs 2 AngG / § 1158 Abs 2 ABGB) |
|
||||
| Schwangerschutz | bei Frauen § 10a MSchG beachten |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- **§ 10a MSchG** (Schwangerschafts-/Mutterschutz-Befristungsschutz) —
|
||||
in Fußnote genannt.
|
||||
- **§ 19 Abs 2 AngG** (Probemonat, Angestellte) — in Fußnote genannt.
|
||||
- **§ 1158 Abs 2 ABGB** (Probemonat, Arbeiter) — in Fußnote genannt.
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- **Zweckbefristung vs. Zeitbefristung** ist eine eigene
|
||||
Beendigungsart im End-of-employment-Modell: der Erprobungszweck muss
|
||||
als Vertragsklausel dokumentiert sein (Nachweislast bei Anfechtung) →
|
||||
Vertragsdatenfeld „Befristungsart" + Klauselbezug.
|
||||
- **Probemonat** beeinflusst Auflösungsschutz (→ lb-bnd-37) und die
|
||||
Berechtigung von Abfertigungs-/Sonderzahlungsansprüchen — in der
|
||||
Endabrechnung je Beendigungsart abgrenzen.
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-bnd-36 (Zeitablauf bei Befristung) · lb-bnd-48
|
||||
(Checkliste befristetes Arbeitsverhältnis) · lb-bnd-37 (Auflösung in
|
||||
Probezeit) · lb-bnd-53 (Checkliste Auflösung in Probezeit) ·
|
||||
lb-bnd-60 (Fristablauf) · lb-bnd-63 (neuerliche Befristung)
|
||||
@@ -0,0 +1,74 @@
|
||||
---
|
||||
id: lb-aug-03
|
||||
batch: 10
|
||||
title: "Muster - Überlassungsmitteilung"
|
||||
work: "Lexis Briefings Personalrecht"
|
||||
chapter: "Außerhalb des Betriebsstandortes"
|
||||
topic: arbeitskrafteuberlassung
|
||||
author: "Thöny-Maier"
|
||||
stand: 2026-06
|
||||
source:
|
||||
pdf: ".lexis360/muster/Lexis360_muster_uberlassungsmitteilung.pdf"
|
||||
text: ".lexis360/md/muster_uberlassungsmitteilung.md"
|
||||
legal_bases: ["§ 12 AÜG"]
|
||||
tags: [arbeitkraefteuberlassung, aug, ueberlassungsmitteilung, beschaefziger, entgelt]
|
||||
cross_refs: ["lb-aug-01", "lb-aug-02"]
|
||||
---
|
||||
|
||||
# Muster: Überlassungsmitteilung
|
||||
|
||||
*Lexis Briefings Personalrecht, Thöny-Maier, Stand Juni 2026 (lb-aug-03).*
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
- **Formstück gem. § 12 AÜG:** Mitteilung des Überlassers an den
|
||||
überlassenen Arbeitnehmer mit den wesentlichen Eckdaten der
|
||||
Überlassung; der Arbeitnehmer bestätigt den Erhalt durch
|
||||
Unterschrift (Ausfertigung).
|
||||
- **Pflichtinhalte laut Muster:** genauer Arbeitsantritt und
|
||||
voraussichtliche Dauer; **Beschäftiger** (Unternehmensbezeichnung);
|
||||
**Dienstort** (inkl. Angabe, falls auch Arbeiten außerhalb der
|
||||
Betriebsstätte zu verrichten sind); Aufgabengebiet; **wöchentliche
|
||||
Normalarbeitszeit** und deren uhrzeitmäßige Aufteilung auf die
|
||||
Arbeitstage; **Kollektivvertrag des Beschäftigers** und Einstufung
|
||||
(Beschäftigungsgruppe, Berufsjahr); **Entgelt für die Dauer der
|
||||
Überlassung**: monatliches Bruttogehalt **und** getrennt auszuweisende
|
||||
Zulagen, Zuschläge, Sonderzahlungen und Aufwandsentschädigungen
|
||||
(Muster-Fußnote ***).
|
||||
- Die Muster-Fußnoten konkretisieren: genauer Antrittszeitpunkt;
|
||||
Betriebsbezeichnung mit Anschrift; getrennte Ausweisung der
|
||||
Entgeltbestandteile.
|
||||
|
||||
## Kernwerte & Fristen (Stand 2026-06)
|
||||
|
||||
| Inhalt der Mitteilung | Detail |
|
||||
|---|---|
|
||||
| Rechtsbezug | **§ 12 AÜG** (Überlassungsmitteilung) |
|
||||
| Antritt/Dauer | genauer Zeitpunkt + voraussichtliche Dauer |
|
||||
| Beschäftiger/Dienstort | Unternehmensbezeichnung; Ort inkl. außerbetriebliche Arbeit |
|
||||
| Arbeitszeit | wöchentliche Normalarbeitszeit + uhrzeitmäßige Aufteilung |
|
||||
| KV/Einstufung | KV des Beschäftigers; Beschäftigungsgruppe, Berufsjahr |
|
||||
| Entgelt | Bruttogehalt + getrennt: Zulagen, Zuschläge, Sonderzahlungen, Aufwandsentschädigungen |
|
||||
| Nachweis | Unterschrift des Arbeitnehmers (Erhalt) |
|
||||
|
||||
## Rechtsgrundlagen
|
||||
|
||||
- **§ 12 AÜG** (Inhalt/Pflicht der Überlassungsmitteilung) — ausdrücklich
|
||||
zitiert.
|
||||
- Kein KV-/§-Zitat jenseits des AÜG in der Quelle.
|
||||
|
||||
## Payroll-Relevanz (Odoo)
|
||||
|
||||
- Die **getrennte Entgeltstruktur** (Grundgehalt, Zulagen, Zuschläge,
|
||||
Sonderzahlungen, Aufwandsentschädigungen) ist das Datenfundament für die
|
||||
Abrechnung bei AÜ (Verrechnung über den Überlasser, → lb-aug-01/02).
|
||||
- **Beschäftiger-KV und Einstufung** sind Abrechnungsfakten je
|
||||
Überlassung — im Odoo-Modell als Parameter der Überlassung, nicht als
|
||||
Stammdaten des Arbeitnehmers, abbilden.
|
||||
- **Erhalt-Nachweis** (Unterschrift) = Dokumentationspflicht,
|
||||
digitalisierbar als Beleg.
|
||||
|
||||
## Verweise
|
||||
|
||||
- **KB-intern:** lb-aug-01 (Aufgaben Überlasser/Beschäftiger) · lb-aug-02
|
||||
(AÜG-Grundlagen)
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user