[Home] [Help]
PACKAGE BODY: APPS.CREATE_GB_RTI_EPS_RECORD
Source
1 PACKAGE Body Create_GB_RTI_EPS_RECORD
2 /* $Header: pygbrtieps.pkb 120.0.12020000.13 2012/12/31 10:38:28 ssarap noship $ */
3 AS
4
5 g_package VARCHAR2(50) := 'Create_GB_RTI_EPS_RECORD';
6 L_EFF_START_DATE DATE;
7 G_SMP_SAP_RATE NUMBER :=0;
8 G_SSP_RATE NUMBER :=0;
9 G_NIC_RATE NUMBER :=0;
10 g_paye_reference VARCHAR2(50);
11 G_BUSINESS_GROUP_ID NUMBER;
12 g_related_tax_year VARCHAR2(4);
13 g_employers_name VARCHAR2(35);
14 g_econ_number VARCHAR2(35);
15 g_acc_ref_no VARCHAR2(35);
16 g_service_provider VARCHAR2(1);
17 G_SMP_RECOVERY VARCHAR2(15) := 'Partial';
18 G_SSP_RECOVERY VARCHAR2(15) := 'No';
19 G_APPROVER_ID NUMBER;
20 G_user_ID NUMBER;
21 GLOBAL_MISSING EXCEPTION;
22 MANDATORY_VALUES_MISSING EXCEPTION;
23 EPS_ALREADY_PRESENT EXCEPTION;
24 g_ssp_id pay_defined_balances.defined_balance_id%TYPE;
25 g_smp_id pay_defined_balances.defined_balance_id%TYPE;
26 g_sap_id pay_defined_balances.defined_balance_id%TYPE;
27 g_spp_adopt_id pay_defined_balances.defined_balance_id%TYPE;
28 g_spp_birth_id pay_defined_balances.defined_balance_id%TYPE;
29 g_aspp_adopt_id pay_defined_balances.defined_balance_id%TYPE;
30 G_ASPP_BIRTH_ID PAY_DEFINED_BALANCES.DEFINED_BALANCE_ID%TYPE;
31
32 PROCEDURE get_globals
33 IS
34 --This is to fetch details from Organisation Details.
35 CURSOR c_org_details
36 IS
37 SELECT NVL(upper(SUBSTR(trim(hoi.org_information3),1,35)),' ') l_EMPLOYERS_NAME,
38 NVL(upper(SUBSTR(trim(hoi.org_information7),1,35)),' ') l_econ_number,
39 NVL(upper(SUBSTR(hoi.org_information6,1,35)),' ') l_acc_ref_no,
40 NVL(substr(TRIM(HOI.ORG_INFORMATION19),1,1),'N') L_SERVICE_PROVIDER,
41 NVL(TRIM(HOI.ORG_INFORMATION16),'Partial') L_SMP_RECOVERY,
42 NVL(TRIM(HOI.ORG_INFORMATION17),'None') L_SSP_RECOVERY,
43 TRIM(HOI.ORG_INFORMATION18) L_APPROVER_ID
44 FROM hr_organization_information hoi
45 WHERE hoi.organization_id = g_business_group_id
46 AND hoi.org_information_context = 'Tax Details References'
47 AND NVL(HOI.ORG_INFORMATION10,'UK') = 'UK'
48 AND hoi.org_information1 = g_paye_reference;
49
50 CURSOR c_globals(p_global_name1 VARCHAR2,p_global_name2 VARCHAR2,p_global_name3 VARCHAR2)
51 IS
52 SELECT MAX(DECODE(GLOBAL_NAME,P_GLOBAL_NAME1,GLOBAL_VALUE,NULL)) L_SMP_SAP_RATE,
53 MAX(DECODE(GLOBAL_NAME,p_global_name2,GLOBAL_VALUE,NULL)) l_ssp_rate,
54 MAX(DECODE(GLOBAL_NAME,p_global_name3,GLOBAL_VALUE,NULL)) l_nic_rate
55 FROM FF_GLOBALS_F
56 WHERE GLOBAL_NAME IN (p_global_name1, p_global_name2,p_global_name3)
57 AND L_EFF_START_DATE BETWEEN EFFECTIVE_START_DATE AND EFFECTIVE_END_DATE;
58
59 -- get the defined balance id for specified balance and dimension
60 CURSOR get_defined_balance_id (p_balance_name VARCHAR2, p_dimension_name VARCHAR2)
61 IS
62 SELECT defined_balance_id
63 FROM pay_defined_balances db,
64 pay_balance_types b,
65 pay_balance_dimensions d
66 WHERE b.balance_name = p_balance_name
67 AND d.dimension_name = p_dimension_name
68 AND db.balance_type_id = b.balance_type_id
69 AND db.balance_dimension_id = d.balance_dimension_id;
70 --
71 BEGIN
72 HR_UTILITY.TRACE(' Entered Fetch Globals ');
73 OPEN c_org_details;
74 FETCH c_org_details
75 INTO g_employers_name,
76 g_econ_number,
77 g_acc_ref_no,
78 g_service_provider,
79 g_smp_recovery,
80 G_SSP_RECOVERY,
81 G_APPROVER_ID;
82 CLOSE c_org_details;
83
84
85 HR_UTILITY.TRACE(' Employer Name '||G_EMPLOYERS_NAME);
86 HR_UTILITY.TRACE(' Econ Number '||G_ECON_NUMBER);
87 HR_UTILITY.TRACE(' Account Office Number '||G_ACC_REF_NO);
88 HR_UTILITY.TRACE(' Service provider '||G_SERVICE_PROVIDER);
89 HR_UTILITY.TRACE(' SMP Recovery '||G_SMP_RECOVERY);
90 HR_UTILITY.TRACE(' SSP RECOVERY '||G_SSP_RECOVERY);
91 HR_UTILITY.TRACE(' APPROVER ID '||G_APPROVER_ID);
92 --13955276 Commented to handle validation in the create method
93 --13741983 begin
94 /*
95 if g_employers_name = ' ' or g_employers_name is null then
96 HR_UTILITY.TRACE('Error: The Employer name is missing.');
97 fnd_file.put_line(fnd_file.LOG,'Error: The Employer name is missing.');
98 RAISE MANDATORY_VALUES_MISSING;
99 elsif PAY_GB_RTI.validate_input(g_employers_name,'EMP_NAME') > 0 then
100 HR_UTILITY.TRACE('Error: The Employer name has invalid characters.');
101 fnd_file.put_line(fnd_file.LOG,'Error: The Employer name has invalid characters.');
102 RAISE MANDATORY_VALUES_MISSING;
103 end if;
104
105 if g_acc_ref_no = ' ' or g_acc_ref_no is null then
106 HR_UTILITY.TRACE('Error: The Account Office Reference Number is missing.');
107 fnd_file.put_line(fnd_file.LOG,'Error: The Account Office Reference Number is missing.');
108 RAISE MANDATORY_VALUES_MISSING;
109 elsif (length(g_acc_ref_no) > 13
110 OR REGEXP_INSTR(g_acc_ref_no,'^([[:digit:]]{1,3})P([[:alpha:]]{1})([[:digit:]]{1,7})([[:digit:]]|X)$') = 0 ) THEN
111 HR_UTILITY.TRACE('Error: Incorrect format entered for Accounts Office Ref Num field. Valid format is NNNPANNNNNNNX.');
112 fnd_file.put_line(fnd_file.LOG,'Error: Incorrect format entered for Accounts Office Ref Num field. Valid format is NNNPANNNNNNNX.');
113 RAISE MANDATORY_VALUES_MISSING;
114 end if;
115 --13741983 End
116 */
117
118 OPEN C_GLOBALS('SMP_RECOVERY_PERCENTAGE','SSP_RECOVERY_PERCENTAGE', 'NIC_COMPENSATION_RATE_ON_SMP');
119 FETCH C_GLOBALS INTO G_SMP_SAP_RATE,G_SSP_RATE, G_NIC_RATE;
120 IF C_GLOBALS%NOTFOUND THEN
121 CLOSE c_globals;
122 RAISE GLOBAL_MISSING;
123 END IF;
124 CLOSE C_GLOBALS;
125
126 HR_UTILITY.TRACE(' SMP_RECOVERY_PERCENTAGE '||G_SMP_SAP_RATE);
127 HR_UTILITY.TRACE(' SSP_RECOVERY_PERCENTAGE '||G_SSP_RATE);
128 HR_UTILITY.TRACE(' NIC_COMPENSATION_RATE_ON_SMP '||G_NIC_RATE);
129
130 --
131 OPEN get_defined_balance_id('SSP Total','_ASG_TD_YTD');
132 FETCH get_defined_balance_id INTO g_ssp_id;
133 CLOSE get_defined_balance_id;
134 --
135 OPEN get_defined_balance_id('SMP Total','_ASG_TD_YTD');
136 FETCH get_defined_balance_id INTO g_smp_id;
137 CLOSE get_defined_balance_id;
138 --
139 OPEN get_defined_balance_id('SAP Total','_ASG_TD_YTD');
140 FETCH get_defined_balance_id INTO g_sap_id;
141 CLOSE get_defined_balance_id;
142 --
143 OPEN get_defined_balance_id('SPP Adoption Total','_ASG_TD_YTD');
144 FETCH get_defined_balance_id INTO g_spp_adopt_id;
145 CLOSE get_defined_balance_id;
146 --
147 OPEN get_defined_balance_id('SPP Birth Total','_ASG_TD_YTD');
148 FETCH get_defined_balance_id INTO g_spp_birth_id;
149 CLOSE get_defined_balance_id;
150 --
151 OPEN get_defined_balance_id('ASPP Adoption Total','_ASG_TD_YTD');
152 FETCH get_defined_balance_id INTO g_aspp_adopt_id;
153 CLOSE get_defined_balance_id;
154 --
155 OPEN get_defined_balance_id('ASPP Birth Total','_ASG_TD_YTD');
156 FETCH get_defined_balance_id INTO g_aspp_birth_id;
157 CLOSE get_defined_balance_id;
158 --
159 END get_globals;
160 PROCEDURE Create_EPS_RECORD(
161 errbuf OUT nocopy VARCHAR2,
162 RETCODE OUT NOCOPY NUMBER,
163 p_paye_reference IN VARCHAR2,
164 p_effective_dt IN VARCHAR2,
165 p_business_group_id IN NUMBER )
166 IS
167 --
168 l_date_soy DATE;
169 l_date_eoy DATE;
170 l_dummy VARCHAR2(1);
171 l_calculate_ssp BOOLEAN := TRUE;
172 l_calculate_smp BOOLEAN := TRUE;
173 l_nic_ssp_rate NUMBER;
174 l_nic_smp_rate NUMBER;
175 l_smp NUMBER(15) :=0;
176 l_ssp NUMBER(15) :=0;
177 l_sap NUMBER(15) :=0;
178 l_spp_adopt NUMBER(15) :=0;
179 l_spp_birth NUMBER(15) :=0;
180 l_spp NUMBER(15) :=0;
181 l_aspp_adopt NUMBER(15) :=0;
182 l_aspp_birth NUMBER(15) :=0;
183 l_aspp NUMBER(15) :=0;
184 l_nic_ssp NUMBER(15) := 0;
185 l_nic_smp NUMBER(15) := 0;
186 l_nic_sap NUMBER(15) := 0;
187 l_nic_spp NUMBER(15) := 0;
188 l_nic_aspp NUMBER(15) := 0;
189 L_MSG_OUTPUT VARCHAR2(200);
190 L_CREATER_ID NUMBER;
191 --Check if already EPS record exists for PAYE reference and Effective date combination
192 CURSOR c_check_eps
193 IS
194 SELECT 1
195 FROM PAY_GB_EPS_DETAILS
196 WHERE EFFECTIVE_DATE = l_eff_start_date
197 AND EMP_PAYE_REFERENCE = p_paye_reference
198 AND BUSINESS_GROUP_ID = p_business_group_id;
199
200 --To fetch the assignment actions in the current financial year for all assignments
201 --for the selected payrolls in the given PAYE reference
202 CURSOR c_lat_assignment_actions
203 IS
204 SELECT
205 /*+ USE_NL(paa, pact, ptp) */
206 to_number(SUBSTR(MAX(lpad(paa.action_sequence,15,'0')
207 || paa.assignment_action_id),16)) lat_assignment_action_id,
208 MAX(pact.effective_date) effective_date,
209 paa.assignment_id
210 FROM pay_assignment_actions paa,
211 pay_payroll_actions pact
212 WHERE paa.payroll_action_id = pact.payroll_action_id
213 AND pact.action_type IN ('Q','R','B','I','V')
214 AND paa.action_status IN ('C','S')
215 AND pact.effective_date BETWEEN l_date_soy AND l_eff_start_date
216 AND pact.payroll_id IN
217 (
218 -- Effective date, Business_group_id, PAYE reference, tax_year_start and Tax_year_end
219 -- To fetch all payrolls belonging to this PAYE reference.
220 SELECT DISTINCT papf.payroll_id
221 FROM pay_all_payrolls_f papf,
222 hr_soft_coding_keyflex flex,
223 per_time_periods ptp
224 WHERE papf.soft_coding_keyflex_id = flex.soft_coding_keyflex_id
225 AND flex.segment1 = p_paye_reference
226 AND flex.segment10 IS NOT NULL
227 AND papf.business_group_id = p_business_group_id
228 AND ptp.payroll_id = papf.payroll_id
229 AND l_eff_start_date BETWEEN papf.effective_start_date AND papf.effective_end_date
230 AND ptp.regular_payment_date BETWEEN l_date_soy AND l_date_eoy
231 )
232 GROUP BY assignment_id;
233
234 cursor csr_get_request_details is
235 select PROGRAM_APPLICATION_ID,CONCURRENT_PROGRAM_ID,LAST_UPDATE_DATE from fnd_concurrent_requests
236 where request_id = FND_GLOBAL.CONC_REQUEST_ID;
237
238 l_request_rec csr_get_request_details%rowtype;
239
240 BEGIN
241 -- HR_UTILITY.TRACE_ON(NULL,'gag');
242 HR_UTILITY.TRACE('Create_EPS_RECORD Started '||to_char(sysdate,'dd-mon-yyyy hh24:mm:ss'));
243 G_PAYE_REFERENCE := P_PAYE_REFERENCE;
244 g_business_group_id := p_business_group_id;
245 HR_UTILITY.TRACE(' Eff Date: '||P_EFFECTIVE_DT);
246 HR_UTILITY.TRACE(' PAYE ref :'||P_PAYE_REFERENCE);
247 HR_UTILITY.TRACE(' Business group id '||p_business_group_id);
248 L_EFF_START_DATE := FND_DATE.CANONICAL_TO_DATE(P_EFFECTIVE_DT);
249 HR_UTILITY.TRACE(' Eff Date: '||L_EFF_START_DATE);
250 IF L_EFF_START_DATE >= to_date('06-04-'||SUBSTR(TO_CHAR(l_eff_start_date,'YYYY/MON/DD'),1,4),'DD-MM-YYYY' ) THEN
251 l_date_soy := to_date('06-04-'||SUBSTR(TO_CHAR(l_eff_start_date,'YYYY/MON/DD'),1,4),'DD-MM-YYYY' ) ;
252 l_date_eoy := to_date('05-04-'||TO_CHAR(to_number(SUBSTR(TO_CHAR(l_eff_start_date,'YYYY/MON/DD'),1,4))+1 ),'DD-MM-YYYY') ;
253 ELSE
254 l_date_soy := to_date('06-04-'||TO_CHAR(to_number(SUBSTR(TO_CHAR(l_eff_start_date,'YYYY/MON/DD'),1,4))-1 ),'DD-MM-YYYY') ;
255 l_date_eoy := to_date('05-04-'||SUBSTR(TO_CHAR(l_eff_start_date,'YYYY/MON/DD'),1,4),'DD-MM-YYYY') ;
256 END IF;
257 --Check Record Exists
258 OPEN c_check_eps;
259 FETCH c_check_eps INTO l_dummy;
260 IF c_check_eps%FOUND THEN
261 CLOSE c_check_eps;
262 --No need to proceed further
263 --Raise Error message and skip
264 RAISE EPS_ALREADY_PRESENT;
265 END IF;
266 CLOSE c_check_eps;
267 GET_GLOBALS;
268 G_RELATED_TAX_YEAR := TO_CHAR(L_DATE_EOY,'YYYY');
269 -- L_CREATER_ID := FND_GLOBAL.USER_ID;
270 select EMPLOYEE_ID INTO L_CREATER_ID FRom FND_USER
271 WHERE USER_ID = FND_GLOBAL.USER_ID;
272 HR_UTILITY.TRACE(' CREATER_ID '||L_CREATER_ID);
273 l_nic_ssp_rate := G_NIC_RATE;
274 L_NIC_SMP_RATE := G_NIC_RATE;
275 IF g_ssp_recovery = 'None' THEN
276 --No need to calculate SSP balances
277 l_calculate_ssp := FALSE;
278 L_NIC_SSP_RATE :=0;
279 END IF;
280 IF g_smp_recovery = 'None' THEN
281 --No need to calculate SMP, SAP, OSP and ASPP balances
282 l_calculate_smp := FALSE;
283 elsif g_smp_recovery = 'Partial' THEN
284 --NIC balances will be zero
285 l_nic_smp_rate :=0;
286 END IF;
287
288 --Bug 13955276: Call to Validation of Econ Number, PAYE reference
289 IF PAY_GB_EPS.validate(P_PAYE_REFERENCE, G_ACC_REF_NO, G_EMPLOYERS_NAME, G_ECON_NUMBER, G_RELATED_TAX_YEAR)=1 THEN
290 IF L_CALCULATE_SSP OR L_CALCULATE_SMP THEN
291 --Either SSP or SMP calculate should be true.
292 FOR I IN c_lat_assignment_actions
293 LOOP
294 IF L_CALCULATE_SSP THEN
295 l_ssp := l_ssp + 100 * hr_dirbal.get_balance(I.lat_assignment_action_id,g_ssp_id);
296 END IF;
297 IF L_CALCULATE_SMP THEN
298 L_SMP := L_SMP + 100 * HR_DIRBAL.GET_BALANCE(I.lat_assignment_action_id,G_SMP_ID);
299 l_sap := l_sap + 100 * hr_dirbal.get_balance(I.lat_assignment_action_id,g_sap_id);
300 L_SPP_ADOPT := L_SPP_ADOPT + 100 * HR_DIRBAL.GET_BALANCE(I.lat_assignment_action_id,G_SPP_ADOPT_ID);
301 L_SPP_BIRTH := L_SPP_BIRTH + 100 * HR_DIRBAL.GET_BALANCE(I.lat_assignment_action_id,G_SPP_BIRTH_ID);
302 L_ASPP_ADOPT := L_ASPP_ADOPT + 100 * HR_DIRBAL.GET_BALANCE(I.lat_assignment_action_id,G_ASPP_ADOPT_ID);
303 l_aspp_birth := l_aspp_birth + 100 * hr_dirbal.get_balance(I.lat_assignment_action_id,g_aspp_birth_id);
304 END IF;
305 END LOOP;
306 END IF;
307 IF G_SSP_RECOVERY = 'Full' THEN
308 l_ssp := l_ssp * G_SSP_RATE;
309 END IF;
310 IF g_smp_recovery = 'Partial' THEN
311 l_smp := l_smp * g_smp_sap_rate;
312 l_sap := l_sap * g_smp_sap_rate;
313 l_spp_adopt := l_spp_adopt * g_smp_sap_rate;
314 l_spp_birth := l_spp_birth * g_smp_sap_rate;
315 l_aspp_adopt := l_aspp_adopt * g_smp_sap_rate;
316 l_aspp_birth := l_aspp_birth * g_smp_sap_rate;
317 END IF;
318 hr_utility.trace(' Total SSP '||l_ssp);
319 hr_utility.trace(' Total SMP '||l_smp);
320 hr_utility.trace(' Total SAP '||l_sap);
321 hr_utility.trace(' Total OSPPA '||l_spp_adopt);
322 hr_utility.trace(' Total OSPPB '||l_spp_birth);
323 hr_utility.trace(' Total ASPPA '||l_aspp_adopt);
324 hr_utility.trace(' Total ASPPB '||l_aspp_birth);
325 l_spp := l_spp_adopt + l_spp_birth;
326 l_aspp := l_aspp_adopt + l_aspp_birth;
327 hr_utility.trace(' Total OSPP '||l_spp);
328 hr_utility.trace(' Total ASPP '||l_aspp);
329 hr_utility.trace(' NIC SSP Rate '||l_nic_ssp_rate);
330 hr_utility.trace(' NIC SMP Rate '||l_nic_smp_rate);
331 --NIC calculations
332 l_nic_ssp := l_ssp * l_nic_ssp_rate;
333 l_nic_smp := l_smp * l_nic_smp_rate;
334 l_nic_sap := l_sap * l_nic_smp_rate;
335 l_nic_spp := l_spp * l_nic_smp_rate;
336 l_nic_aspp := l_aspp * l_nic_smp_rate;
337 hr_utility.trace(' NIC SSP '||l_nic_ssp);
338 hr_utility.trace(' NIC SMP '||l_nic_smp);
339 hr_utility.trace(' NIC SAP '||l_nic_sap);
340 hr_utility.trace(' NIC OSPP '||l_nic_spp);
341 HR_UTILITY.TRACE(' NIC ASPP '||L_NIC_ASPP);
342
343 open csr_get_request_details;
344 fetch csr_get_request_details into l_request_rec;
345 close csr_get_request_details;
346
347 --Insert EPS record
348 pay_gb_eps.INSERT_EPS_RECORD ( L_EFF_START_DATE, P_PAYE_REFERENCE, G_ACC_REF_NO, p_business_group_id, G_EMPLOYERS_NAME, G_ECON_NUMBER, G_RELATED_TAX_YEAR, G_SMP_SAP_RATE, G_SSP_RATE, G_NIC_RATE, G_SERVICE_PROVIDER,
349 l_smp/100, l_sap/100, l_spp/100, l_aspp/100, l_ssp/100, L_NIC_SMP/100, l_nic_sap/100, l_nic_spp/100, l_nic_aspp/100, L_NIC_SSP/100, 'Saved', L_CREATER_ID, G_APPROVER_ID ,
350 FND_GLOBAL.CONC_REQUEST_ID,l_request_rec.PROGRAM_APPLICATION_ID,l_request_rec.CONCURRENT_PROGRAM_ID,l_request_rec.LAST_UPDATE_DATE);
351
352
353 HR_UTILITY.TRACE(' EPS record insert complete ');
354 --Write Output Information
355 l_msg_output:= ' RTI - Employer Payment Summary - Created ';
356 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, L_MSG_OUTPUT);
357 L_MSG_OUTPUT:= ' ';
358 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, L_MSG_OUTPUT);
359 l_msg_output:= ' ';
360 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, L_MSG_OUTPUT);
361 L_MSG_OUTPUT:= 'PAYE Reference : '||rpad(P_PAYE_REFERENCE,20,' ') ||' Effective Date: '||FND_DATE.CANONICAL_TO_DATE(P_EFFECTIVE_DT);
362 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, L_MSG_OUTPUT);
363 L_MSG_OUTPUT:= ' ';
364 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, L_MSG_OUTPUT);
365 --Start of 13726549
366 IF G_SMP_RECOVERY = 'Full' THEN
367 l_msg_output:= 'SMP/SAP/OSPP/ASPP Recovery Type: '||rpad(g_smp_recovery,20,' ')||' Recovery Percentage Used: '||(100);
368 ELSIF G_SMP_RECOVERY = 'Partial' THEN
369 l_msg_output:= 'SMP/SAP/OSPP/ASPP Recovery Type: '||rpad(g_smp_recovery,20,' ')||' Recovery Percentage Used: '||(g_smp_sap_rate*100);
370 ELSE
371 l_msg_output:= 'SMP/SAP/OSPP/ASPP Recovery Type: '||rpad(g_smp_recovery,20,' ')||' Recovery Percentage Used: '||(0);
372 END IF;
373 --End of 13726549
374 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, L_MSG_OUTPUT);
375 IF G_SSP_RECOVERY = 'Full' THEN
376 L_MSG_OUTPUT:= 'SSP Recovery Type : '||rpad(G_SSP_RECOVERY,20,' ')||' Recovery Percentage Used: '||'100';
377 ELSE
378 L_MSG_OUTPUT:= 'SSP Recovery Type : '||rpad(G_SSP_RECOVERY,20,' ')||' Recovery Percentage Used: '||'0';
379 END IF;
380
381 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, L_MSG_OUTPUT);
382 L_MSG_OUTPUT:= ' ';
383 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, L_MSG_OUTPUT);
384 L_MSG_OUTPUT:= 'SMP Amount Recovered : '||rpad(to_char(L_SMP/100,'FM9999999990D00'),30,' ')||' NIC Compensation on SMP : '||to_char(L_NIC_SMP/100,'FM9999999990D00');
385 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, L_MSG_OUTPUT);
386 L_MSG_OUTPUT:= 'SAP Amount Recovered : '||rpad(to_char(L_SAP/100,'FM9999999990D00'),30,' ')||' NIC Compensation on SAP : '||to_char(L_NIC_SAP/100,'FM9999999990D00');
387 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, L_MSG_OUTPUT);
388 L_MSG_OUTPUT:= 'OSPP Amount Recovered : '||rpad(to_char(L_SPP/100,'FM9999999990D00'),30,' ')||' NIC Compensation on OSPP : '||to_char(L_NIC_SPP/100,'FM9999999990D00');
389 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, L_MSG_OUTPUT);
390 L_MSG_OUTPUT:= 'ASPP Amount Recovered : '||rpad(to_char(L_ASPP/100,'FM9999999990D00'),30,' ')||' NIC Compensation on ASPP : '||to_char(L_NIC_ASPP/100,'FM9999999990D00');
391 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, L_MSG_OUTPUT);
392 L_MSG_OUTPUT:= 'SSP Amount Recovered : '||rpad(to_char(L_SSP/100,'FM9999999990D00'),30,' ')||' NIC Compensation on SSP : '||to_char(L_NIC_SSP/100,'FM9999999990D00');
393 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, L_MSG_OUTPUT);
394 HR_UTILITY.TRACE('Create_EPS_RECORD completed '||to_char(sysdate,'dd-mon-yyyy hh24:mm:ss'));
395 END IF;
396 EXCEPTION
397 --13741983 begin
398 WHEN MANDATORY_VALUES_MISSING THEN
399 hr_utility.trace('Error: Mandatory values required for processing EPS are not present. Please check ');
400 raise_application_error(-20001,' Mandatory Values missing');
401 --13741983 end
402 WHEN Global_missing THEN
403 hr_utility.trace('Error: The globals required for processing EPS are not present. Please check ');
404 l_msg_output := 'Error: The globals required for processing EPS are not present. Please check ';
405 fnd_file.put_line(fnd_file.log,l_msg_output);
406 raise_application_error(-20001,' Globals missing');
407 WHEN EPS_ALREADY_PRESENT THEN
408 l_msg_output:= 'EPS record already created for the given parameters. Please check ';
409 hr_utility.trace('EPS record already created for the given parameters. Please check ');
410 fnd_file.put_line(fnd_file.log,l_msg_output);
411 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,L_MSG_OUTPUT);
412 raise_application_error(-20001,' EPS record already created for the given parameters. Please check');
413 WHEN OTHERS THEN
414 fnd_file.put_line(fnd_file.log, SUBSTR(sqlerrm(SQLCODE),1,80));
415 RAISE_APPLICATION_ERROR(-20001,' Error'||SQLERRM(SQLCODE));
416 rollback;
417 END Create_EPS_RECORD;
418
419 /*called from formula function:*/
420 function GET_REC_AND_NIC_VALUES( p_element_type_id IN number,
421 p_assignment_action_id in number,
422 p_amount in number,
423 p_rec_amount out nocopy number,
424 p_nic_amount out nocopy number
425 ) return number is
426 l_smp_id pay_defined_balances.defined_balance_id%TYPE;
427 l_sap_id pay_defined_balances.defined_balance_id%TYPE;
428 l_spp_adopt_id pay_defined_balances.defined_balance_id%TYPE;
429 l_spp_birth_id pay_defined_balances.defined_balance_id%TYPE;
430 l_aspp_adopt_id pay_defined_balances.defined_balance_id%TYPE;
431 L_ASPP_BIRTH_ID PAY_DEFINED_BALANCES.DEFINED_BALANCE_ID%TYPE;
432 l_element_name pay_element_types_f.element_name%TYPE;
433 l_eff_date date;
434 l_rec_rate number;
435 l_nic_rate number;
436 l_payroll_id number;
437 CURSOR get_defined_balance_id (p_balance_name VARCHAR2, p_dimension_name VARCHAR2)
438 IS
439 SELECT defined_balance_id
440 FROM pay_defined_balances db,
441 pay_balance_types b,
442 pay_balance_dimensions d
443 WHERE b.balance_name = p_balance_name
444 AND d.dimension_name = p_dimension_name
445 AND db.balance_type_id = b.balance_type_id
446 AND db.balance_dimension_id = d.balance_dimension_id
447 AND db.legislation_code = 'GB'
448 AND b.legislation_code = 'GB'
449 AND d.legislation_code = 'GB';
450
451 CURSOR get_smp_org_value
452 IS
453 SELECT NVL(TRIM(HOI.ORG_INFORMATION16),'None') L_SMP_RECOVERY
454 FROM hr_organization_information hoi
455 WHERE hoi.organization_id = g_business_group_id
456 AND hoi.org_information_context = 'Tax Details References'
457 AND NVL(HOI.ORG_INFORMATION10,'UK') = 'UK'
458 AND hoi.org_information1 = g_paye_reference;
459
460 begin
461 fnd_file.put_line(fnd_file.LOG,'Pamount:' || p_amount );
462 fnd_file.put_line(fnd_file.LOG,'p_element_type_id:' || p_element_type_id);
463 fnd_file.put_line(fnd_file.LOG,'p_assignment_action_id:' || p_assignment_action_id);
464
465 select effective_date into l_eff_date from pay_assignment_actions paa, pay_payroll_actions ppa where ppa.payroll_action_id = paa.payroll_action_id
466 and paa.assignment_action_id = p_assignment_action_id;
467
468 select business_group_id, payroll_id into g_business_group_id , l_payroll_id
469 from pay_payroll_Actions ppa,
470 pay_assignment_Actions paa
471 where paa.PAYROLL_ACTION_ID = ppa.payroll_Action_id
472 and paa.assignment_action_id = p_assignment_action_id;
473
474 select SEGMENT1 into g_paye_reference from hr_soft_coding_keyflex hr , pay_payrolls_f p
475 where hr.SOFT_CODING_KEYFLEX_ID = p.SOFT_CODING_KEYFLEX_ID
476 and p.payroll_id = l_payroll_id
477 and l_eff_date between effective_start_date and effective_end_date;
478
479 --load the profile values
480 open get_smp_org_value;
481 fetch get_smp_org_value into g_smp_recovery;
482 close get_smp_org_value;
483
484 select global_value into l_rec_rate from ff_globals_f where global_name = 'SMP_RECOVERY_PERCENTAGE' and legislation_code = 'GB' and
485 l_eff_date between effective_start_date and effective_end_date;
486
487 select global_value into l_nic_rate from ff_globals_f where global_name = 'NIC_COMPENSATION_RATE_ON_SMP' and legislation_code = 'GB' and
488 l_eff_date between effective_start_date and effective_end_date;
489
490
491 fnd_file.put_line(fnd_file.LOG,'Entering in get_rec_and_nic. l_rec_rate: ' || l_rec_rate);
492 fnd_file.put_line(fnd_file.LOG,'l_nic_rate' || l_nic_rate);
493 if g_smp_recovery = 'Partial' THEN
494 fnd_file.put_line(fnd_file.LOG,'Partial');
495 p_rec_amount := round(l_rec_rate*p_amount,2);
496 p_nic_amount :=0;
497 fnd_file.put_line(fnd_file.LOG,'p_rec_amount: ' || p_rec_amount || ' p_nic_amount: ' ||p_nic_amount);
498 elsif g_smp_recovery = 'Full' THEN
499 fnd_file.put_line(fnd_file.LOG,'Full');
500 p_rec_amount := p_amount;
501 begin
502 -- calculate the NIC value from the PTD value
503 select element_name into l_element_name from pay_element_types_f where element_type_id = p_element_type_id
504 and legislation_code = 'GB' and
505 l_eff_date between effective_start_date and effective_end_date;
506
507 if l_element_name = 'Statutory Maternity Pay' then
508 --
509 OPEN get_defined_balance_id('SMP Total','_ASG_TRANSFER_PTD');
510 FETCH get_defined_balance_id INTO l_smp_id;
511 CLOSE get_defined_balance_id;
512
513 p_nic_amount := l_nic_rate * hr_dirbal.get_balance(p_assignment_action_id ,l_smp_id);
514
515 elsif l_element_name = 'Statutory Adoption Pay' then
516 OPEN get_defined_balance_id('SAP Total','_ASG_TRANSFER_PTD');
517 FETCH get_defined_balance_id INTO l_sap_id;
518 CLOSE get_defined_balance_id;
519
520 p_nic_amount := l_nic_rate * hr_dirbal.get_balance(p_assignment_action_id ,l_sap_id);
521
522 elsif l_element_name = 'Statutory Paternity Pay Adoption' then
523 OPEN get_defined_balance_id('SPP Adoption Total','_ASG_TRANSFER_PTD');
524 FETCH get_defined_balance_id INTO l_spp_adopt_id;
525 CLOSE get_defined_balance_id;
526 p_nic_amount := l_nic_rate * hr_dirbal.get_balance(p_assignment_action_id ,l_spp_adopt_id);
527
528 elsif l_element_name = 'Statutory Paternity Pay Birth' then
529 OPEN get_defined_balance_id('SPP Birth Total','_ASG_TRANSFER_PTD');
530 FETCH get_defined_balance_id INTO l_spp_birth_id;
531 CLOSE get_defined_balance_id;
532 p_nic_amount := l_nic_rate * hr_dirbal.get_balance(p_assignment_action_id ,l_spp_birth_id);
533 elsif l_element_name = 'Additional Statutory Paternity Pay Adoption' then
534 OPEN get_defined_balance_id('ASPP Adoption Total','_ASG_TRANSFER_PTD');
535 FETCH get_defined_balance_id INTO l_aspp_adopt_id;
536 CLOSE get_defined_balance_id;
537 p_nic_amount := l_nic_rate * hr_dirbal.get_balance(p_assignment_action_id ,l_aspp_adopt_id);
538 elsif l_element_name = 'Additional Statutory Paternity Pay Birth' then
539 OPEN get_defined_balance_id('ASPP Birth Total','_ASG_TRANSFER_PTD');
540 FETCH get_defined_balance_id INTO l_aspp_birth_id;
541 CLOSE get_defined_balance_id;
542 p_nic_amount := l_nic_rate * hr_dirbal.get_balance(p_assignment_action_id ,l_aspp_birth_id);
543 else
544 p_nic_amount := l_nic_rate * p_amount;
545 END IF;
546 exception
547 when others then
548 p_nic_amount := l_nic_rate * p_amount;
549 end;
550 else
551 p_rec_amount := 0;
552 p_nic_amount := 0;
553 end if;
554 return 1;
555 exception when others then
556 fnd_file.put_line(fnd_file.LOG,'Exception in get_rec_and_nic ' || sqlerrm);
557 return -1;
558 end GET_REC_AND_NIC_VALUES;
559
560
561 END Create_GB_RTI_EPS_RECORD;