Files
odoo-at-payroll/.agents/MEMORY.md
T
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

236 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Agent Memory — odoo-at-payroll
## Current focus
**Lexis360-Wissensbasis Batch 1 fertig** (2026-09-10):
55 LexisNexis-Briefings („Lexis Briefings Personalrecht") aus `Lexis360/`
zweischichtig erschlossen: Layer-1-Volltexte lokal unversioniert
(`Lexis360/md/`, gitignored), Layer-2-Kuratierung versioniert unter
`personalverrechnung/wissensbasis/` (55 Einträge, 6 Cluster, Frontmatter-
Schema D2, IDs `lb-*` eingefroren), generierte Registry `kb.json` +
`INDEX.md`, Tool `tools/build_lexis_kb.py` (extract/registry/check).
Zweck: Entwicklungsreferenz + Copilot-Korpus. GP1-Abnahme (Install +
`test_kv_katalog`) auf dem Dev-Host bleibt das nächste Gate vor GP2
(Entgelt-Engine).
## Completed
- **Lexis360-Wissensbasis Batch 1** (2026-09-10): 55 PDF-Exporte aus
Lexis 360 („Lexis Briefings Personalrecht“; Stände 2024-03 bis 2026-09)
→ 55 kuratierte Einträge in `personalverrechnung/wissensbasis/dokumente/`
(Zusammenfassung/Kernwerte/Rechtsgrundlagen/Payroll-Relevanz/Verweise,
Stand-Marks, ✅/⚠/❓), `README.md` (Schema/Konventionen), generiert
`kb.json` + `INDEX.md`, Tool `personalverrechnung/tools/build_lexis_kb.py`
(--extract pdftotext-Pipeline; --registry Frontmatter-Validierung ohne
PyYAML inkl. cross_refs/topic↔ID-Präfix; --check Layer-1↔Layer-2-
Vollständigkeit; ID-Freeze über `_catalog.json`). RUNBOOK um
Wissensbasis-Workflow (Batches, Validierung, Limitierungen) erweitert.
- **GP1 KV-Framework General-AT** (2026-09-09): `l10n_at_hr_payroll_private`
19.0.1.0.0 implementiert — Modelle `kollektivvertrag.py` (kv/kv.wert/
kv.gruppe/kv.gruppe.stufe) + `hr_version_private.py` (Vertragsfelder,
Muster `hr_version_bgld.py`), Wizard `kv_katalog_import.py` (Vorschau,
Sprungwarnung, Versionierung), Views/Menus/Security, Seed D2 mit
SI-2203/SI-2748-Tabellen 2026 (inkl. Sonder-Vorrückungsverläufe
IV-M/V-OM im SI-2748, aufgelassene VG I im SI-2203, Nacht-€-Satz
als Jahresversionen 2,71/2,76 €). Test-Suite `test_kv_katalog`:
Seed-Lookups, Stichtags-Lookup, Versionierung, Eckwerte, Wizard
(Sprungwarnung/Aktualisierung/Neuaufnahme), Vertragsfelder.
- **GP0-Rechtsverifikationen General-AT** (2026-09-09):
`RECHTSQUELLEN-Privat.md` erstellt: FLAF § 41 FLAG (RIS GesNr
10008220 — 3,7 % ab 2025, 2,7 % ab 2028; Basis Arbeitslöhne;
1.095-€-Freibetrag bei ≤ 1.460 €), KommStG 1993 (GesNr 10004841 —
3 %; § 3 Abs 3 Gemeindefreiheit; § 11 Verfahren), BMSVG (1,53 % auf
Entgelt + SZ, kein HBG-Cap; § 14 Abs 2 Verfügungsausschluss; § 15
Anwartschaft statt Staffel; § 17 Verfügungsoptionen), UrlG (§ 2
30/36 Werktage; § 6 Urlaubsentgelt; § 10 Ersatzleistung), EStG 1988
(§ 33/66 Tarif 2026; § 67 sonstige Bezüge 0/6/27/35,75 % im
Jahressechstel, Freigrenze 2.615 €, Kontrollsechstel § 77 Abs 4a,
§ 67 Abs 3/6/8 Abfertigungen; § 68 SZFN 400 €, ÜStd 10/120 €,
2026: 15/170 €, Nachtarbeit 600 €). Plan (Abschnitte 1, 4.24.4,
6, 8) auf Verifizierungsstand gebracht; payroll-Skill §-Zitat
korrigiert.
- **D4-Neuverifikation komplett** (2026-09-09): verifiziert gegen beide
in-repo Checkouts — `odoo/` (Community) und `odoo_enterprise/odoo`
(Odoo 19.0.0; gemergter Baum: odoo-Paket + 1.452 Addons, Community +
Enterprise in einem Addons-Verzeichnis, u. a. Referenz-Lokalisierungen
`l10n_be_hr_payroll`/`l10n_ch_hr_payroll`; `l10n_at_payroll` existiert
erwartungsgemäß nicht); beide in `.gitignore`. Community-Teil:
`hr.version` (`hr/models/hr_version.py` L35; `wage`/
`structure_type_id`/`resource_calendar_id` versioniert),
kalenderbasierte Work-Entry-Erzeugung
(`hr_work_entry/models/hr_version.py` L420 `_generate_work_entries`
+ Postprocess-Hooks L500/L506), `hr.work.entry.type` + Entry-States
(`hr_work_entry.py` L39). Enterprise-Teil:
`work_time_rate`/`hours_per_week` auf Version
(`hr_payroll/models/hr_version.py` L48/L39), `work_entry_source`
(L30; Attendance-Integration `hr_payroll_attendance/models/
hr_payslip.py` L29), `hr.payslip.run` (`hr_payslip_run.py` L23;
state L31, `date_start` L41, `date_end` L45), EOSB-Muster
`l10n_ae_hr_payroll` (`_inherit = "hr.payslip"` L10,
`_l10n_ae_get_eos_daily_salary` L95, je-Version-Feld
`l10n_ae_eos_daily_salary` L102, Structure-Type-Inherit),
Engine-Mechanismen an den Bgld-Plan-Zeilenreferenzen bestätigt
(`payslip._rule_parameter` `hr_payslip.py` L951, localdict,
`hr.salary.rule.account_debit`/`account_credit` L11/L15,
Posting-Hooks `_action_create_account_move` L54 /
`_prepare_line_values` L125 / `_prepare_slip_lines` L166,
`journal_id` auf Structure via
`hr_payroll_account/models/hr_payroll_structure.py` L15,
`hr.payslip.input.type` `hr_payslip_input_type.py` L9,
`hr.payroll.structure.type.country_id` L46);
`hr_payroll_account_iso20022` vorhanden. `l10n_at`-Konten
(`l10n_at/data/template/account.account-at.csv`, XML-ID-Muster
`l10n_at.chart_at_template_<code>`): Sonderzahlungen 6240, Verrechnung
Lohnsteuer 3540 / Finanzamt 3530 / SV 3600, Abfertigungsrückstellungen
3000, KommSt 6660, FLAF-DB 6661, DZ 6662, Wien-Abgabe 6663 —
**Matrix-Lücken (GP0):** Löhne-/Arbeiter-Konto und SV-DG-Aufwandskonto
fehlen im Standard-Template. Hinweis: Build mit eigenem
Versionsschema (Manifests teils ohne `version`-Key, z. B. `l10n_at`
„3.2.1"); maßgeblich ist `release.py` `version_info` (19, 0, 0).
- **General-AT-Plan M0** (2026-09-09): `IMPLEMENTIERUNGSPLAN-Privat.md`
erstellt und freigegeben — Entscheidungen D1 (Pfad), D2 (Referenz-KVs
SI-2203 Handwerk/Gewerbe + SI-2748 Metallgewerbe), D3 (Kern-
Vorfinanzierung durch General-AT), D4 (Odoo-19-Source kurzfristig;
API-Neuverifikation in M1). Umfang: General-AT-Anteil ≈ 120172 PT,
inkl. D3-Vorfinanzung ≈ 180258 PT (M1M9, ~79 Monate).
README-Modultabelle, Gerüst-README `l10n_at_hr_payroll_private` und
CHANGELOG auf Planstand gebracht.
- **KV-Library** (2026-09-09): `tools/fetch_kv_portal.py` (ÖGB-Portal:
Sitemap/Dashboard/Structure/Slices/Topics-JSON-APIs, 593 Varianten,
Catalog+Texte JSON/MD), `tools/fetch_wko_kv.py` (WKO-DB: 1.820
Übersichtsseiten, 614 aktuelle Dokumente, Match gegen Baseline),
`tools/build_kv_catalog.py` (Merge, Kammer-Klassifikation, Crosscheck,
manual-review-Listen), `quellen/kv/chambers/chambers.json` (Kammer-Quellen
kuratiert, inkl. Lücken: GÖD member-only, RA/Notariat nicht öffentlich),
`personalverrechnung/RUNBOOK.md` (Update-Zyklus). 407 WKO↔ÖGB-Paare,
30 Datumsdifferenzen geflaggt, 195 unklassifizierte (Einzenträger-KVs)
zur manuellen Sichtung.
- **Migration gem360 → odoo-at-payroll** (2026-09-09): dev-payroll nach
origin gepusht (Backup), History-Import per `git filter-repo`
(Branch hier: `main`), Modul-Split (TASY/SV-Layer in den Kern),
Model-Rename `l10n.at.payroll.tasy.*`, Skills/AGENTS/MEMORY neu
aufgesetzt, Manifest-Beschreibung auf AP1+AP2-Stand korrigiert.
- Vorher (aus gem360-Historie): AP1 Katalogmodell (35 Gruppen/433 Werte
2026), AP2 Entgelt-Engine (13 Regeln, Structure GEMBG.BGLD), SV-Werte
aus ÖGK TASY-LSWH; 3 Testsuiten (Katalog, Entgelt, TASY-Import).
## Open issues / blockers
- **Lexis360-KB offene Punkte** (2026-09-10): Korpus-Widersprüche ⚠ vor
Implementierung klären — AMS-Ersatzquote geblockte ATZ 2026 (lb-atz-07
28,5 % vs. lb-atz-09/12 27,5 %), DAG-Grenze 2023 (lb-bes-02 751,36 € vs.
lb-bes-06 751,37 €), Lehrlinge-Kurzarbeit (lb-leh-11 vs. lb-leh-07);
leh-Cluster teils alte Stände (2024-03/2025-08) — nur mit Stand-Kennzeichnung
verwenden; Copilot-Deployment braucht lizenkonformen Layer-1-Bereitstellungs-
pfad (Volltexte nicht im Repo); verweiste Briefings (z. B. Bildungskarenz)
mit Folgebatches beschaffen.
- **General-AT GP0-Rest offen** (2026-09-09): Pilotmandant/Golden-Master
fehlt; ELDA-/FinOnl-Specs mit der Bgld-AP0-Beschaffungsliste
abstimmen; D3-Anrechnungsmechanik vertraglich regeln (Bgld.-
Auftragserteilung); Referenz-KV-Kuratierung (SI-2203/SI-2748);
UGB-Buchungsmatrix; Volltexte AZG/AngG/ArbVG § 12/LStR 2002
beschaffen. Odoo-Quellen liegen in-repo (D4 erledigt); Runtime-Tests
brauchen noch PostgreSQL (Dev-Host).
- **KV-Library, manuell offen** (2026-09-09): manual_review-Listen im
`kv-catalog.json` (Match-Heuristik-Flüchtigungen, 30 Datumsdifferenzen,
195 unklassifizierte Einzelträger-KVs); Kammer-Scan-PDFs (RA Vbg,
LÄK NÖ/OÖ/Bgld) ohne OCR nicht maschinenlesbar; Angestelltenärzte-KV
nirgends öffentlich. Bibliothek inkl. Texte committed als `5b629a5`
(lokaler main, noch nicht gepusht).
- gem360-seitig gilt: Branch `dev-payroll` dort vorerst erhalten, aber
**keine Payroll-Implementierung mehr in gem360** und kein Merge nach
dev/va_module (Guardrails im gem360-Handoff). Die Brücke
`l10n_at_gemeinde_payroll_vrv` (AP7) wird in gem360 gegen getaggte
Releases dieses Repos gebaut.
- **Runtime-Validierung offen** (2026-09-09): Modul-Install und die
Testsuiten (Katalog, Entgelt, TASY-Import, neu: `test_kv_katalog`
privat) sind lokal nicht lauffähig (kein PostgreSQL). Odoo-Quellen
jetzt in-repo verfügbar — `odoo/`
(Community, `odoo-bin`) + `odoo_enterprise/odoo` (gemergter
Enterprise-Baum; Addons-Path `odoo_enterprise/odoo/addons,addons`).
Auf dem Dev-Host nachholen:
`-i l10n_at_hr_payroll,l10n_at_gemeinde_payroll --test-tags
/l10n_at_hr_payroll,/l10n_at_gemeinde_payroll`. Statisch grün:
py_compile + XML-Well-formedness über alle Addon-Dateien.
- Bgld.-Auftrag: AP0 offen (Bestandsaufnahme Pilotmandant, ELDA/FinOnl-
Specs, VRV-Buchungsmatrix, offene RIS-Verifikationen) —
`IMPLEMENTIERUNGSPLAN-Bgld.md` Abschnitt 8.
- Odoo-Upgrades künftig in beiden Repos (gem360 + dieses) gegen denselben
Odoo-Pin validieren.
## Decisions & conventions
- **Lexis360-Wissensbasis-Architektur** (2026-09-10): D1 — Volltexte/
PDFs lokal unversioniert (`Lexis360/` gitignored, Muster `.firecrawl/`),
nur Kuratierung versioniert (Lizenz LexisNexis). D2 — strukturelle
Frontmatter-Keys englisch (wie kv-catalog/chambers), Werte deutsch
(UTF-8); `stand` als Fachbegriff ISO `YYYY-MM`; `topic`/`tags` ASCII-
Slugs; `topic` = beschreibender Cluster-Slug (`altersteilzeit`,
`lehrlinge`, …), ID-Präfix (`atz`, …) nur im `id`. IDs `lb-<prefix>-<nn>`
eingefroren (nie renummerieren/wiederverwenden); Frontmatter = Source
of Truth, `kb.json`/`INDEX.md` generiert via `--registry`; Werte niemals
aus Trainingswerten, nur aus Quelltext mit Stand-Kennzeichnung.
- **General-AT D1D4** (2026-09-09): Plan geführt als
`personalverrechnung/IMPLEMENTIERUNGSPLAN-Privat.md`; Referenz-KVs R1
= SI-2203 + SI-2748 (Feinjustierung je Pilotmandant in GP0);
**D3-Vorfinanzierung** — General-AT baut die sektor-neutralen
Kern-Blöcke AP3/AP4 (und nötigenfalls AP5/AP6) in `l10n_at_hr_payroll`
vor (Symmetrie zur Bgld-Planungsentscheidung „AP3 im Kern, damit das
General-Produkt ihn erbt"); Anrechnung/Umlegung bei Bgld.-
Auftragserteilung per Change-Request; D4 — Odoo-19-Source in-repo:
`odoo/` (Community) + `odoo_enterprise/odoo` (gemergter
Enterprise-Baum), beide in `.gitignore`; D4-Verifikation komplett
erledigt.
- **GP0-Rechtskorrekturen General-AT (verbindlich)** (2026-09-09):
13./14. Bezüge = sonstige Bezüge iSd **§ 67 EStG** (§ 68 nur
Zulagen/Zuschläge — „§ 68 Abs 5/6" war falsch); Urlaubsentgelt =
**§ 6 UrlG** (§ 9 seit 2001 aufgehoben); EOSB = BMSVG-**Anwartschaft
ohne Monatsentgelt-Staffel** (§ 14 Abs 2 Ausschlussmatrix, § 15
Auszahlung Beiträge + Erträge); Bgld-P9-Rechtsbasis damit § 67
(Detailauslegung LStR 2002 bleibt offen).
- **KV-Quellen-Architektur** (2026-09-09): Main source je KV = die
verantwortliche Arbeitgeberkammer; kollektivvertrag.at (ÖGB) immer als
Crosscheck-Baseline (einziger vollständiger Korpus). WKO-DB deckt nur
WKO-KVs ab (keine Arzt/Apotheke/RA/Notar/Land-Zweige). Lohntafel-PDFs
nur verlinken, nicht downladen; im Text enthaltene Tabellen konvertieren.
Historische Slices nur bei Bedarf (Default: aktuelle Version).
- SKILL.md braucht YAML-Frontmatter (name = Verzeichnisname, description,
disable-model-invocation).
- Abhängigkeitsrichtung: gem360 → dieses Repo (nur die Brücke hängt an
beiden), nie umgekehrt.
- Tests nur auf Wegwerf-DB (nie `gem360_dev`); je Änderung py_compile +
XML-Well-formedness-Check.
- `.firecrawl/` bleibt lokal unversioniert (Rechts-Rohquellen); bei Fehlen
neu beschaffen — niemals aus Trainingswerten arbeiten.
## Files that matter right now
- `personalverrechnung/wissensbasis/` — Lexis360-Wissensbasis (README,
dokumente/ 55 Einträge, kb.json, INDEX.md; Batch-Workflow im RUNBOOK)
- `Lexis360/` — lizenzierte PDF-Exporte + Layer-1-Volltexte `md/` +
`_catalog.json` (lokal, unversioniert)
- `personalverrechnung/tools/build_lexis_kb.py` — KB-Pipeline
- `personalverrechnung/IMPLEMENTIERUNGSPLAN-Privat.md` — General-AT
(freigegeben; GP0-Rechtsverifikationen erledigt, GP0-Rest offen;
D4-Protokoll in Abschnitt 2)
- `personalverrechnung/RECHTSQUELLEN-Privat.md` — verbindliche
Rechtslage General-AT (GP0-Inventar; Statusmarks ✅/⚠/❓)
- `personalverrechnung/RUNBOOK.md` — KV-Library pflegen (Update-Zyklus)
- `personalverrechnung/quellen/kv/kv-catalog.json|.csv` — der Crosscheck-Katalog
- `personalverrechnung/quellen/kv/chambers/chambers.json` — Kammer-Quellen-Registry
- `personalverrechnung/tools/fetch_kv_portal.py` / `fetch_wko_kv.py` /
`build_kv_catalog.py` — Fetcher + Merge
- `personalverrechnung/IMPLEMENTIERUNGSPLAN-Bgld.md` — AP3+ (Freigabe-Gate)
- `personalverrechnung/RECHTSQUELLEN-Bgld.md` — verbindliche Rechtslage
- `personalverrechnung/ANGEBOTS-KALKULATION-Bgld-Personalverrechnung.md`
AP-Rahmen, Prämissen P1P10
- `odoo/` + `odoo_enterprise/` — Odoo-19-Checkouts (unversioniert,
in `.gitignore`; Enterprise-Baum gemergt: Community+Enterprise in
einem Addons-Verzeichnis; Test-Addons-Path
`odoo_enterprise/odoo/addons`)
- `addons/l10n_at_hr_payroll_private/` — General-AT (GP1 KV-Framework
+ Seed D2 umgesetzt; Runtime-Abnahme ausständig; GP2 danach)
- `addons/l10n_at_hr_payroll/` — Kern (SV/TASY; AP3 landet hier)
- `addons/l10n_at_gemeinde_payroll/` — GemBG (AP1+AP2)