Skip to content

Commit 258dff5

Browse files
authored
Remove eigenbedarf_gedeckt from Kindergeldübertrag (#786)
Closes #758
1 parent 3816876 commit 258dff5

File tree

7 files changed

+60
-41
lines changed

7 files changed

+60
-41
lines changed

CHANGES.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ releases are available on [Anaconda.org](https://anaconda.org/conda-forge/gettsi
66

77
## Unpublished
88

9+
- {gh}`786` Check directly whether child and parent are in same Bedarfsgemeinschaft for
10+
Kindergeldübertrag ({ghuser}`MImmesberger`).
911
- {gh}`785` Add NotImplementedError to Unterhaltsvorschuss and test whether output from
1012
`create_synthetic_data` is enough to compute default targets ({ghuser}`MImmesberger`).
1113
- {gh}`772` Add Mindesteinkommen check to Wohngeld, calculate anz_eig_kind_bis_24

src/_gettsim/config.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,9 @@ def set_array_backend(backend: str):
158158
"p_id_einstandspartner": int,
159159
"vermögen_bedürft": float,
160160
"eigenbedarf_gedeckt": bool,
161+
# TODO(@MImmesberger): Remove input variable eigenbedarf_gedeckt once
162+
# Bedarfsgemeinschaften are fully endogenous
163+
# https://github.com/iza-institute-of-labor-economics/gettsim/issues/763
161164
"gemeinsam_veranlagt": bool,
162165
"bruttolohn_m": float,
163166
"alter": int,

src/_gettsim/groupings.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ def bg_id_numpy(
2323
"""
2424
Compute the ID of the Bedarfsgemeinschaft for each person.
2525
"""
26+
# TODO(@MImmesberger): Remove input variable eigenbedarf_gedeckt once
27+
# Bedarfsgemeinschaften are fully endogenous
28+
# https://github.com/iza-institute-of-labor-economics/gettsim/issues/763
2629
counter = Counter()
2730
result = []
2831

src/_gettsim/transfers/arbeitsl_geld_2/kindergelduebertrag.py

Lines changed: 42 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ def _diff_kindergeld_kindbedarf_m( # noqa: PLR0913
108108
kindergeld_zur_bedarfsdeckung_m: float,
109109
kind_unterh_erhalt_m: float,
110110
unterhaltsvors_m: float,
111-
eigenbedarf_gedeckt: bool,
111+
_in_anderer_bedarfsgemeinschaft_als_kindergeldempfänger: bool,
112112
) -> float:
113113
"""Kindergeld that is used to cover the needs (SGB II) of the parent.
114114
@@ -133,19 +133,13 @@ def _diff_kindergeld_kindbedarf_m( # noqa: PLR0913
133133
See :func:`kind_unterh_erhalt_m`.
134134
unterhaltsvors_m
135135
See :func:`unterhaltsvors_m`.
136-
eigenbedarf_gedeckt
137-
See :func:`eigenbedarf_gedeckt`.
136+
_in_anderer_bedarfsgemeinschaft_als_kindergeldempfänger
137+
See :func:`_in_anderer_bedarfsgemeinschaft_als_kindergeldempfänger`.
138138
139139
Returns
140140
-------
141141
142142
"""
143-
# TODO (@MImmesberger): Remove `eigenbedarf_gedeckt` conditions once
144-
# Bedarfsgemeinschaft is fully endogenous. This is a temporary fix. Without it,
145-
# Kindergeld would be counted twice as income of the Bedarfsgemeinschaft (one time
146-
# the full amount for the child and one time the Kindergeldübertrag for the parent -
147-
# because the child doesn't drop out of Bedarfsgemeinschaft endogenously).
148-
# https://github.com/iza-institute-of-labor-economics/gettsim/issues/758
149143
fehlbetrag = max(
150144
arbeitsl_geld_2_regelbedarf_m_bg
151145
- wohngeld_anspruchshöhe_m_bg
@@ -155,9 +149,47 @@ def _diff_kindergeld_kindbedarf_m( # noqa: PLR0913
155149
0.0,
156150
)
157151
# Bedarf not covered or same Bedarfsgemeinschaft as parents
158-
if not eigenbedarf_gedeckt or fehlbetrag > kindergeld_zur_bedarfsdeckung_m:
152+
if (
153+
not _in_anderer_bedarfsgemeinschaft_als_kindergeldempfänger
154+
or fehlbetrag > kindergeld_zur_bedarfsdeckung_m
155+
):
159156
out = 0.0
160157
# Bedarf is covered
161158
else:
162159
out = kindergeld_zur_bedarfsdeckung_m - fehlbetrag
163160
return out
161+
162+
163+
@policy_info(skip_vectorization=True)
164+
def _in_anderer_bedarfsgemeinschaft_als_kindergeldempfänger(
165+
p_id: numpy.ndarray[int],
166+
p_id_kindergeld_empf: numpy.ndarray[int],
167+
bg_id: numpy.ndarray[int],
168+
) -> numpy.ndarray[bool]:
169+
"""True if the person is in a different Bedarfsgemeinschaft than the
170+
Kindergeldempfänger of that person.
171+
172+
Parameters
173+
----------
174+
p_id
175+
See basic input variable :ref:`p_id <p_id>`
176+
p_id_kindergeld_empf
177+
See basic input variable :ref:`p_id_kindergeld_empf <p_id_kindergeld_empf>`
178+
bg_id
179+
See :func:`bg_id`.
180+
181+
Returns
182+
-------
183+
184+
"""
185+
# Create a dictionary to map p_id to bg_id
186+
p_id_to_bg_id = dict(zip(p_id, bg_id))
187+
188+
# Map each p_id_kindergeld_empf to its corresponding bg_id
189+
empf_bg_id = [
190+
p_id_to_bg_id[empfänger_id] if empfänger_id >= 0 else -1
191+
for empfänger_id in p_id_kindergeld_empf
192+
]
193+
194+
# Compare bg_id array with the mapped bg_ids of p_id_kindergeld_empf
195+
return bg_id != empf_bg_id

src/_gettsim_tests/test_data/arbeitsl_geld_2/2024/alleinerz_kein_kindergelduebertrag.yaml

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,6 @@ inputs:
3838
- false
3939
- false
4040
- false
41-
eigenbedarf_gedeckt:
42-
- false
43-
- false
44-
- false
45-
# TODO (@MImmesberger): Remove `eigenbedarf_gedeckt` conditions once
46-
# Bedarfsgemeinschaft is fully endogenous. This is a temporary fix.
47-
# https://github.com/iza-institute-of-labor-economics/gettsim/issues/622
4841
kind:
4942
- false
5043
- true
@@ -157,12 +150,12 @@ inputs:
157150
- false
158151
- false
159152
- false
160-
assumed: {}
153+
assumed:
154+
bg_id:
155+
- 0
156+
- 0
157+
- 0
161158
outputs:
162-
bg_id:
163-
- 0
164-
- 0
165-
- 0
166159
kindergeldübertrag_m:
167160
- 0.0
168161
- 0.0

src/_gettsim_tests/test_data/arbeitsl_geld_2/2024/alleinerz_teilw_kindergelduebertrag.yaml

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,6 @@ inputs:
4040
- false
4141
- false
4242
- false
43-
eigenbedarf_gedeckt:
44-
- false
45-
- false
46-
- true
47-
# TODO (@MImmesberger): Remove `eigenbedarf_gedeckt` conditions once
48-
# Bedarfsgemeinschaft is fully endogenous. This is a temporary fix.
49-
# https://github.com/iza-institute-of-labor-economics/gettsim/issues/622
5043
kind:
5144
- false
5245
- true

src/_gettsim_tests/test_data/arbeitsl_geld_2/2024/alleinerz_voller_kindergelduebertrag.yaml

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,6 @@ inputs:
4040
- false
4141
- false
4242
- false
43-
eigenbedarf_gedeckt:
44-
- false
45-
- false
46-
- true
47-
# TODO (@MImmesberger): Remove `eigenbedarf_gedeckt` conditions once
48-
# Bedarfsgemeinschaft is fully endogenous. This is a temporary fix.
49-
# https://github.com/iza-institute-of-labor-economics/gettsim/issues/622
5043
kind:
5144
- false
5245
- true
@@ -159,12 +152,12 @@ inputs:
159152
- false
160153
- false
161154
- false
162-
assumed: {}
155+
assumed:
156+
bg_id:
157+
- 0
158+
- 0
159+
- 1
163160
outputs:
164-
bg_id:
165-
- 0
166-
- 0
167-
- 1
168161
kindergeldübertrag_m:
169162
- 250.0
170163
- 0.0

0 commit comments

Comments
 (0)