Files
odoo-at-payroll/addons/l10n_at_hr_payroll_private/docs/rechenfaelle/buchhaltung.md
T
fegger 27654211fb [IMP] l10n_at_hr_payroll_private: GP6 FI-Buchung UGB (KFS/BW-6-Matrix, EKR-Debit-Split, NET-Konvention)
Buchungsmatrix nach dem Oesterreichischen Einheitskontenrahmen (KFS/BW 6; Nutzer-Referenz-Exemplar .additional_docs/KFSBW6_13072017_RF.pdf): Hook _configure_payroll_account_at (models/account_chart_private.py) ordnet Regelkonten, Journal SLR (Default = Gehaelterkonto 6200, BE-Muster) und das NET-Konto 3850 "Verbindlichkeiten aus Lohn und Gehalt" (Nutzer-Entscheidung 5.1; Anlage + reconcile, l10n_at-Standardchart hat es nicht) je Company zu — getriggert beim Chart-Load (_post_load_data) UND ueber die <function>-Datendatei data/hr_payroll_account_private.xml fuer Bestands-Companies (erster <value> einer function ist die Record-ID-Liste, convert.py-Semantik), idempotent. Konto-Suche exakt zuerst, Praefix-Fallback nur bis eine Stelle laenger — verhindert Matches auf Odoo-Scaffold-Konten chartloser Firmen (6000 darf nicht 600000 "Expenses" matchen).

EKR-Debit-Split Arbeiter/Angestellte (Nutzer-Klaerung: 600-619 Loehne, 620-639 Gehaelter — "6000 Gehaelter/6200 Loehne" war gegen die eigene KFS/BW-6-Referenz vertauscht): l10n_at_personalgruppe am Vertrag (models/hr_version_private.py) + Override-Feld l10n_at_account_debit_arbeiter je Regel; Option A minimal (Nutzer-Entscheidung 5.2: Grundentgelt 6000, Sozialaufwand 6500, Abgaben 6600/6601/6602; Zuschlaege/UeStd/Praemien/SZ und BV (EKR 644 ohne Split) buchen fuer Arbeiter bis zur Referenzbuchhaltungs-Fixierung auf die Angestellten-Konten — fehlende Konten warnen, keine Erfindung). models/account_posting_private.py: Gesamtueberschreibung von _prepare_slip_lines nach Upstream-Muster (Odoo-Pin 19.0+e.20260910) mit einzeiliger Kontosubstitution — Odoo bietet dafuer keinen Override-Punkt; Verhalten testgepinnt. Matrix: KVGEO/URL_UE 6200/6000, Zuschlaege 6225, UeStd 6310, Praemien 6230, B13/B14 6240, DN-SV/LSt auf 3600/3540, NET 3850, SVDG-Block 6560/6500 auf 3600, BVG 6440 (Fallback 6400) auf Credit 3600 (Abfuhr via KV-Traeger, Nutzer 5.3), FLAFDB 6661/6601 auf 3541, KOMMST 6660/6600 auf 3550, DZ 6662/6602 auf 3542.

NET-Umbenennung NETTO -> NET (Odoo-Konvention: action_register_payment, net_wage und Negativ-Netto-Erkennung filtern code == NET) inkl. 4 Bestands-Suiten. 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 kollidierte im result_rules-Dict (Netto fiel auf 0); Fix: <function> in salary_rules_private.xml archiviert die Kopie (active=False; KEIN Unlink — struct_id ist NOT NULL und historische Lohnkontolinien behalten ihre Regel-Referenz; One2many blendet Archivierte aus). Journal-Default-Konten duerfen nicht Receivable/Payable sein (Odoo-Constraint); Rundungscents bucht Odoo als Adjustment Entry aufs Journal-Default.

depends: + l10n_at, hr_payroll_account_iso20022 (SEPA-Auszahlung, Plan 4.5; kein VRV/MVAG — gem360-Bruecke). Tests: test_account_private (4: RF-BUCH-1..4 — Kontenplan-Mock ohne Chart-Install, Move-Balance, Kontenzeilen je Matrix, Arbeiter-Split, Geringfuegiger, Fallback/Warnung) — gesamt 88/88 gruen auf Wegwerf-DB (frischer -i-Lauf). Rechenfaelle docs/rechenfaelle/buchhaltung.md. 19.0.6.0.0.
2026-09-12 12:58:53 +02:00

5.4 KiB
Raw Blame History

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 — 600619 Löhne, 620639 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) <function>-Datendatei für Bestands-Companies (res.company.chart_template = 'at'; der ERSTE <value> 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 370389): wird angelegt und auf reconcile gesetzt — l10n_at-Standardchart hat es nicht.
  • EKR-Debit-Split Arbeiter/Angestellte (KFS/BW 6: 600619 Löhne, 620639 Gehälter, 650655/656659 Sozialaufwand, 660665/666669 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).