Source code for _gettsim.taxes.eink_st

from _gettsim.piecewise_functions import piecewise_polynomial
from _gettsim.shared import add_rounding_spec, dates_active


[docs]def eink_st_ohne_kinderfreib_tu( _zu_verst_eink_ohne_kinderfreib_tu: float, anz_erwachsene_tu: int, eink_st_params: dict, ) -> float: """Taxes without child allowance on tax unit level. Also referred to as "tarifliche ESt II". Parameters ---------- _zu_verst_eink_ohne_kinderfreib_tu See :func:`_zu_verst_eink_ohne_kinderfreib_tu`. anz_erwachsene_tu See :func:`anz_erwachsene_tu`. eink_st_params See params documentation :ref:`eink_st_params <eink_st_params>`. Returns ------- """ zu_verst_eink_per_indiv = _zu_verst_eink_ohne_kinderfreib_tu / anz_erwachsene_tu out = anz_erwachsene_tu * _eink_st_tarif( zu_verst_eink_per_indiv, params=eink_st_params ) return out
[docs]def eink_st_mit_kinderfreib_tu( zu_verst_eink_mit_kinderfreib_tu: float, anz_erwachsene_tu: int, eink_st_params: dict, ) -> float: """Taxes with child allowance on tax unit level. Also referred to as "tarifliche ESt I". Parameters ---------- zu_verst_eink_mit_kinderfreib_tu See :func:`zu_verst_eink_mit_kinderfreib_tu`. anz_erwachsene_tu See :func:`anz_erwachsene_tu`. eink_st_params See params documentation :ref:`eink_st_params <eink_st_params>`. Returns ------- """ zu_verst_eink_per_indiv = zu_verst_eink_mit_kinderfreib_tu / anz_erwachsene_tu out = anz_erwachsene_tu * _eink_st_tarif( zu_verst_eink_per_indiv, params=eink_st_params ) return out
def _eink_st_tarif(x: float, params: dict) -> float: """The German income tax tariff. Parameters ---------- x : float The series of floats which the income tax schedule is applied to. params : dict Dictionary created in respy.piecewise_functions. Returns ------- """ out = piecewise_polynomial( x=x, thresholds=params["eink_st_tarif"]["thresholds"], rates=params["eink_st_tarif"]["rates"], intercepts_at_lower_thresholds=params["eink_st_tarif"][ "intercepts_at_lower_thresholds" ], ) return out
[docs]@dates_active(end="1996-12-31", change_name="eink_st_tu") @add_rounding_spec(params_key="eink_st") def eink_st_tu_kindergeld_kinderfreib_parallel( eink_st_mit_kinderfreib_tu: float, ) -> float: """Income tax calculation on tax unit level allowing for claiming Kinderfreibetrag and receiving Kindergeld at the same time. Parameters ---------- eink_st_mit_kinderfreib_tu See :func:`eink_st_mit_kinderfreib_tu`. Returns ------- """ return eink_st_mit_kinderfreib_tu
[docs]@dates_active(start="1997-01-01", change_name="eink_st_tu") @add_rounding_spec(params_key="eink_st") def eink_st_tu_kindergeld_oder_kinderfreib( eink_st_ohne_kinderfreib_tu: float, eink_st_mit_kinderfreib_tu: float, kinderfreib_günstiger_tu: bool, eink_st_rel_kindergeld_tu: float, ) -> float: """Income tax calculation on tax unit level since 1997. Parameters ---------- eink_st_ohne_kinderfreib_tu See :func:`eink_st_ohne_kinderfreib_tu`. eink_st_mit_kinderfreib_tu See :func:`eink_st_mit_kinderfreib_tu`. kinderfreib_günstiger_tu See :func:`kinderfreib_günstiger_tu`. eink_st_rel_kindergeld_tu See :func:`eink_st_rel_kindergeld_tu`. Returns ------- """ if kinderfreib_günstiger_tu: out = eink_st_mit_kinderfreib_tu + eink_st_rel_kindergeld_tu else: out = eink_st_ohne_kinderfreib_tu return out
[docs]def kinderfreib_günstiger_tu( eink_st_ohne_kinderfreib_tu: float, eink_st_mit_kinderfreib_tu: float, eink_st_rel_kindergeld_tu: float, ) -> bool: """Return whether Kinderfreibetrag is more favorable than Kindergeld. Parameters ---------- eink_st_ohne_kinderfreib_tu See :func:`eink_st_ohne_kinderfreib_tu`. eink_st_mit_kinderfreib_tu See :func:`eink_st_mit_kinderfreib_tu`. eink_st_rel_kindergeld_tu See :func:`eink_st_rel_kindergeld_tu`. Returns ------- """ unterschiedsbeitrag = eink_st_ohne_kinderfreib_tu - eink_st_mit_kinderfreib_tu out = unterschiedsbeitrag > eink_st_rel_kindergeld_tu return out
[docs]def eink_st_rel_kindergeld_tu( kindergeld_m_tu: float, kinderbonus_m_tu: float, anz_erwachsene_tu: int, ) -> float: """Return Kindergeld relevant for income tax of the tax unit. For parents which do not file taxes together, only half of Kindergeld is considered. Source: § 31 Satz 4 EStG: "Bei nicht zusammenveranlagten Eltern wird der Kindergeldanspruch im Umfang des Kinderfreibetrags angesetzt." # ToDo: This factor need to be refactored once children are put in separate tax # ToDo: units and are linked to their parents (one or two) Parameters ---------- kindergeld_m_tu See :func:`kindergeld_m_tu`. kinderbonus_m_tu See :func:`kinderbonus_m_tu`. anz_erwachsene_tu See :func:`anz_erwachsene_tu`. Returns ------- """ out = 12 * (kindergeld_m_tu + kinderbonus_m_tu) * (anz_erwachsene_tu / 2) return out