lohnsteuer-bmf 2026.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- lohnsteuer_bmf-2026.0/.gitignore +29 -0
- lohnsteuer_bmf-2026.0/CHANGELOG.md +17 -0
- lohnsteuer_bmf-2026.0/LICENSE +21 -0
- lohnsteuer_bmf-2026.0/PKG-INFO +181 -0
- lohnsteuer_bmf-2026.0/README.md +150 -0
- lohnsteuer_bmf-2026.0/examples/einkommensteuer_tarif.py +27 -0
- lohnsteuer_bmf-2026.0/examples/lohnsteuer_quickstart.py +25 -0
- lohnsteuer_bmf-2026.0/pyproject.toml +88 -0
- lohnsteuer_bmf-2026.0/src/lohnsteuer_bmf/__init__.py +58 -0
- lohnsteuer_bmf-2026.0/src/lohnsteuer_bmf/_data.py +236 -0
- lohnsteuer_bmf-2026.0/src/lohnsteuer_bmf/einkommensteuer.py +247 -0
- lohnsteuer_bmf-2026.0/src/lohnsteuer_bmf/konstanten.py +101 -0
- lohnsteuer_bmf-2026.0/src/lohnsteuer_bmf/lohnsteuer.py +294 -0
- lohnsteuer_bmf-2026.0/src/lohnsteuer_bmf/py.typed +0 -0
- lohnsteuer_bmf-2026.0/src/lohnsteuer_bmf/tarif.py +144 -0
- lohnsteuer_bmf-2026.0/tests/golden/einkommensteuer.json +17 -0
- lohnsteuer_bmf-2026.0/tests/golden/lohnsteuer.json +44 -0
- lohnsteuer_bmf-2026.0/tests/test_einkommensteuer.py +111 -0
- lohnsteuer_bmf-2026.0/tests/test_lohnsteuer.py +108 -0
- lohnsteuer_bmf-2026.0/tests/test_tarif.py +68 -0
- lohnsteuer_bmf-2026.0/tests/test_upstream_parity.py +127 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*.egg-info/
|
|
5
|
+
.eggs/
|
|
6
|
+
build/
|
|
7
|
+
dist/
|
|
8
|
+
*.egg
|
|
9
|
+
|
|
10
|
+
# Virtual environments
|
|
11
|
+
.venv/
|
|
12
|
+
venv/
|
|
13
|
+
env/
|
|
14
|
+
|
|
15
|
+
# Test / type / lint caches
|
|
16
|
+
.pytest_cache/
|
|
17
|
+
.mypy_cache/
|
|
18
|
+
.ruff_cache/
|
|
19
|
+
.hypothesis/
|
|
20
|
+
.coverage
|
|
21
|
+
htmlcov/
|
|
22
|
+
coverage.xml
|
|
23
|
+
|
|
24
|
+
# Editors / OS
|
|
25
|
+
.idea/
|
|
26
|
+
.vscode/
|
|
27
|
+
*.swp
|
|
28
|
+
.DS_Store
|
|
29
|
+
Thumbs.db
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
Alle nennenswerten Änderungen an diesem Projekt werden hier dokumentiert.
|
|
4
|
+
|
|
5
|
+
Das Format orientiert sich an [Keep a Changelog](https://keepachangelog.com/de/1.1.0/),
|
|
6
|
+
die Versionierung folgt [CalVer](https://calver.org/) (`JAHR.MINOR`, am Steuerjahr orientiert).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- Erste Veröffentlichung: Lohnsteuer nach BMF-Programmablaufplan 2026
|
|
12
|
+
(`berechne_lohnsteuer_pap`, `berechne_zve`).
|
|
13
|
+
- Einkommensteuer-Tarif nach §32a EStG inkl. Splitting, Solidaritätszuschlag
|
|
14
|
+
und Kirchensteuer (`berechne_einkommensteuer_tarif`, `einkommensteuer`,
|
|
15
|
+
`einkommensteuer_splitting`, `solidaritaetszuschlag`, `kirchensteuer`).
|
|
16
|
+
- Steuerjahre 2024, 2025 und 2026.
|
|
17
|
+
- Offline, zero dependencies, vollständig typisiert (PEP 561 `py.typed`).
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 L1nch-lab
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: lohnsteuer-bmf
|
|
3
|
+
Version: 2026.0
|
|
4
|
+
Summary: Lohnsteuer & Einkommensteuer nach BMF-Programmablaufplan 2026 — offline, typisiert, zero dependencies.
|
|
5
|
+
Project-URL: Homepage, https://github.com/L1nch-lab/lohnsteuer-bmf
|
|
6
|
+
Project-URL: Repository, https://github.com/L1nch-lab/lohnsteuer-bmf
|
|
7
|
+
Project-URL: Hosted API, https://api.rechner-hub.de/steuerrechner-api/
|
|
8
|
+
Project-URL: Changelog, https://github.com/L1nch-lab/lohnsteuer-bmf/blob/main/CHANGELOG.md
|
|
9
|
+
Author: L1nch-lab
|
|
10
|
+
License-Expression: MIT
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Keywords: 2026,bmf,einkommensteuer,est,germany,lohnsteuer,pap,programmablaufplan,steuer,tax
|
|
13
|
+
Classifier: Development Status :: 4 - Beta
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: Intended Audience :: Financial and Insurance Industry
|
|
16
|
+
Classifier: Natural Language :: German
|
|
17
|
+
Classifier: Operating System :: OS Independent
|
|
18
|
+
Classifier: Programming Language :: Python :: 3
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Topic :: Office/Business :: Financial :: Accounting
|
|
22
|
+
Classifier: Typing :: Typed
|
|
23
|
+
Requires-Python: >=3.12
|
|
24
|
+
Provides-Extra: dev
|
|
25
|
+
Requires-Dist: build>=1.2.2; extra == 'dev'
|
|
26
|
+
Requires-Dist: mypy>=2.1.0; extra == 'dev'
|
|
27
|
+
Requires-Dist: pytest>=9.0.3; extra == 'dev'
|
|
28
|
+
Requires-Dist: ruff==0.15.16; extra == 'dev'
|
|
29
|
+
Requires-Dist: twine>=6.1.0; extra == 'dev'
|
|
30
|
+
Description-Content-Type: text/markdown
|
|
31
|
+
|
|
32
|
+
# lohnsteuer-bmf
|
|
33
|
+
|
|
34
|
+
**Lohn- und Einkommensteuer nach dem BMF-Programmablaufplan 2026 — offline, typisiert, ohne externe Abhängigkeiten.**
|
|
35
|
+
|
|
36
|
+
[](https://pypi.org/project/lohnsteuer-bmf/)
|
|
37
|
+
[](https://pypi.org/project/lohnsteuer-bmf/)
|
|
38
|
+
[](LICENSE)
|
|
39
|
+
|
|
40
|
+
`pip install` und loslegen — kein Code-Generator, kein PAP-XML-Parsing, keine
|
|
41
|
+
Laufzeit-Abhängigkeiten. Die Steuerwerte für 2026 sind gegen Primärquellen
|
|
42
|
+
verifiziert (§32a EStG, BMF-PAP 2026, SV-Rechengrößenverordnung 2026).
|
|
43
|
+
|
|
44
|
+
> 🇬🇧 **English speakers:** scroll down for the [English section](#english).
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Installation
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
pip install lohnsteuer-bmf
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Python ≥ 3.12. Keine Abhängigkeiten.
|
|
55
|
+
|
|
56
|
+
## Schnellstart
|
|
57
|
+
|
|
58
|
+
Die häufigste Frage zuerst — **Steuerklasse 1, 5.000 € brutto/Monat, 2026:**
|
|
59
|
+
|
|
60
|
+
```python
|
|
61
|
+
from lohnsteuer_bmf import berechne_lohnsteuer_pap
|
|
62
|
+
|
|
63
|
+
ergebnis = berechne_lohnsteuer_pap(
|
|
64
|
+
brutto_jahr=60_000.0, # 5.000 € * 12
|
|
65
|
+
steuerklasse=1,
|
|
66
|
+
bundesland="Nordrhein-Westfalen",
|
|
67
|
+
mit_kirchensteuer=False,
|
|
68
|
+
kinder=0,
|
|
69
|
+
geburtsjahr=1990,
|
|
70
|
+
kv_zusatzbeitrag=2.9, # durchschnittlicher Zusatzbeitrag 2026
|
|
71
|
+
ist_sachsen=False,
|
|
72
|
+
jahr=2026,
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
print(ergebnis)
|
|
76
|
+
# {'lohnsteuer_monat': 777.33, 'soli_monat': 0.0, 'kirchensteuer_monat': 0.0,
|
|
77
|
+
# 'zve_jahr': 46464.0, 'vorsorgepauschale': 12270.0}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Einkommensteuer-Tarif (§32a EStG)
|
|
81
|
+
|
|
82
|
+
```python
|
|
83
|
+
from lohnsteuer_bmf import berechne_einkommensteuer_tarif
|
|
84
|
+
|
|
85
|
+
t = berechne_einkommensteuer_tarif(zve=50_000, jahr=2026)
|
|
86
|
+
print(t["einkommensteuer"], t["grenzsteuersatz"], t["tarifzone"]["name"])
|
|
87
|
+
# 10548.0 35.0 'Obere Progressionszone'
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Bausteine
|
|
91
|
+
|
|
92
|
+
```python
|
|
93
|
+
from lohnsteuer_bmf import (
|
|
94
|
+
einkommensteuer, # §32a EStG, Grundtarif
|
|
95
|
+
einkommensteuer_splitting, # §32a Abs. 5 EStG, Ehegattensplitting
|
|
96
|
+
solidaritaetszuschlag, # §3/§4 SolzG inkl. Milderungszone
|
|
97
|
+
kirchensteuer, # 8 % (BY, BW) / 9 % (übrige Länder)
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
einkommensteuer(50_000, 2026) # 10548
|
|
101
|
+
einkommensteuer_splitting(100_000, 2026) # 21096
|
|
102
|
+
solidaritaetszuschlag(30_864, jahr=2026) # 1251.17
|
|
103
|
+
kirchensteuer(10_000, "Bayern") # 800.0
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## Was ist drin
|
|
107
|
+
|
|
108
|
+
| Funktion | Rechtsgrundlage |
|
|
109
|
+
|---|---|
|
|
110
|
+
| `berechne_lohnsteuer_pap` | BMF-Programmablaufplan 2026 (BMF-Schreiben v. 12.11.2025) |
|
|
111
|
+
| `berechne_zve` | zu versteuerndes Einkommen aus Brutto (Vorsorgepauschale etc.) |
|
|
112
|
+
| `berechne_einkommensteuer_tarif` | §32a EStG inkl. Grenz-/Durchschnittssteuersatz |
|
|
113
|
+
| `einkommensteuer` / `einkommensteuer_splitting` | §32a Abs. 1 / Abs. 5 EStG |
|
|
114
|
+
| `solidaritaetszuschlag` | §3/§4 SolzG |
|
|
115
|
+
| `kirchensteuer` | Landeskirchensteuergesetze |
|
|
116
|
+
|
|
117
|
+
Unterstützte Steuerjahre: **2024, 2025, 2026.**
|
|
118
|
+
|
|
119
|
+
> **Hinweis zu 2024/2025:** Verifiziert und für den produktiven Einsatz empfohlen
|
|
120
|
+
> ist das Steuerjahr **2026**; die Werte für 2024/2025 entsprechen dem Upstream-Stand
|
|
121
|
+
> und werden noch gegen Primärquellen nachgeprüft.
|
|
122
|
+
|
|
123
|
+
## Brauchst du mehr als Lohn-/Einkommensteuer?
|
|
124
|
+
|
|
125
|
+
Dieses Paket ist die offene Commodity-Schicht. Die **breite Abdeckung** — rund 58
|
|
126
|
+
weitere deutsche Rechner inkl. Sozialleistungen (Bürgergeld, Wohngeld, Elterngeld,
|
|
127
|
+
Gewerbe-/Grunderwerb-/Erbschaftsteuer, Krypto, Photovoltaik u.v.m.), Batch-Endpoints
|
|
128
|
+
und Gemeinde-Hebesätze — gibt es als gehostete REST-API:
|
|
129
|
+
|
|
130
|
+
👉 **[api.rechner-hub.de/steuerrechner-api](https://api.rechner-hub.de/steuerrechner-api/)**
|
|
131
|
+
|
|
132
|
+
## Genauigkeit & Haftung
|
|
133
|
+
|
|
134
|
+
Die Berechnungen folgen den offiziellen BMF-Formeln, ersetzen aber **keine
|
|
135
|
+
Steuerberatung**. Alle Angaben ohne Gewähr. Das Paket bildet die maschinelle
|
|
136
|
+
Lohnsteuer-/ESt-Berechnung ab, nicht jeden Einzelfall des Veranlagungsverfahrens.
|
|
137
|
+
|
|
138
|
+
## Lizenz
|
|
139
|
+
|
|
140
|
+
[MIT](LICENSE) © 2026 L1nch-lab
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## English
|
|
145
|
+
|
|
146
|
+
**German wage tax (Lohnsteuer) and income tax (Einkommensteuer) per the official
|
|
147
|
+
BMF payroll algorithm (Programmablaufplan) 2026 — offline, typed, zero dependencies.**
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
pip install lohnsteuer-bmf
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
Quick start — tax class 1, €5,000 gross/month, 2026:
|
|
154
|
+
|
|
155
|
+
```python
|
|
156
|
+
from lohnsteuer_bmf import berechne_lohnsteuer_pap
|
|
157
|
+
|
|
158
|
+
result = berechne_lohnsteuer_pap(
|
|
159
|
+
brutto_jahr=60_000.0, # 5,000 EUR * 12
|
|
160
|
+
steuerklasse=1, # tax class 1
|
|
161
|
+
bundesland="Nordrhein-Westfalen",
|
|
162
|
+
mit_kirchensteuer=False, # church tax
|
|
163
|
+
kinder=0, # children
|
|
164
|
+
geburtsjahr=1990, # birth year
|
|
165
|
+
kv_zusatzbeitrag=2.9, # avg. health-insurance surcharge 2026
|
|
166
|
+
ist_sachsen=False, # Saxony special rule
|
|
167
|
+
jahr=2026, # tax year
|
|
168
|
+
)
|
|
169
|
+
print(result["lohnsteuer_monat"]) # 777.33 (monthly wage tax in EUR)
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
What's included: monthly **Lohnsteuer** (BMF-PAP 2026), the **§32a income-tax tariff**
|
|
173
|
+
(incl. spouse splitting, marginal/average rates), **solidarity surcharge** and
|
|
174
|
+
**church tax**. Tax years 2024–2026 (2026 verified against primary sources;
|
|
175
|
+
2024/2025 mirror upstream and are pending re-verification).
|
|
176
|
+
|
|
177
|
+
Need the full breadth (≈58 more German calculators incl. social benefits, batch
|
|
178
|
+
endpoints, municipal trade-tax rates)? Use the hosted REST API:
|
|
179
|
+
**[api.rechner-hub.de/steuerrechner-api](https://api.rechner-hub.de/steuerrechner-api/)**.
|
|
180
|
+
|
|
181
|
+
Not tax advice — provided as is. Licensed under [MIT](LICENSE).
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# lohnsteuer-bmf
|
|
2
|
+
|
|
3
|
+
**Lohn- und Einkommensteuer nach dem BMF-Programmablaufplan 2026 — offline, typisiert, ohne externe Abhängigkeiten.**
|
|
4
|
+
|
|
5
|
+
[](https://pypi.org/project/lohnsteuer-bmf/)
|
|
6
|
+
[](https://pypi.org/project/lohnsteuer-bmf/)
|
|
7
|
+
[](LICENSE)
|
|
8
|
+
|
|
9
|
+
`pip install` und loslegen — kein Code-Generator, kein PAP-XML-Parsing, keine
|
|
10
|
+
Laufzeit-Abhängigkeiten. Die Steuerwerte für 2026 sind gegen Primärquellen
|
|
11
|
+
verifiziert (§32a EStG, BMF-PAP 2026, SV-Rechengrößenverordnung 2026).
|
|
12
|
+
|
|
13
|
+
> 🇬🇧 **English speakers:** scroll down for the [English section](#english).
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Installation
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
pip install lohnsteuer-bmf
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Python ≥ 3.12. Keine Abhängigkeiten.
|
|
24
|
+
|
|
25
|
+
## Schnellstart
|
|
26
|
+
|
|
27
|
+
Die häufigste Frage zuerst — **Steuerklasse 1, 5.000 € brutto/Monat, 2026:**
|
|
28
|
+
|
|
29
|
+
```python
|
|
30
|
+
from lohnsteuer_bmf import berechne_lohnsteuer_pap
|
|
31
|
+
|
|
32
|
+
ergebnis = berechne_lohnsteuer_pap(
|
|
33
|
+
brutto_jahr=60_000.0, # 5.000 € * 12
|
|
34
|
+
steuerklasse=1,
|
|
35
|
+
bundesland="Nordrhein-Westfalen",
|
|
36
|
+
mit_kirchensteuer=False,
|
|
37
|
+
kinder=0,
|
|
38
|
+
geburtsjahr=1990,
|
|
39
|
+
kv_zusatzbeitrag=2.9, # durchschnittlicher Zusatzbeitrag 2026
|
|
40
|
+
ist_sachsen=False,
|
|
41
|
+
jahr=2026,
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
print(ergebnis)
|
|
45
|
+
# {'lohnsteuer_monat': 777.33, 'soli_monat': 0.0, 'kirchensteuer_monat': 0.0,
|
|
46
|
+
# 'zve_jahr': 46464.0, 'vorsorgepauschale': 12270.0}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Einkommensteuer-Tarif (§32a EStG)
|
|
50
|
+
|
|
51
|
+
```python
|
|
52
|
+
from lohnsteuer_bmf import berechne_einkommensteuer_tarif
|
|
53
|
+
|
|
54
|
+
t = berechne_einkommensteuer_tarif(zve=50_000, jahr=2026)
|
|
55
|
+
print(t["einkommensteuer"], t["grenzsteuersatz"], t["tarifzone"]["name"])
|
|
56
|
+
# 10548.0 35.0 'Obere Progressionszone'
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Bausteine
|
|
60
|
+
|
|
61
|
+
```python
|
|
62
|
+
from lohnsteuer_bmf import (
|
|
63
|
+
einkommensteuer, # §32a EStG, Grundtarif
|
|
64
|
+
einkommensteuer_splitting, # §32a Abs. 5 EStG, Ehegattensplitting
|
|
65
|
+
solidaritaetszuschlag, # §3/§4 SolzG inkl. Milderungszone
|
|
66
|
+
kirchensteuer, # 8 % (BY, BW) / 9 % (übrige Länder)
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
einkommensteuer(50_000, 2026) # 10548
|
|
70
|
+
einkommensteuer_splitting(100_000, 2026) # 21096
|
|
71
|
+
solidaritaetszuschlag(30_864, jahr=2026) # 1251.17
|
|
72
|
+
kirchensteuer(10_000, "Bayern") # 800.0
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Was ist drin
|
|
76
|
+
|
|
77
|
+
| Funktion | Rechtsgrundlage |
|
|
78
|
+
|---|---|
|
|
79
|
+
| `berechne_lohnsteuer_pap` | BMF-Programmablaufplan 2026 (BMF-Schreiben v. 12.11.2025) |
|
|
80
|
+
| `berechne_zve` | zu versteuerndes Einkommen aus Brutto (Vorsorgepauschale etc.) |
|
|
81
|
+
| `berechne_einkommensteuer_tarif` | §32a EStG inkl. Grenz-/Durchschnittssteuersatz |
|
|
82
|
+
| `einkommensteuer` / `einkommensteuer_splitting` | §32a Abs. 1 / Abs. 5 EStG |
|
|
83
|
+
| `solidaritaetszuschlag` | §3/§4 SolzG |
|
|
84
|
+
| `kirchensteuer` | Landeskirchensteuergesetze |
|
|
85
|
+
|
|
86
|
+
Unterstützte Steuerjahre: **2024, 2025, 2026.**
|
|
87
|
+
|
|
88
|
+
> **Hinweis zu 2024/2025:** Verifiziert und für den produktiven Einsatz empfohlen
|
|
89
|
+
> ist das Steuerjahr **2026**; die Werte für 2024/2025 entsprechen dem Upstream-Stand
|
|
90
|
+
> und werden noch gegen Primärquellen nachgeprüft.
|
|
91
|
+
|
|
92
|
+
## Brauchst du mehr als Lohn-/Einkommensteuer?
|
|
93
|
+
|
|
94
|
+
Dieses Paket ist die offene Commodity-Schicht. Die **breite Abdeckung** — rund 58
|
|
95
|
+
weitere deutsche Rechner inkl. Sozialleistungen (Bürgergeld, Wohngeld, Elterngeld,
|
|
96
|
+
Gewerbe-/Grunderwerb-/Erbschaftsteuer, Krypto, Photovoltaik u.v.m.), Batch-Endpoints
|
|
97
|
+
und Gemeinde-Hebesätze — gibt es als gehostete REST-API:
|
|
98
|
+
|
|
99
|
+
👉 **[api.rechner-hub.de/steuerrechner-api](https://api.rechner-hub.de/steuerrechner-api/)**
|
|
100
|
+
|
|
101
|
+
## Genauigkeit & Haftung
|
|
102
|
+
|
|
103
|
+
Die Berechnungen folgen den offiziellen BMF-Formeln, ersetzen aber **keine
|
|
104
|
+
Steuerberatung**. Alle Angaben ohne Gewähr. Das Paket bildet die maschinelle
|
|
105
|
+
Lohnsteuer-/ESt-Berechnung ab, nicht jeden Einzelfall des Veranlagungsverfahrens.
|
|
106
|
+
|
|
107
|
+
## Lizenz
|
|
108
|
+
|
|
109
|
+
[MIT](LICENSE) © 2026 L1nch-lab
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## English
|
|
114
|
+
|
|
115
|
+
**German wage tax (Lohnsteuer) and income tax (Einkommensteuer) per the official
|
|
116
|
+
BMF payroll algorithm (Programmablaufplan) 2026 — offline, typed, zero dependencies.**
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
pip install lohnsteuer-bmf
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Quick start — tax class 1, €5,000 gross/month, 2026:
|
|
123
|
+
|
|
124
|
+
```python
|
|
125
|
+
from lohnsteuer_bmf import berechne_lohnsteuer_pap
|
|
126
|
+
|
|
127
|
+
result = berechne_lohnsteuer_pap(
|
|
128
|
+
brutto_jahr=60_000.0, # 5,000 EUR * 12
|
|
129
|
+
steuerklasse=1, # tax class 1
|
|
130
|
+
bundesland="Nordrhein-Westfalen",
|
|
131
|
+
mit_kirchensteuer=False, # church tax
|
|
132
|
+
kinder=0, # children
|
|
133
|
+
geburtsjahr=1990, # birth year
|
|
134
|
+
kv_zusatzbeitrag=2.9, # avg. health-insurance surcharge 2026
|
|
135
|
+
ist_sachsen=False, # Saxony special rule
|
|
136
|
+
jahr=2026, # tax year
|
|
137
|
+
)
|
|
138
|
+
print(result["lohnsteuer_monat"]) # 777.33 (monthly wage tax in EUR)
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
What's included: monthly **Lohnsteuer** (BMF-PAP 2026), the **§32a income-tax tariff**
|
|
142
|
+
(incl. spouse splitting, marginal/average rates), **solidarity surcharge** and
|
|
143
|
+
**church tax**. Tax years 2024–2026 (2026 verified against primary sources;
|
|
144
|
+
2024/2025 mirror upstream and are pending re-verification).
|
|
145
|
+
|
|
146
|
+
Need the full breadth (≈58 more German calculators incl. social benefits, batch
|
|
147
|
+
endpoints, municipal trade-tax rates)? Use the hosted REST API:
|
|
148
|
+
**[api.rechner-hub.de/steuerrechner-api](https://api.rechner-hub.de/steuerrechner-api/)**.
|
|
149
|
+
|
|
150
|
+
Not tax advice — provided as is. Licensed under [MIT](LICENSE).
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"""Beispiel: Einkommensteuer-Tarif (§32a EStG) für verschiedene zvE, 2026.
|
|
2
|
+
|
|
3
|
+
Ausführen mit: python examples/einkommensteuer_tarif.py
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from lohnsteuer_bmf import berechne_einkommensteuer_tarif
|
|
7
|
+
|
|
8
|
+
print("Einkommensteuer-Tarif 2026 (Grundtarif)")
|
|
9
|
+
print(f"{'zvE':>10} {'ESt':>10} {'Grenz-%':>9} {'Durchschn-%':>12} Zone")
|
|
10
|
+
for zve in (15_000, 30_000, 50_000, 70_000, 100_000, 300_000):
|
|
11
|
+
t = berechne_einkommensteuer_tarif(zve=zve, jahr=2026)
|
|
12
|
+
print(
|
|
13
|
+
f"{zve:>10,} "
|
|
14
|
+
f"{t['einkommensteuer']:>10,.0f} "
|
|
15
|
+
f"{t['grenzsteuersatz']:>8.2f}% "
|
|
16
|
+
f"{t['durchschnittssteuersatz']:>11.2f}% "
|
|
17
|
+
f"{t['tarifzone']['name']}"
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
print()
|
|
21
|
+
print("Mit Ehegattensplitting (zvE = gemeinsames Einkommen):")
|
|
22
|
+
einzel = berechne_einkommensteuer_tarif(80_000, zusammenveranlagung=False, jahr=2026)
|
|
23
|
+
splitting = berechne_einkommensteuer_tarif(80_000, zusammenveranlagung=True, jahr=2026)
|
|
24
|
+
ersparnis = einzel["einkommensteuer"] - splitting["einkommensteuer"]
|
|
25
|
+
print(f" Einzelveranlagung: {einzel['einkommensteuer']:>10,.0f} €")
|
|
26
|
+
print(f" Splitting: {splitting['einkommensteuer']:>10,.0f} €")
|
|
27
|
+
print(f" Splitting-Vorteil: {ersparnis:>10,.0f} €")
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"""Top-Query-Beispiel: Lohnsteuer für Steuerklasse 1, 5.000 €/Monat, 2026.
|
|
2
|
+
|
|
3
|
+
Ausführen mit: python examples/lohnsteuer_quickstart.py
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from lohnsteuer_bmf import berechne_lohnsteuer_pap
|
|
7
|
+
|
|
8
|
+
ergebnis = berechne_lohnsteuer_pap(
|
|
9
|
+
brutto_jahr=60_000.0, # 5.000 € * 12
|
|
10
|
+
steuerklasse=1,
|
|
11
|
+
bundesland="Nordrhein-Westfalen",
|
|
12
|
+
mit_kirchensteuer=False,
|
|
13
|
+
kinder=0,
|
|
14
|
+
geburtsjahr=1990,
|
|
15
|
+
kv_zusatzbeitrag=2.9, # durchschnittlicher Zusatzbeitrag 2026
|
|
16
|
+
ist_sachsen=False,
|
|
17
|
+
jahr=2026,
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
print("Lohnsteuer 2026 — Steuerklasse 1, 5.000 €/Monat brutto")
|
|
21
|
+
print(f" Lohnsteuer/Monat: {ergebnis['lohnsteuer_monat']:>10.2f} €")
|
|
22
|
+
print(f" Soli/Monat: {ergebnis['soli_monat']:>10.2f} €")
|
|
23
|
+
print(f" Kirchensteuer/Monat: {ergebnis['kirchensteuer_monat']:>10.2f} €")
|
|
24
|
+
print(f" zvE/Jahr: {ergebnis['zve_jahr']:>10.2f} €")
|
|
25
|
+
print(f" Vorsorgepauschale: {ergebnis['vorsorgepauschale']:>10.2f} €")
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["hatchling"]
|
|
3
|
+
build-backend = "hatchling.build"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "lohnsteuer-bmf"
|
|
7
|
+
dynamic = ["version"]
|
|
8
|
+
description = "Lohnsteuer & Einkommensteuer nach BMF-Programmablaufplan 2026 — offline, typisiert, zero dependencies."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.12"
|
|
11
|
+
license = "MIT"
|
|
12
|
+
license-files = ["LICENSE"]
|
|
13
|
+
authors = [{ name = "L1nch-lab" }]
|
|
14
|
+
keywords = [
|
|
15
|
+
"lohnsteuer",
|
|
16
|
+
"einkommensteuer",
|
|
17
|
+
"bmf",
|
|
18
|
+
"pap",
|
|
19
|
+
"programmablaufplan",
|
|
20
|
+
"steuer",
|
|
21
|
+
"tax",
|
|
22
|
+
"germany",
|
|
23
|
+
"2026",
|
|
24
|
+
"est",
|
|
25
|
+
]
|
|
26
|
+
classifiers = [
|
|
27
|
+
"Development Status :: 4 - Beta",
|
|
28
|
+
"Intended Audience :: Developers",
|
|
29
|
+
"Intended Audience :: Financial and Insurance Industry",
|
|
30
|
+
"Natural Language :: German",
|
|
31
|
+
"Operating System :: OS Independent",
|
|
32
|
+
"Programming Language :: Python :: 3",
|
|
33
|
+
"Programming Language :: Python :: 3.12",
|
|
34
|
+
"Programming Language :: Python :: 3.13",
|
|
35
|
+
"Topic :: Office/Business :: Financial :: Accounting",
|
|
36
|
+
"Typing :: Typed",
|
|
37
|
+
]
|
|
38
|
+
dependencies = []
|
|
39
|
+
|
|
40
|
+
[project.optional-dependencies]
|
|
41
|
+
dev = [
|
|
42
|
+
"pytest>=9.0.3",
|
|
43
|
+
"ruff==0.15.16",
|
|
44
|
+
"mypy>=2.1.0",
|
|
45
|
+
"build>=1.2.2",
|
|
46
|
+
"twine>=6.1.0",
|
|
47
|
+
]
|
|
48
|
+
|
|
49
|
+
[project.urls]
|
|
50
|
+
Homepage = "https://github.com/L1nch-lab/lohnsteuer-bmf"
|
|
51
|
+
Repository = "https://github.com/L1nch-lab/lohnsteuer-bmf"
|
|
52
|
+
"Hosted API" = "https://api.rechner-hub.de/steuerrechner-api/"
|
|
53
|
+
Changelog = "https://github.com/L1nch-lab/lohnsteuer-bmf/blob/main/CHANGELOG.md"
|
|
54
|
+
|
|
55
|
+
[tool.hatch.version]
|
|
56
|
+
path = "src/lohnsteuer_bmf/__init__.py"
|
|
57
|
+
|
|
58
|
+
[tool.hatch.build.targets.wheel]
|
|
59
|
+
packages = ["src/lohnsteuer_bmf"]
|
|
60
|
+
|
|
61
|
+
[tool.hatch.build.targets.sdist]
|
|
62
|
+
include = ["src/lohnsteuer_bmf", "tests", "examples", "README.md", "LICENSE", "CHANGELOG.md"]
|
|
63
|
+
|
|
64
|
+
[tool.ruff]
|
|
65
|
+
target-version = "py312"
|
|
66
|
+
line-length = 100
|
|
67
|
+
|
|
68
|
+
[tool.ruff.lint]
|
|
69
|
+
select = ["E", "F", "I", "UP", "B", "SIM", "ARG", "S"]
|
|
70
|
+
|
|
71
|
+
[tool.ruff.lint.per-file-ignores]
|
|
72
|
+
"tests/**" = ["S101"]
|
|
73
|
+
"tools/**" = ["S101", "S603", "S607"]
|
|
74
|
+
|
|
75
|
+
[tool.ruff.lint.isort]
|
|
76
|
+
known-first-party = ["lohnsteuer_bmf"]
|
|
77
|
+
|
|
78
|
+
[tool.mypy]
|
|
79
|
+
python_version = "3.12"
|
|
80
|
+
strict = true
|
|
81
|
+
files = ["src/lohnsteuer_bmf"]
|
|
82
|
+
|
|
83
|
+
[[tool.mypy.overrides]]
|
|
84
|
+
module = "tests.*"
|
|
85
|
+
disallow_untyped_defs = false
|
|
86
|
+
|
|
87
|
+
[tool.pytest.ini_options]
|
|
88
|
+
testpaths = ["tests"]
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"""lohnsteuer-bmf — Lohn- und Einkommensteuer nach BMF-Programmablaufplan 2026.
|
|
2
|
+
|
|
3
|
+
Offline, typisiert, ohne externe Abhängigkeiten. Carve-out der Commodity-Schicht
|
|
4
|
+
aus rechner-hub-api/steuerlogik.
|
|
5
|
+
|
|
6
|
+
Schnellstart (Top-Query: Steuerklasse 1, 5.000 €/Monat brutto, 2026)::
|
|
7
|
+
|
|
8
|
+
from lohnsteuer_bmf import berechne_lohnsteuer_pap
|
|
9
|
+
|
|
10
|
+
ergebnis = berechne_lohnsteuer_pap(
|
|
11
|
+
brutto_jahr=60_000.0, # 5.000 € * 12
|
|
12
|
+
steuerklasse=1,
|
|
13
|
+
bundesland="Nordrhein-Westfalen",
|
|
14
|
+
mit_kirchensteuer=False,
|
|
15
|
+
kinder=0,
|
|
16
|
+
geburtsjahr=1990,
|
|
17
|
+
kv_zusatzbeitrag=2.9, # durchschnittlicher Zusatzbeitrag 2026
|
|
18
|
+
ist_sachsen=False,
|
|
19
|
+
jahr=2026,
|
|
20
|
+
)
|
|
21
|
+
print(ergebnis["lohnsteuer_monat"])
|
|
22
|
+
|
|
23
|
+
Die breite Abdeckung (~58 weitere Rechner inkl. Sozialleistungen) gibt es als
|
|
24
|
+
gehostete REST-API: https://api.rechner-hub.de/steuerrechner-api/
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
from lohnsteuer_bmf.einkommensteuer import (
|
|
28
|
+
einkommensteuer,
|
|
29
|
+
einkommensteuer_splitting,
|
|
30
|
+
kirchensteuer,
|
|
31
|
+
solidaritaetszuschlag,
|
|
32
|
+
)
|
|
33
|
+
from lohnsteuer_bmf.konstanten import (
|
|
34
|
+
AKTUELLES_STEUERJAHR,
|
|
35
|
+
BUNDESLAENDER,
|
|
36
|
+
UNTERSTUETZTE_JAHRE,
|
|
37
|
+
)
|
|
38
|
+
from lohnsteuer_bmf.lohnsteuer import (
|
|
39
|
+
berechne_lohnsteuer_pap,
|
|
40
|
+
berechne_zve,
|
|
41
|
+
)
|
|
42
|
+
from lohnsteuer_bmf.tarif import berechne_einkommensteuer_tarif
|
|
43
|
+
|
|
44
|
+
__version__ = "2026.0"
|
|
45
|
+
|
|
46
|
+
__all__ = [
|
|
47
|
+
"AKTUELLES_STEUERJAHR",
|
|
48
|
+
"BUNDESLAENDER",
|
|
49
|
+
"UNTERSTUETZTE_JAHRE",
|
|
50
|
+
"__version__",
|
|
51
|
+
"berechne_einkommensteuer_tarif",
|
|
52
|
+
"berechne_lohnsteuer_pap",
|
|
53
|
+
"berechne_zve",
|
|
54
|
+
"einkommensteuer",
|
|
55
|
+
"einkommensteuer_splitting",
|
|
56
|
+
"kirchensteuer",
|
|
57
|
+
"solidaritaetszuschlag",
|
|
58
|
+
]
|