[IMP] l10n_at_hr_payroll: TASY-Tarifsystem-Katalog, AGRD-Auswahl, DG-Kosten-/Lohnkonten-Reports, Wr.-DAG-Grundlagen (AP0-AP3)

AP0 Variante b — TASY-Tarifsystem-Katalog:
- Neue Katalogmodelle (BSGR/ERGB/Dienstgebergruppen/Tarifgruppen/
  Tarifsets/Tarife/Zuordnungen/Zu-Abschläge inkl. Steuerung),
  models/tasy_katalog.py — Auflösung Tarifgruppe (BSGR+ERGB+DGG)
  -> Sätze je Verrechnungsbasis
- Import-Wizard l10n.at.payroll.tasy.katalog.wizard (alle Träger,
  sektionsscharf, idempotent), Views/Menüs, Security
- Realexport-Test gegen TASY-LSWH-Export (B001/B002 = 39,05/37,55 %)

AP1 — eSV-Abmeldegründe (DM-ORG D.22):
- l10n_at_agrd Char -> vollständige Selection (33 Codes),
  Seed der Standard-Abgangsursachen (noupdate, hr-Defaults vorverbunden),
  Form-/Listen-Erbe

AP2a-c — Auswertungen:
- Monatsjournal: eigener Dienstgeberanteile-Block (ATP_DG vorher
  still ausgefiltert); Fix: models/monatsreports.py war nie in
  models/__init__.py importiert (GP7-Reports waren toter Code)
- Neuer Report Dienstgeber-Gesamtkosten (Brutto + LNK aufgeschlüsselt/
  kumuliert je AN + Laufsummen, Spalten FLAF/KommSt/DZ/BV/Wr. DAG)
- Jahreslohnkonto je DN + Betriebsjahreslohnkonto (Jahresbericht-
  Wizard, Monatsmatrix je Lohnart), report/jahresreports.xml

AP3 — Wr. Dienstgeberabgabe (RIS LrW GesNr 20000133 verifiziert):
- Company-Flag l10n_at_wien_dag (Kern), Fristenarten wien_dag/
  wien_dag_jahres (cron-geflaggt, 15./31. 3.), Company-View-Feld,
  Wr.-DAG-Spalte im DG-Kosten-Report
