mirror of
http://100.103.83.12:3003/fegger/odoo-at-payroll.git
synced 2026-09-17 08:52:45 +00:00
[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.
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
# 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) `<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 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).
|
||||
Reference in New Issue
Block a user