Source code for _gettsim.transfers.arbeitsl_geld_2.arbeitsl_geld_2_eink

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


[docs]def arbeitsl_geld_2_eink_m( # noqa: PLR0913 arbeitsl_geld_2_bruttoeink_m: float, eink_st_tu: float, soli_st_tu: float, anz_erwachsene_tu: int, sozialv_beitr_m: float, arbeitsl_geld_2_eink_anr_frei_m: float, kind: bool, ) -> float: """Income (after deduction of taxes, social insurance contributions, and other deductions) for calculation of basic subsistence. Note: Since 2023, Arbeitslosengeld 2 is referred to as Bürgergeld. Parameters ---------- arbeitsl_geld_2_bruttoeink_m See :func:`arbeitsl_geld_2_eink_m`. sozialv_beitr_m See :func:`sozialv_beitr_m`. eink_st_tu See :func:`eink_st_tu`. soli_st_tu See :func:`soli_st_tu`. anz_erwachsene_tu See :func:`anz_erwachsene_tu`. arbeitsl_geld_2_eink_anr_frei_m See :func:`arbeitsl_geld_2_eink_anr_frei_m`. kind See basic input variable :ref:`kind <kind>`. Returns ------- Income of a person by unemployment insurance. """ # ToDo: Implement deduction of child income including allowance of 100 EUR. if kind: # Do not substract income tax as long as children are still part of the tax # unit of their parents # ToDo: Rewrite once children are in a separate tax unit out = ( arbeitsl_geld_2_bruttoeink_m - sozialv_beitr_m - arbeitsl_geld_2_eink_anr_frei_m ) else: out = ( arbeitsl_geld_2_bruttoeink_m - (eink_st_tu / anz_erwachsene_tu / 12) - (soli_st_tu / anz_erwachsene_tu / 12) - sozialv_beitr_m - arbeitsl_geld_2_eink_anr_frei_m ) return out
[docs]def arbeitsl_geld_2_bruttoeink_m( # noqa: PLR0913 bruttolohn_m: float, sonstig_eink_m: float, eink_selbst_m: float, eink_vermietung_m: float, kapitaleink_brutto_m: float, sum_ges_rente_priv_rente_m: float, arbeitsl_geld_m: float, elterngeld_m: float, ) -> float: """Sum up the gross income for calculation of basic subsistence. Note: Since 2023, Arbeitslosengeld 2 is referred to as Bürgergeld. Parameters ---------- bruttolohn_m See basic input variable :ref:`hh_id <hh_id>`. sonstig_eink_m See basic input variable :ref:`sonstig_eink_m <sonstig_eink_m>`. eink_selbst_m See basic input variable :ref:`eink_selbst_m <eink_selbst_m>`. eink_vermietung_m See basic input variable :ref:`eink_vermietung_m <eink_vermietung_m>`. kapitaleink_brutto_m See basic input variable :ref:`kapitaleink_brutto_m <kapitaleink_brutto_m>`. sum_ges_rente_priv_rente_m See basic input variable :ref:`sum_ges_rente_priv_rente_m <sum_ges_rente_priv_rente_m>`. arbeitsl_geld_m See :func:`arbeitsl_geld_m`. elterngeld_m See :func:`elterngeld_m`. Returns ------- Income by unemployment insurance before tax. """ out = ( bruttolohn_m + sonstig_eink_m + eink_selbst_m + eink_vermietung_m + kapitaleink_brutto_m + sum_ges_rente_priv_rente_m + arbeitsl_geld_m + elterngeld_m ) return out
[docs]@dates_active(end="2005-09-30") def arbeitsl_geld_2_nettoquote( # noqa: PLR0913 bruttolohn_m: float, eink_st_tu: float, soli_st_tu: float, anz_erwachsene_tu: int, sozialv_beitr_m: float, arbeitsl_geld_2_params: dict, ) -> float: """Calculate share of net to gross wage. Quotienten von bereinigtem Nettoeinkommen und Bruttoeinkommen. § 3 Abs. 2 Alg II-V. Parameters ---------- bruttolohn_m See basic input variable :ref:`bruttolohn_m <bruttolohn_m>`. eink_st_tu See :func:`eink_st_tu`. soli_st_tu See :func:`soli_st_tu`. anz_erwachsene_tu See :func:`anz_erwachsene_tu`. sozialv_beitr_m See :func:`sozialv_beitr_m`. arbeitsl_geld_2_params See params documentation :ref:`arbeitsl_geld_2_params <arbeitsl_geld_2_params>`. Returns ------- """ # Bereinigtes monatliches Einkommen aus Erwerbstätigkeit nach § 11 Abs. 2 Nr. 1-5. alg2_2005_bne = max( ( bruttolohn_m - (eink_st_tu / anz_erwachsene_tu / 12) - (soli_st_tu / anz_erwachsene_tu / 12) - sozialv_beitr_m - arbeitsl_geld_2_params["abzugsfähige_pausch"]["werbung"] - arbeitsl_geld_2_params["abzugsfähige_pausch"]["versicherung"] ), 0, ) return alg2_2005_bne / bruttolohn_m
[docs]@dates_active( end="2005-09-30", change_name="arbeitsl_geld_2_eink_anr_frei_m", ) def arbeitsl_geld_2_eink_anr_frei_m_basierend_auf_nettoquote( bruttolohn_m: float, arbeitsl_geld_2_nettoquote: float, arbeitsl_geld_2_params: dict, ) -> float: """Share of income which remains to the individual. Parameters ---------- bruttolohn_m See basic input variable :ref:`bruttolohn_m <bruttolohn_m>`. arbeitsl_geld_2_nettoquote See :func:`arbeitsl_geld_2_nettoquote`. arbeitsl_geld_2_params See params documentation :ref:`arbeitsl_geld_2_params <arbeitsl_geld_2_params>`. Returns ------- """ out = piecewise_polynomial( x=bruttolohn_m, thresholds=arbeitsl_geld_2_params["eink_anr_frei"]["thresholds"], rates=arbeitsl_geld_2_params["eink_anr_frei"]["rates"], intercepts_at_lower_thresholds=arbeitsl_geld_2_params["eink_anr_frei"][ "intercepts_at_lower_thresholds" ], rates_multiplier=arbeitsl_geld_2_nettoquote, ) return out
[docs]@dates_active(start="2005-10-01") def arbeitsl_geld_2_eink_anr_frei_m( bruttolohn_m: float, anz_kinder_hh: int, arbeitsl_geld_2_params: dict, ) -> float: """Calculate share of income, which remains to the individual since 10/2005. Note: Since 2023, Arbeitslosengeld 2 is referred to as Bürgergeld. Parameters ---------- bruttolohn_m See basic input variable :ref:`bruttolohn_m <bruttolohn_m>`. anz_kinder_hh See :func:`anz_kinder_hh`. arbeitsl_geld_2_params See params documentation :ref:`arbeitsl_geld_2_params <arbeitsl_geld_2_params>`. Returns ------- """ if anz_kinder_hh > 0: out = piecewise_polynomial( x=bruttolohn_m, thresholds=arbeitsl_geld_2_params["eink_anr_frei_kinder"]["thresholds"], rates=arbeitsl_geld_2_params["eink_anr_frei_kinder"]["rates"], intercepts_at_lower_thresholds=arbeitsl_geld_2_params[ "eink_anr_frei_kinder" ]["intercepts_at_lower_thresholds"], ) else: out = piecewise_polynomial( x=bruttolohn_m, thresholds=arbeitsl_geld_2_params["eink_anr_frei"]["thresholds"], rates=arbeitsl_geld_2_params["eink_anr_frei"]["rates"], intercepts_at_lower_thresholds=arbeitsl_geld_2_params["eink_anr_frei"][ "intercepts_at_lower_thresholds" ], ) return out