mirror of
http://100.103.83.12:3003/fegger/odoo-at-payroll.git
synced 2026-09-17 08:52:45 +00:00
[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:
@@ -1,5 +1,6 @@
|
||||
# Part of the odoo-at-payroll project. License: LGPL-3.
|
||||
from . import test_tasy_import
|
||||
from . import test_tasy_katalog
|
||||
from . import test_lohnsteuer
|
||||
from . import test_sozialversicherung
|
||||
from . import test_elda_l16
|
||||
|
||||
@@ -0,0 +1,422 @@
|
||||
# Part of the odoo-at-payroll project. License: LGPL-3.
|
||||
"""AP0 (Variante b): TASY-Katalog-Import und Tarifgruppen-Auflösung.
|
||||
|
||||
Fixture-Slice mit den normativen Normalbetriebe-Werten 2026 (AB 39,05 %,
|
||||
SZ 37,55 % — verifiziert gegen den echten TASY-LSWH-Export 2026-07-01)
|
||||
plus E01-Ergänzung (NB-Zweig 3,80 % DG, Dienstgebergruppe NBNSA).
|
||||
"""
|
||||
import base64
|
||||
from datetime import date
|
||||
|
||||
from odoo.tests import TransactionCase, tagged
|
||||
|
||||
TASY_KATALOG_FIXTURE = """<?xml version="1.0" encoding="UTF-8"?>
|
||||
<tarifssystemlsh>
|
||||
<gueltigkeitstichtag>2026-07-01</gueltigkeitstichtag>
|
||||
<beschaeftigtengruppen>
|
||||
<beschaeftigtengruppe xmlId="G001">
|
||||
<code>B001</code>
|
||||
<bezeichnung>Arbeiter</bezeichnung>
|
||||
<kurzbezeichnung>Arb.</kurzbezeichnung>
|
||||
<traegergruppe>OEGK</traegergruppe>
|
||||
<vonDatum>2019-01-01</vonDatum>
|
||||
<bisDatum>2999-12-31</bisDatum>
|
||||
</beschaeftigtengruppe>
|
||||
<beschaeftigtengruppe xmlId="G002">
|
||||
<code>B002</code>
|
||||
<bezeichnung>Angestellte</bezeichnung>
|
||||
<kurzbezeichnung>Ang.</kurzbezeichnung>
|
||||
<traegergruppe>OEGK</traegergruppe>
|
||||
<vonDatum>2019-01-01</vonDatum>
|
||||
<bisDatum>2999-12-31</bisDatum>
|
||||
</beschaeftigtengruppe>
|
||||
<beschaeftigtengruppe xmlId="G044">
|
||||
<code>B044</code>
|
||||
<bezeichnung>Angestelltenlehrlinge</bezeichnung>
|
||||
<kurzbezeichnung>Ang. Lg.</kurzbezeichnung>
|
||||
<traegergruppe>OEGK</traegergruppe>
|
||||
<vonDatum>2019-01-01</vonDatum>
|
||||
<bisDatum>2999-12-31</bisDatum>
|
||||
</beschaeftigtengruppe>
|
||||
<beschaeftigtengruppe xmlId="G045">
|
||||
<code>B045</code>
|
||||
<bezeichnung>Arbeiterlehrlinge</bezeichnung>
|
||||
<kurzbezeichnung>Arb. Lg.</kurzbezeichnung>
|
||||
<traegergruppe>OEGK</traegergruppe>
|
||||
<vonDatum>2019-01-01</vonDatum>
|
||||
<bisDatum>2999-12-31</bisDatum>
|
||||
</beschaeftigtengruppe>
|
||||
<beschaeftigtengruppe xmlId="G010">
|
||||
<code>B010</code>
|
||||
<bezeichnung>Geringfügig beschäftigte Arbeiter</bezeichnung>
|
||||
<kurzbezeichnung>Gfg. Arb.</kurzbezeichnung>
|
||||
<traegergruppe>OEGK</traegergruppe>
|
||||
<vonDatum>2019-01-01</vonDatum>
|
||||
<bisDatum>2999-12-31</bisDatum>
|
||||
</beschaeftigtengruppe>
|
||||
</beschaeftigtengruppen>
|
||||
<ergaenzungen>
|
||||
<ergaenzung xmlId="E01X">
|
||||
<code>E01</code>
|
||||
<bezeichnung>Nachtschwerarbeitsbeitrag</bezeichnung>
|
||||
<kurzbezeichnung>NSchAB</kurzbezeichnung>
|
||||
<traegergruppe>OEGK</traegergruppe>
|
||||
<vonDatum>2019-01-01</vonDatum>
|
||||
<bisDatum>2999-12-31</bisDatum>
|
||||
</ergaenzung>
|
||||
</ergaenzungen>
|
||||
<dienstgebergruppen>
|
||||
<dienstgebergruppe xmlId="NBAL">
|
||||
<code>NBALG</code>
|
||||
<bezeichnung>Normalbetriebe - Allgemeiner Teil</bezeichnung>
|
||||
<kurzbezeichnung>NBALG</kurzbezeichnung>
|
||||
<traegergruppe>OEGK</traegergruppe>
|
||||
<vonDatum>2019-01-01</vonDatum>
|
||||
<bisDatum>2999-12-31</bisDatum>
|
||||
</dienstgebergruppe>
|
||||
<dienstgebergruppe xmlId="NBNS">
|
||||
<code>NBNSA</code>
|
||||
<bezeichnung>Normalbetriebe mit Nachtschwerarbeit</bezeichnung>
|
||||
<kurzbezeichnung>NBNSA</kurzbezeichnung>
|
||||
<traegergruppe>OEGK</traegergruppe>
|
||||
<vonDatum>2019-01-01</vonDatum>
|
||||
<bisDatum>2999-12-31</bisDatum>
|
||||
</dienstgebergruppe>
|
||||
</dienstgebergruppen>
|
||||
<tarifgruppen>
|
||||
<tarifgruppe xmlId="T001">
|
||||
<beschaeftigtengruppen>G001</beschaeftigtengruppen>
|
||||
<dienstgeberGruppen>NBAL</dienstgeberGruppen>
|
||||
<code>B001</code>
|
||||
<bezeichnung>Arbeiter</bezeichnung>
|
||||
<traegergruppe>OEGK</traegergruppe>
|
||||
<vonDatum>2019-01-01</vonDatum>
|
||||
<bisDatum>2999-12-31</bisDatum>
|
||||
<fallweiseBeschaeftigungZulaessig>true</fallweiseBeschaeftigungZulaessig>
|
||||
<betrieblicheVorsorgeZulaessig>true</betrieblicheVorsorgeZulaessig>
|
||||
</tarifgruppe>
|
||||
<tarifgruppe xmlId="T002">
|
||||
<beschaeftigtengruppen>G002</beschaeftigtengruppen>
|
||||
<dienstgeberGruppen>NBAL</dienstgeberGruppen>
|
||||
<code>B002</code>
|
||||
<bezeichnung>Angestellte</bezeichnung>
|
||||
<traegergruppe>OEGK</traegergruppe>
|
||||
<vonDatum>2019-01-01</vonDatum>
|
||||
<bisDatum>2999-12-31</bisDatum>
|
||||
<fallweiseBeschaeftigungZulaessig>false</fallweiseBeschaeftigungZulaessig>
|
||||
<betrieblicheVorsorgeZulaessig>true</betrieblicheVorsorgeZulaessig>
|
||||
</tarifgruppe>
|
||||
<tarifgruppe xmlId="T002E01">
|
||||
<beschaeftigtengruppen>G002</beschaeftigtengruppen>
|
||||
<ergaenzungen>E01X</ergaenzungen>
|
||||
<dienstgeberGruppen>NBNS</dienstgeberGruppen>
|
||||
<code>B002E01</code>
|
||||
<bezeichnung>Angestellte/Nachtschwerarbeitsbeitrag</bezeichnung>
|
||||
<traegergruppe>OEGK</traegergruppe>
|
||||
<vonDatum>2019-01-01</vonDatum>
|
||||
<bisDatum>2999-12-31</bisDatum>
|
||||
<betrieblicheVorsorgeZulaessig>true</betrieblicheVorsorgeZulaessig>
|
||||
</tarifgruppe>
|
||||
<tarifgruppe xmlId="T045">
|
||||
<beschaeftigtengruppen>G045</beschaeftigtengruppen>
|
||||
<dienstgeberGruppen>NBAL</dienstgeberGruppen>
|
||||
<code>B045</code>
|
||||
<bezeichnung>Arbeiterlehrlinge</bezeichnung>
|
||||
<traegergruppe>OEGK</traegergruppe>
|
||||
<vonDatum>2019-01-01</vonDatum>
|
||||
<bisDatum>2999-12-31</bisDatum>
|
||||
</tarifgruppe>
|
||||
</tarifgruppen>
|
||||
<tarife>
|
||||
<tarif xmlId="R001">
|
||||
<tarifZweig>KV</tarifZweig>
|
||||
<dienstnehmerAnteil>3.87</dienstnehmerAnteil>
|
||||
<dienstgeberAnteil>3.78</dienstgeberAnteil>
|
||||
<traegergruppe>OEGK</traegergruppe>
|
||||
<vonDatum>2019-01-01</vonDatum>
|
||||
<bisDatum>2999-12-31</bisDatum>
|
||||
</tarif>
|
||||
<tarif xmlId="R002">
|
||||
<tarifZweig>PV</tarifZweig>
|
||||
<dienstnehmerAnteil>10.25</dienstnehmerAnteil>
|
||||
<dienstgeberAnteil>12.55</dienstgeberAnteil>
|
||||
<traegergruppe>OEGK</traegergruppe>
|
||||
<vonDatum>2019-01-01</vonDatum>
|
||||
<bisDatum>2999-12-31</bisDatum>
|
||||
</tarif>
|
||||
<tarif xmlId="R003">
|
||||
<tarifZweig>AV</tarifZweig>
|
||||
<dienstnehmerAnteil>2.95</dienstnehmerAnteil>
|
||||
<dienstgeberAnteil>2.95</dienstgeberAnteil>
|
||||
<traegergruppe>OEGK</traegergruppe>
|
||||
<vonDatum>2019-01-01</vonDatum>
|
||||
<bisDatum>2999-12-31</bisDatum>
|
||||
</tarif>
|
||||
<tarif xmlId="R004">
|
||||
<tarifZweig>UV</tarifZweig>
|
||||
<dienstnehmerAnteil>0</dienstnehmerAnteil>
|
||||
<dienstgeberAnteil>1.1</dienstgeberAnteil>
|
||||
<traegergruppe>OEGK</traegergruppe>
|
||||
<vonDatum>2019-01-01</vonDatum>
|
||||
<bisDatum>2999-12-31</bisDatum>
|
||||
</tarif>
|
||||
<tarif xmlId="R005">
|
||||
<tarifZweig>WF</tarifZweig>
|
||||
<dienstnehmerAnteil>0.5</dienstnehmerAnteil>
|
||||
<dienstgeberAnteil>0.5</dienstgeberAnteil>
|
||||
<traegergruppe>OEGK</traegergruppe>
|
||||
<vonDatum>2019-01-01</vonDatum>
|
||||
<bisDatum>2999-12-31</bisDatum>
|
||||
</tarif>
|
||||
<tarif xmlId="R006">
|
||||
<tarifZweig>AK</tarifZweig>
|
||||
<dienstnehmerAnteil>0.5</dienstnehmerAnteil>
|
||||
<dienstgeberAnteil>0</dienstgeberAnteil>
|
||||
<traegergruppe>OEGK</traegergruppe>
|
||||
<vonDatum>2019-01-01</vonDatum>
|
||||
<bisDatum>2999-12-31</bisDatum>
|
||||
</tarif>
|
||||
<tarif xmlId="R007">
|
||||
<tarifZweig>IE</tarifZweig>
|
||||
<dienstnehmerAnteil>0</dienstnehmerAnteil>
|
||||
<dienstgeberAnteil>0.1</dienstgeberAnteil>
|
||||
<traegergruppe>OEGK</traegergruppe>
|
||||
<vonDatum>2019-01-01</vonDatum>
|
||||
<bisDatum>2999-12-31</bisDatum>
|
||||
</tarif>
|
||||
<tarif xmlId="R008">
|
||||
<tarifZweig>NB</tarifZweig>
|
||||
<dienstnehmerAnteil>0</dienstnehmerAnteil>
|
||||
<dienstgeberAnteil>3.8</dienstgeberAnteil>
|
||||
<traegergruppe>OEGK</traegergruppe>
|
||||
<vonDatum>2020-01-01</vonDatum>
|
||||
<bisDatum>2999-12-31</bisDatum>
|
||||
</tarif>
|
||||
</tarife>
|
||||
<tarifsets>
|
||||
<tarifset xmlId="S001">
|
||||
<bezeichnung>40/AK/AV/IE/KV/PV/UV/WF</bezeichnung>
|
||||
<kurzbezeichnung>40/AK/AV/IE/KV/PV/UV/WF</kurzbezeichnung>
|
||||
<traegergruppe>OEGK</traegergruppe>
|
||||
<vonDatum>2019-01-01</vonDatum>
|
||||
<bisDatum>2999-12-31</bisDatum>
|
||||
<tarife>R001</tarife>
|
||||
<tarife>R002</tarife>
|
||||
<tarife>R003</tarife>
|
||||
<tarife>R004</tarife>
|
||||
<tarife>R005</tarife>
|
||||
<tarife>R006</tarife>
|
||||
<tarife>R007</tarife>
|
||||
</tarifset>
|
||||
<tarifset xmlId="S002">
|
||||
<bezeichnung>47/AV/IE/KV/PV/UV</bezeichnung>
|
||||
<kurzbezeichnung>47/AV/IE/KV/PV/UV</kurzbezeichnung>
|
||||
<traegergruppe>OEGK</traegergruppe>
|
||||
<vonDatum>2019-01-01</vonDatum>
|
||||
<bisDatum>2999-12-31</bisDatum>
|
||||
<tarife>R001</tarife>
|
||||
<tarife>R002</tarife>
|
||||
<tarife>R003</tarife>
|
||||
<tarife>R004</tarife>
|
||||
<tarife>R007</tarife>
|
||||
</tarifset>
|
||||
<tarifset xmlId="S003">
|
||||
<bezeichnung>40/AK/AV/IE/KV/PV/UV/WF/NB</bezeichnung>
|
||||
<kurzbezeichnung>40/AK/AV/IE/KV/PV/UV/WF/NB</kurzbezeichnung>
|
||||
<traegergruppe>OEGK</traegergruppe>
|
||||
<vonDatum>2019-01-01</vonDatum>
|
||||
<bisDatum>2999-12-31</bisDatum>
|
||||
<tarife>R001</tarife>
|
||||
<tarife>R002</tarife>
|
||||
<tarife>R003</tarife>
|
||||
<tarife>R004</tarife>
|
||||
<tarife>R005</tarife>
|
||||
<tarife>R006</tarife>
|
||||
<tarife>R007</tarife>
|
||||
<tarife>R008</tarife>
|
||||
</tarifset>
|
||||
</tarifsets>
|
||||
<verrechBasisTypen>
|
||||
<verrechBasisTyp xmlId="VBTAB"><code>AB</code><bezeichnung>Arbeitsbezug</bezeichnung><traegergruppe>OEGK</traegergruppe><vonDatum>2019-01-01</vonDatum><bisDatum>2999-12-31</bisDatum></verrechBasisTyp>
|
||||
<verrechBasisTyp xmlId="VBTSZ"><code>SZ</code><bezeichnung>Sonderzahlung</bezeichnung><traegergruppe>OEGK</traegergruppe><vonDatum>2019-01-01</vonDatum><bisDatum>2999-12-31</bisDatum></verrechBasisTyp>
|
||||
</verrechBasisTypen>
|
||||
<verrechPosTypen>
|
||||
<verrechPosTyp xmlId="VPT01"><code>T01</code><bezeichnung>Gesamtsatz laufend</bezeichnung><traegergruppe>OEGK</traegergruppe><vonDatum>2019-01-01</vonDatum><bisDatum>2999-12-31</bisDatum></verrechPosTyp>
|
||||
<verrechPosTyp xmlId="VPT02"><code>T02</code><bezeichnung>Gesamtsatz Sonderzahlung</bezeichnung><traegergruppe>OEGK</traegergruppe><vonDatum>2019-01-01</vonDatum><bisDatum>2999-12-31</bisDatum></verrechPosTyp>
|
||||
</verrechPosTypen>
|
||||
<verrechBasisPositionKombinationen>
|
||||
<verrechBasisPositionKombination xmlId="K01"><verrechnungBasisTyp>VBTAB</verrechnungBasisTyp><verrechnungPosTyp>VPT01</verrechnungPosTyp><traegergruppe>OEGK</traegergruppe><vonDatum>2019-01-01</vonDatum><bisDatum>2999-12-31</bisDatum></verrechBasisPositionKombination>
|
||||
<verrechBasisPositionKombination xmlId="K02"><verrechnungBasisTyp>VBTSZ</verrechnungBasisTyp><verrechnungPosTyp>VPT02</verrechnungPosTyp><traegergruppe>OEGK</traegergruppe><vonDatum>2019-01-01</vonDatum><bisDatum>2999-12-31</bisDatum></verrechBasisPositionKombination>
|
||||
</verrechBasisPositionKombinationen>
|
||||
<tarifgruppeSetZuordnungen>
|
||||
<tarifgruppeSetZuord xmlId="Z001"><tarifgruppe>T001</tarifgruppe><tarifset>S001</tarifset><verrechBasPosKombination>K01</verrechBasPosKombination><traegergruppe>OEGK</traegergruppe><vonDatum>2019-01-01</vonDatum><bisDatum>2999-12-31</bisDatum></tarifgruppeSetZuord>
|
||||
<tarifgruppeSetZuord xmlId="Z002"><tarifgruppe>T001</tarifgruppe><tarifset>S002</tarifset><verrechBasPosKombination>K02</verrechBasPosKombination><traegergruppe>OEGK</traegergruppe><vonDatum>2019-01-01</vonDatum><bisDatum>2999-12-31</bisDatum></tarifgruppeSetZuord>
|
||||
<tarifgruppeSetZuord xmlId="Z003"><tarifgruppe>T002</tarifgruppe><tarifset>S001</tarifset><verrechBasPosKombination>K01</verrechBasPosKombination><traegergruppe>OEGK</traegergruppe><vonDatum>2019-01-01</vonDatum><bisDatum>2999-12-31</bisDatum></tarifgruppeSetZuord>
|
||||
<tarifgruppeSetZuord xmlId="Z004"><tarifgruppe>T002</tarifgruppe><tarifset>S002</tarifset><verrechBasPosKombination>K02</verrechBasPosKombination><traegergruppe>OEGK</traegergruppe><vonDatum>2019-01-01</vonDatum><bisDatum>2999-12-31</bisDatum></tarifgruppeSetZuord>
|
||||
<tarifgruppeSetZuord xmlId="Z005"><tarifgruppe>T002E01</tarifgruppe><tarifset>S003</tarifset><verrechBasPosKombination>K01</verrechBasPosKombination><traegergruppe>OEGK</traegergruppe><vonDatum>2019-01-01</vonDatum><bisDatum>2999-12-31</bisDatum></tarifgruppeSetZuord>
|
||||
<tarifgruppeSetZuord xmlId="Z006"><tarifgruppe>T002E01</tarifgruppe><tarifset>S002</tarifset><verrechBasPosKombination>K02</verrechBasPosKombination><traegergruppe>OEGK</traegergruppe><vonDatum>2019-01-01</vonDatum><bisDatum>2999-12-31</bisDatum></tarifgruppeSetZuord>
|
||||
<tarifgruppeSetZuord xmlId="Z007"><tarifgruppe>T045</tarifgruppe><tarifset>S001</tarifset><verrechBasPosKombination>K01</verrechBasPosKombination><traegergruppe>OEGK</traegergruppe><vonDatum>2019-01-01</vonDatum><bisDatum>2999-12-31</bisDatum></tarifgruppeSetZuord>
|
||||
<tarifgruppeSetZuord xmlId="Z008"><tarifgruppe>T045</tarifgruppe><tarifset>S002</tarifset><verrechBasPosKombination>K02</verrechBasPosKombination><traegergruppe>OEGK</traegergruppe><vonDatum>2019-01-01</vonDatum><bisDatum>2999-12-31</bisDatum></tarifgruppeSetZuord>
|
||||
</tarifgruppeSetZuordnungen>
|
||||
<zuAbschlaege>
|
||||
<zuAbschlag xmlId="A09X">
|
||||
<code>A09</code>
|
||||
<bezeichnung>Entfall UV 60. Lj</bezeichnung>
|
||||
<kurzbezeichnung>UV 60</kurzbezeichnung>
|
||||
<zuabschlagkz>A</zuabschlagkz>
|
||||
<versicherungsRelevant>false</versicherungsRelevant>
|
||||
<traegergruppe>OEGK</traegergruppe>
|
||||
<vonDatum>2019-01-01</vonDatum>
|
||||
<bisDatum>2999-12-31</bisDatum>
|
||||
</zuAbschlag>
|
||||
</zuAbschlaege>
|
||||
<zuAbschlaegeSteuerung>
|
||||
<zuAbschlagSteuerung xmlId="A09S1">
|
||||
<zuAbschlag>A09X</zuAbschlag>
|
||||
<altersgrenzeMinJahr>60</altersgrenzeMinJahr>
|
||||
<traegergruppe>OEGK</traegergruppe>
|
||||
<vonDatum>2019-01-01</vonDatum>
|
||||
<bisDatum>2999-12-31</bisDatum>
|
||||
</zuAbschlagSteuerung>
|
||||
</zuAbschlaegeSteuerung>
|
||||
<zuAbschlagTarifsetZuordnungen>
|
||||
<zuAbschlagTarifsetZuord xmlId="AZ01">
|
||||
<zuAbschlag>A09X</zuAbschlag>
|
||||
<tarifsetByTarifsetId>S001</tarifsetByTarifsetId>
|
||||
<tarifgruppe>T001</tarifgruppe>
|
||||
<tarifgruppe>T002</tarifgruppe>
|
||||
<traegergruppe>OEGK</traegergruppe>
|
||||
<vonDatum>2019-01-01</vonDatum>
|
||||
<bisDatum>2999-12-31</bisDatum>
|
||||
</zuAbschlagTarifsetZuord>
|
||||
</zuAbschlagTarifsetZuordnungen>
|
||||
</tarifssystemlsh>
|
||||
"""
|
||||
|
||||
|
||||
@tagged('post_install', '-at_install')
|
||||
class TasyKatalogTest(TransactionCase):
|
||||
"""Katalog-Import (Fixture + Realexport) und Tarifgruppen-Auflösung."""
|
||||
|
||||
def _import(self, raw=None):
|
||||
import os
|
||||
if raw is None:
|
||||
path = os.path.join(os.path.dirname(__file__), *[
|
||||
'..', '..', '..', 'personalverrechnung', 'quellen',
|
||||
'TASY-LSWH-Export-20260324.xml'])
|
||||
if not os.path.exists(path):
|
||||
self.skipTest('TASY-Quelldatei nicht im Workingtree')
|
||||
with open(path, 'rb') as fh:
|
||||
raw = fh.read()
|
||||
wizard = self.env['l10n.at.payroll.tasy.katalog.wizard'].create({
|
||||
'file': base64.b64encode(raw).decode(),
|
||||
'filename': 'fixture.xml',
|
||||
})
|
||||
wizard.action_import()
|
||||
return wizard
|
||||
|
||||
def test_01_import_fixture_und_aufloesung(self):
|
||||
"""Import erzeugt den Katalog; B001/B002 lösen zu den
|
||||
normativen Normalbetriebe-Sätzen auf (AB 39,05, SZ 37,55)."""
|
||||
self._import(TASY_KATALOG_FIXTURE.encode())
|
||||
self.assertEqual(
|
||||
self.env['l10n.at.payroll.tasy.bsgr'].search_count([]), 5)
|
||||
self.assertEqual(
|
||||
self.env['l10n.at.payroll.tasy.ergaenzung'].search_count([]),
|
||||
1)
|
||||
self.assertEqual(
|
||||
self.env['l10n.at.payroll.tasy.dienstgebergruppe']
|
||||
.search_count([]), 2)
|
||||
self.assertEqual(
|
||||
self.env['l10n.at.payroll.tasy.tarifgruppe'].search_count([]),
|
||||
4)
|
||||
self.assertEqual(
|
||||
self.env['l10n.at.payroll.tasy.tarifset'].search_count([]), 3)
|
||||
self.assertEqual(
|
||||
self.env['l10n.at.payroll.tasy.tarifset.zuord']
|
||||
.search_count([]), 8)
|
||||
stichtag = date(2026, 7, 1)
|
||||
for code in ('B001', 'B002'):
|
||||
tarifgruppe = self.env[
|
||||
'l10n.at.payroll.tasy.tarifgruppe']._l10n_at_find(
|
||||
code, [], 'NBALG', stichtag)
|
||||
self.assertTrue(tarifgruppe, code)
|
||||
ab = tarifgruppe._l10n_at_saetze('AB', stichtag)
|
||||
sz = tarifgruppe._l10n_at_saetze('SZ', stichtag)
|
||||
self.assertAlmostEqual(ab['gesamt'], 39.05, places=2)
|
||||
self.assertAlmostEqual(ab['dn'], 18.07, places=2)
|
||||
self.assertAlmostEqual(ab['dg'], 20.98, places=2)
|
||||
self.assertAlmostEqual(sz['gesamt'], 37.55, places=2)
|
||||
|
||||
def test_02_import_idempotent(self):
|
||||
"""Erneuter Import derselben Datei dupliziert nichts."""
|
||||
self._import(TASY_KATALOG_FIXTURE.encode())
|
||||
self._import(TASY_KATALOG_FIXTURE.encode())
|
||||
self.assertEqual(
|
||||
self.env['l10n.at.payroll.tasy.tarifgruppe'].search_count([]),
|
||||
4)
|
||||
self.assertEqual(
|
||||
self.env['l10n.at.payroll.tasy.tarif'].search_count([]), 8)
|
||||
self.assertEqual(
|
||||
self.env['l10n.at.payroll.tasy.tarifset.zuord']
|
||||
.search_count([]), 8)
|
||||
|
||||
def test_03_ergaenzung_e01(self):
|
||||
"""B002 + E01 + NBNSA → T01 inkl. NB-Zweig 3,80 % DG
|
||||
(42,85 %); ohne Ergänzung unter NBNSA keine Tarifgruppe."""
|
||||
self._import(TASY_KATALOG_FIXTURE.encode())
|
||||
stichtag = date(2026, 7, 1)
|
||||
find = self.env['l10n.at.payroll.tasy.tarifgruppe']._l10n_at_find
|
||||
# B002 + E01 unter NBALG existiert nicht (E01 gehört zu NBNSA)
|
||||
self.assertFalse(find('B002', ['E01'], 'NBALG', stichtag))
|
||||
tarifgruppe = find('B002', ['E01'], 'NBNSA', stichtag)
|
||||
self.assertTrue(tarifgruppe)
|
||||
ab = tarifgruppe._l10n_at_saetze('AB', stichtag)
|
||||
self.assertAlmostEqual(ab['gesamt'], 42.85, places=2)
|
||||
zweige = {t.zweig for t in ab['komponenten']}
|
||||
self.assertIn('NB', zweige)
|
||||
# SZ ohne NB (Sonderzahlungen tragen keinen NSchAB)
|
||||
sz = tarifgruppe._l10n_at_saetze('SZ', stichtag)
|
||||
self.assertAlmostEqual(sz['gesamt'], 37.55, places=2)
|
||||
|
||||
def test_04_lehrlings_bsg(self):
|
||||
"""B045 (Arbeiterlehrlinge) ist auflösbar — die
|
||||
Lehrlings-BSGR-Korrektur beruht auf diesen Bezeichnern."""
|
||||
self._import(TASY_KATALOG_FIXTURE.encode())
|
||||
stichtag = date(2026, 7, 1)
|
||||
b044 = self.env['l10n.at.payroll.tasy.bsgr'].search([
|
||||
('code', '=', 'B044')])
|
||||
b045 = self.env['l10n.at.payroll.tasy.bsgr'].search([
|
||||
('code', '=', 'B045')])
|
||||
self.assertEqual(b044.bezeichnung, 'Angestelltenlehrlinge')
|
||||
self.assertEqual(b045.bezeichnung, 'Arbeiterlehrlinge')
|
||||
tarifgruppe = self.env[
|
||||
'l10n.at.payroll.tasy.tarifgruppe']._l10n_at_find(
|
||||
'B045', [], 'NBALG', stichtag)
|
||||
self.assertTrue(tarifgruppe)
|
||||
|
||||
def test_05_real_export(self):
|
||||
"""Echter TASY-LSWH-Export: Katalog-Volumen und die
|
||||
normativen 2026er Sätze aus der Katalogauflösung."""
|
||||
self._import()
|
||||
stichtag = date(2026, 7, 1)
|
||||
find = self.env['l10n.at.payroll.tasy.tarifgruppe']._l10n_at_find
|
||||
for code in ('B001', 'B002'):
|
||||
tarifgruppe = find(code, [], 'NBALG', stichtag)
|
||||
self.assertTrue(tarifgruppe, code)
|
||||
ab = tarifgruppe._l10n_at_saetze('AB', stichtag)
|
||||
sz = tarifgruppe._l10n_at_saetze('SZ', stichtag)
|
||||
self.assertAlmostEqual(ab['gesamt'], 39.05, places=2)
|
||||
self.assertAlmostEqual(sz['gesamt'], 37.55, places=2)
|
||||
# Lehrlings-BSGR-Bezeichner (Korrektur-Grundlage)
|
||||
self.assertEqual(self.env['l10n.at.payroll.tasy.bsgr'].search([
|
||||
('code', '=', 'B044')]).bezeichnung, 'Angestelltenlehrlinge')
|
||||
self.assertEqual(self.env['l10n.at.payroll.tasy.bsgr'].search([
|
||||
('code', '=', 'B045')]).bezeichnung, 'Arbeiterlehrlinge')
|
||||
# Geringfügige je Personalgruppe
|
||||
self.assertEqual(self.env['l10n.at.payroll.tasy.bsgr'].search([
|
||||
('code', '=', 'B010')]).bezeichnung,
|
||||
'Geringfügig beschäftigte Arbeiter')
|
||||
# Ergänzungen sind im Katalog
|
||||
self.assertTrue(self.env['l10n.at.payroll.tasy.ergaenzung'].search([
|
||||
('code', '=', 'E01')]))
|
||||
Reference in New Issue
Block a user