Skip to content
1 change: 1 addition & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ releases are available on [Anaconda.org](https://anaconda.org/conda-forge/gettsi

## Unpublished

- {gh}`790` Add unterhaltsvors implementation 2009 to 2016 ({ghuser}`mjbloemer`).
- {gh}`788` Pension benefit earnings test for early retirees ({ghuser}`MImmesberger`).
- {gh}`786` Check directly whether child and parent are in same Bedarfsgemeinschaft for
Kindergeldübertrag ({ghuser}`MImmesberger`).
Expand Down
13 changes: 0 additions & 13 deletions src/_gettsim/interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -149,19 +149,6 @@ def compute_taxes_and_transfers( # noqa: PLR0913
enforce_signature=True,
)

if "unterhalt" in params:
if (
"mindestunterhalt" not in params["unterhalt"]
and "unterhaltsvors_m" in processed_functions
):
raise NotImplementedError(
"""
Unterhaltsvorschuss is not implemented yet prior to 2016, see
https://github.com/iza-institute-of-labor-economics/gettsim/issues/479.

"""
)

results = tax_transfer_function(**input_data)

# Prepare results.
Expand Down
53 changes: 52 additions & 1 deletion src/_gettsim/parameters/unterhaltsvors.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ altersgrenzen:
payments. In addition, children up to the age of 18 receive advance on alimony
payments if the parent has income beyond a minimal threshold.
reference: § 1 Abs. 1, 1a UhVorschG
2017-01-01:
2009-01-01:
1: 6
2: 12
3: 18
Expand All @@ -57,3 +57,54 @@ rounding:
base: 1
direction: up
reference: § 9 Abs. 3 UhVorschG
unterhaltsvors_anwendungsvors:
name:
de: Unterhaltsvorschuss für Kinder entsprechend Anwendungsvorschriften
en: Advance Child Alimony according to application regulations
description:
de: >-
Der Unterhaltsvorschuss wird 2009 bis 2015 prinzipiell berechnet basierend auf den
Parametern Kinderfreibetrag für das sächliche Existenzminimum und dem Kindergeld
für das erste Kind. Wird das Kindergeld unterjährig geändert oder der
Kinderfreibetrag unterjährig rückwirkend geändert, gelten abweichende
Abwendungsvorschriften, die von unveränderten Werten für Kindergeld bzw.
Kinderfreibetrag ausgehen können. Hier werden die entsprechenden Werte für den
Unterhaltsvorschuss (d.h. nach Abzug des unterstellten Kindergeldes) verwendet.
en: >-
The advance child alimony is calculated in principle from 2009 to 2015 based on
the parameters parameters child allowance for the material minimum subsistence
level and child benefit for the first child. If the child benefit is changed
during the year or the or the child allowance is changed retroactively during the
year, deviating application rules apply, which can be based on unchanged values
for child benefit or child child allowance can be assumed. Here, the corresponding
values for the advance child alimony (i.e. after deduction of the assumed child
benefit) are used.
unit: Euro
reference_period: Month
2015-01-01:
6: 133
12: 180
reference:
note: >-
2015-01-01 bis 2015-06-31 errechnete sich der Mindesunterhalt aus einem
Kinderfreibetrag für das sächliche Existenzminimum in Höhe von 2184 Euro und dem
geltenden Kindergeld für das erste Kind in Höhe von 184 Euro. Da der
Kinderfreibetragtrospektiv Mitte des Jahres retrospektiv angehoben wurde, gilt im
Zuge dessen eine Anwendungsvorschrift, die den alten Kinderfreibetrag für die
Berechnung der Unterhaltsleistung unterstellt. § 11a Anwendungsvorschrift: "Im
Sinne dieses Gesetzes beträgt für die Zeit vom 1. Januar 2015 bis zum 30. Juni
2015 die Unterhaltsleistung nach § 2 Absatz 1 Satz 1 monatlich 317 Euro für ein
Kind, das das sechste Lebensjahr noch nicht vollendet hat, und monatlich 364 Euro
für ein Kind, das das zwölfte Lebensjahr noch nicht vollendet hat."
2015-07-01:
6: 144
12: 192
reference: Artikel 9 Gesetz v. 16.07.2015 BGBl. I S. 1202.
note: >-
§ 11a Anwendungsvorschrift: "Für die Zeit vom 1. Juli 2015 bis zum 31.
Dezember 2015 beträgt die Unterhaltsleistung nach § 2 Absatz 1 Satz 1 monatlich
328 Euro für ein Kind, das das sechste Lebensjahr noch nicht vollendet hat, und
monatlich 376 Euro für ein Kind, das das zwölfte Lebensjahr noch nicht vollendet
hat. 3Bis zum 31. Dezember 2015 gilt als für ein erstes Kind zu zahlendes
Kindergeld im Sinne von § 2 Absatz 2 Satz 1 ein Betrag in Höhe von monatlich 184
Euro."
159 changes: 152 additions & 7 deletions src/_gettsim/transfers/unterhaltsvors.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
}


