Commit Graph

48 Commits

Author SHA1 Message Date
fegger c8d080f371 [IMP] odoo-at-payroll: GP4-Bau, A7-Auflösung (§ 810 Abs 3 ASVG) und §-2a-Korrekturen dokumentiert
Doku-Registry zum GP4-Bau nachziehen, damit der nächste Agent-Thread
aus dem Repository booten kann (agent-memory-Skill) und die verbindliche
Rechtslage den verifizierten Stand trägt.

Rechtsauflösung A7-Rest: Die Aufwertung der Geringfügigkeitsgrenze ist
für 2026 gem. § 810 Abs 3 ASVG ausgesetzt — deshalb fehlte der 2026-
Eintrag in der RIS-Anmerkungsreihe; GFG 2026 = 551,10 €, DAG-Grenze
826,65 € (TASY MINGRDAGP1, § 1 DAG als Normzitat per ÖGK-Tarifsystem —
lb-sva-12-'ohne Normzitat' erledigt), §-19a-Selbstversicherung 2026 =
83,49 €/Monat (TASY KVPVBTG19A) mit Direct-Zahlung an den Träger.
KB-KONFLIKTE A7 + konsolidierte 'Nächste Schritte' entsprechend
fortgeschrieben (A3 blockiert nur mehr die Formel-7-Optimierung,
nicht den GP4-Kern).

RECHTSQUELLEN-Privat Abschnitt 4: GFG-Zeile auf 2026-Wert korrigiert,
§-53a-Zeile (UV 6,50 € abgeleitet/Selbstversicherung 83,49 €),
§-2a-DN-Klarstellung, SZ-DG-Sätze, Altersausschaltungen, DAG- und
§-49-Zeilen ergänzt (inkl. Korrektur eines GP0-'geringfähig'-
Tippfehlers bei § 53b).

Plan Abschnitt 10: GP4-Freigabestatus-Update (Umsetzung, Rechtsfunde,
Offenliste GP7/GP8); CHANGELOG-Eintrag M5; MEMORY: neuer Fokus
(GP5 Abfertigung Neu als Nächstes), GP4-Konventionen (11 Punkte,
darunter Geringfuegig-Identifiers nach der Nutzer-Korrektur des
Sprachfehlers 'geringfähig' → geringfügig).
2026-09-11 23:22:27 +02:00
fegger 04099fef39 [IMP] l10n_at_hr_payroll_private: GP4 SV/DB-Anbindung (SVDN_SZ-Nachtrag, DG-Regelblock, FLAF/KommSt/DZ)
Anbindung der privatwirtschaftlichen Structure an den GP4-Kern nach
dem bewährten GP3-Muster (dünne 1-Zeilen-Regeln; Logik und Werte
verbleiben im Kern — hr.salary.rule.struct_id ist required, geteilte
Kern-Regeln sind mechanisch unmöglich).

SVDN_SZ-Nachtrag (§ 67 Abs 12): Die SV-DN auf sonstigen Bezügen war in
GP3 nur als Bemessungsbestandteil der §-67-Lohnsteuer wirksam, fehlte
aber als eigene Abzugszeile — das Netto in §-67-Monaten war um den
SV-DN(SZ) zu hoch (RF-L1: 290,79 € nach §-2a-Korrektur). Die Erwartungen
in test_01/test_20 wurden entsprechend korrigiert.

DG-Block (Kategorie ATP_DG, ohne Nettoeffekt): SVDG_KV/PV/AV/UV/WF/IESG
laufend, SVDG_SZ_* auf Sonderzahlungen, SVDG_UV_GFG (§-53a-Pauschale
geringfügig Beschäftigter) sowie die Lohnnebenkosten FLAFDB (§ 41
FLAG), KOMMST (§ 9 KommStG) und DZ (§§ 122/126 WKG, nur bei Company-
Flag l10n_at_wk_mitglied; Satz je Betriebsstätten-Bundesland).

Gemeinsame LNK-Basis in payslip_private.py (_at_lnk_basis): monatlich
gezahlte Arbeitslöhne nach Zufluss, ohne §-67-Abs-3/6-Bezüge (Kern-Flag
l10n_at_s67_abs), lit-f-Befreiung nur für FLAF und DZ (KommSt ohne),
Freibetragsstaffel 1.095/1.460 €.

Rechenfälle docs/rechenfaelle/sozialversicherung.md (RF-SV-1 bis -7)
und §-2a-Korrekturvermerk in lohnsteuer.md. Tests: test_sv_private
(8 Fälle); gesamt 74/74 grün auf odoo_dev.
2026-09-11 23:22:13 +02:00
fegger a2a823ad35 [IMP] l10n_at_hr_payroll: GP4 SV/DB-Kern (DG-Beiträge, Geringfügigkeit, § 49, Beitragsmonat, DAG)
AP4-Kernbau (D3-Vorfinanzierung, freigegebener GP4-Bauplan): Die
Dienstgeberseite der Sozialversicherung wird sektorneutral im Kern
gebaut, damit sowohl das General-AT-Produkt als auch die GemBG-Schiene
sie konsumieren (keine Fork-Werte, payroll-Skill-Architekturregel).

Neu in models/sozialversicherung.py:
- SVDG laufend (ÖGK Normalbetriebe 2026: 20,98 %; Wien 21,23 %) und auf
  Sonderzahlungen (§ 54 ASVG: 20,48 % inkl. UV 1,10 und IESG 0,10);
- Geringfügigkeit § 5 Abs 2 ASVG mit Hochrechnung bei untermonatiger
  Beschäftigung (SZ zählen nicht) und §-53a-Abs-1-UV als Monatspauschale;
- beitragsfreie Bezüge § 49 Abs 3 ASVG als Jahres-Kumulative je DN
  (8 €/AT, 1.000/365/186/300/2.000 €/J, Homeoffice 3 €/Tag × 100);
- altersabhängige Satzausschaltungen als Stichtags-Datumfelder am
  Vertrag: AlVG § 1 Abs 2 lit e (AV DN+DG und IESG), ASVG § 51 Abs 6
  (UV ab 60/Lehrlinge), § 51 Abs 7 (PV in der Bonusphase je hälftig
  DG+DN), FLAG § 41 Abs 4 lit f (LNK-Freiheit ab 60);
- ALV-DN-Staffel § 2a AMPFG, WF-Satzvektor Bundesland × Jahr (Wien
  0,75/0,75 ab 1.1.2026, löst die KB-Protokollnotiz), Beitragsmonats-
  Allokation (Anspruchsprinzip: Sätze/HBG historisch je Gruppe) und
  DAG-Bewertung § 1 DAG (19,4 %, Schwelle 1,5 × GFG, ≥ 2 Geringfügige).

Quellenverifikation (verbindlich): ÖGK-Beitragstarifsystem gültig ab
01.07.2026, TASY-LSWH-Export 2026-03-24, Beitragsrechtliche Werte 2026
und RIS-Normtexte. GFG 2026 = 551,10 € (Aufwertung ausgesetzt gem.
§ 810 Abs 3 ASVG — löst KB-Konflikt A7-Rest); §-19a-Selbstversicherung
2026 = 83,49 €/Monat, DG-UV daraus abgeleitet 6,50 €/Monat.

Rechtskorrektur § 2a AMPFG: Die Staffel mindert nur den DN-Anteil
(ÖGK-Abschläge 'Mind. AV auf 0/1/2 %') und gilt auch für SZ-Beiträge;
bei 2.059,41 € BG sinkt DN-SV von pauschal 18,07 % auf 15,12 %.
test_lohnsteuer wurde entsprechend angepasst (Rechenfälle RF-L1 ff.).

Tests: test_sozialversicherung (14 Fälle); Suite 74/74 grün auf
odoo_dev. Rechenfälle: l10n_at_hr_payroll_private/docs/rechenfaelle/
sozialversicherung.md.
2026-09-11 23:21:55 +02:00
fegger f638f5100d [IMP] odoo-at-payroll: record GP3 income tax build, P0 legal verification and conventions in docs 2026-09-11 22:24:03 +02:00
fegger 90e4bcaa5d [IMP] l10n_at_hr_payroll_private: GP3 payroll tax integration (DN/SV and LSt rules, 67/68 rule flags, tests) 2026-09-11 22:24:03 +02:00
fegger 547c48e456 [IMP] l10n_at_hr_payroll: GP3 Lohnsteuer-Kern (tariff, cumulative monthly tax, 67 sechstel engine, 68 buckets) + TASY runtime fixes 2026-09-11 22:24:03 +02:00
fegger 51ff857414 [IMP] l10n_at_hr_payroll_private: GP2 Entgelt-Engine (structures, WETs, rules, Rechenfall tests) 2026-09-11 20:53:38 +02:00
fegger 80bcf8626b [IMP] l10n_at_hr_payroll: add statutory NAZ and part-time Mehrarbeit parameters (AZG) 2026-09-11 20:53:38 +02:00
fegger 13d5dd8758 [IMP] personalverrechnung: integrate 3rd RIS round (A1 citation fix, A6/A7/A9/A10 resolved)
A-Runde rest points verified against the RIS norm texts downloaded
2026-09-11 (.additional_docs/ris_normtexte/, tagesaktuell):

