45 Commits

Author SHA1 Message Date
fegger 1df5fb19c4 [ADD] l10n_at_payroll_dokumente: generate documents from templates
Document generation module: templates with own text (structure reference
and source stand documented per template, no licensed full text in the
repo), fill fields resolved from hr data (company, employee, hr.version
stand) plus wizard input, preview rendering and PDF/HTML attachment via
the generic report layout.

- templates: pilot set for the general-AT track formulated as own text
  after the KB muster structure (lb-bes-09, lb-bnd-55, lb-bnd-52/62,
  lb-end-35), legal status per template marked as draft
- rendering via convert_inline_template_to_qweb + ir.qweb (t-out
  auto-escapes values) — deliberately not mail.render.mixin inline
  engine, whose expression whitelist blocks werte[...] placeholders for
  non-template-editors
- wizard resolves hr.version by date_version at the reference date;
  PDF falls back to HTML attachment without wkhtmltopdf
- security: ir.model.access (hr user read / manager write) + company
  rule; 8 tests, suite 236/236 green on a fresh -i database run
2026-09-16 10:36:49 +02:00
fegger 27f3b4b7f9 [ADD] personalverrechnung: Lexis360 knowledge base (Batch 10)
Zehnter Lexis 360-Intake (64 Briefings aus den Sektionsordnern
beispiele / muster / uebersichten_checklisten, Quell-Staende
2020-12 bis 2026-08), erweitert das Korpus auf 665 kuratierte
Eintraege in 69 Clustern. Dasselbe Werk, dieselbe Breadcrumb-Form
— die Pipeline globt jetzt die drei Subordner; die neue
no-author-Breadcrumb-Variante (Muster-Exporte
"Kapitel > Thema · <Monat> <Jahr>") defaultet auf "Lexis Redaktion".

- 13 bestehende Cluster erweitert (keine neuen):
  beendigungsarten bnd 44→66 (Muster: Kuendigung/Aenderung/
  Aufloesung/Entlassung/Fristablauf/Befristung/Verwarnung/
  Dienstfreistellung, 13 Checklisten, Anspruchsuebersicht Tod),
  endabrechnung end 25→34 (Beispiele: Zeitschulden,
  Viertel-/Zwoelftelregelung, Voll-Ueberttritt,
  Gleitzeitguthaben, UEL; Checklisten: Ausbildungskosten,
  Kuendigungsentschaedigung; Muster: Vergleich, Vordienstzeiten),
  uberstunden ues 4→9, telearbeit tel 6→11,
  beendigungsphase-sonstiges bso 10→16, arbeitszeitgrenzen azg 4→9,
  arbeitszeitmodelle azm 7→10, entsendung grz 8→11,
  beschaftigungsformen bes 8→10, sonderzahlungen son 5→6,
  schwerarbeit swa 5→6, arbeitskrafteuberlassung aug 2→3,
  urlaub url 16→17
- alte Quell-Staende (2020-12 bis 2025-12) mit "⚠ Alter Stand"
  in den Eintraegen markiert
- Pipeline: BATCH_LEXIS 10, SOURCES["lexis"].pdf_subdirs,
  BC_LINE_NOAUTHOR_RE + Slug-Kollisionsguard in extract_lexis()
- RUNBOOK (Batch-10-Paragraf) und Agent-Memory aktualisiert;
  --registry und --check beide gruen (635/635, 0 problems)
