Designing IA for AI - Information Architecture Conference 2024
UAE Advanced Salary
1. 1
How to enable salary advance for UAE legislation
1.1 Scope for this Document
There is a requirement for providing a setup that can be used for Salary Advance processing in UAE Localization.
The Salary Advance Processing will consider the salary administrator calculation for terminated employees and new hire
Salary Advance Processing – In this document we will be considering the setup that needs to be set for enabling the Salary Advance
processing.
1.2 Purpose of this Document
Enable "Salary Advance" requirements for UAE localization
1.3 Business Requirements Overview
For UAE, it is proposed to provide a solution that will enable us to process the Salary Advance for an employee
1.4 Solution analysis
1.5 Solution Overview
Will pay a salary advance unless the employee is being terminated in the same period hence it will cancel the advance
with a warning message. Recovery of the advance is made through the monthly salary formula
PS. : Monthly installments deduction for advanced payment 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.6 Solution Model
1.6.1 Elements
For supporting "Salary Advance" processing the following elements need to be present.
1. Salary Advance
This element will drive the "Salary Advance" amount after validating it through attached formula
This will be a Nonrecurring element attached to an employee for whom the" Salary Advance" needs to be processed.
This element will be used for payment of "Salary Advance" upon Request this element will have classification of
‘Earning’.
Element Name Salary Advance
Description Advance of salary. Recovery is made in the
Monthly Salary formula
Primary Classification EARNINIG
Standard N
Reporting Name Salary Advance
Effective Start Date 01-JAN-0001
Processing – Standard
Type Nonrecurring
Termination Last Standard Process
Multiple Entries
Allowed
Y
Additional Entry
Allowed
N
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
Output AED
2. 2
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 Advanced
Amount
Pay Value
Units Money Money
Sequence 1 2
Required Y N
User Enterable Y Y
Database Item Y Y
Hot Default N N
Default NULL NULL
Lookup NULL NULL
Formula NULL NULL
Minimum NULL NULL
Maximum NULL NULL
Warning/Error NULL NULL
Effective Start Date 01-JAN-
0001
01-JAN-
0001
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 Salary Advance Deduction
Description Recovers the salary advance from the amount
passed from the monthly salary formula at a
rate of half the salary per period
.
Primary Classification Voluntary Deductions
Standard N
Reporting Name Salary Advance Deduction
Effective Start Date 01-JAN-0001
Processing – Standard
Type nonrecurring
Termination Last Standard Process
Multiple Entries
Allowed
Y
Additional Entry
Allowed
N
Closed for Entry N
Process in Run Y
Indirect Results Y
Adjustment Only N
Third Party Payment N
Priority 10500
Skip Rule null
Currency
Input AED
Output AED
There will be one input value for this element. Pay Value - will hold the monthly deduction.
Input Values
Name Pay Value
Units Money
Sequence 1
Required N
User Enterable Y
Database Item Y
Hot Default N
Default NULL
Lookup NULL
Formula NULL
Minimum NULL
Maximum NULL
Warning/Error NULL
3. 3
Effective Start Date 01-JAN-
0001
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 Monthly Salary
Description Monthly Salary used for Monthly Salary in
Salary Administration
.
Primary Classification Earnings
Standard N
Reporting Name Monthly Salary
Effective Start Date 01-JAN-0001
Processing – Standard
Type Recurring
Termination Last Standard Process
Multiple Entries
Allowed
N
Additional Entry
Allowed
N
Closed for Entry N
Process in Run Y
Indirect Results N
Adjustment Only N
Third Party Payment N
Priority 1500
Skip Rule AE_ONCE_EACH_PERIOD
Currency
Input AED
Output AED
Input Values
Name Monthly
Amount
Pay Value
Units Money Money
Sequence 1 2
Required y N
User Enterable y Y
Database Item y Y
Hot Default N N
Default NULL NULL
Lookup NULL NULL
Formula NULL NULL
Minimum NULL NULL
Maximum NULL NULL
Warning/Error NULL NULL
Effective Start Date 01-JAN-
0001
01-JAN-
0001
1. Balance
New Balance:
Salary Advance
This balance will hold the Salary Advance amount that PAID
Name Salary Advance
Units Money
Currency AED
Use for Remuneration No
Element Classification Feed(s) -
Element Feed(s) Salary Advance (Pay Value) Add
Salary Advance Deduction (Pay Value) Subtract
Dimension(s) _ASG_ITD
4. 4
Seeded Balance:
Name Total Pay
Units Money
Currency AED
Use for Remuneration No
Element Classification Feed(s) -
Element Feed(s) Monthly Salary (Pay Value) Add
Salary Advance (Pay Value) Add
Salary Advance Deduction (Pay Value) Subtract
Dimension(s) Payments
Name Net
Units Money
Currency AED
Use for Remuneration No
Element Classification Feed(s) -
Element Feed(s) Monthly Salary (Pay Value) Add
Salary Advance (Pay Value) ADD
Salary Advance Deduction (Pay Value) Subtract
Dimension(s) _ASG_Run
Formula Result
1) SALARY_ADVANCE
Advance of salary. Recovery is made in the Monthly Salary formula
Processing Rules:
Standard/ SALARY_ADVANCE
Name (Return Item) type Element Input Value units Message
severity
ADV_AMOUNT Direct result Salary Advance Pay Value money
PAID_MSG Message Information
TERM_MSG Message Warning
2) Monthly Salary
Monthly Salary used for Monthly Salary in Salary Administration
Processing Rules:
Standard/ Monthly_ SALARY
Name (Return Item) type Element Input Value units Message
severity
NEW_HIRE_MSG Message Information
PRORATION_MSG Message Information
SALARY Direct result Monthly Salary Pay Value money
SAL_ADV_DED Indirect result Salary Advance
Deduction
Pay Value money
SAL_ADV_MSG Message Information
TERMINATE_MSG Message Information
Formula :
1) SALARY_ADVANCE
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
5. 5
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 is '0001/01/01 00:00:00'(date)
Default for PAY_PROC_PERIOD_END_DATE is '0001/01/01 00:00:00'(date)
Default for EMP_HIRE_DATE is '0001/01/01 00:00:00'(date)
Default for EMP_TERM_DATE is '0001/01/01 00:00:00'(date)
Default for ASG_HOURS is 37.5
Inputs are monthly_amount
/**************************************************************
Initialise
**************************************************************/
ptime_factor =round(ASG_HOURS/37.5,4)
salary = round(monthly_amount*ptime_factor,2)
ee_period_start_ann_salary = 0
ee_period_end_ann_salary = 0
sal_adv_ded = 0
sal_adv_arrears = 0
sal_adv_bal = 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
6. 6
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 > PAY_PROC_PERIOD_START_DATE
and
EMP_HIRE_DATE < PAY_PROC_PERIOD_END_DATE
)
THEN
(
msg_flag = msg_flag + 10
new_hire_msg = 'Salary - '
new_hire_msg = new_hire_msg + 'New Starter ' + to_text(EMP_HIRE_DATE, 'DD-Mon-YYYY') + '. Welcome to UAE.'
ee_period_start_date = EMP_HIRE_DATE
)
/**************************************************************
Test for Termination
**************************************************************/
IF
(
EMP_TERM_DATE > PAY_PROC_PERIOD_START_DATE
and
EMP_TERM_DATE < PAY_PROC_PERIOD_END_DATE
)
THEN
(
msg_flag = msg_flag + 100
terminate_msg = 'Salary - '
terminate_msg = terminate_msg + 'Leaver ' + to_text(EMP_TERM_DATE, 'DD-Mon-YYYY') +'. Bye bye from UAE.'
ee_period_end_date = 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 = get_working_days (ee_period_start_date, ee_period_end_date)
salary = round(salary * days_worked/days_in_payroll_period,2)
proration_msg = 'Salary - '
proration_msg = 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.
**************************************************************/
IF
SALARY_ADVANCE_ASG_ITD > 0
THEN
(
msg_flag = msg_flag + 1000
IF
(
EMP_TERM_DATE >= PAY_PROC_PERIOD_START_DATE
and
EMP_TERM_DATE <= PAY_PROC_PERIOD_END_DATE
)
THEN
(
7. 7
sal_adv_ded = least(SALARY_ADVANCE_ASG_ITD, salary)
sal_adv_arrears = least(0,(salary - SALARY_ADVANCE_ASG_ITD)) * -1
sal_adv_msg = 'Leaver. Salary advance recovered = ' + to_text(sal_adv_ded) + ' AED, arrears = ' + to_text(sal_adv_arrears) + ' AED.'
)
ELSE
(
sal_adv_ded = least(SALARY_ADVANCE_ASG_ITD, salary/2) /* 50% from monthly salary */
sal_adv_bal = SALARY_ADVANCE_ASG_ITD - sal_adv_ded
sal_adv_msg = '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 salary, new_hire_msg, terminate_msg, proration_msg, sal_adv_ded, sal_adv_msg
.