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)
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)
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)
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)
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)
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)
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
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
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)
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))
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)
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)