Skip to content

Commit aafaf8c

Browse files
MImmesbergerclaude
andcommitted
Implement 100k children exclusion for Grundsicherung im Alter (§43 SGB XII)
§43 SGB XII (BGBl. I 2003 S. 3022) excludes applicants from Grundsicherung im Alter if any first-degree descendant has annual Gesamteinkommen (§16 SGB IV) exceeding 100,000 EUR. This was not previously implemented. Closes #1148 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 051cb8d commit aafaf8c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+988
-3
lines changed

src/gettsim/germany/grundsicherung/im_alter/freibeträge_und_mehrbedarfe.yaml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,25 @@ anrechnungsfreier_anteil_zusätzliche_altersvorsorge:
120120
slope: 1
121121
- interval: '[100, inf)'
122122
slope: 0.3
123+
einkommensgrenze_kinder:
124+
name:
125+
de: Einkommensgrenze der Kinder für Grundsicherung im Alter
126+
en: Children's income threshold for Grundsicherung im Alter
127+
description:
128+
de: >-
129+
§ 43 SGB XII (BGBl. I 2003 S. 3022).
130+
Übersteigt das jährliche Gesamteinkommen (§ 16 SGB IV) eines Kindes ersten Grades
131+
diesen Betrag, besteht kein Anspruch auf Grundsicherung im Alter.
132+
en: >-
133+
§ 43 SGB XII (BGBl. I 2003 S. 3022).
134+
If the annual Gesamteinkommen (§ 16 SGB IV) of any first-degree descendant exceeds
135+
this threshold, the applicant is excluded from Grundsicherung im Alter.
136+
unit: Euros
137+
reference_period: Year
138+
type: scalar
139+
2005-01-01:
140+
value: 100000
141+
reference: § 43 Abs. 2 SGB XII, BGBl. I 2003 S. 3022
123142
mehrbedarf_bei_schwerbehinderungsgrad_g:
124143
name:
125144
de: Mehrbedarf bei Schwerbehinderung

src/gettsim/germany/grundsicherung/im_alter/im_alter.py

Lines changed: 71 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,26 @@
1717
RegelsatzAnteilsbasiert,
1818
)
1919

20-
from gettsim.tt import policy_function
20+
from gettsim.tt import AggType, agg_by_p_id_function, policy_function
2121

2222

2323
@policy_function(start_date="2005-01-01")
2424
def betrag_m(
2525
anspruchshöhe_m: float,
2626
vorrangprüfungen__wohngeld_kinderzuschlag_vorrangig_oder_günstiger: bool,
27+
hat_kind_über_einkommensgrenze: bool,
2728
) -> float:
28-
"""Grundsicherung im Alter after Vorrangprüfung (§2 Abs. 1 SGB XII)."""
29-
if vorrangprüfungen__wohngeld_kinderzuschlag_vorrangig_oder_günstiger:
29+
"""Grundsicherung im Alter after Vorrangprüfung and 100k-children exclusion.
30+
31+
§43 SGB XII (BGBl. I 2003 S. 3022): Persons are excluded from Grundsicherung im
32+
Alter if any first-degree descendant has annual Gesamteinkommen (§16 SGB IV)
33+
exceeding the threshold.
34+
§2 Abs. 1 SGB XII: Vorrangprüfung.
35+
"""
36+
if (
37+
hat_kind_über_einkommensgrenze
38+
or vorrangprüfungen__wohngeld_kinderzuschlag_vorrangig_oder_günstiger
39+
):
3040
return 0.0
3141
else:
3242
return anspruchshöhe_m
@@ -254,3 +264,61 @@ def vermögensfreibetrag_eg(
254264
parameter_vermögensfreibetrag["erwachsene"] * familie__anzahl_erwachsene_eg
255265
+ parameter_vermögensfreibetrag["kinder"] * familie__anzahl_kinder_eg
256266
)
267+
268+
269+
# --- 100k children exclusion (§43 SGB XII) ---
270+
271+
272+
@policy_function(start_date="2005-01-01")
273+
def hat_gesamteinkommen_über_einkommensgrenze(
274+
einkommensteuer__einkünfte__gesamtbetrag_der_einkünfte_y: float,
275+
einkommensgrenze_kinder: float,
276+
) -> bool:
277+
"""Whether a person's Gesamteinkommen exceeds the children's income threshold.
278+
279+
Used to determine if a child's income excludes a parent from Grundsicherung im
280+
Alter. The relevant income concept is Gesamteinkommen per § 16 SGB IV, approximated
281+
here by the Gesamtbetrag der Einkünfte (§ 2 Abs. 3 EStG).
282+
283+
Reference: § 43 SGB XII (BGBl. I 2003 S. 3022)
284+
"""
285+
return (
286+
einkommensteuer__einkünfte__gesamtbetrag_der_einkünfte_y
287+
>= einkommensgrenze_kinder
288+
)
289+
290+
291+
@agg_by_p_id_function(agg_type=AggType.SUM)
292+
def anzahl_kinder_über_einkommensgrenze_über_elternteil_1(
293+
hat_gesamteinkommen_über_einkommensgrenze: bool,
294+
familie__p_id_elternteil_1: int,
295+
p_id: int,
296+
) -> int:
297+
pass
298+
299+
300+
@agg_by_p_id_function(agg_type=AggType.SUM)
301+
def anzahl_kinder_über_einkommensgrenze_über_elternteil_2(
302+
hat_gesamteinkommen_über_einkommensgrenze: bool,
303+
familie__p_id_elternteil_2: int,
304+
p_id: int,
305+
) -> int:
306+
pass
307+
308+
309+
@policy_function(start_date="2005-01-01")
310+
def hat_kind_über_einkommensgrenze(
311+
anzahl_kinder_über_einkommensgrenze_über_elternteil_1: int,
312+
anzahl_kinder_über_einkommensgrenze_über_elternteil_2: int,
313+
) -> bool:
314+
"""Whether any first-degree child has income above the threshold.
315+
316+
Both parent pointers are checked because a child may point to either parent via
317+
p_id_elternteil_1 or p_id_elternteil_2.
318+
319+
Reference: § 43 SGB XII (BGBl. I 2003 S. 3022)
320+
"""
321+
return (
322+
anzahl_kinder_über_einkommensgrenze_über_elternteil_1
323+
+ anzahl_kinder_über_einkommensgrenze_über_elternteil_2
324+
) > 0

