{"version":3,"sources":["reducers/auth.js","reducers/nav.js","reducers/tooltips.js","reducers/data.js","reducers/validation.js","reducers/memberTabs.js","reducers/index.js","store.js","utils/requireAcceptTerms.js","data/data.js","utils/validateLastScreen.js","components/statusBar.js","screens/acceptTerms.js","components/fields/inputField.js","components/fields/yearsOfService.js","components/fields/reviewField.js","components/fields/memberResultTabs.js","components/fields/memberResultsTable.js","components/field.js","screens/screen.js","screens/geoErrorMessage.js","screens/loading.js","images/pasers-logo.js","App.js","index.js"],"names":["initialState","hasAcceptedTerms","state","action","type","bool","acceptTerms","dispatch","currentNav","fontSize","className","updateCurrentNav","changeFontSize","toolTip","showTooltip","fields","results","updateData","key","value","calculateResults","getState","data","calculateAgeOnDate","date","dob","year","month","roundNum","num","numPlaces","parseFloat","Number","toFixed","formatter","Intl","NumberFormat","style","currency","ageOnDateOfHire","moment","hire_date","birthdate","ageOnDateOfRetirement","date_of_retirement","totalService","currentSalary","current_annual_salary","replace","asg","ann_salary_growth","aig","ann_investment_growth","periodTable","i","prevData","tableData","period","retirementYears","payProjection","onePercentStatutory","onePercentGrowth","Math","max","min","pow","push","finalAverageFiveAdjustment","interestAdjToAge67","satInterestAdjTo67","fasAtRetirement","accrualRate","vlookupCalc","returnValue","vlookup","ageOfRetireFloor","floor","ageOfRetireAddOne","difference","vlookup1","vlookup2","age67","map","d","retirementAge","DBVested","statutory_msla_pv_factor","option_1_factor","cost_neutral_factor","dateOfRetirementERF","yosEligibleA5","yosEligibleA6","ruleOf97","vlookupA51","vlookupA52","vlookupA61","vlookupA62","getColumn","columnName","a5_early_retirement","a6_early_retirement","dateOfRetirementErfBaseFactors","accrualRateAtRet_noErf","accrualRateAtRet_includingErf","DCVested","firstYear","label","annualSalary","format","span","a5","a6","investment","MSLA","totalInvestmentBalance","contributionsAndInterest","adjustedMSLA","dateOfRetirementEstimates","dateofRetirement","calendar","tooltip_id","tooltip","defferedMSLA","defferedContributionsAndInterest","defferedAdjustedMSLA","defferedToAge67Estimates","newValidation","changeValidation","tab","switchTab","createRootReducers","history","combineReducers","router","connectRouter","auth","nav","tooltips","validation","memberTabs","createBrowserHistory","middleware","next","window","dataLayer","event","payload","thunk","routerMiddleware","composedEnhancers","compose","applyMiddleware","store","createStore","requireAcceptTerms","ComposedComponent","defaultProps","AcceptTerms","props","localStorage","getItem","JSON","parse","this","error","info","console","log","nextProps","React","Component","connect","href","target","rel","Date","validateLastScreen","Validation","lastScreens","currentData","length","ls","lastScreen","hasOwnProperty","errors","sections","forEach","s","f","required","name","total","isValid","currentScreen","screens","screen","bindActionCreators","StatusBar","handleClick","bind","e","preventDefault","buttons","navSet","currentStep","onClick","statusBarTitle","title","scrolledTerms","sessionStorage","scrollTerms","setState","setItem","terms","text","tabIndex","onScroll","InputField","selectionStart","inputField","createRef","getSelectionStart","checkMinMax","parseValue","handleChange","current","val","regex","exec","lastIndex","setSelectionRange","x","split","x1","x2","rgx","test","minVal","maxVal","replacements","find","formats","addCommas","onChange","ref","id","ownProps","YearsOfService","getNewValue","options","newVal","o","k","defaultVal","valObj","Object","assign","forIn","v","select","tableCount","document","body","clientWidth","columns","tables","t","c","ck","columnRows","r","rk","onFocus","handleFocus","readOnly","step","ReviewField","fieldValue","fieldType","get","getMonth","getDate","getFullYear","MemberResultTabs","currentTab","tabs","MemberResultsTable","formatData","row","dollars","round","display","disclaimer","subLabel","rows","indexOf","colSpan","sup","data-tip","data-for","multiline","aria-haspopup","effect","ReactHtmlParser","Field","theField","theLabel","htmlFor","theValidation","selected","xmlns","width","height","viewBox","Screen","nextIndex","modalIsOpen","validateScreen","printScreen","stepBack","onUnload","addEventListener","prevIndex","prev","ss","sk","removeEventListener","print","buttonTextPrev","buttonTextNext","printBtn","resetApp","restartApp","modal","children","fk","hideTitle","layout","GeoErrorMessage","message","Loading","color","Logo","white","version","y","enableBackground","fill","App","cookieNotice","cookie","load","loading","lat","long","usa","top","bottom","left","right","usa_check","geolocationErr","removeCookieNotice","navigator","geolocation","getCurrentPosition","position","coords","latitude","lng","longitude","err","code","geoLocationErrorOne","geoLocationOther","save","path","expires","add","toDate","geoLocationCheck","screenNames","index","exact","component","cookie_notice","geolocationMessage","withRouter","user","ReactGA","initialize","plugin","require","pageview","location","pathname","search","root","querySelector","ReactDOM","render","basename"],"mappings":"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","file":"static/js/main.0f64701b.chunk.js","sourcesContent":["export const ACCEPT_TERMS = 'ACCEPT_TERMS';\r\n\r\nconst initialState = {\r\n hasAcceptedTerms: false\r\n};\r\n\r\nexport default (state = initialState, action = {}) => {\r\n switch(action.type) {\r\n case ACCEPT_TERMS:\r\n return {\r\n ...state,\r\n hasAcceptedTerms: action.bool\r\n };\r\n default: return state;\r\n }\r\n}\r\n\r\nexport const acceptTerms = (bool) => {\r\n return dispatch => {\r\n dispatch({\r\n type: ACCEPT_TERMS,\r\n bool\r\n })\r\n }\r\n}","export const UPDATE_CURRENT_NAV = 'UPDATE_CURRENT_NAV'\r\nexport const CHANGE_FONT_SIZE = 'CHANGE_FONT_SIZE'\r\n\r\nconst initialState = {\r\n currentNav: '',\r\n fontSize: 'small'\r\n}\r\n\r\nexport default (state = initialState, action) => {\r\n switch (action.type) {\r\n case UPDATE_CURRENT_NAV:\r\n return {\r\n ...state,\r\n currentNav: action.className\r\n }\r\n case CHANGE_FONT_SIZE:\r\n return {\r\n ...state,\r\n fontSize: action.fontSize\r\n }\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport const updateCurrentNav = (className) => {\r\n return dispatch => {\r\n dispatch({\r\n type: UPDATE_CURRENT_NAV,\r\n className: className\r\n })\r\n }\r\n}\r\n\r\nexport const changeFontSize = (fontSize) => {\r\n return dispatch => {\r\n dispatch({\r\n type: CHANGE_FONT_SIZE,\r\n fontSize\r\n })\r\n }\r\n}","export const SHOW_TOOLTIP = 'SHOW_TOOLTIP'\r\nexport const HIDE_TOOLTIP = 'HIDE_TOOLTIP'\r\n\r\nconst initialState = {\r\n toolTip: '',\r\n}\r\n\r\nexport default (state = initialState, action) => {\r\n switch (action.type) {\r\n case SHOW_TOOLTIP:\r\n return {\r\n ...state,\r\n toolTip: action.toolTip\r\n }\r\n\r\n case HIDE_TOOLTIP:\r\n return {\r\n ...state,\r\n toolTip: ''\r\n }\r\n\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport const showTooltip = (toolTip) => {\r\n return dispatch => {\r\n dispatch({\r\n type: SHOW_TOOLTIP,\r\n toolTip\r\n })\r\n }\r\n}\r\n\r\nexport const hideTooltip = () => {\r\n return dispatch => {\r\n dispatch({\r\n type: HIDE_TOOLTIP\r\n })\r\n }\r\n}","import React from 'react';\nimport moment from 'moment'\nimport data from './hardcodedFactors.json';\n\nexport const UPDATE_DATA = 'UPDATE_DATA'\nexport const CALCULATE_RESULTS = 'CALCULATE_RESULTS'\nexport const CLEAR_STATE = 'CLEAR_STATE'\n\nconst initialState = {\n fields: {},\n results: {}\n}\n\nexport default (state = initialState, action) => {\n switch (action.type) {\n case UPDATE_DATA:\n return {\n ...state,\n fields: {\n ...state.fields,\n ...action.fields\n }\n }\n\n case CLEAR_STATE:\n return {\n ...state,\n fields : {\n ...initialState.fields,\n ...action.fields\n }\n }\n\n case CALCULATE_RESULTS:\n return {\n ...state,\n results: action.results\n }\n\n default:\n return state\n }\n}\n\nexport const updateData = (key,value,type) => {\n return dispatch => {\n let fields = {\n [key]: {\n type,\n value\n }\n }\n dispatch({\n type: UPDATE_DATA,\n fields\n })\n }\n}\n\nexport const calculateResults = () => {\n return (dispatch, getState) => {\n const fields = getState().data.fields\n let results = {}\n\n // Step 1: Get Ages\n function calculateAgeOnDate(date, dob) {\n const calcAge = date.year() - dob.year() + ((date.month() + 1) - (dob.month() + 1)) / 12 + ((date.date() + 1) - (dob.date() + 1)) / 360;\n return calcAge;\n }\n\n function roundNum(num, numPlaces = 6) {\n return parseFloat(Number.parseFloat(num).toFixed(numPlaces));\n // return Math.round(num * 100000) / 100000\n }\n\n var formatter = new Intl.NumberFormat('en-US', {\n style : 'currency',\n currency : 'USD',\n });\n\n let ageOnDateOfHire = calculateAgeOnDate(moment( fields.hire_date.value ), moment( fields.birthdate.value ));\n let ageOnDateOfRetirement = calculateAgeOnDate(moment(fields.date_of_retirement.value), moment(fields.birthdate.value));\n let totalService = ageOnDateOfRetirement - ageOnDateOfHire;\n let currentSalary = parseFloat(fields.current_annual_salary.value.replace(/,/g, ''));\n\n //base factors\n\n const asg = fields.ann_salary_growth.value;\n const aig = fields.ann_investment_growth.value;\n\n let periodTable = []\n\n for(let i=0;i<=80;i++) {\n\n const prevData = periodTable[i-1];\n\n let tableData = {\n period : i,\n retirementYears : null,\n payProjection : null,\n onePercentStatutory : null,\n onePercentGrowth : null\n }\n\n tableData.retirementYears = Math.max(0, (Math.min(1, totalService- i )))\n\n if(!prevData) {\n tableData.payProjection = currentSalary;\n tableData.onePercentStatutory = 0.01* tableData.retirementYears * tableData.payProjection * ((Math.pow(1+0.04, (tableData.retirementYears/2))))\n tableData.onePercentGrowth = 0.01* tableData.retirementYears * tableData.payProjection * ((Math.pow((1 + aig / 100), (tableData.retirementYears/2))))\n } else {\n tableData.payProjection = prevData.payProjection*(1+asg/100);\n tableData.onePercentStatutory = 0.01* tableData.retirementYears * tableData.payProjection * ((Math.pow(1+0.04, (tableData.retirementYears/2)))) + prevData.onePercentStatutory*(Math.pow((1+0.04), tableData.retirementYears))\n tableData.onePercentGrowth = 0.01*tableData.retirementYears*tableData.payProjection*((Math.pow((1+aig/100),(tableData.retirementYears/2))))+prevData.onePercentGrowth*((Math.pow((1+aig/100),(tableData.retirementYears))))\n }\n\n periodTable.push(tableData);\n }\n\n let finalAverageFiveAdjustment = roundNum((1+1/(1+asg/100)+1/Math.pow((1+asg/100), 2)+1/Math.pow((1+asg/100),3) +1/Math.pow((1+asg/100), 4))/5)\n let interestAdjToAge67 = roundNum(Math.pow((1+aig/100), Math.max(0, (67- ageOnDateOfRetirement))));\n let satInterestAdjTo67 = roundNum(Math.pow(1.04, Math.max(0, (67-ageOnDateOfRetirement))));\n let fasAtRetirement = (Math.pow((1+asg/100), (Math.max(0,totalService -1))))*currentSalary*finalAverageFiveAdjustment;\n\n let accrualRate = {\n a5 : 0.012500,\n a6 : 0.010000,\n investment : 0\n }\n\n\n\n function vlookupCalc(returnValue) {\n let vlookup = {\n 'retirementAge' : null,\n 'age67' : null\n };\n let ageOfRetireFloor = Math.floor(ageOnDateOfRetirement);\n let ageOfRetireAddOne = ageOfRetireFloor + 1;\n let difference = ageOnDateOfRetirement - ageOfRetireFloor;\n\n let vlookup1 = null;\n let vlookup2 = null;\n let age67 = null\n\n data.map((d) => {\n if(ageOfRetireFloor === d['Age']){\n vlookup1 = d[returnValue];\n }\n if(ageOfRetireAddOne === d['Age']) {\n vlookup2 = d[returnValue]\n }\n if(d['Age'] === 67) {\n age67 = d[returnValue]\n }\n return 0\n })\n\n vlookup.retirementAge = roundNum((difference*vlookup2+(1-difference)*vlookup1),5);\n vlookup.age67 = age67;\n\n return vlookup;\n }\n\n const dateOfRetirementErfBaseFactors = () => {\n let yosEligibleA5 = ((totalService >= 25) && (ageOnDateOfRetirement >= 57)) ? 1 : 0;\n let yosEligibleA6 = ((totalService >= 25) && (ageOnDateOfRetirement >= 62)) ? 2 : 0;\n\n let ageOfRetireFloor = Math.floor(ageOnDateOfRetirement);\n let ageOfRetireAddOne = ageOfRetireFloor + 1;\n let difference = ageOnDateOfRetirement - ageOfRetireFloor;\n let ruleOf97 = ((ageOfRetireFloor + Math.floor(totalService) >= 97) && (totalService >= 35)) ? 1 : 0\n\n let vlookupA51 = null;\n let vlookupA52 = null;\n let vlookupA61 = null;\n let vlookupA62 = null;\n\n\n function getColumn(num) {\n let columnName;\n switch(num) {\n case 2:\n columnName = \"A-5slashA-6\";\n break;\n case 3:\n columnName = \"A-5\";\n break;\n case 4:\n columnName = \"A-6\";\n break;\n default :\n }\n return columnName\n }\n\n let vlookup = {\n 'a5_early_retirement' : null,\n 'a6_early_retirement' : null\n };\n\n data.map((d) => {\n if(ageOfRetireFloor === d['Age']){\n vlookupA51 = d[getColumn(2 + yosEligibleA5)];\n }\n if(ageOfRetireAddOne === d['Age']) {\n vlookupA52 = d[getColumn(2 + yosEligibleA5)]\n }\n if(ageOfRetireFloor === d['Age']){\n vlookupA61 = d[getColumn(2 + yosEligibleA6)];\n }\n if(ageOfRetireAddOne === d['Age']) {\n vlookupA62 = d[getColumn(2 + yosEligibleA6)]\n }\n return 0\n })\n\n vlookup.a5_early_retirement = Math.max(roundNum((difference*vlookupA52+(1-difference)*vlookupA51), 5), ruleOf97);\n vlookup.a6_early_retirement = Math.max(roundNum((difference*vlookupA62+(1-difference)*vlookupA61), 6), ruleOf97);\n\n return vlookup;\n\n }\n\n let statutory_msla_pv_factor = vlookupCalc('Statutory MSLA');\n let option_1_factor = vlookupCalc('Option 1 Factor');\n let cost_neutral_factor = vlookupCalc('Cost Neutral MSLA');\n let dateOfRetirementERF = dateOfRetirementErfBaseFactors();\n\n let accrualRateAtRet_noErf = {\n a5 : fasAtRetirement * accrualRate.a5 * totalService,\n a6 : fasAtRetirement * accrualRate.a6 * totalService,\n investment : 0\n }\n\n let accrualRateAtRet_includingErf = {\n a5 : accrualRateAtRet_noErf.a5 * dateOfRetirementERF.a5_early_retirement,\n a6 : accrualRateAtRet_noErf.a6 * dateOfRetirementERF.a6_early_retirement\n }\n\n let DBVested;\n let DCVested = (totalService < 3) ? 0 : 1;\n\n if (totalService < 3) {\n DBVested = 0;\n } else {\n if (ageOnDateOfRetirement >= 67 || totalService >= 10) {\n DBVested = 1;\n } else {\n DBVested = 0;\n }\n }\n\n // console.log(\"***********************IT STARTS HERE*******************************\")\n // console.log(\"_______________________BASE FACTORS 1_________________________________\")\n // console.log(\"Age at Hire :\", ageOnDateOfHire)\n // console.log(\"Age at Retirement : \", ageOnDateOfRetirement)\n // console.log(\"Total Service : \", totalService)\n\n // console.log(\"_______________________BASE FACTORS 2_________________________________\")\n\n // console.log(\"Final Average 5 Adjustment : \", finalAverageFiveAdjustment);\n // console.log(\"Intrest Adjustment To Age 67 : \", interestAdjToAge67);\n // console.log(\"Statutory Interest Adjustment to Age 67 : \", satInterestAdjTo67 )\n\n // console.log(\"_______________________BASE FACTORS 3_________________________________\")\n\n // console.log(\"Current Salary : \", currentSalary )\n // console.log(\"FAS at Retirement : \", fasAtRetirement)\n\n // console.log(\"_______________________BASE FACTORS 4_________________________________\")\n\n // // console.log('Accrual Rate : ', accrualRate)\n // console.log('Accrual at Retirement (no ERF) : ', accrualRateAtRet_noErf)\n // console.log('Accrual at Retirement (including ERF) : ', accrualRateAtRet_includingErf)\n\n // console.log(\"_______________________BASE FACTORS SALARY TABLE_________________________________\")\n // console.log('period table', periodTable)\n\n // console.log(\"_______________________Statutory MSLA PV Factor Section_________________________________\")\n // console.log('statutory_msla_pv_factor = ', statutory_msla_pv_factor);\n\n // console.log(\"_______________________Option 1 Factor Section_________________________________\")\n // console.log('option_1_factor = ', option_1_factor);\n\n // console.log(\"_______________________Cost Neutral PV Factor Section_________________________________\")\n // console.log('cost_neutral_factor = ', cost_neutral_factor);\n\n // console.log(\"_______________________Date of Retirement ERF Section_________________________________\")\n // console.log('dateOfRetirementErf = ', dateOfRetirementErfBaseFactors());\n\n\n\n // // Step 10: Create Results Tables\n\n //*********************************************************************************\n //*********************************************************************************\n // START Contributions Toward Your Benefit TABLE ***\n //*********************************************************************************\n //*********************************************************************************\n\n\n const firstYear = [\n {\n label: \"Your Employer's Annual Contributions\",\n type: 'header extend',\n annualSalary: formatter.format(currentSalary)\n },\n {\n label: 'Toward Your Pension Plan',\n span : 2,\n data: {\n a5: \"Calculated Annually\",\n a6: \"Calculated Annually\",\n investment: \"N/A\"\n }\n },\n {\n label: 'Toward Your Investment Plan',\n data: {\n a5: currentSalary * 0.0225,\n a6: currentSalary * 0.02,\n investment: currentSalary * 0.035\n }\n },\n {\n label: 'Your Annual Contributions',\n type: 'header extend'\n },\n {\n label: Toward Your
Pension Plan

Does not reflect shared-risk/shared-gain changes

,\n // type: 'inset1',\n data: {\n a5: currentSalary * 0.05,\n a6: currentSalary * 0.04,\n investment: \"N/A\"\n }\n },\n {\n label: 'Toward Your Investment Plan',\n data: {\n a5: currentSalary * 0.0325,\n a6: currentSalary * 0.035,\n investment: currentSalary * 0.075,\n }\n },\n {\n label: 'Your Annual Total',\n data: {\n\n a5: (currentSalary * 0.05) + (currentSalary * 0.0325), //( currentSalary * 0.05 ) + ( (currentSalary - 0.05) * currentSalary ),\n a6: (currentSalary * 0.04) + (currentSalary * 0.035), //( finalAvgToAnnual * 0.04 ) + ( (curCon - 0.04) * finalAvgToAnnual ),\n investment: 0 + (currentSalary * 0.075)\n }\n }\n ]\n\n let MSLA = {\n a5: accrualRateAtRet_includingErf.a5/12,\n a6 : accrualRateAtRet_includingErf.a6/12\n }\n\n let totalInvestmentBalance = {\n a5: (0.0325 + DCVested * 0.0225) * 100 * periodTable[80].onePercentGrowth,\n a6: (0.035 + DCVested * 0.02) * 100 * periodTable[80].onePercentGrowth,\n investment: (0.075 + DCVested * 0.035) * 100 * periodTable[80].onePercentGrowth\n }\n\n let contributionsAndInterest = {\n a5 : 5 * periodTable[80].onePercentStatutory,\n a6 : 4 * periodTable[80].onePercentStatutory\n }\n\n let adjustedMSLA = {\n a5 : MSLA.a5-(contributionsAndInterest.a5/cost_neutral_factor.retirementAge)/12,\n a6 : MSLA.a6-(contributionsAndInterest.a6/cost_neutral_factor.retirementAge)/12,\n }\n\n //*********************************************************************************\n //*********************************************************************************\n // START DATE OF RETRIREMENT TABLE ***\n //*********************************************************************************\n //*********************************************************************************\n\n const dateOfRetirementEstimates = [\n {\n label: 'Investment Plan Account Balance',\n dateofRetirement: moment(fields.date_of_retirement.value).calendar(),\n annualSalary: formatter.format(fasAtRetirement),\n data: {\n a5: totalInvestmentBalance.a5,\n a6: totalInvestmentBalance.a6,\n investment: totalInvestmentBalance.investment\n }\n },\n {\n label: 'Pension Plan Initial Present Value',\n data: {\n a5: (DBVested === 0) ? \"N/A\" : (MSLA.a5) * 12 * statutory_msla_pv_factor.retirementAge,\n a6: (DBVested === 0) ? \"N/A\" : (MSLA.a6) * 12 * statutory_msla_pv_factor.retirementAge,\n investment: \"N/A\"\n }\n },\n {\n label: 'Pension Plan Contribution & Interest',\n data: {\n\n a5: contributionsAndInterest.a5,\n a6: contributionsAndInterest.a6,\n investment: \"N/A\"\n }\n },\n {\n label: \"Pension Plan Payment Options\",\n type: 'header extend'\n },\n {\n label:

MSLA
Maximum Single Life Annuity
Monthly Amount for Life

,\n tooltip_id : \"i1\",\n tooltip :

The Maximum Single Life Annuity option provides the highest monthly payment for as long as you live. Payments stop when you die. If you do not withdraw your contributions and interest at retirement, the balance of that amount – minus any payments that were made to you – will be paid to your beneficiaries.

,\n data: {\n a5: (DBVested === 0) ? \"N/A\" : MSLA.a5,\n a6: (DBVested === 0) ? \"N/A\" : MSLA.a6,\n investment: \"N/A\",\n }\n },\n {\n label: 'Option 1',\n tooltip_id : \"i2\",\n tooltip :

Option 1 provides a smaller monthly payment for as long as you live. Payments stop when you die. If the sum of all payments SERS makes to you is less than the initial present value of your SERS benefit at the time you retired, then the difference – or “remaining value” – will be paid to your beneficiaries.

,\n type: 'inset1',\n data: {\n\n a5: (DBVested === 0) ? \"N/A\" : MSLA.a5 * option_1_factor.retirementAge,\n a6: (DBVested === 0) ? \"N/A\" : MSLA.a6 * option_1_factor.retirementAge,\n investment: \"N/A\"\n }\n },\n {\n label: 'Initial Present Value',\n type: 'inset2',\n data: {\n\n a5: (DBVested === 0) ? \"N/A\" : (MSLA.a5) * 12 * statutory_msla_pv_factor.retirementAge,\n a6: (DBVested === 0) ? \"N/A\" : (MSLA.a6) * 12 * statutory_msla_pv_factor.retirementAge,\n investment: \"N/A\"\n }\n },\n {\n label: (\n
\n

\n Pension Plan Payment Options Adjusted for
\n Full Withdrawal of Your Contributions & Interest\n

\n

\n When you retire, you have the option to withdrawal any portion of the contributions you made toward your pension and the interest you earned on those contributions during your commonwealth career. Doing so reduces your monthly pension payments. The following “adjusted” amounts reflect the monthly pension payments after a full withdrawal of your contributions.\n

\n
\n ),\n type: 'header extend'\n },\n {\n label:

Adjusted MSLA
Maximum Single Life Annuity
Monthly Amount for Life

,\n data: {\n\n a5: (DBVested === 0) ? \"N/A\" : adjustedMSLA.a5,\n a6: (DBVested === 0) ? \"N/A\" : adjustedMSLA.a6,\n investment: \"N/A\"\n }\n },\n {\n label: 'Adjusted Option 1',\n type: 'inset1',\n data: {\n\n a5: (DBVested === 0) ? \"N/A\" : adjustedMSLA.a5 * option_1_factor.retirementAge,\n a6: (DBVested === 0) ? \"N/A\" : adjustedMSLA.a6 * option_1_factor.retirementAge,\n investment: \"N/A\"\n }\n },\n {\n label: 'Adjusted Initial Present Value',\n tooltip_id : \"i3\",\n tooltip :

Adjusted Initial Present Value is the initial present value of the pension benefit minus the total value of contributions and interest.

,\n type: 'inset2',\n data: {\n\n a5: (DBVested === 0) ? \"N/A\" : adjustedMSLA.a5 * 12 * statutory_msla_pv_factor.retirementAge,\n a6: (DBVested === 0) ? \"N/A\" : adjustedMSLA.a6 * 12 * statutory_msla_pv_factor.retirementAge,\n investment: \"N/A\"\n }\n },\n\n //*********************************************************************************\n //*********************************************************************************\n // START Deffered to Age 67 Estimates TABLE ***\n //*********************************************************************************\n //*********************************************************************************\n\n ]\n\n let defferedMSLA = {\n a5: accrualRateAtRet_noErf.a5/12,\n a6 : accrualRateAtRet_noErf.a6/12\n }\n\n let defferedContributionsAndInterest = {\n a5 : contributionsAndInterest.a5 * satInterestAdjTo67,\n a6 : contributionsAndInterest.a6 * satInterestAdjTo67\n }\n\n let defferedAdjustedMSLA = {\n a5 : defferedMSLA.a5-(defferedContributionsAndInterest.a5/cost_neutral_factor.age67)/12,\n a6 : defferedMSLA.a6-(defferedContributionsAndInterest.a6/cost_neutral_factor.age67)/12,\n }\n\n let defferedToAge67Estimates;\n if (ageOnDateOfRetirement > 67) {\n defferedToAge67Estimates = false;\n } else {\n if (DBVested) {\n defferedToAge67Estimates = [\n {\n label: 'Investment Plan Account Balance',\n dateofRetirement: moment(fields.date_of_retirement.value).calendar(),\n data: {\n a5: totalInvestmentBalance.a5 * interestAdjToAge67,\n a6: totalInvestmentBalance.a6 * interestAdjToAge67,\n investment: totalInvestmentBalance.investment * interestAdjToAge67\n }\n },\n {\n label: 'Pension Plan Initial Present Value',\n data: {\n a5: (defferedMSLA.a5) * 12 * statutory_msla_pv_factor.age67,\n a6: (defferedMSLA.a6) * 12 * statutory_msla_pv_factor.age67,\n investment: \"N/A\"\n }\n },\n {\n label: 'Pension Plan Contributions & Interest',\n data: {\n\n a5: defferedContributionsAndInterest.a5,\n a6: defferedContributionsAndInterest.a6,\n investment: \"N/A\"\n }\n },\n {\n label: \"Pension Plan Payment Options\",\n type: 'header extend'\n },\n {\n label:

MSLA
Maximum Single Life Annuity
Monthly Amount for Life

,\n tooltip_id: \"i1\",\n tooltip:

The Maximum Single Life Annuity option provides the highest monthly payment for as long as you live. Payments stop when you die. If you do not withdraw your contributions and interest at retirement, the balance of that amount – minus any payments that were made to you – will be paid to your beneficiaries.

,\n data: {\n a5: defferedMSLA.a5,\n a6: defferedMSLA.a6,\n investment: \"N/A\"\n }\n },\n {\n label: 'Option 1',\n tooltip_id: \"i2\",\n tooltip:

Option 1 provides a smaller monthly payment for as long as you live. Payments stop when you die. If the sum of all payments SERS makes to you is less than the initial present value of your SERS benefit at the time you retired, then the difference – or “remaining value” – will be paid to your beneficiaries.

,\n type: 'inset1',\n data: {\n\n a5: defferedMSLA.a5 * option_1_factor.age67,\n a6: defferedMSLA.a6 * option_1_factor.age67,\n investment: \"N/A\"\n }\n },\n {\n label: 'Initial Present Value',\n type: 'inset2',\n data: {\n a5: (defferedMSLA.a5) * 12 * statutory_msla_pv_factor.age67,\n a6: (defferedMSLA.a6) * 12 * statutory_msla_pv_factor.age67,\n investment: \"N/A\"\n }\n },\n\n {\n label: (\n
\n

\n Pension Plan Payment Options Adjusted for
\n Full Withdrawal of Your Contributions & Interest\n

\n

\n When you retire, you have the option to withdrawal any portion of the contributions you made toward your pension and the interest you earned on those contributions during your commonwealth career. Doing so reduces your monthly pension payments. The following “adjusted” amounts reflect the monthly pension payments after a full withdrawal of your contributions.\n

\n
\n ),\n type: 'header extend'\n },\n {\n label:

Adjusted MSLA
Maximum Single Life Annuity
Monthly Amount for Life

,\n data: {\n\n a5: defferedAdjustedMSLA.a5,\n a6: defferedAdjustedMSLA.a6,\n investment: \"N/A\"\n }\n },\n {\n label: 'Adjusted Option 1',\n type: 'inset1',\n data: {\n\n a5: defferedAdjustedMSLA.a5 * option_1_factor.age67,\n a6: defferedAdjustedMSLA.a6 * option_1_factor.age67,\n investment: \"N/A\"\n }\n },\n {\n label: 'Adjusted Initial Present Value',\n type: 'inset2',\n tooltip_id: \"i3\",\n tooltip:

Adjusted Initial Present Value is the initial present value of the pension benefit minus the total value of contributions and interest.

,\n data: {\n\n a5: defferedAdjustedMSLA.a5 * 12 * statutory_msla_pv_factor.age67,\n a6: defferedAdjustedMSLA.a6 * 12 * statutory_msla_pv_factor.age67,\n investment: \"N/A\"\n }\n },\n\n ]\n } else {\n defferedToAge67Estimates = false;\n }\n }\n\n\n results = {\n firstYear,\n dateOfRetirementEstimates,\n defferedToAge67Estimates\n }\n\n dispatch({\n type: CALCULATE_RESULTS,\n results\n })\n }\n}\n","export const CHANGE_VALIDATION = 'CHANGE_VALIDATION'\r\n\r\nconst initialState = {\r\n};\r\n\r\nexport default (state = initialState, action) => {\r\n switch(action.type) {\r\n case CHANGE_VALIDATION:\r\n return {\r\n ...state,\r\n ...action.newValidation\r\n };\r\n default: return state;\r\n }\r\n}\r\n\r\nexport const changeValidation = (newValidation) => {\r\n return dispatch => {\r\n dispatch({\r\n type: CHANGE_VALIDATION,\r\n newValidation\r\n })\r\n }\r\n}","export const SWITCH_TAB = 'SWITCH_TAB'\r\n\r\nconst initialState = {\r\n tab: '',\r\n}\r\n\r\nexport default (state = initialState, action) => {\r\n switch (action.type) {\r\n case SWITCH_TAB:\r\n return {\r\n ...state,\r\n tab: action.tab\r\n }\r\n\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nexport const switchTab = (tab) => {\r\n return dispatch => {\r\n dispatch({\r\n type: SWITCH_TAB,\r\n tab\r\n })\r\n }\r\n}","import { combineReducers } from 'redux'\r\nimport auth from './auth'\r\nimport nav from './nav'\r\nimport tooltips from './tooltips'\r\nimport data from './data'\r\nimport validation from './validation'\r\nimport memberTabs from './memberTabs'\r\nimport { connectRouter } from 'connected-react-router'\r\n\r\nconst createRootReducers = (history) => combineReducers({\r\n router: connectRouter(history),\r\n auth,\r\n nav,\r\n tooltips,\r\n data,\r\n validation,\r\n memberTabs\r\n\r\n})\r\n\r\nexport default createRootReducers;","import { createStore, applyMiddleware, compose } from 'redux'\r\nimport { routerMiddleware } from 'connected-react-router'\r\nimport thunk from 'redux-thunk'\r\nimport { createBrowserHistory } from 'history';\r\nimport createRootReducers from './reducers'\r\n\r\nexport const history = createBrowserHistory()\r\n\r\nconst analytics = () => next => action => {\r\n let dataLayer = window.dataLayer || [];\r\n dataLayer.push({\r\n event: action.type,\r\n payload: action\r\n });\r\n return next(action);\r\n};\r\n\r\nconst initialState = {}\r\nconst enhancers = []\r\nconst middleware = [\r\n analytics,\r\n thunk,\r\n routerMiddleware(history)\r\n]\r\n\r\nif (process.env.NODE_ENV === 'development') {\r\n const devToolsExtension = window.devToolsExtension\r\n\r\n if (typeof devToolsExtension === 'function') {\r\n enhancers.push(devToolsExtension())\r\n }\r\n}\r\n\r\nconst composedEnhancers = compose(\r\n applyMiddleware(...middleware),\r\n ...enhancers\r\n)\r\n\r\nconst store = createStore(\r\n createRootReducers(history),\r\n initialState,\r\n composedEnhancers\r\n)\r\n\r\n\r\n\r\nexport default store\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { history } from '../store';\r\n\r\nexport function requireAcceptTerms(ComposedComponent, defaultProps) {\r\n class AcceptTerms extends React.Component {\r\n constructor(props){\r\n super(props);\r\n this.state = {\r\n hasAcceptedTerms : (localStorage.getItem(\"usa_check\")) ? JSON.parse(localStorage.getItem(\"usa_check\")) : null\r\n }\r\n }\r\n componentDidMount() {\r\n if (!this.props.hasAcceptedTerms) {\r\n history.push('/');\r\n }\r\n }\r\n\r\n componentDidCatch(error, info) {\r\n console.log(error, info);\r\n }\r\n\r\n componentDidUpdate(nextProps) {\r\n if (!nextProps.hasAcceptedTerms) {\r\n history.push('/');\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n (this.props.hasAcceptedTerms || this.state.hasAcceptedTerms) ? : null\r\n\r\n );\r\n }\r\n }\r\n\r\n AcceptTerms.propTypes = {\r\n hasAcceptedTerms: PropTypes.bool.isRequired,\r\n }\r\n\r\n AcceptTerms.defaultProps = defaultProps;\r\n\r\n function mapStateToProps(state) {\r\n return {\r\n hasAcceptedTerms: state.auth.hasAcceptedTerms\r\n };\r\n }\r\n\r\n return connect(\r\n mapStateToProps\r\n )(AcceptTerms);\r\n}","import React from 'react'\r\n\r\nconst data = {\r\n 'options': {\r\n 'company_name': \"New Member Plan Comparison Calculator\",\r\n 'app_name': \"New Member Plan Comparison Calculator\",\r\n 'geolocationMessage':
\r\n

We See You're Outside of the United States

\r\n
\r\n This estimator can only be used from within the United States. However, we can still help.
\r\n Call us at XXX.XXX.XXXX for phone support.\r\n
\r\n
,\r\n 'geoLocationErrorOne':
\r\n

We Have Encountered an Issue

\r\n
\r\n This estimator requres user location. Please allow user location, and refresh this estimator. However, we can still help.
\r\n Call us at XXX.XXX.XXXX for phone support.\r\n
\r\n
,\r\n 'geoLocationOther':
\r\n

We Have Encountered an Issue

\r\n
\r\n However, we can still help.
\r\n Call us at XXX.XXX.XXXX for phone support.\r\n
\r\n
\r\n },\r\n 'terms': {\r\n 'title':

New Member Plan Comparison Calculator

,\r\n 'text':
\r\n

As a new SERS member, you are automatically enrolled in the Hybrid Plan A-5 class of service. You have 45 days to choose to stay in your current plan or to switch to one of two other options: either the Hybrid Plan A-6 class of service or the straight Defined Contribution Plan. This calculator will produce estimates of retirement benefits calculated for all three plans based on the retirement date you enter and if you defer retirement until reaching age 67. It will also estimate the annual contributions you and your employer will make toward your retirement benefit based on the salary you enter. Your pension contribution estimate will not; however, reflect any shared-risk/shared-gain contribution increases or decreases.

\r\n

\r\n Exceptions: If you contributed to a SERS pension in the past or you were hired into certain hazardous duty law enforcement or security positions, this calculator is not for you. Contact a SERS Retirement Counselor at ra-SERSretc@pa.gov or 1.800.633.5461 for more information about your plan options.\r\n

\r\n

Please agree to the following Terms & Conditions to proceed.

\r\n
,\r\n 'cookie_notice':
\r\n Korn Ferry takes your privacy and security seriously. Our Global Privacy Policy has changed; please view it here. Korn Ferry uses cookies to provide you with the best experience with the site. By closing this banner, scrolling this page, clicking a link or continuing to browse, you agree to the use of cookies. See our Cookie Policy to learn more.\r\n
,\r\n 'terms':
\r\n {/*
Terms & Conditions of Use
\r\n

Welcome to the State Employees' Benefits Plan Calculator for New Hires website, operated by Korn Ferry (“Korn Ferry” “we,” or “our”) and located at https://www.sersbenefitestimatecalculator.com (the “Site”). The Site is provided as a service to our customers. The following terms and conditions (“Terms”) govern your use of this Site. By accessing, viewing, or using the content, material, or services available on or through this Site, you indicate that you have read and understand these Terms, that you agree to them and intend to be legally bound by them. If you do not agree to these Terms, or if you are under 18 years of age, you are not granted permission to use this Site and must exit immediately.

\r\n
    \r\n
  1. Registration. In order to access certain content, services, products, or benefits on the Site, you may be asked to register and create an account. As part of the registration process, you may be asked to click to agree to these Terms, and may then be asked to select or submit a user name and password. You are fully responsible for your account, including use of the account by any third party, and maintaining the confidentiality of your password. You may also be required to provide Korn Ferry with certain information about yourself including some types of personally identifiable information, including your phone number, address, email address, gender, and age. Any personal information that you provide to Korn Ferry via the Site is subject to our Privacy Policy, which is incorporated into these Terms by reference as if set forth fully herein.
  2. \r\n
  3. Proprietary Rights. As between you and Korn Ferry, Korn Ferry owns or licenses all materials, including images, illustrations, designs, icons, photographs, video clips, and any software concepts and documentation and other material on, in or made available through the Site (“Site Contents”), as well as the selection, coordination, arrangement, and organization and enhancement of the Site Contents. All Site Contents are protected pursuant to copyright, trademark, patent and other applicable laws. You agree not to remove or alter any copyright notice or any other proprietary notice on any Site Contents. As between any user and Korn Ferry, all names, trademarks, service marks, certification marks, symbols, slogans or logos appearing on the Site are proprietary to Korn Ferry or its affiliates, licensors, or suppliers. Use or misuse of these trademarks is expressly prohibited and may violate federal and state trademark law. Under no circumstances will you have any rights of any kind in or to the Site Contents, other than the right to use the Site Contents in accordance with these Terms.
  4. \r\n
  5. Use of This Site. The Site and the Site Contents are intended solely for personal, information, and non-commercial use. You agree that you will not use the Site for: (a) any illegal or unauthorized purposes that violate any local, national, or international laws (including but not limited to import, export, copyright, and trademark laws); (b) modifying, copying, distributing, displaying, performing, reproducing, publishing, licensing, creating derivative works from, transferring, selling any of the Site Contents, unless otherwise authorized by these Terms or in a separate written agreement with Korn Ferry; (c) attempting to gain unauthorized access to Korn Ferry’s computer system or engaging in any activity that interferes with the performance of, or impairs the functionality of the Site or any services provided through the Site; (d) any resale or commercial use of the Site; (e) any downloading or copying of the Site Contents for any reason, or any use of data mining, robots or similar data gathering and extraction tools; (f) using the Site to access or collect any personally identifiable information, including any names, email addresses or other such information for any purpose, including, without limitation, commercial purposes; or (g) removing, circumventing, disabling, damaging or otherwise interfering in any way with any security-related features of the Site aimed at preventing or restricting the unauthorized use of the Site or any of the Site Contents. You may use the Site and the Site Contents only as consistent with these Terms. Any other use of the Site or Site Contents, including but not limited to the aforementioned unauthorized uses, without prior written permission of Korn Ferry is strictly prohibited. You acknowledge and agree that the unauthorized use of the Site or the Site Contents could cause irreparable harm to Korn Ferry and that in the event of such unauthorized use, Korn Ferry shall be entitled to an injunction in addition to any other remedies available at law or in equity.
  6. \r\n
  7. User Comments, Feedback, and Other Submissions. Certain features of the Site and services may allow you to contribute other materials and information for access, use, viewing and commentary by other users to the Site or feedback to us (collectively, “Comments”). By posting or submitting Comments, you represent that you have the full legal right to provide the Comments and that use of the Comments by us and all other persons and entities will not: (a) infringe any intellectual property rights of any person or entity or any rights of publicity, personality, or privacy of any person or entity, including as a result of your failure to obtain consent to post personally identifying or otherwise private information about a person; (b) violate any law, statute, ordinance, regulation, or agreement; or (c) constitute disclosure of any confidential information owned by any third party. Upon your submission of any Comments or other material or information to Korn Ferry, you grant Korn Ferry a worldwide, perpetual, irrevocable, transferable, license to access, use, distribute, reproduce, display, modify, create derivative works based upon, and sublicense, the Comments, all without any compensation to you whatsoever. You further grant Korn Ferry the right to attribute the Comments to you through the inclusion of your first name and first initial of last name (or similar identifier) and/or town/city of residence. For avoidance of doubt, Korn Ferry shall be under no obligation (1) to maintain any Comments in confidence; (2) to pay you any compensation for any Comments; or (3) to respond to any user Comments. If you believe that any content or postings on the Site violate your intellectual property or other rights, please follow our Complaint Procedure in Section 7 of these Terms.
  8. \r\n
  9. Complaint Procedures. If you believe that any content or postings on this Site violates your intellectual property or other rights, please notify Korn Ferry through the Contact Customer Service form with a comprehensive detailed message setting forth the following information: (a) your name and the name of your company, if any; (b) your contact information, including your email address; (c) the nature and substance of your complaint, the specific rights at issue, and your basis for making the complaint, including the content or posting that is objectionable; and (d) the following statement: “The statements, representations, and assertions made in this message are true, complete, and accurate and I have the full legal authority to make each and every such statement, representation, and assertion and to make and be granted any demand made in this message.”
  10. \r\n
  11. Third Party Websites and Features. The Site may contain links to other websites for the convenience of users in locating information, products, or services that may be of interest. Links to other websites, including those of Korn Ferry’s affiliates or vendors, do not constitute sponsorship, endorsement, or approval by Korn Ferry of the content, policies, or practices of such linked sites. The Site may also incorporate features and services provided by third parties, such as payment processing. Linked sites and incorporated features and services are not operated, controlled, or maintained by Korn Ferry and it is not responsible for the availability, content, security, policies, or practices of linked sites, including without limitation privacy policies and practices. Links to other sites are provided for your convenience only, and you access them at your own risk.
  12. \r\n
  13. Changes in Terms and Termination. Korn Ferry shall have the right at any time and without prior notice, at its sole discretion, to revise these Terms or to impose new terms and conditions with respect to access to or use of this Site. Such revisions and additions shall be effective immediately upon notice thereof, which may be given by any means, including but not limited to posting the revised or additional terms and conditions on this Site. You are responsible for reviewing this Site periodically for any modification to these Terms that may affect your rights or obligations hereunder. You agree that you shall be deemed to be apprised of and bound by any modification by Korn Ferry to these Terms. ANY ACCESS OR USE OF THIS SITE BY YOU AFTER NOTICE OF REVISIONS OR ADDITIONS TO THESE TERMS SHALL CONSTITUTE AND BE DEEMED TO BE YOUR AGREEMENT TO SUCH REVISIONS OR ADDITIONS. No modification to these Terms by any party other than Korn Ferry shall be valid or enforceable against Korn Ferry unless expressly agreed to in writing signed by a duly authorized officer of Korn Ferry. Korn Ferry may suspend or terminate your account and/or your ability to use the Site, or any services on the Site, for failure to comply with these Terms, for providing Korn Ferry with untrue or inaccurate information about yourself, for infringement upon Korn Ferry proprietary rights, or for any reason whatsoever or for no reason.
  14. \r\n
  15. Disclaimer as to the Site. Korn Ferry, its subsidiaries, and affiliates, are not responsible for and do not guarantee the accuracy or completeness of any Site Contents, Comments, data, links, advertisements or other items contained within the Site. Korn Ferry reserves the right to immediately remove any Site Contents or Comments for any reason, or for no reason. Korn Ferry cannot and does not review all communications, products, or services made available on or through the Site, but, although not obligated to, may review, verify, make changes to or remove any Comments, Site Contents, or the Site, including information submitted in connection with the Site Contents or other features at any time, with or without notice in its sole discretion. You agree that you must evaluate and bear all risks associated with the use of Site Contents or Comments and that you may not rely on such Site Contents or Comments. THE SITE, THE SITE CONTENTS, COMMENTS, INFORMATION AND OTHER MATERIALS ON, IN AND MADE AVAILABLE THROUGH THE SITE ARE MADE AVAILABLE “AS IS” AND “WITH ALL FAULTS.” USE OF THE SITE IS ENTIRELY AT YOUR OWN RISK. KORN FERRY AND ITS LICENSORS MAKE NO REPRESENTATIONS OR WARRANTIES, AND DISCLAIM ALL REPRESENTATIONS AND WARRANTIES, WITH RESPECT TO THE SITE, THE COMMENTS, THE SITE CONTENTS, DATA AND OTHER MATERIALS ON, IN AND MADE AVAILABLE THROUGH THE SITE, EXPRESS OR IMPLIED, WRITTEN OR ORAL, ARISING FROM COURSE OF DEALING, COURSE OF PERFORMANCE, USAGE OF TRADE, OR OTHERWISE, INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, ACCURACY, SYSTEMS INTEGRATION, NON-INTERFERENCE, QUALITY, TITLE, AND NON-INFRINGEMENT. THE ENTIRE RISK AS TO SATISFACTORY QUALITY, PERFORMANCE, ACCURACY, COMPLETENESS AND EFFORT WITH REGARD TO ANY AND ALL COMMENTS, THE SITE, THE SITE CONTENTS, SERVICES, PRODUCTS, DATA AND OTHER MATERIALS ON, IN AND MADE AVAILABLE THROUGH THE SITE, IS WITH YOU.
  16. \r\n
  17. Limitation of Liability as to the Site. KORN FERRY AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, CONSEQUENTIAL, EXEMPLARY, EXTRA-CONTRACTUAL, OR PUNITIVE DAMAGES OF ANY KIND WHATSOEVER, INCLUDING LOST REVENUES, LOSS OF EMPLOYMENT, OR LOST PROFITS, WHICH MAY OR DOES RESULT FROM THE USE OF, ACCESS TO, OR INABILITY TO USE THE SITE, THE COMMENTS, THE SITE CONTENTS, SERVICES, DATA AND OTHER MATERIALS ON, IN AND MADE AVAILABLE THROUGH THE SITE, REGARDLESS OF LEGAL THEORY, WHETHER OR NOT YOU OR KORN FERRY HAD BEEN ADVISED OF THE POSSIBILITY OR PROBABILITY OF SUCH DAMAGES, AND EVEN IF THE REMEDIES OTHERWISE AVAILABLE FAIL OF THEIR ESSENTIAL PURPOSE. UNDER NO CIRCUMSTANCES WILL THE TOTAL LIABILITY OF KORN FERRY AND ITS LICENSORS TO YOU OR ANY OTHER PERSON OR ENTITY IN CONNECTION WITH, BASED UPON, OR ARISING FROM THE SITE, COMMENTS, THE SITE CONTENTS ON, IN AND MADE AVAILABLE THROUGH THE SITE, OR THE SERVICES, PRODUCTS, DATA OR OTHER MATERIALS OFFERED IN CONNECTION THEREWITH EXCEED THE PRICE PAID BY YOU DURING THE PRECEDING YEAR FOR USE OF THE SITE. SOME STATES DO NOT ALLOW THE LIMITATION OR EXCLUSION OF LIABILITY FOR INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THE ABOVE LIMITATION OR EXCLUSION MAY NOT APPLY TO YOU. IF ANY PART OF THIS LIMITATION ON LIABILITY IS FOUND TO BE INVALID OR UNENFORCEABLE FOR ANY REASON, THEN THE TOTAL LIABILITY OF KORN FERRY AND ITS LICENSORS SHALL NOT EXCEED TEN DOLLARS ($10). IF YOU ARE DISSATISFIED WITH THE SITE OR WITH ANY OF THESE TERMS, OR FEEL KORN FERRY HAS BREACHED THESE TERMS, YOUR SOLE AND EXCLUSIVE REMEDY IS TO DISCONTINUE USING THE SITE.
  18. \r\n
  19. Disclaimer and Limitation of Liability as to Products and Services. The information on this Site is for informational purposes only and does not guarantee employment, promotion, or other compensation. Many products are packaged with the manufacturer's warranty and service information detailing specific terms and conditions. Manufacturers’ warranties may vary from product to product. PRODUCTS AND SERVICES SOLD BY KORN FERRY ARE SUBJECT TO ANY APPLICABLE WARRANTIES AND REPRESENTATIONS OF THEIR RESPECTIVE MANUFACTURERS. ACCORDINGLY, KORN FERRY MAKES NO REPRESENTATION OR WARRANTY WITH RESPECT TO ANY PRODUCT OR SERVICE SOLD. EXCEPT AS EXPRESSLY STATED HEREIN, KORN FERRY EXPRESSLY DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, OF ANY KIND WITH RESPECT TO PRODUCTS AND SERVICES SOLD ON THE SITE, INCLUDING BUT NOT LIMITED TO IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. PLEASE NOTE THAT SOME JURISDICTIONS MAY NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SOME OF THE ABOVE EXCLUSIONS MAY NOT APPLY TO YOU. CHECK YOUR LOCAL LAWS FOR ANY RESTRICTIONS OR LIMITATIONS REGARDING THE EXCLUSION OF IMPLIED WARRANTIES. UNDER NO CIRCUMSTANCES SHALL KORN FERRY, ITS SUPPLIERS OR THEIR RESPECTIVE DIRECTORS, OFFICERS, EMPLOYEES OR AGENTS BE LIABLE TO YOU OR TO ANY THIRD PARTY FOR ANY INDIRECT, CONSEQUENTIAL, INCIDENTAL, SPECIAL, OR PUNITIVE DAMAGES, INCLUDING BUT NOT LIMITED TO LOST PROFITS AND BUSINESS INTERRUPTION, WHETHER IN CONTRACT OR IN TORT, INCLUDING NEGLIGENCE, ARISING IN ANY WAY FROM ANY PRODUCT OR SERVICE SOLD OR PROVIDED ON THE SITE, EVEN IF IT HAS BEEN EXPRESSLY ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. IN NO EVENT SHALL KORN FERRY LIABILITY EXCEED THE PRICE YOU PAID FOR THE PRODUCT OR SERVICE THAT IS THE SUBJECT OF THE CLAIM. SOME STATES DO NOT ALLOW THE LIMITATION OR EXCLUSION OF LIABILITY FOR INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THE ABOVE LIMITATION OR EXCLUSION MAY NOT APPLY TO YOU. IF ANY PART OF THIS LIMITATION ON LIABILITY IS FOUND TO BE INVALID OR UNENFORCEABLE FOR ANY REASON, THEN THE TOTAL LIABILITY OF KORN FERRY AND ITS LICENSORS SHALL NOT EXCEED TEN DOLLARS ($10).
  20. \r\n
  21. Indemnification. You agree to defend, indemnify, and hold harmless Korn Ferry, its vendors, owners, affiliates, related entities and their respective directors, officers, employees, and agents from and against all claims, losses, damages, liabilities, and costs (including but not limited to reasonable attorneys' fees and expert fees), arising out of or relating to your use of the Site, the Site Contents or any services, product or data obtained through the Site, your fraud, violation of law, negligence, willful misconduct, or any other use of the Site, the Comments, the Site Contents, the services, products, information and other materials on, in and made available through the Site, except to the extent attributable to Korn Ferry, or any breach by you of these Terms. You may not settle any Claim without the prior written consent of Korn Ferry. Korn Ferry or its licensors may assume the defense of any Claim, at your sole cost and expense, and you shall cooperate in all reasonable respects in such defense. You shall have the right to employ separate counsel in any Claim and to participate in the defense thereof. If Korn Ferry or its licensors do not notify you that it elects to undertake the defense thereof, you shall have the right to defend the Claim with counsel reasonably acceptable to Korn Ferry, subject to the right of Korn Ferry to assume, at their sole cost and expense, the defense of any Claim at any time prior to the settlement or final determination thereof.
  22. \r\n
  23. Internet Security. Korn Ferry uses reasonable efforts to ensure that the Site is generally available. However, there will be occasions when access to the Site will be interrupted or unavailable. Korn Ferry will use reasonable efforts to minimize such disruption where it is within its reasonable control. You agree that Korn Ferry shall not be liable to you for any modification, suspension or discontinuance of the Site. You understand that the technical processing and transmission of any Site content may be transferred unencrypted and involve (a) transmissions over various networks; and (b) changes to conform and adapt to technical requirements of connecting networks or devices. Please be advised that we do not guarantee that any information sent from our Site will be secure during transmission, nor can we guarantee the confidentiality of any communication or material transmitted to Korn Ferry via the Site or the Internet, including, for example, personal information such as your name or address.
  24. \r\n
  25. Applicable Law. These Terms will be governed by and construed in accordance with the laws of the State of California, without reference to its conflict of law rules. By accessing, viewing, or using the services, works, content, or materials on the Site, you consent and agree to (a) the exclusive jurisdiction of the federal and state courts located in the city of Los Angeles, California; (b) accept service of process by personal delivery or mail; and (c) irrevocably waive the right to trial by jury and any jurisdictional and venue defenses otherwise available. If any provision of these Terms shall be deemed unlawful, invalid or unenforceable for any reason, then that provision(s) shall be deemed severable from the Terms, and shall not affect the validity or enforceability of the remaining provisions.
  26. \r\n
  27. Entire Agreement. These Terms constitute the entire agreement of the parties with respect to the subject matter hereof, and supersede all previous written or oral agreements between the parties with respect to such subject matter. No waiver by Korn Ferry of any breach or default hereunder shall be deemed to be a waiver of any preceding or subsequent breach or default. The headings and captions in these Terms are intended for convenience only and shall in no way affect the interpretation of the Terms. Notwithstanding the foregoing, these Terms and the information provided in this Site in no way override the terms and conditions of your purchase of any product or service, except as specifically provided herein. To the extent any area within this Site contains SPECIFIC TERMS AND CONDITIONS concerning use of that particular area of the Site (\"Specific Terms\"), those Specific Terms are in addition to these Terms. To the extent there is a direct conflict between these Terms and the Specific Terms, the Specific Terms shall prevail.
  28. \r\n
  29. Acts Beyond Control. Korn Ferry shall not be liable for any nonperformance or delay in performance caused by any act beyond its reasonable control, including but not limited to acts or omissions of third parties, unavailability of supplies, equipment failure, war, strikes, lock-outs, fire, flood, or any other Act of God, any law, regulation, ordinance, or other act or order of any court, government, or governmental agency, or delays, unavailability, errors, or other failures of the Internet or other data networks.
  30. \r\n
  31. Miscellaneous. The Site is controlled and operated from within the United States. Without limiting anything else, Korn Ferry makes no representation that the Site, Site Contents, Comments, services, products, information or other materials available on, in, or through the Site is appropriate or available for use in other locations, and access to them from territories where they are illegal is prohibited. Those who choose to access the Site from other locations do so on their own volition and are responsible for compliance with applicable laws. The waiver or failure of Korn Ferry to exercise in any respect any right provided hereunder shall not be deemed a waiver of such right in the future or a waiver of any of other rights established under these Terms. Headings used in these Terms are for reference only and shall not affect the interpretation of these Terms. No person or entity not party to this agreement will be deemed to be a third party beneficiary of these Terms or any provision hereof. When used herein, the words “includes” and “including” and their syntactical variations shall be deemed followed by the words “without limitation.”
  32. \r\n
\r\n


Dated: December 7, 2018

*/}\r\n
Terms & Conditions of Use
\r\n
Waivers and Disclaimers
\r\n

This plan comparison calculator and all data, software, tools and developed works relating thereto (collectively referred to herein as the “Plan Comparison Calculator”), is intended to provide general information and estimated retirement benefit amounts to the members of the Commonwealth of Pennsylvania State Employees’ Retirement System (“SERS”). The Plan Comparison Calculator is provided only for the personal, informational and non-commercial use of SERS members, and is not intended and should not be considered to be a substitute for individual retirement counseling. The Plan Comparison Calculator should not be construed as a recommendation by SERS, or as general legal, tax, investment, business or accounting advice. The Plan Comparison Calculator shall not be used for any unauthorized, improper or illegal purposes that violate any local, national, or international laws including but not limited to import, export, copyright, and trademark laws.

\r\n

The Plan Comparison Calculator contains and uses information that is subject to change and is not intended to be complete or to constitute all the information necessary to evaluate retirement options. Estimates, projections, and other “forward-looking” information relating to the Plan Comparison Calculator are based on assumptions which may differ materially from actual events or conditions. Such forward-looking information illustrates hypothetical results relating to certain assumptions. Actual retirement benefits may be different from the information obtained through the Plan Comparison Calculator, and variations may be material.

\r\n

Any party who accesses, views, or uses the content, material, or services available on or through the Plan Comparison Calculator understands and acknowledges that the Plan Comparison Calculator (i) uses the age of 67 as the superannuation age, (ii) employs actuarial reduction factors to determine “early retirement” benefits, (iii) disregards the disability annuity potential for Class A-5 or Class A-6 members; (iv) recognizes no variation in the (a) employee contributions to the Defined Contribution Plan and Defined Benefit Plan under “shared-risk” or “shared-gain”, (b) actuarial tables used to calculate benefit equivalences, (c) present values, or (d) law or benefit formulas; (v) acknowledges continual, constant, and consistent salary growth and investment returns, and (vi) calculates a rate of return that does not factor for final determination of fees and expenses.

\r\n
Intellectual Property Rights
\r\n

SERS owns all materials, including images, illustrations, designs, icons, photographs, video clips, and any software concepts and documentation and other material on, in or made available through the Plan Comparison Calculator, as well as the selection, coordination, arrangement, and organization and enhancement thereto. The Plan Comparison Calculator is protected pursuant to copyright, trademark, patent and other applicable laws.

\r\n

By clicking the \"I Accept the Terms & Conditions\" button, accessing, viewing, or using the content, material, or services available on or through the Plan Comparison Calculator, you confirm that you have read and understand these terms and conditions in their entirety, you agree to them and intend to be legally bound by them. If you do not agree to these terms and conditions, you are not granted permission to use the Plan Comparison Calculator and must exit immediately.

\r\n

If you accept the above terms and conditions, please click \"I Accept the Terms & Conditions”

\r\n\r\n\r\n
\r\n },\r\n 'screens': [\r\n { //PARTICIPANT DATA\r\n 'name': 'participant-data',\r\n 'title': 'Enter Data',\r\n 'text':
\r\n {/*

Welcome to the State Employees' Retirement System Online Plan Comparison Calculator.\r\n
To assist you with your retirement plan benefit election, please enter the following data:

\r\n

Required Fields are indicated by an asterisk *

*/}\r\n

Welcome to the State Employees' Retirement System New Member Plan Comparison Calculator.\r\n
To assist you with your retirement plan election, please enter the following data:

\r\n

Required Fields are indicated by an asterisk *

\r\n
,\r\n 'layout': 'two-column',\r\n 'sections': [\r\n {\r\n 'title': 'Personal Information',\r\n 'fields': [\r\n {\r\n 'name': 'birthdate',\r\n 'label': 'Date of Birth',\r\n 'required': true,\r\n 'type': 'datepicker',\r\n 'calendarClassName': \"korn-ferry\",\r\n 'placeholderText': \"Click to select a date\",\r\n 'minDate': new Date(\"1940-01-01\"),\r\n 'maxDate': new Date(\"2004-01-01\"),\r\n 'showMonthDropdown': true,\r\n 'showYearDropdown': true,\r\n 'scrollableYearDropdown': true,\r\n 'yearDropdownItemNumber': 64,\r\n 'defaultVal': new Date(\"1984-07-02\")\r\n },\r\n {\r\n 'name': 'hire_date',\r\n 'label': 'Date of Hire',\r\n 'required': true,\r\n 'type': 'datepicker',\r\n 'calendarClassName': \"korn-ferry\",\r\n 'placeholderText': \"Click to select a date\",\r\n 'showMonthDropdown': true,\r\n 'showYearDropdown': true,\r\n 'scrollableYearDropdown': true,\r\n 'yearDropdownItemNumber': 64,\r\n 'defaultVal': new Date(\"2020-04-02\")\r\n },\r\n ]\r\n\r\n },\r\n {\r\n 'title': ' ‍ ',\r\n 'fields': [\r\n {\r\n 'name': 'date_of_retirement',\r\n 'label': 'Expected Retirement Date',\r\n 'required': true,\r\n 'type': 'datepicker',\r\n 'calendarClassName': \"korn-ferry\",\r\n 'placeholderText': \"Click to select a date\",\r\n 'minDate': new Date(),\r\n 'showMonthDropdown': true,\r\n 'showYearDropdown': true,\r\n 'scrollableYearDropdown': true,\r\n 'yearDropdownItemNumber': 64,\r\n 'defaultVal': new Date(\"2046-01-02\")\r\n },\r\n {\r\n 'name': 'current_annual_salary',\r\n 'label': 'Current Annual Salary',\r\n 'required': true,\r\n 'type': 'monetary',\r\n 'defaultVal': '62,000'\r\n },\r\n ]\r\n },\r\n\r\n {\r\n 'title': 'Assumptions',\r\n 'text':

In this section, you will estimate in percentages what you believe the growth in your salary will be and what you believe your investments will earn. In the first box enter your Expected Annual Salary Growth percentage, which is the average percentage pay increase you expect between now and retirement. If you don’t want to assume any growth in salary, enter 0. In the second box, please enter the Annual Investment Growth percentage that you expect your investment account to earn each year. For example, if you plan to invest in a mix of asset classes that you believe will earn 5% interest each year, then put the number 5 in that box.

,\r\n 'style': 'full-width padding-top',\r\n },\r\n\r\n {\r\n // 'title': ' ‍ ',\r\n 'style': 'two-column',\r\n 'fields': [\r\n {\r\n 'name': 'ann_salary_growth',\r\n 'label': 'Expected Annual Salary Growth',\r\n 'required': true,\r\n 'type': 'percentage',\r\n 'minVal': 0,\r\n 'maxVal': 5,\r\n 'defaultVal': '5'\r\n },\r\n ]\r\n },\r\n\r\n {\r\n // 'title': ' ‍ ',\r\n 'style': 'two-column',\r\n 'fields': [\r\n {\r\n 'name': 'ann_investment_growth',\r\n 'label': 'Expected Annual Investment Growth',\r\n 'required': true,\r\n 'type': 'percentage',\r\n 'minVal': 0,\r\n 'maxVal': 8,\r\n 'defaultVal': '8'\r\n },\r\n ]\r\n },\r\n\r\n\r\n ]\r\n\r\n },\r\n {\r\n 'name': 'review-information',\r\n 'title': 'Review Data',\r\n 'text':

Please make sure the information shown below matches what you entered during the prior step.

,\r\n 'layout': 'two-column no-divider',\r\n 'sections': [\r\n {\r\n 'fields': [\r\n {\r\n 'name': 'birthdate',\r\n 'label': 'Date of Birth',\r\n 'type': 'review'\r\n },\r\n {\r\n 'name': 'hire_date',\r\n 'label': 'Date of Hire',\r\n 'type': 'review'\r\n },\r\n {\r\n 'name': 'date_of_retirement',\r\n 'label': 'Expected Retirement Date',\r\n 'type': 'review'\r\n },\r\n {\r\n 'name': 'current_annual_salary',\r\n 'label': 'Current Annual Salary',\r\n 'type': 'review'\r\n },\r\n\r\n ]\r\n },\r\n {\r\n 'fields': [\r\n {\r\n 'name': 'ann_salary_growth',\r\n 'label':

Expected Annual
Salary Growth

,\r\n 'type': 'review'\r\n },\r\n {\r\n 'name': 'ann_investment_growth',\r\n 'label':

Expected Annual
Investment Growth

,\r\n 'type': 'review'\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n 'name': 'results',\r\n 'statusBarTitle': 'Results',\r\n 'title': 'Results',\r\n 'className': 'no-print',\r\n 'text': * Please note, if you leave this page this information may be lost,\r\n 'layout': 'results',\r\n 'sections': [\r\n {\r\n 'title': 'Member Results',\r\n 'className': 'print-page-break',\r\n 'text':\r\n
\r\n

The following estimates assume that you continue to work for a SERS-participating employer, and therefore continue to contribute toward your SERS retirement benefit, until you retire. If you entered a retirement date that is before you reach age 67 (the SERS normal retirement age for the pension plan portion of the Hybrid Plan options) you will see two different sets of estimates: one as of the retirement date you entered and one as if you defer retirement until age 67. Early retirement penalties, some of which severely reduce the monthly pension amounts, are reflected in the pension estimates.

\r\n
\r\n

\r\n Eligibility Note: To be eligible for the contributions that your employer made toward your investment account, and any gains on those contributions, you must work three years. To be eligible for monthly pension payments, you must either work 10 years or reach age 67 after working three years.\r\n

\r\n
\r\n
,\r\n 'fields': [\r\n {\r\n 'name': 'firstYear',\r\n 'label': 'Contributions Toward Your Benefit',\r\n 'subLabel': 'You and your employer contribute a percentage of your pay toward your retirement benefit each payday. Contribution estimates are based on your current salary as entered in the calculator: SALARY',\r\n 'type': 'memberResultsTable',\r\n 'data': 'firstYear',\r\n },\r\n {\r\n 'name': 'dateOfRetirementEstimates',\r\n 'label': 'Estimates - As of DATEISHERE Retirement Date',\r\n 'subLabel': 'Using the expected annual salary growth assumption you chose, the projected 5-year average of your salary at retirement, which is used when calculating your pension, is SALARY.',\r\n 'type': 'memberResultsTable',\r\n 'data': 'dateOfRetirementEstimates'\r\n },\r\n {\r\n 'name': 'defferedToAge67Estimates',\r\n 'label': 'Estimates – If you terminate employment on DATEISHERE but don’t apply for your retirement benefits until age 67',\r\n 'type': 'memberResultsTable',\r\n 'data': 'defferedToAge67Estimates',\r\n\r\n },\r\n ]\r\n },\r\n {\r\n 'title': 'Entered Data',\r\n 'text':

This calculator and the estimates produced are for informational purposes only and are dependent on the data you entered. The data you entered has not been reviewed or verified so the calculations may not be construed as official SERS estimates

,\r\n 'fields': [\r\n {\r\n 'name': 'birthdate',\r\n 'label': 'Date of Birth',\r\n 'type': 'review'\r\n },\r\n {\r\n 'name': 'hire_date',\r\n 'label': 'Date of Hire',\r\n 'type': 'review'\r\n },\r\n {\r\n 'name': 'date_of_retirement',\r\n 'label': 'Date of Retirement',\r\n 'type': 'review'\r\n },\r\n {\r\n 'name': 'current_annual_salary',\r\n 'label': 'Current Salary',\r\n 'type': 'review'\r\n },\r\n {\r\n 'name': 'ann_salary_growth',\r\n 'label': 'Expected Annual Salary Growth',\r\n 'type': 'review'\r\n },\r\n {\r\n 'name': 'ann_investment_growth',\r\n 'label': 'Expected Annual Investment Growth',\r\n 'type': 'review'\r\n }\r\n ]\r\n },\r\n ]\r\n }\r\n ]\r\n}\r\n\r\nexport default data;","import React from 'react';\r\nimport { bindActionCreators } from 'redux'\r\nimport { connect } from 'react-redux';\r\n\r\n// import PropTypes from 'prop-types';\r\nimport { history } from '../store';\r\n\r\nimport data from '../data/data';\r\n\r\n// Reducers\r\nimport {\r\n changeValidation,\r\n} from '../reducers/validation'\r\n\r\nexport function validateLastScreen(ComposedComponent, defaultProps) {\r\n class Validation extends React.Component {\r\n componentDidMount() {\r\n const { lastScreens, changeValidation, currentData } = this.props;\r\n\r\n if (lastScreens.length) for (let ls in lastScreens) {\r\n let lastScreen = lastScreens[ls]\r\n\r\n if (lastScreen.hasOwnProperty('name')) {\r\n let errors = []\r\n\r\n if (lastScreen.hasOwnProperty('sections')) lastScreen.sections.forEach((s) => {\r\n if (s.hasOwnProperty('fields')) s.fields.forEach((f) => {\r\n if (!!f.required) {\r\n if (!!!currentData[f.name] || !!!currentData[f.name].value) {\r\n errors.push(f.name)\r\n } else {\r\n switch (f.type) {\r\n case 'years-of-service-chart':\r\n if (!!!currentData[f.name].value.total) errors.push(f.name)\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n })\r\n })\r\n\r\n changeValidation({\r\n [lastScreen.name]: errors\r\n })\r\n\r\n if (errors.length) {\r\n history.push('/' + lastScreen.name)\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n componentDidCatch(error, info) {\r\n console.log(error, info);\r\n }\r\n\r\n render() {\r\n return (\r\n this.props.isValid ? : null\r\n );\r\n }\r\n }\r\n\r\n Validation.defaultProps = defaultProps;\r\n\r\n function mapStateToProps(state, props) {\r\n const { name } = defaultProps;\r\n const { validation } = state;\r\n let currentScreen = {}\r\n let lastScreens = []\r\n let isValid = true\r\n\r\n for (let s in data.screens) {\r\n let screen = data.screens[s]\r\n if (screen.name === name) {\r\n currentScreen = screen;\r\n break\r\n }\r\n lastScreens.push(screen)\r\n if (!!!validation[screen.name]) {\r\n isValid = false\r\n }\r\n }\r\n\r\n return {\r\n isValid,\r\n lastScreens,\r\n currentScreen,\r\n currentData: state.data.fields\r\n };\r\n }\r\n\r\n const mapDispatchToProps = dispatch => bindActionCreators({\r\n changeValidation\r\n }, dispatch)\r\n\r\n return connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n )(Validation);\r\n}","import React from 'react'\r\nimport { bindActionCreators } from 'redux'\r\nimport { connect } from 'react-redux'\r\n\r\nimport data from '../data/data'\r\n\r\nclass StatusBar extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.handleClick = this.handleClick.bind(this);\r\n }\r\n handleClick(e,name) {\r\n \te.preventDefault();\r\n \tthis.props.history.push( '/'+name );\r\n }\r\n render() {\r\n \tconst { currentNav } = this.props\r\n\t\tconst screens = data.screens\r\n\t\tlet buttons = []\r\n\t\tlet navSet = false;\r\n let currentStep = 0;\r\n\r\n\t\tscreens.forEach( (screen,key) => {\r\n\t\t\tlet className = navSet ? 'future' : 'past'\r\n\t\t\tif( screen.name === currentNav ) {\r\n\t\t\t\tclassName = 'current'\r\n\t\t\t\tnavSet = true\r\n currentStep = key+1\r\n\t\t\t}\r\n\t\t\tbuttons.push(\r\n\t\t\t\t this.handleClick(e,screen.name)} href=\"/\" className={className}>{navSet?(key+1):}{!!screen.statusBarTitle ? screen.statusBarTitle : screen.title}\r\n\t\t\t)\r\n\t\t})\r\n\r\n return (\r\n
{buttons}
\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n\tcurrentNav: state.nav.currentNav\r\n})\r\n\r\nconst mapDispatchToProps = dispatch => bindActionCreators({\r\n}, dispatch)\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(StatusBar)","import React from 'react'\r\nimport { bindActionCreators } from 'redux'\r\nimport { connect } from 'react-redux'\r\n\r\nimport { history } from '../store';\r\nimport data from '../data/data'\r\n\r\n// Reducers\r\nimport { acceptTerms } from '../reducers/auth'\r\nimport { updateCurrentNav } from '../reducers/nav'\r\n\r\nclass AcceptTerms extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n scrolledTerms: false,\r\n hasAcceptedTerms : (sessionStorage.getItem(\"acceptTerms\")) ? JSON.parse(sessionStorage.getItem(\"acceptTerms\")) : null\r\n }\r\n this.scrollTerms = this.scrollTerms.bind(this);\r\n\r\n }\r\n scrollTerms() {\r\n this.setState({\r\n scrolledTerms: true\r\n })\r\n }\r\n componentDidMount() {\r\n this.props.updateCurrentNav('screen-login')\r\n if(this.state.hasAcceptedTerms === true) {\r\n this.props.acceptTerms(true);\r\n history.push('/' + data.screens[0].name)\r\n }\r\n }\r\n componentDidCatch(error, info) {\r\n console.log(error, info);\r\n }\r\n acceptTerms() {\r\n sessionStorage.setItem(\"acceptTerms\", true);\r\n this.props.acceptTerms(true);\r\n history.push('/' + data.screens[0].name)\r\n }\r\n render() {\r\n return (\r\n
\r\n {data.terms.title}\r\n {data.terms.text}\r\n
\r\n
\r\n {data.terms.terms}\r\n
\r\n
Scroll to read all Terms & Conditions
\r\n
\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n})\r\n\r\nconst mapDispatchToProps = dispatch => bindActionCreators({\r\n acceptTerms,\r\n updateCurrentNav,\r\n}, dispatch)\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(AcceptTerms);","import React from 'react'\r\nimport { bindActionCreators } from 'redux'\r\nimport { connect } from 'react-redux'\r\n\r\nclass InputField extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n selectionStart: 0\r\n }\r\n this.inputField = React.createRef();\r\n this.getSelectionStart = this.getSelectionStart.bind(this);\r\n this.checkMinMax = this.checkMinMax.bind(this);\r\n this.parseValue = this.parseValue.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n }\r\n componentDidMount() {\r\n this.parseValue( this.props.value );\r\n }\r\n componentDidUpdate() {\r\n let { selectionStart } = this.state;\r\n const inputField = this.inputField.current;\r\n const val = inputField.value;\r\n const regex = /,/g\r\n while( regex.exec(val) ){\r\n if( regex.lastIndex <= selectionStart ) {\r\n selectionStart++;\r\n }\r\n }\r\n inputField.setSelectionRange(selectionStart,selectionStart)\r\n }\r\n getSelectionStart() {\r\n const inputField = this.inputField.current;\r\n let selectionStart = inputField.selectionStart;\r\n const val = inputField.value;\r\n const regex = /,/g\r\n while( regex.exec(val) ){\r\n if( regex.lastIndex <= selectionStart ) {\r\n selectionStart--;\r\n }\r\n }\r\n return selectionStart;\r\n }\r\n addCommas( val ){\r\n val += '';\r\n let x = val.split('.');\r\n let x1 = x[0];\r\n let x2 = x.length > 1 ? '.' + x[1] : '';\r\n let rgx = /(\\d+)(\\d{3})/;\r\n while (rgx.test(x1)) {\r\n x1 = x1.replace(rgx, '$1,$2');\r\n }\r\n return x1 + x2;\r\n }\r\n // ensureFloat(val){\r\n // if( val === \"\" ) val = 0;\r\n // return parseFloat(val).toFixed(2);\r\n // }\r\n checkMinMax( val ) {\r\n if( this.props.hasOwnProperty('minVal') ) {\r\n if( val < this.props.minVal ) return this.props.minVal;\r\n }\r\n if( this.props.hasOwnProperty('maxVal') ) {\r\n if( val > this.props.maxVal ) return this.props.maxVal;\r\n }\r\n return val;\r\n }\r\n parseValue( val ) {\r\n val = this.checkMinMax( val )\r\n val += ''\r\n const replacements = {\r\n 'monetary': {\r\n find: /[^0-9]/g,\r\n replace: \"\"\r\n }\r\n }\r\n const formats = {\r\n 'monetary': this.addCommas,\r\n // 'percentage': this.ensureFloat\r\n }\r\n if( !!replacements[this.props.type] ) {\r\n val = val.replace(replacements[this.props.type].find,replacements[this.props.type].replace)\r\n }\r\n if( !!formats[this.props.type] ) {\r\n val = formats[this.props.type](val)\r\n }\r\n this.setState({\r\n selectionStart: this.getSelectionStart()\r\n })\r\n if( typeof val === \"undefined\" || !val || val === \"undefined\" ) val = '' \r\n this.props.onChange( val );\r\n }\r\n handleChange( e ){\r\n const val = e.target.value;\r\n this.parseValue( val );\r\n }\r\n render() {\r\n return (\r\n
\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => ({\r\n value: ownProps.value\r\n})\r\n\r\nconst mapDispatchToProps = (dispatch, ownProps) => bindActionCreators({\r\n}, dispatch)\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(InputField)","import React from 'react'\r\nimport { bindActionCreators } from 'redux'\r\nimport { connect } from 'react-redux'\r\nimport { forIn } from 'lodash'\r\n\r\nclass YearsOfService extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.getNewValue = this.getNewValue.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n }\r\n componentDidMount() {\r\n const { options } = this.props;\r\n let newVal = this.props.value;\r\n\r\n options.forEach( (o,k) => {\r\n if( o.hasOwnProperty('defaultVal') && !newVal.hasOwnProperty(o.value) ) {\r\n newVal = this.getNewValue( o.defaultVal, o.value, newVal );\r\n } else if( !newVal.hasOwnProperty(o.value) ) {\r\n newVal = this.getNewValue( 0, o.value, newVal );\r\n }\r\n })\r\n\r\n this.props.onChange( newVal );\r\n }\r\n getNewValue( val, name, valObj ) {\r\n let newVal = Object.assign({},valObj);\r\n newVal[name] = parseFloat(val);\r\n\r\n let total = 0;\r\n forIn(newVal, (v,k) => {\r\n if( k !== \"total\" ) total += parseFloat(v);\r\n })\r\n newVal.total = total\r\n\r\n return newVal;\r\n }\r\n handleChange( e ){\r\n let val = e.target.value; \r\n let name = e.target.name;\r\n if( !val || val < 0 ) val = 0;\r\n let newVal = this.getNewValue( val, name, this.props.value );\r\n this.props.onChange( newVal );\r\n }\r\n handleFocus( e ) {\r\n e.target.select();\r\n }\r\n render() {\r\n let tableCount = document.body.clientWidth > 756 ? 2 : 1;\r\n let columns = [];\r\n let tables = [];\r\n\r\n for( let t = 0; t < tableCount; t++ ) {\r\n columns[t] = [];\r\n let min = this.props.options.length/tableCount * t;\r\n let max = this.props.options.length/tableCount * (t+1);\r\n this.props.options.forEach( (o,k) => {\r\n if( k >= min && k < max ) {\r\n columns[t].push( o );\r\n }\r\n });\r\n if( t === tableCount-1 ) {\r\n columns[t].push( { 'label' : 'Total', 'value' : 'total' } );\r\n }\r\n }\r\n\r\n columns.forEach( (c,ck) => {\r\n let columnRows = [];\r\n\r\n c.forEach( (r,rk) => {\r\n columnRows.push(\r\n {r.label}\r\n )\r\n })\r\n\r\n tables.push(\r\n { columnRows }
ClassYears of Service
\r\n );\r\n });\r\n\r\n return (\r\n
{tables}
\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => ({})\r\n\r\nconst mapDispatchToProps = (dispatch, ownProps) => bindActionCreators({\r\n}, dispatch)\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(YearsOfService)","import React from 'react'\r\nimport { bindActionCreators } from 'redux'\r\nimport { connect } from 'react-redux'\r\nimport { get } from 'lodash'\r\n\r\nclass ReviewField extends React.Component {\r\n render() {\r\n let fieldValue = this.props.value;\r\n const { fieldType, data } = this.props;\r\n if( typeof data!==\"undefined\" ) {\r\n fieldValue = get( fieldValue, data );\r\n }\r\n switch( fieldType ) {\r\n case 'datepicker' :\r\n // fieldValue = fieldValue.format(\"MM/DD/YYYY\");\r\n const d = new Date(fieldValue)\r\n fieldValue = d.getMonth()+1 + \"/\" + d.getDate() + \"/\" + d.getFullYear(); \r\n break;\r\n case 'monetary' :\r\n fieldValue = '$'+fieldValue;\r\n break;\r\n case 'percentage' :\r\n fieldValue = fieldValue+'%';\r\n break;\r\n default :\r\n break;\r\n }\r\n return (\r\n {fieldValue}\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => ({})\r\n\r\nconst mapDispatchToProps = (dispatch, ownProps) => bindActionCreators({\r\n}, dispatch)\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(ReviewField)","import React from 'react'\r\nimport { bindActionCreators } from 'redux'\r\nimport { connect } from 'react-redux'\r\n\r\n// Reducers\r\nimport {\r\n switchTab,\r\n} from '../../reducers/memberTabs' \r\n\r\nclass MemberResultTabs extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.handleChange = this.handleChange.bind(this);\r\n }\r\n handleChange( e, val ){\r\n e.preventDefault();\r\n this.props.switchTab( val );\r\n }\r\n render() {\r\n console.log(\"this.props\", this.props)\r\n const { options, currentTab, data } = this.props;\r\n let tabs = [];\r\n options.forEach( (val,key) => {\r\n if( val.label === 'or' ) {\r\n if( tabs.length > 1 ) tabs.push(\r\n or\r\n )\r\n } else {\r\n if( data[val.value] !== false ) {\r\n if( val.value || (val.value === '' && tabs.length > 1) ) tabs.push(\r\n this.handleChange( e, val.value )}>{val.label}\r\n )\r\n }\r\n }\r\n })\r\n if( tabs.length === 1 ) {\r\n return null\r\n } else {\r\n return (\r\n
{tabs}
\r\n );\r\n }\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => ({\r\n currentTab: state.memberTabs.tab,\r\n data: state.data.results\r\n})\r\n\r\nconst mapDispatchToProps = (dispatch, ownProps) => bindActionCreators({\r\n switchTab\r\n}, dispatch)\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(MemberResultTabs)","import React from 'react'\nimport ReactTooltip from \"react-tooltip\";\nimport ReactHtmlParser from 'react-html-parser';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\n\nclass MemberResultsTable extends React.Component {\n constructor(props) {\n super(props);\n this.formatData = this.formatData.bind(this);\n }\n addCommas( val ){\n val += '';\n let x = val.split('.');\n let x1 = x[0];\n let x2 = x.length > 1 ? '.' + x[1] : '';\n let rgx = /(\\d+)(\\d{3})/;\n while (rgx.test(x1)) {\n x1 = x1.replace(rgx, '$1,$2');\n }\n return x1 + x2;\n }\n formatData( row, data ) {\n if( !row.hasOwnProperty('data') ) return \"\"\n let val = row.data[data]\n if( typeof val === \"string\" ) return val\n if( row.hasOwnProperty('dollars') && row.dollars ) {\n val = Math.round( val )\n } else {\n val = val.toFixed(2)\n }\n if( val <= 0 ) val = '0.00'\n return \"$\" + this.addCommas( val )\n }\n render() {\n // const { display, label, data, disclaimer, name } = this.props;\n const { display, label, data, disclaimer, name, subLabel } = this.props;\n if( !display || !data ) return null;\n\n // const label2 = Contributions Toward Your Benefit You and your employer contribute a percentage of your pay toward your retirement benefit each payday. Contribution estimates are based on your current salary as entered in the calculator: ${this.props.current_annual_salary.value}\n // let newLabel = name === 'firstYear' ? label2 : data[0].dateofRetirement ? label.replace(\"DATEISHERE\", data[0].dateofRetirement) : label\n\n let rows = [];\n data.forEach( (row,rk) => {\n let style = {\n display: row.span ? \"none\" : \"table-cell\"\n }\n if( !!row.type && row.type.indexOf('extend') > -1 ) {\n rows.push(\n \n {row.label}\n \n );\n } else {\n rows.push(\n \n \n {row.label}\n {(row.sup) ? row.sup : null}\n {\n (row.tooltip) ? (\n <>\n
i
\n \n {row.tooltip}\n \n \n ) : null\n }\n \n { this.formatData( row, 'a5' ) }\n { this.formatData( row, 'a6' ) }\n { this.formatData( row, 'investment' ) }\n \n );\n }\n })\n // console.log(data[0].dateofRetirement)\n return (\n\n
\n {/*
{newLabel}
*/}\n
\n \n {ReactHtmlParser(label.replace(\"DATEISHERE\", data[0].dateofRetirement))}\n \n {(!subLabel) ? null : {ReactHtmlParser(subLabel.replace(\"SALARY\", \"$\"+data[0].annualSalary))}}\n
\n
Swipe table horizontally to view more.
\n { !!disclaimer ?
{disclaimer}
: null }\n
\n \n \n \n \n \n \n \n \n \n {rows}\n
Hybrid A-5 Plan
Your current plan
Hybrid A-6 PlanStraight Investment Plan
\n
\n
\n );\n }\n}\n\nconst mapStateToProps = (state,props) => ({\n display: state.memberTabs.tab === '' || state.memberTabs.tab === props.name ? true : false,\n data: state.data.results[ props.data ],\n // added current_annual_salary to the mapStateToProps\n current_annual_salary: state.data.fields['current_annual_salary']\n})\n\nconst mapDispatchToProps = dispatch => bindActionCreators({\n}, dispatch)\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(MemberResultsTable)","import React from 'react'\r\nimport { bindActionCreators } from 'redux'\r\nimport { connect } from 'react-redux'\r\nimport { indexOf } from 'lodash'\r\n\r\nimport \"react-datepicker/dist/react-datepicker.css\"\r\n\r\n// Field Types\r\nimport DatePicker from \"react-datepicker\"\r\nimport InputField from './fields/inputField'\r\nimport Select from 'react-select'\r\nimport YearsOfService from './fields/yearsOfService'\r\nimport ReviewField from './fields/reviewField'\r\nimport MemberResultTabs from './fields/memberResultTabs'\r\nimport MemberResultsTable from './fields/memberResultsTable'\r\n\r\n// Reducers\r\nimport {\r\n updateData,\r\n} from '../reducers/data'\r\n\r\nclass Field extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {}\r\n this.handleChange = this.handleChange.bind(this);\r\n }\r\n handleChange( fieldValue ) {\r\n this.props.updateData( this.props.name, fieldValue, this.props.type );\r\n }\r\n componentDidMount() {\r\n if( !!this.props.fieldValue.value && this.props.type !== \"review\" ) this.handleChange( this.props.fieldValue.value );\r\n }\r\n render() {\r\n let { value, type } = this.props.fieldValue\r\n let { isValid } = this.props\r\n let theField = null\r\n let theLabel = \r\n let theValidation = isValid ? null :
This field is required
\r\n switch( this.props.type ) {\r\n case 'years-of-service-chart' :\r\n theField = \r\n break;\r\n case 'dropdown' :\r\n theField =