Files
odoo-at-payroll/docs/CHANGELOG.md
T
fegger 3c5cc3aded [IMP] odoo-at-payroll: GP9 abgeschlossen — AP9 final, GP1-GP9 komplett, Projekt M8 beendet
CHANGELOG-GP9-Eintrag; MEMORY-Handoff (GP1-GP9 komplett, M8 final, AP10 optional).
2026-09-12 20:44:22 +02:00

428 lines
25 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# CHANGELOG — odoo-at-payroll
## 2026-09-12 — General-AT GP9: UI/Security/Multi-Company/Doku (AP9) — Projekt M8 abgeschlossen
- `addons/l10n_at_hr_payroll` (19.0.5.1.0): **Company-Stammdaten-UI**
(BKNR, Lohnsteuernummer, Bundesland, WKO, WF-Wien — Reiter
„Lohnverrechnung (AT)" am Company-Formular, vorher nur im
Entwicklermodus erreichbar); **Multi-Company-Record-Rules**
(security/security_rules.xml: ir.rule für L16, L16-Line, Kind,
Frist — jede:r Payroll-User sieht nur eigene Companies).
- `addons/l10n_at_hr_payroll_private` (19.0.8.1.0): **Mitarbeiter-
UI** (All-in-Felder § 2g AVRAG + NSchAB-Company-Flag);
**Multi-Company-Record-Rules** (mBGM, mBGM-Line, VR, VR-Event);
**Demo-Datensatz** (data/demo.xml, noupdate: 3 AN inkl. KV,
VSNR, BMSVG; Demo-Company mit BKNR/LStNr/BL — nur Demo-Modus);
**Benutzerhandbuch** (docs/benutzerhandbuch.md: deutsch, ~10
Seiten Quick-Start: Stammdaten, Monatsabrechnung, Meldewesen,
Belege, Fristen, Jahreswechsel, BV-Endabrechnung).
- **GP1-GP9 komplett — AP9 abgeschlossen, Projekt M8 final.**
100/100 Tests grün; `odoo_dev` auf 19.0.5.1.0/19.0.8.1.0.
## 2026-09-12 — General-AT GP8: Fristenkalender, Jahres-Retro, Mitteilungsfile-Import, UI-Reports (M8)
- `addons/l10n_at_hr_payroll` (19.0.5.0.0): **Fristenkalender**
`models/fristenkalender.py` (`l10n.at.payroll.frist` — alle
Melde-/Zahlungsfristen je Company/Jahr: SV 15. Folgemonat,
DB/DZ/KommSt 15., KommSt-Jahreserklärung Ende März, L16/
Arbeitsstätte/§-109a/Schwerarbeit Ende Februar; Auto-Erzeugung
per ir.cron, Überfällig-Färbung, Sprung zur GP7-Deklaration);
**Jahres-Retro-/Aufrollungslauf** `models/jahresretro.py`
(Kontrollsechstel § 67 Abs 10 — Günstig-Vergleich Fixsätze vs.
Tarif je AN; §-77-Abs-3/4-Option; SV rollt auf Beitragsmonat,
mBGM-Storno GP7); **Mitteilungsfile-Import**
`models/mitteilungsfile.py` (ELDA-Rückantwort-XML parsen);
**2027-Parameter-Rahmen** `data/rule_parameters_2027.xml` (nur
Struktur, keine Werte).
- `addons/l10n_at_hr_payroll_private` (19.0.8.0.0):
**Vertragsstichtage-UI** `views/vertragsfelder_views.xml` (GP4-
Stichtage + Status-Flags am Mitarbeiterformular);
**All-in-Deckungsrechnung** + **DAG-Ausweis** `report/
gp8_reports.xml` (QWeb auf hr.payslip/hr.payslip.run);
Frist-mBGM-Verlinkung `models/fristen_private.py` (ref_mbgm_id
nur im Privatmodul — Kern kennt mBGM nicht).
- **B14-Verifikation** (Nutzer-Empfehlung 1): aktuelle Implementierung
praktisch korrekt — „längster Teil" nur bei mehrmonatig
gesplitteten Urlauben relevant, dokumentiert ohne Code-Fix.
- Tests: `test_gp8` (6 — Fristdefinitionen, Cron-Idempotenz,
Überfällig-Logik, Mitteilungsfile-Parser, Import-UserError,
Jahresretro-ohne-Daten) — **100/100 grün** (frischer `-i`-Lauf,
Wegwerf-DB). `odoo_dev` auf GP8 aktualisiert.
## 2026-09-12 — General-AT GP7: Meldewesen/Belege umgesetzt (M7; Kern-Bau AP5/AP6)
- `addons/l10n_at_hr_payroll` (19.0.4.0.0): **ELDA-Fixsatz-Framework**
`models/elda.py` (DM-ORG 42.7.0: Fixlängen ohne Trennzeichen, a/n
linksbündig-blank / n rechtsbündig-0, Cent ohne Interpunktion,
Prozente ×1000, ISO-8859-15, Dateiheader optional, Vorlauf SART 00/
Schluss SART 99 mit SANR-Kette ab 1 und SANZ inkl. Rahmen;
**CRLF als Satztrenner = Praxis-Annahme** — DM-ORG normiert keines).
**Lohnzettel Finanz L16 + Arbeitsstättenmeldung § 34 Abs 6 ASVG**
`models/lohnzettel_l16.py`: I1 (1.100) + L1 (**3.500**,
Lohnzettelversion 28, BEST LF/VSTR 94) inkl. Kinderblock 15×123
ab Pos. 1501 — PDF-verifizierte Positions-Ketten; **KZ 210 =
Bruttobezüge gem. § 25 gesamt** (KZ 245 = 210215220230243 =
laufende Steuerbemessung, konsistent mit der GP3-§-66-Kette per
Konstruktion; Ableitung aus l10n_at_bemessung/steuerbefreiung_68/
s67_abs, KEIN paralleles KZ-Feld). Arbeitsstätte: SART 45 (300,
BEST AD/VSTR ST) je AN am 31. 12. aus dem Dienstort-Partner
(GKZ manuell, Warnung wenn fehlt).
**Kind-Datenmodell** `models/kind.py` (Nutzer-Entscheidung: FB+
rechnet NICHT im Lohnsteuerkern — Steuer < 0 → Arbeitnehmer-
veranlagung; Modell dient der FABO+-Wartung: Monate voll/halb,
Alterstaffel, L16-Kinderblock). **Stammdaten** `models/meldewesen.py`:
BKNR + Lohnsteuernummer (Company), GKZ (res.partner), VSNR-Format-
prüfung LLLPTTMMJJ auf hr.version.ssnid (Prüfziffer = Rest, SVS-
Quelle), eSV-AGRD-Mapping auf hr.departure.reason. **Belege**
(AP6): Lohnzettel AT (ir.actions.report auf hr.payslip) +
Monatsdienstliste + Monatsjournal (QWeb auf hr.payslip.run,
AbstractModel `models/monatsreports.py`; kein HR-Modul nutzt
account.report).
- `addons/l10n_at_hr_payroll_private` (19.0.7.0.0): **mBGM/JASV**
(BEST MB, Version 02; `models/mbgm.py`): Paket PS/mBGM G1/Tarif-
block T1/Verrechnungsbasis BS/Position V1 aus GP4-Beitragsmonats-
Daten; T01/T02-GESAMT-Prozentsatz je BSGR aus `at_mbgm_tarif`
(normativ laufend **39,05 %**, SZ **37,55 %** = DN KV 3,87 + PV
10,25 + AV 2,95 + DG 20,48); **Abschläge je Verrechnungsbasis**
(A03/A02/A01 §-2a-AMPFG DN-AV auf AB UND SZ, A09 UV-60, A10
AV+IE-Entfall, A15 PV-Halbierung; Konkurrenz a4: A10 sperrt
Staffelabschlag); BV-Basis (ungedeckelt, GP5) + V01; RSUM =
Basis×Satz mit Konsistenz-Check gegen GP4-Payslip-Summen (±0,10 €);
Storno R1 (REFU/VSUM wie Original), Fehlanzeige als Null-Paket;
Geringfügige/fallweise ohne Parametrisierung → listenweiser
Abbruch (keine Tarif-Erfindung). **Versichertenmeldung**
`models/versichertenmeldung.py` (BEST VR, Version 03): M3 vor
Arbeitsantritt / M4 (7 Tage) mit deklarativer Event-Erkennung über
die Meldungs-Registry (idempotente Läufe, kein write-diff), BBER
0104, GERF (Gehalt vs. GFG), FRDV, BVAB/BVJN aus GP5, VWAZ
Stunden×100, AGRD aus dem Abgangsgrund-Mapping; **fallweise
Anmeldung** (BEST MA, SART 32, Version 07; MVP je Anmeldetag).
NSchAB-Branche als Company-Flag (B001-T01 + 3,80).
- **Bewusst nicht in GP7:** Schwerarbeitsmeldung (DM-ORG E.22-
Struktur vorhanden, aber keine ASchV-Datenbasis), § 109a (separate
Honorar-Datenbasis), L17 (keine AG-Pflicht), Mitteilungsfile-Import
(Nutzer-Entscheidung 5.2 → GP8), FB+-Lohnsteuermechanik (ANV).
- Tests: `test_elda_l16` (4) + `test_meldewesen_private` (2) —
**94/94 grün** (frischer `-i`-Lauf, Wegwerf-DB). Rechenfälle
`docs/rechenfaelle/meldewesen.md`.
## 2026-09-12 — General-AT GP6: FI-Buchung UGB nach KFS/BW 6 umgesetzt (M6)
- `addons/l10n_at_hr_payroll_private` (19.0.6.0.0): **GP6 FI-Buchung
UGB** auf dem Österreichischen Einheitskontenrahmen (KFS/BW 6,
Nutzer-Referenz-Exemplar `.additional_docs/KFSBW6_13072017_RF.pdf`):
- `models/account_chart_private.py`: Buchungsmatrix + Hook
`_configure_payroll_account_at` (BE-Muster `l10n_be_hr_payroll_
account`): Chart-Load (`_post_load_data`) **und** `<function>`-
Datendatei für Bestands-Companies (erster `<value>` = Record-IDs,
convert.py-Semantik), idempotent. Konto-Suche **exakt zuerst**,
Präfix-Fallback nur bis eine Stelle länger — blockiert Odoo-
Scaffold-Konten chartloser Firmen (6000 darf nicht 600000
„Expenses" matchen). NET-Konto **3850 „Verbindlichkeiten aus
Lohn und Gehalt"** (Nutzer-Entscheidung 5.1) wird angelegt und
auf reconcile gesetzt (l10n_at-Standardchart hat es nicht);
Journal **SLR** mit Default = Gehälterkonto 6200 (BE-Muster; Odoo-
Constraint verbietet Receivable/Payable als Journal-Default).
- **EKR-Debit-Split Arbeiter/Angestellte** (Nutzer-Klärung: 600619
Löhne, 620639 Gehälter — die Angabe „6000 Gehälter/6200 Löhne"
war gegenüber der eigenen KFS/BW-6-Referenz vertauscht):
`l10n_at_personalgruppe` am Vertrag +
`l10n_at_account_debit_arbeiter` je Regel; **Option A minimal**
(Nutzer-Entscheidung 5.2): Overrides nur Grundentgelt 6000,
Sozialaufwand 6500, Abgaben 6600/6601/6602 — Zuschläge (6225),
ÜStd (6310), Prämien (6230), SZ (6240), BV (6440, EKR 644 ohne
Split) buchen für Arbeiter bis zur Referenzbuchhaltungs-
Fixierung auf die Angestellten-Konten (fehlende Konten → Warnung,
keine Erfindung). `models/account_posting_private.py`:
Gesamtüberschreibung von `_prepare_slip_lines` (Odoo bietet
keinen Override-Punkt; Upstream-Kopie Odoo-Pin 19.0+e.20260910
mit einzeiliger Kontosubstitution, testgepinnt).
- **NET-Umbenennung** (NETTO → NET, Odoo-Konvention):
Zahlungsregistrierung (`action_register_payment`), net_wage und
Negativ-Netto-Erkennung filtern `code == 'NET'`. **Odoo-19-Fund:**
das Anlegen einer Structure kopiert die Regeln des
`hr_payroll.default_structure` (BASIC/GROSS/NET/…) via Feld-Default
in `rule_ids` — die kopierte Default-NET-Regel kollidiert im
`result_rules`-Dict (Netto fiel auf 0). Fix: `<function>` in
`salary_rules_private.xml` archiviert die Kopie (`active=False`;
One2many blendet Archivierte aus; KEIN Unlink — historische
Lohnkontolinien behalten die Regel-Referenz; `struct_id` ist
NOT NULL).
- Matrix: KVGEO/URL_UE 6200/6000 · Zuschläge 6225 · ÜStd 6310 ·
Prämien 6230 · B13/B14 6240 · DN-SV/LSt auf 3600/3540 · NET 3850 ·
SVDG-Block 6560/6500 auf 3600 · **BVG 6440 (EKR 644) mit Fallback
6400** auf Credit **3600** (Abfuhr via KV-Träger; 5.3) · FLAFDB
6661/6601 auf 3541 · KOMMST 6660/6600 auf 3550 · DZ 6662/6602
auf 3542. depends: + `l10n_at`, `hr_payroll_account_iso20022`
(SEPA-Auszahlung, Plan 4.5).
- Tests: `test_account_private` (4: RF-BUCH-1..4 — Kontenplan-Mock
ohne Chart-Install; Move-Balance, Kontenzeilen, Arbeiter-Split,
Fallback/Warnung; NET-Rundungscents als Odoo-„Adjustment Entry"
auf Journal-Default mit delta=0.02 toleriert). NETTO→NET in 4
Bestands-Suiten nachgezogen. **88/88 grün** (frischer `-i`-Lauf,
Wegwerf-DB). Rechenfälle `docs/rechenfaelle/buchhaltung.md`.
## 2026-09-11 — General-AT GP5: Abfertigung Neu (BMSVG) umgesetzt (M6, Teil 1)
- `addons/l10n_at_hr_payroll` (19.0.3.1.0): Kern-Parameter
`at_sv_bv_dg` = 1,53 % (§ 6 Abs 1 BMSVG, ab 2003-01-01) in
`rule_parameters_sv_2026.xml`.
- `addons/l10n_at_hr_payroll_private` (19.0.5.0.0): **GP5 Abfertigung
Neu** — Regel `BVG` (ATP_DG, ohne Nettoeffekt) auf **EIGENER,
ungecappter BV-Grundlage** (§ 6 Abs 5 iVm § 49 ASVG: kein HBG-/
Jahresdeckel; ohne §-67-Abs-3/6-Zeilen — § 49 Abs 3 Z 7 ASVG;
Nutzer-Entscheidung: kein Rückgriff auf die SV-SZ-Basis des Kerns,
deren Z-7-Ausschluss fehlt → GP4-Beobachtung bleibt offen
dokumentiert); `models/abfertigung_private.py`:
- **Beitragsfreier erster Monat taggenau** (§ 6 Abs 1): Fenster
[Eintritt, Eintritt + 1 Monat), Pflicht ab Monatsjubiläum
(15. 06. → 15. 07. — KB-Beispiel 4.500/30 × 17 = 2.550,
30-Tage-Aliquotierung via Lohnsteuertage); **Monatsende-Klippe**
(Eintritt 31. 01.) → frei bis Monatsultimo, Pflicht ab
Folgemonatserstem (ABGB-Fristrechnung); **AV ≤ 1 Monat zur
Gänze beitragsfrei**;
- **Wiederzulassung binnen 12 Monaten → Beitragspflicht ab dem
1. Tag** (OGH 9 ObA 30/16a) — Vor-AV **beliebiger Dauer** (auch
< 1 Monat) und schlägt auch die Kurz-AV-Freiheit
(Nutzer-Klarstellung 2026-09-11); Suche über frühere
`hr.version`-Verträge;
- **SZ ohne Fenster-Kürzung**, frei nur bei Beitragsmonat im
Fenster (**taggenau**: Fälligkeit 20. 07. bei Fensterende 15. 07.
pflichtig); läuft **auch für geringfügig Beschäftigte und
Lehrlinge** (§ 46, § 1 Abs 2 Z 1);
- Vertragsfelder `l10n_at_abfertigung_neu` (§ 46-Flag) +
`l10n_at_bv_kasse_id` (neues Modell `l10n.at.bv.kasse` mit
Leitzahl für eSV/mBGM; Seed der 7 Kassen-Namen, lb-gsv-11,
noupdate); Mitarbeiter-Felder `l10n_at_bv_ertraege`/
`l10n_at_bv_monate_extern` (Kassen-Auszug);
- **Anwartschaft** (§ 15: gutgebrachte Beiträge + Erträge, KEINE
Monatsentgelt-Staffel) on-the-fly aus validierten Läufen
(`_at_bv_anwartschaft`); **Anwartschaftsreport** (QWeb auf
`hr.employee`, AbstractModel `bv_report.py`) + **Endabrechnungs-
Wizard** `l10n.at.bv.endabrechnung.wizard` (§§ 14-17: §-14-Abs-2-
Verfügungsmatrix, 36-Beitragsmonate-IMMER-Sperre mit Vor-Monaten,
§-16-Fälligkeit Ende des zweitfolgenden Monats, 6-Monats-
Erklärungsfrist, 5 §-17-Optionen) — Auszahlung durch die MV-Kasse,
kein Payslip-Bestandteil.
- **Bewusst nicht in GP5:** §-7-BMSVG-Fiktivfälle (Präsenz-/Kranken-/
Wochengeld — setzt fehlende Entgeltersatzleistungs-Modellierung
voraus; dokumentierte Option), Geringfügigen-Jahreszahlung +
2,5 % (Zahlungsmodus GP7), BV-Provider (Option).
- Tests: `test_bv_private` (10) neu; **84/84 grün** auf Wegwerf-DB
`gp5_test` (frischer `-i`-Lauf; Aufruf s. README). Rechenfälle
`docs/rechenfaelle/abfertigung.md`.
## 2026-09-11 — General-AT GP4: SV/DB komplett im Kern umgesetzt (M5)
- `addons/l10n_at_hr_payroll` (19.0.3.0.0): `models/sozialversicherung.py`
— DG-Beiträge (ÖGK 2026: DG 20,98 %, Wien 21,23 %), §-54-SZ-Beiträge
DG 20,48 % (KV/PV/AV/UV/IESG), Geringfügigkeit § 5 Abs 2 iVm
**§ 810 Abs 3 ASVG** (GFG 2026 = 551,10 €, Aufwertung ausgesetzt —
A7-Rest gelöst) mit Hochrechnung bei untermonatiger Beschäftigung,
§-53a-Abs-1-UV 6,50 €/Monat, beitragsfreie Bezüge § 49 Abs 3 mit
Jahres-Kumulativen je DN (8 €/AT, 1.000/365/186/300/2.000 €/J,
Homeoffice 3 €/Tag × 100), altersabhängige Satzausschaltungen als
Stichtags-Datumfelder am Vertrag (AlVG § 1 Abs 2 lit e — AV DN+DG
+IESG; § 51 Abs 6 — UV ab 60/Lehrlinge; § 51 Abs 7 — PV hälftig
DG+DN; § 41 Abs 4 lit f FLAG), **ALV-DN-Staffel § 2a AMPFG
(DN-seitig; 0/1/2 % bis 2.225/2.427/2.630 €; auch für SZ; ab 2027
aufgehoben)**, WF-Satzvektor Bundesland × Jahr (Wien 0,75/0,75 ab
1. 1. 2026), Beitragsmonats-Allokation (Anspruchsprinzip, historische
Sätze/HBG je Beitragsmonatsgruppe, 2025-HBG 6.450 €), DAG-Bewertung
§ 1 DAG (19,4 %, Schwelle 1,5 × GFG = 826,65 €, ≥ 2 Geringfügige,
Lohnsumme ohne SZ). Parameter: `rule_parameters_sv_2026.xml` +
AV-Staffel-Umbau (2025/2026/2027-Zeilen) in `rule_parameters_2026.xml`.
- `addons/l10n_at_hr_payroll_private` (19.0.4.0.0):
`salary_rules_sv_private.xml`**SVDN_SZ-Nachtrag** (§ 67 Abs 12
als eigene Abzugszeile; GP3-Lücke: Netto in §-67-Monaten um den
SV-DN(SZ) zu hoch), DG-Block SVDG_*/SVDG_SZ_*/SVDG_UV_GFG (ATP_DG,
ohne Nettoeffekt), FLAFDB (§ 41 FLAG 3,7 %), KOMMST (§ 9 KommStG
3 %), DZ (§§ 122/126 WKG, WKO-flag-gated, Satzvektor je BL ⚠ WKO
8.11) mit gemeinsamer LNK-Basis (Zufluss, ohne §-67-Abs-3/6, lit f
nur FLAF/DZ, Freibetragsstaffel 1.095/1.460 €).
- **Rechtskorrektur § 2a AMPFG:** DN-SV auf laufenden Bezügen und SZ
bei BG ≤ 2.225 € sinkt von pauschal 18,07 % auf 15,12 % (ALV-DN
0 %) — GP3-Rechenfälle RF-L1/L3/L5 und die betroffenen Tests
nachgezogen (Engine war zuvor ohne Staffel); §-19a-Selbstversicherung
2026 = **83,49 €/Monat** (statt ≈ 77,80 € — TASY KVPVBTG19A), Zahlung
direkt an den Träger (kein Lohnabzug).
- Tests: Kern `test_sozialversicherung` (14) + privat `test_sv_private`
(8) neu; GP3-Suiten §-2a-korrigiert — **74/74 grün** auf `odoo_dev`
(Aufruf s. README). Rechenfälle `docs/rechenfaelle/sozialversicherung.md`;
RQ-Privat Abschnitt 4 und KB-KONFLIKTE A7 aufgelöst (§ 810 Abs 3 /
§ 1 DAG / 83,49/826,65); Plan § 10 GP4-Update.
## 2026-09-10 — General-AT: Beschaffungsliste abgearbeitet (Primärquellen lokal)
- **19 RIS-Gesetzestexte** (konsolidiert, Fassung vom 10. 09. 2026;
UrlG 09. 09. 2026) via firecrawl nach `.firecrawl/ris/` beschafft:
AZG, AngG, ArbVG, ASVG, EStG 1988, AVRAG, BAO, AÜG, UrlG, BMSVG,
IESG, Lohnkontenverordnung 2006, MSchG, MSchV, VKG, KBGG, APSG,
FamZeitbG, KommStG. Gesetzesnummern per RIS-Titelsuche ermittelt
(Kurztitel-Fallen: AVRAG „-Anpassungsgesetz", BMSVG „Mitarbeiter-
und Selbständigenvorsorgegesetz", IESG „-Entgeltsicherungsgesetz",
APSG „Arbeitsplatz-Sicherungsgesetz"). Verzeichnis:
`.firecrawl/ris/_README.md`.
- **LStR 2002** als findok-Gesamtdokument XML (Stand 04. 09. 2026,
alle Rz; GP3-kritische 766b/911a/1050/1052/1103/1106/1116a/
11411163 verifiziert) — `.firecrawl/ris/findok/`.
- **ELDA/eSV-Meldewesen** (Stand 07/2026): **DM-ORG 42.7.0**
„Datenaustausch mit Dienstgebern" (Datensatzbeschreibung SV-
Meldungen mBGM/An-Ab-Änderung/JASV **und** Lohnzettel-Finanz) +
Änderungsprotokoll + **Prüfkataloge** L16 (ab 1. 1. 2026, Stand
12/2025)/L17/§ 109a/§ 109b + Mitteilungsfiles-XSDs —
`.firecrawl/ris/elda/`. **SV-Werte 2026** (beitrags- + leistungs-
rechtlich) von sozialversicherung.at — HBGL 6.930 €/GFG 551,10 €
gegen Kern-Parametersatz verifiziert (inkl. GFG-Aufwertungs-
aussetzung 2026 gem. § 810 Abs 3 ASVG).
- **„Krankengeldumlage § 62 ASVG" als Falsch-Prämisse aufgelöst**:
RIS-Gesamtabfrage „Krankengeldumlage" = 0 Treffer; § 62 ASVG =
„Mitteilung über Beitragsrückstände, Beitragsabrechnung"
(konsolidierter Text). Kein GP4-Baustein, kein Kern-Parameter.
Korrigiert in `RECHTSQUELLEN-Privat.md` (Abschn. 4/11/13) und
`IMPLEMENTIERUNGSPLAN-Privat.md` (2.1/4.6/4.7/8.10); Herkunft
vermutlich deutsches U1-Umlageverfahren (EFZG). **Hinweis:**
`RECHTSQUELLEN-Bgld.md` Abschn. 9 und `PLAN-payroll-bgld.md`
führen denselben Prüfpunkt — gegen denselben Befund zu
verifizieren (dort: öffentliche DG).
- `RECHTSQUELLEN-Privat.md` Abschnitt 11 auf Beschaffungsstände
umgestellt ([x] = lokal beschafft, §-Verifikation bleibt GP-Aufgabe);
offen bleiben Pilotmandant, D3, UGB-Buchungsmatrix, Referenz-KV-
Kuratierung (GP1), Bgld-AP0-Abstimmung + ELDA-/FinOnl-Anmeldungen
(Nutzerseite). `RUNBOOK.md`: neue Sektion „Primärquellen-Downloads"
(RIS-Titelsuche-Konventionen, Kurztitel-Fallen, Verifikations-
befund-Disziplin).
## 2026-09-10 — General-AT: KB-Rechtsquellen-Abgleich in RECHTSQUELLEN dokumentiert
- Systematischer Abgleich aller in der Wissensbasis referenzierten
Rechtsquellen (571 Einträge, 2.767 `legal_bases`-Zitate, ~130
Normwerke) gegen `personalverrechnung/RECHTSQUELLEN-Privat.md`:
15 Gesetze auf Gesetzesebene enthalten (mit §-Ebenen-Lücken), ~85
bewusst außerhalb des R1-Scopes, 12 echte Lücken identifiziert
(weder RQ noch Beschaffungsliste noch Plan erfasst).
- `RECHTSQUELLEN-Privat.md`: neuer **Abschnitt 13** (Abgleichs-
methodik + Matrix „enthalten mit §-Lücken", Zuordnung bekannt
offen/Plan-erfasst/echte Lücken, Outside-Scope-Abgrenzung mit
Compliance-Randnotizen) + Beschaffungslisten-Erweiterung in
Abschnitt 11: AVRAG § 2g/§ 11a Abs 4; ASVG-Beitrags-/Melde-Rechts-
block (§§ 11/33/34/41/471a/49 Abs 2/3/44 Abs 7/51/53b/60/143);
EStG §§ 3/63/67a/69/109a/124b Z 478 lit f; KommStG § 10 +
BAO §§ 4/29/30 (Betriebsstätte); AÜG (Überlasser-Betriebsstätte);
UrlG §§ 7/10a; BMSVG §§ 7/912/27a/47; IESG § 12; Lohnkonten-
verordnung 2006; Mutterschutz-/Karenz-Block (MSchG/MSchV, VKG,
KBGG, APSG, FamZeitbG) als Scope-Entscheidung.
- `IMPLEMENTIERUNGSPLAN-Privat.md`: 4.2 um AVRAG-§-2g-Feinmechanik
(All-in/ÜStd-Pauschale: Grundlohn-Ausweis, Deckungsrechnung,
§ 7-UrlG-Ablöseverbot) erweitert; 8.13 um den Mutterschutz-/
Karenz-Block (Wochengeld = DG-Payroll-Berechnung) ergänzt;
Abschnitt 10 dokumentiert den Nachtrag. Keine Änderung an D1D4,
Scope R1, Meilensteinen, Budget.
## 2026-09-10 — General-AT: Implementierungsplan um Wissensbasis-Anbindung aktualisiert
- `personalverrechnung/IMPLEMENTIERUNGSPLAN-Privat.md`: neuer Abschnitt
**2.1 Wissensbasis-Anbindung** — Verbindlichkeits-Regime
(RECHTSQUELLEN-Privat bleibt verbindlich, KB = kuratierte
Sekundärquelle mit ID + Stand) und Cluster-Anker je GP
(571 Einträge/67 Cluster, Batches 19).
- 4.24.7, 5, 6: kuratierte KB-Belege nachgetragen — GP2-Feinmechanik
(Mehrarbeit § 19d AZG vs. ÜStd, zwei Nachtfenster 225/197,
Feiertagsarbeitsentgelt ab 2026 wieder § 68-begünstigt, SZ-Basis je
KV-Begriff), GP3 (Sechstelformel, Nachzahlungsmodi, Aufrollung
§ 77 Abs 3/4/4a), GP4 (beitragsfreie Bezugsbestandteile § 49 Abs 3
als Jahreskumulative, AK-Umlage/WF als DN-Lohnabzüge,
altersabhängige Satzausschaltungen, AV-Staffel 2026), GP5
(freier BV-Monat taggenau, § 7-BMSVG-Fiktionen), GP7 (L16-KZ-
Struktur, mBGM-Fristen, Schwerarbeitsmeldung, § 109a), GP8
(Jahres-Retro-/Aufrollungslauf, Fristenkalender).
- Neue Offenpunkte: **8.11** Zuschlag zum DG-Beitrag DZ (§§ 122/126
WKG, 0,12 % Bundes- + 0,310,40 % Landeskammeranteil 2026) —
Inventarlücke, Grundsatzentscheidung vor GP4; **8.12** KB-Konflikt-
familien (AK-Umlage-Tragung, WBF-Wien 1,5 %, §-124b-Zitierung,
Beispiel-DN-SV 18,07 % vs. 17,57 %, NSchAB/DAG-Belege) — RIS-Klärung
vor GP3/GP4; **8.13** KB-Scope-Kandidaten (Lohnpfändung, Kranken-
stand-EFZ/Krankenentgelt, Urlaubsersatzleistung, NSchAB, fallweise
Beschäftigung, Sachbezüge, Prämien/Provisionen, Reisekosten/
Pendler) — Entscheidung über Pilotmandant/GP0, keine stillschweigende
Scope-Erweiterung. Keine Änderung an D1D4, Scope R1, Meilensteinen,
Budget.
## 2026-09-09 — General-AT GP1: KV-Framework umgesetzt (M2)
- `addons/l10n_at_hr_payroll_private` (19.0.1.0.0) von Gerüst auf
GP1-Stand: `l10n.at.payroll.kv` (Trace-Link zur KV-Library),
`kv.wert` (versionierte Eckwerte, Muster `hr.rule.parameter.value`),
`kv.gruppe`/`.stufe` (Erfahrungsstufen-Jahrestabellen), Vertragsfelder
auf `hr.version`/`hr.employee` (`kv_id`, `kv_gruppe_id`,
`erfahrungsstufe`, `ueberzahlung`), Import-Wizard (Tabellenpaste,
Sprungwarnung > 10 %, neue `gueltig_ab`-Versionen) samt
Views/Menus/Security.
- Seed D2 (SI-2203 Handwerk und Gewerbe + SI-2748 Metallgewerbe):
Gehaltstabellen ab 1. 1. 2026 aus den KV-Library-Volltexten kuratiert
(18 Gruppen, 131 Stufenwerte, 27 Eckwerte; inkl. Sonder-
Vorrückungsverläufe IV-M/V-OM und aufgelassener VG I).
- Test-Suite `test_kv_katalog` (8 Fälle); statisch validiert (py_compile,
XML-Well-formedness, CSV-Konsistenz, Wizard-Logiksimulation) —
Runtime-Abnahme auf dem Dev-Host ausständig (PostgreSQL).
## 2026-09-09 — General-AT GP0: Rechtsquellen verifiziert (M1)
- `personalverrechnung/RECHTSQUELLEN-Privat.md` angelegt (GP0-Aufgabe 1):
verbindliches Rechtsinventar für `l10n_at_hr_payroll_private`.
- An Primärquellen (RIS, jusline-RIS-Spiegel) verifiziert: FLAF-DB
§ 41 FLAG **3,7 % 2026** (2,7 % ab 2028; GesNr 10008220); KommStG
**3 %** (GesNr 10004841); BMSVG 1,53 % auf Entgelt + SZ ohne
HBG-Cap, § 15 Anwartschaft (keine Monatsentgelt-Staffel), § 14 Abs 2
Verfügungsausschluss; UrlG 30/36 Werktage, § 6-Urlaubsentgelt;
EStG 1988 § 67 sonstige Bezüge (0/6/27/35,75 % im Jahressechstel,
Freigrenze 2.615 €, Kontrollsechstel § 77 Abs 4a) und § 68 Zulagen/
Zuschläge (2026-ÜStd-Maßnahme 15 Überstunden/170 €).
- Plan-Korrekturen `IMPLEMENTIERUNGSPLAN-Privat.md`: Urlaubsentgelt
**§ 6 UrlG** statt § 9 (seit 2001 aufgehoben); 13./14.-Begünstigung
über **§ 67 EStG** statt „§ 68 Abs 5/6" (klärt auch die Rechtsbasis
des Bgld-Offenpunkts P9); EOSB-Anwartschaftsmodell bestätigt;
payroll-Skill-Zitat korrigiert.
- Offen in GP0: Pilotmandant, Referenz-KV-Kuratierung (D2-KVs),
ELDA-/FinOnl-Spezifikationen, AZG/AngG/ArbVG-Volltexte, LStR 2002,
UGB-Buchungsmatrix.
## 2026-09-09 — General-AT-Implementierungsplan freigegeben (M0)
- `personalverrechnung/IMPLEMENTIERUNGSPLAN-Privat.md` für
`l10n_at_hr_payroll_private` (General-AT, KV-basierte Privatwirtschaft)
erstellt und freigegeben: GP0GP10; nächster Schritt **M1 (GP0)**
(`RECHTSQUELLEN-Privat.md` anlegen, RIS-/findok-Verifikationen,
Odoo-API-Neuverifikation, Pilotmandant-Definition, UGB-Buchungsmatrix).
- Freigabe-Entscheidungen: **D1** Plan unter obigem Pfad geführt; **D2**
Referenz-KVs R1 = SI-2203 Handwerk und Gewerbe + SI-2748 Metallgewerbe
(RUNBOOK-Rechenfallset; Feinjustierung je Pilotmandant in GP0); **D3**
**Kern-Vorfinanzierung durch General-AT** — AP3 (Lohnsteuer) und AP4
(SV/DB-Regeln) werden im Kern `l10n_at_hr_payroll` auf General-AT-Kosten
gebaut (Spiegelung der Bgld-Entscheidung „AP3 im Kern"; die GemBG-Structure
erbt sie). Meldewesen/Belege (AP5/AP6) analog, falls der Bgld.-Auftrag bis
M7 nicht erteilt ist; bei Auftragserteilung Anrechnung/Umlegung per
Change-Request. **D4** Odoo-19-Source steht kurzfristig als
Geschwister-Checkout bereit (API-Neuverifikation erste Aufgabe in M1).
- Budgettransparenz: General-AT-spezifischer Anteil ≈ 120172 PT (Rahmen
`personalverrechnung/PLAN-repo-split.md`: ~125175 PT), inkl.
D3-Vorfinanzierung ≈ 180258 PT.
- Housekeeping: README-Modultabelle und Gerüst-README
`l10n_at_hr_payroll_private` auf Planstand aktualisiert;
`.agents/MEMORY.md` fortgeschrieben.
## 2026-09-09 — Repo-Split aus gem360 (Migration)
- History-Import der Payroll-Commits aus `gem360-git` (Branch
`dev-payroll`, pfad-gefiltert via `git filter-repo`; siehe
`personalverrechnung/PLAN-repo-split.md`). Branch heißt hier `main`.
- `l10n_at_hr_payroll` (19.0.1.0.0) ausgegründet: SV-Werte 2026 als
`hr.rule.parameter`-Seed, TASY-Mapping + Import-Wizard; Modelle
umbenannt `gemeinde.payroll.tasy.*``l10n.at.payroll.tasy.*`.
- `l10n_at_gemeinde_payroll` → 19.0.1.4.0: hängt nun an
`l10n_at_hr_payroll` statt `l10n_at_vrv2015` (VRV-Verbleib: Brücke
`l10n_at_gemeinde_payroll_vrv` im gem360-Repo, AP7); Beschreibung auf
AP1+AP2-Stand korrigiert.
- Bootstrap: `AGENTS.md`, Skills (payroll, odoo19-development,
agent-memory), README, CHANGELOG; `l10n_at_hr_payroll_private` als
Gerüst (README only).