Friday, October 29, 2021

Grade Steps Progression'sGrade and Steps Level Eligibility Fast Formula

The Details of this Formula available in Youtube Tutorial: 
GSP Grade|Steps Eligibility Formula - Oracle Fusion HCM Fast Formula Tutorial-12

Child Fast Formula

/*Formula Name: GSP_PERSON_CEILING_STEP

Type : Compensation Person Selection

Purpose: Check of the person is in the ceiling step 


*/



DEFAULT FOR PER_GRADE_STEP_NAME IS ' '

DEFAULT FOR PER_GRADE_STEP_SEQUENCE IS -1


DEFAULT_DATA_VALUE FOR  PER_GRD_GRADE_HISTORY_CEILING_STEP_ID IS -1


DEFAULT_DATA_VALUE FOR  PER_GSP_STEP_RATES_STEP_NAME IS ' '

DEFAULT_DATA_VALUE FOR  PER_GSP_STEP_RATES_STEP_SEQUENCE is -1 

DEFAULT_DATA_VALUE FOR  PER_GSP_STEP_RATES_STEP_ID IS -1


l_data = set_log('Entering GSP_PERSON_CEILING_STEP' )

grade = GET_CONTEXT(GRADE_ID, -1)

eDate = GET_CONTEXT(EFFECTIVE_DATE, '1900/01/01 00:00:00' (date) )


l_data = set_log('Grade  ' ||  TO_CHAR(grade) )

l_data = set_log('EFF DATE   ' ||  TO_CHAR(eDate) )

l_data = set_log('CURR STEP NAME  ' ||  PER_GRADE_STEP_NAME )

l_data = set_log('CURR STEP SEQ  ' ||  TO_CHAR(PER_GRADE_STEP_SEQUENCE) )


STEPID = -1 

STEPNAME = ' ' 

STEPSEQ = -1

CEILSTEPID = -1


INCEILSTEP = 'N' 


indx = PER_GRD_GRADE_HISTORY_CEILING_STEP_ID.FIRST(-1) 

if indx != -1 THEN (

   CEILSTEPID =  PER_GRD_GRADE_HISTORY_CEILING_STEP_ID[indx]

)


IF CEILSTEPID != -1 THEN (

   indx = PER_GSP_STEP_RATES_STEP_ID.FIRST(-1) 

   WHILE  PER_GSP_STEP_RATES_STEP_ID.EXISTS(indx)

   LOOP(

       STEPID   =  PER_GSP_STEP_RATES_STEP_ID[INDX]

       STEPNAME =  PER_GSP_STEP_RATES_STEP_NAME[INDX]

       STEPSEQ  =  PER_GSP_STEP_RATES_STEP_SEQUENCE[INDX]

       l_data = set_log('STEP  ' ||  TO_CHAR(STEPID) )  

       l_data = set_log('SEQ  ' ||   TO_CHAR(STEPSEQ) )  

       l_data = set_log('NAME  ' ||  STEPNAME )  

       IF CEILSTEPID = STEPID THEN (

          l_data = set_log('FOUND CEILING  ' ||  STEPNAME )        

          EXIT

       )

     indx = PER_GSP_STEP_RATES_STEP_ID.NEXT(indx, -1) 

   )

)ELSE (


     indx = PER_GSP_STEP_RATES_STEP_ID.LAST(-1) 

     if indx != -1 THEN  (


       STEPID   =  PER_GSP_STEP_RATES_STEP_ID[INDX]

       STEPNAME =  PER_GSP_STEP_RATES_STEP_NAME[INDX]

       STEPSEQ  =  PER_GSP_STEP_RATES_STEP_SEQUENCE[INDX]

       l_data = set_log('LAST STEP  ' ||  TO_CHAR(STEPID) )  

       l_data = set_log('LAST SEQ  ' ||   TO_CHAR(STEPSEQ) )  

       l_data = set_log('LAST NAME  ' ||  STEPNAME )  

    

     )


)


IF STEPID != -1 THEN (


   IF PER_GRADE_STEP_NAME = STEPNAME THEN (

      INCEILSTEP = 'Y' 

       l_data = set_log('YES IN CEILING ' ||  STEPNAME )  

   )

)




