# Rechenfälle FI-Buchung UGB (GP6) — KFS/BW 6-Buchungsmatrix **Quellen:** Österreichischer Einheitskontenrahmen **KFS/BW 6** (Fachsenat Betriebswirtschaft der Kammer der Wirtschaftstreuhänder 2017; Nutzer-Referenz-Exemplar `.additional_docs/KFSBW6_13072017_ RF.pdf`, extrahiert nach `/tmp/kfsbw6/` — ad hoc, unversioniert); Nutzer-Entscheidungen 2026-09-12 (NET-Konto 3850; Arbeiter/Angestellte- Split bestätigt — 600–619 Löhne, 620–639 Gehälten zugeordnet; BV-Verbindlichkeit 3600; BV-Aufwand Kandidaten 6440 vor 6400). Umsetzung: `models/account_chart_private.py` (Matrix + Hook `_configure_payroll_account_at`), `models/account_posting_private.py` (EKR-Debit-Split), `data/hr_payroll_account_private.xml` (Trigger für Bestands-Companies). Tests: `test_account_private.py`. ## Systematik (GP6, verifiziert) - **Odoo-Mechanik:** `hr_payroll_account` buchet je Payslip-Linie auf `hr.salary.rule.account_debit/account_credit` (Company-Properties); Posting-Schema: Brutto-Regeln **nur Debit** (Aufwand), DN-Abzüge **nur Credit** (Verrechnung), NET **nur Credit** auf das **reconcilable** NET-Konto (`action_register_payment` prüft `NET.account_credit.reconcile` — deshalb Regelcode-Umbenennung NETTO → **NET**), DG-Regeln Debit + Credit. Der Move balanciert automatisch; NET-Konto-Saldo = Netto. - **Hook-Trigger (beide idempotent):** (1) Chart-Load des AT-Kontenrahmens → `account.chart.template._post_load_data` → `_load_payroll_accounts('at', company)`; (2) ``-Datendatei für Bestands-Companies (`res.company.chart_template = 'at'`; der ERSTE `` ist die Record-ID-Liste des Aufrufs — Muster `l10n_be_hr_payroll_account`). Fehlende Konten werden nur gewarnt (Kontenplan der Referenzbuchhaltung ist verbindlich, GP0-Rest); Ausnahme NET-Konto **3850** („Verbindlichkeiten aus Lohn und Gehalt", EKR-Bereich 370–389): wird angelegt und auf reconcile gesetzt — l10n_at-Standardchart hat es nicht. - **EKR-Debit-Split Arbeiter/Angestellte** (KFS/BW 6: 600–619 Löhne, 620–639 Gehälter, 650–655/656–659 Sozialaufwand, 660–665/666–669 Abgaben): `l10n_at_personalgruppe` am Vertrag steuert je Regel das Override-Debitkonto `l10n_at_account_debit_arbeiter` (Gesamtüberschreibung von `_prepare_slip_lines` nach Upstream-Muster, Odoo-Pin 19.0+e.20260910 — kein nativer Override-Punkt). Credits gruppenneutral. **Option A minimal:** Overrides nur für Grundentgelt **6000**, Sozialaufwand **6500**, Abgaben **6600/6601/6602**; Zuschläge (6225), ÜStd (6310), Prämien (6230), SZ (6240) und BV (6440, EKR 644 ohne Split) buchen für Arbeiter bis zur Referenzbuchhaltungs-Fixierung auf die Angestellten-Konten. ## Buchungsmatrix | Regel | Debit Angestellte | Debit Arbeiter (Override) | Credit | |---|---|---|---| | KVGEO, URL_UE | 6200 Gehälter | **6000 Löhne** | — | | NACHT_SV, MEHR_* | 6225 Zulagen | — (Option A) | — | | UE_* | 6310 Überstunden | — (Option A) | — | | PRAM | 6230 Prämien | — (Option A) | — | | B13, B14, B14_RUECK | 6240 Sonderzahlungen | — (Option A) | — | | SVDN_KV/PV/AV/AK/WF, SVDN_SZ | — | — | 3600 SV | | LST_LFD, LST_SZ | — | — | 3540 Lohnsteuer | | **NET** | — | — | **3850 Verbindlichkeiten Lohn/Gehalt** (reconcile) | | SVDG_* (inkl. SZ, UV_GFG) | 6560 Sozialaufwand Angest. | **6500** | 3600 | | BVG | 6440 (EKR 644; Fallback 6400) | — | **3600** (Abfuhr via KV-Träger) | | FLAFDB | 6661 FLAF-DB | 6601 | 3541 Verrechnung DG-Beitrag | | KOMMST | 6660 KommSt | 6600 | 3550 Verrechnung KommSt | | DZ | 6662 DZ | 6602 | 3542 Verrechnung DG-Zuschlag | Journal: **SLR Lohnverrechnung** (Typ allgemein, Default-Konto **6200 Gehälter** — Ausgleichsbuchung bei Unbalance, BE-Muster: Journal-Default = Bezugs-Aufwandskonto; Odoo-Constraint verbietet Receivable/Payable-Konten als Journal-Default); Structure → `journal_id`. ## Rechenfälle (Fixtures test_account_private.py) | RF | Konstellation | Erwartung | |---|---|---| | RF-BUCH-1 | Angestellte(r), November mit B13; Hook zweimal | Matrix verdrahtet (6200/6240/6560/6440/6660/6661, Credits 3600/3540/3550/3541, NET 3850, Journal SLR); 3850 nur 1×; Move **balanciert**; Zeilensalden je Konto = Payslip-Liniensummen (SV-Saldo 3600 = DN+DG+BV; NET = −3850-Saldo) | | RF-BUCH-2 | Personalgruppe **Arbeiter**, November mit B13 | Grundentgelt auf **6000** (6200 = 0), SV-DG auf **6500**, KommSt/FLAF auf **6600/6601**; B13 weiter auf 6240 (Option A); DZ ohne WKO-Flag ohne Zeile; balanciert | | RF-BUCH-3 | Geringfügiger (500 €, §-53a) | 6200 = 500; §-53a-UV 6,50 auf 6560; BVG 7,65 auf 6440; Credit 3600 = 14,15; NET 500 auf 3850; balanciert | | RF-BUCH-4 | Ohne 6000/6600er/3850 im Plan | Hook warnt (fehlend-Liste), Arbeiter-Override bleibt leer → Fallback 6200 für Grundentgelt; 6500 existiert → SV-Override gesetzt; NET-Konto 3850 wird angelegt (reconcile) | ## Offene Punkte / bewusst nicht in GP6 - **Arbeiter-Sub-Konten** (Zuschläge/ÜStd/Prämien/SZ im 600er-Bereich) und die 6600er-Kontenbelegung: Option A minimal — endgültige Codes fixiert die Referenzbuchhaltung (GP0-Rest); Company-Properties sind übersteuerbar, fehlende Kandidaten führen nur zu einer Warnung. - Kein Mapping für DAG (keine Payslip-Zeile, Ausweis GP8), keine Aufrollungs-/Beitragsmonats-Sonderbuchungen (GP8), kein L16/mBGM (GP7). Kein VRV/MVAG/Ansatz — Gemeinde-Schiene bleibt gem360-Brücke. - Auszahlung über `hr_payroll_account_iso20022` (SEPA) — Payment- Registrierung setzt NET-account_credit.reconcile voraus (✓ 3850).