- A1 (corrected): 2026 Ueberstunden measure = EStG para 124b Z 440
  lit c idF BGBl I 4/2026 (15 UStd/170 EUR for all pay periods 2026,
  Aufrollung 31.05.2026); the previous 'Z 476 lit c idgF BGBl I
  43/2026' attribution was a wrong citation (Z 476 = Pendlerpauschale,
  para 33 Abs 5 Z 4/Abs 8 Z 2). Z 492/494 belong to the
  Feiertagsarbeitsentgelt rule para 68 Abs 1 (Aufrollung 30.09.2026
  = Z 494 idF BGBl I 43/2026). lb-zus-07 and wk-akt-01 confirmed.
- A4 (citation structure): ATZ-Geld = Art. 2 para 27 AlVG, Blockzeit
  quota scale = Art. 7 para 82 Abs 7/8 (788-884 weeks); the earlier
  'para 27 not in force' finding was a search artifact.
- A6 (closed): ALV-Entfall from 2027 = AlVG para 1 Abs 2 lit e idF
  BGBl I 62/2026 (NOR40280219, incl. Korridorpension/erfuellte
  Anwartschaft, Folgemonat); para 49 ASVG 2027 only removes the
  Telearbeitspauschale; AMPFG para 2a repealed 31.12.2026; IESG
  surcharge falls away with the ALV contribution.
- A7 (Fundstellen closed): GFG = ASVG para 5 Abs 2, AK-Umlage =
  AKG para 61; new open point 2026-GFG (551.10 EUR = 2025 value,
  wertkritisch for Pauschale/DAG threshold before GP4/GP8).
- A9 (closed): AZR 2025/2026 = 1,273.99/1,308.39 EUR (ASVG para 293
  Anm. 2); AP5 Pfaendungstabelle buildable on EO paras 291a/292.
- A10 (closed): Altrecht border = 1.1.1955 (APG para 1 Abs 3);
  '1954' only remains the LZP cohort (para 617 Abs 13 ASVG).
- A3 (unchanged): paras 16 Z 4 lit f + 20 Abs 2 Z 1 EStG norm-
  verified; new Verwaltungspraxis not documentable at RIS - remains
  the only AP4 blocker. B16 Bezugszeitraum resolved (Z 492/494).

Layer-2 Abgleich notes of the A1 family (5 entries) corrected;
source quotations untouched (Beleg-Prinzip). Wissensbasis gates
green (--registry/--check: 601 entries, 571 curated, 0 problems).

RUNBOOK/PLAN/RECHTSQUELLEN/MEMORY also carry the parallel GP2 doc
sync present in the working tree; GP2 code (addons/) stays
uncommitted for its own commit.
2026-09-11 18:15:42 +02:00
fegger 4830187d96 [IMP] l10n_at_hr_payroll_private: GP2 data vorlauf (KV seed verification, AZG consolidation, Rechenfaelle) 2026-09-11 16:47:57 +02:00
fegger 9d427c444d [IMP] personalverrechnung: resolve KB conflict families A1-A10 and B1-B18 against primary sources 2026-09-11 16:32:19 +02:00
fegger 299720bd82 [ADD] personalverrechnung: KB-KONFLIKTE consolidated KB conflict snapshot (A/B solution rounds) 2026-09-11 16:32:19 +02:00
fegger fc453938fa [IMP] odoo-at-payroll: sync runbook and agent memory (GP0 sources, GP1 runtime, WIKU batch 1)
RUNBOOK and agent-memory edits each span several work units at once,
so they are recorded together, after the fact:

- RUNBOOK: new section for primary-source downloads (RIS title-search
  conventions and short-title traps, LStR findok XML, ELDA DM-ORG,
  SV values, verification-finding discipline); Wissensbasis section
  renamed to the two-source corpus (Lexis360 briefings + WIKU
  Personal) with the WIKU layers in the architecture table, the WIKU
  batch workflow (--source, WIKU_PINS), batch inventory and the full
  WIKU-batch-1 conflict list
- MEMORY: completed entries for the KB legal-basis cross-check, the
  dev-host setup and GP1 runtime acceptance (including the
  Core/GemBG regular_pay install blocker) and the WIKU batch-1
  intake; 8.12 RIS-clarification list extended by the WIKU conflict
  families; current focus and files-that-matter updated to the
  601-entry corpus
2026-09-11 11:15:59 +02:00
fegger e6598d01cf [ADD] personalverrechnung: WIKU knowledge base (Batch 1)
First WIKU Personal intake (30 licensed publications, source Stands
2023-07 to 2026-09), integrated into the shared curated corpus per
the integration model of 2026-09-10: one corpus, the work field
distinguishes the sources, WIKU entries use the wk-<prefix>-<nn> id
space on the existing cluster map, Layer-2 filenames carry the wiku_
prefix. The corpus grows to 601 curated entries in 69 clusters.

- 30 publications: 13 Fachbroschueren, 3 Arbeitsunterlagen, 2
  Casebooks (geloesste LV-Praxisfaelle) and the twelve 2026 issues of
  the periodical 'WIKU Personal aktuell' (new cluster akt with
  wk-akt-01..12); second new cluster gwe for the trade-specific
  brochures (Gueterbefoerderungsgewerbe, Gastgewerbe); the remaining
  16 publications sit on existing clusters (wk-pfa-01 next to
  lb-pfa-*: vor, kar, bnd, lvr x2, dvh, bes, rei, gsf, grz, ins,
  lsd, pfa, azg, sac, son)
- tooling: multi-source extension of build_lexis_kb.py (--source
  lexis|wiku|all for --extract and --check, --registry over both
  sources); WIKU metadata comes from an explicit WIKU_PINS table
  (slug, cluster, stand, work, chapter, title) instead of Lexis
  breadcrumbs - a PDF without a pin is a hard warning and is never
  extracted; WIKU page-counter footer lines dropped (WIKU_PAGE_RE);
  fix in curated_slugs_for(): the .md suffix is now stripped when the
  wiku_ prefix is removed, so the wiku --check completeness gate
  passes
- curation: the twelve periodical issues were curated in six parallel
  agent groups, each grounded only in its Layer-1 text with a
  self-check on frontmatter/structure/cross-refs; the 19 brochure
  entries from the prior session were re-validated centrally; 30/30
  green
- registry and check green: lexis 571/571 and wiku 30/30 curated,
  0 problems; kb.json and INDEX.md regenerated (601 entries, 69
  clusters, sources and per-source batch counters recorded)
- wissensbasis README: two-source corpus documentation (layers,
  frontmatter schema incl. WIKU works and id spaces, cluster table
  with akt/gwe, per-source update cycle)
- flagged for RIS (documented in the entries): wk-akt-01 par. 124b
  'z 440/492' (pre-BGBl stand of 2026-01) and the wk-akt-07
  Mitarbeiterpraemie citation contradiction 'z 478 vs z 477'
  (z 478 lit f binding); the Feiertagsarbeitsentgelt/UEStd repair is
  resolved via BGBl I 43/2026 in wk-akt-04 and matches the binding
  legal position; new conflict family wk-akt-11 (SV employee shares
  on par. 68 benefits caught by the par. 20 Abs 2 Z 1 EStG deduction
  ban, 'Formel 7' at risk); wk-akt-10 free-contractor DN rate 17.57%
  vs arithmetic 17.07% without WF; wk-akt-07 Wien WF 1.5% (lb-lnk-05
  family); ALV-Entfall draft vs final act (wk-akt-03 vs 04); 2027 SV
  values provisional (wk-akt-05/06)
2026-09-11 11:15:53 +02:00
fegger ee7e16ecee [IMP] odoo-at-payroll: record GP0 source work and GP1 runtime setup in docs
Documentation-only updates from the General-AT track (2026-09-10/11)
that had been left uncommitted; no code changes.

- RECHTSQUELLEN-Privat: new section 13 (cross-check of all 571 KB
  legal_bases citation strings, ~130 statutes, against the binding RQ
  inventory; outside-scope delimitation) and procurement-list
  extensions in section 11 (AVRAG, ASVG contribution/notification
  block, EStG, KommStG/BAO, AUEG, UrlG, BMSVG, IESG, LohnkontenVO,
  Mutterschutz-/Karenz block as scope decision)
- IMPLEMENTIERUNGSPLAN-Privat: new section 2.1 (knowledge-base binding
  regime, KB as curated secondary source with ID and Stand), GP2-GP8
  fine mechanics backed by KB entries, new open points 8.11 DZ
  surcharge decision, 8.12 KB conflict families for RIS clarification
  and 8.13 scope candidates; source reference updated to the
  odoo_19.0+e.20260910 tree
- CHANGELOG: 2026-09-10 entries for the primary-source procurement
  (19 RIS statutes via RIS title search incl. short-title traps, LStR
  2002 findok XML, DM-ORG 42.7.0 with L16/L17 checklists, SV values
  2026), the KB legal-basis cross-check and the plan knowledge-base
  integration; the 'Krankengeldumlage par. 62 ASVG' false premise is
  resolved and corrected in RQ and plan