@policy_info(start_date="2017-01-01", params_key_for_rounding="unterhaltsvors")
@policy_info(start_date="2009-01-01", params_key_for_rounding="unterhaltsvors")
def unterhaltsvors_m(
kind_unterh_erhalt_m: float,
_unterhaltsvors_anspruch_kind_m: float,
Expand Down Expand Up @@ -59,15 +59,14 @@ def unterhaltsvors_m(


@policy_info(
end_date="2016-12-31",
end_date="2008-12-31",
name_in_dag="unterhaltsvors_m",
params_key_for_rounding="unterhaltsvors",
)
def unterhaltsvors_not_implemented_m() -> float:
raise NotImplementedError(
"""
Unterhaltsvorschuss is not implemented prior to 2017.
https://github.com/iza-institute-of-labor-economics/gettsim/issues/566
Unterhaltsvorschuss is not implemented prior to 2009.
"""
)

Expand Down Expand Up @@ -144,15 +143,161 @@ def _kindergeld_erstes_kind_gestaffelt_m(
return kindergeld_params["kindergeld"][1]


@policy_info(start_date="2017-01-01")
def _unterhaltsvors_anspruch_kind_m(
@policy_info(
start_date="2009-01-01",
end_date="2014-12-31",
name_in_dag="_unterhaltsvors_anspruch_kind_m",
)
def _unterhaltsvors_anspruch_kind_m_2009_bis_2014(
alter: int,
_kindergeld_erstes_kind_m: float,
unterhaltsvors_params: dict,
eink_st_abzuege_params: dict,
) -> float:
"""Claim for advance on alimony payment (Unterhaltsvorschuss) on child level for the
years 2009 to 2014.

Relevant parameter is directly 'steuerfrei zu stellenden sächlichen Existenzminimum
des minderjährigen Kindes' § 1612a (1). Modeling relative to the child allowance for
this. The amout for the lower age group is defined relative to the middle age group
with a factor of 0.87. There is probably a rounding rule documented somewhere in
some (Durchführungs-)Verordnung.

Rule was in priciple also active for 2015 but has been overwritten by an
Anwendungsvorschrift as Kinderfreibetrag and Kindergeld changed on July 2015.

Parameters
----------
alter
See basic input variable :ref:`alter <alter>`.
_kindergeld_erstes_kind_m
See :func:`_kindergeld_erstes_kind_m`.
eink_st_abzuege_params
See params documentation :ref:`eink_st_abzuege_params <eink_st_abzuege_params>`.
unterhaltsvors_params
See params documentation :ref:`unterhaltsvors_params <unterhaltsvors_params>`.

Returns
-------

"""
altersgrenzen = unterhaltsvors_params["altersgrenzen"]

kinderfreib_sächl_existenzmin = eink_st_abzuege_params["kinderfreib"][
"sächl_existenzmin"
]

if alter < altersgrenzen[1]:
out = (
0.87 * (2 * kinderfreib_sächl_existenzmin / 12) - _kindergeld_erstes_kind_m
)
elif altersgrenzen[1] <= alter < altersgrenzen[2]:
out = 2 * kinderfreib_sächl_existenzmin / 12 - _kindergeld_erstes_kind_m
else:
out = 0.0

return out


@policy_info(
start_date="2015-01-01",
end_date="2015-12-31",
name_in_dag="_unterhaltsvors_anspruch_kind_m",
)
def _unterhaltsvors_anspruch_kind_m_anwendungsvors(
alter: int,
unterhaltsvors_params: dict,
) -> float:
"""Claim for advance on alimony payment (Unterhaltsvorschuss) on child level over
the year 2015.

Rule _unterhaltsvors_anspruch_kind_m_2009_bis_2014 was in priciple also active for
2015 but has been overwritten by an Anwendungsvorschrift as Kinderfreibetrag and
Kindergeld changed on July 2015.

Parameters
----------
alter
See basic input variable :ref:`alter <alter>`.
unterhaltsvors_params
See params documentation :ref:`unterhaltsvors_params <unterhaltsvors_params>`.

Returns
-------

"""
altersgrenzen = unterhaltsvors_params["altersgrenzen"]

unterhaltsvors = unterhaltsvors_params["unterhaltsvors_anwendungsvors"]

if alter < altersgrenzen[1]:
out = unterhaltsvors[altersgrenzen[1]]
elif altersgrenzen[1] <= alter < altersgrenzen[2]:
out = unterhaltsvors[altersgrenzen[2]]
else:
out = 0.0

return out


@policy_info(
start_date="2016-01-01",
end_date="2016-12-31",
name_in_dag="_unterhaltsvors_anspruch_kind_m",
)
def _unterhaltsvors_anspruch_kind_m_2016(
alter: int,
_kindergeld_erstes_kind_m: float,
unterhalt_params: dict,
unterhaltsvors_params: dict,
) -> float:
"""Claim for advance on alimony payment (Unterhaltsvorschuss) on child level for the
year 2016.

§ 2 Unterhaltsvorschussgesetz refers to Section § 1612a BGB. There still is the
reference to 'steuerfrei zu stellenden sächlichen Existenzminimum des minderjährigen
Kindes' (§ 1612a (1)) as well as a Verordnungsermächtigung (§ 1612a (4)). The § 1
Mindesunterhaltsverordnung applies fixed amounts and no relative definition as
before.

Parameters
----------
alter
See basic input variable :ref:`alter <alter>`.
_kindergeld_erstes_kind_m
See :func:`_kindergeld_erstes_kind_m`.
unterhalt_params
See params documentation :ref:`unterhalt_params <unterhalt_params>`.
unterhaltsvors_params
See params documentation :ref:`unterhaltsvors_params <unterhaltsvors_params>`.

Returns
-------

"""
altersgrenzen = unterhaltsvors_params["altersgrenzen"]
mindestunterhalt = unterhalt_params["mindestunterhalt"]

if alter < altersgrenzen[1]:
out = mindestunterhalt[altersgrenzen[1]] - _kindergeld_erstes_kind_m
elif altersgrenzen[1] <= alter < altersgrenzen[2]:
out = mindestunterhalt[altersgrenzen[2]] - _kindergeld_erstes_kind_m
else:
out = 0.0

return out


@policy_info(start_date="2017-01-01", name_in_dag="_unterhaltsvors_anspruch_kind_m")
def _unterhaltsvors_anspruch_kind_m_ab_2017(
alter: int,
_unterhaltsvorschuss_empf_eink_above_income_threshold: bool,
_kindergeld_erstes_kind_m: float,
unterhalt_params: dict,
unterhaltsvors_params: dict,
) -> float:
"""Claim for advance on alimony payment (Unterhaltsvorschuss) on child level.
"""Claim for advance on alimony payment (Unterhaltsvorschuss) on child level since
2017.

Parameters
----------
Expand Down