# Telearbeit 2025 / Telework 2025 — kostenlose historische Offline-Fixture

## Deutsch (Primärfassung)

**Umfang:** EStG 1988 § 26 Z 9 lit. a, RIS-Fassung vom 31.12.2024
(NOR40265473), gegenüber dem kundgemachten Ersatztext in BGBl. I Nr. 110/2024,
Art. 8 Z 3. Die §-26-Fassung vom 10.10.2024 bis 31.12.2024 bezeichnet nicht
die Einführung des Pauschales. Art. 8 Z 6 (§ 124b Z 453) ist vollständig
zitiert. AVRAG § 2h Abs. 1–2 sind ausdrücklich nur Kontextauszüge.

Speichern Sie diese zwei Dateien im selben Ordner, mit unveränderten Namen:

- [verify_telework_2025.py](verify_telework_2025.py)
- [telework-2025.fixture.json](telework-2025.fixture.json)

Python **3.9+**, ausschließlich Standardbibliothek. Keine Installation, Konten,
Zahlungen, Netzabfragen oder RIS-Parser. Der Verifier schreibt keine Dateien.

```sh
python3 verify_telework_2025.py
python3 verify_telework_2025.py --diff
python3 verify_telework_2025.py --payroll-period-end 2024-12-31
python3 verify_telework_2025.py --payroll-period-end 2025-01-01 --assessment-year 2025
# Optional: dasselbe Vergleichs-JSON an einem anderen lokalen Pfad prüfen
python3 verify_telework_2025.py --fixture telework-2025.fixture.json
```

Ohne `--diff`: JSON auf stdout. Mit `--diff`: zuerst JSON, danach Unified Diff
beider vollständiger deutscher Gesetzestexte. Der Umbruch im Diff dient nur der
Lesbarkeit. Exitcode **0**: geprüfte Fixture; **2**: ungültige Eingabe oder
veränderte Fixture (Fehler auf stderr). Keine Zahlungs-/Anfragezeit wird gelesen.

Jeder erfolgreiche Aufruf prüft die historische Regression:

| Eingabe: Ende des Lohnzahlungszeitraums | `historical_side` | `crosses_amendment_boundary` |
| --- | --- | --- |
| `2024-12-31` | `before` | `false` |
| `2025-01-01` | `after` | `true` |

Für einen über den Jahreswechsel laufenden Zeitraum ist ebenfalls nur das Ende
maßgeblich. Das Inkrafttreten ist gesondert `2025-01-01`; das erste
Veranlagungskalenderjahr ist `2025`. `--assessment-year` meldet zusätzlich, ob
die Eingabe genau dieses erste Jahr ist. Spätere Jahreszahlen überschreiten
nur die historische Grenze; der Test bescheinigt keine spätere Rechtslage.

**Unverändert:** bis zu EUR 3 pro qualifiziertem Tag, höchstens 100 Tage,
Kalenderjahr. **Geändert:** Bezeichnung und Tagesdefinition/Verweis.
**Im verglichenen Text hinzugefügt:** Ausweisbedingung (Tage samt ausbezahltem
Pauschale im Lohnzettel bzw. in der Lohnbescheinigung) und der Satz zu sämtlichen
Dienstverhältnissen gemäß § 47 Abs. 2, sofern die Kriterien gemäß § 2h AVRAG
vorliegen. Der alte Wert ist jeweils `not_express_in_compared_text`, niemals
`required: false`. Daraus folgen weder das Fehlen alter Meldepflichten noch
früher ausgeschlossene Beschäftigtengruppen.

### JSON-Vertrag und Belegprüfung

Die Fixture ist eine inhaltsgleiche Offline-Kopie von
[Vergleichs-JSON](../api/v1/comparisons/at-bgbl-i-2024-110-estg-26-9a.json).
`schema_version: "1.0"` und `comparison_id` identifizieren **eine** festgelegte
historische Fixture, kein allgemeines Gesetzesmodell.

- `/texts`: vollständige lit. a vorher/nachher, vollständige Anwendungsbestimmung,
  ausdrücklich gekennzeichnete AVRAG-Kontextauszüge; deutsche Originale mit
  vereinheitlichten Layout-Leerzeichen, ohne äußere Zitat-/Gliederungszeichen.
- `/fields`: `classification`, `before`, `after` und Belege je Seite.
- `evidence.text_pointer`: JSON-Zeiger auf den Originaltext. `quote` muss darin
  vorkommen. Bei `not_express_in_compared_text` verweist
  `basis: "entire_compared_text"` bewusst auf die gesamte alte lit. a.
- Jeder Text hat `source_pointer` und `locator`. `/sources` enthält amtliche
  URLs, Fundstellen, Abrufzeiten, SHA-256 der archivierten Originaldateien und
  Dateinamen/Zeilen der verwendeten lokalen Extrakte (keine Download-URLs).
- `/application`: getrennte Werte und Belege für Inkrafttreten, erstes
  Veranlagungskalenderjahr und **strictly_after**-Grenze des Periodenendes.
- `/scope` und `/boundary_cases`: maschinenlesbare Grenzen und Regression.