l_data = set_log('Leaving GSP_PERSON_CEILING_STEP' )

RETURN  INCEILSTEP




***********************************************************************************************


Parent Fast Formula


/*

Name: GSP_PERSON_ELIG

Formula Type : Participation and Rate Eligibility

Purpose:  Person should have worked in the current step for a year to be 

          eligible for next step.

          Person is eligible for only next step in the same Grade

          If the person is already in the ceiling step of current Grade 

          then the person is eligible for next grade and the first step


*/


DEFAULT FOR PER_GRADE_STEP_NAME IS ' '

DEFAULT FOR PER_GRADE_STEP_SEQUENCE IS -1

DEFAULT FOR PER_ASG_GRADE_ID is -1

DEFAULT FOR PER_ASG_GRADE_NAME is ' '

DEFAULT FOR PER_GRADE_STEP_EFFECTIVE_START_DATE IS  '1900/01/01 00:00:00' (date)



DEFAULT FOR CMP_IV_STEP_ID IS -1 

DEFAULT FOR CMP_IV_STEP_NAME IS ' '


INPUTS ARE CMP_IV_GRADE_LADDER_ID(NUMBER),CMP_IV_GRADE_LADDER_NAME (TEXT), 

       CMP_IV_PERIOD_START_DATE (DATE), CMP_IV_PERIOD_END_DATE (DATE) ,

       CMP_IV_GRADE_ID (NUMBER), CMP_IV_GRADE_NAME (TEXT), CMP_IV_GRADE_SEQ (NUMBER) , 

       CMP_IV_STEP_ID (NUMBER), CMP_IV_STEP_NAME (TEXT)

 

ldata = SET_LOG('Entering TLK_GSP_PERSON_ELIG' ) 

ELIGIBLE = 'Y'


eDate = GET_CONTEXT(EFFECTIVE_DATE, '1900/01/01 00:00:00' (date) )

asgID = GET_CONTEXT(HR_ASSIGNMENT_ID, -1 )





ldata = SET_LOG('PER_ASG_GRADE_ID ' || TO_CHAR(PER_ASG_GRADE_ID) ) 

ldata = SET_LOG('PER_ASG_GRADE_NAME ' || PER_ASG_GRADE_NAME ) 

ldata = SET_LOG('PER_GRADE_STEP_SEQUENCE ' || TO_CHAR(PER_GRADE_STEP_SEQUENCE) ) 

ldata = SET_LOG('PER_GRADE_STEP_NAME ' || PER_GRADE_STEP_NAME ) 


ldata = SET_LOG('EFFECTIVE_DATE ' || TO_CHAR(eDate) ) 

ldata = SET_LOG('PER_GRADE_STEP_EFFECTIVE_START_DATE ' || TO_CHAR(PER_GRADE_STEP_EFFECTIVE_START_DATE) ) 


ldata = SET_LOG('Asg ID ' || TO_CHAR(asgID) )


ldata = SET_LOG('CMP_IV_GRADE_LADDER_ID ' || TO_CHAR(CMP_IV_GRADE_LADDER_ID ) )

ldata = SET_LOG('CMP_IV_GRADE_LADDER_NAME ' || CMP_IV_GRADE_LADDER_NAME )


ldata = SET_LOG('CMP_IV_GRADE_ID ' || TO_CHAR(CMP_IV_GRADE_ID ) )

ldata = SET_LOG('CMP_IV_GRADE_SEQ ' || TO_CHAR(CMP_IV_GRADE_SEQ ) )

ldata = SET_LOG('CMP_IV_GRADE_NAME ' || CMP_IV_GRADE_NAME )


ldata = SET_LOG('CMP_IV_STEP_ID ' || TO_CHAR(CMP_IV_STEP_ID ) )

ldata = SET_LOG('CMP_IV_STEP_NAME ' || CMP_IV_STEP_NAME )





/* more then a year validation */ 

