Beispiel #1
0
def test_homemade_nbptr_function(
    reform_config_base_2020, nbptr_parametres_par_defaut, various_cas_types
):
    # Verifie que les resultats de nbptr et irpp sont les mêmes avec la fonction par defaut
    period = "2020"
    data = dataframe_from_cas_types_description(various_cas_types)
    tbs_reforme_sans_nbptr = IncomeTaxReform(
        FranceTaxBenefitSystem(), reform_config_base_2020, period
    )
    tbs_reforme_avec_nbptr = IncomeTaxReform(
        FranceTaxBenefitSystem(),
        {
            "impot_revenu": {
                **(reform_config_base_2020["impot_revenu"]),
                **nbptr_parametres_par_defaut,
            }
        },
        period,
    )

    sim_sans_nbptr, _ = simulation(period, data, tbs_reforme_sans_nbptr)
    sim_avec_nbptr, _ = simulation(period, data, tbs_reforme_avec_nbptr)

    print("sans", sim_sans_nbptr.calculate("nbptr", period))
    print("avec", sim_avec_nbptr.calculate("nbptr", period))

    assert array_equal(
        sim_sans_nbptr.calculate("nbptr", period),
        sim_avec_nbptr.calculate("nbptr", period),
    )
    assert array_equal(
        sim_sans_nbptr.calculate("irpp", period),
        sim_avec_nbptr.calculate("irpp", period),
    )
