mirror of
http://100.103.83.12:3003/fegger/odoo-at-payroll.git
synced 2026-09-17 16:56:42 +00:00
[IMP] l10n_at_gemeinde_payroll: implement SV value layer (AP4) from OEGK TASY
SV-Werte-Implementierung nach dem freigegebenen TASY-Plan (PLAN-TASY-SV-Import):
- hr.rule.parameter-Seed 2026 (20 Parameter, generator-erzeugt aus dem
ÖGK TASY-LSWH-Export, Stichtag 2026-07-01): Geringfügigkeit 551,10 EUR
(GFGBTG, ab 2025 — Aufwertungsaussetzung korrekt abgebildet), HBG
monatlich 6.930 EUR (HBGALLG tgl. x 30), HBG SZ 13.860 EUR, KV
3,87/3,78, PV 10,25/12,55, AV 2,95/2,95, UV 0/1,10, IESG 0/0,10,
BV 1,53, AK/WF geführt, § 2a AMPFG-Staffel aus dem SV-Werte-Report.
Generator mit Herkunftsnachweis + Erwartungswert-Ankern
(personalverrechnung/tools/gen_sv_parameters_2026.py, Exit 1 bei
Abweichung von den offiziellen Ankern).
- TASY-Quelldatei committet (personalverrechnung/quellen/, 5 MB —
öffentliches Tarifdatenmaterial ohne Personendaten) für Seed- und
Testreproduzierbarkeit.
- Deklarative TASY-Mapping-Tabelle (gemeinde.payroll.tasy.mapping,
data XML): bbb-Codes (Cent, Faktor z. B. x 30) und Tarifzweige
(_dn/_dg-Suffix-Konvention) — keine festen Werte im Code.
- Import-Wizard (TransientModel, lxml safe parsing):
Beschaeftigtengruppe B002 ("Angestellte") -> Tarifgruppe ->
tarifgruppeSetZuord -> Tarifset -> Tarif; bei Varianten gewinnt die
Split-Variante (DN>0 und DG>0), dann die einseitige DG-Variante (UV/BV);
freie-DN-Varianten verlieren. Preview mit Delta, Sprungwarnung > 10 %,
Warnzeilen werden nie automatisch übernommen; Schreiben versionierter
hr.rule.parameter.value-Sätze erst nach expliziter Bestätigung.
- Tests (4 Suiten): Seed-Werte am Stichtag, Fixture-Parser
(Split-Präferenz, Cent-Rechnung), Versionsverhalten (Update statt
Duplikat), Echtdaten-Test gegen den 5-MB-Export (Auflösung == Seed,
keine Warnzeilen).
- Security/Views/Menüs für Mapping + Wizard; Modul-Version 19.0.1.2.0.
Statische Validierung grün (py_compile, XML, Manifest); Runtime-Testlauf
auf dem Dev-Host ausständig.
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="tasy_mapping_list_view" model="ir.ui.view">
|
||||
<field name="name">gemeinde.payroll.tasy.mapping.list</field>
|
||||
<field name="model">gemeinde.payroll.tasy.mapping</field>
|
||||
<field name="arch" type="xml">
|
||||
<list string="TASY-Mappings">
|
||||
<field name="tasy_art"/>
|
||||
<field name="tasy_code"/>
|
||||
<field name="parameter_code"/>
|
||||
<field name="cent_werte"/>
|
||||
<field name="faktor"/>
|
||||
<field name="active" widget="boolean_toggle"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="tasy_mapping_form_view" model="ir.ui.view">
|
||||
<field name="name">gemeinde.payroll.tasy.mapping.form</field>
|
||||
<field name="model">gemeinde.payroll.tasy.mapping</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="TASY-Mapping">
|
||||
<sheet>
|
||||
<group>
|
||||
<group>
|
||||
<field name="tasy_art"/>
|
||||
<field name="tasy_code"/>
|
||||
<field name="parameter_code"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="cent_werte" invisible="tasy_art != 'bbb'"/>
|
||||
<field name="faktor" invisible="tasy_art != 'bbb'"/>
|
||||
<field name="active" widget="boolean_toggle"/>
|
||||
</group>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_tasy_mapping" model="ir.actions.act_window">
|
||||
<field name="name">TASY-Mappings (SV-Werte)</field>
|
||||
<field name="res_model">gemeinde.payroll.tasy.mapping</field>
|
||||
<field name="view_mode">list,form</field>
|
||||
</record>
|
||||
|
||||
<record id="tasy_import_wizard_form_view" model="ir.ui.view">
|
||||
<field name="name">gemeinde.payroll.tasy.import.wizard.form</field>
|
||||
<field name="model">gemeinde.payroll.tasy.import.wizard</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="SV-Werte aus TASY-LSWH-Export importieren">
|
||||
<group>
|
||||
<field name="file" filename="filename"/>
|
||||
<field name="filename" invisible="1"/>
|
||||
<field name="beschaeftigtengruppe_code"/>
|
||||
<field name="stichtag" readonly="1"/>
|
||||
</group>
|
||||
<notebook>
|
||||
<page string="Vorschau" name="vorschau">
|
||||
<field name="line_ids">
|
||||
<list editable="bottom" create="0" delete="0">
|
||||
<field name="uebernehmen" widget="boolean_toggle"/>
|
||||
<field name="parameter_code"/>
|
||||
<field name="name"/>
|
||||
<field name="alter_wert"/>
|
||||
<field name="neuer_wert"/>
|
||||
<field name="date_from"/>
|
||||
<field name="warnung"
|
||||
decoration-danger="warnung"/>
|
||||
</list>
|
||||
</field>
|
||||
</page>
|
||||
<page string="Protokoll" name="protokoll">
|
||||
<field name="protocol"/>
|
||||
</page>
|
||||
</notebook>
|
||||
<footer>
|
||||
<button string="1) Datei analysieren" name="action_parse"
|
||||
type="object" class="btn-secondary"/>
|
||||
<button string="2) Ausgewählte Werte übernehmen"
|
||||
name="action_apply" type="object"
|
||||
class="btn-primary" invisible="not line_ids"/>
|
||||
<button string="Abbrechen" class="btn-secondary"
|
||||
special="cancel"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_tasy_import_wizard" model="ir.actions.act_window">
|
||||
<field name="name">SV-Werte importieren (TASY)</field>
|
||||
<field name="res_model">gemeinde.payroll.tasy.import.wizard</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_gemeinde_payroll_tasy_mapping"
|
||||
name="TASY-Mappings (SV-Werte)"
|
||||
parent="menu_gemeinde_payroll_root"
|
||||
action="action_tasy_mapping" sequence="40"/>
|
||||
|
||||
<menuitem id="menu_gemeinde_payroll_tasy_import"
|
||||
name="SV-Werte importieren (TASY)"
|
||||
parent="menu_gemeinde_payroll_root"
|
||||
action="action_tasy_import_wizard" sequence="50"/>
|
||||
</odoo>
|
||||
Reference in New Issue
Block a user