IF DAYS_BETWEEN(eDate , PER_GRADE_STEP_EFFECTIVE_START_DATE) < 365 THEN (

  ELIGIBLE = 'N' 

  ldata = SET_LOG(' inelig due to year validation ' ) 

)


IF  ELIGIBLE = 'Y'  THEN (

    inceiling = 'N'

    IF  CMP_IV_STEP_ID WAS DEFAULTED THEN (

        ldata = SET_LOG(' In Grade Validation' ) 

        IF PER_ASG_GRADE_ID WAS NOT DEFAULTED THEN (

           IF IS_EXECUTABLE('GSP_PERSON_CEILING_STEP') THEN( 

              SET_INPUT('GRADE_ID', PER_ASG_GRADE_ID )

              EXECUTE('GSP_PERSON_CEILING_STEP')

              inceiling = GET_OUTPUT('INCEILSTEP', 'N')

              ldata = SET_LOG(' inceiling ' ||inceiling  )             


           )

        )

        /* validate the current and elig grade */

        IF  PER_ASG_GRADE_ID  != CMP_IV_GRADE_ID THEN (

            ELIGIBLE = 'N' 

            IF inceiling = 'Y' THEN (

               IF PER_ASG_GRADE_NAME = 'Analyst 1' and CMP_IV_GRADE_NAME = 'Analyst 2' THEN (

                    ELIGIBLE = 'Y' 

                    ldata = SET_LOG('Next Grade allowed ' || CMP_IV_GRADE_NAME )

               ) ELSE (

                 IF PER_ASG_GRADE_NAME = 'Analyst 2' and CMP_IV_GRADE_NAME = 'Analyst 3' THEN (

                    ELIGIBLE = 'Y' 

                    ldata = SET_LOG('Next Grade allowed ' || CMP_IV_GRADE_NAME )

                 )

               )

  

            )

        )



    )ELSE (

        ldata = SET_LOG(' In Step Validation' ) 

        IF CMP_IV_STEP_ID != -1 THEN (

           ELIGIBLE = 'N' 

           IF  PER_ASG_GRADE_NAME =  CMP_IV_GRADE_NAME THEN (

              IF PER_GRADE_STEP_SEQUENCE+1 =  TO_NUMBER(CMP_IV_STEP_NAME) THEN (

                 ELIGIBLE = 'Y' 

                 ldata = SET_LOG('Next step allowed ' || CMP_IV_STEP_NAME )

              )

           )ELSE (

              /* moving to new g4ade */

              IF TO_NUMBER(CMP_IV_STEP_NAME) = 1 THEN( 

                    ELIGIBLE = 'Y' 

                   ldata = SET_LOG('First step allowed ' || CMP_IV_STEP_NAME )

              )   

           )

        )

    )


) 


ldata = SET_LOG('Leaving TLK_GSP_PERSON_ELIG '|| ELIGIBLE ) 

RETURN ELIGIBLE

Wednesday, October 6, 2021

 Grade Step Progression (GSP) Ladder Level Eligibility Fast Formula

YouTube Tutorial: GSP Ladder Eligible Formula 2 - Oracle Fusion HCM Fast Formula Tutorial-11

Please See the Explanation in the YouTube Tutorial


/*

Name:  TLK_GSP_ELIG_CHILD 

Type:  Compensation Person Selection

Purpose: Skip the person who is already in ceiling step 

          

***************************/


/* DBI */ 


DEFAULT_DATA_VALUE FOR  PER_GRD_GRADE_HISTORY_CEILING_STEP_ID IS -1

DEFAULT_DATA_VALUE FOR  PER_GRD_GRADE_HISTORY_EFFECTIVE_START_DATE IS  '1900/01/01 00:00:00' (date)

DEFAULT_DATA_VALUE FOR  PER_GRD_GRADE_HISTORY_EFFECTIVE_END_DATE IS  '1900/01/01 00:00:00' (date)



l_data = set_log('Entering TLK_GSP_ELIG_CHILD' )

grade = GET_CONTEXT(GRADE_ID, -1)

eDate = GET_CONTEXT(EFFECTIVE_DATE, '1900/01/01 00:00:00' (date) )


