Skip to content
6 changes: 3 additions & 3 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ repos:
- id: check-useless-excludes
# - id: identity # Prints all files passed to pre-commits. Debugging.
- repo: https://github.com/lyz-code/yamlfix
rev: 1.16.0
rev: 1.17.0
hooks:
- id: yamlfix
- repo: https://github.com/pre-commit/pre-commit-hooks
Expand Down Expand Up @@ -57,7 +57,7 @@ repos:
- id: blacken-docs
# exclude: docs/source/how_to_guides/optimization/how_to_specify_constraints.md
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.6.1
rev: v0.6.3
hooks:
- id: ruff
# args:
Expand Down Expand Up @@ -103,7 +103,7 @@ repos:
- '88'
files: (docs/.|CHANGES.md|CODE_OF_CONDUCT.md)
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v1.11.1
rev: v1.11.2
hooks:
- id: mypy
args:
Expand Down
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
80 changes: 74 additions & 6 deletions src/_gettsim/parameters/unterhaltsvors.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -30,25 +30,93 @@ altersgrenze_mindesteinkommen:
2017-01-01:
scalar: 12
reference: Art. 23 G. v. 14.08.2017 BGBl. I S. 3122.
altersgrenzen:
altersgrenzen_bezug:
name:
de: Altersgrenzen für den Bezug von Unterhaltsvorschuss
en: age limits for receiving alimony payments
description:
de: >-
Kinder, die das 12. Lebensjahr noch nicht vollendet haben und bei einem
alleinerziehenden Elternteil leben haben Anspruch auf Unterhaltszahlungen. Zudem
können auch Kinder bis zur Vollendung des 18. Lebensjahres Unterhaltsvorschuss
bekommen, wenn das Elternteil ein Mindesteinkommen hat.
können seit Juli 2017 auch Kinder bis zur Vollendung des 18. Lebensjahres
Unterhaltsvorschuss bekommen, wenn das Elternteil ein Mindesteinkommen hat.
en: >-
Children under the age of 12 living with a single parent are entitled to alimony
payments. In addition, children up to the age of 18 receive advance on alimony
payments if the parent has income beyond a minimal threshold.
payments. In addition, since July 2017, 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:
2008-01-01:
1: 6
2: 12
reference: G. v. 21.12.2007 BGBl. I S. 3194
2017-07-01:
1: 6
2: 12
3: 18
reference: Artikel 23 G. v. 14.08.2017 BGBl. I S. 3122
note: New age group 12 to 17 introduced (§ 1 new Abs. 1a UhVorschG).
faktor_jüngste_altersgruppe:
name:
de: >-
Faktor mit dem das sächliche Existenzminimum multipliziert wird um den
Unterhaltsvorschuss für Kinder der jüngsten Altersgruppe zu berechnen.
en: >-
Factor by which the sächliche Existenzminimum is multiplied to calculate
the advance child alimony for children of the youngest age group.
2009-01-01:
scalar: 0.87
reference: § 1612a Abs. 1 BGB
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
Anwendungsvorschriften, 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' (Kinderfreibetrag für das sächliche Existenzminimum) and Kindergeld for the
first child. If the Kindergeld 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 Kindergeld or child child
allowance can be assumed. Here, the corresponding values for the advance child
alimony (i.e. after deduction of the assumed Kindergeld) are used.
unit: Euro
reference_period: Month
2015-01-01:
6: 133
12: 180
reference: null
note: >-
Der Mindesunterhalt errechnet sich 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 Kinderfreibetrag 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."
rounding:
unterhaltsvors_m:
note:
Expand Down
160 changes: 153 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,8 +143,153 @@ 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.

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.

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
-------

"""
# TODO(@MImmesberger): Remove explicit parameter conversion.
# https://github.com/iza-institute-of-labor-economics/gettsim/issues/575
altersgrenzen = unterhaltsvors_params["altersgrenzen_bezug"]

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

if alter < altersgrenzen[1]:
out = (
unterhaltsvors_params["faktor_jüngste_altersgruppe"]
* (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.

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 in 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_bezug"]

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="2017-06-30",
name_in_dag="_unterhaltsvors_anspruch_kind_m",
)
def _unterhaltsvors_anspruch_kind_m_2016_bis_201706(
alter: int,
_kindergeld_erstes_kind_m: float,
unterhalt_params: dict,
unterhaltsvors_params: dict,
) -> float:
"""Claim for advance on alimony payment (Unterhaltsvorschuss) on child level.

§ 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_bezug"]
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-07-01", name_in_dag="_unterhaltsvors_anspruch_kind_m")
def _unterhaltsvors_anspruch_kind_m_ab_201707(
alter: int,
_unterhaltsvorschuss_empf_eink_above_income_threshold: bool,
_kindergeld_erstes_kind_m: float,
Expand All @@ -154,6 +298,8 @@ def _unterhaltsvors_anspruch_kind_m(
) -> float:
"""Claim for advance on alimony payment (Unterhaltsvorschuss) on child level.

Introduction of a minimum income threshold if child is older than some threshold.

Parameters
----------
alter
Expand All @@ -171,7 +317,7 @@ def _unterhaltsvors_anspruch_kind_m(
-------

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

if alter < altersgrenzen[1]:
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
---
info:
note: One child in the middle age group (6-11).
source: https://www.bmfsfj.de/bmfsfj/aktuelles/alle-meldungen/familien-werden-ab-2010-staerker-entlastet-100030
inputs:
provided:
p_id:
- 0
- 1
hh_id:
- 0
- 0
p_id_elternteil_1:
- -1
- 0
p_id_elternteil_2:
- -1
- -1
p_id_kindergeld_empf:
- -1
- 0
alter:
- 45
- 8
alleinerz:
- true
- false
kind_unterh_erhalt_m:
- 0.0
- 0.0
assumed: {}
outputs:
unterhaltsvors_m:
- 0.0
- 158.0
Loading