- README and module README: dev-host runtime documentation (PostgreSQL
  18.6, Python 3.14 venv with editable install of the merged tree,
  odoo_dev database, test invocation via .venv/bin/python -m odoo;
  GP1 test_kv_katalog green, 8 tests 0 errors)
- .gitignore: odoo_19.0+e.20260910/ and .venv/ replace the removed
  odoo/ and odoo_enterprise/ checkouts; ignore local tooling
  (.zed-hours/, /tools/ anchored to the repo root so
  personalverrechnung/tools stays fully tracked)
2026-09-11 11:15:42 +02:00
fegger 665ed6c1fe [IMP] personalverrechnung: wissensbasis README cluster table through batch 9
Bring the README cluster registry table up to the current corpus state
(571 entries in 67 clusters, batches 1-9): append the 27 clusters of
batches 7-9 in batch order, update the rows of clusters extended by
later batches (praemien 7, sonderzahlungen 5, schwangerschaft 7,
arbeitnehmerschutz 16), replace the stale counts paragraph (277/40,
five chapters) with the full batch breakdown and all seventeen
briefings chapters, and align two sentences with the binding skill
rules: new clusters extend all four tool structures including
CHAPTER_TOPIC_MAP for chapter-qualified topic collisions, and values
may only be sourced from the source text or newer KB entries.

Table rows were generated from the tool's CLUSTERS/TOPIC_TO_PREFIX
registries and the Layer-1 catalog, so names, ID ranges (including
the by-design gaps brt/end/bso) and counts are exact.
2026-09-10 21:26:55 +02:00
fegger 1be7a3e107 [ADD] personalverrechnung: Lexis360 knowledge base (Batch 9)
Ninth Lexis 360 intake (63 briefings, source Stands 2025-01 to
2026-08), extending the corpus to 571 curated entries in 67 clusters.
This batch opens the 'Sozialversicherung' chapter (seventeen chapters
in total now) and extends the corpus from employment/payroll topics
into the social-insurance body of law behind them.

- 5 new clusters: beitragsrecht ASVG sva (16: Beitragsgrundlagen,
  beitragsfreie Bezugsbestandteile par. 49 Abs 3, Beitragssaetze,
  Tarifsystem, Faelligkeiten/Verjaehrung, Auftraggeberhaftung,
  Selbst-/Weiterversicherung), baeuerliche Sozialversicherung bsv
  (18: Beitrag und Beitragsvorschreibung, Pflichtversicherung und
  Grenzen, Beitragsgrundlage Einheitswert/Optionen/Pauschale,
  freiwillige Versicherung, Mehrfachversicherung KV/PV,
  Jagdunfall), GSVG/FSVG gsv (12: Selbstlaendige, neue
  Selbststaendige, Gesellschaftsformen und sv-Zuordnung,
  GSVG-Abfertigung), krankenversicherung kvs (4: ASVG-Leistungen),
  pensionsversicherung pvs (13: Pensionsarten, Pensionsberechnung,
  Pensionskonto, Pensionsanpassung, Teilpension)
- intake cleanup: four text-identical duplicate exports removed; the
  five-fold truncated export filename of the BSVG freiwillige
  Versicherung briefings renamed explicitly (Selbstversicherung UV /
  Weiterversicherung KV+PV / Hoeherversicherung PV / Mitarbeiter- und
  Selbstaendigenvorsorge); Mehrfachversicherung KV/PV disambiguated;
  ss-URL-encoded filename normalized
- tooling: BATCH 9; TOPIC_MAP pins for all eight Sozialversicherung
  topic groups (including 'abfertigung-fur-selbststandige' -> gsv so
  the bare 'abfertigung' keyword fallback cannot steal the GSVG
  severance briefing for the end cluster); keyword block 9 ahead of
  block 8 (bauerliche/pensionsart*/krankenversicherung/gsvg/fsvg/
  selbststandige); five new CLUSTERS/TOPIC_TO_PREFIX entries
- cross-batch reconciliation: lb-swa-03's open points (Teilpension
  ab 2026 and Regelpensionsalter, both without norm citation) now
  backed by lb-pvs-12/13 (par. 4a APG) and lb-pvs-02 (par. 16
  Abs 6 APG), with a documented value conflict on the female
  retirement-age cutoff dates (2. 12. 1963/2. 6. 1968 vs 1. 1.
  1964/30. 6. 1968) flagged for RIS
- employee contribution rates 2026 cross-checked against
  RECHTSQUELLEN-Privat and found identical (KV 7.65/3.87+3.78,
  UV 1.10, PV 22.80/10.25+12.55, AV 5.90, IESG 0.10, BVK 1.53,
  maximum contribution base 6930 EUR, marginality threshold
  551.10 EUR, NSchAB 3.80)
- flagged for RIS: sva-06 AK-Umlage 0.50% (employee share per
  source vs employer-only per RECHTSQUELLEN) and par. 53a '14.12'
  percent column vs 14.12 EUR/month, sva-08 continued-insurance
  ceiling 1843.38 EUR implying an 8085 EUR basis above the 2026
  ASVG ceiling (recomputed 1579.44 EUR), bsv-12/13 BSVG ceiling
  35-fold (8085 EUR) vs capped worked example (6615 EUR) and
  'uniform across all social insurance laws' vs ASVG monthly value
  6930 EUR, gsv-11 vs gsv-06 managing-partner thresholds 50%
  (2025-07) vs 25% (2026-07), pvs-02/03/04/05 old-law cutoff 1954
  vs 1955, pvs-08 bonus maximum 481 vs 493.99 EUR, kvs-03 'par. 120
  z 3 ASVG' garble (likely z 4)
- curation in seven parallel agent groups, each with a self-check on
  frontmatter/structure/cross-refs; registry and check green: 571
  sources, 571 curated entries, 0 problems
2026-09-10 21:19:40 +02:00
fegger 8c7837384b [ADD] personalverrechnung: Lexis360 knowledge base (Batch 8)
Eighth Lexis 360 intake (134 briefings, source Stands 2025-06 to
2026-08), extending the corpus to 508 curated entries in 62 clusters.
This batch opens six further briefings chapters ('Beendigungsarten',
'Betriebsrat & Betriebsvereinbarungen', 'Beendigungsansprueche &
Endabrechnung', 'Beendigungsphase - Sonstiges', 'Meldungen &
Verpflichtungen', 'Unternehmensaufloesung & Betriebsuebergang';
sixteen chapters in total now).

- 6 new clusters: beendigungsarten bnd (44: Austritt, Entlassung,
  Kuendung incl. Motiv-/sozialwidrige Kuendung, Probezeit,
  Fruehwarnsystem), betriebsrat brt (35: Befugnisse, BR-Mitglieder,
  Betriebsvereinbarungen, Kuendigungsschutz, Versetzung, Sozialplan),
  endabrechnung end (25: Abfertigung Alt/Neu, freiwillige
  Abfertigungen, Endabrechnung Zeitguthaben, Vergleich,
  Kuendigungsentschaedigung, Abgangsentschaedigung, Outplacement),
  beendigungsphase bso (10: Abmeldung SV, Arbeitslosengeld,
  Dienstzeugnis, Konkurrenzklausel, ASG-Verfahren,
  Aufloesungsabgabe), meldungen mel (8: DSGVO-Datenfragen,
  Informationspflichten, Schriftform, Meldepflichten),
  insolvenz/betriebsuebergang ins (8); existing clusters extended:
  urlaub 14 -> 16, sonderzahlungen 4 -> 5, praemien 6 -> 7
- documented gaps closed: Motivkuendung (lb-bnd-43), Praemien bei
  Beendigung (lb-end-18), Abfertigung Alt / Verfuegungsmoeglichkeiten
  ueber die Abfertigung Neu (lb-end-01/02/03), Rueckzahlung von
  Darlehen (lb-end-25), Ausbildungskostenrueckersatz (lb-end-26),
  BR-Kuendigungs-/Entlassungsschutz (lb-brt-13),
  Betriebsvereinbarungsbriefings (brt cluster), Dienstfreistellung
  waehrend der Kuendigungsfrist (lb-bso-03)
- cross-batch reconciliations (9 back-references): ent-02 -> brt-19/
  22/28/29, ent-11 -> end-26, prd-04 -> brt-13, rhz-04 -> bnd-43,
  vor-10 -> end-01/02/03/16, kar-01 -> end-01/02, lvr-02 ->
  end-06/25, prm-03 -> end-18, sac-06 -> bso-03 + prd-03 (batch-7
  closure)
