Example: Personnel, Benefits Calculations
401k Flat Percent Calculation
For simplicity, the examples use comma separators for terms. Some browser settings require you to use semicolon separators.
- Create the following global assumption accounts:Assumption NameAssumption CodeAccount Type401(k) Flat Match401K_FLAT_MatchPercent
- Use the following formulas:Account NameAccount CodeAccount TypeFormula401(k) Employee Election401kEmployeeElectionModeled - periodic - CurrencyASSUM.401K_Flat_Match*ROW.TaxableComp
401k Calculation Match with Maximum
- Create the following global assumption accounts:Assumption NameAssumption CodeAccount TypeDisplay As401(k) Max401K_MaxPeriodic - AverageNumber401(k) 100% of the first x%Match_100PercPeriodic - AveragePercent401(k) 50% of the next x%Match_50PercPeriodic - AveragePercent
- Make sure these accounts have the followingAccount Settings:
- Time Rollup = Average of Roll-up Values
- Actuals Overlay = No Actuals for account (Show plan data)
- Modeled accounts needed include:Account NameAccount CodeAccount TypeDisplay AsTaxable CompTaxableCompModeled - periodicCurrency
- Formulas:Account NameAccount CodeAccount Type401(k) Company Match 100% - CumulativeComp_Match_100Modeled - Periodic - CurrencyFormulaIFF(month(this)=1,ROW.TaxableComp*ASSUM.Match_100Perc, ROW.Comp_Match_100[time=this-1] + ROW.TaxableComp *ASSUM.Match_100Perc)401(k) Company Match 50% - CumulativeComp_Match_50Modeled - Periodic - CurrencyFormulaIFF(month(this)=1,ROW.TaxableComp*DIVF(ASSUM.Match_50Perc,2), ROW.Comp_Match_50[time=this-1] + ROW.TaxableComp *DIVF(ASSUM.Match_50Perc,2))401(k) Company Match Total - CumulativeComp_Match_TotalModeled - Periodic - CurrencyFormulaROW.Comp_Match_100+ROW.Comp_Match_50401k Expense401k_ExpenseModeled - Periodic - CurrencyFormulaIFF(ROW.Comp_Match_Total<=ASSUM.401k_Max, (ROW.TaxableComp*ASSUM.Match_100Perc)+(ROW.TaxableComp*divf(ASSUM.Match_50Perc,2)), IFF(ROW.Comp_Match_Total>ASSUM.401k_Max and ROW.Comp_Match_Total[time=this-1]<=ASSUM.401k_Max, ASSUM.401k_Max-ROW.Comp_Match_Total[time=this-1],0))
Medical, Dental, and Vision Benefits
Most companies will want to plan Medical, Dental, and Vision Benefits by an employee's election with the ability to manage/maintain separate rates for each.
To begin set up a
Benefit
dimension. Keep the standard settings. Make sure List dimension
is selected, but make sure Use on levels
, Data import automatically creates dimension values
, and Keep sorted
are not selected.- Within the dimension set up the following Dimension Values:
- Employee Only
- Employee + Spouse
- Employee + Child
- Employee + Family
- Set up a user-assigned cube sheet available a the Top Level (only) and create three standard cube accounts:Account NameAccount CodeAccount TypeDisplay AsMedical RateMedicalPeriodicCurrencyDental RateDentalPeriodicCurrencyVision RateVisionPeriodicCurrency
- Make sure these accounts have the followingAccount Settings:
- Time Rollup = Average of Roll-up Values
- Level Rollup = Non-Blank Average of Rollup Values
- Actuals Overlay = No Actuals for account (Show plan data)
- Display as = Currency
- Data Privacy + Value of Account is public at all levels
- Once the cube accounts are set up, add theBenefitsdimension to the cube sheet.
- The monthly lookup tables needed are:Account NameAccount CodeColumnValue EnteredBenefits EligibleBenefits_EligibleEmployee Type - Text SelectorPopulate 1 in all relevant combinations
- Now, set up the following calculated accounts within the Personnel modeled sheet:Account NameAccount CodeAccount TypeFormulaMedical ExpenseMedical_ExpenseModeled - Periodic - CurrencyACCT.Beneft_Rates.Medical[level=Top Level(-), Benefit=this]*Row.Headcount*Row.Benefits_EligibleDental ExpenseDental_ExpenseModeled - Periodic - CurrencyACCT.Beneft_Rates.Dental[level=Top Level(-), Benefit=this]*Row.Headcount*Row.Benefits_EligibleVision ExpenseVision_ExpenseModeled - Periodic - CurrencyACCT.Beneft_Rates.Vision[level=Top Level(-), Benefit=this]*Row.Headcount*Row.Benefits_Eligible
Life Insurance
Most companies will have a Life Insurance plan at a fixed rate per X
dollars of benefit.
- Create the following global assumption accounts:Assumption NameAssumption CodeAccount TypeLife Insurance Rate per $X of BenefitLife_RateNumber$ (per) to apply to RateLife_per_DollarNumberLife Multiplier (Annual Earnings)Life_MultiplierNumberLife Max BenefitLife_Max_BenefitNumber
- Make sure these accounts have the followingAccount Settings:
- Time Rollup = Average of Roll-up Values
- Actuals Overlay = No Actuals for account (Show plan data)
- Formulas:Assumption NameAssumption CodeAccount TypeLife InsuranceLife_InsuranceModeled - Periodic - CurrencyFormulaIFF(DIV(ASSUM.Life_Max_Benefit,ASSUM.Life_per_Dollar)* ASSUM.Life_Rate> DIV(((ROW.Headcount*ROW.Salary*ASSUM.Life_Multiplier)),ASSUM.Life_per_Dollar)* ASSUM.Life_Rate,DIV(((ROW.Headcount*ROW.Salary)* ASSUM.Life_Multiplier),ASSUM.Life_per_Dollar)* ASSUM.Life_Rate,div(ASSUM.Life_Max_Benefit,ASSUM.Life_per_Dollar)*ASSUM.Life_Rate)* Row.Benefits_Eligible
Long Term/Short Term Disability (LTD/STD)
Most companies pay for disability coverage for their employees based on a rate per $ of coverage.
- Create the following global assumption accounts:Assumption NameAssumption CodeAccount TypeDisplay AsRate per $100LTD_RatePer100Periodic - AverageNumberRate per $10STD_RatePer10Periodic - AverageNumber
- Make sure these accounts have the followingAccount Settings:
- Time Rollup = Average of Roll-up Values
- Actuals Overlay = No Actuals for account (Show plan data)
- Formulas:Account NameAccount CodeAccount TypeFormulasLTD ExpenseLTD_ExpenseModeled - Periodic - CurrencyDIVF(ROW.Salary,100) * ASSUM.LTD_RatePer100 * Row.Benefits_EligibleSTD ExpenseSTD_ExpenseModeled - Periodic - CurrencyDIVF(ROW.Salary,10) * ASSUM.STD_RatePer10 * Row.Benefits_Eligible