Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Contains:
Overview of the Benefits Rate Architecture Building a Rate Table Use of the on-line application classes How to extend the delivered set of rate keys
Table of Contents
Table of Contents........................................................................................................................................................3 Chapter 1 - Introduction .............................................................................................................................................4 Structure of this Red Paper Related Materials 4 4
Chapter 2 - Goal of the New Rate Architecture .......................................................................................................5 Design Approach Glossary of Terms 5 5
Chapter 3 - Defining Benefit Rates...........................................................................................................................6 Rate Types Rate Key Sources Building a Rate Table 6 7 8
Chapter 5 - Using the Rate Management Application Classes............................................................................12 Contents of Package BN_RATES Using the BenefitRate Class 12 15
Chapter 6 - Extending the Supported Rate Key Sources.....................................................................................18 Add the Key as System Data Modify Rate Table Component (UI) Objects Modify Benefit Rate Management in COBOL Modify Benefit Rate Management in Application Package Unit Test the New Rate Key 18 18 20 23 25
6/5/2007
Chapter 1 - Introduction
This Red Paper is a practical guide for technical users, installers, system administrators, and programmers who implement, maintain, or develop applications for PeopleSoft systems. In this Red Paper, we discuss how to establish benefit rates using functionality that has been included in the PeopleSoft Enterprise HCM 9.0 release, how the system processes those rates, and how developers can extend the benefit rate architecture. Much of the information contained in this document originated within PeopleSoft Development and is, therefore, based on "real-life" problems encountered in the field. Although not every conceivable problem that one could encounter is covered in this document, the issues that appear are the problems that prove to be the most common or troublesome.
RELATED MATERIALS
We assume that our readers are experienced IT professionals with a good understanding of PeopleSofts Internet Architecture. To take full advantage of the information covered in this document, we recommend that you have a basic understanding of system administration, basic Internet architecture, relational database concepts/SQL, and how to use PeopleSoft applications. This document is not intended to replace the documentation delivered with the HCM PeopleBooks. We recommend that before you read this document, you read the PIA related information in the PeopleTools PeopleBooks to ensure that you have a well-rounded understanding of our PIA technology. Note. Much of the information in this document eventually gets incorporated into subsequent versions of the PeopleBooks. Many of the fundamental concepts related to Base Benefits are discussed in the PeopleSoft Enterprise Human Resources 9.0 PeopleBook: Manage Base Benefits.
6/5/2007
DESIGN APPROACH
The new architecture was intended to eliminate the complexity caused by four separate rate table types, defined on different components, stored in different physical records with inconsistent field attributes, and interpreted by different COBOL modules. To that end, all rate types are now defined through a single dynamic component, and stored in a single common data structure. During deduction processing, the rates are retrieved by a single common COBOL module using rules defined on the Calculation Rules table. (With this release there is also a new on-line application class that duplicates the rate management found in the COBOL processes.) The rate definition component needed to be dynamically configurable in order to manage the variety of rate types in current use. For example; flat rates typically have no keys, while age-graded rates have three keys (age, gender, and smoker status). To manage this variety, the Rate Types are now defined as separate entities, with the user deciding the number, order, and types of keys needed. This allows the user to configure the system for new rate usages that match their business processes. PeopleSoft will support an initial limited set of potential rate keys, but the new architecture will allow PeopleSoft developers to extend the framework and add new keys in response to future changes in business practice and client requirements.
GLOSSARY OF TERMS
COMPOSITE RATES Benefit rates expressed generically as employee or employer without reference to a specific tax class. Employee rates are composed of either an after-tax component or a before-tax component; and employer rates are composed of either a taxable component or a non-taxable component. These two generic rate elements (and the resulting benefit cost) will dynamically assume the tax treatment defined within the deduction code associated with the benefit plan using the rate. DETAIL RATES Benefit rates defined with specific after-tax, before-tax, taxable, and non-taxable tax class components. The deduction code associated with the benefit plan using the rate only controls which of the rates defined tax-class components are applicable. RATE METHOD The manner in which a rate value is applied to compute a benefit cost. There are three basic rate methods: flat amounts, rates per-unit-of-coverage, and percent-of-compensation base. RATE TYPE The manner in which a set of rates is organized and associated for common usage, essentially a reflection of the keys used to access and retrieve individual rate values. For examples, service steps, compensation bands, or age-graded. RATESET The rate components (either employee/employer, or the tax-class specific rates) specified on a single row in the Rate Table Data grid. In other words, the rate components associated with a specific set of key values, as would be resolved during cost calculation and retrieved for applying against an employees elected plan to determine its cost.
6/5/2007
RATE TYPES
PeopleSoft will deliver the four rate types supported in previous releases, along with several new rate types that have been actively requested by clients:
Rate Type Age-Graded Flat Length of Service Percent of Base Compensation Bands Covered Person Type Benefit Plan and Coverage Code Keys Gender > Smoker-Status > Age brackets (years) (None) Service brackets (months) (None) Compensation brackets Covered Person Type Benefit Plan > Coverage Code
Compensation Bands
This rate type would most likely be used for health plans, and could allow the employers subsidy to be graduated based on compensation level. The total rates would probably never be tiered based on compensation (this would most likely be deemed discriminatory), but the allocation of benefit cost could be shifted more to the employee at higher compensation levels.
6/5/2007
Gender
Smoker-Status
Service (Months)
Compensation
Benefit Plan
Coverage Code
6/5/2007
Note. The rate architecture supports the addition of new rate key sources, but not as a client configuration. The architecture is designed to be extendable by PeopleSoft Development in a minimally disruptive process (without data structure impact), such that PeopleSoft can be more responsive to changing user needs. See chapter below.
The Length-of-Service rate type uses a single numeric bracket to define ratesets according to tiers of service
The Benefit-Plan/Coverage-Code rate type has two keys, both of which are from prompt tables, to define ratesets by combinations of plan and coverage
The Age-Graded rate type has three keys (two based on specific translate values and one numeric bracket) to define ratesets based on combinations of gender and smoker status broken down by age tiers
6/5/2007
Tips and Tricks: The rate type may define a numeric bracket using one of several comparison methods: >, >=, < or <=. It is important to keep the comparison method in mind when entering rate data. An entry may or may not include the breakpoint. For example, if the numeric bracket is Age (>) and an age tier of 25 is entered, then an employee who is 25 actually matches the previous rate row, because the current rate row is only for employees greater than 25. If the numeric bracket were defined as Age (>=) then the same employee would match the current rate row, because it includes the age 25 tier breakpoint. Further, make sure that the tiers entered include the expected minimum or maximum range values as appropriate. In the example screenshot above, if the age brackets started at 1 rather than 0, then a newborn child might fail the rate resolution processes.
Each rateset (row of rate data) can be entered in either style, as best fits its intended use. (While the style can vary with each row, using mixed styles would be unusual.) Composite rate entry has the most flexibility, and maintains the entry style used in previous releases. Composite rates, however, have the restriction that the employee component must be either after-tax or before-tax, and the employer component must be either taxable or nontaxable. The deduction code associated with a composite rate should never define multiple employee or employer tax classes. The benefits deduction/cost calculation routines cannot allocate costs between competing deduction classes, and they would most likely end up assigning the full rate to both tax classes, effectively doubling the deduction. When greater control is needed over the tax-class allocation of a rate, then the Detail rate entry style should be used. This allows the user to specify the rate component for each tax class. (In current practice, this is most often required for health insurance rates, where the issues of qualified versus non-qualified individuals, or coverage of overage dependents, require a more dynamic management of tax impacts).
Tips and Tricks: Do not use the Detail style of rate entry for Life plans subject to imputed income. In general, the benefits deduction/cost routines have special logic for determining imputed income, as triggered by tax-effect attributes on the deduction code. Specifying a distinct Taxable rate component would interfere with the systems built-in ability to manage imputed income.
6/5/2007
This section of the rules setup defines how biographical information should be managed, if such information serves as the source for a rate key. The Age and Service rules carry over from previous releases. The Source for Demographics field values have been expanded to include the Employee, any Covered Dependent, or specifically the employees Spouse/Partner. The rate resolution routines will attempt to honor this rule whenever applicable. A new Age option is available: Age as of the employees initial coverage under a plan. The system resolves this value by analyzing the employees enrollment history for the plan type. Starting with the current (or target) benefit plan, the system looks back in history and finds the earliest Coverage Begin Date for which the employee has experienced uninterrupted coverage under the benefit plan. (A waive, a termination, or a change in benefit plan would be considered a break in coverage and would cause the analysis to stop.) A business use for a rate using this kind of age criteria would be long-term care, where the premium is typically fixed based on the employees age when they first elect coverage (since the providers risk is measured by longevity tables, and the potential coverage is largely open-ended).
This section of the rules setup is cloned from the similar rules that previously controlled the Coverage and Premium bases. The functionality is the same, but the resulting compensation is used only in the context of resolving or applying a benefit rate. A compensation base would be needed when a rate is defined as a Percent of Base. In general, if the benefit plan involved carries its own definition of a coverage amount, then the rate will be applied against that defined amount.
10
6/5/2007
If however, that coverage amount is zero, or if the plan involved does not support an independent coverage amount, then the system will use the Calculation Rules Benefit Base rules to determine a compensation base. A compensation base may also be required if the rate table involved uses compensation directly as a rate key (for example, Compensation Bands). In this case, the system must determine a base to use for accessing the rate data, matching to the compensation brackets, and selecting the target rateset.
11
6/5/2007
These classes are part of the BN_RATES application package. Currently, the main consumers of these classes are the Benefits Premium Report (Application Engine process BEN110) and eBenefits Enrollment (Life plan elections).
12
6/5/2007
properties
string RateTblID, CalcRuleID date AsOfDate These represent the keys last used for rate retrieval, as passed as arguments to either getRateSet() or getRateRules().
properties
boolean RateFound number TotalRate boolean CompositeRateStyle number EmployeeRate, EmployerRate number BeforeTaxRate, AfterTaxRate, NonTaxableRate, TaxableRate These represent the results of the last call to getRateSet(). RateFound indicates the success of that rate retrieval (if RateFound is False, then HasErrors will necessarily be True). The TotalRate is the sum of all rate components, and represents the rate charged by, and due to, the provider. CompositRateStyle indicates which style of rate entry was found if True, then the user should use the EmployeeRate/EmployerRate pair; if False, then the tax-class specific properties should be used.
properties
boolean HasErrors array of BN_RATES:Common:AppMsg AppMsgs These properties support error management. HasErrors indicates whether any errors were encountered by a method call, and if True then the AppMsgs array will hold the specific error information. See the PeopleTools Exception class for more information.
properties
BN_RATES:CalcRulesMgmt:CalcRuleDefn CalcRule BN_RATES:RateDefnMgmt:BenefitRateDefn RateTbl BN_RATES:BenefitBaseMgmt:BenefitBase BenBaseMgr BN_RATES:DependentListMgmt:Dependents DpndMgr These are the underlying manager classes that support rate resolution. These are not intended for direct interaction, but they are nevertheless exposed because the application may have need to access properties from these objects. Each manager will have available properties established as a result of the last getRateSet() call.
This is also intended for use by the consumer, and is simply a values class that serves as an information-passing mechanism. The class is used to pass information about the employee, his election, his biographical and job data, and his covered dependents, to the BenefitRate class as keys to the retrieval of a rateset. (In some cases, if the information is not known to the application, the BenefitRate class can acquire it independently. Passing all known background information to BenefitRate, however, improves performance by avoiding unnecessary database access.)
13
6/5/2007
method
clearEmployee() clearDependent() clearEnrollment() clearAll() These methods simply clear various related class properties in preparation for use in a getRateSet() method call. Method clearDependent() should be called whenever a different dependent will be processed, or to switch between rates based on a covered person to a rate based on the employee (if the BenefitRate object sees a non-blank DepID property, then covered person processing may be triggered inappropriately).
properties
string EmplID integer EmplRcd These properties represent the minimum keys necessary to resolve a benefit rate. Using these keys (and the As-Of Date supplied as part of the getRateSet() call), the rate management object can obtain all necessary employee-related information from the database.
properties
integer BenefitRcdNbr date Birthdate string Sex string Smoker integer Age string CoveredPersonType date ServiceDate date TerminationDate integer LengthOfService number BenefitBase string HCE_Indicator These properties represent the biographical and employment background information required to resolve the full range of supported rate key sources for the employee. These properties are read/write. If the user supplies this information it will be used when needed to resolve the rate keys; if this information is needed but not supplied, the class will perform database accesses as required and load the results back into these properties.
properties
string DepID string DpndSex string DpndSmoker date DpndBirthdate integer DpndAge string DpndCoveredPersonType These properties represent the biographical background information required to resolve the full range of supported rate key sources for a covered dependent. These properties are read/write if the user supplies this information it will be used when needed to resolve the rate keys; if this information is needed but not supplied, the class will perform database accesses as required and load the results back into these properties. Note, however, that when a covered dependent is the basis for a rate key, then the DepID property becomes a minimum required key that must be user-supplied, since all other information can be conditionally retrieved from it.
14
6/5/2007
properties
string PlanType integer CobraEventID string BenefitPlan string CovrgCd These properties represent the enrollment background information required to resolve the full range of supported rate key sources for the employee. These properties are read/write if the user supplies this information it will be used when needed to resolve the rate keys; if this information is needed but not supplied, the class will perform database accesses as required and load the results back into these properties. Note, however, that when an enrollment is the basis for a rate key, then the PlanType property (and possibly CobraEventID for 1X Plans) becomes a minimum required key that must be user-supplied (since all other information can be conditionally retrieved from it)
SubPackage: BenefitBaseMgmt
The classes in this sub-package duplicate much of the logic found in the PSPDCOMP.CBL COBOL module. The classes manage the determination of an appropriate benefits compensation base, when such base is needed for either rate resolution (For examples, Compensation Bands rate type, or Percent-of-Base rate method) or coverage amounts. The classes cache an employees job and compensation history, and then use the applicable calculation rules to select or aggregate relevant compensation. The classes in this sub-package retrieve and cache entries from the Calculation Rules table as they are needed to perform rate resolution. These are mainly values classes holding the rule definition of interest. The classes in this sub-package retrieve and cache a list of an employees dependents at a point in time. These are mainly values classes holding biographical information about a dependent of interest, but also has the ability to find a particular dependent by ID, or to find the employees current spouse/partner. The classes in this sub-package retrieve and cache entries from the Rate definition tables (Rate Keys, Rate Types and Rate Tables) as they are needed to perform rate resolution. These are mainly values classes holding the rate definition of interest. This class gets internally instantiated as a global session object that holds the singleton instances of each of the cache managers (Benefit Base, Calculation Rules, Rates, and Dependents). This allows the cache lists to be persistent across applications and components for maximum performance gain. The classes in this sub-package represent common support functions shared by other classes. Currently, the main feature is the application error management classes. Class AppMsgCat is a values class with symbolic constants for the various Message Catalog entries used by the BN_RATES package. Class AppMsg extends the Exception class and manages the reporting of errors, including the resolution of substitution parameters and the retrieval of a messages long descriptive text.
SubPackage: Common
15
6/5/2007
Declare local variables and instantiate the two rate management objects.
Local Local Local Local Local Local Local BN_RATES:RateAccessMgmt:BenefitRate &oRateMgr; BN_RATES:RateAccessMgmt:UserRateInput &oRateKeys; number &nOptionRate, &nProviderPremium; string &sCalcRuleID, &sRateTblID; date &dAsOfDate; integer &I; boolean &bResult;
Establish the input criteria needed to retrieve a rate. The application is responsible for determining the correct Rate Table and Calculation Rules IDs to be used, the overall as-of date, and the minimum employee-specific rate keys. Note that if the application already knows some of the potential rate key values (for this example, gender, smoker status, or birth date), they can be supplied through the RateKeys object. Doing so would avoid the overhead of the RateMgr having to independently acquire this information through database access.
Rem: Prepare to retrieve rateset for an Age-Graded Rate Table; &sRateTblID = "KA01"; &sCalcRuleID = "KAG1"; &dAsOfDate = Date(19980801); &oRateKeys.EmplID = "KU0010"; &oRateKeys.EmplRcd = 0; Rem If the application has this information, pass it for increased performance...; Rem &oRateKeys.Sex = &oRecPersDataEff.Sex.Value; Rem &oRateKeys.Smoker = "N"; Rem &oRateKeys.Birthdate = &oRecPerson.Birthdate.Value;
Invoke the getRateSet() method. The system will retrieve and cache the Rate Table and Calculation Rules definitions effective on the as-of date; determine if it has sufficient key information (and if not, acquire the biographical or job/employment information needed); resolve/compute the required keys; and retrieve the target Rate Data from the table.
&bResult = &oRateMgr.getRateSet(&sRateTblID, &sCalcRuleID, &dAsOfDate, &oRateKeys);
If any errors were encountered, the application can access them and display them to the user.
If (&oRateMgr.HasErrors) Then For &I = 1 To &oRateMgr.AppMsgs.Len WinMessage(&oRateMgr.AppMsgs [&I].ToString()); End-For; Else
If successful, the components of the rate (the rateset) are available as read-only class properties.
Rem: Use the retrieved rate information...; If (&oRateMgr.CompositeRateStyle) Then &nOptionRate = &oRateMgr.EmployeeRate; Else &nOptionRate = &oRateMgr.BeforeTaxRate + &oRateMgr.AfterTaxRate; End-If; &nProviderPremium = &oRateMgr.TotalRate;
Furthermore, any background information acquired by the RateMgr in order to select and return the rateset are loaded back into the RateKeys object where they are available to the application as properties.
16
6/5/2007
Rem: Use the retrieved employee biographical information...; WinMessage("EE was born " | &oRateKeys.Birthdate | " and age is " | &oRateKeys.Age); WinMessage("EE's gender is " | &oRateKeys.Sex); End-If;
Establish the input criteria needed to retrieve a second rate. Note that the RateKeys object still holds the employee key (and any biographical and employment background information) from the previous use. The RateKey method clearAll() would be used to clear all existing information if a new employee was being processed, but calling clearAll() or clearEmployee() unnecessarily would force the Rate Manage to simply reacquire the same information over and over. In this example, we must supply the ID of a specific target Dependent, whose biographical information will control the rate selected
Rem: Prepare to retrieve rateset by Covered Person Type for a specified Dependent...; Rem &oRateKeys.clearAll(); &sRateTblID = "BUCP"; &sCalcRuleID = "KAGD"; &dAsOfDate = Date(20050101); Rem &oRateKeys.EmplID and .EmplRcd already set from previous use; &oRateKeys.clearDependent(); &oRateKeys.DepID = "01";
Invoke the getRateSet() method. Rather than testing the RateMgr objects HasError property, we can simply respond to the Boolean result returned by the getRateSet() method
if (&oRateMgr.getRateSet(&sRateTblID, &sCalcRuleID, &dAsOfDate, &oRateKeys)) Then Rem: Use the retrieved rate information...; Rem: Use the retrieved dependent biographical information...; WinMessage(&oRateKeys.DepID | " is a " | &oRateKeys.DpndCoveredPersonType); Else For &I = 1 To &oRateMgr.AppMsgs.Len WinMessage(&oRateMgr.AppMsgs [&I].ToString()); End-For; End-If;
17
6/5/2007
BN_FIELDNAME_ALIAS
LABEL_ID BN_USES_COMPENSATN
BN_USES_DEMOGRPHCS
DATA_TYPE_CD
The name of the existing record field that will be the basis for the new key. Example: STATE An alternate fieldname to be used in the Rate Table component. This name does not represent an actual field, but is the root for a series of derived work fields of the same name with 01, 02 and 03 appended. As such, this name cannot be larger than 16 characters. By convention, the alias is usually in the form BN_fieldname_KEY. Example: BN_STATE_KEY An optional alternate field label. If blank, the system will use the fields default label on the grid on the Rate Table page. If the new key requires the system to determine an employees Benefits Base in order to resolve its value, then set this indicator to Y, otherwise set it to N. This has both informational and performance impacts. If the new key requires the system to retrieve a covered persons personal biographical data in order to resolve its value, then set this indicator to Y, otherwise set it to N. This has both informational and performance impacts. Set to Y to indicate that PeopleSoft controls this data.
18
6/5/2007
Field Attribute Field Type and Size Default Label Text Description
Translate Values
19
6/5/2007
Currently, all supported rate keys are based on fields already available through the common storage areas within the deduction calculation modules. For example the CHECK structure or the DARRY array hold gender, birth date, smoker status, service-date, covered person type, benefits plan and coverage code. If the new rate key being implemented is already retrieved and managed through these commonly passed structures, no additional storage is required. For some keys, like Age and Length-of-Service, even though their source fields are available, they are actually computed values that must be temporarily stored. So depending on the nature and sourcing of the new rate key being implemented, you may need to create a new working storage member to manage it.
20
6/5/2007
PSPBENRT.CBL: WORKING-STORAGE * * * 01 W-SOURCE. Break keys... ... Personal Data attributes... 02 AGE-YEARS PIC 999 Job and Employment Data attributes... 02 SERVICE-MONTHS PIC 999 02 CALCULATED-BASE PIC 9(8)V9(2) 02 WORK-STATE PIC X(6).
If a new working storage member is created for the key, it must also be added to paragraph A1000-INIT-RATEMGMT, which initializes these members upon an employee break. Paragraph HA000-RESOLVE-RATE-KEYS is the central manager for key resolution. It consists mainly of an Evaluate clause that uses the rate type definition (which defines the rate keys being used) to redirect the logic flow to a key-specific resolution paragraph. This Evaluate must be extended by appending another WHEN condition with the 88-level constant created above for the new rate key being implemented. When the condition is met, we simply perform an associated new rate key resolution paragraph (in the J series). The J-series rate key resolution paragraphs all follow a common organization, with variations depending on whether the key is a computed value, whether is can be sourced from both the employee or a covered person, and whether the module itself must perform the database retrieval. Here is some pseudo-code that outlines the existing resolution schemes:
21
6/5/2007
PSPBENRT.CBL: J-Series Paragraphs Initially default the KEY-VALUE-KNOWN flag to NO.
If (The key is based on the Employee, not a Covered Dependent) Then Check commonly shared data structures or local working storage, as applicable. If (The key has a value) Then Set the KEY-VALUE-KNOWN flag to YES. End-If Else (The key is based on a Covered Dependent) Check the passed BNDEP Dependent Information structure. If (The key has a value) Then Set the KEY-VALUE-KNOWN flag to YES. End-If End-If If (The KEY-VALUE-KNOWN flag is still NO) Then If (The key must be computed using known values) Then Attempt to compute the key using applicable source information (Commonly shared data, local working storage, or BNDEP Dependent Info) If (The key was successfully computed) Then Store computed value back into appropriate common data structure. Set the KEY-VALUE-KNOWN flag to YES. Else Optionally throw error to report missing or bad source data. End-If Else If (The key must be retrieved from the database) Then Attempt to retrieve key from database using applicable source information. (Commonly shared data, local working storage, or BNDEP Dependent Info) If (The key was successfully retrieved) Then Store retrieved value back into appropriate common data structure. Set the KEY-VALUE-KNOWN flag to YES. Else Optionally throw error to report missing or bad source data. End-If End-If End-If If (The KEY-VALUE-KNOWN flag is still NO) Then Throw a general key resolution failure error. End-If
Note. In our example, STATE is not a field that is currently managed during the deduction calculation process, and it is not available through the common data structures. As such, you would have to create a holding place for it in local working storage (01 W-SOURCE), and retrieve it directly from the database through a new GET-WORKLOCATION paragraph, supported by the appropriate 01 SQL buffer structures and an appropriate stored SQL statement in the DMS file. This would probably require access to the employees LOCATION on Job, and then to the work locations STATE via the LOCATION_TBL. This determination is based on the employees job information and does not involve covered dependents in any way, so those contingencies in the above pseudo-code can be ignored.
6/5/2007
Paragraph NA000-CONVERT-RATE-KEYS is the central manager for key conversion. It consists mainly of an Evaluate clause, which uses the Rate Type definition (which defines the rate keys being used) to determine where to obtain the resolved key, and whether that key needs conversion. This Evaluate must be extended by appending another WHEN condition with the 88-level constant created above for the new rate key being implemented. When the condition is met, we perform a simple move of the resolved key and a subsequent conversion if it is numeric. Here is some pseudo-code that outlines the existing conversion schemes:
PSPBENRT.CBL: NA000-CONVERT-RATE-KEYS When the key is character-based ... Determine where the resolved key resides. Move it into the RESOLVED-RATE-KEY holding area. When the key is numeric ... Determine where the resolved key resides. Move it into the W-CONVERT holding area. Perform NA100-CONVERT-RATE-KEY Move converted value from W-CONVERT into the RESOLVED-RATE-KEY holding area.
The new property would also be added to the class clearEmployee() method (and possibly clearDependent() ), where it would be initialized appropriate to its data type.
23
6/5/2007
Implement (or modify) the resolveKey() method as required to copy, calculate, or retrieve the key value. (The work done above for the equivalent COBOL process should already have given you the methodology youll need). Here is some pseudo-code that outlines the existing resolution schemes:
BN_RATES:RateAccessMgmt:RateKeyXXXX.resolveKey() Initially default the KeyResolved flag to NO. Check the passed UserRateInput class or current class members, as applicable. If (The key has a value) Then Set the KeyResolved flag to YES. End-If If (The KeyResolved flag is still NO) Then If (The key must be computed using known values) Then Attempt to compute the key using applicable source information (UserRateInput class or current class members) If (The key was successfully computed) Then Store computed value back into appropriate common class structures. Set the KeyResolved flag to YES. Else Optionally throw error to report missing or bad source data. End-If Else If (The key must be retrieved from the database) Then Attempt to retrieve key from database using applicable source information. (UserRateInput class or current class members) If (The key was successfully retrieved) Then Store retrieved value back into appropriate common class structures. Set the KeyResolved flag to YES. Else Optionally throw error to report missing or bad source data. End-If End-If End-If If (The KeyResolved flag is still NO) Then Throw a general key resolution failure error. Else Convert the key value, if necessary. End-If
Note that the base class RateKeyBase has several methods already in place to retrieve information for some common sources, such as Personal Data or Job and Organizational Assignments. If the new rate key resides on these records then the existing retrieval methods could be enhanced to include it. Otherwise, you will want to create a special-purpose retrieval local to the specific rate key class that you are creating. (If such retrieval requires hardcoded SQL, then use a SQL Object to manage it to retain the current style of the application package. Note. In our example, STATE is not a field that is currently managed by the UserRateInput class. As such, you would have to add it as a new public class property. Within the RateKeyState subclass, you would have to retrieve it directly from the database if it was not passed. In a manner similar to retrieveEmployeeBiographics() or retrieveEmployeeJobHistory(), you would create a new private method retrieveWorkState() and new SQL object BN_RATE_WORKSTATE to facilitate this. The actual SQL would be very similar to that created for the PSPBENRT COBOL module.
24
6/5/2007
and returns it to the BenefitRate manager as an anonymous RateKeyBase object. This means that when we add support for a new rate key type, we must extend the Evaluate statement used in the factory to include an additional WHEN condition for the new rate key, using the keys FieldName.
Note. The same shared processes are used for each product. Only one or the other product needs to be tested.
25
6/5/2007 [Use the same scenarios as for Deduction and Cost calculation testing.] Does the premium calculation run-phase produce correct total costs? o
26
6/5/2007
CUSTOMER VALIDATION
PeopleSoft is working with PeopleSoft customers to get feedback and validation on this document. Lessons learned from these customer experiences will be posted here.
FIELD VALIDATION
PeopleSoft Consulting has provided feedback and validation on this document. Additional lessons learned from field experience will be posted here.
27
6/5/2007
28
6/5/2007
Understanding Benefits Rates December 2006 Author: Gregory Beretta, Principle Software Developer, PeopleSoft Enterprise HCM Applications Oracle Corporation World Headquarters 500 Oracle Parkway Redwood Shores, CA 94065 U.S.A. Worldwide Inquiries: Phone: +1.650.506.7000 Fax: +1.650.506.7200 oracle.com Copyright 2006, Oracle. All rights reserved. This document is provided for information purposes only and the contents hereof are subject to change without notice. This document is not warranted to be error-free, nor subject to any other warranties or conditions, whether expressed orally or implied in law, including implied warranties and conditions of merchantability or fitness for a particular purpose. We specifically disclaim any liability with respect to this document and no contractual obligations are formed either directly or indirectly by this document. This document may not be reproduced or transmitted in any form or by any means, electronic or mechanical, for any purpose, without our prior written permission. Oracle, JD Edwards, PeopleSoft, and Siebel are registered trademarks of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.
29