- brt-01 cross_ref fix: mislabeled lb-ent-01 ('Ueberlassene
  Arbeitskraefte') corrected to lb-aug-01; SV-Meldepflicht pointer
  now lb-mel-08
- ID gaps by design: lb-brt-24, lb-end-07, lb-bso-08 never assigned
  (numbers retired by fossil-ID corrections, never reused)
- tooling: BATCH 8; new CHAPTER_TOPIC_MAP pinning layer (the same
  topic under different chapters resolves to different clusters:
  Sonderzahlungen/Provisionen/Praemien/Urlaubsersatzleistung exist
  in both the Entgelt and the Beendigungsansprueche chapters);
  6 new TOPIC_TO_PREFIX/CLUSTERS entries; keyword-fallback order
  hardened (specific stems before generic beendigung/insolvenz/
  entgelt/urlaub/meldepflicht)
- flagged for RIS: end-01 Abfertigung-Alt wage tax example below the
  binding minimum-6% tariff, end-09 par. 68 overtime exemption
  '10h/120 EUR' vs binding 15h/170 EUR, end-21 example DN-SV rate
  18.07% vs component sum 17.57%, brt-20/22 facultative BV items
  z7-z26 vs z7-z27, brt-15 '40 BRWO' citation garble, bnd-37 garbled
  GlBG paragraph reference, mel-03 DSB retention 6 vs 7 months
  (internal source contradiction), ins-06 inconsistent HBG year
  labels
- curation in 12 groups (g1/g2 in prior sessions; g3 plus ten
  parallel agent groups, each with a self-check on frontmatter/
  structure/cross-refs); registry and check green: 508 sources,
  508 curated entries, 0 problems
2026-09-10 20:17:29 +02:00
fegger 18bcc97133 [ADD] personalverrechnung: Lexis360 knowledge base (Batch 7)
Seventh Lexis 360 intake (97 briefings, source Stands 2026-06 to
2026-08), extending the corpus to 374 curated entries in 56 clusters.
This batch opens five further briefings chapters ('Urlaub &
Karenzierung', 'Schwangerschaft & Elternkarenz', 'Krankenstand &
Arbeitsunfall', 'Dienstverhinderung', 'Ausserhalb des Betriebs-
standortes'; ten chapters in total now).

- 16 new clusters: urlaub (14), krankenstand (9), grenzeinsatz grz
  (8: Ausland/Entsendung/Standortverlegung), karenzsonderformen
  (7: Bildungs-/Hospiz-/Pflegekarenz), elternteilzeit (6), karenz
  (6), kinderbetreuungsgeld (6), praesenzdienst (6), telearbeit
  (6), mutterschutz msf (5: Schutzfristen/Wochengeld), dienst-
  verhinderung dvh (4, incl. Streik), arbeitskraefteueberlassung
  (2, AUEG), entgeltfortzahlung an Feiertagen efz (2), papamonat
  (2), pflegefreistellung (2), wiedereingliederung (2); existing
  clusters extended: arbeitnehmerschutz 12 -> 16 (Arbeitsunfall/
  Berufskrankheit), schwangerschaft 1 -> 7
- documented gaps closed: Bildungskarenz (kzs), Abfertigung Alt
  (lb-kar-01), Entgeltfortzahlung an Feiertagen (lb-efz-01/02),
  Gefahrenevaluierung und Arbeitsverbote (lb-sch-04), Telearbeit
  (tel cluster)
- three truncated duplicate export filenames (auslandstatigkeit_
  sv_tatigkeit_in x3) renamed explicitly before extraction
- cross-batch reconciliations: lb-sch-01's Gefahrenevaluierung gap
  now fully closed (-> lb-sch-04), lb-tzb-02's open Bildungskarenz
  reference resolved (-> lb-kzs-01; terminology conflict with the
  tzb briefing flagged for RIS)
- frontmatter fixes: seven entries of a stalled first curation
  pass used invented topic values (papamonat-und-familienzeit-
  bonus, geburt-schutzfrist, wochengeld) -> normalized to the
  schema values (familienzeit, schutzfrist)
- flagged: asc-15 worked example draws a 42-day contingency
  (1st-service-year pattern) against its own stage table (56
  days), aug paragraph garble ('11503/1503 Abs 30 ABGB', likely
  1153 Abs 30), grz-08 OGH follow-duty case law vs. explicit
  source criticism, efz-01 36-hours compensatory time off,
  dvh-04 pay claims of non-striking employees unsettled per
  source
- note: the first curation pass stalled at 82/97 (no progress
  from 14:43); the remaining 15 entries (asc-13..16, dvh/efz/pfl,
  grz-08, aug) were re-run by three fresh parallel agents after
  the user canceled the stuck one
2026-09-10 15:24:36 +02:00
fegger fe8243931a [ADD] odoo-at-payroll: wissensbasis skill + WIKU source integration model
Consolidate the binding knowledge-base rules (layer architecture,
licence decision D1, id freeze, D2 frontmatter schema, curation
conventions, batch workflow, validation gates, intake pitfalls)
from README/RUNBOOK/MEMORY into a dedicated agent skill so every
new thread reads them before planning Wissensbasis work.

- new licensed source corpus .wiku/ (WIKU Personal publications:
  Fachbroschueren, Arbeitsunterlagen, Casebooks, 'WIKU Personal
  aktuell'; gitignored like .lexis360/, never committed)
- integration model: one shared corpus with a single kb.json, ids
  wk-<prefix>-<nn> on the existing cluster map, the work field
  distinguishing the sources, Layer-2 filenames prefixed
  wiku_<slug>.md; pipeline to be a multi-source extension of
  build_lexis_kb.py (no fork) -- follow-up after batch 7
- AGENTS.md skill selection gains the wissensbasis entry
2026-09-10 15:24:23 +02:00
fegger 59bcda620f [ADD] personalverrechnung: Lexis360 knowledge base (Batch 6)
Sixth Lexis 360 intake (41 briefings, source Stands 2025-06 to
2026-08), extending the corpus to 277 curated entries in 40 clusters.
This batch opens two further briefings chapters, 'Arbeitnehmer-
schutz' and 'Verhaltenspflichten' (five chapters in total now).

- 7 new clusters: arbeitnehmerschutz (12, ASchG incl. Gefahren-
  evaluierung, Arbeitsstätte/-mittel/-stoffe, Arbeitsunfall,
  BauKoG, Bildschirmarbeit, HitzeschutzVO, Strafbarkeit),
  dienstnehmerhaftung (7, incl. Mankohaftung), gleichbehandlung (7,
  incl. Einkommensbericht/Gehaltsoffenlegung), firmeneigentum (6,
  Sachnutzung Dienstwagen/PC/Telefon/Internet), weisungen (3),
  schwerarbeit (5, joins the Arbeitszeit chapter), mobbing (1)
- parser hardening: breadcrumb wrap detection extended to wraps
  after the first separator dot ('... Evaluierung |\nAutor ...')
- one fossil id purged (lb-mip-05 -> lb-swa-05, keyword-fallback
  misroute caught by the prefix guard)
- cross-batch reconciliations: lb-beh-04's 'Belaestigung' gap
  closed (-> lb-glb-02/03/07), lb-sch-01's 'Gefahrenevaluierung
  und Arbeitsverbote' partially closed (-> lb-asc-01); glb-07 vs
  beh-04 divergence on the Aufstiegsschaden measure documented
  for RIS clarification
- flagged: GKV citation 2020 (asc-01) vs 2021 (asc-07), 3-DHG
  limitation dispute, open SV/payroll-tax treatment of deducted
  damages amounts (dnh), Schwerarbeit Teilpension 2026 without
  norm citation, ASchV/NSchG not yet covered in RECHTSQUELLEN
- note: two curation agents were canceled mid-run and their
  remaining scope (asc-04..12, glb/mob) was re-run by fresh
  agents; the three partial asc entries were verified complete
  before acceptance

Validated: --registry 277 entries/40 clusters, --check 0 problems,
structural scan, py_compile.
2026-09-10 13:15:17 +02:00
fegger 3a5337e24b [ADD] personalverrechnung: Lexis360 knowledge base (Batch 5)
Fifth Lexis 360 intake (31 briefings, source Stands 2025-12 to
2026-07), extending the corpus to 236 curated entries in 33 clusters.
This batch opens the third briefings chapter 'Arbeitszeit' (AZG
working-time law, the structural backbone for Work-Entry-based
payroll).

- 8 new clusters: arbeitszeitgrenzen (4), arbeitszeitmodelle (7,
  incl. Kurzarbeit and Gleitzeit/Schicht), meldepflichten (4),
  nachtschwerarbeit (3), ruhezeiten (4), schwangerschaft (1),
  uberstunden (4), zeiterfassung (3); plus lb-jug-08 appended to
  the jugendliche cluster
- one URL-encoded export filename (sharp-s) normalized; no
  duplicates; no fossil ids this time - the specific-first keyword
  ordering held
- cross-batch reconciliation: three procurement gaps closed and
  back-referenced - 'Jugendliche - Arbeitszeit' (lb-jug-04 and
  lb-jug-05 -> lb-jug-08) and 'Aufzeichnungspflicht, Formen der
  Zeiterfassung' (lb-jug-05 -> lb-zer-01/02)
- RECHTSQUELLEN cross-checks: 68-EStG overtime free limits 2026
  (15 UStd/170 EUR) confirmed via lb-zus-07; the Kurzarbeit/
  Lehrlinge corpus conflict is now triangulated - lb-azm-05
  (2026-07) sides with lb-leh-07 (apprentices excluded since
  2023) against lb-leh-11's '100%'
- flagged batch-5 points: NSchG contribution 2026 (3.8%) cited
  without BGBl evidence (lb-nsc-01), 'para 7 Abs 1' vs 'Abs 6 AZG'
  citation divergence for the overtime refusal right
  (lb-ues-01/04), MAV-START EU conflict (lb-rhz-03), KAB-Richtlinie
  computing the 39.05% partial amount with outdated SV rates
  (lb-azm-06), 12-Abs-2a-vs-12a designation conflict (lb-zer-01)
- batch-6 candidates updated in the RUNBOOK (Entgeltfortzahlung an
  Feiertagen, Motivkuendigung, Gefahrenevaluierung u. a.);
  README cluster table extended to batches 1-5 incl. the third
  chapter

Validated: --registry 236 entries/33 clusters, --check 0 problems,
structural scan over all 236 curated docs, py_compile.
2026-09-10 11:49:51 +02:00
fegger 0d60308858 [ADD] personalverrechnung: Lexis360 knowledge base (Batch 4)
Fourth Lexis 360 intake (54 briefings after removing one identical
re-download, source Stands 2026-06 to 2026-08), extending the corpus
to 205 curated entries in 25 clusters. Focus of this batch: the
enforcement and employer-contribution side of payroll (all in the
'Entgelt: Anspruch & Abrechnung' chapter).

- 6 new clusters: lohndumping (13, LSD-BG incl. Sicherungsmittel and
  cross-border posting), lohnpfandung (14, EO garnishment mechanics),
  gplb (7), lohnnebenkosten (7, FLAF-DB/DZ/IESG/AK-Umlage/WBF/KommSt),
  lohnverrechnung (9, L16/Lohnzettel, mBGM, 109a, Aufrollung,
  Aufrechnung, Darlehen), nachzahlungen (4)
- cross-batch reconciliation: 'Darlehen und Vorschuesse'
  (lb-sac-13 -> lb-lvr-02) and 'Lohnzettel und Beitragsgrundlagen-
  nachweis' (lb-sac-21 -> lb-lvr-05) dangling references closed,
  cross_refs updated
- tool hardening: assign_ids returns mismatch warnings instead of
  appending to an out-of-scope variable (latent NameError that only
  fired when a mismatch actually occurred), keyword fallback
  reordered specific-before-generic (batch-4 lesson: generic
  'zuschlag' stole iesg_zuschlag before the topic map was pinned),
  7 fossil ids from the unpinned pass purged and reassigned
- RECHTSQUELLEN cross-checks (lnk cluster): FLAF-DB 3.7%, KommSt 3%,
  IESG 0.10%, WBF (other provinces 1%), Freibetrag staffel confirmed;
  flagged: lb-lnk-02 states the DB Freibetrag condition INVERTED vs
  the verified text (correct staffel evidenced via lb-lnk-03),
  lb-lnk-05 WBF Wien 1.5% vs 1.0% (RIS clarification needed), plus
  pfa Grundbetrag naming conflict (lb-pfa-03/05), Existenzminimum 2022
  (500/515 EUR, lb-pfa-12/14), mutilated statute citation in
  lb-lsd-13 (RIS check), 124b citation variants in the corpus
  (Z 440/Z 449 vs verified Z 476 lit c idgF BGBl I 43/2026)
- batch-5 candidates updated in the RUNBOOK (pfändungsrechtliche
  Behandlung von Sonderzahlungen, Rueckzahlung von Darlehen u. a.);
  README cluster table extended to batches 1-4

Validated: --registry 205 entries/25 clusters, --check 0 problems,
structural scan over all 205 curated docs, py_compile.
2026-09-10 11:34:37 +02:00
fegger 2cc6be7832 [ADD] personalverrechnung: Lexis360 knowledge base (Batch 3)
Third Lexis 360 intake (44 briefings, source Stands 2025-06 to
2026-08), extending the corpus to 151 curated entries in 19 clusters.
All batch-3 topics sit in the 'Entgelt: Anspruch & Abrechnung'
chapter - this is the most payroll-core batch so far (SZ tariff
mechanics, surcharges, commuter allowances, travel expenses, BMSVG).

- 6 new clusters: reisekosten (9), pendlerforderung (9),
  vorsorgeleistungen (11), zuschlage (8), sonderzahlungen (4),
  geschenke (2); plus lb-ent-11 (Ausbildungskosten-Rueckerstattung)
  appended to the entgelt cluster
- two URL-encoded export filenames (%c3%9f = sharp-s) normalized
  before intake
- cross-batch reconciliation: lb-prm-04's dangling reference to
  'Sonderzahlungen - Steuer' resolved against the new lb-son-04
  (and lb-son-03 for the SV side); cross_refs updated
- curated entries cross-checked against the verified legal inventory
  (RECHTSQUELLEN-Privat.md): 67-EStG staffel, 68-EStG free limits,
  BMSVG core values confirmed; deviations flagged, notably the
  124b-Ueberstundenmassnahme 2026 citation in lb-zus-07 - the
  briefing cites 'Z 440 lit c'/'BGBl I 4/2026' while the verified text
  is Z 476 lit c idgF BGBl I 43/2026 (Aufrollung bis 30. 9. 2026),
  and lb-ent-01's blanket 120 EUR for 68 Abs 2 (verified: 170 EUR
  2026)
- further flagged points: lb-pen-09 table value 3,672 EUR (likely
  print error, arithmetic 2,448), PendlerVO-vs-BMF-FAQ divergence
  (lb-pen-01), 183-day rule Finanz vs UFS (rei), teleworker trips
  Finanz vs BFG/VwGH (lb-rei-07), SV status of staff participation
  foundations (lb-vor-01), customer gifts without SV value limit
  (lb-ges-02)
- batch-4 candidates updated in the RUNBOOK (Abfertigung Alt,
  Corona-Kurzarbeit u. a.); README cluster table extended to
  batches 1-3

Validated: --registry 151 entries/19 clusters, --check 0 problems,
structural scan over all 151 curated docs, py_compile.
2026-09-10 11:08:26 +02:00
fegger fe3b09c4e2 [ADD] personalverrechnung: Lexis360 knowledge base (Batch 2)
Second Lexis 360 intake (52 briefings, source Stands 2025-06 to
2026-08), extending the corpus to 107 curated entries in 13 clusters.
Covers the second briefings chapter 'Entgelt: Anspruch & Abrechnung'
and further Beschaeftigungsverhaeltnisse topics.

- 7 new clusters: behinderte (4), entgelt (10), geschaftsfuehrer (5),
  leitende-angestellte (1), pramien (6), sachbezuege (21), vorstand
  (4); plus lb-leh-16 (Weiterbeschaftigung nach Ende der Lehrzeit)
  appended to the frozen lehrlinge sequence
- tool hardening: batch values validated as integers 1..N (multi-batch
  operation), dynamic batch labels in kb.json (batches summary) and
  INDEX header, and a new --extract warning when a frozen id's prefix
  no longer matches its cluster - this caught the lb-jug-08 fossil from
  the unpinned first pass, corrected to lb-sac-21 before any curation
  referenced it
- removed one duplicate browser export (geschaftsfuhrer_arbeitsrecht
  (1).pdf, identical extracted text)
- corpus conflicts and open points flagged in the entries: Klein-
  wohnungsgrenzen lb-sac-09 vs lb-sac-10, Pensionisten-Beguenstigung
  lb-sac-02 (LStR Rz 104 divergence), EUR 14.53 Parkplatz without
  SV/LSt categorization in the source (lb-sac-18), incentive trips
  only at LStR-Rz level (lb-sac-16), simplified 6% tariff in lb-prm-04
  (the verified 67-EStG staffel in RECHTSQUELLEN-Privat.md governs)
- dangling briefing references recorded as batch-3 candidates in the
  RUNBOOK (Bildungskarenz, Telearbeitspauschale, Personalrabatte bis
  2015, Lohnzettel/BGN u. a.)
- README cluster table extended to batches 1-2; RUNBOOK/MEMORY updated

Validated: --registry 107 entries/13 clusters, --check 0 problems,
structural scan over all 107 curated docs, py_compile.
2026-09-10 10:50:20 +02:00
fegger e990488273 [REF] personalverrechnung: relocate Lexis360 raw layer to .lexis360/
Move the licensed PDF exports and the Layer-1 full texts from the
project root into the dot directory .lexis360/, keeping the root
listing to versioned content plus the tool checkouts.

The location also encodes provenance, distinct from .firecrawl/:
.lexis360/ holds user-supplied licensed exports that cannot be
re-fetched by an agent - if missing, stop and ask the user
(documented in MEMORY), whereas .firecrawl/ remains the home of
reconstructible web fetches.

- plain move of the unversioned directory (batch2/ subfolder spotted
  and left untouched for its own intake run)
- .gitignore, tool constants/messages, source.pdf/source.text
  frontmatter paths of all 55 curated entries, README/RUNBOOK/MEMORY
  mentions; kb.json/INDEX.md regenerated
- batch 2 (53 PDFs) recorded in MEMORY as staged in .lexis360/batch2/

Validated end to end: --extract 55/55 with stable ids, --registry
55 entries/6 clusters, --check 0 problems (every frontmatter path
resolves at the new location), no stale path references remain.
2026-09-10 10:27:12 +02:00
fegger cb63b71eef [IMP] odoo-at-payroll: record Lexis360 knowledge base in memory
Batch-1 handoff: current focus, completed work, open points
(flagged corpus contradictions to verify against RIS, copilot
delivery path for the licensed layer-1 texts) and the KB
architecture decisions (licensing split, frontmatter conventions,
frozen lb-* ids).
2026-09-10 10:24:05 +02:00
fegger 6a78b419ed [ADD] personalverrechnung: Lexis360 knowledge base (Batch 1)
Curated knowledge base from the first batch of Lexis 360 PDF exports
(LexisNexis "Lexis Briefings Personalrecht", 55 documents, source
Stands 2024-03 to 2026-09). Purpose: development reference alongside
RECHTSQUELLEN-*.md and a retrieval-ready corpus for a future
question-answering copilot.

Licensing split (decision D1): the PDF exports and the extracted full
texts stay local and unversioned (Lexis360/ gitignored, like
.firecrawl/); only the curation in own words with short quotes and
source citations is versioned.

- wissensbasis/dokumente/: one curated entry per briefing (55) with
  approved frontmatter (frozen lb-<cluster>-<nn> ids, English
  structural keys, German values, stand YYYY-MM, ASCII topic/tags
  slugs) and sections Zusammenfassung, Kernwerte & Fristen (Stand
  marked), Rechtsgrundlagen (only citations actually in the source,
  verified/plausible/open marks), Payroll-Relevanz (Odoo), Verweise
- clusters: altersteilzeit 15, lehrlinge 15, jugendliche 7,
  ferialpraktikanten 4, beschaftigungsformen 8, teilzeit 6
- kb.json + INDEX.md: generated from the frontmatter by --registry
  (single source of truth, schema-validated)
- tools/build_lexis_kb.py: stdlib-only pipeline - --extract
  (pdftotext, breadcrumb/stand parsing incl. dossier-style exports
  with wrapped breadcrumbs), --registry (frontmatter validation:
  required keys, id pattern, id prefix vs topic, stand format,
  dangling cross_refs), --check (layer 1 <-> layer 2 completeness);
  ids are frozen across batches, numbers never reused
- RUNBOOK.md: batch intake workflow, validation steps, known
  limitations

Corpus contradictions flagged in the entries (not silently resolved):
AMS replacement rate for blocked Altersteilzeit 2026 (lb-atz-07 28.5%
vs lb-atz-09/12 27.5%), DAG limit 2023 (751.36 vs 751.37 EUR),
Kurzarbeit for Lehrlinge (lb-leh-11 vs lb-leh-07); lehrlinge cluster
partly older Stands (2024-03/2025-08).

Validated: extract 55/55, registry 55 entries/6 clusters, check 0
problems, structural scan of all 55 curated entries, py_compile.
2026-09-10 10:23:46 +02:00
fegger 3a4e0dcd0f [IMP] odoo-at-payroll: record GP1 status in plan, changelog and memory
Implementation plan: section 8.2 marked curated (reference KV
mechanics now live in the seed kv.wert), release status updated
(GP1 built, runtime acceptance pending PostgreSQL); CHANGELOG
entry for GP1; MEMORY handoff updated accordingly.
2026-09-09 22:10:30 +02:00
fegger 67374611c6 [ADD] l10n_at_hr_payroll_private: KV framework (GP1)
GP1 of the approved General-AT implementation plan: the KV
framework for the Austrian private economy on the Odoo 19
hr_payroll engine.

- l10n.at.payroll.kv: collective agreement master data with chamber,
  union, validity date and a trace link to the KV library
  (personalverrechnung/quellen/kv/)
- l10n.at.payroll.kv.wert: versioned KV parameters following the
  hr.rule.parameter.value pattern (Python literal, unique per
  KV/code/date); consumed via employee.kv_id._wert(code, date)
- l10n.at.payroll.kv.gruppe / .stufe: Verwendungsgruppen with
  Erfahrungsstufen year tables, unique(gruppe, stufe, gueltig_ab),
  Stichtag lookup
- hr.version / hr.employee contract fields: kv_id, kv_gruppe_id,
  erfahrungsstufe, ueberzahlung
- import wizard for KV intake and yearly updates: table paste
  (Gruppe;Stufe;Gehalt[;Bezeichnung]), preview, >10% jump warning
  (warn lines never applied automatically), new gueltig_ab versions,
  historical values untouched
- seed D2 (SI-2203 Handwerk und Gewerbe, SI-2748 Metallgewerbe):
  wage tables from 1. 1. 2026 curated from the KV library texts -
  18 groups, 131 stage values, 27 parameters, including the special
  progression groups IV-M / V-OM (SI-2748) and the discontinued
  VG I (SI-2203)
- tests: test_kv_katalog (seed lookups, Stichtag behaviour,
  versioning, parameters, wizard, contract fields)

Statically validated (py_compile, XML well-formedness, CSV
consistency, wizard logic simulation); runtime acceptance pending
PostgreSQL on the dev host.
2026-09-09 22:10:26 +02:00
fegger 6e444b088a [IMP] odoo-at-payroll: in-repo Odoo 19 source checkouts
Ignore the local, unversioned Odoo 19 checkouts: odoo/
(Community tree with odoo-bin) and odoo_enterprise/odoo (merged
enterprise tree with community and enterprise addons). Document both
in the README Entwicklung section, including the resulting test
addons path (odoo_enterprise/odoo/addons,addons). Also point the
module table row at the approved General-AT plan.
2026-09-09 21:52:06 +02:00
fegger 3797e30b1c [ADD] personalverrechnung: General-AT plan and legal sources (M0/GP0)
Approved implementation plan for l10n_at_hr_payroll_private (M0,
decisions D1-D4) and the GP0 legal-source inventory
RECHTSQUELLEN-Privat.md, verified against primary sources (RIS,
jusline):

- FLAF-DB § 41 FLAG: 3.7% for 2026, 2.7% from 2028 (GesNr 10008220);
  KommStG 1993: 3% (GesNr 10004841)
- 13th/14th salary taxation runs via § 67 EStG (Jahressechstel fixed
  rates, control sixth § 77 Abs 4a); § 68 covers allowances/surcharges
  only - plan citation corrected, also fixes the legal basis of the
  Bgld open point P9
- Urlaubsentgelt is § 6 UrlG (§ 9 repealed since 2001) - corrected
- EOSB: no Monatsentgelt staffel; § 15 BMSVG pays out the Anwartschaft
  with § 14 Abs 2 Verfügungsausschluss matrix - GP5 design confirmed
- 2026 overtime measure: first 15 hours, max 170 €/month
  (§ 124b Z 476 lit c BGBl I 43/2026)

Plan section 8 items 3-6 and UrlG (8) marked verified; private module
skeleton README, MEMORY, CHANGELOG and payroll skill updated (§ 67
citation fix, RECHTSQUELLEN-Privat.md as required source).
2026-09-09 21:51:58 +02:00
fegger f988ad96fe [IMP] odoo-at-payroll: record KV library commit in MEMORY 2026-09-09 19:10:25 +02:00
fegger 5b629a5916 [ADD] personalverrechnung: machine-readable KV library (all current collective agreements)
Cross-checked catalogue of all currently valid Austrian collective
agreements, per the source policy: main source = the responsible
employer-side chamber, kollektivvertrag.at (OEGB-Verlag) as complete
cross-check baseline.

- oegb/: 593 variants from kollektivvertrag.at with full consolidated
  texts (JSON primary format, Markdown for review/diff) plus
  catalog.json/.csv; fetched via the portal's JSON servlets
  (dashboard/structure/slices/topics), resumable
- wko/: 614 current documents from the WKO KV database (1,820 branch
  overviews across 10 regions) with texts and catalog; match-report
  against the baseline: 407 pairs, 30 date disagreements flagged
- chambers/chambers.json: curated registry of chamber-side sources and
  publication gaps (GOeD member-only, RA/Notariat not public, OCR-less
  scan PDFs, missing hospital-doctors KV)
- kv-catalog.json/.csv: merged catalogue, 768 entries, chamber
  classification, main_source, cross_check status, manual_review lists
- tools/fetch_kv_portal.py / fetch_wko_kv.py / build_kv_catalog.py:
  stdlib-only fetchers and merge step, each with a --refresh diff mode
- RUNBOOK.md: update cycle for keeping the library current (annual,
  tied to the Wartung rhythm and KV rounds)

Lohntafel PDFs are linked but not downloaded; wage tables contained in
the KV texts are converted. No Odoo module changes.
2026-09-09 19:10:07 +02:00
fegger 99728c1f23 [IMP] odoo-at-payroll: note pending runtime validation in MEMORY 2026-09-09 13:52:20 +02:00
fegger 6205cca903 [ADD] odoo-at-payroll: repo bootstrap (AGENTS, skills, README, CHANGELOG, private skeleton) 2026-09-09 13:43:10 +02:00
fegger 85b9536d1a [MOV] l10n_at_gemeinde_payroll: extract SV/TASY core into l10n_at_hr_payroll 2026-09-09 13:42:58 +02:00
fegger 64197a167e [ADD] personalverrechnung: Repo-Split-Plan Personalverrechnung 2026-09-09 13:36:33 +02:00
fegger a7959c1259 [IMP] l10n_at_gemeinde_payroll: implement AP2 pay computation engine (GemBG Bgld.)
Entgelt-Engine nach Implementierungsplan AP2 (freigegeben 2026-09-09):

- Structure Type "Bgld. GemBG 2014" + Structure "Gemeindebedienstete"
  mit 4 Kategorien (GEMBG_BRUTTO, GEMBG_ABZUG, GEMBG_NETTO, GEMBG_DG).
- Work-Entry-Types: Überstunden Tag/Nacht (§ 76), Mehrdienstleistung,
  Journaldienst (§ 79), Bereitschaft (§ 80), Sonn-/Feiertag (§ 78).
- Input-Types: Erschwerniszulage (§ 83), Fahrtkostenzuschuss (§ 88),
  Jubiläumszuwendung (§ 89).
- Entgelt-Regeln (13 Rules):
  * ME — Monatsentgelt: Katalog-Lookup (Gruppe+Stufe+Stichtag),
    Ausbildungsphase 5 % Abzug (§ 133h), Teilzeit via work_time_rate.
  * KIZU — Kinderzulage: kinder_anzahl × 15,60 EUR (§ 61 GemBG),
    bei Teilzeit UNGEKÜRZT (§ 59 Abs 2).
  * FUZU — Funktionszulage: hr.version-Feld × work_time_rate (§ 62).
  * UEZ_TAG/UEZ_NACHT — Überstundenvergütung (§ 76):
    Grund = ME / (4,33 × Wochenstunden); Zuschlag 50 % Tag / 100 % Nacht.
  * JZU — Journaldienstzulage (§ 79): Work-Entry × Parametersatz.
  * SFZU — Sonn-/Feiertagszulage (§ 78): Stunden × Grundvergütung × %.
  * BERB — Bereitschaftsentschädigung (§ 80): Stunden × Parametersatz.
  * ERZU/FKZ/JUB — Input-basierte Bezüge (§§ 83/88/89).
  * SZQ — Sonderzahlung QUARTALSWEISE (§ 133n): in Quartalsendmonaten
    (März, Juni, September, Dezember) 50 % × (ME + KIZU).
  * NETTO — Kategoriensumme (wird mit AP3/AP4 erweitert).
- hr.version-Felder: kinder_anzahl, funktionszulage, ausbildungsphase
  (§ 61/§ 62/§ 133h) mit Employee-Spiegel nach Engine-Muster.
- Rule-Parameter: Kinderzulage 15,60 EUR, Journaldienstzulage,
  Sonn-/Feiertags-%, Bereitschaftsstunde (letzte 3 als AP0-Platzhalter
  mit 0.0 — Werte aus der Bezügeanpassung nach Beschaffung).
- Tests (8 Rechenfälle): Vollzeit av1 Stufe 1, Kinderzulage 2 Kinder
  = 31,20 EUR, Funktionszulage, Ausbildungsphase 5 % Abzug,
  SZ Quartalsende + Nicht-Quartalsende, Netto=Brutto (AP3/AP4 offen),
  Stufe 12 Max.
- Employee-Form um Zulagen-Gruppe erweitert.

Modul-Version 19.0.1.3.0. Statische Validierung grün; Runtime-Testlauf
auf dem Dev-Host ausständig.
2026-09-09 13:01:00 +02:00
fegger 42bb759fd1 [IMP] l10n_at_gemeinde_payroll: implement SV value layer (AP4) from OEGK TASY
SV-Werte-Implementierung nach dem freigegebenen TASY-Plan (PLAN-TASY-SV-Import):

- hr.rule.parameter-Seed 2026 (20 Parameter, generator-erzeugt aus dem
  ÖGK TASY-LSWH-Export, Stichtag 2026-07-01): Geringfügigkeit 551,10 EUR
  (GFGBTG, ab 2025 — Aufwertungsaussetzung korrekt abgebildet), HBG
  monatlich 6.930 EUR (HBGALLG tgl. x 30), HBG SZ 13.860 EUR, KV
  3,87/3,78, PV 10,25/12,55, AV 2,95/2,95, UV 0/1,10, IESG 0/0,10,
  BV 1,53, AK/WF geführt, § 2a AMPFG-Staffel aus dem SV-Werte-Report.
  Generator mit Herkunftsnachweis + Erwartungswert-Ankern
  (personalverrechnung/tools/gen_sv_parameters_2026.py, Exit 1 bei
  Abweichung von den offiziellen Ankern).
- TASY-Quelldatei committet (personalverrechnung/quellen/, 5 MB —
  öffentliches Tarifdatenmaterial ohne Personendaten) für Seed- und
  Testreproduzierbarkeit.
- Deklarative TASY-Mapping-Tabelle (gemeinde.payroll.tasy.mapping,
  data XML): bbb-Codes (Cent, Faktor z. B. x 30) und Tarifzweige
  (_dn/_dg-Suffix-Konvention) — keine festen Werte im Code.
- Import-Wizard (TransientModel, lxml safe parsing):
  Beschaeftigtengruppe B002 ("Angestellte") -> Tarifgruppe ->
  tarifgruppeSetZuord -> Tarifset -> Tarif; bei Varianten gewinnt die
  Split-Variante (DN>0 und DG>0), dann die einseitige DG-Variante (UV/BV);
  freie-DN-Varianten verlieren. Preview mit Delta, Sprungwarnung > 10 %,
  Warnzeilen werden nie automatisch übernommen; Schreiben versionierter
  hr.rule.parameter.value-Sätze erst nach expliziter Bestätigung.
- Tests (4 Suiten): Seed-Werte am Stichtag, Fixture-Parser
  (Split-Präferenz, Cent-Rechnung), Versionsverhalten (Update statt
  Duplikat), Echtdaten-Test gegen den 5-MB-Export (Auflösung == Seed,
  keine Warnzeilen).
- Security/Views/Menüs für Mapping + Wizard; Modul-Version 19.0.1.2.0.

Statische Validierung grün (py_compile, XML, Manifest); Runtime-Testlauf
auf dem Dev-Host ausständig.
2026-09-09 12:47:10 +02:00
fegger 8e0b169b73 [ADD] personalverrechnung: Plan SV-Werte-Implementierung (TASY-LSWH)
Analyse des ÖGK-TASY-Exports (Stichtag 2026-07-01, 5 MB): tarife/tarifsets/
tarifgruppen/beschaeftigtengruppen-Kette mit DN/DG-Anteilen je Zweig
(KV/PV/AV/UV/IE/DG/AK/WF/BV), bbwerte in Cent mit Gültigkeit; verifizierte
Deckung mit dem SV-Werte-Report 2026 (GFG 551,10 EUR, HBG SZ 13.860 EUR,
KV 3,87/3,78, AV 2,95/2,95). Plan: hr.rule.parameter bleibt alleiniger
Wertespeicher (Engine-Mechanik, Konsum via payslip._rule_parameter);
Seed 2026 per Generator mit Herkunftsnachweis + jährlicher
TASY-Import-Wizard (stichtagsbasierte Auflösung über die Gruppenkette,
Preview-Differenz mit Plausibilitätswarnung, explizite Bestätigung) +
Mapping-Tabelle TASY-Code/Zweig -> Parameter. Nicht in TASY: öffentlicher
FLAF-DB (§ 49a Abs 8/9, AP0/RIS), Lohnsteuer, KommSt. Offene Punkte
(HBG x30-Konvention, AMPFG-Staffelauflösung, Commit der 5-MB-Quelldatei)
im Plan dokumentiert; Freigabe-Antrag gestellt.
2026-09-09 12:26:14 +02:00
fegger 30270f9877 [IMP] l10n_at_gemeinde_payroll: implement AP1 pay scale model (GemBG Bgld.)
Katalogmodell nach Implementierungsplan AP1 (freigegeben 2026-09-09):

- ``gemeinde.payroll.entlohnungsgruppe`` (Code, Schema, §, Bundesland,
  Vorrückungszeitraum je Gruppe; § 66 Abs 2 GemBG: 4 Jahre, abweichend
  2 Jahre für Betreuungspersonen-/Sondergruppen) und
  ``gemeinde.payroll.entlohnungsstufe`` (Stufe, Monatsentgelt, Stichtag,
  unique je Gruppe/Stufe/Stichtag) mit Stichtags-Lookup-Helfern.
- Seed 2026: 35 Entlohnungsgruppen, 433 Werte (Schemata I/gv, II/gh,
  Ia/bv, IIa/bh, kb, av sowie §-Gruppen 150c/151/151c), Werte aus der
  konsolidierten GemBG-Fassung 09.09.2026 (Wert 1.7.2026 gemäß Artikel 4
  RV 0715/XXIII. GP; 2025er-Stichtagsannahme für nicht 2026 angepasste
  Tabellen als AP0-Verifikationspunkt dokumentiert). Generator mit
  Herkunftsnachweis: personalverrechnung/tools/extract_gembg_katalog.py.
- GemBG-Felder auf der Payroll-Version (hr.version) plus Employee-Spiegel
  nach dem Engine-Muster (related/inherited): Entlohnungsgruppe, Stufe,
  Besoldungsdienstalter, Vorrückungstermin — berechnet nach § 66 Abs 2
  (erster Tag des Monats nach Vollendung weiterer n Jahre BDA), manuell
  überschreibbar für Überleitungsfälle (§§ 157a ff).
- Vorrückungs-Wizard (§ 66 Abs 2): fällige Versionen zum Stichtag,
  Stufenerhöhung mit Höchststufen-Schutz und Ergebnis-Notification —
  bewusst kein stilles Mutieren im Lohnlauf (Dokumentationspflicht).
- Views/Menüs (Personalverrechnung Bgld. unter Payroll), Security auf
  hr_payroll-Gruppen, Employee-Form-Anbindung in payroll_group.
- Tests (Rechenfälle AP1): Seed-Werte inkl. Quellenanomalie kb1a/6,
  Stichtags-Lookup, Jahresversionierung, Vorrückungstermin (BDA 15.03.2020
  -> 1.4.2028), Wizard-Anwendung mit Höchststufen-Skip.

Statische Validierung grün (py_compile, XML, Manifest, CSV-Integrität);
Runtime-Testlauf auf dem Dev-Host (gem360_dev) ausständig, wie im
Implementierungsplan M2 vorgesehen.
2026-09-09 11:55:15 +02:00
fegger 4e79c8b8b1 [ADD] personalverrechnung: Implementierungsplan Bgld. Personalverrechnung
Plan zur Freigabe (AGENTS.md Phase 3): Anforderungsbild, am Odoo-19-Source
verifizierte Erweiterungspunkte (hr.rule.parameter-Konsum via
payslip._rule_parameter, localdict-Kontext, Regel-Konten, Posting-Hook
_prepare_line_values für budget_position_id, Refund-Mechanik,
Work-Entry-Types), Modul-Layout, Katalogmodell (Entlohnungsgruppen/-stufen
mit Jahresversionierung aus Bezügeanpassungs-Tabellen), Regelinventar
(Monatsentgelt, Kinderzulage ungekürzt, Zulagen, Über-/Mehrdienstleistung,
quartalsweise SZ, Lohnsteuer § 33/§ 68, SV/DG, öffentlicher FLAF-DB, IESG),
VRV-Buchung über vrv_ansatz_id auf hr.salary.rule, eigene
Abfertigungsrückstellungs-Engine, dateibasiertes Meldewesen (L16/ELDA),
Jahreswechsel-Wizard, Rechenfall-Testplan mit VRV-L2-Verprobungsankern,
Risiken (Buchungsmatrix AP0, FLAF-DB-Satz, SZ-Lohnsteuer-Zuordnung,
ELDA/FinOnl-Specs, Prorate-Konvention) und Meilensteine M0–M6 im
AP-Rahmen der Angebotskalkulation.
2026-09-09 11:39:41 +02:00
fegger 7fd3315735 [ADD] l10n_at_gemeinde_payroll: add scaffold for the payroll module
Modulgerüst für die Gemeinde-Personalverrechnung (Bgld. GemBG 2014) auf der
Odoo-19-hr_payroll-Engine: Manifest mit Depends auf hr_payroll,
hr_payroll_account und l10n_at_vrv2015 (VRV-Buchungsintegration gemäß
Implementierungsplan AP7) sowie leeres models-Paket mit Verweis auf die
Projektdokumentation. Strukturen, Regeln, Katalogdaten und Tests folgen dem
freigegebenen Implementierungsplan (personalverrechnung/, payroll-Skill).
2026-09-09 11:00:57 +02:00
fegger 7e19fadcfd [IMP] personalverrechnung: move plan document into project folder
60-PLAN-payroll-bgld.md liegt nun als personalverrechnung/PLAN-payroll-bgld.md
neben RECHTSQUELLEN-Bgld.md und der Angebotskalkulation; Dokumentverweise in
beiden Projekt-Dokumenten mitgeändert (Rename, Inhalt unverändert).
2026-09-09 11:00:57 +02:00
fegger 8c4faf923d [ADD] personalverrechnung: Angebots-Grundlage Aufwandskalkulation Bgld.
Kalkulation Variante A (Personalverrechnung Bgld. Gemeinden in Odoo 19,
hr_payroll-Engine, GemBG-2014-Regime) mit Prämissenmodell für die
Angebotsphase (keine Kundenunterlagen): 12 Arbeitspakete mit Netto-PT
(194–279, Kalkulationssumme 236) plus 10 % Risikoabdeckung wegen fehlender
Referenzläufe und offener Rechtsdetails → Angebotswert ≈ 260 PT netto
(240–280; ≈ 13 PM, 6–9 Monate). Auspreisfähige Optionen: Organe-Bezüge
15–25, Altpensionen/Versorgung 15–25, Lehrlinge 8–12, Folge-Bundesland
30–60 PT; Wartung/Jahreswechsel 10–15 PT/Jahr; Variante B (Importschnitt-
stelle) 25–40 PT als Alternative. Ausschlüsse und Risikoregister für die
Angebotsfixierung beigefügt.

RECHTSQUELLEN aktualisiert: Bezügeanpassung 2026 (RV 0715/XXIII. GP) mit
Entlohnungstabellen geladen (Gruppen a–e/gb1a/gb3 × ~14 Stufen); IESG-
Zuschlag 0,10 % via ÖGK verifiziert; Bgm-PensionsG 1979 (RIS-GesNr
10000133) verifiziert; Restverifikationen (KommStG § 6, ASVG § 49a Abs 8/9,
Bgld. MVKG) als AP0-Startaufgaben dokumentiert (Firecrawl-Keyless-Limit).
2026-09-09 10:40:55 +02:00
fegger 8307e7a552 [ADD] personalverrechnung: Rechtsquellen-Recherche Bgld. Personalverrechnung
Kernbefund: Das Bgld. GemBG 2014 (LGBl. Nr. 42/2014) regelt das gesamte
Dienst- und Besoldungsrecht aller burgenländischen Gemeindebediensteten —
ausschließlich privatrechtliche Dienstverhältnisse (keine neuen Beamten,
§ 1 Abs 3), kein Kollektivvertrag-Regime (0 KV-Referenzen), Entlohnungs-
system ab 1.1.2021 (IVa. Hauptstück) mit Werten aus jährlichen Landes-
Bezügeanpassungs-Anlagen, quartalsweise Sonderzahlung (50 % je Kalender-
vierteljahr), Urlaub 28/33 Arbeitstage, eigene Abfertigung (§ 130), Karenz
nach Bgld. MVKG (LGBl. 16/2005); Kinderbetreuungspersonal integriert
(Hauptstück VIIa). Bundesrecht unverändert zuständig für Lohnsteuer
(Tarif 2026, § 68-Pauschalbeträge inkl. Überstunden-Freibetrag 2026,
L16/FinOnl), SV (Werte 2026 verifiziert: HBG 6.930 EUR, Geringfügigkeit
551,10 EUR, KV/PV/AV/UV-Sätze), FLAF-Dienstgeberbeitrag öffentlicher
Haushalte (§ 49a ASVG) und Meldewesen (L16, eSV/ELDA).

60-PLAN-payroll-bgld.md aktualisiert: Variante-A-Schätzung Bgld. vorläufig
~180–290 PT (Beamten-Doppelregime, KV-Handling und KBBG-Faktor entfallen);
Beschaffungsliste verdichtet auf Bezügeanpassungs-Anlagen 2026, ELDA/
FinOnl-Spezifikationen und die Unterwart-Referenz-Lohnläufe; offene
RIS-Verifikationen dokumentiert (ASVG 49a Abs 8/9, KommStG 6, IESG,
Krankengeldumlage, Personalvertretungsumlage).
2026-09-09 10:25:34 +02:00
fegger 8578ff76df [ADD] 60-PLAN-payroll-bgld.md: Personalverrechnung Burgenland – Research/Planning
Aufwandsschätzung und Materialsammlungs-Plan für die
Gemeinde-Personalverrechnung (Burgenland zuerst): Variante A (volle
Lohnverrechnung in Odoo, ~250–420 PT über drei Releases) vs. Variante B
(Import-Schnittstelle zur externen Lohnverrechnung, ~25–40 PT, deckungsgleich
mit der harten Scope-Ausnahme in 50-SCOPE-module.md), Bund-vs.-Land-Split
der Bausteine, Architektur-Vorgaben (hr_payroll-Engine, rule parameters,
Bundesland-Datentrennung), Research-Checkliste (KV-Gehaltskatalog Bgld.,
LGBG, ELDA/FinOnl-Specs, 12 Referenz-Lohnläufe der Pilotgemeinde) und offene
Entscheidungen (KBBG-Kindergartenpersonal, Statutarstadt Rust,
Meldewesen-Betrieb, Scope-Ausnahme).
2026-09-09 09:55:12 +02:00