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: GP8 Fristenkalender, Jahres-Retro, Mitteilungsfile-Import, 2027-Parameter-Rahmen
Fristenkalender (models/fristenkalender.py — l10n.at.payroll.frist): alle lohnverrechnungsrelevanten Melde- und Zahlungsfristen je Company und Jahr (kuratiert: lb-sva-11, lb-mel-08, lb-lvr-04/05): SV/mBGM 15. Folgemonat (Gutschriftprinzip, Respirofrist 3 Tage, Verzugszinsen ab Tag 16), DB/DZ/KommSt 15. Folgemonat, KommSt-Jahreserklärung Ende Maerz, Lohnzettel L16 + Arbeitsstaettenmeldung + §-109a Ende Februar, Schwerarbeitsmeldung Ende Februar (blockiert, ASchV-Datenmodell fehlt). Auto-Erzeugung per ir.cron monatlich am 1. (SV/DB/DZ/KommSt) + jaehrlich am 1. Jaenner (Jahresfristen). Ueberfaellig-Faerbung + Sprungaktion zur GP7-Deklaration (L16; mBGM-Verlinkung im Privatmodul via fristen_private.py).
Jahres-Retro-/Aufrollungslauf (models/jahresretro.py — Wizard l10n.at.payroll.jahresretro.wizard): Kontrollsechstel-Verpflichtungslauf § 67 Abs 10 EStG (Pruefung je AN auf SZ-Ueberhang und Guenstig-Vergleich Fixsaetze vs. Tarif; Handlungsempfehlung fuer die Odoo-Korrektur-Pipeline: Refund-Payslips + Neuberechnung). Optional §-77-Abs-3/4-Aufrollung (15.-Jaenner-Grenze; Krankengeld-Blocker). SV-Aufrollung rollt auf den Beitragsmonat (GP4-Beitragsmonat); mBGM-Storno als Folgeaktion (GP7 art=ST).
Mitteilungsfile-Import (models/mitteilungsfile.py — Wizard): ELDA-Rueckantwort-XML (mitteilung_{Protokollnummer}.xml) parsen, Fehler/Warnungen lesbar aufbereiten; XSDs lokal beschafft (.firecrawl/ris/elda/). Dateibasiert (Praemisse P7): Upload durch den Mandanten.
2027-Parameter-Rahmen (data/rule_parameters_2027.xml): NUR Struktur (WF-Vektor-Default + AV-Staffel tiers=[] da § 2a AMPFG aufgehoben BGBl I 62/2026). KEINE Werte aus Trainingswissen — der Wartungszyklus beschafft die offiziellen 2027-Werte.
B14-laengster-Urlaubs-Teil: verifiziert — aktuelle Implementierung ist praktisch korrekt (erster Urlaubsmonat, _at_sz_bereits_bezahlt gegen Doppelauszahlung); mehrmonatig gesplittete Urlaube sind ein Randfall mit vorwaertsblickenden Planungsdaten, dokumentiert ohne Code-Fix.
Tests: test_gp8 (6 — Frist-Definitionen, Cron-Idempotenz, Ueberfaellig-Logik, Mitteilungsfile-Parser, Import-ohne-Datei-UserError, Jahresretro-ohne-Daten). 100/100 gruen (Wegwerf-DB). 19.0.5.0.0.
This commit is contained in:
@@ -0,0 +1,191 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<!-- ============================================================ -->
|
||||
<!-- GP8: Fristenkalender + Jahres-Retro + Mitteilungsfile-Import. -->
|
||||
<!-- ============================================================ -->
|
||||
|
||||
<record id="frist_list_view" model="ir.ui.view">
|
||||
<field name="name">l10n.at.payroll.frist.list</field>
|
||||
<field name="model">l10n.at.payroll.frist</field>
|
||||
<field name="arch" type="xml">
|
||||
<list string="Fristenkalender" default_order="deadline">
|
||||
<field name="deadline"/>
|
||||
<field name="fristart"/>
|
||||
<field name="jahr"/>
|
||||
<field name="monat" optional="hide"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<field name="state" widget="badge"
|
||||
decoration-success="state == 'erledigt'"
|
||||
decoration-warning="state == 'offen'"
|
||||
decoration-danger="state == 'ueberfaellig'"/>
|
||||
<button name="action_erledigt" type="object"
|
||||
icon="fa-check" string="Erledigt"
|
||||
invisible="state == 'erledigt'"/>
|
||||
<button name="action_zum_objekt" type="object"
|
||||
icon="fa-arrow-right" string="Zur Meldung"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="frist_form_view" model="ir.ui.view">
|
||||
<field name="name">l10n.at.payroll.frist.form</field>
|
||||
<field name="model">l10n.at.payroll.frist</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Frist">
|
||||
<sheet>
|
||||
<group>
|
||||
<group>
|
||||
<field name="fristart"/>
|
||||
<field name="jahr"/>
|
||||
<field name="monat"/>
|
||||
<field name="deadline"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="company_id"
|
||||
groups="base.group_multi_company"/>
|
||||
<field name="state" widget="badge"/>
|
||||
<field name="erledigt_am"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page string="Hinweis" name="hinweis">
|
||||
<field name="hilfetext"/>
|
||||
</page>
|
||||
<page string="Meldungsobjekt" name="objekt">
|
||||
<group>
|
||||
<field name="ref_l16_id"/>
|
||||
</group>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
<header>
|
||||
<button name="action_erledigt" type="object"
|
||||
string="Als erledigt markieren"
|
||||
invisible="state == 'erledigt'"/>
|
||||
<button name="action_wieder_eroeffnen" type="object"
|
||||
string="Wieder eröffnen"
|
||||
invisible="state != 'erledigt'"/>
|
||||
</header>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_frist" model="ir.actions.act_window">
|
||||
<field name="name">Fristenkalender</field>
|
||||
<field name="res_model">l10n.at.payroll.frist</field>
|
||||
<field name="view_mode">list,form</field>
|
||||
<field name="context">{'search_default_state': 'offen'}</field>
|
||||
</record>
|
||||
|
||||
<!-- Jahres-Retro-Wizard -->
|
||||
<record id="jahresretro_wizard_form_view" model="ir.ui.view">
|
||||
<field name="name">l10n.at.payroll.jahresretro.wizard.form</field>
|
||||
<field name="model">l10n.at.payroll.jahresretro.wizard</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Jahres-Retro-/Aufrollungslauf">
|
||||
<group>
|
||||
<group>
|
||||
<field name="jahr"/>
|
||||
<field name="company_id"
|
||||
groups="base.group_multi_company"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="nur_kontrollsechstel"/>
|
||||
<field name="aufrollung_77"/>
|
||||
<field name="zeige_detail"/>
|
||||
</group>
|
||||
</group>
|
||||
<footer>
|
||||
<button name="action_pruefen" type="object"
|
||||
string="Jahresdaten prüfen" class="btn-primary"/>
|
||||
<button string="Schließen" class="btn-secondary"
|
||||
special="cancel"/>
|
||||
</footer>
|
||||
<notebook invisible="not zeige_detail">
|
||||
<page string="Prüfergebnis" name="ergebnis">
|
||||
<field name="ergebnis_ids">
|
||||
<list create="0" delete="0">
|
||||
<field name="employee_id"/>
|
||||
<field name="kontrollsechstel_ueberhang"/>
|
||||
<field name="fixsatz_steuer"/>
|
||||
<field name="tarif_steuer"/>
|
||||
<field name="guenstig" widget="badge"
|
||||
decoration-success="guenstig"
|
||||
decoration-danger="not guenstig"/>
|
||||
<field name="handlung"/>
|
||||
</list>
|
||||
</field>
|
||||
</page>
|
||||
<page string="Zusammenfassung" name="zusammenfassung">
|
||||
<field name="zusammenfassung"/>
|
||||
</page>
|
||||
</notebook>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_jahresretro_wizard" model="ir.actions.act_window">
|
||||
<field name="name">Jahres-Retro-/Aufrollungslauf</field>
|
||||
<field name="res_model">l10n.at.payroll.jahresretro.wizard</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
<!-- Mitteilungsfile-Import -->
|
||||
<record id="mitteilungsfile_wizard_form_view" model="ir.ui.view">
|
||||
<field name="name">l10n.at.payroll.mitteilungsfile.wizard.form</field>
|
||||
<field name="model">l10n.at.payroll.mitteilungsfile.wizard</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="ELDA-Mitteilungsfile importieren">
|
||||
<group>
|
||||
<field name="company_id"
|
||||
groups="base.group_multi_company"/>
|
||||
<field name="datei" filename="datei_name"/>
|
||||
<field name="datei_name" invisible="1"/>
|
||||
</group>
|
||||
<footer>
|
||||
<button name="action_importieren" type="object"
|
||||
string="Importieren" class="btn-primary"/>
|
||||
<button string="Schließen" class="btn-secondary"
|
||||
special="cancel"/>
|
||||
</footer>
|
||||
<field name="protokoll" invisible="not protokoll"/>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_mitteilungsfile_wizard" model="ir.actions.act_window">
|
||||
<field name="name">ELDA-Mitteilungsfile importieren</field>
|
||||
<field name="res_model">l10n.at.payroll.mitteilungsfile.wizard</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
<!-- Cron: Fristen monatlich/jährlich erzeugen -->
|
||||
<record id="ir_cron_fristen_erzeugen" model="ir.cron">
|
||||
<field name="name">L10n AT Payroll: Fristenkalender pflegen</field>
|
||||
<field name="model_id" ref="model_l10n_at_payroll_frist"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">model._cron_fristen_erzeugen()</field>
|
||||
<field name="interval_number">1</field>
|
||||
<field name="interval_type">months</field>
|
||||
<field name="nextcall">2026-10-01 02:00:00</field>
|
||||
<field name="active" eval="True"/>
|
||||
</record>
|
||||
|
||||
<!-- Menüs -->
|
||||
<menuitem id="menu_l10n_at_payroll_fristen"
|
||||
name="Fristenkalender"
|
||||
parent="menu_l10n_at_payroll_meldewesen"
|
||||
action="action_frist" sequence="5"/>
|
||||
|
||||
<menuitem id="menu_l10n_at_payroll_jahresretro"
|
||||
name="Jahres-Retro-/Aufrollungslauf"
|
||||
parent="menu_l10n_at_payroll_meldewesen"
|
||||
action="action_jahresretro_wizard" sequence="20"/>
|
||||
|
||||
<menuitem id="menu_l10n_at_payroll_mitteilungsfile"
|
||||
name="Mitteilungsfile-Import"
|
||||
parent="menu_l10n_at_payroll_meldewesen"
|
||||
action="action_mitteilungsfile_wizard" sequence="30"/>
|
||||
</odoo>
|
||||
Reference in New Issue
Block a user