def test_corrections():
    years = [2006, 2007, 2008, 2009]
    df = get_denombrements_fiscaux_data_frame(years=years)
    index_by_variable_name = create_index_by_variable_name(formula_by_variable_name, level_2_formula_by_variable_name)

    test_by_variable = dict(
        # Correction of f5io in 2008 in Agrégats IPP
        benefices_agricoles_forfait_imposables=[
            {"year": 2006, "target": 896512850},
            {"year": 2008, "target": 883970587},
        ],
        benefices_agricoles_reels_imposables=[
            {"year": 2006, "target": 5150417953},
            {"year": 2008, "target": 6515953706},
        ],
        benefices_agricoles_reels_sans_cga_imposables=[{"year": 2006, "target": 165830038}],
        benefices_agricoles_reels_deficits=[{"year": 2006, "target": 519217942}],
        benefices_agricoles_reels_sans_cga_deficits=[{"year": 2006, "target": 208934263}],
        deficits_industriels_commerciaux_professionnels=[{"year": 2006, "target": 1427052021}],
        deficits_industriels_commerciaux_non_professionnels=[{"year": 2006, "target": 301194784}],
        plus_values_mobilieres_stock_options=[{"year": 2008, "target": 228873359}],
    )

    def assert_value_construction(variable_name, test):
        year = test["year"]
        target = test["target"]
        value = get_or_construct_value(df, variable_name, index_by_variable_name, years=years)[0].loc[year]
        assert all(value == target), "{} for {}: got {} instead of {}".format(variable_name, year, value.values, target)

    for variable_name, tests in test_by_variable.iteritems():
        for test in tests:
            yield assert_value_construction, variable_name, test
def test_run_through():
    years = [2006, 2007, 2008, 2009]
    df = get_denombrements_fiscaux_data_frame(years=years)
    index_by_variable_name = create_index_by_variable_name(
        formula_by_variable_name, level_2_formula_by_variable_name)
    variable_name = 'interets_imposes_au_prelevement_liberatoire'
    get_or_construct_value(df,
                           variable_name,
                           index_by_variable_name,
                           years=years)
    variable_name = 'dividendes_imposes_au_prelevement_liberatoire'
    get_or_construct_value(df,
                           variable_name,
                           index_by_variable_name,
                           years=years)
    variable_name = 'revenus_imposes_au_prelevement_liberatoire'
    get_or_construct_value(df,
                           variable_name,
                           index_by_variable_name,
                           years=years,
                           fill_value=0)
    variable_name = 'assurances_vie_imposees_au_prelevement_liberatoire'
    get_or_construct_value(df,
                           variable_name,
                           index_by_variable_name,
                           years=years)
    variable_name = 'f2da'
    get_or_construct_value(df,
                           variable_name,
                           index_by_variable_name,
                           years=years)
def test_run_through():
    years = [2006, 2007, 2008, 2009]
    df = get_denombrements_fiscaux_data_frame(years=years)
    index_by_variable_name = create_index_by_variable_name(formula_by_variable_name, level_2_formula_by_variable_name)
    variable_name = "interets_imposes_au_prelevement_liberatoire"
    get_or_construct_value(df, variable_name, index_by_variable_name, years=years)
    variable_name = "dividendes_imposes_au_prelevement_liberatoire"
    get_or_construct_value(df, variable_name, index_by_variable_name, years=years)
    variable_name = "revenus_imposes_au_prelevement_liberatoire"
    get_or_construct_value(df, variable_name, index_by_variable_name, years=years, fill_value=0)
    variable_name = "assurances_vie_imposees_au_prelevement_liberatoire"
    get_or_construct_value(df, variable_name, index_by_variable_name, years=years)
    variable_name = "f2da"
    get_or_construct_value(df, variable_name, index_by_variable_name, years=years)
