490 likes | 777 Views
Banner Self-Service Open Enrollment. Dickinson College, Library and Information Services Dickinson College, HR Services PA BUG – November 21, 2006 Presenters: William Spolitback, Associate Director Michelle Spencer, HRIS Administrator
E N D
Banner Self-Service Open Enrollment Dickinson College, Library and Information Services Dickinson College, HR Services PA BUG – November 21, 2006 Presenters: William Spolitback, Associate Director Michelle Spencer, HRIS Administrator Terry Beard, Application Developer Brad Smith, Application Support Analyst
General Announcements • Please turn off all cell phones/pagers • If you must leave the session early, please do so as discreetly as possible • Please avoid side conversations during the session • Questions will be answered at the end of the session Thank you for your cooperation
Open Enrollment Process In The Past What Dickinson Utilized Prior to 2006… • Paper election form - included new July 1 salary and existing benefits on form. Followed by paper “take home pay” statement with estimate of 1st pay in July. Complete manual entry by HR and payroll. • 1999 - Lotus application developed for employees to calculate their own take home pay. Eliminated paper “take home pay” statements, but still sent out paper election forms. • 2002 - Home-grown, web-based product. All elections done via internet. Some manual entry by HR and payroll. • Notes: • All benefit elections and salary increases take effect on July 1. • Open enrollment active for ALL benefits – new and existing.
Thinking about making a change Why Use Banner? • Employees accustomed to doing open enrollment via internet. • No need to extract new salary and current benefit information. • No need to upload benefit elections back into system. • Finance wanted dependent information to track future benefit costs.
Open Enrollment Process Would Banner Self-Service Work for Dickinson? Issues for HR • The need to calculate take home pay on a per-pay basis. Existing ‘Calculate Cost’ link would not work. Deal breaker for us. • New July 1 salary had to be in effect for take home pay statement. • Wanted employees to see annual election amounts for retirement deductions and flexible spending accounts, not just per-pay. • Wanted existing benefits to “roll” into new fiscal year instead of re-electing every year. • User-friendly. • Wanted employees to be able to “play” with elections and view results. • Employer retirement contributions could not exceed 5%.
Open Enrollment Process 2006 Why it Worked for Dickinson… • Help from LIS to solve our issues. • Training presentation put directly on Self-Service site. • Held training sessions on campus every week during open enrollment. • HR staff member available during business hours. • COMMUNICATION, COMMUNICATION, COMMUNICATION!! Through various avenues (email, benefits newsletter, weekly campus newsletter, website, training).
Open Enrollment Process An Overview Application Goals • Improved navigation to the Open Enrollment application. • Make benefit changes easy to administer by having them updated automatically in Banner. • Monitor the distribution of the employer retirement contribution between options. • Assist Development in fund raising by offering Annual Giving options via Open Enrollment. • Provide an accurate representation of what the employee will see on their first paycheck of the new period. • Provide email confirmations to employees completing Open Enrollment on a timely basis.
Open Enrollment Accessing the Application Select Employee Information
Open Enrollment Accessing the Application Select Benefits and Deductions
Open Enrollment Accessing the Application Select Open Enrollment
Open Enrollment Dependent Information Click this link to view/update your Spouse/Same Sex Domestic Partner and Dependent information before you begin the Open Enrollment process.
Open Enrollment Beginning the Process Click to begin the Open Enrollment process. *NOTE: You will only see the ‘Start Open Enrollment’ button when you first begin the process.
Open Enrollment Group Information Click directly on these group headings to view the information.
Open Enrollment Viewing/Selecting Items To Add/Change/End a coverage, click on the title of the coverage. Cancels all changes and resets the Health Group back to current elections.
Open Enrollment Adding a Deduction Choose the coverage level by clicking in the desired radio button. Select this button to Add this coverage for July 1, 2006. Return to the Health Group Menu.
Open Enrollment Changing/Ending Deductions Select this button to End the current coverage for June 30, 2006. Select this button to Change the current coverage effective July 1, 2006.
Open Enrollment Entering PER PAY Amounts Enter a PER PAY amount for Flexible Spending Accounts and/or Retirement Elections. An annual amount may then be calculated prior to finalizing.
Open Enrollment Completing the Process When you have finished making your selections, click Complete.
Open Enrollment – Reopen and Estimate Take Home Pay Once ‘Complete’, you may view an estimate of your take home pay that will be effective after July 1st. You may reopen to access open enrollment anytime up until the Open Enrollment deadline.
Achieving the Desired User Experiencein other words…..How We Did It!
User Experience – Types of Changes • Message Modifications • Button Text • Additional Buttons • Annual Deduction Calculator • Radio Option Modification • Net Pay Calculation & Layout
Banner Modules • Modified modules are initially located in baninst1; however they are copied to and referenced from our “custom” schema • The following modules were modified • bwpkdoen – control and usability • bwpkdocm – display net pay calculator results • Very careful not to modify existing code extensively • reduce possibility of breaking “something” • allow for future upgrades of Banner product
Banner Modules – bwpkdoen(7.0.0.1) • Added calculate annual deduction for certain benefits • Added a button and text field • ~line 520 - P_OpenEnrollmentFormNon if pdklibs.ptrbdca_rec.ptrbdca_code in ('RR1','RG1','RF1','FDO','FHO','XGC', 'XGE', 'XGF', 'XGP', 'XGR', 'XGU', 'YEM', 'YIC', 'YIR') then bwpkdocm.P_GetPrimJobsData; twbkfrmt.p_printmessage('<script type="text/javascript"> function setAnnAmt() { var x = document.all[''txtAnnAmt'']; var ded = document.all[''ded_amt_input_id'']; var numAmt = ded.value * '||to_char(bwpkdocm.prim_no_pays)||'; x.value = numAmt.toFixed(2); } </script>'); twbkfrmt.p_printmessage('Number of pays per year: ' ||to_char(bwpkdocm.prim_no_pays),'NOTE'); twbkfrmt.P_tabledata('<INPUT TYPE="BUTTON" ONCLICK="setAnnAmt()" VALUE="Calculate Annual Deduction">'); twbkfrmt.P_tabledata('<INPUT type="text" value="'||ltrim(nvl(bwpkdocm.hold_amt2, to_char(pdklibs.pdrdedn_rec.pdrdedn_amount2,bwpkdupd.work_format)),' ')||'" readonly size=8 id="txtAnnAmt">',cattributes =>'valign=bottom'); end if; • Result
Banner Modules – bwpkdoen(7.0.0.1) • Added code to handle selection of employer contributions to retirement • two benefit types to choose from • a maximum of 5% can be selected from both accounts • Employee could select 5% from TIAA/CREF (with nothing selected from Fidelity • Employee could select 3% from TIAA/CREF and 2% from Fidelity • only allowable options are presented to user • ~line 260 – P_OpenEnrollmentFormChoose
Banner Modules – bwpkdoen(7.0.0.1) • Added code to handle selection of employer contributions to retirement (continued) • gets employee selections and displays appropriate feedback if (bwpkdocm.in_dcde = 'RT0') or (bwpkdocm.in_dcde = 'RF0') then begin select to_number(perdhis_opt_code1) into intRT0opt from perdhis where perdhis_pidm = bwpkdocm.in_pidm and perdhis_bdca_code in ('RT0') and perdhis_open_enroll_ind <> 'N' and perdhis_status <> 'T' and perdhis_effective_date in (select nvl(max(perdhis_effective_date),sysdate) from perdhis where perdhis_pidm = bwpkdocm.in_pidm and perdhis_bdca_code in ('RT0') and perdhis_status <> 'T' and perdhis_open_enroll_ind <> 'N' ); exception when NO_DATA_FOUND then intRT0opt := 0; end; !!!!Same code for for RF0!!!! if intRF0opt > 0 or intRT0opt > 0 then strmessage := strmessage || 'You have elected ' || to_char(intRF0opt) || '% from the Fidelity Employer Retirement benefit<br> '; strmessage := strmessage || ' and ' || to_char(intRT0opt) || '% from the TIAA-CREF Employer Retirement benefit.<br>'; strmessage := strmessage || ' You may only select a total of 5% between both benefits.'; twbkfrmt.P_TableOpen('DATADISPLAY', ccaption=> '<font color=blue>'||strmessage||'</font>', cattributes=> 'NONE' ); twbkfrmt.P_TableClose; end if; end if;
Banner Modules – bwpkdoen(7.0.0.1) • Added code to handle selection of employer contributions to retirement (continued) • generates option lists while iterating through a cursor if (bwpkdocm.in_dcde = 'RT0') or (bwpkdocm.in_dcde = 'RF0') then intRowCount := intRowCount + 1; bwpkdcmn.P_DednDetailTableData; if bwpkdocm.in_dcde = 'RT0' then if intRowCount <= (5 - nvl(intRF0opt,0) ) then if intRT0opt > 0 then twbkfrmt.P_TableData(htf.formRadio('opt1', pdklibs.ptrbdpl_rec.ptrbdpl_code, cchecked=>selectit, cattributes=>'ID="choice_input_id"')); else twbkfrmt.P_TableData(htf.formRadio('opt1',pdklibs.ptrbdpl_rec.ptrbdpl_code, cattributes=>'ID="choice_input_id"')); end if; end if; end if; if bwpkdocm.in_dcde = 'RF0' then if intRowCount <= (5 - nvl(intRT0opt,0) ) then if intRF0opt > 0 then twbkfrmt.P_TableData(htf.formRadio('opt1',pdklibs.ptrbdpl_rec.ptrbdpl_code,cchecked=>selectit, cattributes=>'ID="choice_input_id"')); else twbkfrmt.P_TableData(htf.formRadio('opt1',pdklibs.ptrbdpl_rec.ptrbdpl_code, cattributes=>'ID="choice_input_id"')); end if; end if; end if; else bwpkdcmn.P_DednDetailTableData; twbkfrmt.P_TableData(htf.formRadio('opt1',pdklibs.ptrbdpl_rec.ptrbdpl_code,cchecked=>selectit, cattributes=>'ID="choice_input_id"')); end if;
Banner Modules – bwpkdoen(7.0.0.1) • Added code to handle selection of employer contributions to retirement (continued) • Problem – Employee selecting more than a total of 5%.
Banner Modules – bwpkdoen(7.0.0.1) • Added code to handle selection of employer contributions to retirement (continued) • Result
Banner Modules – bwpkdocm(5.3) • Refurbished open enrollment cost screen to a net pay calculator • modified code to pull from intermediate table (containing benefit / tax information) • redesigned screen for aesthetics • added net pay information • added annual take home pay calculation
Banner Modules – bwpkdocm(5.3) • Refurbished open enrollment cost screen to a net pay calculator (continue) • header and footer for the net pay calculator page intNetSal := dc_custom.dc_pcalc_net_pay(pidm); htp.para; htp.hr; twbkfrmt.P_TableOpen('DATADISPLAY', ccaption=> 'Net Pay Calculation Deduction Breakdown', cattributes=> 'NONE' ); twbkfrmt.P_TableRowOpen; twbkfrmt.P_TableDataHeader('Deduction Name'); twbkfrmt.P_TableDataHeader('Plan Name'); twbkfrmt.P_TableDataHeader('Employee Amount'); twbkfrmt.P_TableDataHeader('Employer Paid'); twbkfrmt.P_TableRowClose; twbkfrmt.P_TableRowOpen; twbkfrmt.P_TableDataHeader('Total Deductions'); twbkfrmt.P_TableDataHeader(''); twbkfrmt.P_TableDataHeader(to_char(empl_tot_cy,'999G999D99'),calign=>'RIGHT'); twbkfrmt.P_TableDataHeader(to_char(empr_amt_cy,'999G999D99'),calign=>'RIGHT'); twbkfrmt.P_TableRowClose; twbkfrmt.P_TableRowOpen; twbkfrmt.P_TableDataHeader('Your estimated take home pay per pay period: ' || to_char(intNetSal,'999G999D99')); twbkfrmt.P_TableRowOpen; twbkfrmt.P_TableDataHeader('Your estimated take home pay per year: ' || to_char(intNetSal*bwpkdocm.prim_no_pays,'999G999D99')); twbkfrmt.P_TableClose;
Banner Modules – bwpkdocm(5.3) • Refurbished open enrollment cost screen to a net pay calculator (continue) • render each detail line open curPCALC_SELECTIONS(pidm); loop fetch curPCALC_SELECTIONS into recPCALC_SELECTIONS; exit when curPCALC_SELECTIONS%NOTFOUND; twbkfrmt.P_TableRowOpen; if mod(curPCALC_SELECTIONS%ROWCOUNT,2)= 1 then twbkfrmt.P_TableData(recPCALC_SELECTIONS.DEDN_NAME,cattributes => 'bgcolor=white'); twbkfrmt.P_TableData(recPCALC_SELECTIONS.DEDN_PLAN,cattributes => 'bgcolor=white'); twbkfrmt.P_TableData(to_char(recPCALC_SELECTIONS.DEDN_EMPEAMT,'999G999D99'),calign=>'RIGHT', cattributes => 'bgcolor=white'); twbkfrmt.P_TableData(to_char(recPCALC_SELECTIONS.DEDN_EMPRAMT,'999G999D99'),calign=>'RIGHT', cattributes => 'bgcolor=white'); else twbkfrmt.P_TableData(recPCALC_SELECTIONS.DEDN_NAME,cattributes => 'bgcolor=lightblue'); twbkfrmt.P_TableData(recPCALC_SELECTIONS.DEDN_PLAN,cattributes => 'bgcolor=lightblue'); twbkfrmt.P_TableData(to_char(recPCALC_SELECTIONS.DEDN_EMPEAMT,'999G999D99'),calign=>'RIGHT', cattributes => 'bgcolor=lightblue'); twbkfrmt.P_TableData(to_char(recPCALC_SELECTIONS.DEDN_EMPRAMT,'999G999D99'),calign=>'RIGHT', cattributes => 'bgcolor=lightblue'); end if; twbkfrmt.P_TableRowClose; empl_tot_cy := empl_tot_cy + recPCALC_SELECTIONS.DEDN_EMPEAMT; empr_amt_cy := empr_amt_cy + recPCALC_SELECTIONS.DEDN_EMPRAMT; end loop; close curPCALC_SELECTIONS;
Banner Modules – bwpkdocm(5.3) • Refurbished open enrollment cost screen to a net pay calculator (continue) • result
How does Banner calculate net pay? 1- Banner forms and processes populate Oracle tables. 2- PHPCALC process uses data in tables to calculate net pay. 3- PHPCALC posts calculated payroll info back to tables.
What is this PHPCALC process? (please, please, please…let PHPCALC be implemented as a simple wrapper to a set of API calls) PHPCALC is a PRO*COBOL routine -13950 lines in length. -Over 160 SQL calls. -File size 636962 bytes. • IF SQLCODE LESS ZERO • MOVE '26000' TO ABORT-PARA • PERFORM 90000-FRMT-ORA-ERR THRU 90000-EXIT • END-IF. • 26000-EXIT. • EXIT. • 27000-GET-TITLE. • 13-28 MOVE 'Payroll Calculation Report' TO JOB-TITLE. • 27000-EXIT. • EXIT. • RECALC 28000-SET-DISPOSITIONS-BACK. Unfortunately this is no simple API call, but can we use it anyway?
Yes, we can! And here’s how we did it. Examples of code authored to implement this process are available upon request.
Thinking critically about our solution… • Is it safe? All that messing around with production payroll tables and processes. • We use the same pay period for everyone, for a pay out in the future, where records would never normally exist. • We periodically run a purge script that will “catch” any records that were “left behind” in the tables. • Could this process be fast enough to be executed real time? • Live Demo • In production, average response time < 2 seconds.