[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.
This commit is contained in:
2026-09-10 11:08:26 +02:00
parent fe3b09c4e2
commit 2cc6be7832
51 changed files with 7215 additions and 42 deletions
+38 -1
View File
@@ -49,7 +49,7 @@ CURATED_DIR = ROOT / "personalverrechnung" / "wissensbasis" / "dokumente"
KB_JSON = CURATED_DIR.parent / "kb.json"
WORK = "Lexis Briefings Personalrecht"
BATCH = 2
BATCH = 3
MONTHS = {
"jänner": 1, "januar": 1, "februar": 2, "märz": 3, "april": 4,
@@ -90,6 +90,14 @@ TOPIC_MAP: dict[str, str] = {
"sachbezuge-freiwillige-sozialleistungen": "sac",
"diverse-pramien": "prm",
"provisionen": "prm",
# batch 3
"dienstreise-reisekosten": "rei",
"ruckerstattung-ausbildungskosten": "ent",
"vorsorgeleistungen": "vor",
"sonderzahlungen": "son",
"zulagen-und-zuschlage": "zus",
"pendlerforderung": "pen",
"sachzuwendungen-geschenke": "ges",
}
# Fallback keyword scan over the ASCII topic + slug, checked after the
@@ -121,6 +129,21 @@ KEYWORDS: list[tuple[str, str]] = [
("provision", "prm"),
("drittlohn", "ent"),
("entgelt", "ent"),
# batch 3 fallback keywords
("dienstreise", "rei"),
("reisekosten", "rei"),
("taggeld", "rei"),
("nachtigung", "rei"),
("pendler", "pen"),
("sonderzahlung", "son"),
("zuschlag", "zus"),
("zulage", "zus"),
("vorsorge", "vor"),
("bmsvg", "vor"),
("mitarbeiterbeteiligung", "vor"),
("betriebspension", "vor"),
("geschenk", "ges"),
("ausbildungskosten", "ent"),
]
# Cluster registry: ID prefix -> display name (kb.json, INDEX).
@@ -139,6 +162,13 @@ CLUSTERS: dict[str, str] = {
"prm": "Prämien & Provisionen",
"sac": "Sachbezüge & freiwillige Sozialleistungen",
"vst": "Vorstandsmitglieder (Vorstand)",
# batch 3
"rei": "Dienstreise & Reisekosten",
"vor": "Vorsorgeleistungen (BMSVG, Betriebspension, Beteiligung)",
"son": "Sonderzahlungen",
"zus": "Zulagen und Zuschläge",
"pen": "Pendlerförderung",
"ges": "Sachzuwendungen & Geschenke",
}
# Frontmatter `topic` values (descriptive ASCII slugs, per approved D2
@@ -159,6 +189,13 @@ TOPIC_TO_PREFIX: dict[str, str] = {
"pramien": "prm",
"sachbezuge": "sac",
"vorstand": "vst",
# batch 3
"reisekosten": "rei",
"vorsorgeleistungen": "vor",
"sonderzahlungen": "son",
"zuschlage": "zus",
"pendlerforderung": "pen",
"geschenke": "ges",
}
HEADER_RE = re.compile(r"^\s*Lexis 360®\s*$")