Skip to content
Merged
Show file tree
Hide file tree
Changes from 16 commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
11678cf
Add Ertragsanteil for taxing pensions before 2005.
MImmesberger Sep 12, 2025
e49ad75
Add params before 2005.
MImmesberger Sep 12, 2025
aaf9018
Tax every type of pension with a different Ertragsanteil.
MImmesberger Sep 12, 2025
3dd92c9
Rewrite piecewise_linear to lookup table, add regression tests.
MImmesberger Sep 12, 2025
6a09e6f
Add Altersentlastungsbeträge from Wachstumschancengesetz 2024.
MImmesberger Sep 12, 2025
706f7a4
Changes.
MImmesberger Sep 12, 2025
6343373
Review comments.
MImmesberger Sep 13, 2025
eb74fb3
Use reasonable range for Altersentlastungsbetrag Parameter.
MImmesberger Sep 13, 2025
c0f4005
Fix pixi environment.
MImmesberger Sep 13, 2025
42fa41d
Add preliminary fix of gesamtbetrag_der_einkünfte_y before 2008. Prop…
MImmesberger Sep 13, 2025
8bce7c6
Fix namespace.
MImmesberger Sep 13, 2025
ef53c7c
Test if docs build using new gettsim-personas branch.
MImmesberger Sep 13, 2025
1e260c2
Update pixi lock.
MImmesberger Sep 13, 2025
a096d73
Update Elterngeld notebook.
MImmesberger Sep 13, 2025
7d4593c
Add new inputs to other doc notebooks; doc building should work now.
MImmesberger Sep 13, 2025
e9da54a
Merge branch 'main' into wachstumschancengesetz
MImmesberger Sep 13, 2025
e7b1f6c
Better description for 'altersentlastungsquote'.
MImmesberger Sep 21, 2025
8d06e2f
Add einnahmen__renten__summe_m
MImmesberger Sep 21, 2025
341a45e
Use summe_m for Wohngeld tests.
MImmesberger Sep 21, 2025
a70ae5d
summe_m -> gesamt_m
MImmesberger Sep 21, 2025
70b9eec
Use gesamt_m in UV tests as well.
MImmesberger Sep 21, 2025
cdd7ba8
Simplify Elterngeld notebook.
MImmesberger Sep 21, 2025
b9d1032
Add explainer for not applicable inputs.
MImmesberger Sep 21, 2025
f5d1bad
Add bemessungsgrundlage_rente_m to inputs for calculating_elterngeld …
MImmesberger Sep 21, 2025
1258591
Use main branch of gettsim-personas for documentation.
MImmesberger Sep 21, 2025
d9f9784
Fix modifications to PE notebook.
MImmesberger Sep 21, 2025
29cc5c5
Fix simple example notebook.
MImmesberger Sep 21, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ All releases are available on [Anaconda.org](https://anaconda.org/conda-forge/ge

## Unreleased

- {gh}`1093` Fix taxation of pensions and add some missing parameters of the
Wachstumschancengesetz 2024. ({ghuser}`MImmesberger`)
- {gh}`1094` Make Vorsorgeaufwendungen a param function and update parameters of
knappschaftliche RV and Kinderbetreuungskosten in ESt. ({ghuser}`MImmesberger`)

Expand Down
2 changes: 2 additions & 0 deletions docs/how_to_guides/calculating_elterngeld.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,8 @@
" \"geförderte_private_vorsorge_m\": np.array([0]),\n",
" \"gesetzliche_m\": np.array([0]),\n",
" \"sonstige_private_vorsorge_m\": np.array([0]),\n",
" \"alter_beginn_leistungsbezug_sonstige_private_vorsorge\": np.array([65]),\n",
" \"aus_berufsständischen_versicherungen_m\": np.array([0]),\n",
" },\n",
" },\n",
" \"familie\": {\n",
Expand Down
4 changes: 4 additions & 0 deletions docs/how_to_guides/modifications_of_policy_environments.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,10 @@
" \"betriebliche_altersvorsorge_m\": np.array([0.0, 0.0, 0.0]),\n",
" \"geförderte_private_vorsorge_m\": np.array([0.0, 0.0, 0.0]),\n",
" \"sonstige_private_vorsorge_m\": np.array([0.0, 0.0, 0.0]),\n",
" \"alter_beginn_leistungsbezug_sonstige_private_vorsorge\": np.array(\n",
" [65, 65, 65]\n",
" ),\n",
" \"aus_berufsständischen_versicherungen_m\": np.array([0.0, 0.0, 0.0]),\n",
" },\n",
" },\n",
" \"einkommensteuer\": {\n",
Expand Down
4 changes: 3 additions & 1 deletion docs/tutorials/simple_example.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,8 @@
" \"betriebliche_altersvorsorge_m\": 0.0,\n",
" \"geförderte_private_vorsorge_m\": 0.0,\n",
" \"sonstige_private_vorsorge_m\": 0.0,\n",
" \"alter_beginn_leistungsbezug_sonstige_private_vorsorge\": 65,\n",
" \"aus_berufsständischen_versicherungen_m\": 0.0,\n",
" },\n",
" },\n",
" \"einkommensteuer\": {\n",
Expand Down Expand Up @@ -224,7 +226,7 @@
" \"sozialversicherung\": {\n",
" \"arbeitslosen\": {\"betrag_m\": 0.0},\n",
" \"rente\": {\n",
" \"jahr_renteneintritt\": 0,\n",
" \"jahr_renteneintritt\": 2080,\n",
" \"altersrente\": {\n",
" \"betrag_m\": 0.0,\n",
" },\n",
Expand Down
6,602 changes: 3,342 additions & 3,260 deletions pixi.lock

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ sphinx-copybutton = "*"


[tool.pixi.feature.docs.pypi-dependencies]
gettsim-personas = {git = "https://github.com/ttsim-dev/gettsim-personas.git", branch = "interface-update"}
gettsim-personas = {git = "https://github.com/ttsim-dev/gettsim-personas.git", branch = "add-inputs-from-gettsim-1093"}

# Tasks
# --------------------------------------------------------------------------------------
Expand Down
2 changes: 2 additions & 0 deletions src/gettsim/germany/arbeitslosengeld_2/einkommen.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ def bruttoeinkommen_m(
einnahmen__renten__sonstige_private_vorsorge_m: float,
einnahmen__renten__geförderte_private_vorsorge_m: float,
einnahmen__renten__betriebliche_altersvorsorge_m: float,
einnahmen__renten__aus_berufsständischen_versicherungen_m: float,
einkommensteuer__einkünfte__sonstige__alle_weiteren_m: float,
sozialversicherung__arbeitslosen__betrag_m: float,
elterngeld__betrag_m: float,
Expand All @@ -94,6 +95,7 @@ def bruttoeinkommen_m(
+ einnahmen__renten__geförderte_private_vorsorge_m
+ einnahmen__renten__betriebliche_altersvorsorge_m
+ einnahmen__renten__gesetzliche_m
+ einnahmen__renten__aus_berufsständischen_versicherungen_m
+ einkommensteuer__einkünfte__sonstige__alle_weiteren_m
+ sozialversicherung__arbeitslosen__betrag_m
+ elterngeld__betrag_m
Expand Down
2 changes: 2 additions & 0 deletions src/gettsim/germany/bürgergeld/einkommen.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ def bruttoeinkommen_m(
einnahmen__renten__sonstige_private_vorsorge_m: float,
einnahmen__renten__geförderte_private_vorsorge_m: float,
einnahmen__renten__betriebliche_altersvorsorge_m: float,
einnahmen__renten__aus_berufsständischen_versicherungen_m: float,
einkommensteuer__einkünfte__sonstige__alle_weiteren_m: float,
sozialversicherung__arbeitslosen__betrag_m: float,
elterngeld__betrag_m: float,
Expand All @@ -94,6 +95,7 @@ def bruttoeinkommen_m(
+ einnahmen__renten__geförderte_private_vorsorge_m
+ einnahmen__renten__betriebliche_altersvorsorge_m
+ einnahmen__renten__gesetzliche_m
+ einnahmen__renten__aus_berufsständischen_versicherungen_m
+ einkommensteuer__einkünfte__sonstige__alle_weiteren_m
+ sozialversicherung__arbeitslosen__betrag_m
+ elterngeld__betrag_m
Expand Down
48 changes: 32 additions & 16 deletions src/gettsim/germany/einkommensteuer/abzüge/alter.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,12 +56,14 @@ def altersfreibetrag_y_ab_2005(
einkommensteuer__einkünfte__aus_selbstständiger_arbeit__betrag_y: float,
einkommensteuer__einkünfte__aus_vermietung_und_verpachtung__betrag_y: float,
altersentlastungsbetrag_altersgrenze: int,
maximaler_altersentlastungsbetrag_gestaffelt: ConsecutiveIntLookupTableParamValue,
altersentlastungsquote_gestaffelt: ConsecutiveIntLookupTableParamValue,
maximaler_altersentlastungsbetrag_gestaffelt_nach_geburtsjahr: ConsecutiveIntLookupTableParamValue,
altersentlastungsquote_gestaffelt_nach_geburtsjahr: ConsecutiveIntLookupTableParamValue,
) -> float:
"""Calculate tax deduction allowance for elderly since 2005."""
maximaler_altersentlastungsbetrag = (
maximaler_altersentlastungsbetrag_gestaffelt.look_up(geburtsjahr)
maximaler_altersentlastungsbetrag_gestaffelt_nach_geburtsjahr.look_up(
geburtsjahr
)
)

einkommen_lohn = (
Expand All @@ -73,7 +75,7 @@ def altersfreibetrag_y_ab_2005(
+ einkommensteuer__einkünfte__aus_vermietung_und_verpachtung__betrag_y,
0.0,
)
betrag = altersentlastungsquote_gestaffelt.look_up(geburtsjahr) * (
betrag = altersentlastungsquote_gestaffelt_nach_geburtsjahr.look_up(geburtsjahr) * (
einkommen_lohn + weiteres_einkommen
)

Expand All @@ -86,37 +88,51 @@ def altersfreibetrag_y_ab_2005(


@param_function(start_date="2005-01-01")
def altersentlastungsquote_gestaffelt(
def altersentlastungsquote_gestaffelt_nach_geburtsjahr(
raw_altersentlastungsquote_gestaffelt: dict[str | int, int | float],
altersentlastungsbetrag_altersgrenze: int,
xnp: ModuleType,
) -> ConsecutiveIntLookupTableParamValue:
"""Convert the raw parameters for the age-based tax deduction allowance to a dict."""
spec = raw_altersentlastungsquote_gestaffelt.copy()
first_birthyear_to_consider: int = int(spec.pop("first_birthyear_to_consider"))
last_birthyear_to_consider: int = int(spec.pop("last_birthyear_to_consider"))
spec_int_float: dict[int, float] = {int(k): float(v) for k, v in spec.items()}
first_calendar_year_to_consider: int = int(
spec.pop("first_calendar_year_to_consider")
)
last_calendar_year_to_consider: int = int(
spec.pop("last_calendar_year_to_consider")
)
spec_int_float: dict[int, float] = {
int(k) - altersentlastungsbetrag_altersgrenze: float(v) for k, v in spec.items()
}
return get_consecutive_int_1d_lookup_table_with_filled_up_tails(
raw=spec_int_float,
left_tail_key=first_birthyear_to_consider,
right_tail_key=last_birthyear_to_consider,
left_tail_key=first_calendar_year_to_consider,
right_tail_key=last_calendar_year_to_consider,
xnp=xnp,
)


@param_function(start_date="2005-01-01")
def maximaler_altersentlastungsbetrag_gestaffelt(
def maximaler_altersentlastungsbetrag_gestaffelt_nach_geburtsjahr(
raw_maximaler_altersentlastungsbetrag_gestaffelt: dict[str | int, int | float],
altersentlastungsbetrag_altersgrenze: int,
xnp: ModuleType,
) -> ConsecutiveIntLookupTableParamValue:
"""Convert the raw parameters for the age-based tax deduction allowance to a dict."""
spec = raw_maximaler_altersentlastungsbetrag_gestaffelt.copy()
first_birthyear_to_consider: int = int(spec.pop("first_birthyear_to_consider"))
last_birthyear_to_consider: int = int(spec.pop("last_birthyear_to_consider"))
spec_int_float: dict[int, float] = {int(k): float(v) for k, v in spec.items()}
first_calendar_year_to_consider: int = int(
spec.pop("first_calendar_year_to_consider")
)
last_calendar_year_to_consider: int = int(
spec.pop("last_calendar_year_to_consider")
)
spec_int_float: dict[int, float] = {
int(k) - altersentlastungsbetrag_altersgrenze: float(v) for k, v in spec.items()
}
return get_consecutive_int_1d_lookup_table_with_filled_up_tails(
raw=spec_int_float,
left_tail_key=first_birthyear_to_consider,
right_tail_key=last_birthyear_to_consider,
left_tail_key=first_calendar_year_to_consider,
right_tail_key=last_calendar_year_to_consider,
xnp=xnp,
)

Expand Down
Loading
Loading