`validate()` prüft semantische Invarianten und anschließend die eingebettete
SHA-256 des kanonisierten ganzen Dokuments: UTF-8,
`json.dumps(data, ensure_ascii=False, sort_keys=True, separators=(",", ":"), allow_nan=False)`.
JSON-Einrückung und Schlüsselreihenfolge dürfen sich ändern; Inhalte,
Datentypen und unbekannte Felder nicht. Doppelte Schlüssel, NaN/Infinity,
ungültiges UTF-8 und Dateien über 100.000 Byte werden zurückgewiesen.
Datumsangaben müssen echte ISO-Kalendertage `YYYY-MM-DD` sein (kein Zeitstempel,
kein kompaktes Datum, keine ISO-Woche). Jahre müssen 1 bis 9999 sein.

**Keine unabhängige Quellen-Authentifizierung:** Die Prüfsumme erkennt Drift
der ausgelieferten Fixture; sie ist keine Signatur und kein erneuter RIS-Abruf.
Die vollständigen HTML-/PDF-Originale sind nicht im Download enthalten. Amtliche
Quellen sind verlinkt; bei Rechtsfragen sind sie maßgeblich.

**Nur historisch:** Der Selektor ist ein Grenzprädikat dieser Novelle, keine
Zusage, dass der Vorher-Text für beliebige frühere oder der Nachher-Text für
beliebige spätere Zeiträume gilt. Keine aktuelle Rechtslage, individuelle
Anspruchsprüfung oder Steuerberechnung; kein vollständiger § 26, keine
ASVG-Ortskategorien oder Gesamtgesetz-Gegenüberstellung. Lit. b wurde gesondert
in Art. 8 Z 4 geändert und ist ausgeschlossen. Keine Rechtsberatung.

[Deutsche Vergleichsseite](../vergleich/telearbeit-2025.html) ·
[English comparison](../en/comparisons/telework-2025.html) ·
[Bestehender Nachweis](../ereignisse/bgbl-i-110-2024.html) ·
[API-Leitfaden](../api-guide.html)

Diese Ergänzung ist kostenlos und kein viertes Ereignis (weiterhin drei
Kundmachungsereignisse). Sie gehört **nicht** zum unveränderten kostenpflichtigen
0.05-USDC-Endpunkt mit vier Operationen für einen Datensatz.

## English (editorial explanation; German quotations are originals)

Use the two downloads and CLI commands above with Python **3.9+**. No third-party
packages, network, RIS parsing, accounts, API key or payment. The verifier is
read-only. Without `--diff`, stdout is JSON; `--diff` appends a German unified
text diff. Exit **0** is success; exit **2** is invalid input/fixture, with an
error on stderr. `--fixture PATH` accepts a local copy of the same pinned JSON.

The old text is EStG § 26 Z 9 lit. a as of **2024-12-31**, NOR40265473. Its
paragraph-version interval **2024-10-10..2024-12-31** is not the allowance's
introduction date. The after text is the **promulgated replacement**, Art. 8 Z 3
of BGBl. I Nr. 110/2024, not current consolidation. Both lit. a texts and the
complete Art. 8 Z 6 application provision are quoted in German. AVRAG § 2h
Abs. 1–2 excerpts are context, not all of § 2h. English explanations and machine
values are editorial, not official translations.

EUR **3**, the **100-day** cap and **calendar-year** period are `unchanged`.
Designation and day definition/reference are `changed`. The reporting sentence
(days plus paid allowance shown in the Lohnzettel or Lohnbescheinigung) and the
sentence covering all § 47 Abs. 2 employment relationships if § 2h AVRAG criteria
are met are `added_in_compared_text`. Their old value is
`not_express_in_compared_text`: **not** false, no claim of absent former reporting
duties, and no claim of previously excluded employee groups.

The effective date is **2025-01-01**; first assessment is **calendar year 2025**.
The payroll predicate is based on periods **ending after 2024-12-31**.
An end of **2024-12-31** returns `before`/`false`; **2025-01-01** returns
`after`/`true`. Every successful invocation runs both regression cases. Periods
spanning New Year also use only their end. Payment date, request timestamp and
publication date are never substituted. `--assessment-year` also reports
whether the input is exactly the first assessment year.

This is a **historical boundary predicate only**, not certification that the
before/after quotation applies to every earlier/later period or current law.
No individual eligibility or tax calculation; no whole-Act, complete §-26 or
ASVG location-category comparison. Lit. b was separately amended in Art. 8 Z 4
and is excluded. Official sources remain authoritative; not legal advice.

The offline fixture is identical to the comparison JSON. The contract is one
version-pinned fixture, not a general schema. Field evidence uses local JSON
pointers to German quotations, then source pointers to official URLs, locators,
retrieval times, archived-source hashes and extraction filenames/line ranges.
Absence-in-text evidence refers to the entire compared old text. The verifier
checks invariants, evidence and a canonical whole-document SHA-256 using the
serialization shown above. Whitespace/key order may change; content/types and
unknown fields may not. Duplicate keys, non-finite JSON numbers, invalid UTF-8,
files over 100,000 bytes, impossible/non-ISO dates and years outside 1..9999 fail.

The hash detects fixture drift, **not independent official-source authenticity**.
Full RIS originals are not bundled; extraction filenames are provenance, not
download URLs. No later-amendment check is performed. The comparison is free,
supplements the existing proof and does not create a fourth event (count stays
three). It is **not included** in the unchanged **0.05 USDC** paid endpoint's
four-operation, one-record deliverable.

[English proof](../en/events/bgbl-i-110-2024.html) ·
[English API guide](../en/api-guide.html)
