Files
odoo-at-payroll/addons/l10n_at_hr_payroll/views/fristen_views.xml
T
fegger c843701d1a [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.
2026-09-12 19:58:53 +02:00

191 lines
8.4 KiB
XML

<?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>