l_data = set_log('Grade  ' ||  TO_CHAR(grade) )

l_data = set_log('EFF DATE   ' ||  TO_CHAR(eDate) )

STEPID = -1

STEPNAME = ' '


/* Find the ceiling id of eff date */ 


index = PER_GRD_GRADE_HISTORY_CEILING_STEP_ID.FIRST( -1)

WHILE (PER_GRD_GRADE_HISTORY_CEILING_STEP_ID.EXISTS(index))

LOOP (

   lstDate = PER_GRD_GRADE_HISTORY_EFFECTIVE_START_DATE[index] 

   lenDate = PER_GRD_GRADE_HISTORY_EFFECTIVE_END_DATE[index] 

   l_data = set_log('CEILING Dates   ' ||  TO_CHAR(lstDate) || ' / '||  TO_CHAR(lenDate))

   if (edate >= lstDate AND edate <= lenDate ) THEN (

       STEPID =  PER_GRD_GRADE_HISTORY_CEILING_STEP_ID[index] 

       l_data = set_log('Step ID    ' ||  TO_CHAR(STEPID) )

       exit

   )

  index = PER_GRD_GRADE_HISTORY_CEILING_STEP_ID.NEXT(index, -1 )

)

IF STEPID != -1 THEN (

  lparam = '|=STEP_ID='|| TO_CHAR(STEPID) 

  l_data = set_log('Person Grade Step Name   ' ||   lparam )

  STEPNAME = GET_VALUE_SET('GSP_GET_STEP_NAME' , lparam)

  l_data = set_log('Ceil Step Name   ' ||   STEPNAME )  

 

)


l_data = set_log('Leaving  GSP_PERSON_SELECTION2 ' || STEPNAME )


RETURN STEPNAME







//*

Name:  GSP_PART_ELIG

Type: Participation and Rate Eligibility

Function: Exclude the people who are in step 5 or >

          Exclude the people who are in probation


***************************************************/


DEFAULT FOR PER_GRADE_STEP_NAME IS ' '

DEFAULT FOR PER_GRADE_STEP_SEQUENCE IS -1

DEFAULT FOR PER_ASG_DATE_PROBATION_END IS '1900/01/01 00:00:00' (date)

DEFAULT FOR PER_ASG_GRADE_ID is -1



INPUTS ARE CMP_IV_GRADE_LADDER_ID(NUMBER),CMP_IV_GRADE_LADDER_NAME (TEXT), CMP_IV_PERIOD_START_DATE (DATE), CMP_IV_PERIOD_END_DATE (DATE)



ldata = SET_LOG('Entering GSP_PART_ELIG' ) 

ELIGIBLE = 'Y'


eDate = GET_CONTEXT(EFFECTIVE_DATE, '1900/01/01 00:00:00' (date) )

asgID = GET_CONTEXT(HR_ASSIGNMENT_ID, -1 )


ldata = SET_LOG('PER_ASG_GRADE_ID ' || TO_CHAR(PER_ASG_GRADE_ID) ) 

ldata = SET_LOG('EFFECTIVE_DATE ' || TO_CHAR(eDate) ) 

ldata = SET_LOG('Asg ID ' || TO_CHAR(asgID) )

ldata = SET_LOG('PER_ASG_DATE_PROBATION_DATE_END '||TO_CHAR(PER_ASG_DATE_PROBATION_END))

ldata = SET_LOG('PER_GRADE_STEP_SEQUENCE ' || TO_CHAR(PER_GRADE_STEP_SEQUENCE) )

ldata = SET_LOG('PER_GRADE_STEP_NAME ' || PER_GRADE_STEP_NAME )

ldata = SET_LOG('CMP_IV_GRADE_LADDER_ID ' || TO_CHAR(CMP_IV_GRADE_LADDER_ID ) )

ldata = SET_LOG('CMP_IV_GRADE_LADDER_NAME ' || CMP_IV_GRADE_LADDER_NAME )

ldata = SET_LOG('CMP_IV_PERIOD_START_DATE ' || TO_CHAR(CMP_IV_PERIOD_START_DATE ) )