src/gettsim/tests_germany/policy_cases/grundsicherung/im_alter/2010-07-01/mehrbedarf_bei_schwerbehinderung.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,16 @@ inputs:
3030
- 0.0
3131
- 0.0
3232
einkünfte:
33+
aus_forst_und_landwirtschaft:
34+
betrag_y:
35+
- 0.0
36+
- 0.0
37+
- 0.0
38+
aus_gewerbebetrieb:
39+
betrag_y:
40+
- 0.0
41+
- 0.0
42+
- 0.0
3343
aus_selbstständiger_arbeit:
3444
betrag_m:
3545
- 0.0

src/gettsim/tests_germany/policy_cases/grundsicherung/im_alter/2017-07-01/hh_id_13.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,14 @@ inputs:
2525
- 0.0
2626
- 0.0
2727
einkünfte:
28+
aus_forst_und_landwirtschaft:
29+
betrag_y:
30+
- 0.0
31+
- 0.0
32+
aus_gewerbebetrieb:
33+
betrag_y:
34+
- 0.0
35+
- 0.0
2836
aus_selbstständiger_arbeit:
2937
betrag_m:
3038
- 0.0

src/gettsim/tests_germany/policy_cases/grundsicherung/im_alter/2017-07-01/hh_id_16.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,12 @@ inputs:
1818
betrag_y_sn:
1919
- 0.0
2020
einkünfte:
21+
aus_forst_und_landwirtschaft:
22+
betrag_y:
23+
- 0.0
24+
aus_gewerbebetrieb:
25+
betrag_y:
26+
- 0.0
2127
aus_selbstständiger_arbeit:
2228
betrag_m:
2329
- 0.0

src/gettsim/tests_germany/policy_cases/grundsicherung/im_alter/2017-07-01/hh_id_17.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,12 @@ inputs:
1818
betrag_y_sn:
1919
- 0.0
2020
einkünfte:
21+
aus_forst_und_landwirtschaft:
22+
betrag_y:
23+
- 0.0
24+
aus_gewerbebetrieb:
25+
betrag_y:
26+
- 0.0
2127
aus_selbstständiger_arbeit:
2228
betrag_m:
2329
- 0.0

src/gettsim/tests_germany/policy_cases/grundsicherung/im_alter/2017-07-01/hh_id_6.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,14 @@ inputs:
2222
- 0.0
2323
- 0.0
2424
einkünfte:
25+
aus_forst_und_landwirtschaft:
26+
betrag_y:
27+
- 0.0
28+
- 0.0
29+
aus_gewerbebetrieb:
30+
betrag_y:
31+
- 0.0
32+
- 0.0
2533
aus_selbstständiger_arbeit:
2634
betrag_m:
2735
- 0.0

src/gettsim/tests_germany/policy_cases/grundsicherung/im_alter/2017-07-01/kein_freibetrag_zusaetzliche_altersvorsorge.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,12 @@ inputs:
2121
betrag_y_sn:
2222
- 0.0
2323
einkünfte:
24+
aus_forst_und_landwirtschaft:
25+
betrag_y:
26+
- 0.0
27+
aus_gewerbebetrieb:
28+
betrag_y:
29+
- 0.0
2430
aus_selbstständiger_arbeit:
2531
betrag_m:
2632
- 0.0

src/gettsim/tests_germany/policy_cases/grundsicherung/im_alter/2018-07-01/berufsständische_versorgung_kein_freibetrag.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,12 @@ inputs:
2121
betrag_y_sn:
2222
- 0.0
2323
einkünfte:
24+
aus_forst_und_landwirtschaft:
25+
betrag_y:
26+
- 0.0
27+
aus_gewerbebetrieb:
28+
betrag_y:
29+
- 0.0
2430
aus_selbstständiger_arbeit:
2531
betrag_m:
2632
- 0.0

src/gettsim/tests_germany/policy_cases/grundsicherung/im_alter/2018-07-01/erwerbseinkommen.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,12 @@ inputs:
2323
betrag_y_sn:
2424
- 0.0
2525
einkünfte:
26+
aus_forst_und_landwirtschaft:
27+
betrag_y:
28+
- 0.0
29+
aus_gewerbebetrieb:
30+
betrag_y:
31+
- 0.0
2632
aus_selbstständiger_arbeit:
2733
betrag_m:
2834
- 0.0

0 commit comments

Comments
 (0)