[IMP] l10n_at_hr_payroll_private: Sachbezüge (AP12)
This commit is contained in:
+96
-3
@@ -2,6 +2,84 @@
|
||||
|
||||
## Current focus
|
||||
|
||||
**AP 12b wertgebundene Sachbezüge umgesetzt — 166/166 Tests grün**
|
||||
(2026-09-14, freigegeben):
|
||||
|
||||
- **Kern** `l10n_at_hr_payroll` (19.0.8.0.0): neues
|
||||
`hr.salary.rule.l10n_at_sv_art` (`folgt` Default = rückwärtskompatibel,
|
||||
`laufend`/`sonstig`/`keine`) trennt die SV- von der LSt-Zuordnung;
|
||||
`_l10n_at_sv_art` / `_l10n_at_sv_brutto` und die SV-Basis-/§49-/SZ-
|
||||
Pfade angepasst. Notwendig für Hardware-Verkauf (LSt sonstig/SV
|
||||
laufend) und Bonusmeilen (LSt neutral/SV laufend). Kritischer Fix:
|
||||
bei Odoo `DefaultDictPayroll` nur nach `code in result_rules` lesen —
|
||||
`.get()` materialisiert eine leere künftige Regel und brach die LSt-
|
||||
Engine mit `KeyError('total')`. Tests test_17/18 in test_lohnsteuer.
|
||||
- **Privat** `l10n_at_hr_payroll_private` (19.0.9.7.0): neues
|
||||
`models/sachbezuege_private.py` — Model B `hr.version`-Stammdaten
|
||||
+ Mitarbeiter-Relateds für Wagen, Wohnung, Parkplatz, Handyprofil;
|
||||
Werte `at_sb_wagen`/`_co2`/`_wohnung`/`_parkplatz`; Regeln
|
||||
`SB_PARKPLATZ`/`_WOHNUNG`/`_WAGEN`/`_GEBRAUCHT`/`_BONUSMEILEN`/
|
||||
`_HANDY`, Eingaben `ATP_SB_HANDY`/`_GEBRAUCHT`/`_BONUSMEILEN`, View
|
||||
`views/sachbezuege_views.xml`; E2E tests test_sachbezuege2_private.py.
|
||||
- **Abgabenlogik**: Wagen/Wohnung/Parkplatz sowie Handy-Mehrkosten
|
||||
laufend voll abgabenpflichtig. Handy-Verkauf unter Buchwert: SV-
|
||||
laufend + LSt-sonstig + LNK. Bonusmeilen: Drittlohn, nur SV-laufend
|
||||
(Kategorie ATP_DG, also kein Auszahlungsnetto-Brutto), kein LSt-/LNK-
|
||||
Brutto; darauf entfallende DN-SV mindert aber nach §62-Kette die LSt-
|
||||
BG und damit die laufende LSt. Parkplatz als laufend: ⚠ Quelltext
|
||||
lb-sac-18 nennt die Abgabenkategorie nicht ausdrücklich — vor
|
||||
Produktivsetzung RIS/LStR prüfen.
|
||||
- **Recht/MVP-Grenzen**: Wagen §4 SBWVO (CO₂ EZJ, E=0, voller/halber
|
||||
Wert/Kostenbeitrag); Wohnung §2 Abs7a (m² BL, Norm/Besorger kombiniert
|
||||
55,5 %, klein ≤35=0, >35–45 −35 % erste 12 Mon.); Parkplatz §4a
|
||||
(14,53), Handy lb-sac-15, Bonusmeilen lb-sac-08. Nicht automatisiert:
|
||||
Wagen Mini/Pool/Wechsel/Mehrfach, Wohnungs-12-Monats-Retro/Mehrnutzer,
|
||||
Lohnkonto-Nachweise. Rechenfälle RF-SB-7…9 in
|
||||
`docs/rechenfaelle/sachbezuege.md`.
|
||||
- AP12 ist damit abgeschlossen; **AP13 Jobticket** als nächster AP.
|
||||
**Kein Commit** (nur auf Nutzer-Aufforderung).
|
||||
|
||||
**AP 12a steuerfreie Sachbezüge umgesetzt — 159/159 Tests grün**
|
||||
(2026-09-13, Freigabe 1/2: Ja/„erst a dann b“):
|
||||
|
||||
- **Kern** `l10n_at_hr_payroll` (19.0.7.0.0): `hr.salary.rule` Flag
|
||||
`l10n_at_st_frei` (mahlzeit/rabatt/betriebsveranstaltung/jubilaeum/
|
||||
homeoffice), `_l10n_at_st_frei_ytd`/`_l10n_at_st_frei_freie_laufen`
|
||||
(Spieglung der §-49-SV-Seite, YTD je validierter Lauf), Anbindung
|
||||
`_l10n_at_bemessung_laufen` (−st_frei), Parameter `at_st_grenzen`
|
||||
(8 €/AT · 1.000 €/J · 365 €/J · 186 €/J · 3 €/AT + 100 Tage);
|
||||
Tests test_13…16 in test_lohnsteuer.py.
|
||||
- **Privat** `l10n_at_hr_payroll_private` (19.0.9.6.0): Eingaben
|
||||
`ATP_SB_MAHLZEIT`/`_BETRIEBSVERANSTALTUNG`/`_SACHZUWENDUNG`/`_RABATT`/
|
||||
`_HOMEOFFICE` (Mahlzeit/HO is_quantity), Regeln `SB_*` (seq 41–44/48,
|
||||
setzen SV- UND LSt-Flag), Parameter `at_sb_werte` (mahlzeit_wert 8.0 =
|
||||
tatsächl. Bonwert, homeoffice_wert 3.0), `_at_lnk_basis` −st_frei
|
||||
(lohnnebenkostenfrei); 6 E2E-Tests tests/test_sachbezuege_private.py
|
||||
(RF-SB-1…6).
|
||||
- **Zwei Bug-Funde (Testlauf)**: (a) Odoo-19-Engine: Zeilen-Total =
|
||||
amount × qty × rate/100 — tagesbasierte Regeln MÜSSEN `result = wert`
|
||||
(Tageswert) + `result_qty = tage` setzen (erste Version `result =
|
||||
wert × tage` = Doppelzählung, Zeile 800 statt 80); (b) Test-Helfer
|
||||
muss Zeilen nach REGEL-Code (SB_*) filtern, nicht nach Input-Code
|
||||
(ATP_SB_*). (c) LSt-Bemessung: ΔLSt + ΔSVDN = Überhang (SV-DN
|
||||
abzugsfähig) — nicht pauschal ΔLSt = Überhang.
|
||||
- **Doku**: `docs/rechenfaelle/sachbezuege.md` (RF-SB-1…6;
|
||||
Rechtsquellen lb-sac-17/07/02, lb-ges-02, lb-tel-04/05 — Homeoffice-
|
||||
Anchor war in einem XML-Kommentar fälschlich lb-sac-15 = Handy,
|
||||
korrigiert).
|
||||
- **Vorbestehend (nicht AP12a)**: `salary_rules_bvg_private.xml` steht
|
||||
ZWEIMAL in der Data-List des privaten Manifests (Log-Warnung
|
||||
„imported twice“) — beim nächsten Touch bereinigen.
|
||||
- **Nächster Schritt AP12b** (wertgebundene Sachbezüge): Dienstwagen
|
||||
(SBV § 4, CO₂), Kleinwohnung (SBV § 2 Abs 7a, ≤35 m² = 0, 35–45 m²
|
||||
= −35 % ≤12 Mon.), Parkplatz (SBV § 4a € 14,53 — SV/LSt-Kategorie
|
||||
RIS-klären lb-sac-18), Handy (§ 26 Z 9, lb-sac-15), Bonusmeilen
|
||||
(nur SV, lb-sac-08). Freigegebene Stammdaten-Entscheidung:
|
||||
**Model B (`hr.version`-Felder) für wertgebundene, Model A
|
||||
(Eingaben je Lauf) für ereignisgesteuerte** + versionierte SBV-
|
||||
Parameter (CO₂/m² je BL). Jobticket → AP13. **Kein Commit** (Regel:
|
||||
nur auf Nutzer-Aufforderung).
|
||||
|
||||
**AP 11 Lohnpfändung umgesetzt — 103/103 Tests grün** (2026-09-13,
|
||||
freigegeben 2026-09-12/13, Plan: `personalverrechnung/PLAN-Restluecken-AP11.md` §AP11):
|
||||
|
||||
@@ -28,9 +106,10 @@ freigegeben 2026-09-12/13, Plan: `personalverrechnung/PLAN-Restluecken-AP11.md`
|
||||
in `_at_pfa_rule_amount`/`_at_pfa_bruto` (result_rules-Pfad) + finales
|
||||
`round` in `_at_pfaendung_basis` (alle Töpfe).
|
||||
- **Offene Reste** (dokumentiert, nicht geblockt): Unterhaltsexekution
|
||||
75 %/Koinzidenz, Vorschüsse § 290c, Sachbezüge (AP12), Beendigungs-
|
||||
Regeldetails (AP14/15), 2027-AZR-Werte. **Kein Commit** (Nutzer-
|
||||
Freigabe ausstehend).
|
||||
75 %/Koinzidenz, Vorschüsse § 290c, Sachbezüge (AP12 — AP12a jetzt
|
||||
umgesetzt, AP12b folgt), Beendigungs-Regeldetails (AP14/15),
|
||||
2027-AZR-Werte. **Commit `018554b`** (2026-09-13, nach Nutzer-
|
||||
Freigabe „commit, dann ap12").
|
||||
|
||||
**AP 8 Arbeits-/Entgeltbestätigungen umgesetzt — 152/152 Tests
|
||||
grün — damit ist der AP0–AP10-Nutzer-Katalog komplett** (2026-09-12,
|
||||
@@ -1364,6 +1443,20 @@ B17-Inhalt/B18; Kleinverifikationen s. KB-KONFLIKTE „Nächste Schritte“).
|
||||
|
||||
## Decisions & conventions
|
||||
|
||||
- **RIS-Referenzquelle `.ris/`** (2026-09-13, Nutzer): der neue lokale
|
||||
Ordner `.ris/` ist ZUKUNFT die verbindliche Referenzquelle für
|
||||
Gesetzestexte und übernimmt die Rolle von `.additional_docs/ris_normtexte/`
|
||||
(2026-09-11) bzw. `.firecrawl/ris/` als Norm-Verifikationsbasis. Format:
|
||||
je Norm ein Markdown-Auszug mit den in der Lexis360-WKB zitierten
|
||||
Paragraphen (Kopf mit RIS-GesNr + GeltendeFassung-URL, je § Fundstelle +
|
||||
Inkrafttretensdatum + NormDokument-URL), tagesaktuelle Fassung, Abruf
|
||||
2026-09-13; Bestand: ABGB, APSG, APflG, BMSVG, BS-V, BauV, DHG, FLAG,
|
||||
GmbHG, MSchG, MSchV, RStDG, Sachbezugswerteverordnung, StPO.
|
||||
**Auszug ≠ Volltext:** fehlt ein benötigter §, NICHT aus Trainingswerten
|
||||
ergänzen — Beschaffung (firecrawl-RIS-Download, findok-Regel) oder
|
||||
Nutzer-Beleg, Ablage in `.ris/`; gitignored wie die anderen
|
||||
D1-Quellordner.
|
||||
|
||||
- **GP4-Konventionen (2026-09-11, Nutzer-freigegebener Bauplan +**
|
||||
**Quellenverifikation):** (1) **§ 2a AMPFG wirkt nur DN-seitig**
|
||||
(tiers+dn_voll im Parameter; Grenzen nicht aliquotieren; gilt auch
|
||||
|
||||
Reference in New Issue
Block a user