ldata = SET_LOG('CMP_IV_PERIOD_END_DATE ' || TO_CHAR(CMP_IV_PERIOD_END_DATE ) )


IF PER_GRADE_STEP_SEQUENCE >= 5 THEN (

  ELIGIBLE = 'N'

) ELSE (

  IF PER_ASG_DATE_PROBATION_END >= eDate THEN (

      ELIGIBLE = 'N'

 )ELSE (


   IF PER_ASG_GRADE_ID WAS NOT DEFAULTED THEN (

      IF IS_EXECUTABLE('GSP_CHILD_ELIG') THEN (

         SET_INPUT('GRADE_ID' , PER_ASG_GRADE_ID)

         EXECUTE('GSP_CHILD_ELIG') 

         ceil_step_name = GET_OUTPUT('STEPNAME', ' ')

         ldata = SET_LOG('ceil_step_name ' || ceil_step_name )

         if ceil_step_name != ' ' AND ceil_step_name =  PER_GRADE_STEP_NAME THEN (

            ELIGIBLE = 'N'

         )

      )

   )

 )

)


ldata = SET_LOG('Leaving GSP_PART_ELIG : '||  ELIGIBLE) 

Return ELIGIBLE

Tuesday, December 1, 2020

Grade Steps Progression: Incremental salary Formula Sample

The Grade/Step Progression functionality supports updating the worker’s salary with the rate associated with the Grade/Step the worker is progressed to. GSP does not support incrementing the worker’s current salary with the grade/step rate amount defined. 

Requirement:Consider the following scenario:

  • Worker on Step 1 and current salary Rate is $5000. 
  • After a Length of Service of 1 year on Step 1, the worker must be progressed to Step 2.  The rate defined at Step 2 is 300. The worker’s current salary should be incremented by $300.00 i.e. 5000+300 = 5300.
  • After a Length of Service of 2 year on Step 2, the worker must be progressed to Step 3. The salary needs to be incremented by $500.00 i.e 5300+500 = 5800.

This allows the initial salary given to each worker can be different (in this case 5000).  The rate defined at the step level is the increment amount and not the total salary rate. This requirement cannot be achieved directly by defining grade or step rates but can be achieved using a fast formula to calculate the increment amounts.  The following are 2 possible solutions to accommodate the above requirement using fast formula.


Possible Solution 1:

In the fast Formula, find the current Grade / Step of the worker and the salary rate. For each possible grade or step, define the increment amount within the fast formula. Apply the increment amount to the current rate and calculate the new salary rate. 

Find the current rate (say rate)

If CMP_IV_GRADE_NAME = ‘GRADE1’ and CMP_IV_STEP_NAME = ‘2’ then (
   value = 300
)Else(
    If CMP_IV_GRADE_NAME = ‘GRADE1’ and CMP_IV_STEP_NAME = ‘3’ then (
    value = 500
) ) 

Then you can add the calculated value to the current grade rate
 value = rate (Current Salary) + value 

Possible Solution 2:
The incremental rate value in defined for each step in the ladder. Find the step rate in the formula and return the sum of worker’s current salary rate and step rate.  

In this blog, we are going to discuss the possible solution 2.

Fast Formula:


/******************************************************************

  FF Name: TILAK_GSP_SALARY_INCREMENT
 Type: Salary Progression Rate Calculation Rule
 Purpose: Get the current Salary from the Assignment and add the Rate from the GSP Steps  To determine the incremented salary
 Author: Tilak

******************************************************************//* DBI for the Fast Formula */
DEFAULT FOR PER_GRADE_STEP_NAME IS '-1'
DEFAULT_DATA_VALUE FOR  PER_GSP_STEP_RATES_STEP_NAME is '-1'
DEFAULT_DATA_VALUE FOR  PER_GSP_STEP_RATES_VALUE_VALUE  IS '-1'
DEFAULT_DATA_VALUE FOR  PER_GSP_STEP_RATES_STEP_ID IS -1
DEFAULT FOR CMP_ASSIGNMENT_SALARY_AMOUNT is 0