def build_irpp_tables(years = None, fill_value = numpy.NaN):
    assert years is not None
    assert isinstance(years, list)
    raw_data = get_denombrements_fiscaux_data_frame(years = years, fill_value = 0)
    aggregates = build_aggregates(
        raw_data,
        formula_by_variable_name,
        level_2_formula_by_variable_name = level_2_formula_by_variable_name,
        years = years,
        fill_value = fill_value,
        )
    data_frame_by_irpp_table_name = collections.OrderedDict([
        # 1. Tableau IRPP1: Les revenus figurant dans les déclarations de revenus
        ('irpp_1', aggregates[[
            'salaires',
            'salaires_imposables',
            'heures_supplementaires',
            # TODO
            #    'revenus_d_activite_non_salariee'
            #    'ba',
            #    'bic',
            #    'bnc',
            #    'revenus_activite_non_salariee_exoneres',
            'revenus_de_remplacement',
            'pensions_de_retraite',
            'allocations_chomage',
            'revenus_fonciers',
            'revenus_fonciers_regime_normal',
            'revenus_fonciers_micro_foncier',
            'revenus_financiers',
            'frais_reels',
            'pensions_alimentaires_percues',
            ]]),
        # 2. Tableau IRPP2: Détails des revenus financiers (intérêts, dividendes, plus-values) figurant dans les
        # déclations de revenus (imposition au barème, imposition au prélèvement forfaitaire libératoire (PL) et
        # plus-values)
        ('irpp_2', aggregates[[
            'revenus_imposes_au_bareme',
            'dividendes_imposes_au_bareme',
            'interet_imposes_au_bareme',
            'assurances_vie_imposees_au_bareme',
            'revenus_imposes_au_prelevement_liberatoire',
            'dividendes_imposes_au_prelevement_liberatoire',
            'interets_imposes_au_prelevement_liberatoire',
            'assurances_vie_imposees_au_prelevement_liberatoire',
            'plus_values',
            'revenus_financiers',
            'revenus_financiers_hors_plus_values'
            ]]),
        # 3. Tableau IRPP3: Plus-values mobilières et professionnelles
        ('irpp_3', aggregates[[
            'plus_values',
            'plus_values_mobilieres',
            'plus_values_mobilieres_regime_normal',
            'plus_values_mobilieres_stock_options',
            'plus_values_mobilieres_retraite_dirigeant',
            'plus_values_professionnelles',
            'plus_values_professionnelles_regime_normal',
            'plus_values_professionnelles_retraite_dirigeant',
            ]]),
        ('irpp_4', aggregates[[
            'revenus_d_activite_non_salariee',
            'benefices_agricoles',
            'benefices_agricoles_bruts',
            'deficits_agricoles',
            'benefices_industriels_commerciaux',
            'benefices_industriels_commerciaux_bruts',
            'deficits_industriels_commerciaux',
            #    'bnc',
            #    'revenus_activite_non_salariee_exoneres',
            ]]),
        #        ('irpp_5_a', aggregates[[
        #            'benefices_agricoles',
        #            'benefices_agricoles_forfait_exoneres',
        #            'benefices_agricoles_forfait_imposables',
        #            'benefices_agricoles_reels_exoneres',
        #            'benefices_agricoles_reels_imposables',
        #            'benefices_agricoles_reels_deficits',
        #            'benefices_agricoles_reels_sans_cga_exoneres',
        #            'benefices_agricoles_reels_sans_cga_imposables',
        #            'benefices_agricoles_reels_sans_cga_deficits',
        #            ]])
        ])
    return data_frame_by_irpp_table_name
def test_corrections():
    years = [2006, 2007, 2008, 2009]
    df = get_denombrements_fiscaux_data_frame(years=years)
    index_by_variable_name = create_index_by_variable_name(
        formula_by_variable_name, level_2_formula_by_variable_name)

    test_by_variable = dict(
        # Correction of f5io in 2008 in Agrégats IPP
        benefices_agricoles_forfait_imposables=[
            {
                'year': 2006,
                'target': 896512850
            },
            {
                'year': 2008,
                'target': 883970587
            },
        ],
        benefices_agricoles_reels_imposables=[
            {
                'year': 2006,
                'target': 5150417953
            },
            {
                'year': 2008,
                'target': 6515953706
            },
        ],
        benefices_agricoles_reels_sans_cga_imposables=[
            {
                'year': 2006,
                'target': 165830038
            },
        ],
        benefices_agricoles_reels_deficits=[
            {
                'year': 2006,
                'target': 519217942
            },
        ],
        benefices_agricoles_reels_sans_cga_deficits=[
            {
                'year': 2006,
                'target': 208934263
            },
        ],
        deficits_industriels_commerciaux_professionnels=[
            {
                'year': 2006,
                'target': 1427052021
            },
        ],
        deficits_industriels_commerciaux_non_professionnels=[
            {
                'year': 2006,
                'target': 301194784
            },
        ],
        plus_values_mobilieres_stock_options=[{
            'year': 2008,
            'target': 228873359
        }],
    )

    def assert_value_construction(variable_name, test):
        year = test['year']
        target = test['target']
        value = get_or_construct_value(df,
                                       variable_name,
                                       index_by_variable_name,
                                       years=years)[0].loc[year]
        assert all(value == target), "{} for {}: got {} instead of {}".format(
            variable_name, year, value.values, target)

    for variable_name, tests in test_by_variable.iteritems():
        for test in tests:
            yield assert_value_construction, variable_name, test
