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