2026-09-16 08:52:47 +02:00
fegger d53e1e64a1 [IMP] l10n_at_hr_payroll_private: add unpaid care/parental leave family (AP16)
Close the parental/care-leave block after the pilot-client scope release (8.13): six unpaid full-release kinds join the generic parental-leave work entry — Bildungskarenz (AVRAG § 11, two to twelve months by agreement with the AMS-financed Weiterbildungsbeihilfe), Familienhospizkarenz for terminal accompaniment (AVRAG § 14a, three to six months), accompaniment of seriously ill children (§ 14b, five to nine months), children's rehabilitation leave (§ 14e, four weeks per year), Pflegekarenz (§ 14c, one to three months, undivided) and the Papa-Monat (VKG § 1a, one month, creditable toward seniority under § 1a Abs 7 VKG iVm § 15f MSchG while Bildungs-/Pflegekarenz is not). All are unpaid at the employer — the external bodies pay the replacement income (AK, AMS, Bundesamt, KV-Träger) — so the new negative KARENZ_ENTGELT rule stops the employer wage per working day through the shared Tagesatz helper whose exclusion list now covers EFZG, Mutterschutz and Karenz corrections. The Versichertenmeldung run emits M4 deregistrations at the end of the pay entitlement (the day before the release begins) and M3 re-registrations at the return date — omitted when the employment itself ends — with the eSV Karenzart strings logged as protocol information pending the special DM-ORG formats (GP7 track). The fictive BMSVG basis gains the § 7 Abs 4 Z 1–3 bridge: when a new maternity prohibition follows a parental-leave stretch directly or after employment of less than three months, the reference months fall before the preceding prohibition, and a re-founded employment within three months of the ended karenziert employment uses the single last full calendar month; contributions during the KBG period are FLAF-financed (§ 7 Abs 5) and during hospice/care leave Bund-financed (§ 7 Abs 6) — no employer rule, verified by test. Pflegeteilzeit and comparable reduced-hour arrangements pay the BV contribution on the pre-reduction wage via a new version field consumed by the BMSVG basis (§ 6 Abs 4). The endabrechnung wizard gains the § 23 Abs 8 AngG full-time re-rating preview (monthly salary ÷ work_time_rate, confirmable) with § 23a Abs 4a and UEL § 10 Abs 4 UrlG guidance. The Mutterschutz status now detects the § 163 ASVG Sonderwochengeld case (prohibition inside a Karenz — the KV-Träger pays the increased sickness benefit) and warns on § 166 ASVG suspension (full for >50 % continued pay, half at 50 %, activity and Pflegekarenzgeld hints). Verified against the original statute text in .ris/ (AVRAG §§ 11/11a/14a–14e, VKG § 1a, MSchG § 15f, BMSVG § 7 Abs 4–6, ASVG §§ 163/166) and the knowledge-base sources lb-kar/elt/kzs/pap/kbg; the vacation proration of leave stretches (§ 15f Abs 2 MSchG on the hr_holidays allocation side), the eSV special formats for the Karenz art block, the full Sonderwochengeld computation and the leave-overlap policy decision remain documented open points.

