Source code for policy_modules.excise_tax

#!/usr/bin/env python
import numpy as np
import pandas as pd
from utility_modules.get_parameters import get_params
from utility_modules.get_parameters import get_parse_params

[docs]class ExciseTax: def __init__(self, policy_params): #policy file identifiers g_age_id = policy_params['gruber_age_rating'] fb_id = policy_params['firm_behavior'] pr_id = policy_params['premium_ratios'] self.ar = get_params(g_age_id) self.fparam = get_parse_params(fb_id) self.Avg_AgeRating_4workers = float(self.fparam.Avg_AgeRating_4workers) self.pr = get_params(pr_id) if (float(self.fparam.FEHBprem_increase_2010to_yr1) > float(self.fparam.target_increase_2010to_yr1)): self.adjuster=float(self.fparam.FEHBprem_increase_2010to_yr1)/float(self.fparam.target_increase_2010to_yr1) else: self.adjuster = 1
[docs] def set_year(self, curr_year): self.adjuster=self.adjuster*(float(self.fparam.cpiu))**(curr_year-float(self.fparam.Year_excise_tax_begins)) if (curr_year>float(self.fparam.Year_excise_tax_begins)): self.adjuster=self.adjuster*1.01 self.Excise_threshold_single_yr1 = float(self.fparam.Excise_threshold_single_yr1)*self.adjuster self.Excise_threshold_family_yr1 = float(self.fparam.Excise_threshold_family_yr1)*self.adjuster self.Excise_bump_if_high_risk_single = float(self.fparam.Excise_bump_if_high_risk_single)*self.adjuster self.Excise_bump_if_high_risk_family = float(self.fparam.Excise_bump_if_high_risk_family)*self.adjuster
[docs] def get_rate_by_age(self, age): df_age = self.ar[(self.ar['age_lb']<=age) & (self.ar['age_ub']>=age)] y = df_age.iloc[0]['rate'] return y/self.Avg_AgeRating_4workers
[docs] def get_excise_av_threshold(self, worker_table): age_rating = np.array(map(self.get_rate_by_age, worker_table['age'])) single = age_rating*self.Excise_threshold_single_yr1 + \ age_rating*worker_table['high_risk']*self.Excise_bump_if_high_risk_single family = age_rating*self.Excise_threshold_family_yr1 + \ age_rating*worker_table['high_risk']*self.Excise_bump_if_high_risk_family return pd.concat([single, family], axis=1, ignore_index=True)
[docs] def premium_change(self, firm_id, worker_table, prem_df): excise_av_thresh= self.get_excise_av_threshold(worker_table[worker_table['firm_id']==firm_id]) threshold_s= float(np.mean(excise_av_thresh[0])) threshold_f= float(np.mean(excise_av_thresh[1])) premium_self= float(prem_df['premium_self_actual'].item()) premium_fam = float(prem_df['premium_fam_actual'].item()) prop_av=float(prem_df['av_value']) if (premium_self > threshold_s or premium_fam > threshold_f) & (float(prem_df['av_value']) > float(self.fparam['av_lowest'])): prop_av = prem_df['av_value']*min(threshold_s/premium_self, threshold_f/premium_fam) if (prop_av.item() >=float(self.fparam['av_lowest'])): prem_df['premium_self_actual'] = float(prem_df['av_value'])*threshold_s/prem_df['premium_self_actual'].item() prem_df['premium_sp_actual'] = premium_self*self.pr['Value'][self.pr['Name']=='self_spouse'].item() prem_df['premium_ch_actual'] = premium_self*self.pr['Value'][self.pr['Name']=='self_child'].item() prem_df['premium_fam_actual'] = premium_self*self.pr['Value'][self.pr['Name']=='self_all'].item() prem_df['av_value'] = prop_av else: prem_df['premium_self'] = premium_self*self.fparam['av_lowest']/prem_df['av_value'].item() prem_df['premium_sp'] = premium_self*self.pr['Value'][self.pr['Name']=='self_spouse'].item() prem_df['premium_ch'] = premium_self*self.pr['Value'][self.pr['Name']=='self_child'].item() prem_df['premium_fam'] = premium_self*self.pr['Value'][self.pr['Name']=='self_all'].item() prem_df['av_value'] = self.fparam['av_lowest']