コード例 #1
0
def test_cho(year = 2014):
    simulation = tax_benefit_system.new_scenario().init_single_entity(
        axes = [dict(count = 11, max = 24000, min = 0, name = 'chobrut')],
        period = year,
        parent1 = dict(
            birth = datetime.date(year - 40, 1, 1),
            ),
        ).new_simulation(debug = True)
    brut = simulation.get_holder('chobrut').array
    imposable = simulation.calculate('cho')

    inversion_reform = inversion_revenus.build_reform(tax_benefit_system)

    inverse_simulation = inversion_reform.new_scenario().init_single_entity(
        axes = [dict(count = 11, max = 24000, min = 0, name = 'chobrut')],
        period = year,
        parent1 = dict(
            birth = datetime.date(year - 40, 1, 1),
            ),
        ).new_simulation(debug = True)

    inverse_simulation.get_holder('chobrut').delete_arrays()
    inverse_simulation.get_or_new_holder('choi').array = imposable.copy()
    new_brut = inverse_simulation.calculate('chobrut')
    assert_near(new_brut, brut, error_margin = 1)
コード例 #2
0
def check_sal(type_sal, year = 2014):
    period = periods.period("{}-01".format(year))
    single_entity_kwargs = dict(
        axes = [dict(count = 101, max = 2000, min = 40, name = 'salaire_de_base')],  # TODO: min = 0
        period = period,
        parent1 = dict(
            birth = datetime.date(year - 40, 1, 1),
            type_sal = type_sal,
            ),
        )
    simulation = tax_benefit_system.new_scenario().init_single_entity(
        **single_entity_kwargs
        ).new_simulation(debug = False)
    brut = simulation.get_holder('salaire_de_base').array
    smic_horaire = simulation.legislation_at(period.start).cotsoc.gen.smic_h_b
    smic_mensuel = smic_horaire * 35 * 52 / 12
    brut = simulation.get_holder('salaire_de_base').array
    simulation.get_or_new_holder('contrat_de_travail').array = brut < smic_mensuel  # temps plein ou temps partiel
    simulation.get_or_new_holder('heures_remunerees_volume').array = brut // smic_horaire  # temps plein ou partiel

    imposable = simulation.calculate('salaire_imposable')

    inversion_reform = inversion_revenus.build_reform(tax_benefit_system)
    inverse_simulation = inversion_reform.new_scenario().init_single_entity(
        **single_entity_kwargs).new_simulation(debug = True)

    inverse_simulation.get_holder('salaire_de_base').delete_arrays()
    inverse_simulation.get_or_new_holder('salaire_imposable_pour_inversion').array = imposable.copy()
    inverse_simulation.get_or_new_holder('contrat_de_travail').array = brut < smic_mensuel  # temps plein ou partiel
    inverse_simulation.get_or_new_holder('heures_remunerees_volume').array = (
        (brut // smic_horaire) * (brut < smic_mensuel)
        )

    new_brut = inverse_simulation.calculate('salaire_de_base')
    assert_near(new_brut, brut, absolute_error_margin = 1)
コード例 #3
0
def check_rstnet_to_rstbrut(count, rstbrut_max, rstbrut_min, year):
    scenario_args = dict(
        axes = [
            dict(
                count = count,
                name = 'rstbrut',
                max = rstbrut_max,
                min = rstbrut_min,
                ),
            ],
        period = year,
        parent1 = dict(
            birth = datetime.date(year - 40, 1, 1),
            ),
        )

    simulation = base.tax_benefit_system.new_scenario().init_single_entity(
        **scenario_args
        ).new_simulation(debug = True)

    rstbrut = simulation.get_holder('rstbrut').array
    rstnet = simulation.calculate('rstnet')

    inversion_reform = inversion_revenus.build_reform(base.tax_benefit_system)
    inverse_simulation = inversion_reform.new_scenario().init_single_entity(
        **scenario_args
        ).new_simulation(debug = True)

    inverse_simulation.get_holder('rstbrut').delete_arrays()
    inverse_simulation.get_or_new_holder('rstnet').array = rstnet
    new_rstbrut = inverse_simulation.calculate('rstbrut')

    assert_near(new_rstbrut, rstbrut, error_margin = 0.1)
コード例 #4
0
def net_plot(revenu, count = 11, max_revenu = 5000, min_revenu = 0):
    year = 2014
    period = periods.period("{}-01".format(year))
    if revenu == 'chomage':
        brut_name = 'chobrut'
        net_name = 'chonet'
    elif revenu == 'retraite':
        brut_name = 'rstbrut'
        net_name = 'rstnet'
    elif revenu == 'salaire':
        brut_name = 'salaire_de_base'
        net_name = 'salaire_net'
    else:
        return

    single_entity_kwargs = dict(
        axes = [[
            dict(count = count, max = max_revenu, min = min_revenu, name = brut_name)
            ]],
        period = period,
        parent1 = dict(
            birth = datetime.date(year - 40, 1, 1),
            ),
        )
    simulation = tax_benefit_system.new_scenario().init_single_entity(
        **single_entity_kwargs).new_simulation(debug = True)

    smic_horaire = simulation.legislation_at(period.start).cotsoc.gen.smic_h_b
    smic_mensuel =  smic_horaire * 35 * 52 / 12
    brut = simulation.get_holder(brut_name).array
    simulation.get_or_new_holder('contrat_de_travail').array =  brut < smic_mensuel # temps plein ou temps partiel
    simulation.get_or_new_holder('heures_remunerees_volume').array =  brut // smic_horaire # temps plein ou temps partiel

    net = simulation.calculate(net_name)

    inversion_reform = inversion_revenus.build_reform(tax_benefit_system)
    inverse_simulation = inversion_reform.new_scenario().init_single_entity(
        **single_entity_kwargs).new_simulation(debug = True)

    inverse_simulation.get_holder(brut_name).delete_arrays()
    inverse_simulation.get_or_new_holder(net_name).array = net.copy()
    inverse_simulation.get_or_new_holder('contrat_de_travail').array =  brut < smic_mensuel # temps plein ou temps partiel
    inverse_simulation.get_or_new_holder('heures_remunerees_volume').array =  (
        (brut // smic_horaire)  * (brut < smic_mensuel)
        )

    print inverse_simulation.get_or_new_holder('contrat_de_travail').array
    print inverse_simulation.get_or_new_holder('heures_remunerees_volume').array

    new_brut = inverse_simulation.calculate(brut_name)
    pyplot.subplot(2, 1, 1)
    pyplot.plot(brut, net, 'ro', label = "direct")
    pyplot.plot(new_brut, net, 'db', label = "inversed")
    pyplot.legend()

    pyplot.subplot(2, 1, 2)
    pyplot.plot(brut, new_brut - brut, 'r-')

    pyplot.show()
    assert_near(new_brut, brut, absolute_error_margin = 1)
コード例 #5
0
def check_rstnet_to_rstbrut(count, rstbrut_max, rstbrut_min, year):
    scenario_args = dict(
        axes=[
            dict(
                count=count,
                name='rstbrut',
                max=rstbrut_max,
                min=rstbrut_min,
            ),
        ],
        period=year,
        parent1=dict(birth=datetime.date(year - 40, 1, 1), ),
    )

    simulation = base.tax_benefit_system.new_scenario().init_single_entity(
        **scenario_args).new_simulation(debug=True)

    rstbrut = simulation.get_holder('rstbrut').array
    rstnet = simulation.calculate('rstnet')

    inversion_reform = inversion_revenus.build_reform(base.tax_benefit_system)
    inverse_simulation = inversion_reform.new_scenario().init_single_entity(
        **scenario_args).new_simulation(debug=True)

    inverse_simulation.get_holder('rstbrut').delete_arrays()
    inverse_simulation.get_or_new_holder('rstnet').array = rstnet
    new_rstbrut = inverse_simulation.calculate('rstbrut')

    assert_near(new_rstbrut, rstbrut, error_margin=0.1)
コード例 #6
0
def check_salaire_net_to_salbrut(count, salbrut_max, salbrut_min, type_sal, year):
    scenario_args = dict(
        axes = [
            dict(
                count = count,
                name = 'salbrut',
                max = salbrut_max,
                min = salbrut_min,
                ),
            ],
        period = year,
        parent1 = dict(
            birth = datetime.date(year - 40, 1, 1),
            type_sal = type_sal,
            ),
        )

    simulation = base.tax_benefit_system.new_scenario().init_single_entity(
        **scenario_args
        ).new_simulation()

    salbrut = simulation.get_holder('salbrut').array
    salaire_net = simulation.calculate('salaire_net')

    inversion_reform = inversion_revenus.build_reform(base.tax_benefit_system)
    inverse_simulation = inversion_reform.new_scenario().init_single_entity(
        **scenario_args
        ).new_simulation()

    inverse_simulation.get_holder('salbrut').delete_arrays()
    inverse_simulation.get_or_new_holder('salaire_net').array = salaire_net
    new_salbrut = inverse_simulation.calculate('salbrut')

    assert_near(new_salbrut, salbrut, absolute_error_margin = 0.1)
コード例 #7
0
def get_tax_benefit_system(reform_name):
    reform = tax_benefit_system_by_reform_name.get(reform_name)
    if reform is None:
        assert reform_name == 'inversion_revenus', 'Unknown reform: {}'.format(reform_name)
        from openfisca_france.reforms import inversion_revenus

        reform = inversion_revenus.build_reform(tax_benefit_system)
        tax_benefit_system_by_reform_name[reform_name] = reform
    return reform
コード例 #8
0
def get_tax_benefit_system(reform_name):
    reform = tax_benefit_system_by_reform_name.get(reform_name)
    if reform is None:
        assert reform_name == 'inversion_revenus', 'Unknown reform: {}'.format(
            reform_name)
        from openfisca_france.reforms import inversion_revenus

        reform = inversion_revenus.build_reform(tax_benefit_system)
        tax_benefit_system_by_reform_name[reform_name] = reform
    return reform
コード例 #9
0
def brut_plot(revenu, count = 11, max_revenu = 5000, min_revenu = 0):
    year = 2014
    period = periods.period("{}-01".format(year))
    if revenu == 'chomage':
        brut_name = 'chobrut'
        imposable_name = 'cho'
        inversible_name = 'choi'
    elif revenu == 'retraite':
        brut_name = 'rstbrut'
        imposable_name = 'rst'
        inversible_name = 'rsti'
    elif revenu == 'salaire':
        brut_name = 'salaire_de_base'
        imposable_name = 'sal'
        inversible_name = 'sali'
    else:
        return

    single_entity_kwargs = dict(
        axes = [dict(count = count, max = max_revenu, min = min_revenu, name = brut_name)],
        period = period,
        parent1 = dict(
            birth = datetime.date(year - 40, 1, 1),
            ),
        )
    simulation = tax_benefit_system.new_scenario().init_single_entity(
        **single_entity_kwargs).new_simulation(debug = True)
    brut = simulation.get_holder(brut_name).array
    imposable = simulation.calculate(imposable_name)

    inversion_reform = inversion_revenus.build_reform(tax_benefit_system)
    inverse_simulation = inversion_reform.new_scenario().init_single_entity(
        **single_entity_kwargs).new_simulation(debug = True)

    inverse_simulation.get_holder(brut_name).delete_arrays()
    inverse_simulation.get_or_new_holder(inversible_name).array = imposable.copy()
    new_brut = inverse_simulation.calculate(brut_name)
    pyplot.subplot(2, 1, 1)
    pyplot.plot(brut, imposable, 'ro', label = "direct")
    pyplot.plot(new_brut, imposable, 'db', label = "inversed")
    pyplot.legend()

    pyplot.subplot(2, 1, 2)
    pyplot.plot(brut, new_brut - brut, 'r-')

    pyplot.show()
    assert_near(new_brut, brut, absolute_error_margin = 1)
コード例 #10
0
def check_salaire_net_to_salaire_de_base(count, salaire_de_base_max, salaire_de_base_min, type_sal, year):
    period = periods.period("{}-01".format(year))
    scenario_args = dict(
        axes = [
            dict(
                count = count,
                name = 'salaire_de_base',
                max = salaire_de_base_max,
                min = salaire_de_base_min,
                ),
            ],
        period = period,
        parent1 = dict(
            birth = datetime.date(year - 40, 1, 1),
            type_sal = type_sal,
            ),
        )

    simulation = base.tax_benefit_system.new_scenario().init_single_entity(
        **scenario_args
        ).new_simulation()

    salaire_de_base = simulation.get_holder('salaire_de_base').array
    smic_horaire = simulation.legislation_at(period.start).cotsoc.gen.smic_h_b
    smic_mensuel = smic_horaire * 35 * 52 / 12
    brut = simulation.get_holder('salaire_de_base').array
    simulation.get_or_new_holder('contrat_de_travail').array = brut < smic_mensuel  # temps plein ou temps partiel
    simulation.get_or_new_holder('heures_remunerees_volume').array = brut // smic_horaire  # temps plein / partiel

    salaire_net = simulation.calculate('salaire_net')

    inversion_reform = inversion_revenus.build_reform(base.tax_benefit_system)
    inverse_simulation = inversion_reform.new_scenario().init_single_entity(
        **scenario_args
        ).new_simulation()

    inverse_simulation.get_holder('salaire_de_base').delete_arrays()
    inverse_simulation.get_or_new_holder('salaire_net').array = salaire_net
    inverse_simulation.get_or_new_holder('contrat_de_travail').array = brut < smic_mensuel  # temps plein / partiel
    inverse_simulation.get_or_new_holder('heures_remunerees_volume').array = (
        (brut // smic_horaire) * (brut < smic_mensuel)
        )
    new_salaire_de_base = inverse_simulation.calculate('salaire_de_base')
    assert_near(new_salaire_de_base, salaire_de_base, absolute_error_margin = 0.1,
        message = 'Failing test for type_sal={}'.format(type_sal))
コード例 #11
0
def test_cho(year=2014):
    simulation = tax_benefit_system.new_scenario().init_single_entity(
        axes=[dict(count=11, max=24000, min=0, name='chobrut')],
        period=year,
        parent1=dict(birth=datetime.date(year - 40, 1, 1), ),
    ).new_simulation(debug=True)
    brut = simulation.get_holder('chobrut').array
    imposable = simulation.calculate('cho')

    inversion_reform = inversion_revenus.build_reform(tax_benefit_system)

    inverse_simulation = inversion_reform.new_scenario().init_single_entity(
        axes=[dict(count=11, max=24000, min=0, name='chobrut')],
        period=year,
        parent1=dict(birth=datetime.date(year - 40, 1, 1), ),
    ).new_simulation(debug=True)

    inverse_simulation.get_holder('chobrut').delete_arrays()
    inverse_simulation.get_or_new_holder('choi').array = imposable.copy()
    new_brut = inverse_simulation.calculate('chobrut')
    assert_near(new_brut, brut, error_margin=1)
コード例 #12
0
def test_rst(year = 2014):
    period = periods.period("{}-01".format(year))
    single_entity_kwargs = dict(
        axes = [dict(count = 101, max = 2000, min = 0, name = 'rstbrut')],
        period = period,
        parent1 = dict(
            birth = datetime.date(year - 40, 1, 1),
            ),
        )
    simulation = tax_benefit_system.new_scenario().init_single_entity(
        **single_entity_kwargs
        ).new_simulation(debug = True)
    brut = simulation.get_holder('rstbrut').array
    imposable = simulation.calculate('rst')

    inversion_reform = inversion_revenus.build_reform(tax_benefit_system)
    inverse_simulation = inversion_reform.new_scenario().init_single_entity(
        **single_entity_kwargs).new_simulation(debug = True)

    inverse_simulation.get_holder('rstbrut').delete_arrays()
    inverse_simulation.get_or_new_holder('rsti').array = imposable.copy()
    new_brut = inverse_simulation.calculate('rstbrut')
    assert_near(new_brut, brut, absolute_error_margin = 1)