Version 19.0.17.0.0 (private)
2026-09-15 14:25:48 +02:00
fegger 850e99df20 [IMP] l10n_at_hr_payroll_private: add premiums at termination under § 16 AngG (AP14-B)
Close the premium-at-termination gap of the end-of-employment cycle: an aliquote periodic premium (annual, sales, bonus, 15th payment) whose entitlement period outlasts the termination is covered by § 16 AngG — the pro-rata amount follows the ratio of the elapsed service to the entitlement period, is due for employees regardless of the termination ground (loss clauses void, 9 ObA 82/13v), while performance-linked premiums for workers may validly hinge on non-fault grounds and premiums tied to a specific service (e.g. Bilanzgeld) are not aliquote without the service (lb-end-18). Two routes: PRAM_END (bemessung sonstig) covers premiums paid with the end-of-employment run — a special payment inside the annual sixth at the flat 6 % rate with the 620 EUR free amount and 2 615 EUR free threshold checked by the core, SV as special-payment contributions (KV/PV/AV without AK/WF) against the monthly HBG and the annual SZ cap, fully payroll-levy liable and BV-contributory at the uncapped 1.53 % rate (§ 6 Abs 1 iVm Abs 5 BMSVG). PRAM_END_TARIF (bemessung laufend plus the core l10n_at_s67_abs6_ueberhang flag) covers premiums due at a pre-agreed maturity because their amount only becomes determinable after the entitlement period ends (e.g. balance-sheet premiums): taxed like running pay with the payment-month tariff without touching the annual sixth (§ 67 Abs 10, not a § 67 Abs 8 lit c case per 98/14/0009 = ARD 5483/14/2004) — the SV contribution month rolls back into the termination year via a new payslip field consumed by an extended branch of the existing SV-basis-by-Beitragsmonat override (historical caps and rates, E-MVB 044-01-00-006), while the LSt stays in the payment month. The wizard section previews the § 16 pro-rata amount from the full premium, entitlement period and elapsed service, keeps the payable amount confirmable (KB agreement), requires the service/claim-basis confirmation, enforces the contribution month for the deferred case, and lands the memo on the payslip for the separate Lohnzettel workflow (LStR Rz 911a); the existing manual PRAM rule is untouched. The account matrix posts both rules to 6230. Verified against the original statute text in .ris/ (AngG § 16, BMSVG § 6 Abs 5) and the knowledge-base source lb-end-18; the full SZ roll-forward (storno plus recomputation against the termination year's SZ annual cap) and the mBGM storno/re-transmission remain open in the GP7 payroll-reporting track, and the BV attribution of the deferred premium remains in the payment month as a documented approximation.

Version 19.0.16.0.0 (private)
2026-09-15 13:33:49 +02:00
fegger 472b19a4b2 [IMP] l10n_at_hr_payroll_private: add settlement payments under § 67 Abs 8 lit a (AP15-C)
Complete the termination sequence with the settlement-sum path: comparison sums from court or out-of-court settlements, judgment/decision arrears and dismissal-objection payments are split between the statutory-severance and voluntary-severance rules and the settlement remainder. The remainder (VERGLEICH, bemessung neutral, sv_art laufend) reuses the lit-a/b fifth rule: after deducting the § 62 employee-rate contributions, one fifth stays tax-free capped at one fifth of nine times the monthly HBG (12 474 EUR 2026), and the remaining four fifths run with the payment-month tariff without touching the annual sixth. A new rule flag l10n_at_vergleich_bv marks the part paid for periods with a BV-Kasse entitlement: up to the parameterised cap at_lst_67_abs8_vergleich_bv (7 500 EUR 2026; § 67 Abs 8 is § 33a/§ 124b indexed) it is taxed at the flat 6 % rate with the contributions allocated pro rata (LStR Rz 1102b), while the excess falls back into the fifth rule. Both settlement rules stay payroll-levy liable (§ 41 Abs 4 lit b FLAG exempts only § 67 Abs 3 and 6) and SV-liable in the payment month, with per-Beitragsmonat roll-forward and insurance-period extension remaining documented manual options (lb-end-22, E-MVB 011-02-00-001). Identifiable severance components keep running through the existing statutory and voluntary severance machinery; a settlement expressly agreed as statutory severance is taxed in full under § 67 Abs 3 (VwGH 2013/13/0001 = ARD 6490/20/2016), and pension buy-outs (lit e) and social-plan payments (lit f) are out of scope. The wizard section requires confirmation of the settlement's itemisation and contested-claim status plus the BV entitlement, enforces the BV cap with the excess captured as remainder, and previews the free fifth, tariff basis and 6 % tax; the settlement memo lands on the payslip for the separate Lohnzettel workflow (LStR Rz 911a). The account matrix posts both settlement rules to the provisional 6200/6000 (workers 6000) and the new tax rule to 3540. Verified against the original statute text in .ris/ (EStG § 67 Abs 8 lit a) and the knowledge-base sources lb-end-21/22; KZ positioning of the lit-a tariff parts and their § 291d pot allocation remain documented verification points against LStR Rz 1087 ff.

Version 19.0.15.0.0 (private)
2026-09-15 12:38:19 +02:00
fegger 4b86bcb790 [IMP] l10n_at_hr_payroll_private: add voluntary severance under § 67 Abs 6 (AP15-B)
Split the voluntary severance into its privileged part and a tariff remainder on the exit run: the privileged part combines the quarter rule (1/4 of the last twelve months' running pay, capped at nine times the monthly HBG) with the twelfth rule (2/12 to 12/12 by proven service, capped at n × 3 × HBG), reduced per Z 3 by severance already received and the statutory claim due at this termination, all taxed at the flat 6 % rate. The excess runs as its own rule flagged l10n_at_s67_abs6_ueberhang: taxed with the running tariff of the payment month but excluded from the annual sixth, since Z 5 exempts only the Z 1/Z 2 amounts and the excess is a special payment, not running pay. The twelve-month basis aggregates validated prior runs plus own lines, excluding the flagged excess and § 26 Z 4 travel overhang via a dedicated rule flag. Free of SV (§ 49 Abs 3 Z 7 ASVG), payroll levies regardless of the 6 %/tarif split (§ 41 Abs 4 lit b FLAG, § 122 Abs 8 WKG, § 5 Abs 2 lit b KommStG) and BV contributions; the former BV-Anwartschaft exclusion Z 7 is repealed (BGBl I 118/2015). The wizard proposes the rolling basis and the statutory claim, previews Z 1/Z 2/reduction/privileged/excess/tax and requires explicit confirmation against claim-conversion risk. The § 291d EO termination pot nets both severance wage-tax rules; key 260 now includes LST_ABF_FREI. Verified against the original statute text in .ris/ (EStG § 67 Abs 6) and the knowledge-base sources lb-end-12/13/15; KZ positioning of Abs-6 amounts and the excess's § 291d pot allocation remain documented verification points against LStR Rz 1087 ff.

Version 19.0.14.0.0 (private), 19.0.10.0.0 (core)
2026-09-15 11:34:09 +02:00
fegger 9add58fe83 [IMP] l10n_at_hr_payroll_private: add statutory old-system severance (AP15-A)
Pay the pre-2003 AngG severance from the end-of-employment run as its own neutral benefit line: free of SV (§ 49 Abs 3 Z 7 ASVG) and payroll levies, outside the annual sixth, and collected into the § 291d EO termination pot net of its own wage tax. Taxation follows the binding better-of rule of § 67 Abs 3 EStG: multiple-of-method (tariff wage tax on the running monthly wage × the statutory multiple of the payout) versus the flat 6 % rate, applied mandatorily in favour of the employee. The tariff wage tax is captured as a separately confirmed value instead of deriving it from gross pay through the § 62 engine. The wizard enforces § 23a Abs 3 AngG (parental exit needs five uninterrupted years), blocks BMSVG-new contracts except frozen claims and validates AGRD 02/06 against the claim type. The LNK basis subtracts § 67 Abs 3/6 rules only when they actually run in the tax base, the L16 generator reports LST_ABF in key 260 outside 210/220, and result_rules access in the garnishment paths avoids DefaultDictPayroll materialisation. Verified against the original statute texts in .ris/ (AngG §§ 23/23a, EStG § 67 Abs 3).

Version 19.0.13.0.0 (private), 19.0.9.0.0 (core)
2026-09-15 11:01:55 +02:00
fegger ee94f4664f [IMP] l10n_at_hr_payroll_private: add end-of-employment payroll cycle (AP14-A)
Pay the untaken vacation, dismissal compensation, time balances and open advances from one exit run. The vacation replacement splits natively into a running and a special-payment component per § 67 Abs 8 lit d, only the running part extends the mandatory insurance under § 11 Abs 2 ASVG with sequential windows (dismissal compensation first) and daily-value ceilings. Dismissal compensation follows the one-fifth rule of § 67 Abs 8 lit b without raising the annual sixth, stays fully social-insurable by allocation over the notice period and fully subject to payroll taxes. Advances are offset against net pay only (§ 293 Abs 3 EO) and time credits carry the 50 % statutory surcharge without § 68 relief. Verified against the original statute texts in .ris/; § 67 Abs 6 lump-sum payments are deliberately deferred to AP15.
2026-09-14 16:08:44 +02:00
fegger 9ff977e0d4 [IMP] l10n_at_hr_payroll_private: add Pendlerpauschale, Pendlereuro and job ticket data (AP13-B)
Model commuter declarations as effective-dated L 34 records so monthly changes, L 34/Pendlerrechner evidence and historical payslip reproduction stay auditable. PP enters as an aliquoted § 66 freibetrag of the running tax base while PE joins the annual absetzbetraege, matching the cumulative engine's rollup. Ticket handling follows § 26 Z 5: employer ticket costs reduce PP pro rata (lit i), Werkverkehr is data-driven via the residual route and salary conversion does not block PP/PE. Also register the AP13-A tests that were accidentally left out of the previous commit.
2026-09-14 14:47:23 +02:00
fegger 3f307a0688 [IMP] l10n_at_hr_payroll_private: add domestic travel expenses (AP13-A)
Use Odoo's payroll expense reconciliation flow so documented employee-paid travel expenses remain linked to their payslip and payable settlement. Classify only the excess over the verified domestic tax-free limits as running remuneration, avoiding both unpaid expense reimbursements and double payment.
2026-09-14 13:42:06 +02:00
fegger 91ac9e5fda [IMP] various: record AP12 completion and ignore RIS cache 2026-09-14 13:20:38 +02:00
fegger 8efea77b6c [IMP] l10n_at_hr_payroll_private: Sachbezüge (AP12) 2026-09-14 12:22:15 +02:00
fegger 018554b215 [IMP] l10n_at_hr_payroll_private: Lohnpfändung — Existenzminimum § 291a EO, DN-Abzug, Kostenersatz, DSE (AP11)
Pfändungs-/Exekutionsmaschinerie nach EO §§ 291/291a/292/301/302/
292h für den Privatwirtschafts-DN (Plan:
personalverrechnung/PLAN-Restluecken-AP11.md §AP11, MVP + Kostenersatz):

- Neues Modell l10n.at.payroll.pfaendung (models/pfaendung.py):
  Gläubiger, Vollstreckungsträger, Pfändungsart, Zustellungsdatum,
  Forderungshöhe, Status aktiv/gesetzt/geloest, Verwalter
  (§ 301 Abs 1 Z 6), 4-Wochen-Zahlungssperre (§ 304),
  Kostenersatz-Variante (§ 292h), DSE-/Auszahlungsfristen (computed),
  Rang nach Einlangedatum, Constraint Löse-/Zustellungsdatum;
  hr.version: l10n_at_unterhaltspflichten (0–5) und
  l10n_at_sz_anspruch (§ 291a Abs 2 Z 1/Z 2); hr.salary.rule:
  Flags l10n_at_pfandung_unpfandbar (AP12-Schnittstelle) und
  l10n_at_pfandung_beendigung (AP14/15-Schnittstelle)
- Engine (hr.payslip): Existenzminimum-Maschine § 291a EO je Topf
  (laufend/sz13/sz14/beendigung), Pfändungsberechnungsgrundlage
  § 291 EO (laufend = Bezüge − unpfändbar − SV-DN − LSt),
  Masse, Kostenersatz § 292h (2 %/max 8 € + 1 %/max 4 €, nie vom
  Existenzminimum), Regeln PFAENDUNG (seq 75) / PFAENDUNG_SZ (seq 76);
  result_rules enthält ungerundete Rule-Summen — Lesezugänge
  runden auf Cents (Zeilenbeträge), sonst 1-Cent-Drift
- Parameter at_eo_azr (2025: 1.273,99 / 2026: 1.308,39 €) und
  at_eo_kostenersatz; DSE-Report (qweb-pdf auf hr.employee),
  Views/Menu unter Payroll-Wurzel, Security (payroll-Groups +
  Company-ir.rule)
- Rechenfälle docs/rechenfaelle/pfaendung.md (RF-PFA-1…7):
  lb-pfa-03 exakt verifiziert (33.840 € → EX 16.684 € /
  pfändbar 17.156 €); 103/103 Tests grün
- Offene Reste dokumentiert: Unterhaltsexekution 75 %/Koinzidenz,
  Vorschüsse § 290c, Sachbezüge (AP12), Beendigungs-Regeln (AP14/15),
  2027-AZR-Werte

Version 19.0.9.5.0
2026-09-13 02:33:26 +02:00
fegger c3b9d6eb8e [IMP] l10n_at_hr_payroll_private: Arbeits- und Entgeltbestätigungen BEST AK/AW — SART 70/71 Kranken-/75/76 Wochengeld (AP8)
Satzstrukturen PDF-verifiziert aus DM-ORG 42.7.0 (ODL, Pages
493-505; Positionsketten lückenlos): G.10 AEB-Krankengeld v12
(SART 70/71, BEST AK, 111 Felder, Satzlänge 1392) und G.11
AEB-Wochengeld v10 (SART 75/76, BEST AW, 64 Felder, 1048).
Die .txt-Extraktion des DM-ORG ist unzuverlässig (Feldversatz).

- Neues Modell l10n.at.payroll.aeb (models/aeb.py): Episode
  (verhinderung_von/bis), KZKU, Storno über storno_id (E.10.2.1:
  nur Fehler/BMGL-Änderung), REFN/Datei/Prüfprotokoll; Erzeugung
  auf dem ELDA-Bestands-Framework (Vorlauf/Schluss/Satzlängen-
  selbstkontrolle)
- EFZ-Refaktur: Phasen-Karte nach hr.version verschoben
  (_l10n_at_efz_arbeitsjahr_start/_l10n_at_efz_phasen/
  _l10n_at_efz_stufe_am) — Payslip-Status (AP4) und AEB teilen die
  Maschine; _at_efz_status-Verhalten durch Tests gepinnt
- Fachdaten Krankengeld: AEFZ (Anspruch in Wochen), JAGU=1
  (Arbeitsjahr), TAGU=2 (Kalendertage), Teilentgelt TPR/TVO/TBI
  je Phase, Vorerkrankungen ANV/ANB vor der Episode, VENT
  (Voll-Phase-Ende), Bezugsblöcke BVO/BBI/BBE + BSUM aus den
  vollen Monatsläufen vor der Episode, SZKZ datengetrieben
- Fachdaten Wochengeld: AVER (Ø-Netto der drei Referenzmonate,
  § 162 Abs 3 ASVG — AP7-Logik), AVON/ABIS, ANGV=K (kein
  Fortbezug), AGRD-Validierung nach D.22 (SART 75/76 nur
  02/03/04/05/06/10/22/24; unzulässige geleert + Protokoll)
- Fund: L10nAtEldaSatz.setze(None) übernimmt die Grundstellung
  nicht — Felder nur per Leerstring aktiv leeren
- 4 Tests: SART 70 mit 76-Tage-Episode (AEFZ 06, TPR1 50,
  TVO1 13.10.2026, VENT 12.10.2026, Bezugsblock), SART 75 mit
  AVER/AVON/ABIS, Storno 76 (REFN -ST, Kerndaten des Originals),
  AGRD-Validierung
2026-09-12 23:52:11 +02:00
fegger 11954f41d7 [IMP] odoo-at-payroll: wissensbasis lb-krs-08 Stufenverifikation ; AP7-Agent-Memory
- lb-krs-08 (Krankenstand-EFZ): die offene ⚠-Marke 'EFZG/AngG-
  Stufenabsätze vor Implementierung gegen RIS verifizieren' ist mit
  der AP4-Umsetzung erledigt — -Eintrag mit Fundstellen
  (EFZG GesNr 10008308 § 2 Abs 1; AngG § 8 Abs 1/2/2a, Stand 2026-09);
  lohnsteuerliche Einordnung laufender Bezug bleibt ⚠ (ohne §-Zitat)
- MEMORY.md: AP7-Status (Wochengeld = KV-Leistung, Rollenklärung
  gegenüber der Plan-Annahme) und offene Reste
2026-09-12 23:27:29 +02:00
fegger 0abc1383d1 [FIX] l10n_at_gemeinde_payroll: Modul erstmals installierbar — 9 Odoo-19-Latenzfehler; BDA-Vordienstzeiten-Vorschlag (AP10+AP9)
AP10 — Latenzfehler des nie installierten Vorlaufs:
- regular_pay auf hr.payroll.structure entfernt (Feld existiert nicht)
- is_paid/round_days/round_days_type von WET-Records entfernt
- Falscher XML-ID-Praefix payroll_structure_bgld. -> Modul-Referenzen
- amount_select 'python' -> 'code' (Selection)
- import in Regelcode entfernt (safe_eval verbietet IMPORT_NAME)
- rules['ME'].total -> result_rules['ME']['total'] (Odoo 19 befuellt
  rules nie; SZQ-Sonderzahlung rechnete gegen Null)
- categories.X -> categories['X'] (NETTO-Regel)
- work_time_rate /100 entfernt (Odoo 19 speichert Bruchteil 0..1)
- nie gelaufene Tests: Payslip-name-Pflichtfeld, Stichtag vor
  Katalog-Gueltigkeit (Wizard-Skip korrekt), date_start ist Compute
  aus contract_date_start

AP9 — BDA-Vordienstzeiten (GemBG S 67 Abs 1-3, RIS LrB GesNr
20001002 verifiziert): Feld vordienstzeiten_monate (Help dokumentiert
Anrechnungskatalog inkl. Obergrenzen), Compute bda_vorschlag
(Vertragsbeginn - Monate), Uebernahme-Button als Verwaltungsakt,
View-Erweiterung
2026-09-12 23:18:07 +02:00
fegger 3c5cc3aded [IMP] odoo-at-payroll: GP9 abgeschlossen — AP9 final, GP1-GP9 komplett, Projekt M8 beendet
CHANGELOG-GP9-Eintrag; MEMORY-Handoff (GP1-GP9 komplett, M8 final, AP10 optional).
2026-09-12 20:44:22 +02:00
fegger 2f55bfb21a [IMP] odoo-at-payroll: GP8-Bau dokumentiert — M8 erreicht, GP1-GP8 komplett
CHANGELOG-GP8-Eintrag; Plan-Abschnitt-10-Update (Fristenkalender, Kontrollsechstel-Wizard, Mitteilungsfile-Import, 2027-Parameter-Rahmen, Vertragsstichtage-UI, All-in/DAG-Reports, B14-Verifikation); MEMORY-Handoff (100/100, odoo_dev auf GP8, GP9/AP9 als optionaler Folgeauftrag); README-Update (GP1-GP8 komplett).
2026-09-12 20:00:27 +02:00
fegger ea14c48cca [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).
2026-09-12 17:31:21 +02:00
fegger 529ac30cdb [IMP] odoo-at-payroll: GP6-Bau, KFS/BW-6-Abgleich und Odoo-19-Mechanik-Funde dokumentiert
CHANGELOG-GP6-Eintrag; Plan-Abschnitt-10-Update (Buchungsmatrix nach KFS/BW 6, Nutzer-Klaerungen 5.1-5.3 inkl. aufgeklaerter Vertauschung Loehne/Gehaelter, Option-A-minimal-Split, NET-Umbenennung mit Default-Regel-Kopie-Fund); MEMORY-Handoff (88/88 auf Wegwerf-DB, GP7 als naechster Bauabschnitt, offene Referenzbuchhaltungs-Reste, Odoo-19-Mechanik-Funde: function-Record-ID-Semantik, Journal-Default-Constraint, Scaffold-Konto-Falle).
2026-09-12 12:59:00 +02:00
fegger 1e88fd1636 [ADD] odoo-at-payroll: opendataloader-pdf agent skill for PDF extraction
New .agents/skills/opendataloader-pdf/ for structured PDF extraction
(Markdown/JSON with bounding boxes, hybrid AI mode, scanned-PDF OCR)
based on the upstream odl-pdf agent skill (Apache-2.0), with its helper
scripts verify-json.py and hybrid-health.sh vendored under scripts/.

Core disciplines: discover options from the installed --help (flags
drift between releases), batch all inputs into one invocation (JVM per
call), verify the result against intent (zero exit is not success:
auto-triage skips enrichment, fallbacks drop quality, empty pipes),
treat extracted content as untrusted, never commit extracted full
texts of the licensed .lexis360/.wiku sources.

Workflow wiring: AGENTS.md skill selection routes any PDF extraction
to the skill; wissensbasis/SKILL.md cross-references it for difficult
PDFs and spot-checks, with Layer-1 batch intake deliberately kept on
build_lexis_kb.py (frozen IDs and --check depend on the text shape).

ODL 2.5.8 installed in the user venv ~/.local/lib/python (not the
Odoo .venv); all documented flags verified against the installed CLI
on real .lexis360/ sources.
2026-09-12 09:32:21 +02:00
fegger 63913a04ba [IMP] odoo-at-payroll: GP5-Bau und Nutzer-Rechtsklarstellungen dokumentiert
CHANGELOG-GP5-Eintrag; Plan-Abschnitt-10-Update (Fensterkonvention mit Monatsjubiläum statt Folgetag, Wiederzulassung auch bei kurzem Vor-AV, eigene BV-Grundlage, bewusste Nicht-Ziele); MEMORY-Handoff (84/84 auf Wegwerf-DB, GP6/GP7/GP8-Anschlüsse, GP4-Beobachtung SV-SZ/§-49-Abs-3-Z-7 offen, D4-Fund zur hr.version-date_version-Synchronisation).
2026-09-12 08:22:17 +02:00
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 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 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 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 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 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 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