How to enable salary advance for UAE legislation
1.1 1.1
Scope cope for for th this Doc Docume ument
There . is a requirement requirement for providing a setup setup that can be used for Salary Salary Advance processing in UAE Localization Localization The Salary Advance Processing will consider the salary administrator calculation for terminated employees and new hire Salary Advance Processing Processing – In this document we will be considering the setup that needs to be set for enabling t he Salary Advance processing.
1.2 1.2
Purpo urpose se of this this Doc Docume ument
Enable "Salary Advance" requirements for UAE localization Business Requirements Overview
1.3
For UAE, it is proposed to provide a solution that will enable us to process the Salary Advance for an employee
1.4
So lu lution analysis
1.3
So lu lution Overview
the advance
Will pay a salary advance unless the employee is being terminated in the same period hence it will cancel with a warning message. Recovery of the advance is made through the monthly salary formula
PS. : Monthly installments deduction for advanced payment will will be flat value (50%) from monthly salary, modification may happen to enable user to determine the value that require to be deducted for every month
1.4
Solution Model
1.4.1
Ele m meents
For supporting "Salary Advance" processing the following elements need to be present. Salary Advance .1 This element will will drive the "Salary "Salary Advance" Advance" amount after validating it through through attached formula This will be a Nonrecurring Nonrecurring element attached attached to an employee employee for whom whom the" Salary Advance" needs to be processed. This element will will be used for payment of "Salary "Salary Advance" Advance" upon Request Request this element will have classification of ‘Earning’.
Element Name Descri Descripti ption on
Primary Classification Standard Reporting Name Effective Start Date
Salary Advance Advanc Advancee of salary salary.. Recov Recovery ery is made made in the the Monthly Salary formula
EARNINIG N Salary Advance JAN-0001-01 Processing – Standard Type Nonrecurring Termination Last Standard Process Multiple Entries Y Allowed Additional Entry N Allowed Closed for Entry N Process in Run Y Indirect Results N Adjustment Only N Third Party Payment N Priority 1550 Skip Rule NULL Currency Input AED
1
Element Name
Salary Advance
Output
AED
There will be two input values for this element. Advanced Amount, Pay Value, Will hold the advanced amount if employee was eligible to take it.
Input Values
Name Units Sequence Required User Enterable Database Item Hot Default Default Lookup Formula Minimum Maximum Warning/Error Effective Start Date
Advanced Amount
Pay Value
Money
Money
1 Y Y Y N NULL NULL NULL NULL NULL NULL JAN--01 0001
2 N Y Y N NULL NULL NULL NULL NULL NULL JAN-0001-01
2. Salary Advance Deduction
This element will be used for deduct the accrued 'Salary Advance'. This element will have classification of 'Voluntary Deductions'. This will be an indirect element fed by the monthly salary formula. Depending on the employee status, the formula will calculate the 'Salary Advance deduction' for each month and decrease it to the accrued amount.
Element Name Description
Primary Classification Standard Reporting Name Effective Start Date Type Termination Multiple Entries Allowed Additional Entry Allowed Closed for Entry Process in Run Indirect Results Adjustment Only Third Party Payment Priority Skip Rule
Salary Advance Deduction Recovers the salary advance from the amount passed from the monthly salary formula at a .rate of half the salary per period Voluntary Deductions N Salary Advance Deduction JAN-0001-01 Processing – Standard nonrecurring Last Standard Process Y N N Y Y N N 10500 null Currency
Input Output
AED AED
There will be one input value for this element. Pay Value - will hold the monthly deduction. Input Values
Name Units Sequence Required 2
Pay Value Money
1 N
User Enterable Y Database Item Y Hot Default N Default NULL Lookup NULL Formula NULL Minimum NULL Maximum NULL Warning/Error NULL Effective Start Date JAN-0001-01
Monthly Salary This element will be to determine the basic salary for this employee as it will be salary basis which will be the subject for 'Salary Advance deduction'. This element will have classification of 'Earning'. This will be direct element fed by the monthly salary formula. Element Name Description Primary Classification Standard Reporting Name Effective Start Date Type Termination Multiple Entries Allowed Additional Entry Allowed Closed for Entry Process in Run Indirect Results Adjustment Only Third Party Payment Priority Skip Rule Input Output
Monthly Salary Monthly Salary used for Monthly Salary in .Salary Administration Earnings N Monthly Salary JAN-0001-01 Processing – Standard Recurring Last Standard Process N N N Y N N N 1500 AE_ONCE_EACH_PERIOD Currency AED AED
Input Values
Name Units Sequence Required User Enterable Database Item Hot Default Default Lookup Formula Minimum Maximum Warning/Error Effective Start Date
1.
Monthly Amount
Pay Value
Money
Money
1 y y y N NULL NULL NULL NULL NULL NULL JAN--01 0001
2 N Y Y N NULL NULL NULL NULL NULL NULL JAN-0001-01
Balance New Balance:
Salary Advance This balance will hold the Salary Advance amount that PAID
3
Name Units Currency Use for Remuneration Element Classification Feed(s) Element Feed(s)
Salary Advance Money AED No Salary Advance (Pay Value) Add Salary Advance Deduction (Pay Value) Subtract
Dimension(s)
_ASG_ ITD
Name Units Currency Use for Remuneration Element Classification Feed(s) Element Feed(s)
Total Pay Money AED No Monthly Salary (Pay Value) Add Salary Advance (Pay Value) Add Salary Advance Deduction (Pay Value) Subtract Payments
:Seeded Balance
Dimension(s)
Name Units Currency Use for Remuneration Element Classification Feed(s) Element Feed(s)
Net Money AED No Monthly Salary (Pay Value) Add Salary Advance (Pay Value) ADD Salary Advance Deduction (Pay Value) Subtract _ASG_ Run
Dimension(s)
Formula Result SALARY_ADVANCE (1
Advance of salary. Recovery is made in the Monthly Salary formula :Processing Rules Standard/ SALARY_ADVANCE
( Name (Return Item
type
Element
Input Value
ADV_AMOUNT PAID_MSG TERM_MSG
Direct result Message Message
Salary Advance
Pay Value
units
Message severity
money Information Warning
2) Monthly Salary Monthly Salary used for Monthly Salary in Salary Administration :Processing Rules Standard/ Monthly_ SALARY
( Name (Return Item
type
NEW _HIRE_MSG PRORATION_MSG SALARY SAL_ADV_DED
Message Message Direct result Indirect result
SAL_ADV_MSG TERMINATE_MSG
Message Message
Formula :
1) SALARY_ADVANCE 4
Element
Input Value
units
Monthly Salary Salary Advance Deduction
Pay Value Pay Value
money money
Message severity Information Information
Information Information
Type: Oracle Payroll
Desc: Salary advance formula that pays advances unless the employee is being terminated in the same period.
/************************************************************** UAE Payroll Formula Salary Advance This formula will pay a salary advance unless the Employee is being terminated in the same period Whence it will cancel the advance with a warning Message. Recovery of the advance is made through the monthly salary formula **************************************************************/ default for PAY_PROC_PERIOD_START_DATE is '1900/01/01 00:00:00' (date) default for PAY_PROC_PERIOD_END_DATE is '1900/01/01 00:00:00' (date) default for EMP_TERM_DATE is '4712/12/31 00:00:00' (date) Inputs are advanced_amount /************************************************************** Initialise any local variables **************************************************************/ adv_amount = advanced_amount term_msg = 'Salary Advance: Advance of ' + to_text(advanced_amount) + ' AED, is being made in same period as termination – cancelled' paid_msg = 'Salary Advance: Advance of ' + to_text(advanced_amount) + ' AED made this period. Recovery starts next period' /************************************************************** check if the advance is being made in the same period as the employee is being terminated. If so cancel it with a message **************************************************************/ IF ( EMP_TERM_DATE <= PAY_PROC_PERIOD_END_DATE and EMP_TERM_DATE >= PAY_PROC_PERIOD_START_DATE ) THEN return term_msg ELSE return adv_amount, paid_msg
2) MONTHLY_SALARY Type: Oracle Payroll
Desc: Monthly Salary formula for UAE. /************************************************************** UAE Payroll Formula Monhtly Salary Based on Salary Administration This formula will pay the monthly salary as entered in salary administration. It will also pro rate for starters, leavers and part timers. A check is made for a salary advance and will calculate the recovery amount as 50% of salary which ever is the lower. **************************************************************/ Default for PAY_PROC_PERIOD_START_DATE Default for PAY_PROC_PERIOD_END_DATE Default for EMP_HIRE_DATE Default for EMP_TERM_DATE Default for ASG_HOURS
is '0001/01/01 00:00:00'(date) is '0001/01/01 00:00:00'(date) is '0001/01/01 00:00:00'(date) is '0001/01/01 00:00:00'(date) is 37.5
Inputs are monthly_amount /************************************************************** Initialise **************************************************************/ ptime_factor =round(ASG_HOURS/37.5,4)
5
salary
= round(monthly_amount*ptime_factor,2)
ee_period_start_ann_salary ee_period_end_ann_salary sal_adv_ded sal_adv_arrears sal_adv_bal
=0 =0 =0 =0 =0
proration_msg ='' new_hire_msg ='' terminate_msg ='' sal_adv_msg ='' /************************************************************** msg_flag is used to determine what messages if any are to be returned in the return section at the end. This is done so that unwanted messages do not appear as blanks. It is incremented by a number each time a condition is detected, the sum of which indicates which messages are to be returned 1 = Monthly Salary Only 10 = New Hire 100 = End Employment 1000 = Salary Advance Present **************************************************************/ msg_flag = 1 days_in_payroll_period = get_working_days (PAY_PROC_PERIOD_START_DATE, PAY_PROC_PERIOD_END_DATE) ee_period_start_date = PAY_PROC_PERIOD_START_DATE ee_period_end_date = PAY_PROC_PERIOD_END_DATE /************************************************************** Test for New Hire **************************************************************/ IF ( EMP_HIRE_DATE and EMP_HIRE_DATE
> PAY_PROC_PERIOD_START_DATE < PAY_PROC_PERIOD_END_DATE
) THEN ( msg_flag new_hire_msg new_hire_msg ee_period_start_date
= msg_flag + 10 = 'Salary - ' = new_hire_msg + 'New Starter ' + to_text(EMP_HIRE_DATE, 'DD-Mon-YYYY') + '. Welcome to UAE.' = EMP_HIRE_DATE
) /************************************************************** Test for Termination **************************************************************/ IF ( EMP_TERM_DATE and EMP_TERM_DATE
> PAY_PROC_PERIOD_START_DATE < PAY_PROC_PERIOD_END_DATE
) THEN ( msg_flag terminate_msg terminate_msg ee_period_end_date
= msg_flag + 100 = 'Salary - ' = terminate_msg + 'Leaver ' + to_text(EMP_TERM_DATE, 'DD-Mon-YYYY') +'. Bye bye from UAE.' = EMP_TERM_DATE
) /************************************************************** Pro rate for new hire or termination. If salary change subsequently determined, then recalculate salary proration **************************************************************/ IF ( new_hire_msg or terminate_msg
!= ' ' !=' '
) THEN ( days_worked salary proration_msg proration_msg
= get_working_days (ee_period_start_date, ee_period_end_date) = round(salary * days_worked/days_in_payroll_period,2) = 'Salary - ' = proration_msg + 'You have been paid for ' + to_text(days_worked) + ' working days.'
) /************************************************************** Check for Salary Advance If the person is terminated in the period then try to recover the entire outstanding balance else take half of the available salary or the outstanding balance, which ever is smaller.
6
**************************************************************/ IF SALARY_ADVANCE_ASG_ITD > 0 THEN ( msg_flag = msg_flag + 1000 IF ( EMP_TERM_DATE and EMP_TERM_DATE ) THEN ( sal_adv_ded sal_adv_arrears sal_adv_msg ) ELSE ( sal_adv_ded sal_adv_bal sal_adv_msg )
>= PAY_PROC_PERIOD_START_DATE <= PAY_PROC_PERIOD_END_DATE
= least(SALARY_ADVANCE_ASG_ITD, salary) = least(0,(salary - SALARY_ADVANCE_ASG_ITD)) * -1 = 'Leaver. Salary advance recovered = ' + to_text(sal_adv_ded) + ' AED, arrears = ' + to_text(sal_adv_arrears) + ' AED.'
= least(SALARY_ADVANCE_ASG_ITD, salary/2) /* 50% from monthly salary */ = SALARY_ADVANCE_ASG_ITD - sal_adv_ded = 'Salary advance deduction = ' + to_text(sal_adv_ded) + ' AED, outstanding balance = ' + to_text(sal_adv_bal) + ' AED.'
)
/************************************************************** Return Section **************************************************************/ IF msg_flag
=1
THEN return
salary
ELSE IF msg_flag
= 11
THEN return
salary, new_hire_msg, proration_msg
ELSE IF msg_flag
= 101
THEN return
salary, terminate_msg, proration_msg
ELSE IF msg_flag
= 111
THEN return
salary, new_hire_msg, terminate_msg, proration_msg
ELSE IF msg_flag
=1001
THEN return
salary, sal_adv_ded, sal_adv_msg
IF msg_flag
= 1011
THEN return
salary, new_hire_msg, proration_msg, sal_adv_ded, sal_adv_msg
ELSE IF msg_flag
=1101
THEN return
salary, terminate_msg, proration_msg, sal_adv_ded, sal_adv_msg
ELSE IF msg_flag
= 1111
THEN return
.
7
salary, new_hire_msg, terminate_msg, proration_msg, sal_adv_ded, sal_adv_msg