[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:
+67
-7
@@ -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 01–04, 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**)
|
||||||
|
|||||||
@@ -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 = 210−215−220−230−243 =
|
||||||
|
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
|
||||||
|
01–04, 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
|
||||||
|
|||||||
Reference in New Issue
Block a user