iza-institute-of-labor-economics / gettsim

The GErman Taxes and Transfers SIMulator
https://gettsim.readthedocs.io/
GNU Affero General Public License v3.0
55 stars 32 forks source link

Arbeitslosengeld should be based on gross income #303

Closed ChristianZimpelmann closed 2 years ago

ChristianZimpelmann commented 2 years ago

Bug description

Arbeitslosengeld currently depends on proxy_eink_vorj which is an approximation of last years net income. It should be, however, based on gross income.

Screenshots/Error messages

def proxy_eink_vorj(
    rentenv_beitr_bemess_grenze: FloatSeries,
    bruttolohn_vorj_m: FloatSeries,
    arbeitsl_geld_params: dict,
    eink_st_params: dict,
    eink_st_abzuege_params: dict,
    soli_st_params: dict,
) -> FloatSeries:
    """Approximate last years income for unemployment benefit.

    Parameters
    ----------
    rentenv_beitr_bemess_grenze
        See :func:`rentenv_beitr_bemess_grenze`.
    bruttolohn_vorj_m
        See basic input variable :ref:`bruttolohn_vorj_m <bruttolohn_vorj_m>`.
    arbeitsl_geld_params
        See params documentation :ref:`arbeitsl_geld_params <arbeitsl_geld_params>`.
    eink_st_params
        See params documentation :ref:`eink_st_params <eink_st_params>`.
    eink_st_abzuege_params
        See params documentation :ref:`eink_st_abzuege_params <eink_st_abzuege_params>`.
    soli_st_params
        See params documentation :ref:`soli_st_params <soli_st_params>`.

    Returns
    -------

    """
    # Relevant wage is capped at the contribution thresholds
    max_wage = bruttolohn_vorj_m.clip(lower=None, upper=rentenv_beitr_bemess_grenze)

    # We need to deduct lump-sum amounts for contributions, taxes and soli
    prox_ssc = arbeitsl_geld_params["soz_vers_pausch_arbeitsl_geld"] * max_wage

    # Fictive taxes (Lohnsteuer) are approximated by applying the wage to the tax tariff
    prox_tax = st_tarif(
        12 * max_wage - eink_st_abzuege_params["werbungskostenpauschale"],
        eink_st_params,
    )
    prox_soli = piecewise_polynomial(
        prox_tax,
        thresholds=soli_st_params["soli_st"]["thresholds"],
        rates=soli_st_params["soli_st"]["rates"],
        intercepts_at_lower_thresholds=soli_st_params["soli_st"][
            "intercepts_at_lower_thresholds"
        ],
    )

    return (max_wage - prox_ssc - prox_tax / 12 - prox_soli / 12).clip(lower=0)

System

hmgaudecker commented 2 years ago

Thanks! Would be great to include references to laws / regulations on this sort of issue, that facilitates discussions.

This is not the most scientific reference, but at least official:

https://www.arbeitsagentur.de/finanzielle-hilfen/arbeitslosengeld-anspruch-hoehe-dauer

So wird das Arbeitslosengeld berechnet (vereinfacht dargestellt):

Grundlage der Berechnung ist Ihr Brutto-Arbeitsentgelt (Gehalt) der vergangenen 12 Monate. Dieser Betrag wird geteilt durch die Anzahl der Tage eines Jahres, also 365. Das Ergebnis ist Ihr Brutto-Arbeitsentgelt pro Tag.

Davon werden die Lohnsteuer, der Solidaritätszuschlag und ein Pauschalbetrag für die Sozialversicherung in Höhe von 20 Prozent abgezogen. (Diese Abzüge dienen nur der Berechnung und werden nicht tatsächlich abgeführt.) Das Ergebnis ist Ihr Netto-Entgelt pro Tag.

60 Prozent dieses Netto-Entgelts sind der Betrag, den Sie als Arbeitslosengeld pro Tag erhalten. Er erhöht sich auf 67 Prozent, falls Sie oder Ihr Ehe-/Lebenspartner ein Kind oder mehrere Kinder haben.

So I am not sure in the end? Once we have Lohnsteuer #150, we'll be able to do better, though. Interesting case for thinking about interactions across years (do we want to be able to call GETTSIM with a panel?)

ChristianZimpelmann commented 2 years ago

Thanks for clarifying! I was indeed just confused and too fast on that.. seems to be ok as it is.