[IMP] odoo-at-payroll: GP7-Bau, DM-ORG-42.7.0-Verifikationen und Nutzer-Entscheidungen 5.1-5.4 dokumentiert

CHANGELOG-GP7-Eintrag; Plan-Abschnitt-10-Update (ELDA-Fixsatz-Konventionen, KZ-210-§-25-Gesamtbrutto-Fund, mBGM-Abschläge je Basis, Nutzer-Entscheidungen: Arbeitsstätte in GP7, Mitteilungsfile-Import GP8, FB+ nicht im Lohnsteuerkern/ANV + Kind-Modell für FABO+-Wartung); MEMORY-Handoff (94/94, Wegwerf-DB, GP8 als nächster Bauabschnitt, offene Reste: odoo_dev-Update, geringfügig-mBGM-Parametrisierung, CRLF/ELDA-Kanal-Verifikation, Referenzbuchhaltungs-Endfixierung, Schwerarbeit nach ASchV-Datenmodell-Bau).
This commit is contained in:
2026-09-12 17:31:21 +02:00
parent 14940ac31a
commit ea14c48cca
3 changed files with 152 additions and 7 deletions
+67 -7
View File
@@ -2,8 +2,45 @@
## Current focus ## Current focus
**GP6 FI-Buchung UGB umgesetzt und grün (88/88 Tests) — nächster **GP7 Meldewesen/Belege umgesetzt und grün (94/94 Tests) — nächster
Bauabschnitt GP7 Meldewesen/Belege (Kern-Bau AP5/AP6)** (2026-09-12): Bauabschnitt GP8 Jahreswechsel/UI/Fristen** (2026-09-12): Kern
19.0.4.0.0 — ELDA-Fixsatz-Framework (`models/elda.py`: Fixlängen,
a/n blank/n null, Cent kaufmännisch, Prozente ×1000, ISO-8859-15,
Dateiheader, Vorlauf SART 00/Schluss SART 99, SANR ab 1 lückenlos,
SANZ inkl. Rahmen; **CRLF-Satztrenner = Praxis-Annahme, DM-ORG
normiert keines — Parallellauf verifizieren**); L16 (`models/
lohnzettel_l16.py`: I1 1.100 + L1 **3.500**, Lohnzettelversion 28,
BEST LF/VSTR 94, ~210 Felder, Kinderblock 15×123 ab Pos. 1501;
**KZ 210 = § 25 GESAMTBrutto** — KZ-245-Formel = laufende Steuer-
bemessung, per Konstruktion GP3-konsistent, Ableitung aus Kern-Flags
ohne paralleles KZ-Feld) + Arbeitsstättenmeldung § 34 Abs 6 (SART 45,
BEST AD/VSTR ST, je AN am 31. 12., GKZ manuell am Dienstort-Partner);
Kind-Modell `l10n.at.payroll.kind` (FB+-Wartung; Nutzer: **FB+ rechnet
NICHT im Lohnsteuerkern** — Steuer < 0 → ANV); Stammdaten
(BKNR/Lohnsteuernummer Company, GKZ Partner, VSNR-Formatprüfung
hr.version.ssnid — Prüfziffer Rest, eSV-AGRD-Mapping
hr.departure.reason); Belege: Lohnzettel AT + Monatsdienstliste +
Monatsjournal (QWeb auf hr.payslip.run; account.report in keinem
HR-Modul). Privat 19.0.7.0.0 — mBGM/JASV (`models/mbgm.py`: PS/G1/
T1/BS/V1, T01/T02-Gesamtsatz aus `at_mbgm_tarif` **normativ laufend
39,05 %/SZ 37,55 %**; Abschläge **je Basis AB und SZ**: A03/A02/A01
§-2a-DN-AV, A09 UV-60, A10 AV+IE, A15 PV; BV-Basis GP5 + V01;
RSUM=Basis×Satz mit GP4-Konsistenzcheck ±0,10 €; Storno R1 REFU,
Fehlanzeige Null-Paket; geringfügig/fallweise OHNE Parametrisierung →
Abbruch, keine Tariferfindung) + Versichertenmeldung (`models/
versichertenmeldung.py`: M3/M4 deklarative Event-Erkennung über
Registry `l10n.at.payroll.vr.event` — idempotent, KEIN write-diff;
BBER 0104, GERF Gehalt-vs-GFG, BVAB/BVJN aus GP5, VWAZ h×100, AGRD;
fallweise BEST MA/SART 32 MVP je Anmeldetag; NSchAB-Company-Flag
+3,80 B001). Tests 94/94 (test_elda_l16 4 + test_meldewesen_private
2), Wegwerf-DB frisch; Rechenfälle `docs/rechenfaelle/meldewesen.md`.
Out: Schwerarbeit (DM-ORG E.22-Struktur vorhanden, keine ASchV-
Basis), § 109a, L17, Mitteilungsfile-Import (5.2→GP8), FB+-LSt
(ANV), geringfügig-mBGM bis Param. Offen: odoo_dev-Update (GP4-
Stand!), Referenzbuchhaltungs-Endfixierung, Parallellauf-Verifikation
CRLF/Kanäle.
**GP6 FI-Buchung UGB umgesetzt und grün (88/88 Tests)** (2026-09-12):
privat 19.0.6.0.0 — Buchungsmatrix nach **KFS/BW 6** (Nutzer- privat 19.0.6.0.0 — Buchungsmatrix nach **KFS/BW 6** (Nutzer-
Referenz-Exemplar `.additional_docs/KFSBW6_13072017_RF.pdf`, extrah. Referenz-Exemplar `.additional_docs/KFSBW6_13072017_RF.pdf`, extrah.
`/tmp/kfsbw6/` ad hoc): Hook `_configure_payroll_account_at` `/tmp/kfsbw6/` ad hoc): Hook `_configure_payroll_account_at`
@@ -192,6 +229,24 @@ B17-Inhalt/B18; Kleinverifikationen s. KB-KONFLIKTE „Nächste Schritte“).
## Completed ## Completed
- **GP7 Meldewesen/Belege umgesetzt (94/94 grün)** (2026-09-12):
Kern 19.0.4.0.0: `models/elda.py` (Fixsatz-Framework),
`lohnzettel_l16.py` (L16 I1/L1 + Arbeitsstätte SART 45;
`l10n.at.payroll.l16` + `.line`), `kind.py` (`l10n.at.payroll.kind`),
`meldewesen.py` (BKNR/Lohnsteuernummer/GKZ/VSNR-Prüfung/AGRD),
`monatsreports.py` + `report/belege_reports.xml` (3 Belege),
`views/meldewesen_views.xml`. Privat 19.0.7.0.0: `mbgm.py`
(`l10n.at.payroll.mbgm[.line]`), `versichertenmeldung.py`
(`l10n.at.payroll.vr` + `.event`-Registry),
`data/rule_parameters_mbgm_private.xml` (at_mbgm_tarif B001/B002
39,05/37,55 ab 2026), `views/meldewesen_views.xml`, NSchAB-Flag.
DM-ORG-42.7.0-Satzstrukturen PDF-verifiziert extrahiert (mBGM
E.32, L16 E.13/E.14 mit vollständiger L1-Tabelle inkl. Kinderblock-
Offsets, VR E.29 mit Pflichtmatrix/AGRD/BBER, Arbeitsstätte E.20,
fallweise E.18; TXT-Fehler vs. PDF dokumentiert — PDF gewinnt).
Rechenfälle `docs/rechenfaelle/meldewesen.md`; README/CHANGELOG/
PLAN-10/MEMORY nachgezogen.
- **GP6 FI-Buchung UGB umgesetzt (88/88 grün)** (2026-09-12): - **GP6 FI-Buchung UGB umgesetzt (88/88 grün)** (2026-09-12):
`l10n_at_hr_payroll_private` 19.0.6.0.0 — Buchungsmatrix KFS/BW 6: `l10n_at_hr_payroll_private` 19.0.6.0.0 — Buchungsmatrix KFS/BW 6:
`models/account_chart_private.py` (Matrix-Dict + Hook `models/account_chart_private.py` (Matrix-Dict + Hook
@@ -1207,12 +1262,17 @@ B17-Inhalt/B18; Kleinverifikationen s. KB-KONFLIKTE „Nächste Schritte“).
GP5 Abfertigung Neu; **GP6 FI-Buchung UGB umgesetzt 2026-09-12** GP5 Abfertigung Neu; **GP6 FI-Buchung UGB umgesetzt 2026-09-12**
`test_kv_katalog` 8 + `test_entgelt_private` 21 + `test_lst_private` `test_kv_katalog` 8 + `test_entgelt_private` 21 + `test_lst_private`
6 + `test_sv_private` 8 + `test_bv_private` 10 + `test_account_private` 6 + `test_sv_private` 8 + `test_bv_private` 10 + `test_account_private`
4 grün auf Wegwerf-DB (**88/88**, frischer `-i`-Lauf — `odoo_dev` 4 + `test_meldewesen_private` 2 grün auf Wegwerf-DB (**94/94**
noch auf GP4-Stand, Update nachholen); Rechenfall-Fixtures unter gesamt mit Kern; `odoo_dev` noch auf GP4-Stand, Update nachholen);
`docs/rechenfaelle/` inkl. buchhaltung.md (KFS/BW-6-Matrix); Rechenfall-Fixtures unter `docs/rechenfaelle/` inkl. buchhaltung.md
GP7 Meldewesen/Belege als Nächstes) + meldewesen.md;
GP7 umgesetzt: mBGM/Versichertenmeldung/fallweise auf dem Kern-Framework;
GP8 Jahreswechsel/UI/Fristen als Nächstes)
- `addons/l10n_at_hr_payroll/` — Bundes-Kern (SV/TASY + GP3 Lohnsteuer - `addons/l10n_at_hr_payroll/` — Bundes-Kern (SV/TASY + GP3 Lohnsteuer
`models/lohnsteuer.py` + **GP4 SV/DB `models/sozialversicherung.py`** + GP4 SV/DB + **GP7 ELDA/L16/Arbeitsstätte/Belege** 19.0.4.0.0 —
`models/elda.py`, `lohnzettel_l16.py`, `kind.py`, `meldewesen.py`,
`monatsreports.py`, `report/belege_reports.xml`;
`test_elda_l16` 4)
(DG/Geringfügigkeit/§ 49/Altersstichtage/§ 2a-Staffel/WF-Vektor/ (DG/Geringfügigkeit/§ 49/Altersstichtage/§ 2a-Staffel/WF-Vektor/
Beitragsmonat/DAG), `rule_parameters_lst_2026.xml` + Beitragsmonat/DAG), `rule_parameters_lst_2026.xml` +
`rule_parameters_sv_2026.xml`; **74/74 grün**) `rule_parameters_sv_2026.xml`; **74/74 grün**)
+57
View File
@@ -1,5 +1,62 @@
# CHANGELOG — odoo-at-payroll # CHANGELOG — odoo-at-payroll
## 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) ## 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 - `addons/l10n_at_hr_payroll_private` (19.0.6.0.0): **GP6 FI-Buchung
@@ -783,6 +783,34 @@ Budget: die Kandidaten 8.13, der DZ (8.11) und die Regel-Optionen
(NSchAB, DAG) laufen über die GP0-/Pilotmandant-Entscheidung bzw. (NSchAB, DAG) laufen über die GP0-/Pilotmandant-Entscheidung bzw.
Change-Requests. Change-Requests.
**Update 2026-09-12 (GP7 umgesetzt):** Meldewesen/Belege komplett
umgesetzt und grün (94/94) — Nutzer-Entscheidungen 5.1-5.4 (2026-
09-12): Arbeitsstättenmeldung § 34 Abs 6 in GP7 (SART 45, BEST AD/
VSTR ST — im selben Jahreslauf wie die L16); Mitteilungsfile-Import
= GP8-Rest; **FB+ rechnet NICHT im Lohnsteuerkern** (Steuer < 0 →
Arbeitnehmerveranlagung — das Kind-Modell dient der FABO+-Wartung
und dem L16-Kinderblock); alles in einem GP7. Kern 19.0.4.0.0:
ELDA-Fixsatz-Framework (`models/elda.py`), L16 (I1 1.100 + L1
3.500, Lohnzettelversion 28, BEST LF/VSTR 94; **KZ 210 = § 25-
Gesamtbrutto** — KZ-245-Formel damit die laufende Steuerbemessung,
per Konstruktion GP3-konsistent; Ableitung aus l10n_at_bemessung/
steuerbefreiung_68/s67_abs, kein paralleles KZ-Feld), Arbeitsstätte,
Kind-Modell, Stammdaten (BKNR/Lohnsteuernummer/GKZ/VSNR-Pruefung/
AGRD-Mapping), 3 Belege (Lohnzettel AT/Monatsdienstliste/Monats-
journal, QWeb auf hr.payslip bzw. hr.payslip.run — account.report
in keinem HR-Modul). Privat 19.0.7.0.0: mBGM/JASV (PS/G1/T1/BS/V1,
T01/T02-Gesamtsatz aus `at_mbgm_tarif` — normativ 39,05 % laufend/
37,55 % SZ; **Abschläge je Basis AB UND SZ** A03/A02/A01 §-2a-DN-AV,
A09/A10/A15; BV-Basis + V01 aus GP5; RSUM=Basis×Satz mit GP4-
Konsistenzcheck; Storno R1/REFU; Fehlanzeige Null-Paket), Ver-
sichertenmeldung M3/M4 (deklarative Event-Erkennung über die
Meldungs-Registry — kein write-diff; BBER/GERF/FRDV/BVAB/BVJN/VWAZ/
AGRD), fallweise Anmeldung BEST MA/SART 32; NSchAB-Company-Flag.
Bewusst nicht: Schwerarbeitsmeldung (DM-ORG E.22-Struktur vorhanden,
keine ASchV-Datenbasis), § 109a (Honorar-Basis), L17 (keine AG-
Pflicht), geringfügig-mBGM bis Parametrisierung (keine Tarif-
erfindung). Rechenfälle `docs/rechenfaelle/meldewesen.md`.
**Update 2026-09-12 (GP6 umgesetzt):** FI-Buchung UGB nach dem **Update 2026-09-12 (GP6 umgesetzt):** FI-Buchung UGB nach dem
Österreichischen Einheitskontenrahmen (KFS/BW 6 — Nutzer-Referenz- Österreichischen Einheitskontenrahmen (KFS/BW 6 — Nutzer-Referenz-
Exemplar `.additional_docs/KFSBW6_13072017_RF.pdf`) umgesetzt und Exemplar `.additional_docs/KFSBW6_13072017_RF.pdf`) umgesetzt und