Ejemplo n.º 1
0
def load_til_pensipp(pensipp_comparison_path, years, to_print=(None,None,True)):
    result_pensipp = load_pensipp_result(pensipp_comparison_path, to_csv=False)
    result_til = pd.DataFrame(columns = var_to_check_montant + var_to_check_taux, index = result_pensipp.index)
    result_til['yearliq'] = -1
    for yearsim in years:
        print(yearsim)
        data_bounded = load_pensipp_data(pensipp_comparison_path, yearsim, first_year_sal)
        param = PensionParam(yearsim, data_bounded)
        legislation = PensionLegislation(param)
        simul_til = PensionSimulation(data_bounded, legislation)
        simul_til.set_config()
        vars_to_calculate = dict()
        result_til_year = dict()
        P = simul_til.legislation.P
        for regime in ['FP', 'RG', 'RSI']:
            trim_regime = simul_til.calculate('nb_trimesters', regime)
            for varname in ['coeff_proratisation', 'DA', 'decote', 'n_trim', 'salref', 'surcote', 'taux', 'pension']:
                if varname == 'coeff_proratisation':
                    result_til_year['CP_' + regime] = simul_til.calculate(varname, regime)*(trim_regime > 0)
                elif varname == 'decote':
                    param_name = simul_til.get_regime(regime).param_name
                    taux_plein = reduce(getattr, param_name.split('.'), P).plein.taux
                    calc = simul_til.calculate(varname, regime)
                    result_til_year[varname + '_' + regime] = taux_plein*calc*(trim_regime > 0)
                else:
                    if varname != 'n_trim':
                        calc = simul_til.calculate(varname, regime)
                        result_til_year[varname + '_' + regime] = calc*(trim_regime > 0)
                    else: 
                        result_til_year[varname + '_' + regime] = simul_til.calculate(varname, regime)
        for regime in ['agirc', 'arrco']:
            for varname in ['coefficient_age', 'nb_points', 'pension']:
                if varname == 'coefficient_age':
                    result_til_year['coeff_age_' + regime] = simul_til.calculate(varname, regime)
                if varname == 'nombre_points':
                    result_til_year['nb_points_' + regime] = simul_til.calculate(varname, regime)
                else:
                    result_til_year[varname + '_' + regime] = simul_til.calculate(varname, regime)
        result_til_year['N_CP_RG'] = simul_til.calculate('N_CP', 'RG') 
        result_til_year['pension_tot'] = simul_til.calculate('pension', 'all')
        
        result_til_year = pd.DataFrame(result_til_year, index=data_bounded.info_ind['index'])
        id_year_in_initial = [ident for ident in result_til_year.index if ident in result_til.index]
        assert (id_year_in_initial == result_til_year.index).all()
        result_til.loc[result_til_year.index, :] = result_til_year
        result_til.loc[result_til_year.index, 'yearliq'] = yearsim


    to_compare = (result_til['yearliq']!= -1)
    til_compare = result_til.loc[to_compare,:]
    pensipp_compare = result_pensipp.loc[to_compare,:]
    return til_compare, pensipp_compare , simul_til     