/* Input Values */

INPUTS ARE CMP_IV_GRADE_LADDER_ID(NUMBER), CMP_IV_GRADE_ID (NUMBER), CMP_IV_GRADE_STEP_ID(NUMBER), GRADE_STEP_ID(NUMBER) ,
CMP_IV_GRADE_LADDER_NAME (TEXT), CMP_IV_GRADE_NAME (TEXT),CMP_IV_STEP_NAME (TEXT)

DEFAULT FOR CMP_IV_STEP_NAME  IS '-1'
DEFAULT FOR CMP_IV_GRADE_NAME IS '-1'
DEFAULT FOR CMP_IV_STEP_NAME  IS '-1'
DEFAULT FOR CMP_IV_GRADE_STEP_ID IS  -1
DEFAULT FOR GRADE_STEP_ID  IS  -1

L_temp = SET_LOG ('*** Entering TILAK_GSP_SALARY_INCREMENT ' )
l_salary  = 0
l_eff_date  =  GET_CONTEXT(EFFECTIVE_DATE, '2000/01/10' (date))
l_grade_Id  =  GET_CONTEXT(GRADE_ID , -1 )
l_asg_Id  =  GET_CONTEXT(HR_ASSIGNMENT_ID , -1 )

/* print the contexts */
L_temp = SET_LOG ('Context Effective Date ' + to_char(l_eff_date)  )
L_temp = SET_LOG ('Context Assignment ' + to_char(l_asg_Id)  )
L_temp = SET_LOG ('Context Grade ' + to_char(l_grade_Id)  )

/* print input values */
L_temp = SET_LOG ('IV Grade ' + to_char(CMP_IV_GRADE_ID)  )
L_temp = SET_LOG ('IV Grade ' + CMP_IV_GRADE_NAME  )
L_temp = SET_LOG ('IV Step ' + to_char(CMP_IV_GRADE_STEP_ID ) )
L_temp = SET_LOG ('IV Step ' + CMP_IV_STEP_NAME   )
L_temp = SET_LOG ('GRADE_STEP_ID ' +  TO_CHAR(GRADE_STEP_ID)   )
L_Current_rate = 0

/* Find the current salary from DBI */
L_Current_rate = CMP_ASSIGNMENT_SALARY_AMOUNT
L_temp = SET_LOG ('current Salary Value in loop ' +  TO_CHAR(L_Current_rate) )

l_rate_value = '0'

/* get the step rate value */ 