Beispiel #2
0
def CompareOldNew(taux=None, isdecile=True, dictreform=None, castypedesc=None):
    # if isdecile, we want the impact on the full population, while just a cas type on
    # the isdecile=False

    if isdecile:
        data = DUMMY_DATA
        reform = IncomeTaxReform(TBS, dictreform, PERIOD)
        simulation_reform = simulation(PERIOD, data, reform)
        return compare(PERIOD, {"apres": simulation_reform}, isdecile)

    data, simulation_base, simulation_plf = (
        (CAS_TYPE, simulation_base_castypes, simulation_plf_castypes)
        if castypedesc is None else simulation_from_cas_types(castypedesc))
    reform = IncomeTaxReform(TBS, dictreform, PERIOD)
    simulation_reform = simulation(PERIOD, data, reform)

    if dictreform is None:
        assert taux is not None
        dictreform = {
            "impot_revenu": {
                "bareme": {
                    "seuils": [0] + taux[:len(taux) // 2],
                    "taux": [0.0] + taux[len(taux) // 2:],
                }
            }
        }
    return compare(
        PERIOD,
        {
            "avant": simulation_base,
            "plf": simulation_plf,
            "apres": simulation_reform
        },
        isdecile,
    )
def CompareOldNew(taux=None, isdecile=True, dictreform=None, castypedesc=None):
    # if isdecile, we want the impact on the full population, while just a cas type on
    # the isdecile=False

    if isdecile:
        # On prend les données de la population entière
        data = DUMMY_DATA
        reform = IncomeTaxReform(TBS, dictreform, PERIOD)
        # On ne crée qu'une simulation, le moteur de calcul ayant précalculé les autres.
        simulation_reform = simulation(PERIOD, data, reform)
        # On n'envoie à simuler que le "apres"
        return compare(PERIOD, {"apres": simulation_reform}, isdecile)

    # Pour les cas-types, on n'utilise pas de resultats précalculés
    # donc on inclut aussi les simulations par défaut
    data, default_sims = (
        (CAS_TYPE, simulations_reformes_par_defaut_castypes)
        if castypedesc is None
        else simulation_from_cas_types(castypedesc)
    )
    reform = IncomeTaxReform(TBS, dictreform, PERIOD)
    simulation_reform = simulation(PERIOD, data, reform)
    default_sims["apres"] = simulation_reform

    if dictreform is None:
        assert taux is not None
        dictreform = {
            "impot_revenu": {
                "bareme": {
                    "seuils": [0] + taux[: len(taux) // 2],
                    "taux": [0.0] + taux[len(taux) // 2 :],
                }
            }
        }

    return compare(PERIOD, default_sims, isdecile)
Beispiel #4
0
def test_zero_nbptr(reform_config_base_2020, nbptr_zero, various_cas_types):
    # Verifie que les resultats de nbptr sont bien zero pour tout le monde si tous les param
    # sont à zéro
    period = "2020"
    data = dataframe_from_cas_types_description(various_cas_types)
    tbs_reforme_avec_nbptr = IncomeTaxReform(
        FranceTaxBenefitSystem(),
        {"impot_revenu": {**(reform_config_base_2020["impot_revenu"]), **nbptr_zero}},
        period,
    )

    sim_avec_nbptr, _ = simulation(period, data, tbs_reforme_avec_nbptr)

    resultats_nbptr = sim_avec_nbptr.calculate("nbptr", period)

    assert not resultats_nbptr.any()
Beispiel #5
0
def test_deux_adultes_ancien_combattants_deux_enfants(reform_config_base_2020):
    # données
    foyer = {
        "declarants": [
            {
                "ancienCombattant": True,
                "invalide": False,
                "parentIsole": False,
                "retraite": False,
                "veuf": False
            },
            {
                "ancienCombattant": True,
                "invalide": False,
                "parentIsole": False,
                "retraite": False,
                "veuf": False
            }
        ],
        "personnesACharge": [
            {
                "chargePartagee": False,
                "invalide": False
            },
            {
                "chargePartagee": False,
                "invalide": False
            }
        ],
        "residence": "metropole",
        "revenuImposable": 120000
    }
    data = dataframe_from_cas_types_description([foyer])
    period = "2020"

    # loi française + réforme IR
    tbs_reforme_impot_revenu = IncomeTaxReform(
        FranceTaxBenefitSystem(), reform_config_base_2020, period
    )
    built_simulation, _dict_data_by_entity = simulation(
        period, data, tbs_reforme_impot_revenu
    )

    nbptr = built_simulation.calculate("nbptr", period)
    assert nbptr == [3.5]
Beispiel #6
0
    avantx = dfv[bestsol][1]
    apresx = dfv[bestsol + 1][1]
    lambda_ = (val_brute - avanty) / (apresy - avanty)
    return lambda_ * apresx + (1 - lambda_) * avantx


conversion_variables = {}

conversion_variables["salaire_de_base_to_salaire_imposable"] = scenar_values(
    0, 12_000_000, "salaire_de_base", "salaire_imposable")
conversion_variables["retraite_brute_to_retraite_imposable"] = scenar_values(
    0, 12_000_000, "retraite_brute", "retraite_imposable")

PERIOD = "2018"
TBS = FranceTaxBenefitSystem()
TBS_PLF = IncomeTaxReform(TBS, reformePLF, PERIOD)
CAS_TYPE = load_data("DCT.csv")
SIMCAT = partial(simulation, period=PERIOD, data=CAS_TYPE)
SIMCAT_BASE = SIMCAT(tbs=TBS)

if not version_beta_sans_simu_pop:
    # Initialisation des données utilisées pour le calcul sur la population
    DUMMY_DATA = load_data(data_path).sort_values(by="idfoy")
    print(
        "Dummy Data loaded",
        len(DUMMY_DATA),
        "lines",
        len(DUMMY_DATA["idfoy"].unique()),
        "foyers fiscaux",
    )
    # Resultats sur la population du code existant et du PLF. Ne change jamais donc pas besoin de fatiguer l'ordi à calculer
conversion_variables = {}

conversion_variables["salaire_de_base_to_salaire_imposable"] = scenar_values(
    0, 12_000_000, "salaire_de_base", "salaire_imposable"
)
conversion_variables["retraite_brute_to_retraite_imposable"] = scenar_values(
    0, 12_000_000, "retraite_brute", "retraite_imposable"
)


PERIOD = str(annee_de_calcul)
TBS = FranceTaxBenefitSystem()
TBS_DEFAULT = {"avant": TBS}
for nom_reforme in reformes_par_defaut:
    TBS_DEFAULT[nom_reforme] = IncomeTaxReform(
        TBS, reformes_par_defaut[nom_reforme], PERIOD
    )
CAS_TYPE = load_data("DCT.csv")
DUMMY_DATA = (
    CAS_TYPE
    if version_beta_sans_simu_pop
    else load_data(data_path).sort_values(by="idfoy")
)

# Initialisation des données utilisées pour le calcul sur la population
NB_FOYERS_FISCAUX_SIMULES = len(DUMMY_DATA["idfoy"].unique())
logging.info(
    "Dummy Data loaded "
    + str(len(DUMMY_DATA))
    + " lines "
    + str(NB_FOYERS_FISCAUX_SIMULES)