def build_irpp_tables(years = None, fill_value = numpy.NaN):
    assert years is not None
    assert isinstance(years, list)
    raw_data = get_denombrements_fiscaux_data_frame(years = years, fill_value = 0)
    aggregates = build_aggregates(
        raw_data,
        formula_by_variable_name,
        level_2_formula_by_variable_name = level_2_formula_by_variable_name,
        years = years,
        fill_value = fill_value,
        )
    data_frame_by_irpp_table_name = collections.OrderedDict([
        # 1. Tableau IRPP1: Les revenus figurant dans les déclarations de revenus
        ('irpp_1', aggregates[[
            'salaires',
            # TODO
            #    'revenus_d_activite_non_salariee'
            #    'ba',
            #    'bic',
            #    'bnc',
            #    'revenus_activite_non_salariee_exoneres',
            'revenus_de_remplacement',
            'pensions_de_retraite',
            'allocations_chomage',
            'revenus_fonciers',
            'revenus_fonciers_regime_normal',
            'revenus_fonciers_micro_foncier',
            'revenus_financiers'
            ]]),
        # 2. Tableau IRPP2: Détails des revenus financiers (intérêts, dividendes, plus-values) figurant dans les
        # déclations de revenus (imposition au barème, imposition au prélèvement forfaitaire libératoire (PL) et
        # plus-values)
        ('irpp_2', aggregates[[
            'revenus_imposes_au_bareme',
            'dividendes_imposes_au_bareme',
            'interet_imposes_au_bareme',
            'assurances_vie_imposees_au_bareme',
            'revenus_imposes_au_prelevement_liberatoire',
            'dividendes_imposes_au_prelevement_liberatoire',
            'interets_imposes_au_prelevement_liberatoire',
            'assurances_vie_imposees_au_prelevement_liberatoire',
            'plus_values',
            'revenus_financiers',
            'revenus_financiers_hors_plus_values'
            ]]),
        # 3. Tableau IRPP3: Plus-values mobilières et professionnelles
        ('irpp_3', aggregates[[
            'plus_values',
            'plus_values_mobilieres',
            'plus_values_mobilieres_regime_normal',
            'plus_values_mobilieres_stock_options',
            'plus_values_mobilieres_retraite_dirigeant',
            'plus_values_professionnelles',
            'plus_values_professionnelles_regime_normal',
            'plus_values_professionnelles_retraite_dirigeant',
            ]]),
        ('irpp_4', aggregates[[
            'revenus_d_activite_non_salariee',
            'benefices_agricoles',
            'benefices_agricoles_bruts',
            'deficits_agricoles',
            'benefices_industriels_commerciaux',
            'benefices_industriels_commerciaux_bruts',
            'deficits_industriels_commerciaux',
            #    'bnc',
            #    'revenus_activite_non_salariee_exoneres',
            ]]),
        #        ('irpp_5_a', aggregates[[
        #            'benefices_agricoles',
        #            'benefices_agricoles_forfait_exoneres',
        #            'benefices_agricoles_forfait_imposables',
        #            'benefices_agricoles_reels_exoneres',
        #            'benefices_agricoles_reels_imposables',
        #            'benefices_agricoles_reels_deficits',
        #            'benefices_agricoles_reels_sans_cga_exoneres',
        #            'benefices_agricoles_reels_sans_cga_imposables',
        #            'benefices_agricoles_reels_sans_cga_deficits',
        #            ]])
        ])
    return data_frame_by_irpp_table_name