def test_wg(input_data, year, column): year_data = input_data[input_data["jahr"] == year] df = year_data[INPUT_COLS].copy() policy_params, policy_functions = set_up_policy_environment(date=year) columns = [ "elterngeld_m", "arbeitsl_geld_m", "unterhaltsvors_m", "ertragsanteil", "brutto_eink_1", "brutto_eink_4", "brutto_eink_5", "brutto_eink_6", "ges_krankenv_beitr_m", "rentenv_beitr_m", "kindergeld_anspruch", ] policy_functions["eink_st_tu"] = eink_st_m_tu_from_data result = compute_taxes_and_transfers( data=df, params=policy_params, functions=policy_functions, targets=column, columns_overriding_functions=columns, ) assert_series_equal(result[column], year_data[column])
def test_kiz( input_data, year, column, ): year_data = input_data[input_data["jahr"] == year] df = year_data[INPUT_COLS].copy() policy_params, policy_functions = set_up_policy_environment(date=year) columns = [ "alleinerziehenden_mehrbedarf_hh", "arbeitsl_geld_2_eink_hh", "kindergeld_m_hh", "unterhaltsvors_m", "_arbeitsl_geld_2_brutto_eink_hh", "kindergeld_anspruch", ] result = compute_taxes_and_transfers( data=df, params=policy_params, functions=policy_functions, targets=column, columns_overriding_functions=columns, ) assert_series_equal( result[column], year_data[column], check_dtype=False, )
def test_increasing_hh_size(input_data_households, year, mietstufe): column = "wohngeld_basis_hh" policy_params, policy_functions = set_up_policy_environment(date=year) columns = [ "elterngeld_m", "arbeitsl_geld_m", "unterhaltsvors_m", "ertragsanteil", "brutto_eink_1", "brutto_eink_4", "brutto_eink_5", "eink_st_tu", "brutto_eink_6", "ges_krankenv_beitr_m", "rentenv_beitr_m", "kindergeld_anspruch", ] input_data_households["mietstufe"] = mietstufe result = compute_taxes_and_transfers( data=input_data_households, params=policy_params, functions=policy_functions, targets=column, columns_overriding_functions=columns, ) assert result[column].is_monotonic
def test_vorsorge( input_data, year, target, ): year_data = input_data[input_data["jahr"] == year] df = year_data[IN_COLS].copy() policy_params, policy_functions = set_up_policy_environment(date=year) columns_overriding_functions = [ "ges_krankenv_beitr_m", "arbeitsl_v_beitr_m", "pflegev_beitr_m", "rentenv_beitr_m", ] result = compute_taxes_and_transfers( data=df, params=policy_params, functions=policy_functions, targets=target, columns_overriding_functions=columns_overriding_functions, ) # TODO: Here our test values are off by about 5 euro. We should revisit. See #217. assert_series_equal(result[target], year_data[target], atol=1e-1, rtol=1, check_dtype=False)
def test_tax_sched( input_data, year, column, ): policy_params, policy_functions = set_up_policy_environment(date=year) year_data = input_data[input_data["jahr"] == year] df = year_data[INPUT_COLS].copy() df["_zu_verst_eink_kein_kinderfreib_tu"] = ( df["_zu_verst_eink_kein_kinderfreib"].groupby(df["tu_id"]).transform("sum") ) df["_zu_verst_eink_kinderfreib_tu"] = ( df["_zu_verst_eink_kinderfreib"].groupby(df["tu_id"]).transform("sum") ) columns = [ "_zu_verst_eink_kein_kinderfreib_tu", "_zu_verst_eink_kinderfreib_tu", "brutto_eink_5", ] result = compute_taxes_and_transfers( data=df, params=policy_params, functions=policy_functions, targets=column, columns_overriding_functions=columns, ) assert_series_equal( result[column], year_data[column], check_dtype=False, check_less_precise=2, )
def test_soc_ins_contrib(input_data, year, target): year_data = input_data[input_data["jahr"] == year] df = year_data[INPUT_COLS].copy() policy_params, policy_functions = set_up_policy_environment(date=year) results = compute_taxes_and_transfers(data=df, params=policy_params, functions=policy_functions, targets=target) pd.testing.assert_series_equal(results[target], year_data[target])
def test_tax_transfer( input_data, year, ): year_data = input_data[input_data["jahr"] == year].copy() df = year_data[REQUIRED_INPUTS].copy() policy_params, policy_functions = set_up_policy_environment(date=year) # params["renten_daten"] = renten_daten compute_taxes_and_transfers( data=df, params=policy_params, functions=policy_functions, targets=DEFAULT_TARGETS, )
def test_kindergeld(input_data, year, target): year_data = input_data[input_data["jahr"] == year] df = year_data[INPUT_COLS].copy() policy_params, policy_functions = set_up_policy_environment(date=year) calc_result = compute_taxes_and_transfers(data=df, params=policy_params, functions=policy_functions, targets=target) assert_series_equal(calc_result[target], year_data[target], check_dtype=False)
def test_kindergeld(input_data, year, target): year_data = input_data[input_data["jahr"] == year] df = year_data[INPUT_COLS].copy() policy_params, policy_functions = set_up_policy_environment(date=year) user_cols = ["zu_verst_eink_kein_kinderfreib_tu"] calc_result = compute_taxes_and_transfers( data=df, params=policy_params, functions=policy_functions, targets=target, columns_overriding_functions=user_cols, ) assert_series_equal(calc_result[target], year_data[target], check_dtype=False)
def test_tax_transfer( input_data, year, ): year_data = input_data[input_data["jahr"] == year].copy() df = year_data[list(STANDARD_DATA_TYPES.keys())].copy() policy_params, policy_functions = set_up_policy_environment(date=year) # params["renten_daten"] = renten_daten compute_taxes_and_transfers( data=df, params=policy_params, functions=policy_functions, targets=DEFAULT_TARGETS, )
def test_uhv(input_data, year, column, month): year_data = input_data[(input_data["jahr"] == year) & (input_data["monat"] == month)] df = year_data[INPUT_COLS].copy() policy_params, policy_functions = set_up_policy_environment( date=f"{year}-{month}") result = compute_taxes_and_transfers( data=df, params=policy_params, functions=policy_functions, targets=column, columns_overriding_functions=["arbeitsl_geld_m"], ) assert_series_equal(result[column], year_data[column], check_dtype=False)
def test_zve( input_data, year, target, ): year_data = input_data[input_data["jahr"] == year] df = year_data[INPUT_COLS].copy() policy_params, policy_functions = set_up_policy_environment(date=year) columns_overriding_functions = [ "ges_krankenv_beitr_m", "arbeitsl_v_beitr_m", "pflegev_beitr_m", "rentenv_beitr_m", ] result = compute_taxes_and_transfers( data=df, params=policy_params, functions=policy_functions, targets=target, columns_overriding_functions=columns_overriding_functions, ) if target == "kindergeld_tu": expected_result = sum_test_data_tu("kindergeld", year_data) elif target == "zu_verst_eink_kein_kinderfreib_tu": expected_result = sum_test_data_tu("zu_verst_eink_kein_kinderfreib", year_data) elif target == "zu_verst_eink_kinderfreib_tu": expected_result = sum_test_data_tu("zu_verst_eink_kinderfreib", year_data) elif target == "kinderfreib_tu": expected_result = sum_test_data_tu("kinderfreib", year_data) else: expected_result = year_data[target] # TODO: There are large differences for the 2018 test. See #217. assert_series_equal( result[target], expected_result, check_dtype=False, atol=1e-1, rtol=1, )
def test_data_types( input_data, year, ): imports = _convert_paths_to_import_strings(PATHS_TO_INTERNAL_FUNCTIONS) functions = _load_functions(imports) # Load all time dependent functions for year in range(1990, 2021): year_functions = load_reforms_for_date( datetime.date(year=year, month=1, day=1)) year_data = input_data[input_data["jahr"] == year].copy() df = year_data[list(STANDARD_DATA_TYPES.keys())].copy() policy_params, policy_functions = set_up_policy_environment(date=year) # params["renten_daten"] = renten_daten data = compute_taxes_and_transfers( data=df, params=policy_params, functions=policy_functions, targets=DEFAULT_TARGETS, debug=True, ) for column_name, series in data.items(): if series.empty: pass else: if column_name in STANDARD_DATA_TYPES: internal_type = STANDARD_DATA_TYPES[column_name] elif column_name in functions: internal_type = functions[column_name].__annotations__[ "return"] elif column_name in year_functions: internal_type = year_functions[column_name].__annotations__[ "return"] else: raise ValueError("Column name unknown.") if not check_if_series_has_internal_type(series, internal_type): raise AssertionError( f"{column_name} has datatype {series.dtype}, but should have {internal_type}." )
def test_favorability_check(input_data, year, target): year_data = input_data[input_data["jahr"] == year] df = year_data[INPUT_COLS].copy() policy_params, policy_functions = set_up_policy_environment(date=year) columns_overriding_functions = [ "st_kein_kind_freib_tu", "st_kind_freib_tu", "abgelt_st_tu", "kindergeld_m_basis", "kindergeld_m_basis_tu", ] result = compute_taxes_and_transfers( data=df, params=policy_params, functions=policy_functions, targets=target, columns_overriding_functions=columns_overriding_functions, ) assert_series_equal(result[target], year_data[target], check_dtype=False)
def test_eltgeld( year, column, input_data, ): """Run tests to validate elterngeld. hh_id 7 in test cases is for the calculator on https://familienportal.de/familienportal/meta/egr. The result of the calculator is 10 Euro off the result from gettsim. We need to discuss if we should adapt the calculation of the proxy wage of last year or anything else. """ year_data = input_data[input_data["jahr"] == year] df = year_data[INPUT_COLS].copy() policy_params, policy_functions = set_up_policy_environment(date=year) df["soli_st_tu"] = df["soli_st_m"].groupby( df["tu_id"]).transform("sum") * 12 df["eink_st_tu"] = df["eink_st_m"].groupby( df["tu_id"]).transform("sum") * 12 columns_overriding_functions = [ "soli_st_tu", "sozialv_beitr_m", "eink_st_tu" ] result = compute_taxes_and_transfers( data=df, params=policy_params, functions=policy_functions, targets=column, columns_overriding_functions=columns_overriding_functions, ) assert_series_equal( result[column], year_data[column], check_dtype=False, atol=1e-2, rtol=1, )
def test_soli_st( input_data, year, ): year_data = input_data[input_data["jahr"] == year] df = year_data[INPUT_COLS].copy() policy_params, policy_functions = set_up_policy_environment(date=year) user_cols = ["_st_kind_freib_tu", "abgelt_st_tu"] results = compute_taxes_and_transfers( data=df, params=policy_params, functions=policy_functions, targets="soli_st_tu", columns_overriding_functions=user_cols, ) assert_series_equal( results["soli_st_tu"], year_data["soli_st_tu"], check_dtype=False, )
def test_benefit_checks(input_data, year, column): """Test the benefit checks.""" year_data = input_data[input_data["jahr"] == year] df = year_data[INPUT_COLS].copy() columns = [ "kinderzuschlag_m_vorläufig", "wohngeld_basis_hh", "regelbedarf_m_hh", "kindergeld_m_hh", "unterhaltsvors_m_hh", "arbeitsl_geld_2_eink_hh", ] policy_params, policy_functions = set_up_policy_environment(date=year) result = compute_taxes_and_transfers( data=df, params=policy_params, functions=policy_functions, targets=column, columns_overriding_functions=columns, ) assert_series_equal(result[column], year_data[column], check_dtype=False)
def test_ui( input_data, year, ): year_data = input_data[input_data["jahr"] == year] df = year_data[INPUT_COLS].copy() policy_params, policy_functions = set_up_policy_environment(date=year) result = compute_taxes_and_transfers( data=df, params=policy_params, functions=policy_functions, targets="arbeitsl_geld_m", ) # to prevent errors from rounding, allow deviations after the 3rd digit. assert_series_equal( result["arbeitsl_geld_m"], year_data["arbeitsl_geld_m"], check_less_precise=3, check_dtype=False, )
def test_alg2(input_data, year, column): year_data = input_data[input_data["jahr"] == year] df = year_data[INPUT_COLS].copy() policy_params, policy_functions = set_up_policy_environment(date=year) columns = [ "arbeitsl_geld_m", "soli_st_tu", "kindergeld_m_hh", "unterhaltsvors_m", "elterngeld_m", "eink_st_tu", "sozialv_beitr_m", ] result = compute_taxes_and_transfers( data=df, params=policy_params, functions=policy_functions, targets=column, columns_overriding_functions=columns, ) assert_series_equal(result[column], year_data[column], check_dtype=False)