Source code for policy_modules.premium_calculate

#!/usr/bin/env python
import re

from utility_modules.get_parameters import get_params
import pandas as pd
import numpy as np
import pdb

[docs]class CalculatePremium(): def __init__(self, policy_params, year): gid_subsidy = policy_params['prem_sub'] self.prem_sub = get_params(gid_subsidy) #subset to only values in designated year self.premium_sub = self.prem_sub[(self.prem_sub.year==year) & (self.prem_sub.metal_tier=='silver')] self.premium_sub= self.premium_sub.reset_index(drop=True) #subset from subset table self.fpl_bracket = np.ndarray((2, self.premium_sub.fpl_lower.shape[0])) self.fpl_bracket[0,:]= self.premium_sub.fpl_lower self.fpl_bracket[1,:]= self.premium_sub.fpl_upper self.beta_0= self.premium_sub.beta0 self.beta_1= self.premium_sub.beta1
[docs] def get_fpl_bracket(self): return self.fpl_bracket
[docs] def get_beta_0(self): return self.beta_0
[docs] def get_beta_1(self): return self.beta_1
[docs] def get_year(self): return self.year
[docs] def calculate_premium(self, fpl, pop_df): fpl_check = [fpl-self.fpl_bracket[1, i] for i in range(len(self.fpl_bracket[0,]))] fpl_index = sum(x>0 for x in fpl_check) #If income is below 100% FPL, they are treated as if they have income at 100% FPL if(fpl<100): fpl=100 prem_sub_percent= fpl*self.beta_1[fpl_index]+ self.beta_0[fpl_index] return prem_sub_percent
########################## # # # Qiyang's code # # # ##########################
[docs] def calculate_premium_h(self, fpl_base, incomeArr): xp = self.premium_sub.fpl_lower/100.0 * fpl_base fp = self.premium_sub.p_lower/100.0 * fpl_base xp[0] = xp[1] - 0.1 # when fpl is less than 133%, it is in medicaid region premArr = np.interp(incomeArr, xp, fp) return premArr
# famMemberLst[0:'age', 1:'undoc', 2:'prem cap', 3:'plan_id', 4:'firm_id', 5:'Pr1')]
[docs] def prem_cap_sum(self, famMemLst, esi_drop): ppsum_undoc = 0 ppsum_doc = 0 for m in famMemLst : #if esi_drop and self.planIsInFirm(m[3], m[4]): continue if m[2] == None: continue if m[1] : ppsum_undoc += m[2] else : ppsum_doc += m[2] return (ppsum_doc, ppsum_undoc)
[docs] def calculate_premium_h_df(self, incomeArr, df, esi_drop): x = df['income'].shape[0] premArr = np.empty((x, 1), dtype=float) for ind, tr in df.iterrows(): income = incomeArr[int(ind)] fpl_base = tr['fpl_base'] famMemLst = tr['fam_members'] prem_cap = self.prem_cap_sum(famMemLst, esi_drop) xp = self.premium_sub.fpl_lower/100.0 * fpl_base fp = self.premium_sub.p_lower/100.0 * income xp[0] = xp[1] - 0.1 # when fpl is less than 133%, it is in medicaid region premArr[int(ind)] = min(prem_cap[0], np.interp(income, xp.astype(float), fp.astype(float))) + prem_cap[1] return premArr