l_index = PER_GSP_STEP_RATES_VALUE_VALUE.FIRST(-1)
WHILE  (PER_GSP_STEP_RATES_VALUE_VALUE.EXISTS(l_index))
LOOP(

   /* You can have additional validation on dates */
   L_temp = SET_LOG ('Rate Value in loop ' + PER_GSP_STEP_RATES_VALUE_VALUE[l_index]  )
   L_temp = SET_LOG ('Rate Value step id  loop ' + to_char(PER_GSP_STEP_RATES_STEP_ID[l_index])  )

 L_temp = SET_LOG ('Rate Value step name  loop ' + PER_GSP_STEP_RATES_STEP_NAME[l_index]  )

 IF (PER_GSP_STEP_RATES_STEP_ID[l_index] = CMP_IV_GRADE_STEP_ID  ) THEN (  L_temp = SET_LOG ('selected Rate Value in loop ' +     PER_GSP_STEP_RATES_VALUE_VALUE[l_index]  )
    l_rate_value  =  PER_GSP_STEP_RATES_VALUE_VALUE[l_index
       EXIT
   )
  l_index = PER_GSP_STEP_RATES_VALUE_VALUE.NEXT(l_index ,-1) 

)
l_salary =  L_Current_rate +  to_number(l_rate_value)
L_temp = SET_LOG ('Exiting TILAK_GSP_SALARY_INCREMENT ***** ' + to_char(l_salary)  )
RETURN l_salary


Partial Log from the Process:


Start Date : 2020-10-01
Start of the range process rangeid: 100000000844440 ,in the thread 24752
Effective date: 01-10-2020 , Assignment Id: 300000007387311
Processing Person  : TilakAnalyst1119, Lakshmi 

Grades             Step            Defaulted Eligible
------------------------------------------------------
Effective date: 01-11-2020 , Assignment Id: 300000007387311
*** Entering TILAK_GSP_SALARY_INCREMENT 
Context Effective Date 2020-11-01T00:00:00.000Z
Context Assignment 300000007387311
Context Grade 300000006552581
IV Grade 300000006552581
IV Grade ANALYST Grade Step IC2\
IV Step 300000006552585
IV Step IC2.2
GRADE_STEP_ID 300000006552584
current Salary Value in loop 2101.11
Rate Value in loop 2101.11
Rate Value step id  loop 300000006552584
Rate Value step name  loop IC2.1
Rate Value in loop 2202.12
Rate Value step id  loop 300000006552585
Rate Value step name  loop IC2.2
selected Rate Value in loop 2202.12
Exiting TILAK_GSP_SALARY_INCREMENT ***** 4303.23
Rate from Formula:4303.23
Value / Factor / Annualized rate:4303.23 / 12 / 51638.76
salary/fte /ann fte / proposed salary 25213.32 / 2101.11  / 25213.32 / 51638.76
Proposed salary Fte 4303.23
Formatted proposed Salary 2 /  / 4303.23
*** Entering TILAK_GSP_SALARY_INCREMENT 
Context Effective Date 2020-11-01T00:00:00.000Z
Context Assignment 300000007387311
Context Grade 300000006552581
IV Grade 300000006552581
IV Grade ANALYST Grade Step IC2
IV Step 300000006552588
IV Step IC2.3
GRADE_STEP_ID 300000006552584
current Salary Value in loop 2101.11
Rate Value in loop 2101.11
Rate Value step id  loop 300000006552584
Rate Value step name  loop IC2.1
Rate Value in loop 2202.12
Rate Value step id  loop 300000006552585
Rate Value step name  loop IC2.2
Rate Value in loop 2303.13
Rate Value step id  loop 300000006552588
Rate Value step name  loop IC2.3
selected Rate Value in loop 2303.13
Exiting TILAK_GSP_SALARY_INCREMENT ***** 4404.24

Rate from Formula:4404.24

Explanation of the Fast Formula:

The following three DBI’s are array DBI’s based on context GRADE_ID and EFFECTIVE_DATE.
In other words, the information for the DBI is extracted for a Grade Id and a Date. By default, the Formula uses the person current grade and the effective date of the process.
DEFAULT_DATA_VALUE FOR  PER_GSP_STEP_RATES_STEP_NAME is '-1'
DEFAULT_DATA_VALUE FOR  PER_GSP_STEP_RATES_VALUE_VALUE  IS '-1'
DEFAULT_DATA_VALUE FOR  PER_GSP_STEP_RATES_STEP_ID IS -1 

If you are using grades and grade rates, you can use the following DBI’s instead of Step based DBI’s.
PER_GRADE_RATES_NAME
PER_GRADE_RATE_VALUE_VALUE

The following DBI is used to get the employees current Salary.  It is based on context HR_ASSIGNMENT_ID and EFFECTIVE_DATE.
DEFAULT FOR CMP_ASSIGNMENT_SALARY_AMOUNT is 0

These following lines are used to declare the Input values. You can find the information about the Grade, steps for which the Formula is executed.

/* Input Values */

INPUTS ARE CMP_IV_GRADE_LADDER_ID(NUMBER), CMP_IV_GRADE_ID (NUMBER), CMP_IV_GRADE_STEP_ID(NUMBER), GRADE_STEP_ID(NUMBER) ,
 CMP_IV_GRADE_LADDER_NAME (TEXT), CMP_IV_GRADE_NAME (TEXT),CMP_IV_STEP_NAME (TEXT)

The following lines provide a default value to the Input values so that the formula does not error in case the values are not passed from the Fast formula. 

DEFAULT FOR CMP_IV_STEP_NAME  IS '-1'
DEFAULT FOR CMP_IV_GRADE_NAME IS '-1'
DEFAULT FOR CMP_IV_STEP_NAME  IS '-1'
DEFAULT FOR CMP_IV_GRADE_STEP_ID IS  -1
DEFAULT FOR GRADE_STEP_ID  IS  -1


The following lines are used to declaring variables for the current rate and eligible step rate.

l_salary  = 0
L_Current_rate = 0

The following line is to find the person current salary value.
L_Current_rate = CMP_ASSIGNMENT_SALARY_AMOUNT

The following loop is to find the rate of all of steps in current grade. Since the DBI gets all the step rates, we need to validate the step that we are looking for.

If you are hard coding  the value for Steps or Grade, you can implement your logic here instead of querying  the value from the eligible Grades and Steps.

l_rate_value = '0'
/* get the step rate value */
l_index = PER_GSP_STEP_RATES_VALUE_VALUE.FIRST(-1)
WHILE  (PER_GSP_STEP_RATES_VALUE_VALUE.EXISTS(l_index))
LOOP(

   /* You can have additional validation on dates */
  L_temp = SET_LOG ('Rate Value in loop ' +     PER_GSP_STEP_RATES_VALUE_VALUE[l_index] 
   L_temp = SET_LOG ('Rate Value step id  loop ' + to_char(PER_GSP_STEP_RATES_STEP_ID[l_index])  )
   L_temp = SET_LOG ('Rate Value step name  loop ' +PER_GSP_STEP_RATES_STEP_NAME[l_index]  )

  When the DBI step id matches the step id for which formula is executed, we get the value from the DBI.

   IF (PER_GSP_STEP_RATES_STEP_ID[l_index] = CMP_IV_GRADE_STEP_ID  ) THEN (
        L_temp = SET_LOG ('selected Rate Value in loop ' + PER_GSP_STEP_RATES_VALUE_VALUE[l_index]  )
        l_rate_value  =  PER_GSP_STEP_RATES_VALUE_VALUE[l_index]
       EXIT
   )
  l_index = PER_GSP_STEP_RATES_VALUE_VALUE.NEXT(l_index ,-1) 

)
Once we get the current salary and the Step rate, we add them and return the final value.
l_salary =  L_Current_rate +  to_number(l_rate_value)
L_temp = SET_LOG ('Exiting TILAK_GSP_SALARY_INCREMENT ***** ' + to_char(l_salary)  )
RETURN l_salary


This formula works on the person current grade.
If your requirement is to write a formula that evaluates for a different grade, you need to change the context of the Grade for which formula is executed.

/* get the step rate value */ 

CHANGE_CONTEXTS(GRADE_ID= CMP_IV_GRADE_ID)
(
l_index = PER_GSP_STEP_RATES_VALUE_VALUE.FIRST(-1)
WHILE  (PER_GSP_STEP_RATES_VALUE_VALUE.EXISTS(l_index))

LOOP(

   /* You can have additional validation on dates */
 L_temp = SET_LOG ('Rate Value in loop ' +     PER_GSP_STEP_RATES_VALUE_VALUE[l_index]  )
   L_temp = SET_LOG ('Rate Value step id  loop ' + to_char(PER_GSP_STEP_RATES_STEP_ID[l_index])  )
  L_temp = SET_LOG ('Rate Value step name  loop ' + PER_GSP_STEP_RATES_STEP_NAME[l_index]  )
   IF (PER_GSP_STEP_RATES_STEP_ID[l_index] = CMP_IV_GRADE_STEP_ID  ) THEN (
        L_temp = SET_LOG ('selected Rate Value in loop ' + PER_GSP_STEP_RATES_VALUE_VALUE[l_index]  )
        l_rate_value  =  PER_GSP_STEP_RATES_VALUE_VALUE[l_index]
       EXIT
   )
  l_index = PER_GSP_STEP_RATES_VALUE_VALUE.NEXT(l_index ,-1) 

)
)


Hope this section helped you understand how to use Grade/Step Rates values for incrementing Salary.  

This is only a sample formula and is meant to be a guideline. If you are using any of the above code, you need to test it to check  if it matches your specific requirements.