diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index c838073c8e..1126ec705b 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -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.3 + rev: v0.6.4 hooks: - id: ruff # args: diff --git a/CHANGES.md b/CHANGES.md index 4d8d491c2b..f9160bef1b 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -6,6 +6,8 @@ releases are available on [Anaconda.org](https://anaconda.org/conda-forge/gettsi ## Unpublished +- {gh}`756` Refactor Elterngeld module and some small fixes ({ghuser}`MImmesberger`, + {ghuser}`ThOrtmann`). - {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 diff --git a/docs/gettsim_objects/input_variables.md b/docs/gettsim_objects/input_variables.md index 3716b1ee18..3c51eb2b5f 100644 --- a/docs/gettsim_objects/input_variables.md +++ b/docs/gettsim_objects/input_variables.md @@ -247,11 +247,40 @@ Weekly working hours of individual Type: float +(elterngeld_claimed)= + +## `elterngeld_claimed` + +Individual claims Elterngeld + +Type: bool + +(elterngeld_nettoeinkommen_vorjahr_m)= + +## `elterngeld_nettoeinkommen_vorjahr_m` + +Approximation of the net wage in the 12 months before birth of youngest child (according +to simplified calculation rules). You may let GETTSIM compute this variable via the +`elterngeld_nettolohn_approximation_m` target in a separate run, which would typically +be for the previous calendar year. + +Type: float + +(elterngeld_zu_verst_eink_vorjahr_y_sn)= + +## `elterngeld_zu_verst_eink_vorjahr_y_sn` + +Taxable income in the 12 months before birth of youngest child. You may let GETTSIM +compute this variable via the `_zu_verst_eink_mit_kinderfreib_y_sn` target in a separate +run, which would typically be for the previous calendar year. + +Type: float + (bruttolohn_vorj_m)= ## `bruttolohn_vorj_m` -Monthly wage, previous year +Gross wage in the previous year Type: float @@ -295,27 +324,11 @@ Month of retirement Type: int -(m_elterngeld)= - -## `m_elterngeld` - -Number of months hh received elterngeld - -Type: int - -(m_elterngeld_vat_hh)= - -## `m_elterngeld_vat_hh` - -Number of months father received elterngeld - -Type: int - -(m_elterngeld_mut_hh)= +(monate_elterngeldbezug)= -## `m_elterngeld_mut_hh` +## `monate_elterngeldbezug` -Number of months mother received elterngeld +Number of months the individual received Elterngeld for the current youngest child. Type: int diff --git a/docs/how_to_guides/calculating_elterngeld.ipynb b/docs/how_to_guides/calculating_elterngeld.ipynb new file mode 100644 index 0000000000..8aaa682dc0 --- /dev/null +++ b/docs/how_to_guides/calculating_elterngeld.ipynb @@ -0,0 +1,243 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# How to calculate Elterngeld\n", + "\n", + "Elterngeld (parental leave benefit) is a financial support for parents in the first\n", + "months after the birth of a child. It replaces some share of the income before birth\n", + "(usually about 67% of net income). This net income is approximated using simplified\n", + "calculation rules. This document explains how to calculate Elterngeld\n", + "based on historical income data for a given household.\n", + "\n", + "In principle, one can compute Elterngeld in three steps:\n", + "1. Compute the average monthly gross income before birth in the data.\n", + "2. Call GETTSIM with the target `elterngeld_nettolohn_approximation_m` using the policy\n", + " environment of the year **before** the child was born.\n", + "3. Call GETTSIM with the target `elterngeld_m` using the outcome of step 2 as the input\n", + " for `elterngeld_nettoeinkommen_vorjahr_m` and the policy environment of the year the\n", + " child was born.\n", + "\n", + "In the following, we will explain some more details." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example\n", + "\n", + "In the following, we compute Elterngeld for a child that is born in July 2024. The\n", + "parent that receives Elterngeld had a monthly gross wage of 2,000€ in the 12 months\n", + "before birth of the child.\n", + "\n", + "You can find an exemplary Elterngeld application form of the state of Bavaria\n", + "[here](https://www.zbfs.bayern.de/imperia/md/content/zbfs_intranet/produktgruppe_i/formulare/beeg-antrag/2021_09_anlage_n_mit_info_.pdf).\n", + "\n", + "### Step 1: Compute the average monthly gross income before birth\n", + "\n", + "If income from dependent employment is the only source of income, the basis for the\n", + "Elterngeld calculation is the average monthly gross income in the 12 months before the\n", + "birth of a child. In our case, this would be July 2023 until June 2024. If other income\n", + "sources exist, the basis is the average monthly gross income in the calendar year before\n", + "the birth of the child, 2023 in our example. We will stick to the first case here\n", + "because it is the only thing that GETTSIM will handle directly right now.\n", + "\n", + "> **Note**: The Elterngeld implementation in GETTSIM does currently not consider income\n", + "> from self-employment or other sources. See\n", + "> [this](https://github.com/iza-institute-of-labor-economics/gettsim/issues/613) issue.\n", + "\n", + "So let's assume that income from dependent employment is the only source of income. If\n", + "you have only annual income data (and thus cannot compute gross income 12 months before\n", + "birth exactly), you must choose an approximation. In most cases, a good approximation is\n", + "the income of the year before birth.\n", + "\n", + "Here, we use made-up data using the `create_synthetic_data` function." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from gettsim import (\n", + " compute_taxes_and_transfers,\n", + " create_synthetic_data,\n", + " set_up_policy_environment,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The correct point in time for the data, i.e., the relevant state variables for\n", + "determining the net wage, are an interesting case. Many of those may change over time.\n", + "The relevant part is:\n", + "\n", + "> Die entsprechenden Abzugsmerkmale werden den Lohn- oder Gehaltsabrechnungen entnommen.\n", + "> Grundsätzlich sind die Abzugsmerkmale maßgeblich, die in der überwiegenden Zahl der\n", + "> Monate des Bemessungszeitraums vor Geburt des Kindes gegolten haben.\n", + "\n", + "So it is up to the data preparer to find out which tax class (Lohnsteuerklasse), church\n", + "tax (Kirchensteuer), health insurance, etc. to set. The Lohnsteuerklasse, for example, is always set\n", + "on a yearly basis; if it changes with the start of the calendar year a child is born,\n", + "the date of birth matters. Up to June, the Lohnsteuerklasse from the previous calendar\n", + "year will be relevant; for July or later, the Lohnsteuerklasse from the current calendar\n", + "year will be relevant." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "data_before_birth = create_synthetic_data(\n", + " n_adults=2,\n", + " n_children=0,\n", + " specs_heterogeneous={\n", + " \"bruttolohn_m\": [[2000.0, 0.0]],\n", + " },\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Step 2: Approximate net wage before birth\n", + "\n", + "GETTSIM provides an easy way to compute the relevant net wage\n", + "`elterngeld_nettoeinkommen_vorjahr_m` based on step 1 using the target\n", + "`elterngeld_nettolohn_approximation_m`.\n", + "\n", + "We use the policy environment of January 1st of the year before the child was born (§2e\n", + "Abs. 1 S. 2 BEEG). Note that this is correct regardless of the point in time when the\n", + "child is born\n", + "\n", + "In our case, this is January 1st, 2023." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "params_2023, functions_2023 = set_up_policy_environment(2023)\n", + "\n", + "net_wage_approximation = compute_taxes_and_transfers(\n", + " data=data_before_birth,\n", + " functions=functions_2023,\n", + " params=params_2023,\n", + " targets=[\"elterngeld_nettolohn_approximation_m\"],\n", + ")\n", + "\n", + "net_wage_approximation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Step 3: Compute Elterngeld\n", + "\n", + "Finally, we can compute Elterngeld using the target `elterngeld_m` and the net wage\n", + "information from step 2.\n", + "\n", + "The reason for not doing this in one GETTSIM call (together with step 2) is that \n", + "1. we have to use different policy environment dates for the two steps, and\n", + "2. other state variables of the household (e.g. place of residence) might change\n", + "after birth of the child.\n", + "\n", + "First, we create the new data set after birth." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Create data\n", + "params, functions = set_up_policy_environment(2023)\n", + "\n", + "data_after_birth = create_synthetic_data(\n", + " n_adults=2,\n", + " n_children=1,\n", + " specs_heterogeneous={\n", + " \"bruttolohn_m\": [[0.0, 0.0, 0.0]],\n", + " \"geburtsjahr\": [[1980, 1980, 2024]],\n", + " \"geburtsmonat\": [[1, 1, 7]],\n", + " \"alter\": [[44, 44, 0]],\n", + " \"elterngeld_claimed\": [[True, False, False]], # First adult claims Elterngeld\n", + " },\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then, we add `elterngeld_nettoeinkommen_vorjahr_m` to the data based on step 2." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Add net wage approximation\n", + "data_after_birth[\"elterngeld_nettoeinkommen_vorjahr_m\"] = net_wage_approximation[\n", + " \"elterngeld_nettolohn_approximation_m\"\n", + "]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then, we compute Elterngeld using the policy environment of the child's birthday." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "params_2024, functions_2024 = set_up_policy_environment(\"2024-07-01\")\n", + "\n", + "# Compute Elterngeld\n", + "results = compute_taxes_and_transfers(\n", + " data=data_after_birth,\n", + " functions=functions_2024,\n", + " params=params_2024,\n", + " targets=[\"elterngeld_m\"],\n", + ")\n", + "\n", + "results" + ] + } + ], + "metadata": { + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/how_to_guides/index.md b/docs/how_to_guides/index.md index d34c8e0d25..48af13c486 100644 --- a/docs/how_to_guides/index.md +++ b/docs/how_to_guides/index.md @@ -11,4 +11,5 @@ maxdepth: 1 --- different_ways_to_load_policy_functions visualizing_the_system +calculating_elterngeld ``` diff --git a/src/_gettsim/config.py b/src/_gettsim/config.py index 392314a330..f63493476c 100644 --- a/src/_gettsim/config.py +++ b/src/_gettsim/config.py @@ -131,6 +131,7 @@ def set_array_backend(backend: str): "eink_st_y_sn", "soli_st_y_sn", "abgelt_st_y_sn", + "elterngeld_m", "sozialv_beitr_arbeitnehmer_m", "ges_rentenv_beitr_arbeitnehmer_m", "arbeitsl_v_beitr_arbeitnehmer_m", @@ -171,6 +172,8 @@ def set_array_backend(backend: str): "eink_selbst_m": float, "in_priv_krankenv": bool, "priv_rentenv_beitr_m": float, + "elterngeld_nettoeinkommen_vorjahr_m": float, + "elterngeld_zu_verst_eink_vorjahr_y_sn": float, "bruttolohn_vorj_m": float, "arbeitsstunden_w": float, "geburtsjahr": int, @@ -191,9 +194,8 @@ def set_array_backend(backend: str): "monat_renteneintr": int, "behinderungsgrad": int, "wohnfläche_hh": float, - "m_elterngeld": int, - "m_elterngeld_vat_hh": int, - "m_elterngeld_mut_hh": int, + "monate_elterngeldbezug": int, + "elterngeld_claimed": bool, "in_ausbildung": bool, "alleinerz": bool, "bewohnt_eigentum_hh": bool, diff --git a/src/_gettsim/demographic_vars.py b/src/_gettsim/demographic_vars.py index 34457d5e80..a32ecd2b32 100644 --- a/src/_gettsim/demographic_vars.py +++ b/src/_gettsim/demographic_vars.py @@ -52,6 +52,8 @@ def _add_grouping_suffixes_to_keys(group_dict: dict[str, dict]) -> dict[str, dic "anz_rentner": {"source_col": "rentner", "aggr": "sum"}, "anz_kinder": {"source_col": "kind", "aggr": "sum"}, "anz_personen": {"aggr": "count"}, + "anz_kinder_bis_2": {"source_col": "kind_bis_2", "aggr": "sum"}, + "anz_kinder_bis_5": {"source_col": "kind_bis_5", "aggr": "sum"}, "anz_kinder_bis_6": {"source_col": "kind_bis_6", "aggr": "sum"}, "anz_kinder_bis_15": {"source_col": "kind_bis_15", "aggr": "sum"}, "anz_kinder_bis_17": {"source_col": "kind_bis_17", "aggr": "sum"}, @@ -65,6 +67,42 @@ def _add_grouping_suffixes_to_keys(group_dict: dict[str, dict]) -> dict[str, dic ) +def kind_bis_2(alter: int, kind: bool) -> bool: + """Calculate if child under the age of 3. + + Parameters + ---------- + alter + See basic input variable :ref:`alter `. + kind + See basic input variable :ref:`kind `. + + Returns + ------- + + """ + out = kind and (alter <= 2) + return out + + +def kind_bis_5(alter: int, kind: bool) -> bool: + """Calculate if child under the age of 6. + + Parameters + ---------- + alter + See basic input variable :ref:`alter `. + kind + See basic input variable :ref:`kind `. + + Returns + ------- + + """ + out = kind and (alter <= 5) + return out + + def kind_bis_6(alter: int, kind: bool) -> bool: """Calculate if child under the age of 7. @@ -242,7 +280,7 @@ def alter_monate(geburtsdatum: numpy.datetime64, elterngeld_params: dict) -> flo def jüngstes_kind_oder_mehrling( alter_monate: float, - alter_monate_jüngstes_mitglied_hh: float, + alter_monate_jüngstes_mitglied_fg: float, kind: bool, ) -> bool: """Check if person is the youngest child in the household or a twin, triplet, etc. @@ -256,8 +294,8 @@ def jüngstes_kind_oder_mehrling( ---------- alter_monate See :func:`alter_monate`. - alter_monate_jüngstes_mitglied_hh - See :func:`alter_monate_jüngstes_mitglied_hh`. + alter_monate_jüngstes_mitglied_fg + See :func:`alter_monate_jüngstes_mitglied_fg`. kind See basic input variable :ref:`kind `. @@ -265,7 +303,7 @@ def jüngstes_kind_oder_mehrling( ------- """ - out = (alter_monate - alter_monate_jüngstes_mitglied_hh < 0.1) and kind + out = (alter_monate - alter_monate_jüngstes_mitglied_fg < 0.1) and kind return out diff --git a/src/_gettsim/parameters/elterngeld.yaml b/src/_gettsim/parameters/elterngeld.yaml index fe882c4091..12a1aa51fc 100644 --- a/src/_gettsim/parameters/elterngeld.yaml +++ b/src/_gettsim/parameters/elterngeld.yaml @@ -20,8 +20,23 @@ höchstbetrag: unit: Euro reference_period: Month 2007-01-01: - scalar: 1800 + scalar: 1800.0 reference: Art. 1 G. v. 05.12.2006 BGBl. I S. 2748 +max_zu_berücksichtigendes_einkommen: + name: + de: Maximal zu berücksichtigendes Einkommen vor Geburt. + en: Maximum income to be considered before birth. + description: + de: § 2 (3) BEEG + en: null + unit: Euro + reference_period: Month + 2007-01-01: + scalar: 2700.0 + reference: BGBl. I S. 2748 Art. 1 G. v. 05.12.2006 + 2012-09-18: + scalar: 2770.0 + reference: Artikel 1 G. v. 10.09.2012 BGBl. I S. 1878 nettoeinkommen_stufen: name: de: Nettoeinkommen an 1. und 2. Stufe @@ -34,12 +49,12 @@ nettoeinkommen_stufen: unit: Euro reference_period: Month 2007-01-01: - lower_threshold: 1000 - upper_threshold: 1001 + lower_threshold: 1000.0 + upper_threshold: 1001.0 reference: Art. 1 G. v. 05.12.2006 BGBl. I S. 2748 2011-01-01: - lower_threshold: 1000 - upper_threshold: 1201 + lower_threshold: 1000.0 + upper_threshold: 1201.0 reference: Art. 14 G. v. 09.12.2010 BGBl. I S. 1885 mindestbetrag: name: @@ -90,7 +105,7 @@ eink_schritt_korrektur: 2007-01-01: scalar: 2 reference: Art. 1 G. v. 05.12.2006 BGBl. I S. 2748 -geschw_bonus_altersgrenzen_kinder: +geschwisterbonus_altersgrenzen: name: de: Altersgrenzen für Geschwisterbonus en: Age limit for sibling bonus @@ -105,7 +120,7 @@ geschw_bonus_altersgrenzen_kinder: 2007-01-01: 3: 2 6: 3 -geschw_bonus_aufschlag: +geschwisterbonus_aufschlag: name: de: Geschwisterbonus als prozentualer Aufschlag en: Sibling Bonus, percentage top-up @@ -116,7 +131,7 @@ geschw_bonus_aufschlag: 2007-01-01: scalar: 0.1 reference: Art. 1 G. v. 05.12.2006 BGBl. I S. 2748 -geschw_bonus_minimum: +geschwisterbonus_minimum: name: de: Minimaler Geschwisterbonus als Euro-Betrag en: Sibling Bonus, minimal amount @@ -126,7 +141,7 @@ geschw_bonus_minimum: unit: Euro reference_period: Month 2007-01-01: - scalar: 75 + scalar: 75.0 reference: Art. 1 G. v. 05.12.2006 BGBl. I S. 2748 mehrlingbonus: name: @@ -138,7 +153,7 @@ mehrlingbonus: unit: Euro reference_period: Month 2007-01-01: - scalar: 300 + scalar: 300.0 reference: Art. 1 G. v. 05.12.2006 BGBl. I S. 2748 sozialv_pausch: name: @@ -152,23 +167,92 @@ sozialv_pausch: scalar: 0.21 reference: Art. 1 G. v. 10.09.2012 BGBl. I S. 1878 note: .09 + .1 + .02 -max_monate_paar: +max_monate_mit_partnermonate: name: - de: Maximale Anzahl an Monaten, in denen ein Paar Elterngeld erhält - en: Maximum number of months a couple may receive parental benefit. + de: Maximale Anzahl an Monaten, inklusiver Partnermonate. + en: Maximum number of months, including "Partnermonate". description: - de: § 4 (3) BEEG - en: null + de: >- + Basismonate plus "Partnermonate" bei gleichzeitiger Inanspruchnahme von Elterngeld + bei Paaren. Basismonate bei Alleinerziehenden. + reference: § 4 (3) BEEG 2007-01-01: scalar: 14 reference: Art. 1 G. v. 05.12.2006 BGBl. I S. 2748 -max_monate_ind: +max_monate_ohne_partnermonate: name: - de: Maximale Anzahl an Monaten, die jedes Elternteil Elterngeld erhält - en: Maximum number of months an individual parent may receive parental benefit. + de: >- + Maximale Anzahl an Monaten bei Paaren, die nicht gleichzeitig Elterngeld beziehen. + en: Maximum number of months for couples not receiving Elterngeld simultaneously. description: - de: § 4 (3) BEEG + de: Basismonate ohne Partnermonate. en: null + reference: § 4 (3) BEEG 2007-01-01: scalar: 12 reference: Art. 1 G. v. 05.12.2006 BGBl. I S. 2748 +max_eink_vorj: + description: + de: >- + Maximales zu versteuerndes Einkommen im letzten Veranlagungszeitraum vor Geburt + des Kindes. Einkommen über dieser Grenze schließt den Bezug von Elterngeld aus (§ + 1 (8) BEEG). + en: >- + Maximum taxable income in the year before the birth of the child. Income above + this threshold disqualifies the parent from receiving Elterngeld. + reference: + de: null + en: null + unit: Euro + 2011-01-01: + single: 250000.0 + paar: 500000.0 + reference: Art. 14 G. v. 09.12.2010 BGBl. I S. 1885 + 2021-09-01: + deviation_from: previous + paar: 300000.0 + reference: Art. 1 G. v. 15.02.2021 BGBl. I S. 239 + 2024-04-01: + scalar: 200000.0 + reference: >- + Single: Art. 7 G. v. 27.03.2024 BGBl. 2024 I Nr. 107, Paar: Art. 1 G. v. + 22.12.2023 BGBl. 2023 I Nr. 412 + 2025-04-01: + scalar: 175000.0 + reference: >- + Single: Art. 7 G. v. 27.03.2024 BGBl. 2024 I Nr. 107, Paar: Art. 1 G. v. + 22.12.2023 BGBl. 2023 I Nr. 412 +max_arbeitsstunden_w: + name: + de: >- + Maximale Wochenstunden die bei Elterngeldbezug gearbeitet werden dürfen + en: >- + Maximum amount of weekly hours one is allowed to work, when receiving Elterngeld + description: + de: §1 (6) BEEG + en: null + 2007-01-01: + scalar: 30.0 + reference: Art. 1 G. v. 05.12.2006 BGBl. I S. 2748 + 2021-09-01: + scalar: 32.0 + reference: Art. 1 G. v. 15.02.2021 BGBl. I S. 239 +rounding: + elterngeld_m: + 1980-01-01: + base: 0.01 + direction: down + _untere_lohnersatzanteil_grenze_minus_nettoeinkommen: + 1980-01-01: + base: 2 + direction: down + reference: §2 (2) BEEG + _nettoeinkommen_minus_obere_lohnersatzanteil_grenze: + 1980-01-01: + base: 2 + direction: down + reference: §2 (2) BEEG + elterngeld_nettolohn_approximation_m: + 1980-01-01: + base: 0.01 + direction: down diff --git a/src/_gettsim/synthetic.py b/src/_gettsim/synthetic.py index d55c72e186..e0a76d2fe7 100644 --- a/src/_gettsim/synthetic.py +++ b/src/_gettsim/synthetic.py @@ -297,6 +297,7 @@ def create_constant_across_households_variables(df, n_adults, n_children, policy "m_schul_ausbild": 10.0, "m_kind_berücks_zeit": 24.0, "m_pfleg_berücks_zeit": 1.0, + "elterngeld_nettoeinkommen_vorjahr_m": 20000.0, "geburtsjahr": policy_year - df["alter"], "jahr_renteneintr": policy_year - df["alter"] + 67, "grundr_zeiten": (df["alter"] - 20).clip(lower=0) * 12, diff --git a/src/_gettsim/transfers/elterngeld.py b/src/_gettsim/transfers/elterngeld.py index 67422056ff..9049c813ad 100644 --- a/src/_gettsim/transfers/elterngeld.py +++ b/src/_gettsim/transfers/elterngeld.py @@ -1,139 +1,76 @@ """This module provides functions to compute parental leave benefits (Elterngeld).""" -from _gettsim.piecewise_functions import piecewise_polynomial -from _gettsim.taxes.eink_st import _eink_st_tarif - - -def elterngeld_m( # noqa: PLR0913 - elterngeld_eink_relev_m: float, - elternzeit_anspruch: bool, - elterngeld_eink_erlass_m: float, - elterngeld_geschw_bonus_m: float, - elterngeld_mehrlinge_bonus_m: float, - elterngeld_params: dict, +from _gettsim.shared import policy_info + +aggregate_by_group_elterngeld = { + "kind_anspruchsberechtigt_fg": { + "source_col": "kind_anspruchsberechtigt", + "aggr": "any", + }, + "elterngeld_anzahl_claims_fg": { + "source_col": "elterngeld_claimed", + "aggr": "sum", + }, +} +aggregate_by_p_id_elterngeld = { + "monate_elterngeld_partner": { + "p_id_to_aggregate_by": "p_id_einstandspartner", + "source_col": "monate_elterngeldbezug", + "aggr": "sum", + }, +} + + +@policy_info(start_date="2011-01-01", params_key_for_rounding="elterngeld") +def elterngeld_m( + elterngeld_anspruchsbedingungen_erfüllt: bool, + elterngeld_anspruchshöhe_m: float, ) -> float: - """Calculate parental leave benefit (elterngeld). - - For the calculation, the relevant wage and the eligibility for bonuses is needed. + """Parental leave benefit (Elterngeld). Parameters ---------- - elterngeld_eink_relev_m - See :func:`elterngeld_eink_relev_m`. - elternzeit_anspruch - See :func:`elternzeit_anspruch`. - elterngeld_eink_erlass_m - See :func:`elterngeld_eink_erlass_m`. - elterngeld_geschw_bonus_m - See :func:`elterngeld_geschw_bonus_m`. - elterngeld_mehrlinge_bonus_m - See :func:`elterngeld_mehrlinge_bonus_m`. - elterngeld_params - See params documentation :ref:`elterngeld_params `. + elterngeld_anspruchsbedingungen_erfüllt + See :func:`elterngeld_anspruchsbedingungen_erfüllt`. + elterngeld_anspruchshöhe_m + See :func:`elterngeld_anspruchshöhe_m`. Returns ------- """ - - if (elterngeld_eink_relev_m < 0) or (not elternzeit_anspruch): - out = 0.0 + if elterngeld_anspruchsbedingungen_erfüllt: + out = elterngeld_anspruchshöhe_m else: - # Bound from above and below - out = ( - min( - max(elterngeld_eink_erlass_m, elterngeld_params["mindestbetrag"]), - elterngeld_params["höchstbetrag"], - ) - + elterngeld_geschw_bonus_m - + elterngeld_mehrlinge_bonus_m - ) + out = 0.0 return out -def _elterngeld_proxy_eink_vorj_elterngeld_m( - _ges_rentenv_beitr_bemess_grenze_m: float, - bruttolohn_vorj_m: float, - elterngeld_params: dict, - eink_st_params: dict, - eink_st_abzuege_params: dict, - soli_st_params: dict, -) -> float: - """Calculating the claim for benefits depending on previous wage. - - Parameters - ---------- - _ges_rentenv_beitr_bemess_grenze_m - See :func:`_ges_rentenv_beitr_bemess_grenze_m`. - bruttolohn_vorj_m - See basic input variable :ref:`bruttolohn_vorj_m `. - elterngeld_params - See params documentation :ref:`elterngeld_params `. - eink_st_params - See params documentation :ref:`eink_st_params `. - eink_st_abzuege_params - See params documentation :ref:`eink_st_abzuege_params `. - soli_st_params - See params documentation :ref:`soli_st_params `. +@policy_info( + end_date="2010-12-31", + name_in_dag="elterngeld_m", + params_key_for_rounding="elterngeld", +) +def eltergeld_not_implemented() -> float: + raise NotImplementedError("Elterngeld is not implemented prior to 2011.") - Returns - ------- - """ - # Relevant wage is capped at the contribution thresholds - max_wage = min(bruttolohn_vorj_m, _ges_rentenv_beitr_bemess_grenze_m) - - # We need to deduct lump-sum amounts for contributions, taxes and soli - prox_ssc = elterngeld_params["sozialv_pausch"] * max_wage - - # Fictive taxes (Lohnsteuer) are approximated by applying the wage to the tax tariff - prox_income = 12 * max_wage - eink_st_abzuege_params["werbungskostenpauschale"] - prox_income = max(prox_income, 0.0) - - prox_tax = _eink_st_tarif( - prox_income, - 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" - ], - ) - - out = max_wage - prox_ssc - prox_tax / 12 - prox_soli / 12 - - return max(out, 0.0) - - -def elternzeit_anspruch( # noqa: PLR0913 - alter_monate_jüngstes_mitglied_hh: float, - m_elterngeld_mut_hh: int, - m_elterngeld_vat_hh: int, - m_elterngeld: int, - kind: bool, +def elterngeld_anspruchshöhe_m( + elterngeld_basisbetrag_m: float, + elterngeld_geschwisterbonus_m: float, + elterngeld_mehrlingsbonus_m: float, elterngeld_params: dict, -) -> bool: - """Check parental leave eligibility. - - # ToDo: Check meaning and naming and make description of m_elterngeld_mut_hh, - # ToDo: m_elterngeld_vat_hh, and m_elterngeld more precise +) -> float: + """Elterngeld before checking eligibility. Parameters ---------- - alter_monate_jüngstes_mitglied_hh - See :func:`alter_monate_jüngstes_mitglied_hh`. - m_elterngeld_mut_hh - See basic input variable :ref:`m_elterngeld_mut_hh `. - m_elterngeld_vat_hh - See basic input variable :ref:`m_elterngeld_vat_hh `. - m_elterngeld - See basic input variable :ref:`m_elterngeld `. - kind - See basic input variable :ref:`kind `. + elterngeld_basisbetrag_m + See :func:`elterngeld_basisbetrag_m`. + elterngeld_geschwisterbonus_m + See :func:`elterngeld_geschwisterbonus_m`. + elterngeld_mehrlingsbonus_m + See :func:`elterngeld_mehrlingsbonus_m`. elterngeld_params See params documentation :ref:`elterngeld_params `. @@ -141,31 +78,41 @@ def elternzeit_anspruch( # noqa: PLR0913 ------- """ - out = ( - (alter_monate_jüngstes_mitglied_hh <= elterngeld_params["max_monate_paar"]) - and ( - m_elterngeld_mut_hh + m_elterngeld_vat_hh - < elterngeld_params["max_monate_paar"] + return ( + min( + max( + elterngeld_basisbetrag_m, + elterngeld_params["mindestbetrag"], + ), + elterngeld_params["höchstbetrag"], ) - and (not kind) - and (m_elterngeld <= elterngeld_params["max_monate_ind"]) + + elterngeld_geschwisterbonus_m + + elterngeld_mehrlingsbonus_m ) - return out - -def elterngeld_kind( - geburtsjahr: int, +def elterngeld_anspruchsbedingungen_erfüllt( # noqa: PLR0913 + elterngeld_claimed: bool, + arbeitsstunden_w: float, + kind_anspruchsberechtigt_fg: bool, + vorjahr_einkommen_unter_bezugsgrenze: bool, + monate_elterngeldbezug_unter_grenze_fg: bool, elterngeld_params: dict, ) -> bool: - """Check for sibling bonus on parental leave benefit. - - # ToDo: why use datum and geburtsjahr instead of alter? + """Individual is eligible to receive Elterngeld. Parameters ---------- - geburtsjahr - See basic input variable :ref:`geburtsjahr `. + elterngeld_claimed + See basic input variable :ref:`elterngeld_claimed `. + arbeitsstunden_w + See basic input variable :ref:`arbeitsstunden_w `. + kind_anspruchsberechtigt_fg + See :func:`kind_anspruchsberechtigt_fg`. + vorjahr_einkommen_unter_bezugsgrenze + See :func:`vorjahr_einkommen_unter_bezugsgrenze`. + monate_elterngeldbezug_unter_grenze_fg + See :func:`monate_elterngeldbezug_unter_grenze_fg`. elterngeld_params See params documentation :ref:`elterngeld_params `. @@ -173,23 +120,35 @@ def elterngeld_kind( ------- """ - current_year = elterngeld_params["datum"].astype("datetime64[Y]").astype(int) + 1970 - out = current_year - geburtsjahr < next( - iter(elterngeld_params["geschw_bonus_altersgrenzen_kinder"].keys()) + return ( + elterngeld_claimed + and arbeitsstunden_w <= elterngeld_params["max_arbeitsstunden_w"] + and vorjahr_einkommen_unter_bezugsgrenze + and kind_anspruchsberechtigt_fg + and monate_elterngeldbezug_unter_grenze_fg ) - return out -def elterngeld_vorschulkind( - geburtsjahr: int, +def monate_elterngeldbezug_unter_grenze_fg( + monate_elterngeldbezug_fg: int, + monate_elterngeld_partner: int, + alleinerz: bool, + elterngeld_anzahl_claims_fg: int, elterngeld_params: dict, ) -> bool: - """Check for sibling bonus on parental leave benefit. + """Elterngeld has been claimed for less than the maximum number of months in the + past. Parameters ---------- - geburtsjahr - See basic input variable :ref:`geburtsjahr `. + monate_elterngeldbezug_fg + See :func:`monate_elterngeldbezug_fg`. + monate_elterngeld_partner + See function :func:`monate_elterngeld_partner`. + alleinerz + See basic input variable :ref:`alleinerz `. + elterngeld_anzahl_claims_fg + See :func:`elterngeld_anzahl_claims_fg`. elterngeld_params See params documentation :ref:`elterngeld_params `. @@ -197,30 +156,38 @@ def elterngeld_vorschulkind( ------- """ - current_year = elterngeld_params["datum"].astype("datetime64[Y]").astype(int) + 1970 - out = ( - current_year - geburtsjahr - < list(elterngeld_params["geschw_bonus_altersgrenzen_kinder"].keys())[1] - ) + if alleinerz or monate_elterngeld_partner >= 2: + out = ( + monate_elterngeldbezug_fg + < elterngeld_params["max_monate_mit_partnermonate"] + ) + elif elterngeld_anzahl_claims_fg > 1: + out = ( + monate_elterngeldbezug_fg + 1 + < elterngeld_params["max_monate_mit_partnermonate"] + ) + else: + out = ( + monate_elterngeldbezug_fg + < elterngeld_params["max_monate_ohne_partnermonate"] + ) return out -def elterngeld_geschw_bonus_anspruch( - elterngeld_kind_hh: int, - elterngeld_vorschulkind_hh: int, - elternzeit_anspruch: bool, +@policy_info(end_date="2024-03-31", name_in_dag="vorjahr_einkommen_unter_bezugsgrenze") +def vorjahr_einkommen_unter_bezugsgrenze_mit_unterscheidung_single_paar( + alleinerz: bool, + elterngeld_zu_verst_eink_vorjahr_y_sn: float, elterngeld_params: dict, ) -> bool: - """Check for sibling bonus on parental leave benefit. + """Income before birth is below income threshold for Elterngeld. Parameters ---------- - elterngeld_kind_hh - See :func:`elterngeld_kind_hh`. - elternzeit_anspruch - See :func:`elternzeit_anspruch`. - elterngeld_vorschulkind_hh - See :func:`elterngeld_vorschulkind_hh`. + alleinerz + See basic input variable :ref:`alleinerz `. + elterngeld_zu_verst_eink_vorjahr_y_sn + See :func:`elterngeld_zu_verst_eink_vorjahr_y_sn`. elterngeld_params See params documentation :ref:`elterngeld_params `. @@ -228,120 +195,116 @@ def elterngeld_geschw_bonus_anspruch( ------- """ - if elternzeit_anspruch: + if alleinerz: out = ( - elterngeld_kind_hh - == next( - iter(elterngeld_params["geschw_bonus_altersgrenzen_kinder"].values()) - ) - ) or ( - elterngeld_vorschulkind_hh - >= list(elterngeld_params["geschw_bonus_altersgrenzen_kinder"].values())[1] + elterngeld_zu_verst_eink_vorjahr_y_sn + <= elterngeld_params["max_eink_vorj"]["single"] ) else: - out = False + out = ( + elterngeld_zu_verst_eink_vorjahr_y_sn + <= elterngeld_params["max_eink_vorj"]["paar"] + ) return out -def _elterngeld_anz_mehrlinge_anspruch( - elternzeit_anspruch: bool, - anz_mehrlinge_jüngstes_kind_hh: int, -) -> int: - """Check for multiple bonus on parental leave benefit. +@policy_info( + start_date="2024-04-01", name_in_dag="vorjahr_einkommen_unter_bezugsgrenze" +) +def vorjahr_einkommen_unter_bezugsgrenze_ohne_unterscheidung_single_paar( + elterngeld_zu_verst_eink_vorjahr_y_sn: float, + elterngeld_params: dict, +) -> bool: + """Income before birth is below income threshold for Elterngeld. Parameters ---------- - elternzeit_anspruch - See :func:`elternzeit_anspruch`. - anz_mehrlinge_jüngstes_kind_hh - See :func:`anz_mehrlinge_jüngstes_kind_hh`. + elterngeld_zu_verst_eink_vorjahr_y_sn + See :func:`elterngeld_zu_verst_eink_vorjahr_y_sn`. + elterngeld_params + See params documentation :ref:`elterngeld_params `. Returns ------- """ - out = anz_mehrlinge_jüngstes_kind_hh - 1 if elternzeit_anspruch else 0 - return out - - -def elterngeld_nettolohn_m( - bruttolohn_m: float, - eink_st_m_sn: float, - soli_st_m_sn: float, - anz_personen_sn: int, - sozialv_beitr_arbeitnehmer_m: float, -) -> float: - """Calculate the net wage. + return elterngeld_zu_verst_eink_vorjahr_y_sn <= elterngeld_params["max_eink_vorj"] - Taxes and social insurance contributions are needed for the calculation. +def kind_anspruchsberechtigt( + alter: int, + elterngeld_params: dict, +) -> bool: + """Child is young enough to give rise to Elterngeld claim. Parameters ---------- - bruttolohn_m - See basic input variable :ref:`bruttolohn_m `. - eink_st_m_sn - See :func:`eink_st_m_sn`. - soli_st_m_sn - See :func:`soli_st_m_sn`. - anz_personen_sn - See :func:`anz_personen_sn`. - sozialv_beitr_arbeitnehmer_m - See :func:`sozialv_beitr_arbeitnehmer_m`. + alter + See basic input variable :ref:`alter `. + elterngeld_params + See params documentation :ref:`elterngeld_params `. Returns ------- """ - out = ( - bruttolohn_m - - (eink_st_m_sn / anz_personen_sn) - - (soli_st_m_sn / anz_personen_sn) - - sozialv_beitr_arbeitnehmer_m - ) - - return max(out, 0.0) + return alter <= elterngeld_params["max_monate_mit_partnermonate"] -def elterngeld_eink_relev_m( - _elterngeld_proxy_eink_vorj_elterngeld_m: float, - elterngeld_nettolohn_m: float, +def elterngeld_basisbetrag_m( + elterngeld_nettoeinkommen_vorjahr_m: float, + elterngeld_lohnersatzanteil: float, + elterngeld_anrechenbares_nettoeinkommen_m: float, + elterngeld_params: dict, ) -> float: - """Calculating the relevant wage for the calculation of elterngeld. - - According to § 2 (1) BEEG elterngeld is calculated by the loss of income due to - child raising. - + """Base parental leave benefit without accounting for floor and ceiling. Parameters ---------- - _elterngeld_proxy_eink_vorj_elterngeld_m - See :func:`_elterngeld_proxy_eink_vorj_elterngeld_m`. - elterngeld_nettolohn_m - See :func:`elterngeld_nettolohn_m`. + elterngeld_nettoeinkommen_vorjahr_m + See basic input variable :ref:`elterngeld_nettoeinkommen_vorjahr_m + `. + elterngeld_lohnersatzanteil + See :func:`elterngeld_lohnersatzanteil`. + elterngeld_anrechenbares_nettoeinkommen_m + See :func:`elterngeld_anrechenbares_nettoeinkommen_m`. + elterngeld_params + See params documentation :ref:`elterngeld_params `. Returns ------- """ - return _elterngeld_proxy_eink_vorj_elterngeld_m - elterngeld_nettolohn_m + berücksichtigtes_einkommen = min( + elterngeld_nettoeinkommen_vorjahr_m, + elterngeld_params["max_zu_berücksichtigendes_einkommen"], + ) + return ( + berücksichtigtes_einkommen - elterngeld_anrechenbares_nettoeinkommen_m + ) * elterngeld_lohnersatzanteil -def elterngeld_anteil_eink_erlass( - elterngeld_eink_relev_m: float, elterngeld_params: dict +@policy_info(start_date="2011-01-01") +def elterngeld_lohnersatzanteil( + elterngeld_nettoeinkommen_vorjahr_m: float, + _untere_lohnersatzanteil_grenze_minus_nettoeinkommen: float, + _nettoeinkommen_minus_obere_lohnersatzanteil_grenze: float, + elterngeld_params: dict, ) -> float: - """Calculate the share of net income which is reimbursed when receiving elterngeld. + """Replacement rate of Elterngeld (before applying floor and ceiling rules). According to § 2 (2) BEEG the percentage increases below the first step and decreases above the second step until prozent_minimum. - # ToDo: Split this function up in a function before and after 2011. Before 2011 the - # ToDo: replacement rate was not lowered for high incomes. - Parameters ---------- - elterngeld_eink_relev_m - See :func:`elterngeld_eink_relev_m`. + elterngeld_nettoeinkommen_vorjahr_m + See basic input variable + :ref:`elterngeld_nettoeinkommen_vorjahr_m`. + _untere_lohnersatzanteil_grenze_minus_nettoeinkommen + See :func:`_untere_lohnersatzanteil_grenze_minus_nettoeinkommen`. + _nettoeinkommen_minus_obere_lohnersatzanteil_grenze + See :func:`_nettoeinkommen_minus_obere_lohnersatzanteil_grenze`. elterngeld_params See params documentation :ref:`elterngeld_params `. Returns @@ -351,31 +314,28 @@ def elterngeld_anteil_eink_erlass( # Higher replacement rate if considered income is below a threshold if ( - elterngeld_eink_relev_m + elterngeld_nettoeinkommen_vorjahr_m < elterngeld_params["nettoeinkommen_stufen"]["lower_threshold"] + and elterngeld_nettoeinkommen_vorjahr_m > 0 ): - out = ( - elterngeld_params["nettoeinkommen_stufen"]["lower_threshold"] - - elterngeld_eink_relev_m - ) / elterngeld_params["eink_schritt_korrektur"] * elterngeld_params[ - "prozent_korrektur" - ] + elterngeld_params[ - "faktor" - ] - + out = elterngeld_params["faktor"] + ( + _untere_lohnersatzanteil_grenze_minus_nettoeinkommen + / elterngeld_params["eink_schritt_korrektur"] + * elterngeld_params["prozent_korrektur"] + ) # Lower replacement rate if considered income is above a threshold elif ( - elterngeld_eink_relev_m + elterngeld_nettoeinkommen_vorjahr_m > elterngeld_params["nettoeinkommen_stufen"]["upper_threshold"] ): # Replacement rate is only lowered up to a specific value out = max( elterngeld_params["faktor"] - ( - elterngeld_eink_relev_m - - elterngeld_params["nettoeinkommen_stufen"]["upper_threshold"] - ) - / elterngeld_params["eink_schritt_korrektur"], + _nettoeinkommen_minus_obere_lohnersatzanteil_grenze + / elterngeld_params["eink_schritt_korrektur"] + * elterngeld_params["prozent_korrektur"] + ), elterngeld_params["prozent_minimum"], ) else: @@ -384,40 +344,71 @@ def elterngeld_anteil_eink_erlass( return out -def elterngeld_eink_erlass_m( - elterngeld_eink_relev_m: float, elterngeld_anteil_eink_erlass: float +@policy_info(params_key_for_rounding="elterngeld") +def _untere_lohnersatzanteil_grenze_minus_nettoeinkommen( + elterngeld_nettoeinkommen_vorjahr_m: float, + elterngeld_params: dict, ) -> float: - """Calculate base parental leave benefit. + """Lower threshold for replacement rate adjustment minus net income. Parameters ---------- - elterngeld_eink_relev_m - See :func:`elterngeld_eink_relev_m`. - elterngeld_anteil_eink_erlass - See :func:`elterngeld_anteil_eink_erlass`. + elterngeld_nettoeinkommen_vorjahr_m + See basic input variable + :ref:`elterngeld_nettoeinkommen_vorjahr_m`. + elterngeld_params + See params documentation :ref:`elterngeld_params `. Returns ------- """ - return elterngeld_eink_relev_m * elterngeld_anteil_eink_erlass + return ( + elterngeld_params["nettoeinkommen_stufen"]["lower_threshold"] + - elterngeld_nettoeinkommen_vorjahr_m + ) + + +@policy_info(params_key_for_rounding="elterngeld") +def _nettoeinkommen_minus_obere_lohnersatzanteil_grenze( + elterngeld_nettoeinkommen_vorjahr_m: float, + elterngeld_params: dict, +) -> float: + """Net income minus upper threshold for replacement rate adjustment. + + Parameters + ---------- + elterngeld_nettoeinkommen_vorjahr_m + See basic input variable + :ref:`elterngeld_nettoeinkommen_vorjahr_m`. + elterngeld_params + See params documentation :ref:`elterngeld_params `. + + Returns + ------- + + """ + return ( + elterngeld_nettoeinkommen_vorjahr_m + - elterngeld_params["nettoeinkommen_stufen"]["upper_threshold"] + ) -def elterngeld_geschw_bonus_m( - elterngeld_eink_erlass_m: float, - elterngeld_geschw_bonus_anspruch: bool, +def elterngeld_geschwisterbonus_m( + elterngeld_basisbetrag_m: float, + geschwisterbonus_anspruchsberechtigt_fg: bool, elterngeld_params: dict, ) -> float: - """Calculate the bonus for siblings. + """Elterngeld bonus for (older) siblings. According to § 2a parents of siblings get a bonus. Parameters ---------- - elterngeld_eink_erlass_m - See :func:`elterngeld_eink_erlass_m`. - elterngeld_geschw_bonus_anspruch - See :func:`elterngeld_geschw_bonus_anspruch`. + elterngeld_basisbetrag_m + See :func:`elterngeld_basisbetrag_m`. + geschwisterbonus_anspruchsberechtigt_fg + See :func:`geschwisterbonus_anspruchsberechtigt_fg`. elterngeld_params See params documentation :ref:`elterngeld_params `. @@ -425,25 +416,25 @@ def elterngeld_geschw_bonus_m( ------- """ - if elterngeld_geschw_bonus_anspruch: + if geschwisterbonus_anspruchsberechtigt_fg: out = max( - elterngeld_params["geschw_bonus_aufschlag"] * elterngeld_eink_erlass_m, - elterngeld_params["geschw_bonus_minimum"], + elterngeld_params["geschwisterbonus_aufschlag"] * elterngeld_basisbetrag_m, + elterngeld_params["geschwisterbonus_minimum"], ) else: out = 0.0 return out -def elterngeld_mehrlinge_bonus_m( - _elterngeld_anz_mehrlinge_anspruch: int, elterngeld_params: dict +def elterngeld_mehrlingsbonus_m( + _elterngeld_anz_mehrlinge_fg: int, elterngeld_params: dict ) -> float: - """Calculate the bonus for multiples. + """Elterngeld bonus for multiples. Parameters ---------- - _elterngeld_anz_mehrlinge_anspruch - See :func:`_elterngeld_anz_mehrlinge_anspruch`. + _elterngeld_anz_mehrlinge_fg + See :func:`_elterngeld_anz_mehrlinge_fg`. elterngeld_params See params documentation :ref:`elterngeld_params `. @@ -451,22 +442,94 @@ def elterngeld_mehrlinge_bonus_m( ------- """ - return float( - _elterngeld_anz_mehrlinge_anspruch * elterngeld_params["mehrlingbonus"] + return _elterngeld_anz_mehrlinge_fg * elterngeld_params["mehrlingbonus"] + + +def geschwisterbonus_anspruchsberechtigt_fg( + anz_kinder_bis_2_fg: int, + anz_kinder_bis_5_fg: int, + elterngeld_params: dict, +) -> bool: + """Siblings that give rise to Elterngeld siblings bonus. + + Parameters + ---------- + alter + See basic input variable :ref:`alter `. + elterngeld_params + See params documentation :ref:`elterngeld_params `. + + Returns + ------- + + """ + geschwister_unter_3 = ( + anz_kinder_bis_2_fg >= elterngeld_params["geschwisterbonus_altersgrenzen"][3] + ) + geschwister_unter_6 = ( + anz_kinder_bis_5_fg >= elterngeld_params["geschwisterbonus_altersgrenzen"][6] ) + return geschwister_unter_3 or geschwister_unter_6 + + +def _elterngeld_anz_mehrlinge_fg( + anz_mehrlinge_jüngstes_kind_fg: int, +) -> int: + """Number of multiples of the youngest child. + + Parameters + ---------- + anz_mehrlinge_jüngstes_kind_fg + See :func:`anz_mehrlinge_jüngstes_kind_fg`. + + Returns + ------- + + """ + out = anz_mehrlinge_jüngstes_kind_fg - 1 + return max(out, 0) + + +def elterngeld_anrechenbares_nettoeinkommen_m( + bruttolohn_m: float, + lohnst_m: float, + soli_st_lohnst_m: float, +) -> float: + """Income that reduces the Elterngeld claim. + + Parameters + ---------- + bruttolohn_m + See basic input variable :ref:`bruttolohn_m `. + lohnst_m + See :func:`lohnst_m`. + soli_st_lohnst_m + See :func:`soli_st_lohnst_m`. + + Returns + ------- -def elterngeld_anr_m( + """ + # TODO(@MImmesberger): In this case, lohnst_m should be calculated without taking + # into account adaptions to the standard care insurance rate. + # https://github.com/iza-institute-of-labor-economics/gettsim/issues/792 + return bruttolohn_m - lohnst_m - soli_st_lohnst_m + + +def anrechenbares_elterngeld_m( elterngeld_m: float, + _elterngeld_anz_mehrlinge_fg: int, elterngeld_params: dict, - anz_mehrlinge_jüngstes_kind_hh: int, ) -> float: - """Calculate elterngeld above threshold which is considered as income for transfers - such as wohngeld and grunds_im_alter. - For arbeitsl_geld_2 as well as kinderzuschl the whole amount of elterngeld is - considered as income, except for the case in which the parents still worked - right before they had children. - See: https://www.kindergeld.org/elterngeld-einkommen/ + """Elterngeld that can be considered as income for other transfers. + + Relevant for Wohngeld and Grundsicherung im Alter. + + For Arbeitslosengeld II / Bürgergeld as well as Kinderzuschlag the whole amount of + Elterngeld is considered as income, except for the case in which the parents still + worked right before they had children. See: + https://www.kindergeld.org/elterngeld-einkommen/ Parameters ---------- @@ -474,8 +537,8 @@ def elterngeld_anr_m( See :func:`elterngeld_m`. elterngeld_params See params documentation :ref:`elterngeld_params `. - anz_mehrlinge_jüngstes_kind_hh - See :func:`anz_mehrlinge_jüngstes_kind_hh`. + _elterngeld_anz_mehrlinge_fg + See :func:`_elterngeld_anz_mehrlinge_fg`. Returns ------- @@ -483,7 +546,37 @@ def elterngeld_anr_m( """ out = max( elterngeld_m - - ((1 + anz_mehrlinge_jüngstes_kind_hh) * elterngeld_params["mindestbetrag"]), + - ((1 + _elterngeld_anz_mehrlinge_fg) * elterngeld_params["mindestbetrag"]), 0, ) return out + + +@policy_info(params_key_for_rounding="elterngeld") +def elterngeld_nettolohn_approximation_m( + bruttolohn_m: float, + lohnst_m: float, + soli_st_lohnst_m: float, + elterngeld_params: dict, +) -> float: + """Approximation of net wage used to calculate Elterngeld. + + This target can be used as an input in another GETTSIM call to compute Elterngeld. + In principle, the relevant gross wage for this target is the sum of the gross wages + in the 12 months before the birth of the child. For most datasets, except those with + monthly income date (IAB, DRV data), the best approximation will likely be the gross + wage in the calendar year before the birth of the child. + + Parameters + ---------- + bruttolohn_m + See basic input variable :ref:`bruttolohn_m `. + lohnst_m + See :func:`lohnst_m`. + soli_st_lohnst_m + See :func:`soli_st_lohnst_m`. + elterngeld_params + See params documentation :ref:`elterngeld_params `. + """ + prox_ssc = elterngeld_params["sozialv_pausch"] * bruttolohn_m + return bruttolohn_m - prox_ssc - lohnst_m - soli_st_lohnst_m diff --git a/src/_gettsim/transfers/grunds_im_alter.py b/src/_gettsim/transfers/grunds_im_alter.py index c79e33e2b6..13cb747cd9 100644 --- a/src/_gettsim/transfers/grunds_im_alter.py +++ b/src/_gettsim/transfers/grunds_im_alter.py @@ -95,7 +95,7 @@ def grunds_im_alter_eink_m( # noqa: PLR0913 soli_st_m_sn: float, anz_personen_sn: int, sozialv_beitr_arbeitnehmer_m: float, - elterngeld_anr_m: float, + anrechenbares_elterngeld_m: float, ) -> float: """Calculate individual income considered in the calculation of Grundsicherung im Alter. @@ -122,8 +122,8 @@ def grunds_im_alter_eink_m( # noqa: PLR0913 See :func:`anz_personen_sn`. sozialv_beitr_arbeitnehmer_m See :func:`sozialv_beitr_arbeitnehmer_m`. - elterngeld_anr_m - See :func:`elterngeld_anr_m`. + anrechenbares_elterngeld_m + See :func:`anrechenbares_elterngeld_m`. Returns ------- @@ -138,7 +138,7 @@ def grunds_im_alter_eink_m( # noqa: PLR0913 + sonstig_eink_m + eink_vermietung_m + _grunds_im_alter_kapitaleink_brutto_m - + elterngeld_anr_m + + anrechenbares_elterngeld_m ) out = ( diff --git a/src/_gettsim/transfers/wohngeld.py b/src/_gettsim/transfers/wohngeld.py index 66665ac883..87f55fe7b0 100644 --- a/src/_gettsim/transfers/wohngeld.py +++ b/src/_gettsim/transfers/wohngeld.py @@ -326,7 +326,7 @@ def wohngeld_eink_vor_freib_m_mit_elterngeld( # noqa: PLR0913 eink_rente_zu_verst_m: float, kind_unterh_erhalt_m: float, unterhaltsvors_m: float, - elterngeld_anr_m: float, + anrechenbares_elterngeld_m: float, wohngeld_abzüge_st_sozialv_m: float, ) -> float: """Sum gross incomes relevant for housing benefit calculation on individual level @@ -353,8 +353,8 @@ def wohngeld_eink_vor_freib_m_mit_elterngeld( # noqa: PLR0913 See basic input variable :ref:`kind_unterh_erhalt_m `. unterhaltsvors_m See :func:`unterhaltsvors_m`. - elterngeld_anr_m - See :func:`elterngeld_anr_m`. + anrechenbares_elterngeld_m + See :func:`anrechenbares_elterngeld_m`. wohngeld_abzüge_st_sozialv_m See :func:`wohngeld_abzüge_st_sozialv_m`. @@ -377,7 +377,7 @@ def wohngeld_eink_vor_freib_m_mit_elterngeld( # noqa: PLR0913 + eink_rente_zu_verst_m + kind_unterh_erhalt_m + unterhaltsvors_m - + elterngeld_anr_m + + anrechenbares_elterngeld_m ) eink_ind = einkommen + transfers + sonstig_eink_m diff --git a/src/_gettsim_tests/test_data/elterngeld/2017/hh_id_2.yaml b/src/_gettsim_tests/test_data/elterngeld/2017/hh_id_2.yaml index 963d405326..9614e6f9b6 100644 --- a/src/_gettsim_tests/test_data/elterngeld/2017/hh_id_2.yaml +++ b/src/_gettsim_tests/test_data/elterngeld/2017/hh_id_2.yaml @@ -1,7 +1,7 @@ --- info: note: '' - source: '' + source: Regression test. inputs: provided: hh_id: @@ -10,14 +10,36 @@ inputs: - 42 p_id_ehepartner: - -1 + p_id_einstandspartner: + - -1 + p_id_elternteil_1: + - -1 + p_id_elternteil_2: + - -1 + steuerklasse: + - 1 + ges_pflegev_hat_kinder: + - false + alter: + - 43 gemeinsam_veranlagt: - false + alleinerz: + - false kind: - false + arbeitsstunden_w: + - 22.5 bruttolohn_m: - 1800.0 - bruttolohn_vorj_m: + elterngeld_nettoeinkommen_vorjahr_m: - 1800.0 + elterngeld_zu_verst_eink_vorjahr_y_sn: + - 18260.0 + elterngeld_claimed: + - false + in_ausbildung: + - false wohnort_ost: - false eink_st_y_sn: @@ -32,11 +54,7 @@ inputs: - 3 geburtstag: - 3 - m_elterngeld_mut_hh: - - 1 - m_elterngeld_vat_hh: - - 0 - m_elterngeld: + monate_elterngeldbezug: - 0 jahr: - 2017 @@ -44,9 +62,9 @@ inputs: outputs: elterngeld_m: - 0.0 - elterngeld_geschw_bonus_anspruch: + geschwisterbonus_anspruchsberechtigt_fg: - false - _elterngeld_anz_mehrlinge_anspruch: + _elterngeld_anz_mehrlinge_fg: - 0 - elternzeit_anspruch: + elterngeld_anspruchsbedingungen_erfüllt: - false diff --git a/src/_gettsim_tests/test_data/elterngeld/2018/hh_id_1.yaml b/src/_gettsim_tests/test_data/elterngeld/2018/hh_id_1.yaml index af11375c35..37f16da344 100644 --- a/src/_gettsim_tests/test_data/elterngeld/2018/hh_id_1.yaml +++ b/src/_gettsim_tests/test_data/elterngeld/2018/hh_id_1.yaml @@ -1,7 +1,7 @@ --- info: note: '' - source: '' + source: Regression test. inputs: provided: hh_id: @@ -10,33 +10,45 @@ inputs: - 23 p_id_ehepartner: - -1 + p_id_einstandspartner: + - -1 + p_id_elternteil_1: + - -1 + p_id_elternteil_2: + - -1 + steuerklasse: + - 1 + ges_pflegev_hat_kinder: + - true + alter: + - 43 + elterngeld_claimed: + - false + in_ausbildung: + - false gemeinsam_veranlagt: - false + alleinerz: + - false kind: - false + arbeitsstunden_w: + - 0.0 bruttolohn_m: - 0.0 - bruttolohn_vorj_m: + elterngeld_nettoeinkommen_vorjahr_m: + - 0.0 + elterngeld_zu_verst_eink_vorjahr_y_sn: - 0.0 wohnort_ost: - false - eink_st_y_sn: - - 0.0 - soli_st_y_sn: - - 0.0 - sozialv_beitr_arbeitnehmer_m: - - 0.0 geburtsjahr: - 1972 geburtsmonat: - 1 geburtstag: - 1 - m_elterngeld_mut_hh: - - 2 - m_elterngeld_vat_hh: - - 2 - m_elterngeld: + monate_elterngeldbezug: - 0 jahr: - 2018 @@ -44,9 +56,9 @@ inputs: outputs: elterngeld_m: - 0.0 - elterngeld_geschw_bonus_anspruch: + geschwisterbonus_anspruchsberechtigt_fg: - false - _elterngeld_anz_mehrlinge_anspruch: + _elterngeld_anz_mehrlinge_fg: - 0 - elternzeit_anspruch: + elterngeld_anspruchsbedingungen_erfüllt: - false diff --git a/src/_gettsim_tests/test_data/elterngeld/2018/hh_id_2.yaml b/src/_gettsim_tests/test_data/elterngeld/2018/hh_id_2.yaml index 7b9368f195..fdbc7106c9 100644 --- a/src/_gettsim_tests/test_data/elterngeld/2018/hh_id_2.yaml +++ b/src/_gettsim_tests/test_data/elterngeld/2018/hh_id_2.yaml @@ -1,7 +1,7 @@ --- info: note: '' - source: '' + source: Regression test. inputs: provided: hh_id: @@ -13,30 +13,54 @@ inputs: p_id_ehepartner: - -1 - -1 + p_id_einstandspartner: + - -1 + - -1 + p_id_elternteil_1: + - -1 + - 42 + p_id_elternteil_2: + - -1 + - -1 + steuerklasse: + - 1 + - 1 + ges_pflegev_hat_kinder: + - true + - false + alter: + - 43 + - 0 + elterngeld_claimed: + - true + - false + in_ausbildung: + - false + - false gemeinsam_veranlagt: - false - false + alleinerz: + - true + - false kind: - false - true + arbeitsstunden_w: + - 3.0 + - 0.0 bruttolohn_m: - 100.0 - 0.0 - bruttolohn_vorj_m: + elterngeld_nettoeinkommen_vorjahr_m: - 1800.0 - 0.0 + elterngeld_zu_verst_eink_vorjahr_y_sn: + - 18260.0 + - 0.0 wohnort_ost: - false - false - eink_st_y_sn: - - 0.0 - - 0.0 - soli_st_y_sn: - - 0.0 - - 0.0 - sozialv_beitr_arbeitnehmer_m: - - 0.0 - - 0.0 geburtsjahr: - 1974 - 2017 @@ -46,13 +70,7 @@ inputs: geburtstag: - 4 - 12 - m_elterngeld_mut_hh: - - 1 - - 1 - m_elterngeld_vat_hh: - - 0 - - 0 - m_elterngeld: + monate_elterngeldbezug: - 0 - 0 jahr: @@ -61,14 +79,14 @@ inputs: assumed: {} outputs: elterngeld_m: - - 730.97 + - 1105.0 - 0.0 - elterngeld_geschw_bonus_anspruch: + geschwisterbonus_anspruchsberechtigt_fg: - false - false - _elterngeld_anz_mehrlinge_anspruch: + _elterngeld_anz_mehrlinge_fg: - 0 - 0 - elternzeit_anspruch: + elterngeld_anspruchsbedingungen_erfüllt: - true - false diff --git a/src/_gettsim_tests/test_data/elterngeld/2018/hh_id_3.yaml b/src/_gettsim_tests/test_data/elterngeld/2018/hh_id_3.yaml index 6b0931501e..3153ffb921 100644 --- a/src/_gettsim_tests/test_data/elterngeld/2018/hh_id_3.yaml +++ b/src/_gettsim_tests/test_data/elterngeld/2018/hh_id_3.yaml @@ -1,7 +1,7 @@ --- info: note: '' - source: '' + source: Regression test. inputs: provided: hh_id: @@ -13,30 +13,54 @@ inputs: p_id_ehepartner: - 56 - 55 + p_id_einstandspartner: + - 56 + - 55 + p_id_elternteil_1: + - -1 + - -1 + p_id_elternteil_2: + - -1 + - -1 + steuerklasse: + - 1 + - 1 + ges_pflegev_hat_kinder: + - false + - false + alter: + - 43 + - 43 + elterngeld_claimed: + - false + - false + in_ausbildung: + - false + - false gemeinsam_veranlagt: - false - false + alleinerz: + - false + - false kind: - false - false + arbeitsstunden_w: + - 9.0 + - 30.0 bruttolohn_m: - 900.0 - 3400.0 - bruttolohn_vorj_m: + elterngeld_nettoeinkommen_vorjahr_m: - 900.0 - 3600.0 + elterngeld_zu_verst_eink_vorjahr_y_sn: + - 7406.0 + - 39806.0 wohnort_ost: - false - false - eink_st_y_sn: - - 7.68 - - 708.27 - soli_st_y_sn: - - 0.0 - - 38.96 - sozialv_beitr_arbeitnehmer_m: - - 180.0 - - 680.0 geburtsjahr: - 1976 - 1976 @@ -46,13 +70,7 @@ inputs: geburtstag: - 5 - 7 - m_elterngeld_mut_hh: - - 1 - - 1 - m_elterngeld_vat_hh: - - 0 - - 0 - m_elterngeld: + monate_elterngeldbezug: - 0 - 0 jahr: @@ -63,12 +81,12 @@ outputs: elterngeld_m: - 0.0 - 0.0 - elterngeld_geschw_bonus_anspruch: + geschwisterbonus_anspruchsberechtigt_fg: - false - false - _elterngeld_anz_mehrlinge_anspruch: + _elterngeld_anz_mehrlinge_fg: - 0 - 0 - elternzeit_anspruch: + elterngeld_anspruchsbedingungen_erfüllt: - false - false diff --git a/src/_gettsim_tests/test_data/elterngeld/2018/hh_id_4.yaml b/src/_gettsim_tests/test_data/elterngeld/2018/hh_id_4.yaml index cf11a054b7..8ad87ba60c 100644 --- a/src/_gettsim_tests/test_data/elterngeld/2018/hh_id_4.yaml +++ b/src/_gettsim_tests/test_data/elterngeld/2018/hh_id_4.yaml @@ -1,7 +1,7 @@ --- info: note: '' - source: '' + source: Regression test. inputs: provided: hh_id: @@ -13,30 +13,54 @@ inputs: p_id_ehepartner: - -1 - -1 + p_id_einstandspartner: + - -1 + - -1 + p_id_elternteil_1: + - 57 + - -1 + p_id_elternteil_2: + - -1 + - -1 + steuerklasse: + - 1 + - 1 + ges_pflegev_hat_kinder: + - false + - true + alter: + - 0 + - 42 + elterngeld_claimed: + - false + - true + in_ausbildung: + - false + - false gemeinsam_veranlagt: - false - false + alleinerz: + - false + - true kind: - true - false + arbeitsstunden_w: + - 0.0 + - 33.0 bruttolohn_m: - 0.0 - 3600.0 - bruttolohn_vorj_m: + elterngeld_nettoeinkommen_vorjahr_m: - 0.0 - 3400.0 + elterngeld_zu_verst_eink_vorjahr_y_sn: + - 0.0 + - 37406.0 wohnort_ost: - false - false - eink_st_y_sn: - - 0.0 - - 779.33 - soli_st_y_sn: - - 0.0 - - 42.86 - sozialv_beitr_arbeitnehmer_m: - - 0.0 - - 756.0 geburtsjahr: - 2017 - 1976 @@ -46,13 +70,7 @@ inputs: geburtstag: - 12 - 9 - m_elterngeld_mut_hh: - - 1 - - 1 - m_elterngeld_vat_hh: - - 0 - - 0 - m_elterngeld: + monate_elterngeldbezug: - 0 - 0 jahr: @@ -63,12 +81,12 @@ outputs: elterngeld_m: - 0.0 - 0.0 - elterngeld_geschw_bonus_anspruch: + geschwisterbonus_anspruchsberechtigt_fg: - false - false - _elterngeld_anz_mehrlinge_anspruch: + _elterngeld_anz_mehrlinge_fg: - 0 - 0 - elternzeit_anspruch: + elterngeld_anspruchsbedingungen_erfüllt: + - false - false - - true diff --git a/src/_gettsim_tests/test_data/elterngeld/2018/hh_id_6.yaml b/src/_gettsim_tests/test_data/elterngeld/2018/hh_id_6.yaml index a1d86fbbf7..120b138271 100644 --- a/src/_gettsim_tests/test_data/elterngeld/2018/hh_id_6.yaml +++ b/src/_gettsim_tests/test_data/elterngeld/2018/hh_id_6.yaml @@ -1,7 +1,7 @@ --- info: note: '' - source: '' + source: Regression test. inputs: provided: hh_id: @@ -10,33 +10,45 @@ inputs: - 19 p_id_ehepartner: - -1 + p_id_einstandspartner: + - -1 + p_id_elternteil_1: + - -1 + p_id_elternteil_2: + - -1 + steuerklasse: + - 1 + ges_pflegev_hat_kinder: + - true + alter: + - 43 + elterngeld_claimed: + - false + in_ausbildung: + - false gemeinsam_veranlagt: - false + alleinerz: + - false kind: - false + arbeitsstunden_w: + - 10.0 bruttolohn_m: - 900.0 - bruttolohn_vorj_m: + elterngeld_nettoeinkommen_vorjahr_m: - 900.0 + elterngeld_zu_verst_eink_vorjahr_y_sn: + - 7406.0 wohnort_ost: - false - eink_st_y_sn: - - 7.68 - soli_st_y_sn: - - 0.0 - sozialv_beitr_arbeitnehmer_m: - - 180.0 geburtsjahr: - 1980 geburtsmonat: - 11 geburtstag: - 11 - m_elterngeld_mut_hh: - - 0 - m_elterngeld_vat_hh: - - 0 - m_elterngeld: + monate_elterngeldbezug: - 0 jahr: - 2018 @@ -44,9 +56,9 @@ inputs: outputs: elterngeld_m: - 0.0 - elterngeld_geschw_bonus_anspruch: + geschwisterbonus_anspruchsberechtigt_fg: - false - _elterngeld_anz_mehrlinge_anspruch: + _elterngeld_anz_mehrlinge_fg: - 0 - elternzeit_anspruch: + elterngeld_anspruchsbedingungen_erfüllt: - false diff --git a/src/_gettsim_tests/test_data/elterngeld/2019/hh_id_1.yaml b/src/_gettsim_tests/test_data/elterngeld/2019/hh_id_1.yaml index 3dc7506310..caa3f8b74e 100644 --- a/src/_gettsim_tests/test_data/elterngeld/2019/hh_id_1.yaml +++ b/src/_gettsim_tests/test_data/elterngeld/2019/hh_id_1.yaml @@ -1,7 +1,7 @@ --- info: note: '' - source: '' + source: Regression test. inputs: provided: hh_id: @@ -13,30 +13,54 @@ inputs: p_id_ehepartner: - -1 - -1 + p_id_einstandspartner: + - -1 + - -1 + p_id_elternteil_1: + - -1 + - 23 + p_id_elternteil_2: + - -1 + - -1 + steuerklasse: + - 1 + - 1 + ges_pflegev_hat_kinder: + - true + - false + alter: + - 43 + - 0 gemeinsam_veranlagt: - false - false + alleinerz: + - true + - false kind: - false - true - bruttolohn_m: - - 0.0 - - 0.0 - bruttolohn_vorj_m: - - 0.0 - - 0.0 - wohnort_ost: + elterngeld_claimed: + - true - false + in_ausbildung: - false - eink_st_y_sn: + - false + arbeitsstunden_w: + - 0.0 + - 0.0 + bruttolohn_m: - 0.0 - 0.0 - soli_st_y_sn: + elterngeld_nettoeinkommen_vorjahr_m: - 0.0 - 0.0 - sozialv_beitr_arbeitnehmer_m: + elterngeld_zu_verst_eink_vorjahr_y_sn: - 0.0 - 0.0 + wohnort_ost: + - false + - false geburtsjahr: - 1972 - 2018 @@ -46,13 +70,7 @@ inputs: geburtstag: - 2 - 12 - m_elterngeld_mut_hh: - - 2 - - 2 - m_elterngeld_vat_hh: - - 2 - - 2 - m_elterngeld: + monate_elterngeldbezug: - 0 - 0 jahr: @@ -63,12 +81,12 @@ outputs: elterngeld_m: - 300.0 - 0.0 - elterngeld_geschw_bonus_anspruch: + geschwisterbonus_anspruchsberechtigt_fg: - false - false - _elterngeld_anz_mehrlinge_anspruch: + _elterngeld_anz_mehrlinge_fg: - 0 - 0 - elternzeit_anspruch: + elterngeld_anspruchsbedingungen_erfüllt: - true - false diff --git a/src/_gettsim_tests/test_data/elterngeld/2019/hh_id_3.yaml b/src/_gettsim_tests/test_data/elterngeld/2019/hh_id_3.yaml index 0e306adb31..812bfc27d2 100644 --- a/src/_gettsim_tests/test_data/elterngeld/2019/hh_id_3.yaml +++ b/src/_gettsim_tests/test_data/elterngeld/2019/hh_id_3.yaml @@ -1,7 +1,7 @@ --- info: note: '' - source: '' + source: Regression test. inputs: provided: hh_id: @@ -16,38 +16,70 @@ inputs: - 56 - -1 - 55 + p_id_einstandspartner: + - 56 + - -1 + - 55 + p_id_elternteil_1: + - -1 + - 55 + - -1 + p_id_elternteil_2: + - -1 + - 56 + - -1 + steuerklasse: + - 1 + - 1 + - 1 + ges_pflegev_hat_kinder: + - true + - false + - true + alter: + - 43 + - 0 + - 43 + elterngeld_claimed: + - true + - false + - false + in_ausbildung: + - false + - false + - false gemeinsam_veranlagt: - false - false - false + alleinerz: + - false + - false + - false kind: - false - true - false + arbeitsstunden_w: + - 0.0 + - 0.0 + - 39.83 bruttolohn_m: - 0.0 - 0.0 - 3600.0 - bruttolohn_vorj_m: + elterngeld_nettoeinkommen_vorjahr_m: - 900.0 - 0.0 - 3400.0 + elterngeld_zu_verst_eink_vorjahr_y_sn: + - 5760.0 + - 0.00 + - 35760.0 wohnort_ost: - false - false - false - eink_st_y_sn: - - 0.0 - - 0.0 - - 788.34 - soli_st_y_sn: - - 0.0 - - 0.0 - - 43.36 - sozialv_beitr_arbeitnehmer_m: - - 0.0 - - 0.0 - - 756.0 geburtsjahr: - 1976 - 2018 @@ -60,15 +92,7 @@ inputs: - 6 - 12 - 8 - m_elterngeld_mut_hh: - - 1 - - 1 - - 1 - m_elterngeld_vat_hh: - - 0 - - 0 - - 0 - m_elterngeld: + monate_elterngeldbezug: - 0 - 0 - 0 @@ -79,18 +103,18 @@ inputs: assumed: {} outputs: elterngeld_m: - - 575.554889 + - 648.0 - 0.0 - 0.0 - elterngeld_geschw_bonus_anspruch: + geschwisterbonus_anspruchsberechtigt_fg: - false - false - false - _elterngeld_anz_mehrlinge_anspruch: + _elterngeld_anz_mehrlinge_fg: - 0 - 0 - 0 - elternzeit_anspruch: + elterngeld_anspruchsbedingungen_erfüllt: - true - false - - true + - false diff --git a/src/_gettsim_tests/test_data/elterngeld/2019/hh_id_5.yaml b/src/_gettsim_tests/test_data/elterngeld/2019/hh_id_5.yaml index 921709da6a..fb1e8f156a 100644 --- a/src/_gettsim_tests/test_data/elterngeld/2019/hh_id_5.yaml +++ b/src/_gettsim_tests/test_data/elterngeld/2019/hh_id_5.yaml @@ -1,7 +1,7 @@ --- info: note: '' - source: '' + source: Regression test. inputs: provided: hh_id: @@ -13,30 +13,54 @@ inputs: p_id_ehepartner: - -1 - -1 + p_id_einstandspartner: + - -1 + - -1 + p_id_elternteil_1: + - -1 + - 58 + p_id_elternteil_2: + - -1 + - -1 + steuerklasse: + - 1 + - 1 + ges_pflegev_hat_kinder: + - true + - false + alter: + - 43 + - 0 + elterngeld_claimed: + - true + - false + in_ausbildung: + - false + - false gemeinsam_veranlagt: - false - false + alleinerz: + - true + - false kind: - false - true + arbeitsstunden_w: + - 0.0 + - 0.0 bruttolohn_m: - 0.0 - 0.0 - bruttolohn_vorj_m: + elterngeld_nettoeinkommen_vorjahr_m: - 3600.0 - 0.0 + elterngeld_zu_verst_eink_vorjahr_y_sn: + - 38160.00 + - 0.0 wohnort_ost: - false - false - eink_st_y_sn: - - 0.0 - - 0.0 - soli_st_y_sn: - - 0.0 - - 0.0 - sozialv_beitr_arbeitnehmer_m: - - 0.0 - - 0.0 geburtsjahr: - 1978 - 2018 @@ -46,13 +70,7 @@ inputs: geburtstag: - 10 - 12 - m_elterngeld_mut_hh: - - 1 - - 1 - m_elterngeld_vat_hh: - - 0 - - 0 - m_elterngeld: + monate_elterngeldbezug: - 0 - 0 jahr: @@ -61,14 +79,14 @@ inputs: assumed: {} outputs: elterngeld_m: - - 1314.1765 + - 1800.0 - 0.0 - elterngeld_geschw_bonus_anspruch: + geschwisterbonus_anspruchsberechtigt_fg: - false - false - _elterngeld_anz_mehrlinge_anspruch: + _elterngeld_anz_mehrlinge_fg: - 0 - 0 - elternzeit_anspruch: + elterngeld_anspruchsbedingungen_erfüllt: - true - false diff --git a/src/_gettsim_tests/test_data/elterngeld/2019/hh_id_6.yaml b/src/_gettsim_tests/test_data/elterngeld/2019/hh_id_6.yaml index 7f9211995d..ee968f3cdb 100644 --- a/src/_gettsim_tests/test_data/elterngeld/2019/hh_id_6.yaml +++ b/src/_gettsim_tests/test_data/elterngeld/2019/hh_id_6.yaml @@ -1,7 +1,7 @@ --- info: note: '' - source: '' + source: Regression test. inputs: provided: hh_id: @@ -16,38 +16,70 @@ inputs: - -1 - -1 - -1 + p_id_einstandspartner: + - -1 + - -1 + - -1 + p_id_elternteil_1: + - 19 + - 19 + - -1 + p_id_elternteil_2: + - -1 + - -1 + - -1 + steuerklasse: + - 1 + - 1 + - 1 + ges_pflegev_hat_kinder: + - false + - false + - true + alter: + - 2 + - 0 + - 37 gemeinsam_veranlagt: - false - false - false + alleinerz: + - false + - false + - true kind: - true - true - false - bruttolohn_m: - - 0.0 - - 0.0 - - 0.0 - bruttolohn_vorj_m: - - 0.0 - - 0.0 - - 900.0 - wohnort_ost: + elterngeld_claimed: + - false + - false + - true + in_ausbildung: - false - false - false - eink_st_y_sn: + arbeitsstunden_w: + - 0.0 - 0.0 - 0.0 + bruttolohn_m: - 0.0 - soli_st_y_sn: - 0.0 - 0.0 + elterngeld_nettoeinkommen_vorjahr_m: - 0.0 - sozialv_beitr_arbeitnehmer_m: - 0.0 + - 900.0 + elterngeld_zu_verst_eink_vorjahr_y_sn: - 0.0 - 0.0 + - 5760.0 + wohnort_ost: + - false + - false + - false geburtsjahr: - 2017 - 2018 @@ -60,15 +92,7 @@ inputs: - 12 - 12 - 13 - m_elterngeld_mut_hh: - - 2 - - 2 - - 2 - m_elterngeld_vat_hh: - - 2 - - 2 - - 2 - m_elterngeld: + monate_elterngeldbezug: - 0 - 0 - 2 @@ -81,16 +105,20 @@ outputs: elterngeld_m: - 0.0 - 0.0 - - 650.554889 - elterngeld_geschw_bonus_anspruch: - - false - - false + - 723.0 + geschwisterbonus_anspruchsberechtigt_fg: + - true + - true - true - _elterngeld_anz_mehrlinge_anspruch: + _elterngeld_anz_mehrlinge_fg: - 0 - 0 - 0 - elternzeit_anspruch: + elterngeld_anspruchsbedingungen_erfüllt: - false - false - true + elterngeld_basisbetrag_m: + - 0.0 + - 0.0 + - 648.0 diff --git a/src/_gettsim_tests/test_data/elterngeld/2019/hh_id_7.yaml b/src/_gettsim_tests/test_data/elterngeld/2019/hh_id_7.yaml index 9df1f223f0..e40b2f5327 100644 --- a/src/_gettsim_tests/test_data/elterngeld/2019/hh_id_7.yaml +++ b/src/_gettsim_tests/test_data/elterngeld/2019/hh_id_7.yaml @@ -1,7 +1,7 @@ --- info: note: '' - source: '' + source: Regression test. inputs: provided: hh_id: @@ -16,38 +16,70 @@ inputs: - 72 - 71 - -1 + p_id_einstandspartner: + - 72 + - 71 + - -1 + p_id_elternteil_1: + - -1 + - -1 + - 71 + p_id_elternteil_2: + - -1 + - -1 + - 72 + steuerklasse: + - 1 + - 1 + - 1 + ges_pflegev_hat_kinder: + - true + - true + - false + alter: + - 43 + - 43 + - 0 + elterngeld_claimed: + - true + - true + - false + in_ausbildung: + - false + - false + - false gemeinsam_veranlagt: - false - false - false + alleinerz: + - false + - false + - false kind: - false - false - true + arbeitsstunden_w: + - 0.0 + - 0.0 + - 0.0 bruttolohn_m: - 0.0 - 0.0 - 0.0 - bruttolohn_vorj_m: + elterngeld_nettoeinkommen_vorjahr_m: - 1800.0 - 1800.0 - 0.0 + elterngeld_zu_verst_eink_vorjahr_y_sn: + - 16560.00 + - 16560.00 + - 0.0 wohnort_ost: - false - false - false - eink_st_y_sn: - - 0.0 - - 0.0 - - 0.0 - soli_st_y_sn: - - 0.0 - - 0.0 - - 0.0 - sozialv_beitr_arbeitnehmer_m: - - 0.0 - - 0.0 - - 0.0 geburtsjahr: - 1976 - 1976 @@ -60,15 +92,7 @@ inputs: - 5 - 6 - 1 - m_elterngeld_mut_hh: - - 0 - - 0 - - 0 - m_elterngeld_vat_hh: - - 0 - - 0 - - 0 - m_elterngeld: + monate_elterngeldbezug: - 0 - 0 - 0 @@ -79,18 +103,18 @@ inputs: assumed: {} outputs: elterngeld_m: - - 801.15 - - 801.15 + - 1170.0 + - 1170.0 - 0.0 - elterngeld_geschw_bonus_anspruch: + geschwisterbonus_anspruchsberechtigt_fg: - false - false - false - _elterngeld_anz_mehrlinge_anspruch: + _elterngeld_anz_mehrlinge_fg: - 0 - 0 - 0 - elternzeit_anspruch: + elterngeld_anspruchsbedingungen_erfüllt: - true - true - false diff --git a/src/_gettsim_tests/test_data/elterngeld/2019/hh_id_8.yaml b/src/_gettsim_tests/test_data/elterngeld/2019/hh_id_8.yaml index 5c8773c25a..f47cc33b55 100644 --- a/src/_gettsim_tests/test_data/elterngeld/2019/hh_id_8.yaml +++ b/src/_gettsim_tests/test_data/elterngeld/2019/hh_id_8.yaml @@ -1,7 +1,7 @@ --- info: note: '' - source: '' + source: Regression test. inputs: provided: hh_id: @@ -11,54 +11,94 @@ inputs: - 8 p_id: - 25 - - 27 - 26 + - 27 - 28 p_id_ehepartner: - -1 - -1 - -1 - -1 + p_id_einstandspartner: + - -1 + - -1 + - -1 + - -1 + p_id_elternteil_1: + - 28 + - 28 + - 28 + - -1 + p_id_elternteil_2: + - -1 + - -1 + - -1 + - -1 + steuerklasse: + - 1 + - 1 + - 1 + - 1 + ges_pflegev_hat_kinder: + - false + - false + - false + - true + alter: + - 1 + - 0 + - 0 + - 43 + elterngeld_claimed: + - false + - false + - false + - true + in_ausbildung: + - false + - false + - false + - false gemeinsam_veranlagt: - false - false - false - false + alleinerz: + - false + - false + - false + - true kind: - true - true - true - false - bruttolohn_m: - - 0.0 + arbeitsstunden_w: - 0.0 - 0.0 - 0.0 - bruttolohn_vorj_m: - - 0.0 - - 0.0 - - 0.0 - - 900.0 - wohnort_ost: - - false - - false - - false - - false - eink_st_y_sn: - - 0.0 - 0.0 + bruttolohn_m: - 0.0 - 0.0 - soli_st_y_sn: - 0.0 - 0.0 + elterngeld_nettoeinkommen_vorjahr_m: - 0.0 - 0.0 - sozialv_beitr_arbeitnehmer_m: - 0.0 + - 900.0 + elterngeld_zu_verst_eink_vorjahr_y_sn: - 0.0 - 0.0 - 0.0 + - 5760.0 + wohnort_ost: + - false + - false + - false + - false geburtsjahr: - 2017 - 2018 @@ -74,17 +114,7 @@ inputs: - 12 - 12 - 13 - m_elterngeld_mut_hh: - - 2 - - 2 - - 2 - - 2 - m_elterngeld_vat_hh: - - 2 - - 2 - - 2 - - 2 - m_elterngeld: + monate_elterngeldbezug: - 0 - 0 - 0 @@ -100,18 +130,18 @@ outputs: - 0.0 - 0.0 - 0.0 - - 950.554889 - elterngeld_geschw_bonus_anspruch: - - false - - false - - false + - 1023.0 + geschwisterbonus_anspruchsberechtigt_fg: + - true + - true - true - _elterngeld_anz_mehrlinge_anspruch: - - 0 - - 0 - - 0 + - true + _elterngeld_anz_mehrlinge_fg: + - 1 + - 1 + - 1 - 1 - elternzeit_anspruch: + elterngeld_anspruchsbedingungen_erfüllt: - false - false - false diff --git a/src/_gettsim_tests/test_data/elterngeld/2024-04-01/taxable_income_low.yaml b/src/_gettsim_tests/test_data/elterngeld/2024-04-01/taxable_income_low.yaml new file mode 100644 index 0000000000..18283f4a9c --- /dev/null +++ b/src/_gettsim_tests/test_data/elterngeld/2024-04-01/taxable_income_low.yaml @@ -0,0 +1,112 @@ +--- +info: + note: '' + source: Regression test. +inputs: + provided: + hh_id: + - 0 + - 0 + - 0 + p_id: + - 0 + - 1 + - 2 + p_id_ehepartner: + - 1 + - 0 + - -1 + p_id_einstandspartner: + - 1 + - 0 + - -1 + p_id_elternteil_1: + - -1 + - -1 + - 0 + p_id_elternteil_2: + - -1 + - -1 + - 1 + steuerklasse: + - 1 + - 1 + - 1 + ges_pflegev_hat_kinder: + - true + - true + - false + alter: + - 43 + - 43 + - 0 + elterngeld_claimed: + - true + - false + - false + in_ausbildung: + - false + - false + - false + gemeinsam_veranlagt: + - false + - false + - false + alleinerz: + - false + - false + - false + kind: + - false + - false + - true + arbeitsstunden_w: + - 0.0 + - 39.83 + - 0.0 + bruttolohn_m: + - 0.0 + - 190000.0 + - 0.0 + elterngeld_nettoeinkommen_vorjahr_m: + - 2000.0 + - 13000.0 + - 0.0 + elterngeld_zu_verst_eink_vorjahr_y_sn: + - 100000.0 + - 100000.0 + - 0.00 + lohnst_m: + - 0.0 + - 0.0 + - 0.0 + soli_lohst_m: + - 0.0 + - 0.0 + - 0.0 + wohnort_ost: + - false + - false + - false + geburtsjahr: + - 1976 + - 1976 + - 2018 + geburtsmonat: + - 6 + - 6 + - 8 + geburtstag: + - 6 + - 8 + - 12 + monate_elterngeldbezug: + - 0 + - 0 + - 0 + assumed: {} +outputs: + elterngeld_m: + - 1300.0 + - 0.0 + - 0.0 diff --git a/src/_gettsim_tests/test_data/elterngeld/2024-04-01/taxable_income_too_high.yaml b/src/_gettsim_tests/test_data/elterngeld/2024-04-01/taxable_income_too_high.yaml new file mode 100644 index 0000000000..296e679c91 --- /dev/null +++ b/src/_gettsim_tests/test_data/elterngeld/2024-04-01/taxable_income_too_high.yaml @@ -0,0 +1,112 @@ +--- +info: + note: '' + source: Regression test. +inputs: + provided: + hh_id: + - 0 + - 0 + - 0 + p_id: + - 0 + - 1 + - 2 + p_id_ehepartner: + - 1 + - 0 + - -1 + p_id_einstandspartner: + - 1 + - 0 + - -1 + p_id_elternteil_1: + - -1 + - -1 + - 0 + p_id_elternteil_2: + - -1 + - -1 + - 1 + steuerklasse: + - 1 + - 1 + - 1 + ges_pflegev_hat_kinder: + - true + - true + - false + alter: + - 43 + - 43 + - 0 + elterngeld_claimed: + - true + - false + - false + in_ausbildung: + - false + - false + - false + gemeinsam_veranlagt: + - false + - false + - false + alleinerz: + - false + - false + - false + kind: + - false + - false + - true + arbeitsstunden_w: + - 0.0 + - 39.83 + - 0.0 + bruttolohn_m: + - 0.0 + - 190000.0 + - 0.0 + elterngeld_nettoeinkommen_vorjahr_m: + - 2000.0 + - 13000.0 + - 0.0 + elterngeld_zu_verst_eink_vorjahr_y_sn: + - 2000000.0 + - 2000000.0 + - 0.00 + lohnst_m: + - 0.0 + - 0.0 + - 0.0 + soli_lohst_m: + - 0.0 + - 0.0 + - 0.0 + wohnort_ost: + - false + - false + - false + geburtsjahr: + - 1976 + - 1976 + - 2018 + geburtsmonat: + - 6 + - 6 + - 8 + geburtstag: + - 6 + - 8 + - 12 + monate_elterngeldbezug: + - 0 + - 0 + - 0 + assumed: {} +outputs: + elterngeld_m: + - 0.0 + - 0.0 + - 0.0 diff --git a/src/_gettsim_tests/test_data/elterngeld/2024/income_during_elterngeld.yaml b/src/_gettsim_tests/test_data/elterngeld/2024/income_during_elterngeld.yaml new file mode 100644 index 0000000000..ae11785f42 --- /dev/null +++ b/src/_gettsim_tests/test_data/elterngeld/2024/income_during_elterngeld.yaml @@ -0,0 +1,128 @@ +--- +info: + note: '' + source: Regression test. +inputs: + provided: + hh_id: + - 3 + - 3 + - 3 + p_id: + - 55 + - 50 + - 56 + p_id_ehepartner: + - 56 + - -1 + - 55 + p_id_einstandspartner: + - 56 + - -1 + - 55 + p_id_elternteil_1: + - -1 + - 55 + - -1 + p_id_elternteil_2: + - -1 + - 56 + - -1 + steuerklasse: + - 1 + - 1 + - 1 + ges_pflegev_hat_kinder: + - true + - false + - true + alter: + - 43 + - 0 + - 43 + elterngeld_claimed: + - true + - false + - false + in_ausbildung: + - false + - false + - false + gemeinsam_veranlagt: + - false + - false + - false + alleinerz: + - false + - false + - false + kind: + - false + - true + - false + arbeitsstunden_w: + - 0.0 + - 0.0 + - 39.83 + bruttolohn_m: + - 200.0 + - 0.0 + - 3600.0 + elterngeld_nettoeinkommen_vorjahr_m: + - 1000.0 + - 0.0 + - 3400.0 + elterngeld_zu_verst_eink_vorjahr_y_sn: + - 5760.0 + - 0.00 + - 35760.0 + lohnst_m: + - 0.0 + - 0.0 + - 0.0 + soli_lohst_m: + - 0.0 + - 0.0 + - 0.0 + wohnort_ost: + - false + - false + - false + geburtsjahr: + - 1976 + - 2018 + - 1976 + geburtsmonat: + - 6 + - 6 + - 8 + geburtstag: + - 6 + - 12 + - 8 + monate_elterngeldbezug: + - 0 + - 0 + - 0 + jahr: + - 2019 + - 2019 + - 2019 + assumed: {} +outputs: + elterngeld_m: + - 536.0 + - 0.0 + - 0.0 + geschwisterbonus_anspruchsberechtigt_fg: + - false + - false + - false + _elterngeld_anz_mehrlinge_fg: + - 0 + - 0 + - 0 + elterngeld_anspruchsbedingungen_erfüllt: + - true + - false + - false diff --git a/src/_gettsim_tests/test_data/elterngeld/2024/maximum_elterngeld.yaml b/src/_gettsim_tests/test_data/elterngeld/2024/maximum_elterngeld.yaml new file mode 100644 index 0000000000..fb1e8f156a --- /dev/null +++ b/src/_gettsim_tests/test_data/elterngeld/2024/maximum_elterngeld.yaml @@ -0,0 +1,92 @@ +--- +info: + note: '' + source: Regression test. +inputs: + provided: + hh_id: + - 5 + - 5 + p_id: + - 58 + - 60 + p_id_ehepartner: + - -1 + - -1 + p_id_einstandspartner: + - -1 + - -1 + p_id_elternteil_1: + - -1 + - 58 + p_id_elternteil_2: + - -1 + - -1 + steuerklasse: + - 1 + - 1 + ges_pflegev_hat_kinder: + - true + - false + alter: + - 43 + - 0 + elterngeld_claimed: + - true + - false + in_ausbildung: + - false + - false + gemeinsam_veranlagt: + - false + - false + alleinerz: + - true + - false + kind: + - false + - true + arbeitsstunden_w: + - 0.0 + - 0.0 + bruttolohn_m: + - 0.0 + - 0.0 + elterngeld_nettoeinkommen_vorjahr_m: + - 3600.0 + - 0.0 + elterngeld_zu_verst_eink_vorjahr_y_sn: + - 38160.00 + - 0.0 + wohnort_ost: + - false + - false + geburtsjahr: + - 1978 + - 2018 + geburtsmonat: + - 10 + - 4 + geburtstag: + - 10 + - 12 + monate_elterngeldbezug: + - 0 + - 0 + jahr: + - 2019 + - 2019 + assumed: {} +outputs: + elterngeld_m: + - 1800.0 + - 0.0 + geschwisterbonus_anspruchsberechtigt_fg: + - false + - false + _elterngeld_anz_mehrlinge_fg: + - 0 + - 0 + elterngeld_anspruchsbedingungen_erfüllt: + - true + - false diff --git a/src/_gettsim_tests/test_data/elterngeld/2024/minimum_elterngeld.yaml b/src/_gettsim_tests/test_data/elterngeld/2024/minimum_elterngeld.yaml new file mode 100644 index 0000000000..caa3f8b74e --- /dev/null +++ b/src/_gettsim_tests/test_data/elterngeld/2024/minimum_elterngeld.yaml @@ -0,0 +1,92 @@ +--- +info: + note: '' + source: Regression test. +inputs: + provided: + hh_id: + - 1 + - 1 + p_id: + - 23 + - 18 + p_id_ehepartner: + - -1 + - -1 + p_id_einstandspartner: + - -1 + - -1 + p_id_elternteil_1: + - -1 + - 23 + p_id_elternteil_2: + - -1 + - -1 + steuerklasse: + - 1 + - 1 + ges_pflegev_hat_kinder: + - true + - false + alter: + - 43 + - 0 + gemeinsam_veranlagt: + - false + - false + alleinerz: + - true + - false + kind: + - false + - true + elterngeld_claimed: + - true + - false + in_ausbildung: + - false + - false + arbeitsstunden_w: + - 0.0 + - 0.0 + bruttolohn_m: + - 0.0 + - 0.0 + elterngeld_nettoeinkommen_vorjahr_m: + - 0.0 + - 0.0 + elterngeld_zu_verst_eink_vorjahr_y_sn: + - 0.0 + - 0.0 + wohnort_ost: + - false + - false + geburtsjahr: + - 1972 + - 2018 + geburtsmonat: + - 2 + - 10 + geburtstag: + - 2 + - 12 + monate_elterngeldbezug: + - 0 + - 0 + jahr: + - 2019 + - 2019 + assumed: {} +outputs: + elterngeld_m: + - 300.0 + - 0.0 + geschwisterbonus_anspruchsberechtigt_fg: + - false + - false + _elterngeld_anz_mehrlinge_fg: + - 0 + - 0 + elterngeld_anspruchsbedingungen_erfüllt: + - true + - false diff --git a/src/_gettsim_tests/test_data/elterngeld/2024/net_income_approximation.yaml b/src/_gettsim_tests/test_data/elterngeld/2024/net_income_approximation.yaml new file mode 100644 index 0000000000..12f86bf1b4 --- /dev/null +++ b/src/_gettsim_tests/test_data/elterngeld/2024/net_income_approximation.yaml @@ -0,0 +1,53 @@ +--- +info: + note: '' + source: Regression test. +inputs: + provided: + hh_id: + - 0 + - 0 + p_id: + - 0 + - 1 + p_id_ehepartner: + - -1 + - -1 + p_id_einstandspartner: + - -1 + - -1 + p_id_elternteil_1: + - -1 + - -1 + p_id_elternteil_2: + - -1 + - -1 + steuerklasse: + - 1 + - 1 + ges_pflegev_hat_kinder: + - false + - false + alter: + - 43 + - 43 + gemeinsam_veranlagt: + - false + - false + bruttolohn_m: + - 1000.0 + - 200.0 + wohnort_ost: + - false + - false + in_ausbildung: + - false + - false + arbeitsstunden_w: + - 40.0 + - 10.0 + assumed: {} +outputs: + elterngeld_nettolohn_approximation_m: + - 790.0 + - 158.0 diff --git a/src/_gettsim_tests/test_data/elterngeld/2024/net_income_before_birth_1000.yaml b/src/_gettsim_tests/test_data/elterngeld/2024/net_income_before_birth_1000.yaml new file mode 100644 index 0000000000..e6ce7dfe27 --- /dev/null +++ b/src/_gettsim_tests/test_data/elterngeld/2024/net_income_before_birth_1000.yaml @@ -0,0 +1,120 @@ +--- +info: + note: '' + source: Regression test. +inputs: + provided: + hh_id: + - 3 + - 3 + - 3 + p_id: + - 55 + - 50 + - 56 + p_id_ehepartner: + - 56 + - -1 + - 55 + p_id_einstandspartner: + - 56 + - -1 + - 55 + p_id_elternteil_1: + - -1 + - 55 + - -1 + p_id_elternteil_2: + - -1 + - 56 + - -1 + steuerklasse: + - 1 + - 1 + - 1 + ges_pflegev_hat_kinder: + - true + - false + - true + alter: + - 43 + - 0 + - 43 + elterngeld_claimed: + - true + - false + - false + in_ausbildung: + - false + - false + - false + gemeinsam_veranlagt: + - false + - false + - false + alleinerz: + - false + - false + - false + kind: + - false + - true + - false + arbeitsstunden_w: + - 0.0 + - 0.0 + - 39.83 + bruttolohn_m: + - 0.0 + - 0.0 + - 3600.0 + elterngeld_nettoeinkommen_vorjahr_m: + - 1000.0 + - 0.0 + - 3400.0 + elterngeld_zu_verst_eink_vorjahr_y_sn: + - 5760.0 + - 0.00 + - 35760.0 + wohnort_ost: + - false + - false + - false + geburtsjahr: + - 1976 + - 2018 + - 1976 + geburtsmonat: + - 6 + - 6 + - 8 + geburtstag: + - 6 + - 12 + - 8 + monate_elterngeldbezug: + - 0 + - 0 + - 0 + jahr: + - 2019 + - 2019 + - 2019 + assumed: {} +outputs: + elterngeld_m: + - 670.0 + - 0.0 + - 0.0 + geschwisterbonus_anspruchsberechtigt_fg: + - false + - false + - false + _elterngeld_anz_mehrlinge_fg: + - 0 + - 0 + - 0 + elterngeld_anspruchsbedingungen_erfüllt: + - true + - false + - false diff --git a/src/_gettsim_tests/test_data/elterngeld/2024/net_income_before_birth_790.yaml b/src/_gettsim_tests/test_data/elterngeld/2024/net_income_before_birth_790.yaml new file mode 100644 index 0000000000..45e53a73fa --- /dev/null +++ b/src/_gettsim_tests/test_data/elterngeld/2024/net_income_before_birth_790.yaml @@ -0,0 +1,120 @@ +--- +info: + note: '' + source: Regression test. +inputs: + provided: + hh_id: + - 3 + - 3 + - 3 + p_id: + - 55 + - 50 + - 56 + p_id_ehepartner: + - 56 + - -1 + - 55 + p_id_einstandspartner: + - 56 + - -1 + - 55 + p_id_elternteil_1: + - -1 + - 55 + - -1 + p_id_elternteil_2: + - -1 + - 56 + - -1 + steuerklasse: + - 1 + - 1 + - 1 + ges_pflegev_hat_kinder: + - true + - false + - true + alter: + - 43 + - 0 + - 43 + elterngeld_claimed: + - true + - false + - false + in_ausbildung: + - false + - false + - false + gemeinsam_veranlagt: + - false + - false + - false + alleinerz: + - false + - false + - false + kind: + - false + - true + - false + arbeitsstunden_w: + - 0.0 + - 0.0 + - 39.83 + bruttolohn_m: + - 0.0 + - 0.0 + - 3600.0 + elterngeld_nettoeinkommen_vorjahr_m: + - 790.0 + - 0.0 + - 3400.0 + elterngeld_zu_verst_eink_vorjahr_y_sn: + - 5760.0 + - 0.00 + - 35760.0 + wohnort_ost: + - false + - false + - false + geburtsjahr: + - 1976 + - 2018 + - 1976 + geburtsmonat: + - 6 + - 6 + - 8 + geburtstag: + - 6 + - 12 + - 8 + monate_elterngeldbezug: + - 0 + - 0 + - 0 + jahr: + - 2019 + - 2019 + - 2019 + assumed: {} +outputs: + elterngeld_m: + - 612.25 + - 0.0 + - 0.0 + geschwisterbonus_anspruchsberechtigt_fg: + - false + - false + - false + _elterngeld_anz_mehrlinge_fg: + - 0 + - 0 + - 0 + elterngeld_anspruchsbedingungen_erfüllt: + - true + - false + - false diff --git a/src/_gettsim_tests/test_data/elterngeld/2024/replacement_rate_decrease.yaml b/src/_gettsim_tests/test_data/elterngeld/2024/replacement_rate_decrease.yaml new file mode 100644 index 0000000000..4f99fe6074 --- /dev/null +++ b/src/_gettsim_tests/test_data/elterngeld/2024/replacement_rate_decrease.yaml @@ -0,0 +1,104 @@ +--- +info: + note: '' + source: Regression test. +inputs: + provided: + hh_id: + - 0 + - 0 + - 0 + p_id: + - 0 + - 1 + - 2 + p_id_ehepartner: + - 2 + - -1 + - 0 + p_id_einstandspartner: + - 2 + - -1 + - 0 + p_id_elternteil_1: + - -1 + - 0 + - -1 + p_id_elternteil_2: + - -1 + - 2 + - -1 + steuerklasse: + - 1 + - 1 + - 1 + ges_pflegev_hat_kinder: + - true + - false + - true + alter: + - 43 + - 0 + - 43 + elterngeld_claimed: + - true + - false + - false + in_ausbildung: + - false + - false + - false + gemeinsam_veranlagt: + - false + - false + - false + alleinerz: + - false + - false + - false + kind: + - false + - true + - false + arbeitsstunden_w: + - 0.0 + - 0.0 + - 39.83 + bruttolohn_m: + - 0.0 + - 0.0 + - 3600.0 + elterngeld_nettoeinkommen_vorjahr_m: + - 1220.0 + - 0.0 + - 0.0 + elterngeld_zu_verst_eink_vorjahr_y_sn: + - 0.0 + - 0.0 + - 0.0 + wohnort_ost: + - false + - false + - false + geburtsjahr: + - 1976 + - 2018 + - 1976 + geburtsmonat: + - 6 + - 6 + - 8 + geburtstag: + - 6 + - 12 + - 8 + monate_elterngeldbezug: + - 0 + - 0 + - 0 + assumed: {} +outputs: + elterngeld_lohnersatzanteil: + - 0.661 + - 0.67 + - 0.67 diff --git a/src/_gettsim_tests/test_data/erziehungsgeld/2005/alleinerz_one_child_budgetsatz.yaml b/src/_gettsim_tests/test_data/erziehungsgeld/2005/alleinerz_one_child_budgetsatz.yaml index 17881249a7..2926ec331c 100644 --- a/src/_gettsim_tests/test_data/erziehungsgeld/2005/alleinerz_one_child_budgetsatz.yaml +++ b/src/_gettsim_tests/test_data/erziehungsgeld/2005/alleinerz_one_child_budgetsatz.yaml @@ -46,6 +46,9 @@ inputs: bruttolohn_vorj_m: - 1500.0 - 0.0 + elterngeld_nettoeinkommen_vorjahr_m: + - 1500.0 + - 0.0 ges_pflegev_hat_kinder: - true - false diff --git a/src/_gettsim_tests/test_data/erziehungsgeld/2005/alleinerz_one_child_regelsatz_high_income.yaml b/src/_gettsim_tests/test_data/erziehungsgeld/2005/alleinerz_one_child_regelsatz_high_income.yaml index 4f005838fa..1e0604f849 100644 --- a/src/_gettsim_tests/test_data/erziehungsgeld/2005/alleinerz_one_child_regelsatz_high_income.yaml +++ b/src/_gettsim_tests/test_data/erziehungsgeld/2005/alleinerz_one_child_regelsatz_high_income.yaml @@ -37,6 +37,9 @@ inputs: bruttolohn_vorj_m: - 1700.0 - 0.0 + elterngeld_nettoeinkommen_vorjahr_m: + - 1700.0 + - 0.0 geburtstag: - 1 - 1 diff --git a/src/_gettsim_tests/test_data/erziehungsgeld/2005/alleinerz_one_child_regelsatz_low_income.yaml b/src/_gettsim_tests/test_data/erziehungsgeld/2005/alleinerz_one_child_regelsatz_low_income.yaml index d609e3e52f..9111faa592 100644 --- a/src/_gettsim_tests/test_data/erziehungsgeld/2005/alleinerz_one_child_regelsatz_low_income.yaml +++ b/src/_gettsim_tests/test_data/erziehungsgeld/2005/alleinerz_one_child_regelsatz_low_income.yaml @@ -46,6 +46,9 @@ inputs: bruttolohn_vorj_m: - 1500.0 - 0.0 + elterngeld_nettoeinkommen_vorjahr_m: + - 1500.0 + - 0.0 ges_pflegev_hat_kinder: - true - false diff --git a/src/_gettsim_tests/test_data/erziehungsgeld/2005/married_one_child_budgetsatz_high_income.yaml b/src/_gettsim_tests/test_data/erziehungsgeld/2005/married_one_child_budgetsatz_high_income.yaml index b800268c6d..952a0e80d3 100644 --- a/src/_gettsim_tests/test_data/erziehungsgeld/2005/married_one_child_budgetsatz_high_income.yaml +++ b/src/_gettsim_tests/test_data/erziehungsgeld/2005/married_one_child_budgetsatz_high_income.yaml @@ -48,6 +48,10 @@ inputs: - 1400.0 - 5000.0 - 0.0 + elterngeld_nettoeinkommen_vorjahr_m: + - 1400.0 + - 5000.0 + - 0.0 geburtstag: - 1 - 1 diff --git a/src/_gettsim_tests/test_data/erziehungsgeld/2005/married_one_child_budgetsatz_low_income.yaml b/src/_gettsim_tests/test_data/erziehungsgeld/2005/married_one_child_budgetsatz_low_income.yaml index 15391df1d2..0f7bb15665 100644 --- a/src/_gettsim_tests/test_data/erziehungsgeld/2005/married_one_child_budgetsatz_low_income.yaml +++ b/src/_gettsim_tests/test_data/erziehungsgeld/2005/married_one_child_budgetsatz_low_income.yaml @@ -48,6 +48,10 @@ inputs: - 1400.0 - 3000.0 - 0.0 + elterngeld_nettoeinkommen_vorjahr_m: + - 1400.0 + - 3000.0 + - 0.0 geburtstag: - 1 - 1 diff --git a/src/_gettsim_tests/test_data/erziehungsgeld/2005/married_one_child_regelsatz.yaml b/src/_gettsim_tests/test_data/erziehungsgeld/2005/married_one_child_regelsatz.yaml index 23032bd41d..0a73728e93 100644 --- a/src/_gettsim_tests/test_data/erziehungsgeld/2005/married_one_child_regelsatz.yaml +++ b/src/_gettsim_tests/test_data/erziehungsgeld/2005/married_one_child_regelsatz.yaml @@ -52,6 +52,10 @@ inputs: - 2500.0 - 2500.0 - 0.0 + elterngeld_nettoeinkommen_vorjahr_m: + - 2500.0 + - 2500.0 + - 0.0 geburtstag: - 1 - 1 diff --git a/src/_gettsim_tests/test_data/erziehungsgeld/2005/married_two_children_budgetsatz_and_regelsatz_high_income.yaml b/src/_gettsim_tests/test_data/erziehungsgeld/2005/married_two_children_budgetsatz_and_regelsatz_high_income.yaml index 724b29e389..6d3eca3a81 100644 --- a/src/_gettsim_tests/test_data/erziehungsgeld/2005/married_two_children_budgetsatz_and_regelsatz_high_income.yaml +++ b/src/_gettsim_tests/test_data/erziehungsgeld/2005/married_two_children_budgetsatz_and_regelsatz_high_income.yaml @@ -59,6 +59,11 @@ inputs: - 1700.0 - 0.0 - 0.0 + elterngeld_nettoeinkommen_vorjahr_m: + - 1400.0 + - 1700.0 + - 0.0 + - 0.0 geburtstag: - 1 - 1 diff --git a/src/_gettsim_tests/test_data/erziehungsgeld/2005/married_two_children_budgetsatz_and_regelsatz_low_income.yaml b/src/_gettsim_tests/test_data/erziehungsgeld/2005/married_two_children_budgetsatz_and_regelsatz_low_income.yaml index b5f5e1f5d4..2e44718ab0 100644 --- a/src/_gettsim_tests/test_data/erziehungsgeld/2005/married_two_children_budgetsatz_and_regelsatz_low_income.yaml +++ b/src/_gettsim_tests/test_data/erziehungsgeld/2005/married_two_children_budgetsatz_and_regelsatz_low_income.yaml @@ -59,6 +59,11 @@ inputs: - 1300.0 - 0.0 - 0.0 + elterngeld_nettoeinkommen_vorjahr_m: + - 400.0 + - 1300.0 + - 0.0 + - 0.0 geburtstag: - 1 - 1 diff --git a/src/_gettsim_tests/test_data/erziehungsgeld/2007/born_after_abolishment.yaml b/src/_gettsim_tests/test_data/erziehungsgeld/2007/born_after_abolishment.yaml index eac5dc59a2..b46b749b83 100644 --- a/src/_gettsim_tests/test_data/erziehungsgeld/2007/born_after_abolishment.yaml +++ b/src/_gettsim_tests/test_data/erziehungsgeld/2007/born_after_abolishment.yaml @@ -46,6 +46,9 @@ inputs: bruttolohn_vorj_m: - 1500.0 - 0.0 + elterngeld_nettoeinkommen_vorjahr_m: + - 1500.0 + - 0.0 ges_pflegev_hat_kinder: - true - false diff --git a/src/_gettsim_tests/test_data/erziehungsgeld/2007/married_two_children_budgetsatz_and_regelsatz_high_income.yaml b/src/_gettsim_tests/test_data/erziehungsgeld/2007/married_two_children_budgetsatz_and_regelsatz_high_income.yaml index cf2a3e5422..8473f5a7b3 100644 --- a/src/_gettsim_tests/test_data/erziehungsgeld/2007/married_two_children_budgetsatz_and_regelsatz_high_income.yaml +++ b/src/_gettsim_tests/test_data/erziehungsgeld/2007/married_two_children_budgetsatz_and_regelsatz_high_income.yaml @@ -59,6 +59,11 @@ inputs: - 1700.0 - 0.0 - 0.0 + elterngeld_nettoeinkommen_vorjahr_m: + - 1400.0 + - 1700.0 + - 0.0 + - 0.0 geburtstag: - 1 - 1 diff --git a/src/_gettsim_tests/test_data/erziehungsgeld/2007/married_two_children_budgetsatz_and_regelsatz_low_income.yaml b/src/_gettsim_tests/test_data/erziehungsgeld/2007/married_two_children_budgetsatz_and_regelsatz_low_income.yaml index c5ead03929..2fdbf0116c 100644 --- a/src/_gettsim_tests/test_data/erziehungsgeld/2007/married_two_children_budgetsatz_and_regelsatz_low_income.yaml +++ b/src/_gettsim_tests/test_data/erziehungsgeld/2007/married_two_children_budgetsatz_and_regelsatz_low_income.yaml @@ -59,6 +59,11 @@ inputs: - 1300.0 - 0.0 - 0.0 + elterngeld_nettoeinkommen_vorjahr_m: + - 400.0 + - 1300.0 + - 0.0 + - 0.0 geburtstag: - 1 - 1 diff --git a/src/_gettsim_tests/test_data/full_taxes_and_transfers/2008/hh_id_1.yaml b/src/_gettsim_tests/test_data/full_taxes_and_transfers/2008/hh_id_1.yaml index 628d1130ce..14c5b9be3b 100644 --- a/src/_gettsim_tests/test_data/full_taxes_and_transfers/2008/hh_id_1.yaml +++ b/src/_gettsim_tests/test_data/full_taxes_and_transfers/2008/hh_id_1.yaml @@ -104,6 +104,21 @@ inputs: - 2000.0 - 3000.0 - 4000.0 + elterngeld_nettoeinkommen_vorjahr_m: + - 1000.0 + - 2000.0 + - 3000.0 + - 4000.0 + elterngeld_claimed: + - true + - true + - true + - true + elterngeld_zu_verst_eink_vorjahr_y_sn: + - 013176.0 + - 025188.0 + - 037200.0 + - 049212.0 arbeitsstunden_w: - 0.0 - 0.0 @@ -194,17 +209,7 @@ inputs: - 50.0 - 50.0 - 50.0 - m_elterngeld: - - 0 - - 0 - - 0 - - 0 - m_elterngeld_vat_hh: - - 0 - - 0 - - 0 - - 0 - m_elterngeld_mut_hh: + monate_elterngeldbezug: - 0 - 0 - 0 diff --git a/src/_gettsim_tests/test_data/full_taxes_and_transfers/2019/hh_id_1.yaml b/src/_gettsim_tests/test_data/full_taxes_and_transfers/2019/hh_id_1.yaml index 71440a78b6..779ab85337 100644 --- a/src/_gettsim_tests/test_data/full_taxes_and_transfers/2019/hh_id_1.yaml +++ b/src/_gettsim_tests/test_data/full_taxes_and_transfers/2019/hh_id_1.yaml @@ -104,6 +104,21 @@ inputs: - 2000.0 - 3000.0 - 4000.0 + elterngeld_nettoeinkommen_vorjahr_m: + - 1000.0 + - 2000.0 + - 3000.0 + - 4000.0 + elterngeld_claimed: + - true + - true + - true + - true + elterngeld_zu_verst_eink_vorjahr_y_sn: + - 012606.0 + - 024618.0 + - 036630.0 + - 048642.0 arbeitsstunden_w: - 0.0 - 0.0 @@ -194,17 +209,7 @@ inputs: - 50.0 - 50.0 - 50.0 - m_elterngeld: - - 0 - - 0 - - 0 - - 0 - m_elterngeld_vat_hh: - - 0 - - 0 - - 0 - - 0 - m_elterngeld_mut_hh: + monate_elterngeldbezug: - 0 - 0 - 0 diff --git a/src/_gettsim_tests/test_data/full_taxes_and_transfers/2019/hh_id_2.yaml b/src/_gettsim_tests/test_data/full_taxes_and_transfers/2019/hh_id_2.yaml index ef7f9eb100..c2eb8ce54d 100644 --- a/src/_gettsim_tests/test_data/full_taxes_and_transfers/2019/hh_id_2.yaml +++ b/src/_gettsim_tests/test_data/full_taxes_and_transfers/2019/hh_id_2.yaml @@ -104,6 +104,21 @@ inputs: - 2500.0 - 2300.0 - 1000.0 + elterngeld_nettoeinkommen_vorjahr_m: + - 7000.0 + - 2500.0 + - 2300.0 + - 1000.0 + elterngeld_claimed: + - true + - true + - true + - true + elterngeld_zu_verst_eink_vorjahr_y_sn: + - 084654.0 + - 030678.0 + - 028302.0 + - 012726.0 arbeitsstunden_w: - 0.0 - 0.0 @@ -194,17 +209,7 @@ inputs: - 50.0 - 50.0 - 50.0 - m_elterngeld: - - 0 - - 0 - - 0 - - 0 - m_elterngeld_vat_hh: - - 0 - - 0 - - 0 - - 0 - m_elterngeld_mut_hh: + monate_elterngeldbezug: - 0 - 0 - 0 diff --git a/src/_gettsim_tests/test_data/full_taxes_and_transfers/2019/hh_id_3.yaml b/src/_gettsim_tests/test_data/full_taxes_and_transfers/2019/hh_id_3.yaml index b925f723f0..6b654a6452 100644 --- a/src/_gettsim_tests/test_data/full_taxes_and_transfers/2019/hh_id_3.yaml +++ b/src/_gettsim_tests/test_data/full_taxes_and_transfers/2019/hh_id_3.yaml @@ -44,6 +44,12 @@ inputs: - 0.0 bruttolohn_vorj_m: - 2000.0 + elterngeld_nettoeinkommen_vorjahr_m: + - 2000.0 + elterngeld_claimed: + - true + elterngeld_zu_verst_eink_vorjahr_y_sn: + - 024750.0 arbeitsstunden_w: - 0.0 geburtsjahr: @@ -80,11 +86,7 @@ inputs: - 0 wohnfläche_hh: - 50.0 - m_elterngeld: - - 0 - m_elterngeld_vat_hh: - - 0 - m_elterngeld_mut_hh: + monate_elterngeldbezug: - 0 in_ausbildung: - false diff --git a/src/_gettsim_tests/test_data/full_taxes_and_transfers/2019/hh_id_4.yaml b/src/_gettsim_tests/test_data/full_taxes_and_transfers/2019/hh_id_4.yaml index 843a375083..9fe314c90c 100644 --- a/src/_gettsim_tests/test_data/full_taxes_and_transfers/2019/hh_id_4.yaml +++ b/src/_gettsim_tests/test_data/full_taxes_and_transfers/2019/hh_id_4.yaml @@ -44,6 +44,12 @@ inputs: - 0.0 bruttolohn_vorj_m: - 3000.0 + elterngeld_nettoeinkommen_vorjahr_m: + - 3000.0 + elterngeld_claimed: + - true + elterngeld_zu_verst_eink_vorjahr_y_sn: + - 036774.0 arbeitsstunden_w: - 0.0 geburtsjahr: @@ -80,11 +86,7 @@ inputs: - 0 wohnfläche_hh: - 50.0 - m_elterngeld: - - 0 - m_elterngeld_vat_hh: - - 0 - m_elterngeld_mut_hh: + monate_elterngeldbezug: - 0 in_ausbildung: - false diff --git a/src/_gettsim_tests/test_data/full_taxes_and_transfers/2019/hh_id_5.yaml b/src/_gettsim_tests/test_data/full_taxes_and_transfers/2019/hh_id_5.yaml index 948d6f519b..f985340d56 100644 --- a/src/_gettsim_tests/test_data/full_taxes_and_transfers/2019/hh_id_5.yaml +++ b/src/_gettsim_tests/test_data/full_taxes_and_transfers/2019/hh_id_5.yaml @@ -44,6 +44,12 @@ inputs: - 0.0 bruttolohn_vorj_m: - 4000.0 + elterngeld_nettoeinkommen_vorjahr_m: + - 4000.0 + elterngeld_claimed: + - true + elterngeld_zu_verst_eink_vorjahr_y_sn: + - 048798.0 arbeitsstunden_w: - 20.0 geburtsjahr: @@ -80,11 +86,7 @@ inputs: - 0 wohnfläche_hh: - 50.0 - m_elterngeld: - - 0 - m_elterngeld_vat_hh: - - 0 - m_elterngeld_mut_hh: + monate_elterngeldbezug: - 0 in_ausbildung: - false diff --git a/src/_gettsim_tests/test_data/full_taxes_and_transfers/2019/hh_id_6.yaml b/src/_gettsim_tests/test_data/full_taxes_and_transfers/2019/hh_id_6.yaml index ba7509cfb6..12167982fd 100644 --- a/src/_gettsim_tests/test_data/full_taxes_and_transfers/2019/hh_id_6.yaml +++ b/src/_gettsim_tests/test_data/full_taxes_and_transfers/2019/hh_id_6.yaml @@ -44,6 +44,12 @@ inputs: - 0.0 bruttolohn_vorj_m: - 7000.0 + elterngeld_nettoeinkommen_vorjahr_m: + - 7000.0 + elterngeld_claimed: + - true + elterngeld_zu_verst_eink_vorjahr_y_sn: + - 084822.0 arbeitsstunden_w: - 0.0 geburtsjahr: @@ -80,11 +86,7 @@ inputs: - 0 wohnfläche_hh: - 50.0 - m_elterngeld: - - 0 - m_elterngeld_vat_hh: - - 0 - m_elterngeld_mut_hh: + monate_elterngeldbezug: - 0 in_ausbildung: - false diff --git a/src/_gettsim_tests/test_data/full_taxes_and_transfers/2019/hh_id_7.yaml b/src/_gettsim_tests/test_data/full_taxes_and_transfers/2019/hh_id_7.yaml index 1412fa3ab2..eafed8c0bd 100644 --- a/src/_gettsim_tests/test_data/full_taxes_and_transfers/2019/hh_id_7.yaml +++ b/src/_gettsim_tests/test_data/full_taxes_and_transfers/2019/hh_id_7.yaml @@ -44,6 +44,12 @@ inputs: - 0.0 bruttolohn_vorj_m: - 2500.0 + elterngeld_nettoeinkommen_vorjahr_m: + - 2500.0 + elterngeld_claimed: + - true + elterngeld_zu_verst_eink_vorjahr_y_sn: + - 030804.0 arbeitsstunden_w: - 0.0 geburtsjahr: @@ -80,11 +86,7 @@ inputs: - 0 wohnfläche_hh: - 50.0 - m_elterngeld: - - 0 - m_elterngeld_vat_hh: - - 0 - m_elterngeld_mut_hh: + monate_elterngeldbezug: - 0 in_ausbildung: - false diff --git a/src/_gettsim_tests/test_data/full_taxes_and_transfers/2019/hh_id_8.yaml b/src/_gettsim_tests/test_data/full_taxes_and_transfers/2019/hh_id_8.yaml index 375be51a2f..0131656636 100644 --- a/src/_gettsim_tests/test_data/full_taxes_and_transfers/2019/hh_id_8.yaml +++ b/src/_gettsim_tests/test_data/full_taxes_and_transfers/2019/hh_id_8.yaml @@ -44,6 +44,12 @@ inputs: - 0.0 bruttolohn_vorj_m: - 2300.0 + elterngeld_nettoeinkommen_vorjahr_m: + - 2300.0 + elterngeld_claimed: + - true + elterngeld_zu_verst_eink_vorjahr_y_sn: + - 025962.0 arbeitsstunden_w: - 0.0 geburtsjahr: @@ -80,11 +86,7 @@ inputs: - 0 wohnfläche_hh: - 50.0 - m_elterngeld: - - 0 - m_elterngeld_vat_hh: - - 0 - m_elterngeld_mut_hh: + monate_elterngeldbezug: - 0 in_ausbildung: - false diff --git a/src/_gettsim_tests/test_data/wohngeld/2018/hh_id_8.yaml b/src/_gettsim_tests/test_data/wohngeld/2018/hh_id_8.yaml index 3e0dd5ef5c..8212769272 100644 --- a/src/_gettsim_tests/test_data/wohngeld/2018/hh_id_8.yaml +++ b/src/_gettsim_tests/test_data/wohngeld/2018/hh_id_8.yaml @@ -173,7 +173,7 @@ inputs: - 0.0 - 0.0 elterngeld_m: - - 800.0 + - 500.0 - 0.0 - 0.0 - 0.0 diff --git a/src/_gettsim_tests/test_elterngeld.py b/src/_gettsim_tests/test_elterngeld.py index e1f70497ef..149d8bae6a 100644 --- a/src/_gettsim_tests/test_elterngeld.py +++ b/src/_gettsim_tests/test_elterngeld.py @@ -17,14 +17,7 @@ def test_elterngeld( test_data: PolicyTestData, column: str, ): - """Run tests to validate elterngeld. - - hh_id 7 in test cases is for the calculator on - https://familienportal.de/familienportal/meta/egr. The calculator's result is 10 - Euro off GETTSIM's result. We need to discuss if we should adapt the calculation of - the proxy wage of last year or anything else. - - """ + """Run tests to validate elterngeld.""" df = test_data.input_df policy_params, policy_functions = cached_set_up_policy_environment( date=test_data.date @@ -38,6 +31,6 @@ def test_elterngeld( result[column], test_data.output_df[column], check_dtype=False, - atol=1e-1, - rtol=0, + atol=1e-3, + rtol=1e-3, ) diff --git a/src/_gettsim_tests/test_synthetic.py b/src/_gettsim_tests/test_synthetic.py index 7703b76f44..ea3bbd4804 100644 --- a/src/_gettsim_tests/test_synthetic.py +++ b/src/_gettsim_tests/test_synthetic.py @@ -294,7 +294,7 @@ def test_p_id_groups(fixture, expected, request): @pytest.mark.parametrize( "fixture, policy_date", - [("synthetic_data_couple_with_children", y) for y in range(2017, 2024)], + [("synthetic_data_couple_with_children", y) for y in range(2015, 2024)], ) def test_default_targets(fixture, policy_date, request): policy_params, policy_functions = set_up_policy_environment(policy_date) diff --git a/src/_gettsim_tests/test_vectorization.py b/src/_gettsim_tests/test_vectorization.py index 8db76c3696..06b7fcb7aa 100644 --- a/src/_gettsim_tests/test_vectorization.py +++ b/src/_gettsim_tests/test_vectorization.py @@ -11,7 +11,10 @@ from numpy.testing import assert_array_equal from _gettsim.functions_loader import _load_functions -from _gettsim.transfers.elterngeld import elterngeld_geschw_bonus_m, elternzeit_anspruch +from _gettsim.transfers.elterngeld import ( + elterngeld_anspruchsbedingungen_erfüllt, # noqa: PLC2403 + elterngeld_geschwisterbonus_m, +) from _gettsim.transfers.grundrente import grundr_bew_zeiten_avg_entgeltp from _gettsim.vectorization import ( TranslateToVectorizableError, @@ -382,18 +385,21 @@ def test_convertible(func, backend): @pytest.mark.parametrize("backend", backends) -def test_transfers__elterngeld__elterngeld_geschw_bonus_m(backend): +def test_transfers__elterngeld__elterngeld_geschwisterbonus_m(backend): full = modules.get(backend).full # Test original gettsim function on scalar input # ================================================================================== - elterngeld_eink_erlass_m = 3.0 - elterngeld_geschw_bonus_anspruch = True - elterngeld_params = {"geschw_bonus_aufschlag": 1.0, "geschw_bonus_minimum": 2.0} - - exp = elterngeld_geschw_bonus_m( - elterngeld_eink_erlass_m=elterngeld_eink_erlass_m, - elterngeld_geschw_bonus_anspruch=elterngeld_geschw_bonus_anspruch, + elterngeld_basisbetrag_m = 3.0 + geschwisterbonus_anspruchsberechtigt_fg = True + elterngeld_params = { + "geschwisterbonus_aufschlag": 1.0, + "geschwisterbonus_minimum": 2.0, + } + + exp = elterngeld_geschwisterbonus_m( + elterngeld_basisbetrag_m=elterngeld_basisbetrag_m, + geschwisterbonus_anspruchsberechtigt_fg=geschwisterbonus_anspruchsberechtigt_fg, elterngeld_params=elterngeld_params, ) assert exp == 3.0 @@ -401,22 +407,24 @@ def test_transfers__elterngeld__elterngeld_geschw_bonus_m(backend): # Create array inputs and assert that gettsim functions raises error # ================================================================================== shape = (10, 2) - elterngeld_eink_erlass_m = full(shape, elterngeld_eink_erlass_m) - elterngeld_geschw_bonus_anspruch = full(shape, elterngeld_geschw_bonus_anspruch) + elterngeld_basisbetrag_m = full(shape, elterngeld_basisbetrag_m) + geschwisterbonus_anspruchsberechtigt_fg = full( + shape, geschwisterbonus_anspruchsberechtigt_fg + ) with pytest.raises(ValueError, match="truth value of an array with more than"): - elterngeld_geschw_bonus_m( - elterngeld_eink_erlass_m=elterngeld_eink_erlass_m, - elterngeld_geschw_bonus_anspruch=elterngeld_geschw_bonus_anspruch, + elterngeld_geschwisterbonus_m( + elterngeld_basisbetrag_m=elterngeld_basisbetrag_m, + geschwisterbonus_anspruchsberechtigt_fg=geschwisterbonus_anspruchsberechtigt_fg, elterngeld_params=elterngeld_params, ) # Call converted function on array input and test result # ================================================================================== - converted = make_vectorizable(elterngeld_geschw_bonus_m, backend=backend) + converted = make_vectorizable(elterngeld_geschwisterbonus_m, backend=backend) got = converted( - elterngeld_eink_erlass_m=elterngeld_eink_erlass_m, - elterngeld_geschw_bonus_anspruch=elterngeld_geschw_bonus_anspruch, + elterngeld_basisbetrag_m=elterngeld_basisbetrag_m, + geschwisterbonus_anspruchsberechtigt_fg=geschwisterbonus_anspruchsberechtigt_fg, elterngeld_params=elterngeld_params, ) assert_array_equal(got, full(shape, exp)) @@ -451,24 +459,26 @@ def test_transfers__grundrente__grundr_bew_zeiten_avg_entgeltp(backend): @pytest.mark.parametrize("backend", backends) -def test_transfers__elternzeit_elternzeit_anspruch(backend): +def test_transfers__elterngeld_anspruchsbedingungen_erfüllt(backend): full = modules.get(backend).full # Test original gettsim function on scalar input # ================================================================================== - alter_monate_juengstes_mitglied_hh = 12.0 - m_elterngeld_mut_hh = 2 - m_elterngeld_vat_hh = 3 - m_elterngeld = 4 - kind = False - elterngeld_params = {"max_monate_paar": 14.0, "max_monate_ind": 6} - - exp = elternzeit_anspruch( - alter_monate_jüngstes_mitglied_hh=alter_monate_juengstes_mitglied_hh, - m_elterngeld_mut_hh=m_elterngeld_mut_hh, - m_elterngeld_vat_hh=m_elterngeld_vat_hh, - m_elterngeld=m_elterngeld, - kind=kind, + elterngeld_claimed = True + arbeitsstunden_w = 20.0 + kind_anspruchsberechtigt_fg = True + vorjahr_einkommen_unter_bezugsgrenze = True + monate_elterngeldbezug_unter_grenze_fg = True + elterngeld_params = { + "max_arbeitsstunden_w": 31.0, + } + + exp = elterngeld_anspruchsbedingungen_erfüllt( + elterngeld_claimed=elterngeld_claimed, + arbeitsstunden_w=arbeitsstunden_w, + kind_anspruchsberechtigt_fg=kind_anspruchsberechtigt_fg, + vorjahr_einkommen_unter_bezugsgrenze=vorjahr_einkommen_unter_bezugsgrenze, + monate_elterngeldbezug_unter_grenze_fg=monate_elterngeldbezug_unter_grenze_fg, elterngeld_params=elterngeld_params, ) @@ -477,27 +487,29 @@ def test_transfers__elternzeit_elternzeit_anspruch(backend): # Create array inputs and assert that gettsim functions raises error # ================================================================================== shape = (10, 1) - alter_monate_juengstes_mitglied_hh = full(shape, alter_monate_juengstes_mitglied_hh) + arbeitsstunden_w = full(shape, arbeitsstunden_w) with pytest.raises(ValueError, match="truth value of an array with more than"): - elternzeit_anspruch( - alter_monate_jüngstes_mitglied_hh=alter_monate_juengstes_mitglied_hh, - m_elterngeld_mut_hh=m_elterngeld_mut_hh, - m_elterngeld_vat_hh=m_elterngeld_vat_hh, - m_elterngeld=m_elterngeld, - kind=kind, + exp = elterngeld_anspruchsbedingungen_erfüllt( + arbeitsstunden_w=arbeitsstunden_w, + elterngeld_claimed=elterngeld_claimed, + kind_anspruchsberechtigt_fg=kind_anspruchsberechtigt_fg, + vorjahr_einkommen_unter_bezugsgrenze=vorjahr_einkommen_unter_bezugsgrenze, + monate_elterngeldbezug_unter_grenze_fg=monate_elterngeldbezug_unter_grenze_fg, elterngeld_params=elterngeld_params, ) # Call converted function on array input and test result # ================================================================================== - converted = make_vectorizable(elternzeit_anspruch, backend=backend) + converted = make_vectorizable( + elterngeld_anspruchsbedingungen_erfüllt, backend=backend + ) got = converted( - alter_monate_jüngstes_mitglied_hh=alter_monate_juengstes_mitglied_hh, - m_elterngeld_mut_hh=m_elterngeld_mut_hh, - m_elterngeld_vat_hh=m_elterngeld_vat_hh, - m_elterngeld=m_elterngeld, - kind=kind, + elterngeld_claimed=elterngeld_claimed, + arbeitsstunden_w=arbeitsstunden_w, + kind_anspruchsberechtigt_fg=kind_anspruchsberechtigt_fg, + vorjahr_einkommen_unter_bezugsgrenze=vorjahr_einkommen_unter_bezugsgrenze, + monate_elterngeldbezug_unter_grenze_fg=monate_elterngeldbezug_unter_grenze_fg, elterngeld_params=elterngeld_params, ) assert_array_equal(got, full(shape, exp))