This commit is contained in:
2026-09-12 23:17:00 +02:00
parent 3c5cc3aded
commit 3c85cc6790
16 changed files with 1999 additions and 35 deletions
+59 -4
View File
@@ -15,13 +15,56 @@ Dienstgeberin und der Arbeitsstätten.
Prüfzifferalgorithmus der SVS ist nicht beschafft → nur Format/
Plausibilität, Rest dokumentiert).
- ``hr.departure.reason``: Mapping auf den eSV-Abmeldegrund (AGRD,
DM-ORG D.22; Standard ``00`` sonstiger Grund mit Ende des
Beschäftigungsverhältnisses)."""
DM-ORG D.22 — vollständige Code-Liste als Selection, Standard
``00`` sonstiger Grund mit Ende des Beschäftigungsverhältnisses;
die üblichen Abgangsursachen sind im Seed vorverbunden,
noupdate — mandantenseitig ergänzte Ursachen bleiben unberührt)."""
from odoo import api, fields, models
from odoo.exceptions import ValidationError
# eSV-Abmeldegründe, DM-ORG 42.7.0 Kapitel D.22 (AGRD Abmeldegrund,
# Code) — verifiziert gegen .firecrawl/ris/elda/DM-ORG_v42.7.0.txt
# (42. Ergänzung 07/2026). Codes 26/28 existieren nicht (Lücken im
# Katalog), Code 00 = sonstiger Grund mit Ende des DV.
L10N_AT_AGRD = [
('01', '01 — Kündigung durch den Dienstgeber'),
('02', '02 — Kündigung durch den Dienstnehmer'),
('03', '03 — Einvernehmliche Lösung'),
('04', '04 — Zeitablauf'),
('05', '05 — Berechtigter vorzeitiger Austritt'),
('06', '06 — Fristlose Entlassung'),
('07', '07 — Karenz nach MSchG / VKG'),
('08', '08 — Präsenzdienstleistung im Bundesheer'),
('09', '09 — Zivildienst'),
('10', '10 — Pragmatisierung'),
('11', '11 — Länger als 1 Monat währender unbezahlter Urlaub'),
('12', '12 — Ummeldung'),
('13', '13 — Tod des Dienstnehmers'),
('14', '14 — Änderung der SV-Pflicht'),
('15', '15 — Truppenübung'),
('16', '16 — Pensionierung'),
('17', '17 — Ende freier Dienstvertrag (§ 4 Abs 4 ASVG)'),
('18', '18 — Enthebung von der Gerichtspraxis'),
('19', '19 — Unterbrechung der Gerichtspraxis'),
('20', '20 — Entlassung aus der Bundesbetreuung'),
('21', '21 — Kündigung durch DN während Elternteilzeit (MSchG/VKG)'),
('22', '22 — Unberechtigter vorzeitiger Austritt'),
('23', '23 — Bildungskarenz gemäß § 11 AVRAG'),
('24', '24 — Vorzeitiger Austritt gem. § 25 IO durch Dienstnehmer'),
('25', '25 — Kündigung gem. § 25 IO durch Insolvenzverwalter:in'),
('27', '27 — Kündigung gem. § 25 IO durch Dienstgeber'),
('29', '29 — SV-Ende Beschäftigung aufrecht'),
('30', '30 — Lösung in der Probezeit durch Dienstgeber'),
('31', '31 — Pflegekarenz (interner SV-Abmeldegrund)'),
('32', '32 — Bildungskarenz gemäß § 12 AVRAG'),
('33', '33 — Familienhospizkarenz (interner SV-Abmeldegrund)'),
('34', '34 — Lösung in der Probezeit durch Dienstnehmer'),
('00', '00 — Sonstiger Grund mit Ende des DV'),
]
class ResCompany(models.Model):
_inherit = 'res.company'
@@ -36,6 +79,16 @@ class ResCompany(models.Model):
help='9-stellig: 2 Stellen Finanzamtsnummer + 7 Stellen\n'
'Steuernummer (Lohnzettel Finanz I1 STNRA/STNRL;\n'
'Arbeitsstättenmeldung STNR).')
l10n_at_wien_dag = fields.Boolean(
string='AT Beschäftigungsort Wien (Wr. DAG)',
help='Wiener Dienstgeberabgabe („U-Bahn-Steuer“, Wr. DAG,\n'
'RIS LrW GesNr 20000133): 2 € je Dienstnehmer:in und\n'
'angefangene Woche je Bestehen eines Dienstverhältnisses\n'
'mit Beschäftigungsort Wien (§§ 1, 2, 5); Befreiungen § 3\n'
'(z. B. Überschreiten des 55. Lebensjahres, Lehrlinge,\n'
'≤ 10 Wochenstunden, Mutterschaftsverbote/Karenz,\n'
'Präsenzdienst, Gebietskörperschaften); Selbstberechnung\n'
'15. des Folgemonats, Jahreserklärung bis 31. 3. (§ 6).')
class ResPartner(models.Model):
@@ -89,8 +142,10 @@ class HrVersion(models.Model):
class HrDepartureReason(models.Model):
_inherit = 'hr.departure.reason'
l10n_at_agrd = fields.Char(
l10n_at_agrd = fields.Selection(
L10N_AT_AGRD,
string='AT eSV-Abmeldegrund (AGRD)',
help='2-stelliger Abmeldegrund-Code der Versichertenmeldung '
'(DM-ORG D.22); Standard 00 „Sonstiger Grund mit Ende des '
'Beschäftigungsverhältnisses“.')
'Beschäftigungsverhältnisses“. Die Abmeldung M4 liest das '
'Mapping dieser Abgangsursache.')