Ejemplo n.º 2
0
def get_pension(context, yearleg):
    """ return a PensionSimulation """
    sali = context["longitudinal"]["sali"]
    workstate = context["longitudinal"]["workstate"]
    # calcul de la date de naissance au bon format
    datesim = context["period"]
    datesim_in_month = 12 * (datesim // 100) + datesim % 100
    datenaiss_in_month = datesim_in_month - context["agem"]
    naiss = 100 * (datenaiss_in_month // 12) + datenaiss_in_month % 12 + 1
    naiss = pd.Series(naiss)
    naiss = pd.Series(naiss).map(lambda t: dt.date(t // 100, t % 100, 1))

    info_ind = pd.DataFrame(
        {
            "index": context["id"],
            "agem": context["agem"],
            "naiss": naiss,
            "sexe": context["sexe"],
            "nb_enf_all": context["nb_enf"],
            "nb_pac": context["nb_pac"],
            "nb_enf_RG": context["nb_enf_RG"],
            "nb_enf_RSI": context["nb_enf_RSI"],
            "nb_enf_FP": context["nb_enf_FP"],
            "tauxprime": context["tauxprime"],
        }
    )
    info_ind = info_ind.to_records(index=False)

    workstate = workstate.loc[workstate["id"].isin(info_ind.index), :].copy()
    workstate.set_index("id", inplace=True)
    workstate.sort_index(inplace=True)
    sali = sali.loc[sali["id"].isin(info_ind.index), :].copy()
    sali.set_index("id", inplace=True)
    sali.sort_index(inplace=True)
    sali.fillna(0, inplace=True)

    data = PensionData.from_arrays(workstate, sali, info_ind)
    param = PensionParam(yearleg, data)
    legislation = PensionLegislation(param)
    simulation = PensionSimulation(data, legislation)
    simulation.set_config()
    return simulation
Ejemplo n.º 3
0
def load_til_pensipp(pensipp_comparison_path,
                     years,
                     to_print=(None, None, True)):
    result_pensipp = load_pensipp_result(pensipp_comparison_path, to_csv=False)
    result_til = pd.DataFrame(columns=var_to_check_montant + var_to_check_taux,
                              index=result_pensipp.index)
    result_til['yearliq'] = -1
    for yearsim in years:
        print(yearsim)
        data_bounded = load_pensipp_data(pensipp_comparison_path, yearsim,
                                         first_year_sal)
        param = PensionParam(yearsim, data_bounded)
        legislation = PensionLegislation(param)
        simul_til = PensionSimulation(data_bounded, legislation)
        simul_til.set_config()
        vars_to_calculate = dict()
        result_til_year = dict()
        P = simul_til.legislation.P
        for regime in ['FP', 'RG', 'RSI']:
            trim_regime = simul_til.calculate('nb_trimesters', regime)
            for varname in [
                    'coeff_proratisation', 'DA', 'decote', 'n_trim', 'salref',
                    'surcote', 'taux', 'pension'
            ]:
                if varname == 'coeff_proratisation':
                    result_til_year['CP_' + regime] = simul_til.calculate(
                        varname, regime) * (trim_regime > 0)
                elif varname == 'decote':
                    param_name = simul_til.get_regime(regime).param_name
                    taux_plein = reduce(getattr, param_name.split('.'),
                                        P).plein.taux
                    calc = simul_til.calculate(varname, regime)
                    result_til_year[
                        varname + '_' +
                        regime] = taux_plein * calc * (trim_regime > 0)
                else:
                    if varname != 'n_trim':
                        calc = simul_til.calculate(varname, regime)
                        result_til_year[varname + '_' +
                                        regime] = calc * (trim_regime > 0)
                    else:
                        result_til_year[varname + '_' +
                                        regime] = simul_til.calculate(
                                            varname, regime)
        for regime in ['agirc', 'arrco']:
            for varname in ['coefficient_age', 'nb_points', 'pension']:
                if varname == 'coefficient_age':
                    result_til_year['coeff_age_' +
                                    regime] = simul_til.calculate(
                                        varname, regime)
                if varname == 'nombre_points':
                    result_til_year['nb_points_' +
                                    regime] = simul_til.calculate(
                                        varname, regime)
                else:
                    result_til_year[varname + '_' +
                                    regime] = simul_til.calculate(
                                        varname, regime)
        result_til_year['N_CP_RG'] = simul_til.calculate('N_CP', 'RG')
        result_til_year['pension_tot'] = simul_til.calculate('pension', 'all')

        result_til_year = pd.DataFrame(result_til_year,
                                       index=data_bounded.info_ind['index'])
        id_year_in_initial = [
            ident for ident in result_til_year.index
            if ident in result_til.index
        ]
        assert (id_year_in_initial == result_til_year.index).all()
        result_til.loc[result_til_year.index, :] = result_til_year
        result_til.loc[result_til_year.index, 'yearliq'] = yearsim

    to_compare = (result_til['yearliq'] != -1)
    til_compare = result_til.loc[to_compare, :]
    pensipp_compare = result_pensipp.loc[to_compare, :]
    return til_compare, pensipp_compare, simul_til