DBA Data[Home] [Help]

PACKAGE BODY: APPS.PAY_GB_RTI_EYU

Source


1 PACKAGE BODY PAY_GB_RTI_EYU as
2   /* $Header: pygbrtieyu.pkb 120.0.12020000.2 2013/03/04 07:35:53 rajganga noship $ */
3   /*===========================================================================+
4   |               Copyright (c) 1993 Oracle Corporation                       |
5   |                  Redwood Shores, California, USA                          |
6   |                       All rights reserved.                                |
7   +============================================================================
8   Name:
9   PAY_GB_RTI_EYU
10   Purpose:
11   It fetches the live data and archives it for RTI Processes.
12   This is a UK Specific payroll package.
13   History:
14   4-Feb-2013   rajganga     115.0    Created.
15   13-Feb-2013  rajganga     115.6    Created.
16   20-Feb-2013  rajganga     115.7    Fixed the bugs 16361499 , 16360534.
17   21-Feb-2013  rajganga     115.8    Fixed bug 16328233 .
18   21-Feb-2013  rajganga     115.9    Fixed bugs.
19   22-Feb-2013  rajganga     115.9    Fixed bug 16367557.
20   22-Feb-2013  rajganga     115.10   Added NIC Refund Code.
21   26-Feb-2013  rajganga     115.11   Removed Parameter codes.
22   26-Feb-2013  rajganga     115.12   Fixed bug 16400958.
23   27-Feb-2013  rajganga     115.13   Fixed retry issue.
24   28-Feb-2013  rajganga     115.14   Fixed GSCC issues.
25   28-Feb-2013  rajganga     115.15   Fixed NIC refund.
26 =============================================================================*/
27   --
28   --
29   g_econ_ni_check   varchar2(1);
30 
31   g_package             CONSTANT VARCHAR2(20)                         := 'pay_gb_rti_eyu.';
32   c_contract_table_name CONSTANT pay_user_tables.user_table_name%TYPE := 'PQP_CONTRACT_TYPES';
33   g_start_year DATE;
34   g_end_year DATE;
35   g_tax_ref VARCHAR2(60);
36 
37   g_paye_element_id        NUMBER:= -1;
38   g_paye_details_id        NUMBER:= -1;
39   g_reset_flag_type  VARCHAR2(30);
40   g_legislation_code       VARCHAR2(2) := 'GB';
41   g_validation_check VARCHAR2(1) := 'Y';
42 
43   g_fps_bal_det_tab t_fps_bal_det_tab;
44   g_fps_aggr_bal_det_tab t_fps_bal_det_tab;
45   g_fps_ni_bal_det_tab t_fps_bal_det_tab;
46   g_fps_ni_aggr_bal_det_tab t_fps_bal_det_tab;
47   g_defined_balance_lst pay_balance_pkg.t_balance_value_tab;         -- used for batch balance retrieval of normal balances
48   g_aggr_defined_balance_lst pay_balance_pkg.t_balance_value_tab;    -- used for batch balance retrieval of aggregation balances
49   g_defined_balance_lst_ni pay_balance_pkg.t_balance_value_tab;      -- used for batch balance retrieval of ni normal balances
50   g_aggr_defined_balance_lst_ni pay_balance_pkg.t_balance_value_tab; -- used for batch balance retrieval of ni aggregation balances
51   --
52 
53   g_nia_lel_id pay_defined_balances.defined_balance_id%TYPE;
54   g_nia_et_id pay_defined_balances.defined_balance_id%TYPE;
55   g_nia_uap_id pay_defined_balances.defined_balance_id%TYPE;
56   g_nia_uel_id pay_defined_balances.defined_balance_id%TYPE;
57   g_nia_e_ytd_id pay_defined_balances.defined_balance_id%TYPE;
58   g_nia_r_ytd_id pay_defined_balances.defined_balance_id%TYPE;
59 
60   g_nib_lel_id pay_defined_balances.defined_balance_id%TYPE;
61   g_nib_et_id pay_defined_balances.defined_balance_id%TYPE;
62   g_nib_uap_id pay_defined_balances.defined_balance_id%TYPE;
63   g_nib_uel_id pay_defined_balances.defined_balance_id%TYPE;
64   g_nib_e_ytd_id pay_defined_balances.defined_balance_id%TYPE;
65   g_nib_r_ytd_id pay_defined_balances.defined_balance_id%TYPE;
66 
67   g_nic_lel_id pay_defined_balances.defined_balance_id%TYPE;
68   g_nic_et_id pay_defined_balances.defined_balance_id%TYPE;
69   g_nic_uap_id pay_defined_balances.defined_balance_id%TYPE;
70   g_nic_uel_id pay_defined_balances.defined_balance_id%TYPE;
71   g_nic_e_ytd_id pay_defined_balances.defined_balance_id%TYPE;
72   g_nic_r_ytd_id pay_defined_balances.defined_balance_id%TYPE;
73 
74   g_nid_lel_id pay_defined_balances.defined_balance_id%TYPE;
75   g_nid_et_id pay_defined_balances.defined_balance_id%TYPE;
76   g_nid_uap_id pay_defined_balances.defined_balance_id%TYPE;
77   g_nid_uel_id pay_defined_balances.defined_balance_id%TYPE;
78   g_nid_e_ytd_id pay_defined_balances.defined_balance_id%TYPE;
79   g_nid_r_ytd_id pay_defined_balances.defined_balance_id%TYPE;
80 
81   g_nie_lel_id pay_defined_balances.defined_balance_id%TYPE;
82   g_nie_et_id pay_defined_balances.defined_balance_id%TYPE;
83   g_nie_uap_id pay_defined_balances.defined_balance_id%TYPE;
84   g_nie_uel_id pay_defined_balances.defined_balance_id%TYPE;
85   g_nie_e_ytd_id pay_defined_balances.defined_balance_id%TYPE;
86   g_nie_r_ytd_id pay_defined_balances.defined_balance_id%TYPE;
87 
88   g_nij_lel_id pay_defined_balances.defined_balance_id%TYPE;
89   g_nij_et_id pay_defined_balances.defined_balance_id%TYPE;
90   g_nij_uap_id pay_defined_balances.defined_balance_id%TYPE;
91   g_nij_uel_id pay_defined_balances.defined_balance_id%TYPE;
92   g_nij_e_ytd_id pay_defined_balances.defined_balance_id%TYPE;
93   g_nij_r_ytd_id pay_defined_balances.defined_balance_id%TYPE;
94 
95   g_nil_lel_id pay_defined_balances.defined_balance_id%TYPE;
96   g_nil_et_id pay_defined_balances.defined_balance_id%TYPE;
97   g_nil_uap_id pay_defined_balances.defined_balance_id%TYPE;
98   g_nil_uel_id pay_defined_balances.defined_balance_id%TYPE;
99   g_nil_e_ytd_id pay_defined_balances.defined_balance_id%TYPE;
100   g_nil_r_ytd_id pay_defined_balances.defined_balance_id%TYPE;
101 
102 --Aggr details
103 
104   g_per_nia_lel_id pay_defined_balances.defined_balance_id%TYPE;
105   g_per_nia_et_id pay_defined_balances.defined_balance_id%TYPE;
106   g_per_nia_uap_id pay_defined_balances.defined_balance_id%TYPE;
107   g_per_nia_uel_id pay_defined_balances.defined_balance_id%TYPE;
108   g_per_nia_e_ytd_id pay_defined_balances.defined_balance_id%TYPE;
109   g_per_nia_r_ytd_id pay_defined_balances.defined_balance_id%TYPE;
110 
111   g_per_nib_lel_id pay_defined_balances.defined_balance_id%TYPE;
112   g_per_nib_et_id pay_defined_balances.defined_balance_id%TYPE;
113   g_per_nib_uap_id pay_defined_balances.defined_balance_id%TYPE;
114   g_per_nib_uel_id pay_defined_balances.defined_balance_id%TYPE;
115   g_per_nib_e_ytd_id pay_defined_balances.defined_balance_id%TYPE;
116   g_per_nib_r_ytd_id pay_defined_balances.defined_balance_id%TYPE;
117 
118   g_per_nic_lel_id pay_defined_balances.defined_balance_id%TYPE;
119   g_per_nic_et_id pay_defined_balances.defined_balance_id%TYPE;
120   g_per_nic_uap_id pay_defined_balances.defined_balance_id%TYPE;
121   g_per_nic_uel_id pay_defined_balances.defined_balance_id%TYPE;
122   g_per_nic_e_ytd_id pay_defined_balances.defined_balance_id%TYPE;
123   g_per_nic_r_ytd_id pay_defined_balances.defined_balance_id%TYPE;
124 
125   g_per_nid_lel_id pay_defined_balances.defined_balance_id%TYPE;
126   g_per_nid_et_id pay_defined_balances.defined_balance_id%TYPE;
127   g_per_nid_uap_id pay_defined_balances.defined_balance_id%TYPE;
128   g_per_nid_uel_id pay_defined_balances.defined_balance_id%TYPE;
129   g_per_nid_e_ytd_id pay_defined_balances.defined_balance_id%TYPE;
130   g_per_nid_r_ytd_id pay_defined_balances.defined_balance_id%TYPE;
131 
132   g_per_nie_lel_id pay_defined_balances.defined_balance_id%TYPE;
133   g_per_nie_et_id pay_defined_balances.defined_balance_id%TYPE;
134   g_per_nie_uap_id pay_defined_balances.defined_balance_id%TYPE;
135   g_per_nie_uel_id pay_defined_balances.defined_balance_id%TYPE;
136   g_per_nie_e_ytd_id pay_defined_balances.defined_balance_id%TYPE;
137   g_per_nie_r_ytd_id pay_defined_balances.defined_balance_id%TYPE;
138 
139   g_per_nij_lel_id pay_defined_balances.defined_balance_id%TYPE;
140   g_per_nij_et_id pay_defined_balances.defined_balance_id%TYPE;
141   g_per_nij_uap_id pay_defined_balances.defined_balance_id%TYPE;
142   g_per_nij_uel_id pay_defined_balances.defined_balance_id%TYPE;
143   g_per_nij_e_ytd_id pay_defined_balances.defined_balance_id%TYPE;
144   g_per_nij_r_ytd_id pay_defined_balances.defined_balance_id%TYPE;
145 
146   g_per_nil_lel_id pay_defined_balances.defined_balance_id%TYPE;
147   g_per_nil_et_id pay_defined_balances.defined_balance_id%TYPE;
148   g_per_nil_uap_id pay_defined_balances.defined_balance_id%TYPE;
149   g_per_nil_uel_id pay_defined_balances.defined_balance_id%TYPE;
150   g_per_nil_e_ytd_id pay_defined_balances.defined_balance_id%TYPE;
151   g_per_nil_r_ytd_id pay_defined_balances.defined_balance_id%TYPE;
152 
153 -- NI Run balance fields
154   g_nia_able_id_run pay_defined_balances.defined_balance_id%TYPE;
155   g_nia_e_id_run    pay_defined_balances.defined_balance_id%TYPE;
156   g_nib_able_id_run pay_defined_balances.defined_balance_id%TYPE;
157   g_nib_e_id_run    pay_defined_balances.defined_balance_id%TYPE;
158   g_nic_able_id_run pay_defined_balances.defined_balance_id%TYPE;
159   g_nic_e_id_run    pay_defined_balances.defined_balance_id%TYPE;
160   g_nid_able_id_run pay_defined_balances.defined_balance_id%TYPE;
161   g_nid_e_id_run    pay_defined_balances.defined_balance_id%TYPE;
162   g_nie_able_id_run pay_defined_balances.defined_balance_id%TYPE;
163   g_nie_e_id_run    pay_defined_balances.defined_balance_id%TYPE;
164   g_nij_able_id_run pay_defined_balances.defined_balance_id%TYPE;
165   g_nij_e_id_run    pay_defined_balances.defined_balance_id%TYPE;
166   g_nil_able_id_run pay_defined_balances.defined_balance_id%TYPE;
167   g_nil_e_id_run    pay_defined_balances.defined_balance_id%TYPE;
168 
169   -- Function to fetch address details (CONTEXT - ADDRESS DETAILS)
170 FUNCTION fetch_address_rec(
171     p_person_id      IN NUMBER,
172     p_assignment_id  IN NUMBER,
173     p_effective_date IN DATE,
174     p_addr_rec OUT nocopy act_info_rec)
175   RETURN BOOLEAN
176 IS
177   l_proc CONSTANT VARCHAR2(50):= g_package||'fetch_address_rec';
178   l_arch BOOLEAN;
179   --address details
180   l_address_line1 per_addresses.address_line1%TYPE;
181   l_address_line2 per_addresses.address_line2%TYPE;
182   l_address_line3 per_addresses.address_line3%TYPE;
183   l_address_line4 per_addresses.address_line3%TYPE;
184 
185   CURSOR csr_address
186   IS
187     SELECT upper(SUBSTR(trim(addr.address_line1),1,35)) addr1,
188       upper(SUBSTR(trim(addr.address_line2),1,35)) addr2,
189       upper(SUBSTR(trim(addr.address_line3),1,35)) addr3,
190       SUBSTR(addr.postal_code,1,10) post_code,
191       upper(SUBSTR(trim(addr.town_or_city),1,35)) addr4,
192       upper(SUBSTR(trim(addr.country),1,35)) country
193     FROM per_addresses addr
194     WHERE addr.person_id    = p_person_id
195     AND ( addr.primary_flag = 'Y'
196     OR addr.primary_flag   IS NULL)
197     AND p_effective_date
198     BETWEEN NVL(addr.date_from,fnd_date.canonical_to_date('0001/01/01 00:00:00'))
199     AND NVL(addr.date_to, fnd_date.canonical_to_date('4712/12/31 00:00:00'));
200 
201   l_addr_rec csr_address%rowtype;
202 
203 BEGIN
204   hr_utility.set_location('Entering : '||l_proc,1);
205   l_arch := true;
206 
207   OPEN csr_address;
208   FETCH csr_address INTO l_addr_rec;
209   CLOSE csr_address;
210 
211   l_address_line1 := l_addr_rec.addr1;
212   l_address_line2 := l_addr_rec.addr2;
213   l_address_line3 := l_addr_rec.addr3;
214   l_address_line4 := l_addr_rec.addr4;
215   -- Swapping from Address line4 to line2
216 
217   IF l_address_line3 = ' ' THEN
218     l_address_line3 := l_address_line4;
219     l_address_line4 := ' ';
220   END IF;
221 
222   IF l_address_line2 = ' ' THEN
223     l_address_line2 := l_address_line3;
224     l_address_line3 := l_address_line4;
225     l_address_line4 := ' ';
226   END IF;
227 
228   IF LENGTH(TRIM(l_address_line4)) > 0 THEN
229     l_address_line4               := l_address_line4;
230   ELSE
231     l_address_line4 := ' ';
232   END IF;
233 
234   IF LENGTH(TRIM(l_address_line3)) > 0 THEN
235     l_address_line3               := l_address_line3;
236   ELSE
237     l_address_line3 := l_address_line4;
238     l_address_line4 := ' ';
239   END IF;
240 
241   IF LENGTH(TRIM(l_address_line2)) > 0 THEN
242     l_address_line2               := l_address_line2;
243   ELSE
244     l_address_line2 := l_address_line3;
245     l_address_line3 := l_address_line4;
246     l_address_line4 := ' ';
247   END IF;
248   -- For Foreign Country, postal code will not be reported , where as Country will be reported
249   -- For GB , postal code will be reported
250 
251   IF l_addr_rec.country      = 'GB' THEN
252     IF l_addr_rec.post_code <> ' ' OR l_addr_rec.post_code IS NOT NULL THEN
253       l_addr_rec.country    := ' ';
254     END IF;
255   ELSE
256     l_addr_rec.post_code:= ' ';
257   END IF;
258 
259   hr_utility.trace('line 1'||l_address_line1);
260   hr_utility.trace('line 2'||l_address_line2);
261   hr_utility.trace('line 3'||l_address_line3);
262   hr_utility.trace('line 4'||l_address_line4);
263 
264   p_addr_rec.assignment_id        := p_assignment_id;
265   p_addr_rec.action_info_category := 'ADDRESS DETAILS';
266   p_addr_rec.act_info5            := l_address_line1;
267   p_addr_rec.act_info6            := l_address_line2;
268   p_addr_rec.act_info7            := l_address_line3;
269   p_addr_rec.act_info8            := l_address_line4;
270   p_addr_rec.act_info12           := l_addr_rec.post_code;
271   p_addr_rec.act_info13           := l_addr_rec.country;
272   hr_utility.set_location('Leaving: '||l_proc,999);
273   RETURN l_arch;
274 END fetch_address_rec;
275 
276 /*
277 Returns the passport number for the person from the source configured in Configuration
278 values page for this BG.
279 */
280 FUNCTION get_passport_number(
281     p_person_id VARCHAR2,p_effective_date DATE,p_bg_id NUMBER)
282   RETURN VARCHAR2
283 IS
284   l_config_values PQP_UTILITIES.t_config_values;
285   g_bon_bal_type_id NUMBER;
286   l_source_name     VARCHAR2(100);
287   l_context_name    VARCHAR2(100);
288   l_column_name     VARCHAR2(100);
289   l_function_name   VARCHAR2(100);
290   l_passport_number VARCHAR2(100) := NULL;
291   sqlstr            VARCHAR2(1000);
292   l_proc            CONSTANT VARCHAR2(50):= g_package||'get_passport_number';
293   l_package         VARCHAR2(100);
294   l_effective_date date;
295   cursor csr_doc_of_rec
296   is
297    select hdei.document_number from hr_document_types hdt,hr_document_extra_info hdei
298    where hdt.category_code = 'PPT_INFO'
299    and hdt.document_type_id = hdei.document_type_id
300    and hdei.person_id = p_person_id;
301 
302 CURSOR csr_per_all_people
303   IS
304     SELECT l_column_name
305     FROM per_all_people_f
306     WHERE person_id        = p_person_id
307     AND ATTRIBUTE_CATEGORY = l_context_name
308     AND p_effective_date between effective_start_date and effective_end_date;
309 
310   CURSOR csr_per_extra_people_info
311   IS
312     SELECT l_column_name
313     FROM per_people_extra_info
314     WHERE person_id              = p_person_id
315     AND PEI_INFORMATION_CATEGORY = l_context_name;
316 
317 cursor csr_per_start_date is
318 select max(effective_start_date) from per_all_people_f
319 where person_id = p_person_id
320 and effective_start_date <= p_effective_date;
321 
322 BEGIN
323   hr_utility.set_location('Entering: '||l_proc,1);
324   hr_utility.trace('p_effective_date in get_passport_number : ' || p_effective_date);
325 
326   open csr_per_start_date;
327   fetch csr_per_start_date into l_effective_date;
328   close csr_per_start_date;
329 
330   hr_utility.trace('l_effective_date in get_oneoff_payment : ' || l_effective_date);
331 	  --  Use below API to get the config values for the given context in the business group
332   	PQP_UTILITIES.get_config_type_values( p_configuration_type => 'PAY_GB_FPS_PASSPORT_NO' ,
333                                         p_business_group_id => p_bg_id ,
334                                         p_legislation_code => g_legislation_code ,
335                                         p_tab_config_values => l_config_values );
336 
337 	  IF l_config_values.COUNT > 0 THEN
338       l_source_name         := l_config_values(l_config_values.FIRST).pcv_information1;
339       l_context_name        := l_config_values(l_config_values.FIRST).pcv_information4;
340       l_column_name         := l_config_values(l_config_values.FIRST).pcv_information5;
341       l_function_name       := l_config_values(l_config_values.FIRST).pcv_information6;
342 	    hr_utility.set_location('l_source_name' || l_source_name,1);
343 	    hr_utility.set_location('l_context_name' || l_context_name,1);
344 	    hr_utility.set_location('l_column_name' || l_column_name,1);
345 	    hr_utility.set_location('l_function_name' || l_function_name,1);
346 
347   	  /**  The source can be either from Others--> Extra information of the person
348 	    or from the descriptive flex field on the person form.
349 	    **/
350   	  IF l_source_name = 'Extra Person Info DDF' THEN
351 	    hr_utility.set_location('into Extra Person Info DDF',1);
352     	  sqlstr        := 'select ' || l_column_name ||
353 	                       ' from per_people_extra_info where person_id = :p_person_id and PEI_INFORMATION_CATEGORY = :l_context_name';
354 	    hr_utility.set_location(sqlstr,1);
355         begin
356   	    EXECUTE immediate sqlstr INTO l_passport_number USING p_person_id,l_context_name;
357         Exception
358         when others then
359 	    hr_utility.set_location('Exception in extra info : ' || sqlerrm,1);
360         end;
361 
362 	    elsif l_source_name = 'PER_PEOPLE' THEN
363    	    hr_utility.set_location('into PER_PEOPLE',1);
364   	    sqlstr           := 'select ' || l_column_name ||
365     	                      ' from per_all_people_f where person_id = :p_person_id and ATTRIBUTE_CATEGORY = :l_context_name' ||
366                             ' and :l_effective_date between effective_start_date and effective_end_date' ;
367 	    hr_utility.trace(sqlstr);
368          begin
369   	     EXECUTE immediate sqlstr INTO l_passport_number USING p_person_id,l_context_name,l_effective_date;
370         exception
371         when others then
372         	    hr_utility.trace('Exception in per_people: ' || sqlerrm);
373         end;
374 
375       elsif l_source_name = 'Function' THEN
376 
377 			 begin
378        SELECT definition
379        INTO l_package
380        FROM ff_functions
381        WHERE name = l_function_name
382        and business_group_id = p_bg_id;
383 
384        hr_utility.trace('l_package'||l_package);
385 
386         sqlstr    :=
387                                'SELECT '
388                             || l_package
389                             || ' (:p_person_id,:p_eff_date) '
390                             || 'FROM DUAL';
391   	    hr_utility.set_location(sqlstr,1);
392         EXECUTE IMMEDIATE sqlstr into  l_passport_number USING p_person_id,l_effective_date;
393          hr_utility.trace('Function value l_passport_number '||l_passport_number);
394          exception
395         WHEN OTHERS THEN
396 	 		  hr_utility.trace('Exception in get_passport_number.Function.');
397 			  hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
398         return null;
399 	  		end;
400 
401     	END IF;
402 		ELSE
403 				-- GEt the passport number from Documents of record, if it null then get from config values.
404 				  open csr_doc_of_rec;
405 				  fetch csr_doc_of_rec into l_passport_number;
406 				  close csr_doc_of_rec;
407 
408   END IF;
409   hr_utility.set_location('l_passport_number: '||l_passport_number,1);
410   hr_utility.set_location('Leaving: '||l_proc,1);
411 
412   RETURN l_passport_number;
413 
414 EXCEPTION
415 WHEN OTHERS THEN
416   RETURN l_passport_number;
417   return null;
418 END get_passport_number;
419 
420 -- Function to fetch person details (CONTEXT - GB RTI EMPLOYEE DETAILS)
421 FUNCTION fetch_person_rec(
422     p_assactid   IN NUMBER,
423     p_effective_date IN DATE,
424     p_person_rec OUT nocopy act_info_rec)
425   RETURN BOOLEAN
426 IS
427   l_proc                CONSTANT VARCHAR2(50):= g_package||'fetch_person_rec';
428   l_arch                BOOLEAN;
429   l_partner_name        VARCHAR2(50);
430   l_partner_ni          VARCHAR2(30);
431   l_partner_surname     VARCHAR2(50);
432   l_partner_first_name  VARCHAR2(50);
433   l_partner_second_name VARCHAR2(50);
434 
435   CURSOR csr_person_details
436   IS
437     SELECT rownum Number_of_employee,
438       pap.person_id p_person_id,
439       paa.assignment_id,
440       SUBSTR(trim(pap.last_name), 1,35) last_name,
441       SUBSTR(trim(pap.first_name), 1,least(DECODE(instr(trim(pap.first_name),' '),0,35,instr(trim(pap.first_name),' ')),35)) first_name,
442       SUBSTR(trim(pap.middle_names), 1,least(decode(instr(trim(pap.middle_names),' '),0,35,instr(trim(pap.middle_names),' ')),35)) middle_name,
443       pap.title title,
444       SUBSTR(pap.national_identifier,1,9) national_identifier,
445       pap.date_of_birth date_of_birth,
446       SUBSTR(pap.sex,1,1) sex ,
447       DECODE(pap.per_information10,'Y','Y',NULL) agg_paye_flag,
448       DECODE(pap.per_information9,'Y','Y',NULL) multiple_asg_flag,
449 			pap.business_group_id business_group_id
450     FROM pay_assignment_actions act,
451       per_all_assignments_f paa,
452       per_all_people_f pap
453     WHERE act.assignment_action_id = p_assactid
454     AND act.assignment_id          = paa.assignment_id
455     AND paa.person_id              = pap.person_id
456 	  AND p_effective_date between pap.effective_start_date and pap.effective_end_date
457     AND paa.effective_start_date =
458        (
459          SELECT MAX(paa2.effective_start_date)
460          FROM   per_all_assignments_f paa2
461          WHERE  paa2.assignment_id         = paa.assignment_id
462          AND    paa2.assignment_type       = 'E'
463          AND    paa2.effective_start_date <= p_effective_date
464        );
465 
466 
467   CURSOR csr_partner_details(c_person_id NUMBER)
468   IS
469     SELECT NVL(partner_name,''),
470       partner_ni_number
471     FROM ssp_medicals
472     WHERE maternity_id IN
473       (SELECT MAX(maternity_id)
474       FROM per_absence_attendances
475       WHERE person_id                 = c_person_id
476       AND ABSENCE_ATTENDANCE_TYPE_ID IN
477         (SELECT ABSENCE_ATTENDANCE_TYPE_ID
478         FROM per_absence_attendance_types
479         WHERE ABSENCE_CATEGORY IN ('GB_ADDL_PAT_ADOPT', 'GB_ADDL_PAT_BIRTH')
480         )
481       )
482     AND EVIDENCE_STATUS = 'CURRENT';
483     l_person_rec csr_person_details%rowtype;
484 
485   BEGIN
486     hr_utility.set_location('Entering: '||l_proc,1);
487     l_arch := true;
488     hr_utility.trace('p_assactid       : '||p_assactid);
489     hr_utility.trace('p_effective_date : '||TO_CHAR(p_effective_date));
490 
491     OPEN csr_person_details;
492     FETCH csr_person_details INTO l_person_rec;
493     CLOSE csr_person_details;
494 
495     p_person_rec.person_id            := l_person_rec.p_person_id;
496     p_person_rec.assignment_id        := l_person_rec.assignment_id;
497     p_person_rec.action_info_category := 'GB RTI EMPLOYEE DETAILS';
498     p_person_rec.act_info3            := l_person_rec.last_name;
499     p_person_rec.act_info4            := l_person_rec.first_name;
500     p_person_rec.act_info5            := l_person_rec.middle_name;
501     p_person_rec.act_info6            := l_person_rec.title;
502     p_person_rec.act_info7            := l_person_rec.national_identifier;
503     p_person_rec.act_info8            := TO_CHAR(l_person_rec.date_of_birth,'YYYY-MM-DD');
504     p_person_rec.act_info9            := l_person_rec.sex;
505     p_person_rec.act_info10           := l_person_rec.agg_paye_flag;
506     p_person_rec.act_info11           := l_person_rec.multiple_asg_flag;
507     p_person_rec.act_info16           := get_passport_number(l_person_rec.p_person_id,p_effective_date,l_person_rec.business_group_id);
508 
509     OPEN csr_partner_details(l_person_rec.p_person_id);
510     FETCH csr_partner_details INTO l_partner_name, l_partner_ni;
511     CLOSE csr_partner_details;
512 
513     l_partner_surname       := trim(SUBSTR(l_partner_name,1,instr(l_partner_name,' ')));
514     l_partner_first_name    := trim(SUBSTR(l_partner_name,LENGTH(l_partner_surname) +1,instr(l_partner_name,' ',LENGTH(l_partner_surname))));
515     l_partner_second_name   := trim(SUBSTR(l_partner_name,LENGTH(l_partner_surname||l_partner_first_name)+2,(instr(l_partner_name,' ',
516                                LENGTH(l_partner_surname||l_partner_first_name)+3)) - (LENGTH(l_partner_surname||l_partner_first_name)+2) ));
517     p_person_rec.act_info12 := l_partner_surname;
518     p_person_rec.act_info13 := l_partner_first_name;
519     p_person_rec.act_info14 := l_partner_second_name;
520     p_person_rec.act_info15 := l_partner_ni;
521     hr_utility.set_location('Leaving: '||l_proc,999);
522     RETURN l_arch;
523   END fetch_person_rec;
524   --
525 
526   -- Function to fetch Assignment details (CONTEXT - GB_RTI_FPS_ASG_DET1)
527 FUNCTION fetch_asg_det1(
528     p_effective_date     IN DATE,
529     p_last_asg_action_id IN NUMBER,
530     p_eyu_effective_date IN DATE,
531     p_person_rec         IN act_info_rec,
532     p_fps_rec1 OUT nocopy act_info_rec)
533   RETURN BOOLEAN
534 IS
535   l_proc CONSTANT VARCHAR2(50):= g_package||'fetch_asg_det1';
536   l_arch BOOLEAN;
537   --Below cursor fetches the starter details of the current assignment
538   CURSOR csr_get_starter_details(p_asg_id NUMBER)
539   IS
540     SELECT assignment_extra_info_id,
541       aei_information1 starter_decl,
542       aei_information2 prev_emp_paye_ref,
543       aei_information3 prev_tax_code,
544       aei_information4 date_left_prev_employer,
545       aei_information5 prev_tax_basis,
546       aei_information6 last_payment_period_type,
547       aei_information7 last_payment_period,
548       aei_information8 starter_flag,
549       aei_information10 continue_with_student_loan,
550       aei_information8 not_paid_between,
551       object_version_number object_version_number
552     FROM per_assignment_extra_info
553     WHERE assignment_id  = p_asg_id
554     AND information_type = 'GB_RTI_ASG_DETAILS';
555 
556   --Below cursor fetches the pension details of the current assignment
557   CURSOR csr_get_pensioner_details(p_asg_id NUMBER)
558   IS
559     SELECT assignment_extra_info_id,
560       aei_information9 pensioner_flag,
561       aei_information12 date_pension_started,
562       trim(aei_information13) annual_pension,
563       aei_information14 recently_bereaved,
564       object_version_number object_version_number
565     FROM per_assignment_extra_info
566     WHERE assignment_id  = p_asg_id
567     AND information_type = 'GB_RTI_ASG_DETAILS';
568 
569   --Below cursor fetches the expat details of the current assignment
570   CURSOR csr_get_expat_details(p_asg_id NUMBER)
571   IS
572     SELECT assignment_extra_info_id,
573       aei_information15 expat_statement,
574       aei_information16 date_emp_start_uk,
575       aei_information17 eea_cw_citizen,
576       aei_information18 epm6_scheme,
577       aei_information19 expat_flag,
578       object_version_number object_version_number
579     FROM per_assignment_extra_info
580     WHERE assignment_id  = p_asg_id
581     AND information_type = 'GB_RTI_ASG_DETAILS';
582 /*
583 cursor csr_fetch_asg_num is
584 select assignment_number from per_all_assignments_f where assignment_id = p_person_rec.assignment_id
585 and p_effective_date between effective_start_date and effective_end_date;
586 */
587 --Cursor to fetch RTI Payroll ID for the assignment
588   CURSOR csr_fetch_asg_num  IS
589   SELECT aei_information3 rti_payroll_id
590   FROM   per_assignment_extra_info
591   WHERE  assignment_id            = p_person_rec.assignment_id
592   AND    aei_information_category = 'GB_RTI_AGGREGATION';
593 
594 -- Cursor to fetch Termination date
595 cursor csr_terminated_date is
596      select serv.actual_termination_date actual_termination_date
597      from
598             per_all_assignments_f asg,
599             per_periods_of_service serv
600      where  asg.assignment_id = p_person_rec.assignment_id
601      and    asg.period_of_service_id = serv.period_of_service_id
602      and    p_effective_date between asg.effective_start_date and asg.effective_end_date
603      and    actual_termination_date <= greatest(p_eyu_effective_date,p_effective_date);
604 
605   --Below cursor fetches the termination date of the current assignment
606   CURSOR csr_get_term_asg_info (p_asg_id NUMBER)
607   IS
608     SELECT min(paaf.effective_start_date) min_active_start_date
609     FROM per_all_assignments_f paaf,
610       per_assignment_status_types past
611     WHERE paaf.assignment_id           = p_asg_id
612     AND paaf.assignment_status_type_id = past.assignment_status_type_id
613     AND past.per_system_status        IN ('ACTIVE_ASSIGN', 'SUSP_ASSIGN');
614 
615  CURSOR csr_max_run_result(p_assignment_action_id number,p_element_id number) IS
616   SELECT max(prr.RUN_RESULT_ID)
617   FROM pay_run_results prr
618   WHERE prr.ASSIGNMENT_ACTION_ID = p_assignment_action_id
619   AND prr.ELEMENT_TYPE_ID = p_element_id
620   AND prr.status in ('P','PA');
621 
622 
623   CURSOR csr_run_result(p_run_result_id number,p_element_type_id number) IS
624   SELECT  max(decode(name,'Tax Code',result_value,NULL)) tax_code,
625           max(decode(name,'Tax Basis',result_value,NULL)) tax_basis
626   FROM pay_input_values_f v,
627        pay_run_result_values rrv
628   WHERE rrv.run_result_id = p_run_result_id
629     AND v.input_value_id = rrv.input_value_id
630     AND v.element_type_id = p_element_type_id;
631 
632 CURSOR  csr_paye_details(p_assignment_id  NUMBER) IS
633   SELECT  max(decode(iv.name,'Tax Code',screen_entry_value))     tax_code,
634           max(decode(iv.name,'Tax Basis',DECODE(screen_entry_value,'N','Y',NULL),NULL))    tax_basis   --  kvinayku  bug no 14774165
635   FROM  pay_element_entries_f e,
636         pay_element_entry_values_f v,
637         pay_input_values_f iv,
638         pay_element_links_f link
639   WHERE e.assignment_id = p_assignment_id
640   AND   link.element_type_id = g_paye_details_id
641   AND   e.element_link_id = link.element_link_id
642   AND   e.element_entry_id = v.element_entry_id
643   AND   iv.input_value_id = v.input_value_id
644   AND   e.effective_end_date BETWEEN link.effective_start_date AND link.effective_end_date
645   AND   e.effective_end_date BETWEEN iv.effective_start_date AND iv.effective_end_date
646   AND   e.effective_end_date BETWEEN v.effective_start_date AND v.effective_end_date
647   AND   e.effective_end_date = (select max(e1.effective_end_date)
648                                 from   pay_element_entries_f  e1,
649                                        pay_element_links_f    link1
650                                 where  link1.element_type_id = g_paye_details_id
651                                 and    e1.assignment_id = p_assignment_id
652                                 and    e1.element_link_id = link1.element_link_id);
653 
654   l_starter_rec csr_get_starter_details%rowtype;
655   l_pensioner_rec csr_get_pensioner_details%rowtype;
656   l_expat_rec csr_get_expat_details%rowtype;
657   l_stay_over_6_months           VARCHAR2(1);
658   l_stay_less_6_months           VARCHAR2(1);
659   l_working_in_out_UK            VARCHAR2(1);
660   l_asg_number                   per_assignments_f.assignment_number%TYPE;
661 
662   l_starter_decl               VARCHAR2(30);
663   l_continue_with_student_loan VARCHAR2(30);
664   l_ovn                        NUMBER;
665   l_starter_flag               VARCHAR2(1);
666   l_pensioner_flag             VARCHAR2(1);
667   l_expat_flag                 VARCHAR2(1);
668   l_recently_bereaved          VARCHAR2(30);
669   l_annual_pension             VARCHAR2(30);
670   l_eea_cw_citizen             VARCHAR2(30);
671   l_epm6_scheme                VARCHAR2(30);
672   l_asg_eff_start_date         DATE;
673   l_person_actual_term_date    DATE;
674   l_asg_effective_end_date     DATE;
675   l_date_of_leaving            DATE;
676   l_ovn_extra_info             NUMBER;
677   l_asg_info_id                NUMBER;
678   l_person_id                  NUMBER;
679   l_min_active_start_date      DATE;
680   l_tax_code                   pay_element_entry_values_f.screen_entry_value%type;
681 	l_tax_basis                  pay_element_entry_values_f.screen_entry_value%type;
682 	l_rti_sent_flag              VARCHAR2(15);
683   l_paye_rr_id   number;
684   l_paye_details_rr_id number;
685 
686 BEGIN
687   hr_utility.set_location('Entering: '||l_proc,1);
688   l_arch := true;
689 
690 
691   hr_utility.trace('Start Year: '||TO_CHAR(g_start_year));
692   hr_utility.trace('End Year: '||TO_CHAR(g_end_year));
693   hr_utility.trace('Calling csr_get_starter_details');
694   hr_utility.trace('p_person_rec.assignment_id: '||p_person_rec.assignment_id);
695 
696   OPEN csr_get_starter_details(p_person_rec.assignment_id);
697   FETCH csr_get_starter_details INTO l_starter_rec;
698   CLOSE csr_get_starter_details;
699 
700   l_starter_decl               := NULL;
701   l_continue_with_student_loan := NULL;
702   l_starter_flag               := l_starter_rec.starter_flag;
703   g_reset_flag_type            := NULL;
704   hr_utility.trace('Calling csr_get_starter_details1');
705   hr_utility.trace('l_starter_flag: '||l_starter_flag);
706   hr_utility.trace('l_starter_rec.starter_decl: '||l_starter_rec.starter_decl);
707   hr_utility.trace(' l_starter_rec.continue_with_student_loan: '|| l_starter_rec.continue_with_student_loan);
708 
709   IF (l_starter_flag = 'N'
710       AND (l_starter_rec.starter_decl IS NOT NULL
711 	   OR NVL(l_starter_rec.continue_with_student_loan,'N') = 'Y' )) THEN
712     hr_utility.trace('Calling csr_get_starter_details2');
713     l_starter_decl               := l_starter_rec.starter_decl;
714     l_continue_with_student_loan := l_starter_rec.continue_with_student_loan;
715     l_ovn                        := l_starter_rec.object_version_number;
716     hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false,
717                                                                p_object_version_number => l_ovn,
718                                                                p_assignment_extra_info_id => l_starter_rec.assignment_extra_info_id,
719                                                                p_aei_information_category => 'GB_RTI_ASG_DETAILS',
720                                                                p_aei_information8 => 'Y');
721     g_reset_flag_type := 'STARTER';
722     l_rti_sent_flag   := 'STARTER';
723     hr_utility.trace('Calling csr_get_starter_details3');
724   END IF;
725   ---
726   hr_utility.trace('Calling csr_get_pensioner_details');
727 
728   OPEN csr_get_pensioner_details(p_person_rec.assignment_id);
729   FETCH csr_get_pensioner_details INTO l_pensioner_rec;
730   CLOSE csr_get_pensioner_details;
731 
732   l_recently_bereaved   := NULL;
733   l_pensioner_flag      := l_pensioner_rec.pensioner_flag;
734   l_annual_pension      := NULL;
735   g_reset_flag_type     := NULL;
736 
737   hr_utility.trace('l_pensioner_flag: '||l_pensioner_flag);
738   hr_utility.trace('l_pensioner_rec.pensioner_flag: '||l_pensioner_rec.pensioner_flag);
739   hr_utility.trace('l_pensioner_rec.recently_bereaved: '||l_pensioner_rec.recently_bereaved);
740   hr_utility.trace('l_pensioner_rec.annual_pension: '||l_pensioner_rec.annual_pension);
741 
742   IF (l_pensioner_flag   = 'N'
743       AND ( NVL(l_pensioner_rec.recently_bereaved,'N') = 'Y'
744        OR l_pensioner_rec.annual_pension IS NOT NULL)) THEN
745     l_recently_bereaved := l_pensioner_rec.recently_bereaved;
746     if l_pensioner_rec.annual_pension is not null then
747        l_annual_pension    := (l_pensioner_rec.annual_pension)*100;
748    end if;
749     l_ovn               := l_pensioner_rec.object_version_number;
750     hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false,
751                                                                p_object_version_number => l_ovn,
752                                                                p_assignment_extra_info_id => l_pensioner_rec.assignment_extra_info_id,
753                                                                p_aei_information_category => 'GB_RTI_ASG_DETAILS',
754                                                                p_aei_information9 => 'Y');
755     l_rti_sent_flag   := 'PENSIONER';
756     g_reset_flag_type := 'PENSIONER';
757   END IF;
758   ---
759   hr_utility.trace('Calling csr_get_expat_details');
760 
761   OPEN csr_get_expat_details(p_person_rec.assignment_id);
762   FETCH csr_get_expat_details INTO l_expat_rec;
763   CLOSE csr_get_expat_details;
764 
765   l_eea_cw_citizen     := NULL;
766   l_epm6_scheme        := NULL;
767   l_stay_over_6_months := NULL;
768   l_stay_less_6_months := NULL;
769   l_working_in_out_UK  := NULL;
770   l_expat_flag      := l_expat_rec.expat_flag;
771 
772   hr_utility.trace('Calling csr_get_expat_details1');
773   hr_utility.trace('l_expat_flag: '||l_expat_flag);
774   hr_utility.trace('l_expat_rec.eea_cw_citizen: '||l_expat_rec.eea_cw_citizen);
775   hr_utility.trace(' l_expat_rec.epm6_scheme: '|| l_expat_rec.epm6_scheme);
776   hr_utility.trace(' l_expat_rec.expat_statement: '|| l_expat_rec.expat_statement);
777 
778   g_reset_flag_type := NULL;
779 
780   IF (l_expat_flag   = 'N'
781       AND ( NVL(l_expat_rec.eea_cw_citizen,'N') = 'Y'
782            OR NVL(l_expat_rec.epm6_scheme,'N') = 'Y'
783            OR l_expat_rec.expat_statement IS NOT NULL)) THEN
784     hr_utility.trace('Calling csr_get_expat_details2');
785     IF l_expat_rec.expat_statement    = 'A' THEN
786       l_stay_over_6_months           := 'Y';
787     elsif l_expat_rec.expat_statement = 'B' THEN
788       l_stay_less_6_months           := 'Y';
789     elsif l_expat_rec.expat_statement = 'C' THEN
790       l_working_in_out_UK            := 'Y';
791     END IF;
792 
793     hr_utility.trace('Calling csr_get_expat_details3');
794     --l_starter_decl   := l_expat_rec.expat_statement;
795     l_eea_cw_citizen := l_expat_rec.eea_cw_citizen;
796     l_epm6_scheme    := l_expat_rec.epm6_scheme;
797     l_ovn            := l_expat_rec.object_version_number;
798     hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false,
799                                                                p_object_version_number => l_ovn,
800                                                                p_assignment_extra_info_id => l_expat_rec.assignment_extra_info_id,
801                                                                p_aei_information_category => 'GB_RTI_ASG_DETAILS',
802                                                                p_aei_information19 => 'Y');
803     l_rti_sent_flag   := 'EXPAT';
804     g_reset_flag_type := 'EXPAT';
805   END IF;
806 
807   OPEN csr_get_term_asg_info (p_person_rec.assignment_id );
808   FETCH csr_get_term_asg_info INTO l_min_active_start_date;
809   CLOSE csr_get_term_asg_info;
810 
811   ---
812 IF (l_starter_rec.starter_flag = 'N') THEN
813   IF((l_starter_rec.starter_decl IS NOT NULL
814       OR NVL(l_starter_rec.continue_with_student_loan,'N') = 'Y')
815       AND l_starter_rec.starter_flag = 'N')
816 
817   OR ((l_pensioner_rec.date_pension_started IS NOT NULL
818        OR l_pensioner_rec.annual_pension IS NOT NULL
819        OR NVL(l_pensioner_rec.recently_bereaved,'N') = 'Y')
820        AND l_pensioner_rec.pensioner_flag = 'N')
821 
822   OR ((l_expat_rec.expat_statement IS NOT NULL
823        OR l_expat_rec.date_emp_start_uk IS NOT NULL
824        OR NVL(l_expat_rec.eea_cw_citizen,'N') = 'Y'
825        OR NVL(l_expat_rec.epm6_scheme,'N') = 'Y')
826        AND l_expat_rec.expat_flag = 'N') THEN
827 
828 			hr_utility.trace('l_asg_eff_start_date : '||l_asg_eff_start_date);
829 
830        if(l_min_active_start_date >= g_start_year) then
831           l_asg_eff_start_date := l_min_active_start_date;
832           hr_utility.trace('l_asg_eff_start_date assigned: '||l_asg_eff_start_date);
833        end if;
834 
835   ELSE
836        l_asg_eff_start_date := NULL;
837        hr_utility.trace('l_asg_eff_start_date'||l_asg_eff_start_date);
838   END IF;
839 END IF;
840 
841 --Fetch RTI Payroll id .
842   open csr_fetch_asg_num;
843   fetch csr_fetch_asg_num into l_asg_number;
844   close csr_fetch_asg_num;
845 
846   hr_utility.trace('l_asg_number  : '|| l_asg_number);
847 
848   open csr_terminated_date;
849   fetch csr_terminated_date into l_person_actual_term_date;
850   close csr_terminated_date;
851 
852   hr_utility.trace('l_person_actual_term_date  : '|| l_person_actual_term_date);
853 
854   l_date_of_leaving := l_person_actual_term_date;
855 
856   hr_utility.trace('l_date_of_leaving : '|| l_date_of_leaving);
857   hr_utility.trace('l_starter_decl : '|| l_starter_decl);
858   hr_utility.trace('l_asg_eff_start_date : '|| l_asg_eff_start_date);
859   ---
860 
861   hr_utility.trace('g_paye_details_id : '|| g_paye_details_id);
862   hr_utility.trace('g_paye_element_id : '|| g_paye_element_id);
863 
864 
865 	  open csr_max_run_result(p_last_asg_action_id,g_paye_element_id);
866     fetch csr_max_run_result into l_paye_rr_id;
867     close csr_max_run_result;
868 
869     hr_utility.trace('Fetching run result : '||l_paye_rr_id);
870     -- First we try to fetch it from the latest PAYE run results
871     open csr_run_result(l_paye_rr_id, g_paye_element_id);
872     fetch csr_run_result into l_tax_code,l_tax_basis;
873     close csr_run_result;
874 
875   if l_tax_code is null then
876 	open csr_paye_details(p_person_rec.assignment_id);
877 	fetch csr_paye_details
878     INTO l_tax_code,
879          l_tax_basis;
880 	close csr_paye_details;
881 	end if;
882   hr_utility.trace('l_tax_code : '|| l_tax_code);
883   hr_utility.trace('l_tax_basis : '|| l_tax_basis);
884   hr_utility.trace('l_rti_sent_flag : '|| l_rti_sent_flag);
885 
886   hr_utility.trace('Assigning values');
887 
888   p_fps_rec1.assignment_id        := p_person_rec.assignment_id;
889   p_fps_rec1.action_info_category := 'GB_RTI_EYU_ASG_DET';
890   p_fps_rec1.act_info1            := to_char(l_asg_eff_start_date,'YYYY-MM-DD');
891   p_fps_rec1.act_info2            := to_char(l_date_of_leaving,'YYYY-MM-DD');
892   p_fps_rec1.act_info3            := l_starter_decl;
893   p_fps_rec1.act_info4            := l_continue_with_student_loan;
894   p_fps_rec1.act_info5            := l_stay_over_6_months;
895   p_fps_rec1.act_info6            := l_stay_less_6_months;
896   p_fps_rec1.act_info7            := l_working_in_out_UK;
897   p_fps_rec1.act_info8            := l_eea_cw_citizen;
898   p_fps_rec1.act_info9            := l_epm6_scheme;
899   p_fps_rec1.act_info10           := l_asg_number;
900   p_fps_rec1.act_info11           := l_recently_bereaved;
901   p_fps_rec1.act_info12           := l_annual_pension;
902   p_fps_rec1.act_info13           := l_tax_code;
903   p_fps_rec1.act_info14           := l_tax_basis;
904 
905 
906   hr_utility.set_location('Leaving: '||l_proc,999);
907   RETURN l_arch;
908 
909 EXCEPTION
910 WHEN OTHERS THEN
911   hr_utility.set_location('Error in function fetch_fps_asg_det1 ', 15);
912   hr_utility.trace('Exception:' || SQLCODE || ' - ' || SQLERRM );
913   fnd_file.put_line(fnd_file.LOG,'Exception:' || SQLCODE || ' - ' || SQLERRM);
914   RAISE;
915 END fetch_asg_det1;
916 --
917 --
918 -- Function to fetch Assignment details (CONTEXT - GB_RTI_FPS_ASG_DET2)
919 FUNCTION fetch_asg_det2(
920     p_last_asg_action_id IN NUMBER,
921     p_asg_id             IN NUMBER,
922     p_effective_date     IN DATE,
923     p_fps_bal_context_2  IN OUT nocopy act_info_rec )
924   RETURN BOOLEAN
925 IS
926   l_context_lst pay_balance_pkg.t_context_tab;           -- used for batch balance retrieval
927   l_output_table pay_balance_pkg.t_detailed_bal_out_tab; -- output of batch balance retrieval
928   l_proc              CONSTANT VARCHAR2(50):= g_package||'fetch_asg_det2';
929 
930   l_asg_primary_flag   VARCHAR2(1);
931   l_per_agg_flag       VARCHAR2(1);
932   l_aggr_archive_flag  VARCHAR2(1);
933   l_last_chld_act_id   NUMBER;
934   l_tax_pay_val        NUMBER;
935   l_tax_pay_def_bal_id NUMBER;
936   l_ytd_dim            VARCHAR2(15) := '_ASG_TD_YTD';
937 
938   CURSOR csr_asg(c_asg_id NUMBER, c_effective_date DATE)
939   IS
940     SELECT trim(asg.primary_flag) asg_primary_flag,
941       trim(pap.per_information10) per_agg_flag
942     FROM per_all_people_f pap,
943       per_all_assignments_f asg
944     WHERE asg.assignment_id       = c_asg_id
945     AND pap.person_id             = asg.person_id
946     AND c_effective_date BETWEEN asg.effective_start_date AND asg.effective_end_date
947     AND c_effective_date BETWEEN pap.effective_start_date AND pap.effective_end_date;
948 
949   CURSOR csr_child_act_id(c_lst_act_id NUMBER)
950   IS
951     SELECT MAX(ASSIGNMENT_ACTION_ID)
952     FROM pay_assignment_actions
953     WHERE SOURCE_ACTION_ID = c_lst_act_id;
954 
955 	cursor csr_get_taxable_pay(c_balance_name varchar2, c_dim_name varchar2) is
956 	select pdb.defined_balance_id from
957   pay_defined_balances pdb,
958 	pay_balance_dimensions pbd,
959 	pay_balance_types pbt
960 	where pbt.balance_name = c_balance_name
961 	and pbd.database_item_suffix = c_dim_name
962 	and pbt.balance_type_id= pdb.balance_type_id
963 	and pbd.balance_dimension_id = pdb.balance_dimension_id
964   and	pbt.legislation_code = 'GB'
965   and	pdb.legislation_code = 'GB'
966   and	pbd.legislation_code = 'GB';
967 
968   cursor csr_tax_pay_value(p_last_asg_action_id number,l_tax_pay_def_bal_id number)
969   is
970 	select hr_dirbal.get_balance(p_last_asg_action_id,l_tax_pay_def_bal_id) from dual;
971 
972 BEGIN
973   hr_utility.set_location('Entering: '||l_proc,1);
974   l_context_lst(1).tax_unit_id       :=NULL;
975   l_context_lst(1).jurisdiction_code :=NULL;
976   l_context_lst(1).source_id         :=NULL;
977   l_context_lst(1).source_text       :=NULL;
978   l_context_lst(1).source_number     :=NULL;
979   l_context_lst(1).source_text2      :=NULL;
980   l_context_lst(1).time_def_id       :=NULL;
981   l_context_lst(1).balance_date      :=NULL;
982   l_context_lst(1).local_unit_id     :=NULL;
983   l_context_lst(1).source_number2    :=NULL;
984   l_context_lst(1).organization_id   :=NULL;
985   hr_utility.set_location('assignment_id :' || p_asg_id,15);
986   l_asg_primary_flag  := 'N';
987   l_per_agg_flag      := 'N';
988   l_aggr_archive_flag := 'N';
989 
990   OPEN csr_asg(p_asg_id, p_effective_date);
991   FETCH csr_asg INTO l_asg_primary_flag, l_per_agg_flag;
992   CLOSE csr_asg;
993 
994 
995   hr_utility.set_location('p_last_asg_action_id :' || p_last_asg_action_id,15);
996   hr_utility.set_location('l_asg_primary_flag :' || l_asg_primary_flag,15);
997   hr_utility.set_location('l_per_agg_flag :' || l_per_agg_flag,15);
998 
999   IF NVL(l_per_agg_flag,'N')       = 'Y' THEN
1000       hr_utility.trace('Aggregation Found.');
1001       l_aggr_archive_flag := 'Y';
1002 			l_ytd_dim := '_PER_TD_YTD';
1003   END IF;
1004   hr_utility.set_location('l_aggr_archive_flag :' || l_aggr_archive_flag,15);
1005   ---
1006 
1007     -- Get the child assignment action id to Archive Tax code and Tax basis.
1008     -- As the run results are generated with child assignment action id.
1009 
1010     OPEN csr_child_act_id(p_last_asg_action_id);
1011     FETCH csr_child_act_id INTO l_last_chld_act_id;
1012     CLOSE csr_child_act_id;
1013 
1014  IF l_last_chld_act_id is NULL THEN
1015        l_last_chld_act_id := p_last_asg_action_id;
1016     END IF;
1017 
1018      hr_utility.trace('l_last_chld_act_id : '||l_last_chld_act_id);
1019 
1020    open csr_get_taxable_pay('Taxable Pay', '_ASG_RUN');
1021    fetch csr_get_taxable_pay into l_tax_pay_def_bal_id;
1022    close csr_get_taxable_pay;
1023 
1024    open csr_tax_pay_value(p_last_asg_action_id,l_tax_pay_def_bal_id);
1025    fetch csr_tax_pay_value into l_tax_pay_val;
1026    close csr_tax_pay_value;
1027 -- Test whether we can get run level value with parent action id.
1028 -- If not pass the child assignment action id.
1029 
1030 if NVL(l_aggr_archive_flag,'N') = 'Y' then
1031 
1032     hr_utility.trace('l_aggr_archive_flag '||l_aggr_archive_flag);
1033 
1034    if l_tax_pay_val = 0 then
1035    pay_balance_pkg.get_value(p_assignment_action_id => l_last_chld_act_id,
1036                               p_defined_balance_lst => g_aggr_defined_balance_lst ,
1037                               p_context_lst => l_context_lst ,
1038                               p_output_table => l_output_table );
1039    else
1040    pay_balance_pkg.get_value(p_assignment_action_id => p_last_asg_action_id ,
1041                               p_defined_balance_lst => g_aggr_defined_balance_lst ,
1042                               p_context_lst => l_context_lst ,
1043                               p_output_table => l_output_table );
1044    end if;
1045 else
1046 
1047     hr_utility.trace('l_aggr_archive_flag '||l_aggr_archive_flag);
1048 
1049    if l_tax_pay_val = 0 then
1050    pay_balance_pkg.get_value(p_assignment_action_id => l_last_chld_act_id,
1051                               p_defined_balance_lst => g_defined_balance_lst ,
1052                               p_context_lst => l_context_lst ,
1053                               p_output_table => l_output_table );
1054    else
1055    pay_balance_pkg.get_value(p_assignment_action_id => p_last_asg_action_id ,
1056                               p_defined_balance_lst => g_defined_balance_lst ,
1057                               p_context_lst => l_context_lst ,
1058                               p_output_table => l_output_table );
1059    end if;
1060 
1061 end if;
1062 
1063 
1064     hr_utility.trace('After invoking get_value');
1065     hr_utility.trace('Before entering for i in 1..g_fps_bal_det_tab.last loop');
1066     hr_utility.set_location('l_ytd_dim :' || l_ytd_dim,15);
1067 
1068 if NVL(l_aggr_archive_flag,'N') = 'Y' then
1069 
1070     hr_utility.trace('After l_aggr_archive_flag'||l_aggr_archive_flag);
1071 
1072 		FOR outer_rec IN 1..l_output_table.count
1073     LOOP
1074 
1075 	IF l_output_table(outer_rec).balance_value is not null then -- Null Check
1076 
1077       FOR inner_rec IN 1..g_fps_aggr_bal_det_tab.last
1078       LOOP
1079         IF (g_fps_aggr_bal_det_tab(inner_rec).defined_balance_id         = l_output_table(outer_rec).defined_balance_id and l_output_table(outer_rec).balance_value is not null) THEN
1080           IF g_fps_aggr_bal_det_tab(inner_rec).balance_name              = 'Taxable Pay' THEN
1081             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix   = l_ytd_dim ) THEN
1082               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := 100 *  l_output_table(outer_rec).balance_value;
1083               p_fps_bal_context_2.act_info15                        := 100 * l_output_table(outer_rec).balance_value;
1084             END IF;
1085           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name           = 'PAYE' THEN
1086             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix   = '_PER_TD_CPE_YTD') THEN
1087               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
1088               p_fps_bal_context_2.act_info16                        := 100 * l_output_table(outer_rec).balance_value;
1089             END IF;
1090           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name           = 'Student Loan' THEN
1091             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix   = l_ytd_dim) THEN
1092               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := 100 * NVL(l_output_table(outer_rec).balance_value,0);
1093               p_fps_bal_context_2.act_info17                        :=100 * NVL(l_output_table(outer_rec).balance_value,0);
1094             END IF;
1095           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'SSP Total' THEN
1096             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = l_ytd_dim) THEN
1097               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
1098               p_fps_bal_context_2.act_info18                     := 100 * l_output_table(outer_rec).balance_value;
1099             END IF;
1100           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'SMP Total' THEN
1101             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = l_ytd_dim) THEN
1102               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
1103               p_fps_bal_context_2.act_info19                     := 100 * NVL(l_output_table(outer_rec).balance_value,0);
1104             END IF;
1105           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'SPP Adoption Total' THEN
1106             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = l_ytd_dim) THEN
1107               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
1108               p_fps_bal_context_2.act_info20                     := nvl(p_fps_bal_context_2.act_info20,0) + 100 * l_output_table(outer_rec).balance_value;
1109             END IF;
1110           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'SPP Birth Total' THEN
1111             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = l_ytd_dim) THEN
1112               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
1113               p_fps_bal_context_2.act_info20                     := nvl(p_fps_bal_context_2.act_info20,0) + 100 * l_output_table(outer_rec).balance_value;
1114             END IF;
1115           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'SAP Total' THEN
1116             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = l_ytd_dim) THEN
1117               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
1118               p_fps_bal_context_2.act_info21                     := 100 * l_output_table(outer_rec).balance_value;
1119             END IF;
1120           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'ASPP Adoption Total' THEN
1121             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = l_ytd_dim) THEN
1122               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
1123               p_fps_bal_context_2.act_info22                     := nvl(p_fps_bal_context_2.act_info22,0) + 100 * l_output_table(outer_rec).balance_value;
1124             END IF;
1125           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'ASPP Birth Total' THEN
1126             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = l_ytd_dim) THEN
1127               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
1128               p_fps_bal_context_2.act_info22                     := nvl(p_fps_bal_context_2.act_info22,0) + 100 * l_output_table(outer_rec).balance_value;
1129             END IF;
1130         END IF;
1131 	    END IF;
1132       END LOOP;
1133       hr_utility.trace('After for i in 1..g_fps_aggr_bal_det_tab.last loop');
1134 	  END IF; --Not null check ends
1135     END LOOP;
1136 else
1137 
1138     hr_utility.trace('After l_aggr_archive_flag'||l_aggr_archive_flag);
1139 
1140     FOR outer_rec IN 1..l_output_table.count
1141     LOOP
1142 
1143 	IF l_output_table(outer_rec).balance_value is not null then -- Null Check
1144 
1145       FOR inner_rec IN 1..g_fps_bal_det_tab.last
1146       LOOP
1147         IF (g_fps_bal_det_tab(inner_rec).defined_balance_id         = l_output_table(outer_rec).defined_balance_id and l_output_table(outer_rec).balance_value is not null) THEN
1148           IF g_fps_bal_det_tab(inner_rec).balance_name              = 'Taxable Pay' THEN
1149             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = l_ytd_dim ) THEN
1150               g_fps_bal_det_tab(inner_rec).balance_value           := 100 *  l_output_table(outer_rec).balance_value;
1151               p_fps_bal_context_2.act_info15                        := 100 * l_output_table(outer_rec).balance_value;
1152 							hr_utility.trace('Taxable pay '||p_fps_bal_context_2.act_info15);
1153             END IF;
1154           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'PAYE' THEN
1155             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = l_ytd_dim) THEN
1156               g_fps_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
1157               p_fps_bal_context_2.act_info16                        := 100 * l_output_table(outer_rec).balance_value;
1158             END IF;
1159           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'Student Loan' THEN
1160             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = l_ytd_dim) THEN
1161               g_fps_bal_det_tab(inner_rec).balance_value           := 100 * NVL(l_output_table(outer_rec).balance_value,0);
1162               p_fps_bal_context_2.act_info17                        :=100 * NVL(l_output_table(outer_rec).balance_value,0);
1163             END IF;
1164           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SSP Total' THEN
1165             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = l_ytd_dim) THEN
1166               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
1167               p_fps_bal_context_2.act_info18                     := 100 * l_output_table(outer_rec).balance_value;
1168             END IF;
1169           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SMP Total' THEN
1170             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = l_ytd_dim) THEN
1171               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
1172               p_fps_bal_context_2.act_info19                     := 100 * NVL(l_output_table(outer_rec).balance_value,0);
1173             END IF;
1174           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SPP Adoption Total' THEN
1175             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = l_ytd_dim) THEN
1176               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
1177               p_fps_bal_context_2.act_info20                     := nvl(p_fps_bal_context_2.act_info20,0) + 100 * l_output_table(outer_rec).balance_value;
1178             END IF;
1179           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SPP Birth Total' THEN
1180             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = l_ytd_dim) THEN
1181               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
1182               p_fps_bal_context_2.act_info20                     := nvl(p_fps_bal_context_2.act_info20,0) + 100 * l_output_table(outer_rec).balance_value;
1183             END IF;
1184           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SAP Total' THEN
1185             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = l_ytd_dim) THEN
1186               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
1187               p_fps_bal_context_2.act_info21                     := 100 * l_output_table(outer_rec).balance_value;
1188             END IF;
1189           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'ASPP Adoption Total' THEN
1190             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = l_ytd_dim) THEN
1191               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
1192               p_fps_bal_context_2.act_info22                     := nvl(p_fps_bal_context_2.act_info22,0) + 100 * l_output_table(outer_rec).balance_value;
1193             END IF;
1194           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'ASPP Birth Total' THEN
1195             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = l_ytd_dim) THEN
1196               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
1197               p_fps_bal_context_2.act_info22                     := nvl(p_fps_bal_context_2.act_info22,0) + 100 * l_output_table(outer_rec).balance_value;
1198             END IF;
1199         END IF;
1200 	    END IF;
1201       END LOOP;
1202       hr_utility.trace('After for i in 1..g_fps_bal_det_tab.last loop');
1203 	  END IF; --Not null check ends
1204     END LOOP;
1205 
1206 end if;
1207 
1208   RETURN true;
1209 
1210 EXCEPTION
1211 WHEN OTHERS THEN
1212   hr_utility.set_location('Error in function fetch_asg_det2 ', 15);
1213   hr_utility.trace('Exception:' || SQLCODE || ' - ' || SQLERRM );
1214   fnd_file.put_line(fnd_file.LOG,'Exception:' || SQLCODE || ' - ' || SQLERRM);
1215   RAISE;
1216 END fetch_asg_det2;
1217 --
1218 
1219 -- Function to fetch Assignment details (CONTEXT - GB_RTI_FPS_ASG_DET2)
1220 FUNCTION fetch_ni_det(
1221     p_last_asg_action_id IN NUMBER,
1222     p_asg_id             IN NUMBER,
1223     p_effective_date     IN DATE,
1224     l_archive_tab_ni_det OUT nocopy action_info_table )
1225   RETURN BOOLEAN
1226 IS
1227   l_context_lst pay_balance_pkg.t_context_tab;           -- used for batch balance retrieval
1228   l_output_table pay_balance_pkg.t_detailed_bal_out_tab; -- output of batch balance retrieval
1229   l_proc              CONSTANT VARCHAR2(50):= g_package||'fetch_ni_det';
1230   l_asg_primary_flag   VARCHAR2(1);
1231   l_per_agg_flag       VARCHAR2(1);
1232   l_aggr_archive_flag  VARCHAR2(1);
1233   l_last_chld_act_id   NUMBER;
1234   l_tax_pay_val        NUMBER;
1235   l_tax_pay_def_bal_id NUMBER;
1236   l_per_ni_flag        VARCHAR2(1);
1237   l_ni_rpt_asg_id      NUMBER;
1238   l_ni_rpt_date        DATE;
1239   l_ni_non_rti         VARCHAR2(1) := 'N';
1240 
1241   l_nia_total          NUMBER(15) :=0;
1242   l_nia_able           NUMBER(15) :=0;
1243   l_nib_total          NUMBER(15) :=0;
1244   l_nib_able           NUMBER(15) :=0;
1245   l_nic_total          NUMBER(15) :=0;
1246   l_nic_able           NUMBER(15) :=0;
1247   l_nid_total          NUMBER(15) :=0;
1248   l_nid_able           NUMBER(15) :=0;
1249   l_nie_total          NUMBER(15) :=0;
1250   l_nie_able           NUMBER(15) :=0;
1251   l_nij_total          NUMBER(15) :=0;
1252   l_nij_able           NUMBER(15) :=0;
1253   l_nil_total          NUMBER(15) :=0;
1254   l_nil_able           NUMBER(15) :=0;
1255 
1256   l_nia_able_run       NUMBER(15) :=0;
1257   l_nia_e_run          NUMBER(15) :=0;
1258   l_nib_able_run       NUMBER(15) :=0;
1259   l_nib_e_run          NUMBER(15) :=0;
1260   l_nic_able_run       NUMBER(15) :=0;
1261   l_nic_e_run          NUMBER(15) :=0;
1262   l_nid_able_run       NUMBER(15) :=0;
1263   l_nid_e_run          NUMBER(15) :=0;
1264   l_nie_able_run       NUMBER(15) :=0;
1265   l_nie_e_run          NUMBER(15) :=0;
1266   l_nij_able_run       NUMBER(15) :=0;
1267   l_nij_e_run          NUMBER(15) :=0;
1268   l_nil_able_run       NUMBER(15) :=0;
1269   l_nil_e_run          NUMBER(15) :=0;
1270 
1271   i                    NUMBER :=-1;
1272 
1273   already_a      NUMBER := -1;
1274   already_b      NUMBER := -1;
1275   already_c      NUMBER := -1;
1276   already_d      NUMBER := -1;
1277   already_e      NUMBER := -1;
1278   already_j      NUMBER := -1;
1279   already_l      NUMBER := -1;
1280 
1281 
1282   l_ytd_dim            VARCHAR2(15) := '_ASG_TD_YTD';
1283   l_reversal      VARCHAR2(1);
1284 
1285   CURSOR csr_asg(c_asg_id NUMBER, c_effective_date DATE)
1286   IS
1287     SELECT trim(asg.primary_flag) asg_primary_flag,
1288       trim(pap.per_information10) per_agg_flag,
1289       trim(pap.per_information9) per_ni_flag
1290     FROM per_all_people_f pap,
1291       per_all_assignments_f asg
1292     WHERE asg.assignment_id       = c_asg_id
1293     AND pap.person_id             = asg.person_id
1294     AND c_effective_date BETWEEN asg.effective_start_date AND asg.effective_end_date
1295     AND c_effective_date BETWEEN pap.effective_start_date AND pap.effective_end_date;
1296 
1297   CURSOR csr_child_act_id(c_lst_act_id NUMBER)
1298   IS
1299     SELECT MAX(ASSIGNMENT_ACTION_ID)
1300     FROM pay_assignment_actions
1301     WHERE SOURCE_ACTION_ID = c_lst_act_id;
1302 
1303 	cursor csr_get_taxable_pay(c_balance_name varchar2, c_dim_name varchar2) is
1304 	select pdb.defined_balance_id from pay_defined_balances pdb,
1305 	pay_balance_dimensions pbd,
1306 	pay_balance_types pbt
1307 	where pbt.balance_name = c_balance_name
1308 	and pbd.database_item_suffix = c_dim_name
1309 	and pbt.balance_type_id= pdb.balance_type_id
1310 	and pbd.balance_dimension_id = pdb.balance_dimension_id
1311   and	pbt.legislation_code = 'GB'
1312   and	pbd.legislation_code = 'GB'
1313   and	pdb.legislation_code = 'GB';
1314 
1315  -- Cursor to fetch the RTI NI Reporting assignment for this person.
1316    cursor csr_get_ni_rpt_asg(c_asg_id number) is
1317    select
1318    distinct paei.assignment_id , fnd_date.canonical_to_date(paei.AEI_INFORMATION2)
1319    from per_all_assignments_f paaf1, per_all_assignments_f paaf2 ,per_assignment_extra_info paei,
1320 				pay_all_payrolls_f pay,
1321         hr_soft_coding_keyflex sck
1322    where paaf1.assignment_id = c_asg_id
1323    and paaf1.person_id = paaf2.person_id
1324    and paaf2.assignment_type = 'E'
1325    and paei.assignment_id = paaf2.assignment_id
1326    and paei.AEI_INFORMATION_CATEGORY = 'GB_RTI_AGGREGATION'
1327    and paei. AEI_INFORMATION1 = 'Y'
1328 		AND     pay.payroll_id = paaf2.payroll_id
1329 		and    pay.soft_coding_keyflex_id = sck.soft_coding_keyflex_id
1330 		and    upper(g_tax_ref) = upper(sck.segment1)
1331     and    p_effective_date between pay.effective_start_date and pay.effective_end_date
1332 	 AND paaf1.effective_start_date =
1333 		       ( select max(asg2.effective_start_date)
1334 		         from   per_all_assignments_f asg2
1335 		         where  asg2.assignment_id         = paaf1.assignment_id
1336 		         and    asg2.assignment_type       = 'E'
1337 		         and    asg2.effective_start_date <= g_end_year
1338 		       )
1339 	 AND paaf2.effective_start_date =
1340 		       ( select max(asg2.effective_start_date)
1341 		         from   per_all_assignments_f asg2
1342 		         where  asg2.assignment_id         = paaf2.assignment_id
1343 		         and    asg2.assignment_type       = 'E'
1344 		         and    asg2.effective_start_date <= g_end_year
1345 		       )
1346    order by 2 desc;
1347 
1348    cursor csr_tax_pay_value(p_last_asg_action_id number,l_tax_pay_def_bal_id number)
1349    is
1350 	 select hr_dirbal.get_balance(p_last_asg_action_id,l_tax_pay_def_bal_id) from dual;
1351 
1352   cursor csr_reversal is
1353   select ACTION_TYPE from pay_assignment_actions paa, pay_payroll_actions ppa
1354   where paa.assignment_action_id  = p_last_asg_action_id
1355   and paa.payroll_action_id = ppa.payroll_action_id
1356   and ACTION_TYPE in ('V');
1357 
1358 BEGIN
1359   hr_utility.set_location('Entering: '||l_proc,1);
1360   l_context_lst(1).tax_unit_id       :=NULL;
1361   l_context_lst(1).jurisdiction_code :=NULL;
1362   l_context_lst(1).source_id         :=NULL;
1363   l_context_lst(1).source_text       :=NULL;
1364   l_context_lst(1).source_number     :=NULL;
1365   l_context_lst(1).source_text2      :=NULL;
1366   l_context_lst(1).time_def_id       :=NULL;
1367   l_context_lst(1).balance_date      :=NULL;
1368   l_context_lst(1).local_unit_id     :=NULL;
1369   l_context_lst(1).source_number2    :=NULL;
1370   l_context_lst(1).organization_id   :=NULL;
1371 
1372   l_asg_primary_flag  := 'N';
1373   l_per_agg_flag      := 'N';
1374   l_aggr_archive_flag := 'N';
1375 
1376   hr_utility.set_location('assignment_id :' || p_asg_id,15);
1377 
1378 IF l_archive_tab_ni_det.count > 0 THEN
1379  FOR i  IN l_archive_tab_ni_det.first .. l_archive_tab_ni_det.last
1380     LOOP
1381    			hr_utility.set_location('i       : ' || i ,999);
1382         if    l_archive_tab_ni_det(i).act_info1  = 'A' then
1383 						already_a := i;
1384 				elsif l_archive_tab_ni_det(i).act_info1  = 'B' then
1385 						already_b := i;
1386 				elsif l_archive_tab_ni_det(i).act_info1  = 'C' then
1387 						already_c := i;
1388 				elsif l_archive_tab_ni_det(i).act_info1  = 'D' then
1389 						already_d := i;
1390 				elsif l_archive_tab_ni_det(i).act_info1  = 'E' then
1391 						already_e := i;
1392 				elsif l_archive_tab_ni_det(i).act_info1  = 'J' then
1393 						already_j := i;
1394 				elsif l_archive_tab_ni_det(i).act_info1  = 'L' then
1395 						already_l := i;
1396         end if;
1397 
1398  END LOOP;
1399 END IF;
1400 
1401   OPEN csr_asg(p_asg_id, p_effective_date);
1402   FETCH csr_asg INTO l_asg_primary_flag, l_per_agg_flag,l_per_ni_flag;
1403   CLOSE csr_asg;
1404 
1405   hr_utility.set_location('l_asg_primary_flag :' || l_asg_primary_flag,15);
1406   hr_utility.set_location('l_per_agg_flag :' || l_per_agg_flag,15);
1407   hr_utility.set_location('l_per_ni_flag :' || l_per_ni_flag,15);
1408 
1409   IF NVL(l_per_agg_flag,'N')       = 'Y' THEN
1410       hr_utility.trace('Aggregation Found.');
1411       l_aggr_archive_flag := 'Y';
1412       l_ytd_dim := '_PER_TD_YTD';
1413   END IF;
1414   hr_utility.set_location('l_aggr_archive_flag :' || l_aggr_archive_flag,15);
1415   ---
1416 
1417 	open csr_reversal;
1418 	fetch csr_reversal into l_reversal;
1419 	close csr_reversal;
1420 
1421     -- Get the child assignment action id to Archive Tax code and Tax basis.
1422     -- As the run results are generated with child assignment action id.
1423 
1424     OPEN csr_child_act_id(p_last_asg_action_id);
1425     FETCH csr_child_act_id INTO l_last_chld_act_id;
1426     CLOSE csr_child_act_id;
1427 
1428     IF l_last_chld_act_id is NULL THEN
1429        l_last_chld_act_id := p_last_asg_action_id;
1430     END IF;
1431 
1432      hr_utility.trace('l_last_chld_act_id : '||l_last_chld_act_id);
1433 
1434    open csr_get_taxable_pay('Taxable Pay', '_ASG_RUN');
1435    fetch csr_get_taxable_pay into l_tax_pay_def_bal_id;
1436    close csr_get_taxable_pay;
1437 
1438    open csr_tax_pay_value(p_last_asg_action_id,l_tax_pay_def_bal_id);
1439    fetch csr_tax_pay_value into l_tax_pay_val;
1440    close csr_tax_pay_value;
1441 -- Test whether we can get run level value with parent action id.
1442 -- If not pass the child assignment action id.
1443 
1444 					--Get NI RTI reporting  assignment
1445 			   open csr_get_ni_rpt_asg(p_asg_id);
1446 			   fetch csr_get_ni_rpt_asg into l_ni_rpt_asg_id,l_ni_rpt_date;
1447 			   close csr_get_ni_rpt_asg;
1448 
1449 --NI Aggregation and if the assignment is RTI Reporting , consider it as Aggregation case
1450 if NVL(l_per_ni_flag,'N') = 'Y' and NVL(l_per_agg_flag,'N') = 'N' then
1451 if l_ni_rpt_asg_id = p_asg_id then
1452 	   l_aggr_archive_flag := 'Y';
1453      l_ytd_dim := '_PER_TD_YTD';
1454      hr_utility.trace('RTI Reporting Assignment.');
1455      hr_utility.trace('l_aggr_archive_flag : '||l_aggr_archive_flag);
1456 else
1457 	   l_ni_non_rti := 'Y';
1458      hr_utility.trace('Non RTI Reporting Assignment.');
1459      hr_utility.trace('l_ni_non_rti : '||l_ni_non_rti);
1460 end if;
1461 end if;
1462 
1463 if NVL(l_aggr_archive_flag,'N') = 'Y' then
1464    if l_tax_pay_val = 0 then
1465    pay_balance_pkg.get_value(p_assignment_action_id => l_last_chld_act_id,
1466                               p_defined_balance_lst => g_aggr_defined_balance_lst_ni ,
1467                               p_context_lst => l_context_lst ,
1468                               p_output_table => l_output_table );
1469    else
1470    pay_balance_pkg.get_value(p_assignment_action_id => p_last_asg_action_id ,
1471                               p_defined_balance_lst => g_aggr_defined_balance_lst_ni ,
1472                               p_context_lst => l_context_lst ,
1473                               p_output_table => l_output_table );
1474    end if;
1475 
1476 else
1477    if l_tax_pay_val = 0 then
1478    pay_balance_pkg.get_value(p_assignment_action_id => l_last_chld_act_id,
1479                               p_defined_balance_lst => g_defined_balance_lst_ni ,
1480                               p_context_lst => l_context_lst ,
1481                               p_output_table => l_output_table );
1482    else
1483    pay_balance_pkg.get_value(p_assignment_action_id => p_last_asg_action_id ,
1484                               p_defined_balance_lst => g_defined_balance_lst_ni ,
1485                               p_context_lst => l_context_lst ,
1486                               p_output_table => l_output_table );
1487    end if;
1488 end if;
1489 
1490     hr_utility.trace('After invoking get_value');
1491     hr_utility.trace('Before entering for i in 1..g_fps_bal_det_tab.last loop');
1492     hr_utility.set_location('l_ytd_dim :' || l_ytd_dim,15);
1493 
1494 if NVL(l_aggr_archive_flag,'N') = 'Y' then
1495 
1496     FOR outer_rec IN 1..l_output_table.count
1497     LOOP
1498 
1499 	IF l_output_table(outer_rec).balance_value is not null then -- Null Check
1500 
1501       FOR inner_rec IN 1..g_fps_ni_aggr_bal_det_tab.last
1502       LOOP
1503         IF (g_fps_ni_aggr_bal_det_tab(inner_rec).defined_balance_id         = l_output_table(outer_rec).defined_balance_id and l_output_table(outer_rec).balance_value is not null) THEN
1504           IF g_fps_ni_aggr_bal_det_tab(inner_rec).balance_name              = 'NI A Total' THEN
1505            IF (g_fps_ni_aggr_bal_det_tab(inner_rec).database_item_suffix    = l_ytd_dim) THEN
1506 						l_nia_total                                                  := 100 * NVL(l_output_table(outer_rec).balance_value,0);
1507             hr_utility.trace('After invoking ni D'||l_output_table(outer_rec).balance_value);
1508            END IF;
1509 			    elsif g_fps_ni_aggr_bal_det_tab(inner_rec).balance_name           = 'NI A Able' THEN
1510             IF (g_fps_ni_aggr_bal_det_tab(inner_rec).database_item_suffix   = l_ytd_dim) THEN
1511               g_fps_ni_aggr_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
1512               l_nia_able                                              := 100 * l_output_table(outer_rec).balance_value;
1513             END IF;
1514           elsif g_fps_ni_aggr_bal_det_tab(inner_rec).balance_name           = 'NI B Total' THEN
1515             IF (g_fps_ni_aggr_bal_det_tab(inner_rec).database_item_suffix   = l_ytd_dim) THEN
1516               g_fps_ni_aggr_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
1517               l_nib_total                                              := 100 * l_output_table(outer_rec).balance_value;
1518             END IF;
1519           elsif g_fps_ni_aggr_bal_det_tab(inner_rec).balance_name           = 'NI B Able' THEN
1520             IF (g_fps_ni_aggr_bal_det_tab(inner_rec).database_item_suffix   = l_ytd_dim) THEN
1521               g_fps_ni_aggr_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
1522               l_nib_able                                              := 100 * l_output_table(outer_rec).balance_value;
1523             END IF;
1524           elsif g_fps_ni_aggr_bal_det_tab(inner_rec).balance_name           = 'NI C Total' THEN
1525             IF (g_fps_ni_aggr_bal_det_tab(inner_rec).database_item_suffix   = l_ytd_dim) THEN
1526               g_fps_ni_aggr_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
1527               l_nic_total                                              := 100 * l_output_table(outer_rec).balance_value;
1528             END IF;
1529           elsif g_fps_ni_aggr_bal_det_tab(inner_rec).balance_name           = 'NI C Able' THEN
1530             IF (g_fps_ni_aggr_bal_det_tab(inner_rec).database_item_suffix   = l_ytd_dim) THEN
1531               g_fps_ni_aggr_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
1532               l_nic_able                                              := 100 * l_output_table(outer_rec).balance_value;
1533             END IF;
1534           elsif g_fps_ni_aggr_bal_det_tab(inner_rec).balance_name           = 'NI D Total' THEN
1535             IF (g_fps_ni_aggr_bal_det_tab(inner_rec).database_item_suffix   = l_ytd_dim) THEN
1536               g_fps_ni_aggr_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
1537               l_nid_total                                              := 100 * l_output_table(outer_rec).balance_value;
1538             END IF;
1539           elsif g_fps_ni_aggr_bal_det_tab(inner_rec).balance_name           = 'NI D Able' THEN
1540             IF (g_fps_ni_aggr_bal_det_tab(inner_rec).database_item_suffix   = l_ytd_dim) THEN
1541               g_fps_ni_aggr_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
1542               l_nid_able                                              := 100 * l_output_table(outer_rec).balance_value;
1543             END IF;
1544           elsif g_fps_ni_aggr_bal_det_tab(inner_rec).balance_name           = 'NI E Total' THEN
1545             IF (g_fps_ni_aggr_bal_det_tab(inner_rec).database_item_suffix   = l_ytd_dim) THEN
1546               g_fps_ni_aggr_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
1547               l_nie_total                                              := 100 * l_output_table(outer_rec).balance_value;
1548             END IF;
1549           elsif g_fps_ni_aggr_bal_det_tab(inner_rec).balance_name           = 'NI E Able' THEN
1550             IF (g_fps_ni_aggr_bal_det_tab(inner_rec).database_item_suffix   = l_ytd_dim) THEN
1551               g_fps_ni_aggr_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
1552               l_nie_able                                              := 100 * l_output_table(outer_rec).balance_value;
1553             END IF;
1554           elsif g_fps_ni_aggr_bal_det_tab(inner_rec).balance_name           = 'NI J Total' THEN
1555             IF (g_fps_ni_aggr_bal_det_tab(inner_rec).database_item_suffix   = l_ytd_dim) THEN
1556               g_fps_ni_aggr_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
1557               l_nij_total                                              := 100 * l_output_table(outer_rec).balance_value;
1558             END IF;
1559           elsif g_fps_ni_aggr_bal_det_tab(inner_rec).balance_name           = 'NI J Able' THEN
1560             IF (g_fps_ni_aggr_bal_det_tab(inner_rec).database_item_suffix   = l_ytd_dim) THEN
1561               g_fps_ni_aggr_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
1562               l_nij_able                                              := 100 * l_output_table(outer_rec).balance_value;
1563             END IF;
1564           elsif g_fps_ni_aggr_bal_det_tab(inner_rec).balance_name           = 'NI L Total' THEN
1565             IF (g_fps_ni_aggr_bal_det_tab(inner_rec).database_item_suffix   = l_ytd_dim) THEN
1566               g_fps_ni_aggr_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
1567               l_nil_total                                              := 100 * l_output_table(outer_rec).balance_value;
1568             END IF;
1569           elsif g_fps_ni_aggr_bal_det_tab(inner_rec).balance_name           = 'NI L Able' THEN
1570             IF (g_fps_ni_aggr_bal_det_tab(inner_rec).database_item_suffix   = l_ytd_dim) THEN
1571               g_fps_ni_aggr_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
1572               l_nil_able                                              := 100 * l_output_table(outer_rec).balance_value;
1573             END IF;
1574           END IF;
1575 	      END IF;
1576       END LOOP;
1577       hr_utility.trace('After for i in 1..g_fps_ni_aggr_bal_det_tab.last loop');
1578 	  END IF; --Not null check ends
1579     END LOOP;
1580 
1581 else
1582 
1583  FOR outer_rec IN 1..l_output_table.count
1584     LOOP
1585 
1586 	IF l_output_table(outer_rec).balance_value is not null then -- Null Check
1587 
1588       FOR inner_rec IN 1..g_fps_ni_bal_det_tab.last
1589       LOOP
1590         IF (g_fps_ni_bal_det_tab(inner_rec).defined_balance_id         = l_output_table(outer_rec).defined_balance_id and l_output_table(outer_rec).balance_value is not null) THEN
1591           IF g_fps_ni_bal_det_tab(inner_rec).balance_name              = 'NI A Total' THEN
1592            IF (g_fps_ni_bal_det_tab(inner_rec).database_item_suffix    = l_ytd_dim) THEN
1593 						l_nia_total                                                  := 100 * NVL(l_output_table(outer_rec).balance_value,0);
1594            END IF;
1595 			    elsif g_fps_ni_bal_det_tab(inner_rec).balance_name           = 'NI A Able' THEN
1596             IF (g_fps_ni_bal_det_tab(inner_rec).database_item_suffix   = l_ytd_dim) THEN
1597               g_fps_ni_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
1598               l_nia_able                                              := 100 * l_output_table(outer_rec).balance_value;
1599             END IF;
1600           elsif g_fps_ni_bal_det_tab(inner_rec).balance_name           = 'NI B Total' THEN
1601             IF (g_fps_ni_bal_det_tab(inner_rec).database_item_suffix   = l_ytd_dim) THEN
1602               g_fps_ni_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
1603               l_nib_total                                              := 100 * l_output_table(outer_rec).balance_value;
1604             END IF;
1605           elsif g_fps_ni_bal_det_tab(inner_rec).balance_name           = 'NI B Able' THEN
1606             IF (g_fps_ni_bal_det_tab(inner_rec).database_item_suffix   = l_ytd_dim) THEN
1607               g_fps_ni_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
1608               l_nib_able                                              := 100 * l_output_table(outer_rec).balance_value;
1609             END IF;
1610           elsif g_fps_ni_bal_det_tab(inner_rec).balance_name           = 'NI C Total' THEN
1611             IF (g_fps_ni_bal_det_tab(inner_rec).database_item_suffix   = l_ytd_dim) THEN
1612               g_fps_ni_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
1613               l_nic_total                                              := 100 * l_output_table(outer_rec).balance_value;
1614             END IF;
1615           elsif g_fps_ni_bal_det_tab(inner_rec).balance_name           = 'NI C Able' THEN
1616             IF (g_fps_ni_bal_det_tab(inner_rec).database_item_suffix   = l_ytd_dim) THEN
1617               g_fps_ni_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
1618               l_nic_able                                              := 100 * l_output_table(outer_rec).balance_value;
1619             END IF;
1620           elsif g_fps_ni_bal_det_tab(inner_rec).balance_name           = 'NI D Total' THEN
1621             IF (g_fps_ni_bal_det_tab(inner_rec).database_item_suffix   = l_ytd_dim) THEN
1622               g_fps_ni_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
1623               l_nid_total                                              := 100 * l_output_table(outer_rec).balance_value;
1624             END IF;
1625           elsif g_fps_ni_bal_det_tab(inner_rec).balance_name           = 'NI D Able' THEN
1626             IF (g_fps_ni_bal_det_tab(inner_rec).database_item_suffix   = l_ytd_dim) THEN
1627               g_fps_ni_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
1628               l_nid_able                                              := 100 * l_output_table(outer_rec).balance_value;
1629             END IF;
1630           elsif g_fps_ni_bal_det_tab(inner_rec).balance_name           = 'NI E Total' THEN
1631             IF (g_fps_ni_bal_det_tab(inner_rec).database_item_suffix   = l_ytd_dim) THEN
1632               g_fps_ni_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
1633               l_nie_total                                              := 100 * l_output_table(outer_rec).balance_value;
1634             END IF;
1635           elsif g_fps_ni_bal_det_tab(inner_rec).balance_name           = 'NI E Able' THEN
1636             IF (g_fps_ni_bal_det_tab(inner_rec).database_item_suffix   = l_ytd_dim) THEN
1637               g_fps_ni_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
1638               l_nie_able                                              := 100 * l_output_table(outer_rec).balance_value;
1639             END IF;
1640           elsif g_fps_ni_bal_det_tab(inner_rec).balance_name           = 'NI J Total' THEN
1641             IF (g_fps_ni_bal_det_tab(inner_rec).database_item_suffix   = l_ytd_dim) THEN
1642               g_fps_ni_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
1643               l_nij_total                                              := 100 * l_output_table(outer_rec).balance_value;
1644             END IF;
1645           elsif g_fps_ni_bal_det_tab(inner_rec).balance_name           = 'NI J Able' THEN
1646             IF (g_fps_ni_bal_det_tab(inner_rec).database_item_suffix   = l_ytd_dim) THEN
1647               g_fps_ni_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
1648               l_nij_able                                              := 100 * l_output_table(outer_rec).balance_value;
1649             END IF;
1650           elsif g_fps_ni_bal_det_tab(inner_rec).balance_name           = 'NI L Total' THEN
1651             IF (g_fps_ni_bal_det_tab(inner_rec).database_item_suffix   = l_ytd_dim) THEN
1652               g_fps_ni_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
1653               l_nil_total                                              := 100 * l_output_table(outer_rec).balance_value;
1654             END IF;
1655           elsif g_fps_ni_bal_det_tab(inner_rec).balance_name           = 'NI L Able' THEN
1656             IF (g_fps_ni_bal_det_tab(inner_rec).database_item_suffix   = l_ytd_dim) THEN
1657               g_fps_ni_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
1658               l_nil_able                                              := 100 * l_output_table(outer_rec).balance_value;
1659             END IF;
1660           END IF;
1661 	      END IF;
1662       END LOOP;
1663       hr_utility.trace('After for i in 1..g_fps_ni_bal_det_tab.last loop');
1664 	  END IF; --Not null check ends
1665     END LOOP;
1666 
1667 end if;
1668 
1669 hr_utility.trace('After invoking l_nia_total '||l_nia_total);
1670 hr_utility.trace('After invoking l_nia_able '||l_nia_able);
1671 hr_utility.trace('After invoking l_nib_total '||l_nib_total);
1672 hr_utility.trace('After invoking l_nib_able '||l_nib_able);
1673 hr_utility.trace('After invoking l_nic_total '||l_nic_total);
1674 hr_utility.trace('After invoking l_nic_able '||l_nic_able);
1675 hr_utility.trace('After invoking l_nid_total '||l_nid_total);
1676 hr_utility.trace('After invoking l_nid_able '||l_nid_able);
1677 hr_utility.trace('After invoking l_nie_total '||l_nie_total);
1678 hr_utility.trace('After invoking l_nie_able '||l_nie_able);
1679 hr_utility.trace('After invoking l_nij_total '||l_nij_total);
1680 hr_utility.trace('After invoking l_nij_able '||l_nij_able);
1681 hr_utility.trace('After invoking l_nil_total '||l_nil_total);
1682 hr_utility.trace('After invoking l_nil_able '||l_nil_able);
1683 
1684 if l_reversal is not null then
1685 
1686 
1687 	l_nia_able_run  := hr_dirbal.get_balance(l_last_chld_act_id, g_nia_able_id_run);
1688   l_nia_e_run     := hr_dirbal.get_balance(l_last_chld_act_id, g_nia_e_id_run);
1689 
1690 	l_nib_able_run  := hr_dirbal.get_balance(l_last_chld_act_id, g_nib_able_id_run);
1691   l_nib_e_run     := hr_dirbal.get_balance(l_last_chld_act_id, g_nib_e_id_run);
1692 
1693 	l_nic_able_run  := hr_dirbal.get_balance(l_last_chld_act_id, g_nic_able_id_run);
1694   l_nic_e_run     := hr_dirbal.get_balance(l_last_chld_act_id, g_nic_e_id_run);
1695 
1696 	l_nid_able_run  := hr_dirbal.get_balance(l_last_chld_act_id, g_nid_able_id_run);
1697   l_nid_e_run     := hr_dirbal.get_balance(l_last_chld_act_id, g_nid_e_id_run);
1698 
1699 	l_nie_able_run  := hr_dirbal.get_balance(l_last_chld_act_id, g_nie_able_id_run);
1700   l_nie_e_run     := hr_dirbal.get_balance(l_last_chld_act_id, g_nie_e_id_run);
1701 
1702 	l_nij_able_run  := hr_dirbal.get_balance(l_last_chld_act_id, g_nij_able_id_run);
1703   l_nij_e_run     := hr_dirbal.get_balance(l_last_chld_act_id, g_nij_e_id_run);
1704 
1705 	l_nil_able_run  := hr_dirbal.get_balance(l_last_chld_act_id, g_nil_able_id_run);
1706   l_nil_e_run     := hr_dirbal.get_balance(l_last_chld_act_id, g_nil_e_id_run);
1707 
1708 end if;
1709 
1710 if NVL(l_aggr_archive_flag,'N') = 'Y' then
1711 
1712     hr_utility.trace('fetching NI Aggr balances');
1713 
1714     hr_utility.trace('fetching l_nid_total'||l_nid_total);
1715     hr_utility.trace('fetching l_nid_able'||l_nid_able);
1716 
1717 -- Fetch 6 NI balances based on the Total and Able
1718 IF (NVL(l_nia_total,0) <> 0 OR NVL(l_nia_able,0) <> 0 ) OR
1719    ( l_reversal is not null and NVL(l_nia_able_run,0) <> 0 OR NVL(l_nia_e_run,0) <> 0) THEN
1720 
1721         IF already_a                =  -1 THEN
1722           i                        := i+1;
1723           already_a                := i;
1724         END IF;
1725 
1726     hr_utility.trace('fetching NI A Total/Able balances');
1727         l_archive_tab_ni_det(already_a).assignment_id        := p_asg_id;
1728         l_archive_tab_ni_det(already_a).action_info_category := 'GB_RTI_FPS_NI_DET';
1729         l_archive_tab_ni_det(already_a).act_info1            := 'A';
1730 		    l_archive_tab_ni_det(already_a).act_info3  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_per_nia_lel_id);
1731 		    l_archive_tab_ni_det(already_a).act_info4  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_per_nia_et_id);
1732 		    l_archive_tab_ni_det(already_a).act_info5  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_per_nia_uap_id);
1733 		    l_archive_tab_ni_det(already_a).act_info6  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_per_nia_uel_id);
1734 		    l_archive_tab_ni_det(already_a).act_info7  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_per_nia_r_ytd_id);
1735 		    l_archive_tab_ni_det(already_a).act_info8  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_per_nia_e_ytd_id);
1736 END IF;
1737 IF (NVL(l_nib_total,0) <> 0 OR NVL(l_nib_able,0) <> 0 ) OR
1738    ( l_reversal is not null and NVL(l_nib_able_run,0) <> 0 OR NVL(l_nib_e_run,0) <> 0) THEN
1739 
1740         IF already_b                =  -1 THEN
1741           i                        := i+1;
1742           already_b                := i;
1743         END IF;
1744     hr_utility.trace('fetching NI B Total/Able balances');
1745         l_archive_tab_ni_det(already_b).assignment_id        := p_asg_id;
1746         l_archive_tab_ni_det(already_b).action_info_category := 'GB_RTI_FPS_NI_DET';
1747         l_archive_tab_ni_det(already_b).act_info1            := 'B';
1748 		    l_archive_tab_ni_det(already_b).act_info3  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_per_nib_lel_id);
1749 		    l_archive_tab_ni_det(already_b).act_info4  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_per_nib_et_id);
1750 		    l_archive_tab_ni_det(already_b).act_info5  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_per_nib_uap_id);
1751 		    l_archive_tab_ni_det(already_b).act_info6  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_per_nib_uel_id);
1752 		    l_archive_tab_ni_det(already_b).act_info7  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_per_nib_r_ytd_id);
1753 		    l_archive_tab_ni_det(already_b).act_info8  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_per_nib_e_ytd_id);
1754 END IF;
1755 IF (NVL(l_nic_total,0) <> 0 OR NVL(l_nic_able,0) <> 0 ) OR
1756    ( l_reversal is not null and NVL(l_nic_able_run,0) <> 0 OR NVL(l_nic_e_run,0) <> 0) THEN
1757         IF already_c                =  -1 THEN
1758           i                        := i+1;
1759           already_c                := i;
1760         END IF;
1761     hr_utility.trace('fetching NI C Total/Able balances');
1762         l_archive_tab_ni_det(already_c).assignment_id        := p_asg_id;
1763         l_archive_tab_ni_det(already_c).action_info_category := 'GB_RTI_FPS_NI_DET';
1764         l_archive_tab_ni_det(already_c).act_info1            := 'C';
1765 		    l_archive_tab_ni_det(already_c).act_info3  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_per_nic_lel_id);
1766 		    l_archive_tab_ni_det(already_c).act_info4  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_per_nic_et_id);
1767 		    l_archive_tab_ni_det(already_c).act_info5  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_per_nic_uap_id);
1768 		    l_archive_tab_ni_det(already_c).act_info6  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_per_nic_uel_id);
1769 		    l_archive_tab_ni_det(already_c).act_info7  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_per_nic_r_ytd_id);
1770 		    l_archive_tab_ni_det(already_c).act_info8  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_per_nic_e_ytd_id);
1771 END IF;
1772 IF (NVL(l_nid_total,0) <> 0 OR NVL(l_nid_able,0) <> 0 ) OR
1773    ( l_reversal is not null and NVL(l_nid_able_run,0) <> 0 OR NVL(l_nid_e_run,0) <> 0) THEN
1774         IF already_d                =  -1 THEN
1775           i                        := i+1;
1776           already_d                := i;
1777         END IF;
1778     hr_utility.trace('fetching NI D Total/Able balances');
1779         l_archive_tab_ni_det(already_d).assignment_id        := p_asg_id;
1780         l_archive_tab_ni_det(already_d).action_info_category := 'GB_RTI_FPS_NI_DET';
1781         l_archive_tab_ni_det(already_d).act_info1            := 'D';
1782 		    l_archive_tab_ni_det(already_d).act_info3  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_per_nid_lel_id);
1783 		    l_archive_tab_ni_det(already_d).act_info4  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_per_nid_et_id);
1784 		    l_archive_tab_ni_det(already_d).act_info5  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_per_nid_uap_id);
1785 		    l_archive_tab_ni_det(already_d).act_info6  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_per_nid_uel_id);
1786 		    l_archive_tab_ni_det(already_d).act_info7  := 100            * hr_dirbal.get_balance(l_last_chld_act_id, g_per_nid_r_ytd_id);
1787 		    l_archive_tab_ni_det(already_d).act_info8  := 100            * hr_dirbal.get_balance(l_last_chld_act_id, g_per_nid_e_ytd_id);
1788 END IF;
1789 IF (NVL(l_nie_total,0) <> 0 OR NVL(l_nie_able,0) <> 0 ) OR
1790    ( l_reversal is not null and NVL(l_nie_able_run,0) <> 0 OR NVL(l_nie_e_run,0) <> 0) THEN
1791         IF already_e                =  -1 THEN
1792           i                        := i+1;
1793           already_e                := i;
1794         END IF;
1795     hr_utility.trace('fetching NI E Total/Able balances');
1796         l_archive_tab_ni_det(already_e).assignment_id        := p_asg_id;
1797         l_archive_tab_ni_det(already_e).action_info_category := 'GB_RTI_FPS_NI_DET';
1798         l_archive_tab_ni_det(already_e).act_info1            := 'E';
1799 		    l_archive_tab_ni_det(already_e).act_info3  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_per_nie_lel_id);
1800 		    l_archive_tab_ni_det(already_e).act_info4  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_per_nie_et_id);
1801 		    l_archive_tab_ni_det(already_e).act_info5  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_per_nie_uap_id);
1802 		    l_archive_tab_ni_det(already_e).act_info6  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_per_nie_uel_id);
1803 		    l_archive_tab_ni_det(already_e).act_info7  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_per_nie_r_ytd_id);
1804 		    l_archive_tab_ni_det(already_e).act_info8  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_per_nie_e_ytd_id);
1805 END IF;
1806 IF (NVL(l_nij_total,0) <> 0 OR NVL(l_nij_able,0) <> 0 ) OR
1807    ( l_reversal is not null and NVL(l_nij_able_run,0) <> 0 OR NVL(l_nij_e_run,0) <> 0) THEN
1808         IF already_j                =  -1 THEN
1809           i                        := i+1;
1810           already_j                := i;
1811         END IF;
1812     hr_utility.trace('fetching NI J Total/Able balances');
1813         l_archive_tab_ni_det(already_j).assignment_id        := p_asg_id;
1814         l_archive_tab_ni_det(already_j).action_info_category := 'GB_RTI_FPS_NI_DET';
1815         l_archive_tab_ni_det(already_j).act_info1            := 'J';
1816 		    l_archive_tab_ni_det(already_j).act_info3  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_per_nij_lel_id);
1817 		    l_archive_tab_ni_det(already_j).act_info4  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_per_nij_et_id);
1818 		    l_archive_tab_ni_det(already_j).act_info5  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_per_nij_uap_id);
1819 		    l_archive_tab_ni_det(already_j).act_info6  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_per_nij_uel_id);
1820 		    l_archive_tab_ni_det(already_j).act_info7  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_per_nij_r_ytd_id);
1821 		    l_archive_tab_ni_det(already_j).act_info8  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_per_nij_e_ytd_id);
1822 END IF;
1823 IF (NVL(l_nil_total,0) <> 0 OR NVL(l_nil_able,0) <> 0 ) OR
1824    ( l_reversal is not null and NVL(l_nil_able_run,0) <> 0 OR NVL(l_nil_e_run,0) <> 0) THEN
1825         IF already_l                =  -1 THEN
1826           i                        := i+1;
1827           already_l                := i;
1828         END IF;
1829     hr_utility.trace('fetching NI L Total/Able balances');
1830         l_archive_tab_ni_det(already_l).assignment_id        := p_asg_id;
1831         l_archive_tab_ni_det(already_l).action_info_category := 'GB_RTI_FPS_NI_DET';
1832         l_archive_tab_ni_det(already_l).act_info1            := 'L';
1833 		    l_archive_tab_ni_det(already_l).act_info3  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_per_nil_lel_id);
1834 		    l_archive_tab_ni_det(already_l).act_info4  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_per_nil_et_id);
1835 		    l_archive_tab_ni_det(already_l).act_info5  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_per_nil_uap_id);
1836 		    l_archive_tab_ni_det(already_l).act_info6  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_per_nil_uel_id);
1837 		    l_archive_tab_ni_det(already_l).act_info7  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_per_nil_r_ytd_id);
1838 		    l_archive_tab_ni_det(already_l).act_info8  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_per_nil_e_ytd_id);
1839 END IF;
1840 
1841 else --Aggregation else
1842     hr_utility.trace('fetching NI balances');
1843 -- Fetch 6 NI balances based on the Total and Able
1844 IF (NVL(l_nia_total,0) <> 0 OR NVL(l_nia_able,0) <> 0 ) OR
1845    ( l_reversal is not null and NVL(l_nia_able_run,0) <> 0 OR NVL(l_nia_e_run,0) <> 0) THEN
1846         IF already_a                =  -1 THEN
1847           i                        := i+1;
1848           already_a                := i;
1849         END IF;
1850     hr_utility.trace('fetching NI A Total/Able balances');
1851         l_archive_tab_ni_det(already_a).assignment_id        := p_asg_id;
1852         l_archive_tab_ni_det(already_a).action_info_category := 'GB_RTI_FPS_NI_DET';
1853         l_archive_tab_ni_det(already_a).act_info1            := 'A';
1854 		    l_archive_tab_ni_det(already_a).act_info3  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_nia_lel_id);
1855 		    l_archive_tab_ni_det(already_a).act_info4  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_nia_et_id);
1856 		    l_archive_tab_ni_det(already_a).act_info5  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_nia_uap_id);
1857 		    l_archive_tab_ni_det(already_a).act_info6  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_nia_uel_id);
1858 		    l_archive_tab_ni_det(already_a).act_info7  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_nia_r_ytd_id);
1859 		    l_archive_tab_ni_det(already_a).act_info8  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_nia_e_ytd_id);
1860 END IF;
1861 IF (NVL(l_nib_total,0) <> 0 OR NVL(l_nib_able,0) <> 0 ) OR
1862    ( l_reversal is not null and NVL(l_nib_able_run,0) <> 0 OR NVL(l_nib_e_run,0) <> 0) THEN
1863         IF already_b                =  -1 THEN
1864           i                        := i+1;
1865           already_b                := i;
1866         END IF;
1867     hr_utility.trace('fetching NI B Total/Able balances');
1868         l_archive_tab_ni_det(already_b).assignment_id        := p_asg_id;
1869         l_archive_tab_ni_det(already_b).action_info_category := 'GB_RTI_FPS_NI_DET';
1870         l_archive_tab_ni_det(already_b).act_info1            := 'B';
1871 		    l_archive_tab_ni_det(already_b).act_info3  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_nib_lel_id);
1872 		    l_archive_tab_ni_det(already_b).act_info4  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_nib_et_id);
1873 		    l_archive_tab_ni_det(already_b).act_info5  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_nib_uap_id);
1874 		    l_archive_tab_ni_det(already_b).act_info6  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_nib_uel_id);
1875 		    l_archive_tab_ni_det(already_b).act_info7  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_nib_r_ytd_id);
1876 		    l_archive_tab_ni_det(already_b).act_info8  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_nib_e_ytd_id);
1877 END IF;
1878 IF (NVL(l_nic_total,0) <> 0 OR NVL(l_nic_able,0) <> 0 ) OR
1879    ( l_reversal is not null and NVL(l_nic_able_run,0) <> 0 OR NVL(l_nic_e_run,0) <> 0) THEN
1880         IF already_c                =  -1 THEN
1881           i                        := i+1;
1882           already_c                := i;
1883         END IF;
1884     hr_utility.trace('fetching NI C Total/Able balances');
1885         l_archive_tab_ni_det(already_c).assignment_id        := p_asg_id;
1886         l_archive_tab_ni_det(already_c).action_info_category := 'GB_RTI_FPS_NI_DET';
1887         l_archive_tab_ni_det(already_c).act_info1            := 'C';
1888 		    l_archive_tab_ni_det(already_c).act_info3  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_nic_lel_id);
1889 		    l_archive_tab_ni_det(already_c).act_info4  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_nic_et_id);
1890 		    l_archive_tab_ni_det(already_c).act_info5  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_nic_uap_id);
1891 		    l_archive_tab_ni_det(already_c).act_info6  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_nic_uel_id);
1892 		    l_archive_tab_ni_det(already_c).act_info7  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_nic_r_ytd_id);
1893 		    l_archive_tab_ni_det(already_c).act_info8  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_nic_e_ytd_id);
1894 END IF;
1895 IF (NVL(l_nid_total,0) <> 0 OR NVL(l_nid_able,0) <> 0 ) OR
1896    ( l_reversal is not null and NVL(l_nid_able_run,0) <> 0 OR NVL(l_nid_e_run,0) <> 0) THEN
1897         IF already_d                =  -1 THEN
1898           i                        := i+1;
1899           already_d                := i;
1900         END IF;
1901     hr_utility.trace('fetching NI D Total/Able balances');
1902         l_archive_tab_ni_det(already_d).assignment_id        := p_asg_id;
1903         l_archive_tab_ni_det(already_d).action_info_category := 'GB_RTI_FPS_NI_DET';
1904         l_archive_tab_ni_det(already_d).act_info1            := 'D';
1905 		    l_archive_tab_ni_det(already_d).act_info3  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_nid_lel_id);
1906 		    l_archive_tab_ni_det(already_d).act_info4  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_nid_et_id);
1907 		    l_archive_tab_ni_det(already_d).act_info5  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_nid_uap_id);
1908 		    l_archive_tab_ni_det(already_d).act_info6  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_nid_uel_id);
1909 		    l_archive_tab_ni_det(already_d).act_info7  := 100            * hr_dirbal.get_balance(l_last_chld_act_id, g_nid_r_ytd_id);
1910 		    l_archive_tab_ni_det(already_d).act_info8  := 100            * hr_dirbal.get_balance(l_last_chld_act_id, g_nid_e_ytd_id);
1911 END IF;
1912 IF (NVL(l_nie_total,0) <> 0 OR NVL(l_nie_able,0) <> 0 ) OR
1913    ( l_reversal is not null and NVL(l_nie_able_run,0) <> 0 OR NVL(l_nie_e_run,0) <> 0) THEN
1914         IF already_e                =  -1 THEN
1915           i                        := i+1;
1916           already_e                := i;
1917         END IF;
1918     hr_utility.trace('fetching NI E Total/Able balances');
1919         l_archive_tab_ni_det(already_e).assignment_id        := p_asg_id;
1920         l_archive_tab_ni_det(already_e).action_info_category := 'GB_RTI_FPS_NI_DET';
1921         l_archive_tab_ni_det(already_e).act_info1            := 'E';
1922 		    l_archive_tab_ni_det(already_e).act_info3  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_nie_lel_id);
1923 		    l_archive_tab_ni_det(already_e).act_info4  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_nie_et_id);
1924 		    l_archive_tab_ni_det(already_e).act_info5  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_nie_uap_id);
1925 		    l_archive_tab_ni_det(already_e).act_info6  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_nie_uel_id);
1926 		    l_archive_tab_ni_det(already_e).act_info7  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_nie_r_ytd_id);
1927 		    l_archive_tab_ni_det(already_e).act_info8  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_nie_e_ytd_id);
1928 END IF;
1929 IF (NVL(l_nij_total,0) <> 0 OR NVL(l_nij_able,0) <> 0 ) OR
1930    ( l_reversal is not null and NVL(l_nij_able_run,0) <> 0 OR NVL(l_nij_e_run,0) <> 0) THEN
1931         IF already_j                =  -1 THEN
1932           i                        := i+1;
1933           already_j                := i;
1934         END IF;
1935     hr_utility.trace('fetching NI J Total/Able balances');
1936         l_archive_tab_ni_det(already_j).assignment_id        := p_asg_id;
1937         l_archive_tab_ni_det(already_j).action_info_category := 'GB_RTI_FPS_NI_DET';
1938         l_archive_tab_ni_det(already_j).act_info1            := 'J';
1939 		    l_archive_tab_ni_det(already_j).act_info3  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_nij_lel_id);
1940 		    l_archive_tab_ni_det(already_j).act_info4  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_nij_et_id);
1941 		    l_archive_tab_ni_det(already_j).act_info5  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_nij_uap_id);
1942 		    l_archive_tab_ni_det(already_j).act_info6  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_nij_uel_id);
1943 		    l_archive_tab_ni_det(already_j).act_info7  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_nij_r_ytd_id);
1944 		    l_archive_tab_ni_det(already_j).act_info8  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_nij_e_ytd_id);
1945 END IF;
1946 IF (NVL(l_nil_total,0) <> 0 OR NVL(l_nil_able,0) <> 0 ) OR
1947    ( l_reversal is not null and NVL(l_nil_able_run,0) <> 0 OR NVL(l_nil_e_run,0) <> 0) THEN
1948         IF already_l                =  -1 THEN
1949           i                        := i+1;
1950           already_l                := i;
1951         END IF;
1952     hr_utility.trace('fetching NI L Total/Able balances');
1953         l_archive_tab_ni_det(already_l).assignment_id        := p_asg_id;
1954         l_archive_tab_ni_det(already_l).action_info_category := 'GB_RTI_FPS_NI_DET';
1955         l_archive_tab_ni_det(already_l).act_info1            := 'L';
1956 		    l_archive_tab_ni_det(already_l).act_info3  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_nil_lel_id);
1957 		    l_archive_tab_ni_det(already_l).act_info4  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_nil_et_id);
1958 		    l_archive_tab_ni_det(already_l).act_info5  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_nil_uap_id);
1959 		    l_archive_tab_ni_det(already_l).act_info6  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_nil_uel_id);
1960 		    l_archive_tab_ni_det(already_l).act_info7  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_nil_r_ytd_id);
1961 		    l_archive_tab_ni_det(already_l).act_info8  := 100            * hr_dirbal.get_balance(p_last_asg_action_id, g_nil_e_ytd_id);
1962 END IF;
1963 
1964 END IF; --Aggregation End
1965 
1966 --Non RTI Reporting asg . make values to zero
1967 IF l_ni_non_rti = 'Y' then
1968      hr_utility.trace('Assigning zeroes Non RTI Reporting Assignment.');
1969 
1970 IF l_archive_tab_ni_det.count > 0 THEN
1971  FOR i  IN l_archive_tab_ni_det.first .. l_archive_tab_ni_det.last
1972     LOOP
1973    			hr_utility.set_location('i       : ' || i ,999);
1974         l_archive_tab_ni_det(i).act_info3  := 0;
1975 		    l_archive_tab_ni_det(i).act_info4  := 0;
1976 		    l_archive_tab_ni_det(i).act_info5  := 0;
1977 		    l_archive_tab_ni_det(i).act_info6  := 0;
1978 		    l_archive_tab_ni_det(i).act_info7  := 0;
1979 		    l_archive_tab_ni_det(i).act_info8  := 0;
1980 
1981  END LOOP;
1982 END IF;
1983 
1984 end if;
1985 
1986 RETURN true;
1987 
1988 EXCEPTION
1989 WHEN OTHERS THEN
1990   hr_utility.set_location('Error in function fetch_ni_det ', 15);
1991   hr_utility.trace('Exception:' || SQLCODE || ' - ' || SQLERRM );
1992   fnd_file.put_line(fnd_file.LOG,'Exception:' || SQLCODE || ' - ' || SQLERRM);
1993   RAISE;
1994 END fetch_ni_det;
1995 
1996 --
1997 PROCEDURE fetch_nic_refund(
1998     p_asg_id             IN NUMBER,
1999     l_archive_tab_ni_det IN OUT nocopy action_info_table )
2000 
2001   is
2002 
2003   --Below cursor fetches the nic_refund from asg extra details of the current assignment
2004   CURSOR csr_fetch_nic_refund
2005   IS
2006     SELECT AEI_INFORMATION10 nic_refund
2007     FROM PER_ASSIGNMENT_EXTRA_INFO
2008     WHERE INFORMATION_TYPE       = 'GB_PAY_RTI'
2009     AND AEI_INFORMATION_CATEGORY = 'GB_PAY_RTI'
2010     AND assignment_id            =  p_asg_id;
2011 
2012 	l_nic_refund PER_ASSIGNMENT_EXTRA_INFO.AEI_INFORMATION10%type;
2013 
2014   begin
2015   hr_utility.trace('Inside fetch_nic_refund');
2016 
2017   open csr_fetch_nic_refund;
2018   fetch csr_fetch_nic_refund into l_nic_refund;
2019   close csr_fetch_nic_refund;
2020 
2021   hr_utility.trace('EYU NIC Refunded from EIT'||l_nic_refund);
2022 
2023   if l_nic_refund is NULL then
2024 	l_nic_refund := 'Y' ;
2025   end if;
2026 
2027   hr_utility.trace('EYU NIC Refunded after default'||l_nic_refund);
2028 
2029 IF l_archive_tab_ni_det.count > 0 THEN
2030 FOR i  IN l_archive_tab_ni_det.first .. l_archive_tab_ni_det.last
2031     LOOP
2032         hr_utility.set_location('i       : ' || i ,999);
2033         if l_archive_tab_ni_det(i).act_info8  < 0 then
2034             l_archive_tab_ni_det(i).act_info11 := l_nic_refund;
2035         end if;
2036 	END LOOP;
2037 END IF;
2038 hr_utility.trace('Leaving fetch_nic_refund');
2039 EXCEPTION
2040 WHEN OTHERS THEN
2041   hr_utility.trace('Fetch nic refund failed:'||SQLERRM);
2042 END;
2043 ---
2044 
2045 procedure calculate_diff (pactid number , p_report_type varchar2,p_asg_id number,p_archive_tab IN OUT NOCOPY action_info_table,p_flag IN OUT NOCOPY varchar2 )
2046 is
2047 
2048 cursor csr_fps_details is
2049 select
2050  (ACTION_INFORMATION1),
2051  (ACTION_INFORMATION2),
2052  (ACTION_INFORMATION3),
2053  (ACTION_INFORMATION18),
2054  (ACTION_INFORMATION19),
2055  (ACTION_INFORMATION20),
2056  (ACTION_INFORMATION21),
2057  (ACTION_INFORMATION22)
2058 
2059  from pay_assignment_actions paa , pay_action_information pai
2060 where paa.payroll_action_id = pactid
2061 and paa.ASSIGNMENT_ID = p_asg_id
2062 and pai.action_context_id = paa.assignment_action_id
2063 and pai.ACTION_INFORMATION_CATEGORY = 'GB_RTI_FPS_ASG_DET2'
2064 and ACTION_CONTEXT_TYPE = 'AAP';
2065 
2066 cursor csr_fps_details_payeagg is
2067 select
2068  (ACTION_INFORMATION1),
2069  (ACTION_INFORMATION2),
2070  (ACTION_INFORMATION3),
2071  (ACTION_INFORMATION18),
2072  (ACTION_INFORMATION19),
2073  (ACTION_INFORMATION20),
2074  (ACTION_INFORMATION21),
2075  (ACTION_INFORMATION22)
2076  from pay_assignment_actions paa , pay_action_information pai
2077 where paa.payroll_action_id = pactid
2078 and paa.ASSIGNMENT_ID in (select distinct assignment_id from per_all_assignments_f where person_id = p_archive_tab(0).person_id)
2079 and pai.action_context_id = paa.assignment_action_id
2080 and pai.ACTION_INFORMATION_CATEGORY = 'GB_RTI_FPS_ASG_DET2'
2081 and ACTION_INFORMATION30 = 'Y'
2082 and ACTION_CONTEXT_TYPE = 'AAP'
2083 order by  substr(ACTION_INFORMATION29,instr(ACTION_INFORMATION29,',')+1,length(ACTION_INFORMATION29))  desc; --payroll run asg action id
2084 
2085 
2086 cursor csr_eyu_details is
2087 select
2088  (ACTION_INFORMATION15),
2089  (ACTION_INFORMATION16),
2090  (ACTION_INFORMATION17),
2091  (ACTION_INFORMATION18),
2092  (ACTION_INFORMATION19),
2093  (ACTION_INFORMATION20),
2094  (ACTION_INFORMATION21),
2095  (ACTION_INFORMATION22)
2096  from pay_assignment_actions paa , pay_action_information pai
2097 where paa.payroll_action_id = pactid
2098 and paa.ASSIGNMENT_ID = p_asg_id
2099 and pai.action_context_id = paa.assignment_action_id
2100 and pai.ACTION_INFORMATION_CATEGORY = 'GB_RTI_EYU_ASG_DET'
2101 and ACTION_CONTEXT_TYPE = 'AAP';
2102 
2103 l_taxable_pay NUMBER;
2104 l_paye        NUMBER;
2105 l_stud_loan   NUMBER;
2106 l_ssp 				NUMBER;
2107 l_smp 				NUMBER;
2108 l_ospp 				NUMBER;
2109 l_sap 				NUMBER;
2110 l_aspp 				NUMBER;
2111 l_flag 				VARCHAR2(1) := 'N';
2112 
2113 begin
2114 hr_utility.trace('Entering calculate_diff '||p_asg_id);
2115 
2116 hr_utility.trace('Entering pactid '||pactid);
2117 hr_utility.trace('Entering p_report_type '||p_report_type);
2118 
2119 if p_report_type = 'RTI_FPS_REP' then
2120 
2121   --Paye Aggregation
2122 	if NVL(p_archive_tab(0).act_info10,'N') = 'Y' then
2123   hr_utility.trace('Entering Aggregation '||p_report_type);
2124 		open csr_fps_details_payeagg;
2125 		fetch csr_fps_details_payeagg into l_taxable_pay,l_paye,l_stud_loan,l_ssp,l_smp,l_ospp,l_sap,l_aspp;
2126 		close csr_fps_details_payeagg;
2127 	else
2128    hr_utility.trace('Entering Others '||p_report_type);
2129 		open csr_fps_details;
2130 		fetch csr_fps_details into l_taxable_pay,l_paye,l_stud_loan,l_ssp,l_smp,l_ospp,l_sap,l_aspp;
2131 		close csr_fps_details;
2132   end if;
2133 
2134 elsif p_report_type = 'RTI_EYU_REP_13' then
2135 	open csr_eyu_details;
2136 	fetch csr_eyu_details into l_taxable_pay,l_paye,l_stud_loan,l_ssp,l_smp,l_ospp,l_sap,l_aspp;
2137 	close csr_eyu_details;
2138 end if;
2139 
2140 
2141 	hr_utility.trace('p_archive_tab(2).act_info15 '||p_archive_tab(2).act_info15);
2142 	hr_utility.trace('p_archive_tab(2).act_info16 '||p_archive_tab(2).act_info16);
2143 	hr_utility.trace('p_archive_tab(2).act_info17 '||p_archive_tab(2).act_info17);
2144 	hr_utility.trace('p_archive_tab(2).act_info18 '||p_archive_tab(2).act_info18);
2145 	hr_utility.trace('p_archive_tab(2).act_info19 '||p_archive_tab(2).act_info19);
2146 	hr_utility.trace('p_archive_tab(2).act_info20 '||p_archive_tab(2).act_info20);
2147 	hr_utility.trace('p_archive_tab(2).act_info21 '||p_archive_tab(2).act_info21);
2148 	hr_utility.trace('p_archive_tab(2).act_info22 '||p_archive_tab(2).act_info22);
2149 
2150 	hr_utility.trace('l_taxable_pay : '||l_taxable_pay);
2151 	hr_utility.trace('l_paye        :'||l_paye);
2152 	hr_utility.trace('l_stud_loan   :'||l_stud_loan);
2153 	hr_utility.trace('l_ssp         :'||l_ssp);
2154 	hr_utility.trace('l_smp         :'||l_smp);
2155 	hr_utility.trace('l_ospp        :'||l_ospp);
2156 	hr_utility.trace('l_sap         :'||l_sap);
2157 	hr_utility.trace('l_aspp        :'||l_aspp);
2158 
2159 --Suppressing zeroes
2160 if p_archive_tab(2).act_info15 = 0 and l_taxable_pay = 0 then
2161 	p_archive_tab(2).act_info15 := NULL;
2162 end if;
2163 
2164 if p_archive_tab(2).act_info16 = 0 and l_paye = 0 then
2165 	p_archive_tab(2).act_info16 := NULL;
2166 end if;
2167 
2168 if p_archive_tab(2).act_info17 = 0 and l_stud_loan = 0 then
2169 	p_archive_tab(2).act_info17 := NULL;
2170 end if;
2171 
2172 if p_archive_tab(2).act_info18 = 0 and l_ssp = 0 then
2173 	p_archive_tab(2).act_info18 := NULL;
2174 end if;
2175 
2176 if p_archive_tab(2).act_info19 = 0 and l_smp = 0 then
2177 	p_archive_tab(2).act_info19 := NULL;
2178 end if;
2179 
2180 if p_archive_tab(2).act_info20 = 0 and l_ospp = 0 then
2181 	p_archive_tab(2).act_info20 := NULL;
2182 end if;
2183 
2184 if p_archive_tab(2).act_info21 = 0 and l_sap = 0 then
2185 	p_archive_tab(2).act_info21 := NULL;
2186 end if;
2187 
2188 if p_archive_tab(2).act_info22 = 0 and l_aspp = 0 then
2189 	p_archive_tab(2).act_info22 := NULL;
2190 end if;
2191 
2192 
2193 -- New YTD - Old YTD
2194 p_archive_tab(2).act_info15 := (p_archive_tab(2).act_info15) - (l_taxable_pay)  ;
2195 p_archive_tab(2).act_info16 := (p_archive_tab(2).act_info16) - (l_paye)  ;
2196 p_archive_tab(2).act_info17 := (p_archive_tab(2).act_info17) - (l_stud_loan)  ;
2197 p_archive_tab(2).act_info18 := p_archive_tab(2).act_info18 - l_ssp  ;
2198 p_archive_tab(2).act_info19 := p_archive_tab(2).act_info19 - l_smp  ;
2199 p_archive_tab(2).act_info20 := p_archive_tab(2).act_info20 - l_ospp  ;
2200 p_archive_tab(2).act_info21 := p_archive_tab(2).act_info21 - l_sap  ;
2201 p_archive_tab(2).act_info22 := p_archive_tab(2).act_info22 - l_aspp  ;
2202 
2203 	hr_utility.trace('p_archive_tab(2).act_info15 '||p_archive_tab(2).act_info15);
2204 	hr_utility.trace('p_archive_tab(2).act_info16 '||p_archive_tab(2).act_info16);
2205 	hr_utility.trace('p_archive_tab(2).act_info17 '||p_archive_tab(2).act_info17);
2206 	hr_utility.trace('p_archive_tab(2).act_info18 '||p_archive_tab(2).act_info18);
2207 	hr_utility.trace('p_archive_tab(2).act_info19 '||p_archive_tab(2).act_info19);
2208 	hr_utility.trace('p_archive_tab(2).act_info20 '||p_archive_tab(2).act_info20);
2209 	hr_utility.trace('p_archive_tab(2).act_info21 '||p_archive_tab(2).act_info21);
2210 	hr_utility.trace('p_archive_tab(2).act_info22 '||p_archive_tab(2).act_info22);
2211 
2212 
2213 if p_archive_tab(2).act_info15 <> 0 or  p_archive_tab(2).act_info16 <> 0 or  p_archive_tab(2).act_info17 <> 0
2214 or  p_archive_tab(2).act_info18 <> 0 or  p_archive_tab(2).act_info19 <> 0 or  p_archive_tab(2).act_info20 <> 0
2215 or  p_archive_tab(2).act_info21 <> 0 or  p_archive_tab(2).act_info22 <> 0 then
2216 	l_flag := 'Y';
2217 	hr_utility.trace('Differences are found. Archive the data.');
2218 end if;
2219 p_flag := l_flag;
2220 hr_utility.trace('Leaving calculate_diff');
2221 end calculate_diff;
2222 
2223 --
2224 procedure calculate_diff_ni (pactid number , p_report_type varchar2 , p_asg_id number, p_archive_tab IN OUT NOCOPY action_info_table,p_flag IN OUT NOCOPY varchar2)
2225 is
2226 
2227 cursor csr_fps_details is
2228 select
2229  (ACTION_INFORMATION1) l_ni_cat,
2230  (ACTION_INFORMATION3) l_lel,
2231  (ACTION_INFORMATION4) l_et,
2232  (ACTION_INFORMATION5) l_uap,
2233  (ACTION_INFORMATION6) l_uel,
2234  (ACTION_INFORMATION7) l_emr,
2235  (ACTION_INFORMATION8) l_emp
2236  from pay_assignment_actions paa , pay_action_information pai
2237 where paa.payroll_action_id = pactid
2238 and paa.ASSIGNMENT_ID = p_asg_id
2239 and pai.action_context_id = paa.assignment_action_id
2240 and pai.ACTION_INFORMATION_CATEGORY = 'GB_RTI_FPS_NI_DET'
2241 and ACTION_CONTEXT_TYPE = 'AAP';
2242 
2243 l_lel  NUMBER;
2244 l_et   NUMBER;
2245 l_uap  NUMBER;
2246 l_uel  NUMBER;
2247 l_emr  NUMBER;
2248 l_emp  NUMBER;
2249 l_flag VARCHAR2(1) := 'N';
2250 
2251 begin
2252 hr_utility.trace('Entering calculate_diff_ni');
2253 
2254  IF p_archive_tab.count > 0 THEN
2255 
2256 hr_utility.trace('Entering if');
2257 
2258     FOR i                IN p_archive_tab.first .. p_archive_tab.last
2259     LOOP
2260 
2261 hr_utility.trace('Entering for loop1');
2262 
2263 			for ni_fps_rec in csr_fps_details
2264 			loop
2265 hr_utility.trace('Entering for loop2');
2266 
2267 			if p_archive_tab(i).act_info1 = ni_fps_rec.l_ni_cat then
2268 hr_utility.trace('Entering if');
2269 hr_utility.trace('Entering ni_fps_rec.l_ni_cat '||ni_fps_rec.l_ni_cat);
2270 hr_utility.trace('Entering ni_fps_rec.l_lel '||ni_fps_rec.l_lel);
2271 
2272   hr_utility.trace('Entering i '||i);
2273 	hr_utility.trace('p_archive_tab(i).act_info3 '||p_archive_tab(i).act_info3);
2274 	hr_utility.trace('p_archive_tab(i).act_info4 '||p_archive_tab(i).act_info4);
2275 	hr_utility.trace('p_archive_tab(i).act_info5 '||p_archive_tab(i).act_info5);
2276 	hr_utility.trace('p_archive_tab(i).act_info6 '||p_archive_tab(i).act_info6);
2277 	hr_utility.trace('p_archive_tab(i).act_info7 '||p_archive_tab(i).act_info7);
2278 	hr_utility.trace('p_archive_tab(i).act_info8 '||p_archive_tab(i).act_info8);
2279 
2280 	hr_utility.trace('ni_fps_rec.l_lel '||ni_fps_rec.l_lel);
2281 	hr_utility.trace('ni_fps_rec.l_et '||ni_fps_rec.l_et);
2282 
2283 				-- New YTD - Old YTD
2284 				p_archive_tab(i).act_info3 := p_archive_tab(i).act_info3 - ni_fps_rec.l_lel  ;
2285 				p_archive_tab(i).act_info4 := p_archive_tab(i).act_info4 - ni_fps_rec.l_et  ;
2286 				p_archive_tab(i).act_info5 := p_archive_tab(i).act_info5 - ni_fps_rec.l_uap  ;
2287 				p_archive_tab(i).act_info6 := p_archive_tab(i).act_info6 - ni_fps_rec.l_uel  ;
2288 				p_archive_tab(i).act_info7 := p_archive_tab(i).act_info7 - ni_fps_rec.l_emr  ;
2289 				p_archive_tab(i).act_info8 := p_archive_tab(i).act_info8 - ni_fps_rec.l_emp  ;
2290 
2291 	hr_utility.trace('p_archive_tab(i).act_info3 '||p_archive_tab(i).act_info3);
2292 	hr_utility.trace('p_archive_tab(i).act_info4 '||p_archive_tab(i).act_info4);
2293 	hr_utility.trace('p_archive_tab(i).act_info5 '||p_archive_tab(i).act_info5);
2294 	hr_utility.trace('p_archive_tab(i).act_info6 '||p_archive_tab(i).act_info6);
2295 	hr_utility.trace('p_archive_tab(i).act_info7 '||p_archive_tab(i).act_info7);
2296 	hr_utility.trace('p_archive_tab(i).act_info8 '||p_archive_tab(i).act_info8);
2297 
2298 					if p_archive_tab(i).act_info3 <> 0 or  p_archive_tab(i).act_info4 <> 0 or  p_archive_tab(i).act_info5 <> 0
2299 					or  p_archive_tab(i).act_info6 <> 0 or  p_archive_tab(i).act_info7 <> 0 or  p_archive_tab(i).act_info8 <> 0
2300 	         then
2301 						l_flag := 'Y';
2302 						hr_utility.trace('Differences are found.Archive the data.');
2303 					end if;
2304       end if;
2305       end loop;
2306 
2307 end loop;
2308 END IF;
2309 p_flag := l_flag;
2310 hr_utility.trace('Leaving calculate_diff_ni');
2311 end calculate_diff_ni;
2312 
2313 procedure calculate_diff_ni_payeagg (pactid number , p_report_type varchar2 , p_asg_id number, p_person_id number,p_archive_tab IN OUT NOCOPY action_info_table,p_flag IN OUT NOCOPY varchar2)
2314 is
2315 
2316 cursor csr_get_latest_fps_asg is
2317 select
2318  pai.assignment_id
2319  from pay_assignment_actions paa , pay_action_information pai
2320 where paa.payroll_action_id = pactid
2321 and paa.ASSIGNMENT_ID in (select distinct assignment_id from per_all_assignments_f where person_id = p_person_id)
2322 and pai.action_context_id = paa.assignment_action_id
2323 and pai.ACTION_INFORMATION_CATEGORY = 'GB_RTI_FPS_ASG_DET2'
2324 and ACTION_INFORMATION30 = 'Y'
2325 and ACTION_CONTEXT_TYPE = 'AAP'
2326 order by  substr(ACTION_INFORMATION29,instr(ACTION_INFORMATION29,',')+1,length(ACTION_INFORMATION29))  desc; -- payroll run asg action id
2327 
2328 cursor csr_fps_details(l_latest_fps_asg number) is
2329 select
2330  (ACTION_INFORMATION1) l_ni_cat,
2331  (ACTION_INFORMATION3) l_lel,
2332  (ACTION_INFORMATION4) l_et,
2333  (ACTION_INFORMATION5) l_uap,
2334  (ACTION_INFORMATION6) l_uel,
2335  (ACTION_INFORMATION7) l_emr,
2336  (ACTION_INFORMATION8) l_emp
2337  from pay_assignment_actions paa , pay_action_information pai
2338 where paa.payroll_action_id = pactid
2339 and paa.ASSIGNMENT_ID = l_latest_fps_asg
2340 and pai.action_context_id = paa.assignment_action_id
2341 and pai.ACTION_INFORMATION_CATEGORY = 'GB_RTI_FPS_NI_DET'
2342 and ACTION_CONTEXT_TYPE = 'AAP';
2343 
2344 l_lel  NUMBER;
2345 l_et   NUMBER;
2346 l_uap  NUMBER;
2347 l_uel  NUMBER;
2348 l_emr  NUMBER;
2349 l_emp  NUMBER;
2350 l_flag VARCHAR2(1) := 'N';
2351 l_latest_fps_asg number;
2352 
2353 begin
2354 hr_utility.trace('Entering calculate_diff_ni_payeagg');
2355 
2356 				open csr_get_latest_fps_asg;
2357 					fetch csr_get_latest_fps_asg into l_latest_fps_asg;
2358         close csr_get_latest_fps_asg;
2359 
2360  IF p_archive_tab.count > 0 THEN
2361 
2362 hr_utility.trace('Entering if');
2363 
2364     FOR i                IN p_archive_tab.first .. p_archive_tab.last
2365     LOOP
2366 
2367 hr_utility.trace('Entering for loop1');
2368 
2369 			for ni_fps_rec in csr_fps_details(l_latest_fps_asg)
2370 			loop
2371 hr_utility.trace('Entering for loop2');
2372 
2373 			if p_archive_tab(i).act_info1 = ni_fps_rec.l_ni_cat then
2374 hr_utility.trace('Entering if');
2375 hr_utility.trace('Entering ni_fps_rec.l_ni_cat '||ni_fps_rec.l_ni_cat);
2376 hr_utility.trace('Entering ni_fps_rec.l_lel '||ni_fps_rec.l_lel);
2377 
2378   hr_utility.trace('Entering i '||i);
2379 	hr_utility.trace('p_archive_tab(i).act_info3 '||p_archive_tab(i).act_info3);
2380 	hr_utility.trace('p_archive_tab(i).act_info4 '||p_archive_tab(i).act_info4);
2381 	hr_utility.trace('p_archive_tab(i).act_info5 '||p_archive_tab(i).act_info5);
2382 	hr_utility.trace('p_archive_tab(i).act_info6 '||p_archive_tab(i).act_info6);
2383 	hr_utility.trace('p_archive_tab(i).act_info7 '||p_archive_tab(i).act_info7);
2384 	hr_utility.trace('p_archive_tab(i).act_info8 '||p_archive_tab(i).act_info8);
2385 
2386 	hr_utility.trace('ni_fps_rec.l_lel '||ni_fps_rec.l_lel);
2387 	hr_utility.trace('ni_fps_rec.l_et '||ni_fps_rec.l_et);
2388 
2389 				-- New YTD - Old YTD
2390 				p_archive_tab(i).act_info3 := p_archive_tab(i).act_info3 - ni_fps_rec.l_lel  ;
2391 				p_archive_tab(i).act_info4 := p_archive_tab(i).act_info4 - ni_fps_rec.l_et  ;
2392 				p_archive_tab(i).act_info5 := p_archive_tab(i).act_info5 - ni_fps_rec.l_uap  ;
2393 				p_archive_tab(i).act_info6 := p_archive_tab(i).act_info6 - ni_fps_rec.l_uel  ;
2394 				p_archive_tab(i).act_info7 := p_archive_tab(i).act_info7 - ni_fps_rec.l_emr  ;
2395 				p_archive_tab(i).act_info8 := p_archive_tab(i).act_info8 - ni_fps_rec.l_emp  ;
2396 
2397 	hr_utility.trace('p_archive_tab(i).act_info3 '||p_archive_tab(i).act_info3);
2398 	hr_utility.trace('p_archive_tab(i).act_info4 '||p_archive_tab(i).act_info4);
2399 	hr_utility.trace('p_archive_tab(i).act_info5 '||p_archive_tab(i).act_info5);
2400 	hr_utility.trace('p_archive_tab(i).act_info6 '||p_archive_tab(i).act_info6);
2401 	hr_utility.trace('p_archive_tab(i).act_info7 '||p_archive_tab(i).act_info7);
2402 	hr_utility.trace('p_archive_tab(i).act_info8 '||p_archive_tab(i).act_info8);
2403 
2404 					if p_archive_tab(i).act_info3 <> 0 or  p_archive_tab(i).act_info4 <> 0 or  p_archive_tab(i).act_info5 <> 0
2405 					or  p_archive_tab(i).act_info6 <> 0 or  p_archive_tab(i).act_info7 <> 0 or  p_archive_tab(i).act_info8 <> 0
2406 	         then
2407 						l_flag := 'Y';
2408 						hr_utility.trace('Differences are found.Archive the data.');
2409 					end if;
2410       end if;
2411       end loop;
2412 
2413 end loop;
2414 END IF;
2415 p_flag := l_flag;
2416 hr_utility.trace('Leaving calculate_diff_ni_payeagg');
2417 end calculate_diff_ni_payeagg;
2418 
2419 
2420 procedure supressing_zeros_new_starter(p_archive_tab IN OUT nocopy action_info_table,p_flag IN OUT NOCOPY varchar2)
2421 is
2422 begin
2423 
2424 p_flag := 'N';
2425 
2426 --Suppressing zeroes
2427 if p_archive_tab(2).act_info15 = 0  then
2428 	p_archive_tab(2).act_info15 := NULL;
2429 end if;
2430 
2431 if p_archive_tab(2).act_info16 = 0  then
2432 	p_archive_tab(2).act_info16 := NULL;
2433 end if;
2434 
2435 if p_archive_tab(2).act_info17 = 0  then
2436 	p_archive_tab(2).act_info17 := NULL;
2437 end if;
2438 
2439 if p_archive_tab(2).act_info18 = 0 then
2440 	p_archive_tab(2).act_info18 := NULL;
2441 end if;
2442 
2443 if p_archive_tab(2).act_info19 = 0  then
2444 	p_archive_tab(2).act_info19 := NULL;
2445 end if;
2446 
2447 if p_archive_tab(2).act_info20 = 0  then
2448 	p_archive_tab(2).act_info20 := NULL;
2449 end if;
2450 
2451 if p_archive_tab(2).act_info21 = 0 then
2452 	p_archive_tab(2).act_info21 := NULL;
2453 end if;
2454 
2455 if p_archive_tab(2).act_info22 = 0  then
2456 	p_archive_tab(2).act_info22 := NULL;
2457 end if;
2458 
2459 if  NVL(p_archive_tab(2).act_info15,0) <> 0 or  NVL(p_archive_tab(2).act_info16,0) <> 0 or  NVL(p_archive_tab(2).act_info17,0) <> 0
2460 or  NVL(p_archive_tab(2).act_info18,0) <> 0 or  NVL(p_archive_tab(2).act_info19,0) <> 0 or  NVL(p_archive_tab(2).act_info20,0) <> 0
2461 or  NVL(p_archive_tab(2).act_info21,0) <> 0 or  NVL(p_archive_tab(2).act_info22,0) <> 0 then
2462 	p_flag := 'Y';
2463 	hr_utility.trace('Values are found. Archive the data.');
2464 end if;
2465 
2466 end supressing_zeros_new_starter;
2467 
2468 PROCEDURE populate_run_msg(
2469     p_assignment_action_id IN NUMBER ,
2470     p_message_text         IN VARCHAR2,
2471     p_message_level        IN VARCHAR2 DEFAULT 'F')
2472 IS
2473   PRAGMA AUTONOMOUS_TRANSACTION;
2474 BEGIN
2475   hr_utility.set_location(' Entering: populate_run_msg',111);
2476 
2477   INSERT
2478   INTO pay_message_lines
2479     (
2480       line_sequence,
2481       payroll_id,
2482       message_level,
2483       source_id,
2484       source_type,
2485       line_text
2486     )
2487     VALUES
2488     (
2489       pay_message_lines_s.nextval ,
2490       100 ,
2491       p_message_level, --'F' ,
2492       p_assignment_action_id ,
2493       'A' ,
2494       SUBSTR(p_message_text,1,240)
2495     );
2496   hr_utility.set_location(' Leaving: populate_run_msg',999);
2497   COMMIT;
2498 
2499 EXCEPTION
2500 WHEN OTHERS THEN
2501   hr_utility.trace('Error occured in populate_run_msg');
2502   RAISE;
2503 END populate_run_msg;
2504 
2505 procedure set_address_fields (p_addr_rec IN OUT nocopy act_info_rec,p_person_rec IN act_info_rec, p_asg_det IN act_info_rec )
2506 is
2507 begin
2508 hr_utility.trace('Entering set_address_fields');
2509 
2510 --Address Fields are mandatory when nino is not known or on starter
2511 if p_asg_det.act_info1 is null then
2512 	if p_person_rec.act_info7 is not null then
2513 			p_addr_rec.act_info5  := NULL;
2514 			p_addr_rec.act_info6  := NULL;
2515 			p_addr_rec.act_info7  := NULL;
2516 			p_addr_rec.act_info8  := NULL;
2517 			p_addr_rec.act_info12 := NULL;
2518 			p_addr_rec.act_info13 := NULL;
2519 			hr_utility.trace('Address details will not be reported.');
2520 	end if;
2521 end if;
2522 
2523 hr_utility.trace('Leaving set_address_fields');
2524 end set_address_fields;
2525 
2526 PROCEDURE header_validations(p_payroll_action_id IN NUMBER)
2527 IS
2528      l_proc      CONSTANT VARCHAR2(70) := g_package || 'header_validations';
2529      l_err                BOOLEAN;
2530      l_exp                EXCEPTION;
2531 
2532   cursor csr_payroll_details(pactid NUMBER) is
2533              select
2534 										nvl(UPPER(hoi.org_information11),' ') sender_id,
2535                     nvl(upper(substr(ltrim(hoi.org_information3),1,35)),' ') employer_name,
2536                     nvl(upper(substr(ltrim(substr(hoi.org_information1,4,11),'/'),1,10)),' ') tax_ref_no,
2537                     lpad(nvl(substr(hoi.org_information1,1,3),' '),3,0) tax_office_no,
2538 										decode(PAY_GB_EOY_MAGTAPE.get_payroll_version, ' ', '0', PAY_GB_EOY_MAGTAPE.get_payroll_version) payroll_ver,
2539                     nvl(upper(substr(hoi.org_information6,1,13)),' ') acc_ref_no,
2540                     hoi.org_information7 econ
2541 
2542              from   pay_payroll_actions pact,
2543                     hr_organization_information hoi
2544             where   pact.payroll_action_id=pactid
2545               and   pact.business_group_id = hoi.organization_id
2546               and   hoi.org_information_context = 'Tax Details References'
2547               and   nvl(hoi.org_information10,'UK') = 'UK'
2548               and   substr(pact.legislative_parameters,instr(pact.legislative_parameters,'TAX_REF=') + 8,
2549                     instr(pact.legislative_parameters||' ',' ', instr(pact.legislative_parameters,'TAX_REF=')+8) -
2550                     instr(pact.legislative_parameters, 'TAX_REF=') - 8) = hoi.org_information1;
2551 
2552 l_payroll_rec  csr_payroll_details%rowtype;
2553 
2554 BEGIN
2555 
2556 	hr_utility.set_location('Entering '|| l_proc, 10);
2557   l_err := FALSE;
2558 
2559   open csr_payroll_details(p_payroll_action_id);
2560   fetch csr_payroll_details into l_payroll_rec;
2561   close csr_payroll_details;
2562 
2563 -- Sender Id
2564 	   if l_payroll_rec.sender_id = ' ' or l_payroll_rec.sender_id is null then
2565 				 hr_utility.set_location('The Sender ID is missing.',10);
2566 				 fnd_file.put_line(fnd_file.output,'The Sender ID is missing.');
2567 				 l_err := true;
2568      end if;
2569 
2570 -- HMRC Office Number
2571 	   if l_payroll_rec.tax_office_no = ' ' or l_payroll_rec.tax_office_no is null then
2572 				 hr_utility.set_location('The HMRC Office number is missing.',10);
2573 				 fnd_file.put_line(fnd_file.output,'The HMRC Office number is missing.');
2574 				 l_err := true;
2575      elsif validate_input(substr(l_payroll_rec.tax_office_no,1,3),'NUMBER') > 0
2576 	     then
2577 				hr_utility.set_location('The HMRC Office Number '||l_payroll_rec.tax_office_no||' has invalid characters.',10);
2578 				fnd_file.put_line(fnd_file.output,'The HMRC Office Number '||l_payroll_rec.tax_office_no||' has invalid characters.');
2579         l_err := true;
2580      end if;
2581 
2582 -- Employer PAYE Ref
2583 		 if l_payroll_rec.tax_ref_no = ' ' or l_payroll_rec.tax_ref_no is null then
2584 				 hr_utility.set_location('The Employer PAYE Reference is missing.',10);
2585 					fnd_file.put_line(fnd_file.output,'The Employer PAYE Reference is missing.');
2586 				 l_err := true;
2587      elsif validate_input(l_payroll_rec.tax_ref_no,'FULL_EDI') > 0 then
2588 				hr_utility.set_location('The Employer PAYE Reference '||l_payroll_rec.tax_ref_no||' has invalid characters.',10);
2589 				fnd_file.put_line(fnd_file.output,'The Employer PAYE Reference '||l_payroll_rec.tax_ref_no||' has invalid characters.');
2590         l_err := true;
2591      end if;
2592 
2593 -- Employer Name
2594 		 if l_payroll_rec.employer_name = ' ' or l_payroll_rec.employer_name is null then
2595 				 hr_utility.set_location('The Employer Name is missing.',10);
2596 				 fnd_file.put_line(fnd_file.output,'The Employer Name is missing.');
2597 				 l_err := true;
2598      elsif validate_input(l_payroll_rec.employer_name,'EMP_NAME') > 0 then
2599 				hr_utility.set_location('The Employer Name '||l_payroll_rec.employer_name ||' has invalid characters.',10);
2600 				fnd_file.put_line(fnd_file.output,'The Employer Name '||l_payroll_rec.employer_name ||' has invalid characters.');
2601         l_err := true;
2602      end if;
2603 
2604 -- Accounts Office Number
2605 			if l_payroll_rec.acc_ref_no = ' ' or l_payroll_rec.acc_ref_no is null then
2606 				 hr_utility.set_location('The Employer Accounts Office Ref Number is missing.',10);
2607 					fnd_file.put_line(fnd_file.output,'The Employer Accounts Office Ref Number is missing.');
2608 				 l_err := true;
2609 			elsif (length(l_payroll_rec.acc_ref_no) > 13
2610 							 OR REGEXP_INSTR(l_payroll_rec.acc_ref_no,'^([[:digit:]]{1,3})P([[:alpha:]]{1})([[:digit:]]{1,7})([[:digit:]]|X)$') = 0 ) THEN
2611 
2612 					hr_utility.set_location ('Incorrect format entered for Employer Accounts Office Ref Num field. Valid format is NNNPANNNNNNNX.',10);
2613 					fnd_file.put_line(fnd_file.output,'Incorrect format entered for Employer Accounts Office Ref Num field. Valid format is NNNPANNNNNNNX.');
2614           l_err := true;
2615       END IF;
2616 
2617 -- Econ
2618 if l_payroll_rec.econ is not null then
2619 			   IF econ_validate(l_payroll_rec.econ) = 0 THEN
2620 			     hr_utility.set_location('ECON Number '||l_payroll_rec.econ ||' is invalid',10);
2621 					 fnd_file.put_line(fnd_file.output,'ECON Number '||l_payroll_rec.econ ||' is invalid.');
2622 					l_err := true;
2623 				 END IF;
2624 			 END IF;
2625 
2626      if (l_err) then
2627           raise l_exp; -- Raising Exception when error is found
2628      end if;
2629 
2630       hr_utility.set_location('Leaving '|| l_proc, 10);
2631 EXCEPTION
2632           when l_exp then
2633                raise_application_error(-20001,'Errors found while archiving data.');
2634 
2635 END header_validations;
2636 
2637 
2638 -- Person Address validations
2639 PROCEDURE person_address_validations(   p_assactid       IN NUMBER,
2640                                         p_effective_date IN DATE,
2641                                         p_tab_rec_data   IN action_info_table,
2642 																        p_asg_no         IN VARCHAR2,
2643                                         edi_validation_fail out nocopy  varchar2) IS
2644 
2645 l_proc  CONSTANT VARCHAR2(70):= g_package||'person_address_validations';
2646 
2647 --Assignment Number
2648 l_assignment_number 		per_assignments_f.assignment_number%TYPE;
2649 
2650 -- Address details
2651 l_address_line1 				per_addresses.address_line1%TYPE;
2652 l_address_line2 				per_addresses.address_line2%TYPE;
2653 l_address_line3 				per_addresses.address_line3%TYPE;
2654 l_address_line4 				per_addresses.address_line3%TYPE;
2655 l_town_or_city 					per_addresses.town_or_city%TYPE;
2656 l_postal_code 					per_addresses.postal_code%TYPE;
2657 l_country 							per_addresses.country%TYPE;
2658 
2659 -- Person details
2660 l_last_name 						per_people_f.last_name%TYPE;
2661 l_first_name 						per_people_f.first_name%TYPE;
2662 l_middle_name 					per_people_f.middle_names%TYPE;
2663 l_national_identifier 	per_people_f.national_identifier%TYPE;
2664 l_title 								per_people_f.title%TYPE;
2665 l_date_of_birth 				per_people_f.date_of_birth%TYPE;
2666 l_sex 									per_people_f.sex%TYPE;
2667 l_passport_no 					varchar2(50);
2668 
2669 -- Partner Person Details
2670 l_partner_last_name 		per_people_f.last_name%TYPE;
2671 l_partner_first_name 		per_people_f.first_name%TYPE;
2672 l_partner_middle_name 	per_people_f.middle_names%TYPE;
2673 l_partner_national_id 	per_people_f.national_identifier%TYPE;
2674 
2675 -- Assignment Details required for validations
2676 l_aspp           NUMBER;
2677 l_start_date     DATE;
2678 
2679 l_effective_date DATE;
2680 l_year1          NUMBER;
2681 l_year2          NUMBER;
2682 
2683 BEGIN
2684 hr_utility.set_location('Entering '||l_proc,10);
2685 edi_validation_fail := 'N'; -- Initialized validation fail to N
2686 
2687 -- Assignment Number
2688 l_assignment_number     := p_asg_no;
2689 
2690 -- Initializing the Address variables
2691 l_address_line1 				:= p_tab_rec_data(1).act_info5;
2692 l_address_line2 				:= p_tab_rec_data(1).act_info6;
2693 l_address_line3 				:= p_tab_rec_data(1).act_info7;
2694 l_town_or_city 					:= p_tab_rec_data(1).act_info8;
2695 l_country 							:= p_tab_rec_data(1).act_info13;
2696 l_postal_code 					:= p_tab_rec_data(1).act_info12;
2697 
2698 -- Initializing the Person variables
2699 l_last_name 						:= p_tab_rec_data(0).act_info3;
2700 l_first_name 						:= p_tab_rec_data(0).act_info4;
2701 l_middle_name 					:= p_tab_rec_data(0).act_info5;
2702 l_title                 := p_tab_rec_data(0).act_info6;
2703 l_national_identifier   := p_tab_rec_data(0).act_info7;
2704 l_date_of_birth 				:= (to_date(substr(p_tab_rec_data(0).act_info8,1,10),'YYYY-MM-DD'));
2705 l_sex 									:= p_tab_rec_data(0).act_info9;
2706 l_partner_last_name 		:= p_tab_rec_data(0).act_info12;
2707 l_partner_first_name 		:= p_tab_rec_data(0).act_info13;
2708 l_partner_middle_name 	:= p_tab_rec_data(0).act_info14;
2709 l_partner_national_id 	:= p_tab_rec_data(0).act_info15;
2710 l_passport_no 					:= p_tab_rec_data(0).act_info16;
2711 
2712 --Assignment Details required for validations
2713 l_aspp                  := p_tab_rec_data(2).act_info22;
2714 l_start_date            := (to_date(substr(p_tab_rec_data(2).act_info1,1,10),'YYYY-MM-DD'));
2715 
2716 --Local declarations
2717 l_year1 := to_number(to_char(sysdate,'YYYY'));
2718 l_year2 := to_number(to_char(l_date_of_birth,'YYYY'));
2719 l_year1 := l_year1- l_year2;
2720 
2721 --Address validations
2722 
2723 --Address line 1 is mandatory if Start date is not null or nino is null
2724 IF l_start_date is not null or l_national_identifier is null then
2725 	IF l_address_line1 = ' ' OR l_address_line1 IS NULL THEN
2726 	    populate_run_msg(p_assactid,'The Address Line 1 of the assignment ' || l_assignment_number || ' is missing.');
2727 	    fnd_file.put_line (fnd_file.LOG,'The Address Line 1 of the assignment ' || l_assignment_number || ' is missing.');
2728 	    edi_validation_fail := 'Y';
2729 	ELSIF validate_input(l_address_line1,'ADDRESS') > 0 THEN
2730     populate_run_msg(p_assactid,'The Address Line 1 ' || l_address_line1 || ' of the assignment ' || l_assignment_number || ' has invalid characters.');
2731     fnd_file.put_line (fnd_file.LOG,'The Address Line 1 ' || l_address_line1 || ' of the assignment ' || l_assignment_number || ' has invalid characters.');
2732     edi_validation_fail := 'Y';
2733 	END IF;
2734 END IF;
2735 
2736 --Address line 2 is mandatory if Start date is not null or nino is null
2737 IF l_start_date is not null or l_national_identifier is null then
2738 	IF l_address_line2 = ' ' OR l_address_line2 IS NULL THEN
2739 	    populate_run_msg(p_assactid,'The Address Line 2 of the assignment ' || l_assignment_number || ' is missing.');
2740 	    fnd_file.put_line (fnd_file.LOG,'The Address Line 2 of the assignment ' || l_assignment_number || ' is missing.');
2741 	    edi_validation_fail := 'Y';
2742 	ELSIF validate_input(l_address_line2,'ADDRESS') > 0 THEN
2743     populate_run_msg(p_assactid,'The Address Line 2 ' || l_address_line2 || ' of the assignment '|| l_assignment_number || ' has invalid characters.');
2744     fnd_file.put_line (fnd_file.LOG,'The Address Line 2 ' || l_address_line2 || ' of the assignment '|| l_assignment_number || ' has invalid characters.');
2745     edi_validation_fail := 'Y';
2746 	END IF;
2747 END IF;
2748 
2749 IF l_address_line3 <> ' ' and l_address_line3 IS NOT NULL THEN
2750     IF validate_input(l_address_line3,'ADDRESS') > 0 THEN
2751     populate_run_msg(p_assactid,'The Address Line 3 ' || l_address_line3 || ' of the assignment ' || l_assignment_number || ' has invalid characters.');
2752     fnd_file.put_line (fnd_file.LOG,'The Address Line 3 ' || l_address_line3 || ' of the assignment ' || l_assignment_number || ' has invalid characters.');
2753     edi_validation_fail := 'Y';
2754     END IF;
2755 END IF;
2756 
2757 IF l_town_or_city <> ' ' and l_town_or_city IS NOT NULL THEN
2758     IF validate_input(l_town_or_city,'ADDRESS') > 0 THEN
2759     populate_run_msg(p_assactid,'The Town Or City ' || l_town_or_city || ' of the assignment '|| l_assignment_number || ' has invalid characters.');
2760     fnd_file.put_line (fnd_file.LOG,'The Town Or City ' || l_town_or_city ||' of the assignment ' || l_assignment_number || ' has invalid characters.');
2761     edi_validation_fail := 'Y';
2762     END IF;
2763 END IF;
2764 
2765 IF l_country <> ' ' and l_country IS NOT NULL THEN
2766     IF validate_input(l_country,'COUNTRY') > 0 THEN
2767     populate_run_msg(p_assactid,'The Country ' || l_country || ' of the assignment ' || l_assignment_number || ' has invalid characters.');
2768     fnd_file.put_line (fnd_file.LOG,'The Country ' || l_country || ' of the assignment ' || l_assignment_number || ' has invalid characters.');
2769     edi_validation_fail := 'Y';
2770     END IF;
2771 END IF;
2772 
2773 IF l_postal_code <> ' ' and l_postal_code IS NOT NULL THEN
2774     IF validate_input(l_postal_code,'POSTALCODE') > 0 THEN
2775     populate_run_msg(p_assactid,'The Postal Code ' || l_postal_code || ' of the assignment ' || l_assignment_number || ' has invalid characters.');
2776     fnd_file.put_line (fnd_file.LOG,'The Postal Code ' || l_postal_code || ' of the assignment ' || l_assignment_number || ' has invalid characters.');
2777     edi_validation_fail := 'Y';
2778     END IF;
2779 END IF;
2780 
2781 -- Person validations
2782 
2783 -- Last name is mandatory field
2784 IF l_last_name = ' ' OR l_last_name IS NULL THEN
2785     populate_run_msg(p_assactid,'The Last Name of the assignment ' || l_assignment_number || ' is missing.');
2786     fnd_file.put_line (fnd_file.LOG,'The Last Name of the assignment '||  l_assignment_number || ' is missing.');
2787     edi_validation_fail := 'Y';
2788 ELSIF validate_input(l_last_name,'NAME') > 0 THEN
2789     populate_run_msg(p_assactid,'The Last Name ' || l_last_name || ' of the assignment ' || l_assignment_number || ' has invalid characters.');
2790     fnd_file.put_line (fnd_file.LOG,'The Last Name ' || l_last_name || ' of the assignment ' || l_assignment_number || ' has invalid characters.');
2791     edi_validation_fail := 'Y';
2792 END IF;
2793 
2794 -- First name is mandatory field
2795 IF l_first_name = ' ' OR l_first_name IS NULL THEN
2796     populate_run_msg(p_assactid,'The First Name of the assignment '||  l_assignment_number || ' is missing.');
2797     fnd_file.put_line (fnd_file.LOG,'The First Name of the assignment ' || l_assignment_number || ' is missing.');
2798     edi_validation_fail := 'Y';
2799 ELSIF validate_input(l_first_name,'NAME') > 0 THEN
2800     populate_run_msg(p_assactid,'The First Name ' || l_first_name ||' of the assignment ' || l_assignment_number || ' has invalid characters.');
2801     fnd_file.put_line (fnd_file.LOG,'The First Name ' || l_first_name || ' of the assignment ' || l_assignment_number || ' has invalid characters.');
2802     edi_validation_fail := 'Y';
2803 END IF;
2804 
2805 -- Middle name = Second First name
2806 IF l_middle_name <> ' ' AND l_middle_name IS NOT NULL THEN
2807   IF validate_input(l_middle_name,'NAME') > 0 THEN
2808     populate_run_msg(p_assactid,'The Middle Name ' || l_middle_name || ' of the assignment ' || l_assignment_number || ' has invalid characters.');
2809     fnd_file.put_line (fnd_file.LOG,'The Middle Name ' || l_middle_name || ' of the assignment ' || l_assignment_number || ' has invalid characters.');
2810     edi_validation_fail := 'Y';
2811   END IF;
2812 END IF;
2813 
2814 
2815 IF l_title <> ' ' AND l_title is not null THEN
2816     IF validate_input(l_title,'TITLE') > 0 THEN
2817     populate_run_msg(p_assactid,'The Title ' || l_title || ' of the assignment ' || l_assignment_number || ' has invalid characters.');
2818     fnd_file.put_line (fnd_file.LOG,'The Title ' || l_title || ' of the assignment ' || l_assignment_number || ' has invalid characters.');
2819     edi_validation_fail := 'Y';
2820     END IF;
2821 END IF;
2822 
2823 IF l_national_identifier IS NOT NULL AND
2824     hr_gb_utility.ni_validate(l_national_identifier,sysdate) <> 0 THEN
2825     populate_run_msg(p_assactid,'The National Insurance number ' || l_national_identifier || ' of the assignment ' || l_assignment_number || ' has invalid characters.');
2826     fnd_file.put_line (fnd_file.LOG,'The National Insurance number ' || l_national_identifier || ' of the assignment ' || l_assignment_number || ' has invalid characters.');
2827     edi_validation_fail := 'Y';
2828 END IF;
2829 
2830 -- Gender is mandatory field
2831 IF ((l_sex <> 'M' AND l_sex <> 'F') OR (l_sex = ' ' OR l_sex IS NULL)) THEN
2832     populate_run_msg(p_assactid,'Gender is not specified for the assignment ' || l_assignment_number || '.');
2833     fnd_file.put_line (fnd_file.LOG,'Gender is not specified for the assignment ' || l_assignment_number || '.');
2834     edi_validation_fail := 'Y';
2835 END IF;
2836 
2837 IF l_passport_no <> ' ' OR l_passport_no IS NOT NULL THEN
2838 	IF validate_input(l_passport_no,'PASSPORT') > 0 THEN
2839     populate_run_msg(p_assactid,'The Passport Number ' || l_passport_no || ' of the assignment ' || l_assignment_number || ' has invalid characters.');
2840     fnd_file.put_line (fnd_file.LOG,'The Passport Number ' || l_passport_no || ' of the assignment ' || l_assignment_number || ' has invalid characters.');
2841     edi_validation_fail := 'Y';
2842   END IF;
2843 END IF;
2844 
2845 -- Date of Birth is mandatory field
2846 IF l_date_of_birth IS NULL THEN
2847     populate_run_msg(p_assactid,'The Date of Birth of the assignment ' || l_assignment_number || ' is missing.');
2848     fnd_file.put_line (fnd_file.LOG,'The Date of Birth of the assignment '|| l_assignment_number || ' is missing.');
2849     edi_validation_fail := 'Y';
2850 END IF;
2851 
2852 IF ((l_date_of_birth > sysdate) OR (l_year1 > 130)) THEN
2853 populate_run_msg(p_assactid,'The Date of Birth of the assignment ' || l_assignment_number || ' is invalid');
2854 fnd_file.put_line (fnd_file.LOG,'The Date of Birth of the assignment '|| l_assignment_number || ' is invalid');
2855 edi_validation_fail := 'Y';
2856 END IF;
2857 
2858 -- Partner validations
2859 
2860 -- ASPP rate is mandatory if Partner details are found
2861 IF l_partner_last_name <> ' ' OR l_partner_last_name IS NOT NULL THEN
2862 
2863 	 IF l_aspp IS NULL THEN
2864 		populate_run_msg(p_assactid, 'Additional Statutory Paternity Pay for assignment ' || l_assignment_number||' is missing, although Partner details are present.');
2865     fnd_file.put_line (fnd_file.LOG,'Additional Statutory Paternity Pay for assignment ' || l_assignment_number||' is missing, although Partner details are present.');
2866 		edi_validation_fail := 'Y';
2867    END IF;
2868 
2869    IF validate_input(l_partner_last_name,'NAME') > 0 THEN
2870     populate_run_msg(p_assactid,'The Partner Last Name ' || l_partner_last_name || ' of the assignment ' || l_assignment_number || ' has invalid characters.');
2871     fnd_file.put_line (fnd_file.LOG,'The Partner Last Name ' || l_partner_last_name || ' of the assignment ' || l_assignment_number || ' has invalid characters.');
2872     edi_validation_fail := 'Y';
2873    END IF;
2874 END IF;
2875 
2876 -- Partner First name is mandatory field if last name is present
2877 IF l_partner_last_name IS NOT NULL AND (l_partner_first_name = ' ' OR l_partner_first_name IS NULL) THEN
2878     populate_run_msg(p_assactid,'The Partner First Name of the assignment '||  l_assignment_number || ' is missing.');
2879     fnd_file.put_line (fnd_file.LOG,'The Partner First Name of the assignment ' || l_assignment_number || ' is missing.');
2880     edi_validation_fail := 'Y';
2881 ELSIF validate_input(l_partner_first_name,'NAME') > 0 THEN
2882     populate_run_msg(p_assactid,'The Partner First Name ' || l_partner_first_name ||' of the assignment ' || l_assignment_number || ' has invalid characters.');
2883     fnd_file.put_line (fnd_file.LOG,'The Partner First Name ' || l_partner_first_name || ' of the assignment ' || l_assignment_number || ' has invalid characters.');
2884     edi_validation_fail := 'Y';
2885 END IF;
2886 
2887 -- Middle name = Second First name
2888 IF l_partner_middle_name <> ' ' AND l_partner_middle_name IS NOT NULL THEN
2889   IF validate_input(l_partner_middle_name,'NAME') > 0 THEN
2890     populate_run_msg(p_assactid,'The Partner First Name ' || l_partner_middle_name || ' of the assignment ' || l_assignment_number || ' has invalid characters.');
2891     fnd_file.put_line (fnd_file.LOG,'The Partner First Name ' || l_partner_middle_name || ' of the assignment ' || l_assignment_number || ' has invalid characters.');
2892     edi_validation_fail := 'Y';
2893   END IF;
2894 END IF;
2895 
2896 IF l_partner_national_id IS NOT NULL AND
2897     hr_gb_utility.ni_validate(l_partner_national_id,sysdate) <> 0 THEN
2898     populate_run_msg(p_assactid,'The Partner National Insurance number ' || l_partner_national_id || ' of the assignment ' || l_assignment_number || ' has invalid characters.');
2899     fnd_file.put_line (fnd_file.LOG,'The Partner National Insurance number ' || l_partner_national_id || ' of the assignment ' || l_assignment_number || ' has invalid characters.');
2900     edi_validation_fail := 'Y';
2901 END IF;
2902 
2903 
2904 hr_utility.set_location('Leaving'||l_proc,10);
2905 END person_address_validations;
2906 
2907 PROCEDURE assignment_validations(p_assactid       IN NUMBER,
2908                                  p_effective_date IN DATE,
2909                                  p_tab_rec_data   IN action_info_table,
2910 																 p_asg_no         IN VARCHAR2,
2911                                  edi_validation_fail out nocopy  varchar2) IS
2912 
2913 -- To fetch Effective date
2914 CURSOR get_effective_date IS
2915      SELECT ppa.effective_date
2916        FROM pay_payroll_actions ppa, pay_assignment_actions paa
2917       WHERE ppa.payroll_action_id = paa.payroll_action_id
2918         AND paa.assignment_action_id = p_assactid;
2919 
2920 --Declarations
2921 l_proc  CONSTANT VARCHAR2(70):= g_package||'assignment_validations';
2922 
2923 -- Assignment Number
2924 l_assignment_number 					per_assignments_f.assignment_number%TYPE;
2925 
2926 -- Assignment Fields
2927 l_start_date                  date;
2928 l_end_date 										date;
2929 l_payment_date 								date;
2930 l_starter_declaration 				varchar2(100);
2931 l_stay_over_six_months 				varchar2(100);
2932 l_stay_less_six_months 				varchar2(100);
2933 l_living_abroad 							varchar2(100);
2934 l_occ_pension_indicator 			varchar2(100);
2935 l_annual_occupational_pension number;
2936 l_payroll_id 									per_assignments_f.assignment_number%TYPE;
2937 l_taxable_pay_to_date 				number;
2938 l_student_loan_repayment 			number;
2939 l_student_loan_repay 					number;
2940 l_tax_deducted_refunded 			number;
2941 l_ssp 												number;
2942 l_smp 												number;
2943 l_ospp 												number;
2944 l_sap 												number;
2945 l_aspp 												number;
2946 l_eea 												varchar2(1);
2947 l_tax_code 										varchar2(15);
2948 -- Person Details needed to validations
2949 l_gender 											varchar2(100);
2950 
2951 -- Local Declarations
2952 l_msg_value varchar2(100);
2953 l_eff_date date;
2954 
2955 
2956 BEGIN
2957  hr_utility.set_location('Entering: '||l_proc,1);
2958 --
2959 edi_validation_fail := 'N'; -- Initialized validation fail to N
2960 
2961 -- Assigning values to the local variables
2962 l_assignment_number           := p_asg_no;
2963 
2964 -- Assignment Fields
2965 l_start_date                  := (to_date(substr(p_tab_rec_data(2).act_info1,1,10),'YYYY-MM-DD'));
2966 l_end_date                    := (to_date(substr(p_tab_rec_data(2).act_info2,1,10),'YYYY-MM-DD'));
2967 l_starter_declaration   			:= p_tab_rec_data(2).act_info3;
2968 l_stay_over_six_months  			:= p_tab_rec_data(2).act_info5;
2969 l_stay_less_six_months  			:= p_tab_rec_data(2).act_info6;
2970 l_living_abroad         			:= p_tab_rec_data(2).act_info7;
2971 l_eea         			          := p_tab_rec_data(2).act_info8;
2972 l_payroll_id 									:= p_tab_rec_data(2).act_info10;
2973 l_occ_pension_indicator       := p_tab_rec_data(2).act_info11;
2974 l_annual_occupational_pension := p_tab_rec_data(2).act_info12;
2975 l_tax_code 										:=  p_tab_rec_data(2).act_info13;
2976 l_taxable_pay_to_date 				:= p_tab_rec_data(2).act_info15;
2977 l_tax_deducted_refunded    		:=  p_tab_rec_data(2).act_info16;
2978 l_student_loan_repayment 			:= p_tab_rec_data(2).act_info17;
2979 l_ssp    											:=  p_tab_rec_data(2).act_info18;
2980 l_smp    											:=  p_tab_rec_data(2).act_info19;
2981 l_ospp    										:=  p_tab_rec_data(2).act_info20;
2982 l_sap    											:=  p_tab_rec_data(2).act_info21;
2983 l_aspp    										:=  p_tab_rec_data(2).act_info22;
2984 
2985 l_gender 											:=  p_tab_rec_data(0).act_info9;
2986 
2987 
2988 -- Assignment Validations
2989 
2990 
2991 IF l_start_date IS NOT NULL
2992 	and date_validate(p_assactid,'UK_EMPL_DATE',l_start_date) = 0 THEN
2993     populate_run_msg(p_assactid,' The start date of employment for the assignment ' || l_assignment_number || ' is invalid.');
2994     fnd_file.put_line (fnd_file.LOG,'The start date of employment for the assignment ' || l_assignment_number || ' is invalid.');
2995     edi_validation_fail := 'Y';
2996 END IF;
2997 
2998 IF l_end_date IS NOT NULL
2999 	and date_validate(p_assactid,'UK_EMPL_DATE_LEAVING',l_end_date) = 0 THEN
3000     populate_run_msg(p_assactid,' The end date of employment for the assignment ' || l_assignment_number || ' is invalid.');
3001     fnd_file.put_line (fnd_file.LOG,'The end date of employment for the assignment ' || l_assignment_number || ' is invalid.');
3002     edi_validation_fail := 'Y';
3003 END IF;
3004 
3005 IF l_stay_over_six_months <> 'Y' AND l_stay_less_six_months <> 'Y' AND l_living_abroad <> 'Y' AND l_annual_occupational_pension IS NULL ThEN
3006 IF l_start_date IS NOT NULL AND l_starter_declaration IS NULL THEN
3007     populate_run_msg(p_assactid, 'The Starter Declaration is missing for assignment ' || l_assignment_number || '.');
3008     fnd_file.put_line (fnd_file.LOG,'The Starter Declaration is missing for assignment ' || l_assignment_number || '.');
3009     edi_validation_fail := 'Y';
3010 END IF;
3011 END IF;
3012 
3013 IF l_starter_declaration IS NOT NULL THEN
3014    IF l_starter_declaration NOT IN ('A' , 'B' , 'C') THEN
3015     populate_run_msg(p_assactid, 'The Starter Declaration ' ||l_starter_declaration|| ' for assignment ' || l_assignment_number||' is invalid.');
3016     fnd_file.put_line (fnd_file.LOG,'The Starter Declaration ' ||l_starter_declaration|| ' for assignment ' || l_assignment_number||' is invalid.');
3017     edi_validation_fail := 'Y';
3018 	END IF;
3019 END IF;
3020 
3021 IF l_starter_declaration IS NOT NULL THEN
3022 	IF l_stay_over_six_months = 'Y' OR l_stay_less_six_months = 'Y' OR l_living_abroad = 'Y' OR l_annual_occupational_pension IS NOT NULL ThEN
3023 		populate_run_msg(p_assactid, 'Starter Declaration must not be present for assignment ' || l_assignment_number||' as Expat Statement or Annual Pension is also present.');
3024     fnd_file.put_line (fnd_file.LOG,'Starter Declaration must not be present for assignment ' || l_assignment_number||' as Expat Statement or Annual Pension is also present.');
3025 		edi_validation_fail := 'Y';
3026 	END IF;
3027 END IF;
3028 
3029 -- One can be present among the following
3030 -- l_stay_over_six_months , l_stay_less_six_months , l_living_abroad
3031 
3032 IF l_stay_over_six_months = 'Y' AND (l_stay_less_six_months = 'Y' OR l_living_abroad = 'Y') THEN
3033 	  populate_run_msg(p_assactid, 'Stay in UK over six months for assignment ' || l_assignment_number||' is invalid.');
3034     fnd_file.put_line (fnd_file.LOG,'Stay in UK over six months for assignment ' || l_assignment_number||' is invalid.');
3035 		edi_validation_fail := 'Y';
3036 END IF;
3037 
3038 IF l_stay_less_six_months = 'Y' AND (l_stay_over_six_months = 'Y' OR l_living_abroad = 'Y') THEN
3039 	  populate_run_msg(p_assactid, 'Stay in UK less than six months for assignment ' || l_assignment_number||' is invalid.');
3040     fnd_file.put_line (fnd_file.LOG,'Stay in UK less than six months for assignment ' || l_assignment_number||' is invalid.');
3041 		edi_validation_fail := 'Y';
3042 END IF;
3043 
3044 IF l_living_abroad = 'Y' AND (l_stay_less_six_months = 'Y' OR l_stay_over_six_months = 'Y') THEN
3045 	  populate_run_msg(p_assactid, 'Working in/out of UK but living abroad for assignment ' || l_assignment_number||' is invalid.');
3046     fnd_file.put_line (fnd_file.LOG,'Working in/out of UK but living abroad for assignment ' || l_assignment_number||' is invalid.');
3047 		edi_validation_fail := 'Y';
3048 END IF;
3049 
3050 IF (l_living_abroad = 'Y' OR l_stay_less_six_months = 'Y' OR l_stay_over_six_months = 'Y') AND l_eea <> 'Y' THEN
3051 		populate_run_msg(p_assactid, 'EEA Citizen for assignment ' || l_assignment_number||' is invalid.');
3052     fnd_file.put_line (fnd_file.LOG,'EEA Citizen for assignment ' || l_assignment_number||' is invalid.');
3053 		edi_validation_fail := 'Y';
3054 END IF;
3055 
3056 IF l_occ_pension_indicator = 'Y' AND l_annual_occupational_pension IS NULL THEN
3057 		populate_run_msg(p_assactid, 'The Annual amount of Occupational Pension for assignment ' || l_assignment_number||' is missing,although Recently Bereaved Indicator is present.');
3058     fnd_file.put_line (fnd_file.LOG,'The Annual amount of Occupational Pension for assignment ' || l_assignment_number||' is missing,although Recently Bereaved Indicator is present.');
3059 		edi_validation_fail := 'Y';
3060 END IF;
3061 
3062 
3063 IF l_annual_occupational_pension IS NOT NULL THEN
3064    IF l_annual_occupational_pension < 0 THEN
3065     populate_run_msg(p_assactid, 'The Annual amount of Occupational Pension ' ||l_annual_occupational_pension|| ' for assignment ' || l_assignment_number||' must be greater than or equal to zero.');
3066     fnd_file.put_line (fnd_file.LOG,'The Annual amount of Occupational Pension ' ||l_annual_occupational_pension|| ' for assignment ' || l_assignment_number||' must be greater than or equal to zero.');
3067     edi_validation_fail := 'Y';
3068    ELSIF l_annual_occupational_pension > 999999999.99 THEN
3069     populate_run_msg(p_assactid, 'The Annual amount of Occupational Pension ' ||l_annual_occupational_pension|| ' exceeds 999999999.99 for assignment ' || l_assignment_number||'.');
3070     fnd_file.put_line (fnd_file.LOG,'The Annual amount of Occupational Pension ' ||l_annual_occupational_pension|| ' exceeds 999999999.99 for assignment ' || l_assignment_number||'.');
3071     edi_validation_fail := 'Y';
3072 	END IF;
3073 END IF;
3074 
3075 IF ((l_payroll_id <> ' ' and l_payroll_id IS NOT NULL)
3076    and validate_input(l_payroll_id,'PAYROLLID') > 0) THEN
3077     populate_run_msg(p_assactid,'Payroll ID '||l_payroll_id||' for the assignment ' || l_assignment_number || ' has invalid characters.');
3078     fnd_file.put_line (fnd_file.LOG,'Payroll ID '||l_payroll_id||' for the assignment ' || l_assignment_number || ' has invalid characters.');
3079     edi_validation_fail := 'Y';
3080 END IF;
3081 
3082 
3083 IF l_taxable_pay_to_date IS NOT NULL AND abs(l_taxable_pay_to_date) > 99999999999 THEN
3084 		populate_run_msg(p_assactid, 'Taxable Pay '||l_taxable_pay_to_date||' exceeds 999999999.99 for assignment ' || l_assignment_number|| '.');
3085     fnd_file.put_line (fnd_file.LOG,'Taxable Pay '||l_taxable_pay_to_date||' exceeds 999999999.99 for assignment ' || l_assignment_number|| '.');
3086     edi_validation_fail := 'Y';
3087 END IF;
3088 
3089 IF l_student_loan_repayment IS NOT NULL AND abs(l_student_loan_repayment) > 9999900 THEN
3090 	  populate_run_msg(p_assactid, 'The Total Student loan repayment recovered to date exceeds 99999.00 for assignment ' || l_assignment_number|| '.' );
3091     fnd_file.put_line (fnd_file.LOG,'The Total Student loan repayment recovered to date exceeds 99999.00 for assignment ' || l_assignment_number|| '.');
3092     edi_validation_fail := 'Y';
3093 END IF;
3094 
3095 IF l_tax_deducted_refunded IS NOT NULL AND abs(l_tax_deducted_refunded) > 999999999999 THEN
3096 		populate_run_msg(p_assactid, 'Tax Deducted or Refunded '||l_tax_deducted_refunded||' exceeds 9999999999.99 for assignment ' || l_assignment_number|| '.');
3097     fnd_file.put_line (fnd_file.LOG,'Tax Deducted or Refunded '||l_tax_deducted_refunded||' exceeds 9999999999.99 for assignment ' || l_assignment_number|| '.');
3098     edi_validation_fail := 'Y';
3099 END IF;
3100 
3101 --Statutory Sick Pay (SSP)-EYU
3102 IF l_ssp IS NOT NULL AND abs(l_ssp) > 999999 THEN
3103 		populate_run_msg(p_assactid, 'Statutory Sick Pay '||l_ssp||' exceeds 9999.99 for assignment ' || l_assignment_number|| '.');
3104     fnd_file.put_line (fnd_file.LOG,'Statutory Sick Pay '||l_ssp||' exceeds 9999.99 for assignment ' || l_assignment_number|| '.');
3105     edi_validation_fail := 'Y';
3106 END IF;
3107 
3108 --Statutory Maternity Pay (SMP)-EYU
3109 IF l_smp IS NOT NULL AND abs(l_smp) > 99999999 THEN
3110 		populate_run_msg(p_assactid, 'Statutory Maternity Pay '||l_smp||' exceeds 999999.99 for assignment ' || l_assignment_number|| '.');
3111     fnd_file.put_line (fnd_file.LOG,'Statutory Maternity Pay '||l_smp||' exceeds 999999.99 for assignment ' || l_assignment_number|| '.');
3112     edi_validation_fail := 'Y';
3113 END IF;
3114 
3115 
3116 IF l_smp > 0 AND l_gender <> 'F' THEN
3117 		populate_run_msg(p_assactid, 'Gender must be female for assignment ' || l_assignment_number|| ' to claim Statutory Maternity Pay.');
3118     fnd_file.put_line (fnd_file.LOG,'Gender must be female for assignment ' || l_assignment_number|| ' to claim Statutory Maternity Pay.');
3119     edi_validation_fail := 'Y';
3120 END IF;
3121 
3122 --Ordinary Statutory Paternity Pay (OSPP)-EYU
3123 IF l_ospp IS NOT NULL AND abs(l_ospp) > 99999999 THEN
3124 		populate_run_msg(p_assactid, 'Ordinary Statutory Paternity Pay '||l_ospp||' exceeds 999999.99 for assignment ' || l_assignment_number|| '.');
3125     fnd_file.put_line (fnd_file.LOG,'Ordinary Statutory Paternity Pay '||l_ospp||' exceeds 999999.99 for assignment ' || l_assignment_number|| '.');
3126     edi_validation_fail := 'Y';
3127 END IF;
3128 
3129 --Statutory Adoption Pay (SAP)-EYU
3130 IF l_sap IS NOT NULL AND abs(l_sap) > 99999999 THEN
3131 		populate_run_msg(p_assactid, 'Statutory Adoption Pay '||l_sap||' exceeds 999999.99 for assignment ' || l_assignment_number|| '.');
3132     fnd_file.put_line (fnd_file.LOG,'Statutory Adoption Pay '||l_sap||' exceeds 999999.99 for assignment ' || l_assignment_number|| '.');
3133     edi_validation_fail := 'Y';
3134 END IF;
3135 
3136 --Additional Statutory Paternity Pay (ASPP)-EYU
3137 IF l_aspp IS NOT NULL AND abs(l_aspp)  > 99999999 THEN
3138 		populate_run_msg(p_assactid, 'Additional Statutory Paternity Pay '||l_aspp||' exceeds 999999.99 for assignment ' || l_assignment_number|| '.');
3139     fnd_file.put_line (fnd_file.LOG,'Additional Statutory Paternity Pay '||l_aspp||' exceeds 999999.99 for assignment ' || l_assignment_number|| '.');
3140     edi_validation_fail := 'Y';
3141 END IF;
3142 
3143 
3144 -- Tax Code
3145 IF (l_tax_code = ' ' OR l_tax_code IS  NULL) then
3146     populate_run_msg(p_assactid, 'The Tax Code is missing for assignment ' || l_assignment_number || '.');
3147     fnd_file.put_line (fnd_file.LOG,'The Tax Code is missing for assignment ' || l_assignment_number || '.');
3148     edi_validation_fail := 'Y';
3149 END IF;
3150 
3151 
3152    OPEN get_effective_date;
3153        FETCH get_effective_date INTO l_eff_date;
3154    CLOSE get_effective_date;
3155 
3156 l_msg_value := pay_gb_eoy_magtape.validate_tax_code_yrfil(p_assactid,l_tax_code,l_eff_date); -- Tax code validation
3157 
3158 IF (l_tax_code <> ' ' and l_tax_code IS NOT NULL)
3159     AND (l_msg_value <> ' ') THEN
3160     populate_run_msg(p_assactid,'The Tax Code ' || l_tax_code || ' for assignment ' || l_assignment_number||' is invalid.');
3161     fnd_file.put_line (fnd_file.LOG,'The Tax Code ' || l_tax_code || ' for assignment ' || l_assignment_number||' is invalid.');
3162     edi_validation_fail := 'Y';
3163 END IF;
3164 
3165 
3166 hr_utility.set_location('Leaving '||l_proc,1);
3167 
3168 END assignment_validations;
3169 
3170 PROCEDURE ni_validations(        p_assactid       IN NUMBER,
3171                                  p_effective_date IN DATE,
3172 																 p_tab_rec_data   IN action_info_table,
3173 																 p_index          IN NUMBER,
3174 																 p_asg_no         IN VARCHAR2,
3175                                  edi_validation_fail out nocopy  varchar2) IS
3176 
3177 
3178 --Declarations
3179 l_proc  CONSTANT VARCHAR2(70):= g_package||'ni_validations';
3180 l_assignment_number 		per_assignments_f.assignment_number%TYPE;
3181 
3182 -- NI Fields
3183 l_ni_category   				varchar2(2);
3184 l_earnings_lel 					number;
3185 l_earnings_above_lel 		number;
3186 l_earnings_above_pt 		number;
3187 l_earnings_above_uap 		number;
3188 l_employer_contrib_y2d 	number;
3189 l_employee_contrib_y2d 	number;
3190 l_nic_refund 	          VARCHAR2(10);
3191 
3192 -- Employee Person Detail needed for validation
3193 l_gender 								varchar2(1);
3194 
3195 
3196 BEGIN
3197  hr_utility.set_location('Entering: '||l_proc,1);
3198 
3199 edi_validation_fail := 'N'; -- Initialized validation fail to N
3200 
3201 
3202 -- Assigning values to the local variables
3203 l_assignment_number           := p_asg_no; --p_tab_rec_data(2).act_info10;
3204 
3205 -- Assigning values to the local variables
3206 l_ni_category   				:= p_tab_rec_data(p_index).act_info1;
3207 l_earnings_lel 					:= p_tab_rec_data(p_index).act_info3;
3208 l_earnings_above_lel    := p_tab_rec_data(p_index).act_info4;
3209 l_earnings_above_pt     := p_tab_rec_data(p_index).act_info5;
3210 l_earnings_above_uap 		:= p_tab_rec_data(p_index).act_info6;
3211 l_employer_contrib_y2d 	:= p_tab_rec_data(p_index).act_info7;
3212 l_employee_contrib_y2d  := p_tab_rec_data(p_index).act_info8;
3213 l_nic_refund            := p_tab_rec_data(p_index).act_info11;
3214 
3215 -- Employee Person details
3216 l_gender 								:= p_tab_rec_data(0).act_info9;
3217 
3218 -- NI Validations
3219 IF l_ni_category IS NOT NULL THEN
3220 	IF (l_gender = 'M' AND l_ni_category NOT IN ('A','C','D','J','L','N','Q','R','W','X')) OR
3221 	(l_gender = 'F' AND l_ni_category NOT IN ('A','B','C','D','E','J','L','N','O','Q','R','T','W','X')) THEN
3222 
3223 	  populate_run_msg(p_assactid,'NI Category '||l_ni_category|| ' of the assignment ' || l_assignment_number||' is invalid.');
3224     fnd_file.put_line (fnd_file.LOG,'NI Category '||l_ni_category|| ' of the assignment ' || l_assignment_number||' is invalid.');
3225     edi_validation_fail := 'Y';
3226 
3227   END IF;
3228 END IF;
3229 
3230 IF l_ni_category IS NOT NULL THEN
3231 	IF l_earnings_lel IS NULL THEN
3232 	 		populate_run_msg(p_assactid,'Earnings at Lower Earnings Limit Year to Date for NI Category '||l_ni_category|| ' of the assignment ' || l_assignment_number||' is missing.');
3233     fnd_file.put_line (fnd_file.LOG,'Earnings at Lower Earnings Limit Year to Date for NI Category '||l_ni_category|| ' of the assignment ' || l_assignment_number||' is missing.');
3234     edi_validation_fail := 'Y';
3235   ELSIF l_ni_category = 'X' AND l_earnings_lel <> 0 THEN
3236     populate_run_msg(p_assactid,'Earnings at Lower Earnings Limit Year to Date for NI Category '||l_ni_category|| ' of the assignment ' || l_assignment_number||' must be zero.');
3237     fnd_file.put_line (fnd_file.LOG,'Earnings at Lower Earnings Limit Year to Date for NI Category '||l_ni_category|| ' of the assignment ' || l_assignment_number||' must be zero.');
3238     edi_validation_fail := 'Y';
3239   END IF;
3240 END IF;
3241 
3242 IF l_ni_category IS NOT NULL THEN
3243 	IF l_earnings_above_lel IS NULL THEN
3244  		populate_run_msg(p_assactid,'Earnings above LEL upto PT Year to Date for NI Category '||l_ni_category|| ' of the assignment ' || l_assignment_number||' is missing.');
3245     fnd_file.put_line (fnd_file.LOG,'Earnings above LEL upto PT Year to Date for NI Category '||l_ni_category|| ' of the assignment ' || l_assignment_number||' is missing.');
3246     edi_validation_fail := 'Y';
3247   ELSIF l_ni_category = 'X' AND l_earnings_above_lel <> 0 THEN
3248     populate_run_msg(p_assactid,'Earnings above LEL upto PT Year to Date for NI Category '||l_ni_category|| ' of the assignment ' || l_assignment_number||' must be zero.');
3249     fnd_file.put_line (fnd_file.LOG,'Earnings above LEL upto PT Year to Date for NI Category '||l_ni_category|| ' of the assignment ' || l_assignment_number||' must be zero.');
3250     edi_validation_fail := 'Y';
3251   END IF;
3252 END IF;
3253 
3254 IF l_ni_category IS NOT NULL THEN
3255 	IF l_earnings_above_pt IS NULL THEN
3256  		populate_run_msg(p_assactid,'Earnings above PT upto UAP Year to Date for NI Category '||l_ni_category|| ' of the assignment ' || l_assignment_number||' is missing.');
3257     fnd_file.put_line (fnd_file.LOG,'Earnings above PT upto UAP Year to Date for NI Category '||l_ni_category|| ' of the assignment ' || l_assignment_number||' is missing.');
3258     edi_validation_fail := 'Y';
3259   ELSIF l_ni_category = 'X' AND l_earnings_above_pt <> 0 THEN
3260     populate_run_msg(p_assactid,'Earnings above PT upto UAP Year to Date for NI Category '||l_ni_category|| ' of the assignment ' || l_assignment_number||' must be zero.');
3261     fnd_file.put_line (fnd_file.LOG,'Earnings above PT upto UAP Year to Date for NI Category '||l_ni_category|| ' of the assignment ' || l_assignment_number||' must be zero.');
3262     edi_validation_fail := 'Y';
3263   END IF;
3264 END IF;
3265 
3266 IF l_ni_category IS NOT NULL THEN
3267 	IF l_earnings_above_uap IS NULL THEN
3268  		populate_run_msg(p_assactid,'Earnings above UAP upto UEL Year to Date for NI Category '||l_ni_category|| ' of the assignment ' || l_assignment_number||' is missing.');
3269     fnd_file.put_line (fnd_file.LOG,'Earnings above UAP upto UEL Year to Date for NI Category '||l_ni_category|| ' of the assignment ' || l_assignment_number||' is missing.');
3270     edi_validation_fail := 'Y';
3271   ELSIF l_ni_category = 'X' AND l_earnings_above_uap <> 0 THEN
3272     populate_run_msg(p_assactid,'Earnings above UAP upto UEL Year to Date for NI Category '||l_ni_category|| ' of the assignment ' || l_assignment_number||' must be zero.');
3273     fnd_file.put_line (fnd_file.LOG,'Earnings above UAP upto UEL Year to Date for NI Category '||l_ni_category|| ' of the assignment ' || l_assignment_number||' must be zero.');
3274     edi_validation_fail := 'Y';
3275   END IF;
3276 END IF;
3277 
3278 
3279 IF l_employer_contrib_y2d IS NULL THEN
3280 		populate_run_msg(p_assactid, 'The Total of Employer contributions Year to Date is missing for NI Category '||l_ni_category|| ' of the assignment ' || l_assignment_number);
3281     fnd_file.put_line (fnd_file.LOG,'The Total of Employer contributions Year to Date is missing for NI Category '||l_ni_category|| ' of the assignment ' || l_assignment_number);
3282     edi_validation_fail := 'Y';
3283 ELSIF l_ni_category = 'X' AND l_employer_contrib_y2d <> 0 THEN
3284 		populate_run_msg(p_assactid, 'The Total of Employer contributions Year to Date for NI Category '||l_ni_category|| ' of the assignment ' || l_assignment_number||' must be zero.');
3285     fnd_file.put_line (fnd_file.LOG,'The Total of Employer contributions Year to Date for NI Category '||l_ni_category|| ' of the assignment ' || l_assignment_number||' must be zero.');
3286     edi_validation_fail := 'Y';
3287 END IF;
3288 
3289 IF l_employee_contrib_y2d IS NULL THEN
3290 		populate_run_msg(p_assactid, 'The Employee contributions Payable Year to Date is missing for NI Category '||l_ni_category|| ' of the assignment ' || l_assignment_number);
3291     fnd_file.put_line (fnd_file.LOG,'The Employee contributions Payable Year to Date is missing for NI Category '||l_ni_category|| ' of the assignment ' || l_assignment_number);
3292     edi_validation_fail := 'Y';
3293 ELSIF l_ni_category IN ('X','C','W') AND l_employee_contrib_y2d <> 0 THEN
3294 	  populate_run_msg(p_assactid, 'The Employee contributions Payable Year to Date for NI Category '||l_ni_category|| ' of the assignment ' || l_assignment_number||' must be zero.');
3295     fnd_file.put_line (fnd_file.LOG,'The Employee contributions Payable Year to Date for NI Category '||l_ni_category|| ' of the assignment ' || l_assignment_number||' must be zero.');
3296     edi_validation_fail := 'Y';
3297 END IF;
3298 
3299 IF l_nic_refund is not null and l_nic_refund not in ('Y','N') then
3300 		populate_run_msg(p_assactid,'NIC Refund '||l_nic_refund|| ' of the assignment ' || l_assignment_number||' is invalid.');
3301     fnd_file.put_line (fnd_file.LOG,'NIC Refund '||l_nic_refund|| ' of the assignment ' || l_assignment_number||' is invalid.');
3302     edi_validation_fail := 'Y';
3303 end if;
3304 
3305 -- For Employer - ECON field validation
3306 IF l_ni_category IN ('D','E','L','N','O') THEN
3307 	g_econ_ni_check := 'Y';
3308 END IF;
3309 
3310 END NI_VALIDATIONS;
3311 
3312 
3313 PROCEDURE footer_validations(econ IN VARCHAR2,flag OUT nocopy VARCHAR2)
3314 IS
3315 
3316 --Declarations
3317 l_proc  CONSTANT VARCHAR2(70):= g_package||'footer_validations';
3318 l_err                BOOLEAN := FALSE;
3319 
3320 BEGIN
3321  hr_utility.set_location('Entering: '||l_proc,1);
3322 
3323 -- ECON Validations
3324  IF g_econ_ni_check = 'Y' THEN
3325 	IF econ IS NULL THEN
3326     hr_utility.set_location('ECON is missing.',10);
3327 		fnd_file.put_line(fnd_file.output,'ECON is missing. Provide the ECON , rollback and rerun the process.');
3328 		l_err := true;
3329 	END IF;
3330   END IF;
3331 
3332  if (l_err) then
3333     flag := 'Y';
3334  else flag := 'N';
3335  end if;
3336 
3337  hr_utility.set_location('Leaving '|| l_proc, 10);
3338 END footer_validations;
3339 
3340 
3341 -- Function to validate the format of the fields
3342 function validate_input(p_input_value    varchar2,
3343                         p_validate_mode  varchar2)
3344         return number is
3345 --
3346 l_valid             number := 0;
3347 l_invalid_char      constant varchar2(1) := '~';  -- required for translate
3348 l_char_chk          constant varchar2(26) := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
3349 
3350 --
3351 l_emp_set       constant varchar2(36) := '-''.';
3352 l_space    			constant varchar2(10) := ' ';
3353 l_mix_chars         constant varchar2(52) := 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
3354 l_number_chk        constant varchar2(10) := '0123456789';
3355 l_char_set_A     constant varchar2(36) := '.,-()/=!""%&*;<>''+:?\[]@$#^{}_';
3356 l_char_set_B     constant varchar2(52) := '.,-()/=!""%&*;<>''+:?';
3357 l_char_set_C     constant varchar2(52) := '.-''';
3358 l_char_set_D     constant varchar2(52) := '-''';
3359 l_translated_value  varchar2(200);  -- Required to output failing char.
3360 --
3361 BEGIN
3362 --
3363   hr_utility.trace('Entering validate_input');
3364   hr_utility.trace('p_validate_mode='||p_validate_mode);
3365   hr_utility.trace('p_input_value='||p_input_value);
3366   --
3367 
3368 if p_validate_mode = 'EMP_NAME' then
3369      if ( substr(p_input_value,1,1) =' ') then
3370         hr_utility.trace('Invalid first char: '||substr(p_input_value,1,1));
3371         l_valid := 2;
3372      else
3373          l_translated_value :=
3374          translate(p_input_value,
3375                 l_invalid_char||l_mix_chars||l_number_chk||l_char_set_A||l_space,l_invalid_char);
3376 
3377          if l_translated_value is not null then
3378             hr_utility.trace('Invalid chars found: '||l_translated_value);
3379             l_valid := 1; -- Not valid
3380          else
3381             l_valid := 0; -- Valid
3382          end if;
3383       end if ;
3384 
3385 elsIF p_validate_mode = 'NUMBER' then
3386     --
3387     -- Check for Valid First Char
3388     --
3389        l_translated_value :=
3390            translate(p_input_value,
3391                 l_invalid_char||l_number_chk,l_invalid_char);
3392 
3393        if l_translated_value is not null then
3394           hr_utility.trace('Invalid chars found: '||l_translated_value);
3395           l_valid := 1; -- Not valid
3396        else
3397           l_valid := 0; -- Valid
3398        end if;
3399 
3400 elsIF p_validate_mode = 'FULL_EDI' then
3401     --
3402     -- Check for Valid First Char
3403     --
3404 			 if ( substr(p_input_value,1,1) =' ') then
3405         hr_utility.trace('Invalid first char: '||substr(p_input_value,1,1));
3406         l_valid := 2;
3407        else
3408 		       l_translated_value :=
3409 		           translate(p_input_value,
3410 		                l_invalid_char||l_char_chk||l_number_chk||l_char_set_B||l_space,l_invalid_char);
3411 
3412 		       if l_translated_value is not null then
3413 		          hr_utility.trace('Invalid chars found: '||l_translated_value);
3414 		          l_valid := 1; -- Not valid
3415 		       else
3416 		          l_valid := 0; -- Valid
3417 		       end if;
3418        end if;
3419 
3420 elsIF p_validate_mode = 'NAME' then
3421     --
3422     -- Check for Valid First Char
3423     --
3424     if not (substr(p_input_value,1,1)  between 'A' and 'Z'
3425             or substr(p_input_value,1,1)  between 'a' and 'z') then
3426         hr_utility.trace('Invalid first char: '||substr(p_input_value,1,1));
3427         l_valid := 2;
3428     else
3429        l_translated_value :=
3430            translate(p_input_value,
3431                 l_invalid_char||l_mix_chars||l_char_set_D||l_space,l_invalid_char);
3432 
3433        if l_translated_value is not null then
3434           hr_utility.trace('Invalid chars found: '||l_translated_value);
3435           l_valid := 1; -- Not valid
3436        else
3437           l_valid := 0; -- Valid
3438        end if;
3439     end if;
3440 
3441 elsIF p_validate_mode = 'TITLE' then
3442     --
3443     -- Check for Valid First Char
3444     --
3445     if not (substr(p_input_value,1,1)  between 'A' and 'Z'
3446             or substr(p_input_value,1,1)  between 'a' and 'z') then
3447         hr_utility.trace('Invalid first char: '||substr(p_input_value,1,1));
3448         l_valid := 2;
3449     else
3450        l_translated_value :=
3451            translate(p_input_value,
3452                 l_invalid_char||l_mix_chars||l_char_set_C||l_space,l_invalid_char);
3453 
3454        if l_translated_value is not null then
3455           hr_utility.trace('Invalid chars found: '||l_translated_value);
3456           l_valid := 1; -- Not valid
3457        else
3458           l_valid := 0; -- Valid
3459        end if;
3460     end if;
3461 
3462  ELSIF p_validate_mode = 'ADDRESS' THEN
3463     --
3464     -- Check for Valid First Char
3465     --
3466     if not (substr(p_input_value,1,1)  between 'A' and 'Z'
3467             or substr(p_input_value,1,1)  between 'a' and 'z' or substr(p_input_value,1,1)  between '0' and '9') then
3468         -- First char invalid
3469         hr_utility.trace('Invalid first char: '||substr(p_input_value,1,1));
3470         l_valid := 2;
3471     else
3472        l_translated_value :=
3473            translate(p_input_value,
3474                 l_invalid_char||l_mix_chars||l_number_chk||l_space||l_char_set_B,l_invalid_char);
3475 
3476        if l_translated_value is not null then
3477           hr_utility.trace('Invalid chars found: '||l_translated_value);
3478           l_valid := 1; --Invalid
3479        else
3480           l_valid := 0; -- Valid
3481        end if;
3482     end if;
3483 
3484 elsif p_validate_mode = 'COUNTRY' then
3485      if not (substr(p_input_value,1,1)  between 'A' and 'Z'  or
3486           substr(p_input_value,1,1)  between 'a' and 'z' ) then
3487         hr_utility.trace('Invalid first char: '||substr(p_input_value,1,1));
3488         l_valid := 2;
3489      else
3490          l_translated_value :=
3491          translate(p_input_value,
3492                 l_invalid_char||l_mix_chars||l_number_chk||l_space||l_char_set_B,l_invalid_char);
3493 
3494          if l_translated_value is not null then
3495             hr_utility.trace('Invalid chars found: '||l_translated_value);
3496             l_valid := 1; -- Not valid
3497          else
3498             l_valid := 0; -- Valid
3499          end if;
3500       end if ;
3501 
3502 -- character set E has alpha,numerals,space
3503 elsif p_validate_mode = 'POSTALCODE' then
3504 
3505     if not (substr(p_input_value,1,1)  between 'A' and 'Z'
3506             or substr(p_input_value,1,1)  between 'a' and 'z' or substr(p_input_value,1,1)  between '0' and '9') then
3507         -- First char invalid
3508         hr_utility.trace('Invalid first char: '||substr(p_input_value,1,1));
3509         l_valid := 2;
3510     else
3511     l_translated_value := translate(p_input_value,
3512                                     l_invalid_char||l_mix_chars||l_number_chk||l_space,l_invalid_char);
3513     --
3514 		    if l_translated_value is not null then
3515 		       hr_utility.trace('Invalid chars found: '||l_translated_value);
3516 		       l_valid := 1; -- Not valid
3517 		    else
3518 		      l_valid := 0; -- Valid
3519 		    end if;
3520 		end if;
3521 
3522 
3523 -- character set E has alpha,numerals,space
3524 elsif p_validate_mode = 'PASSPORT' then
3525     l_translated_value := translate(p_input_value,
3526                                     l_invalid_char||l_mix_chars||l_number_chk||l_space||l_char_set_B,l_invalid_char);
3527     --
3528 		    if l_translated_value is not null then
3529 		       hr_utility.trace('Invalid chars found: '||l_translated_value);
3530 		       l_valid := 1; -- Not valid
3531 		    else
3532 		      l_valid := 0; -- Valid
3533 		    end if;
3534 
3535 
3536  elsif p_validate_mode = 'PAYROLLID' then
3537      if ( substr(p_input_value,1,1) =' ') then
3538         hr_utility.trace('Invalid first char: '||substr(p_input_value,1,1));
3539         l_valid := 2;
3540      else
3541          l_translated_value :=
3542          translate(p_input_value,
3543                 l_invalid_char||l_mix_chars||l_number_chk||l_char_set_B||l_space,l_invalid_char);
3544 
3545          if l_translated_value is not null then
3546             hr_utility.trace('Invalid chars found: '||l_translated_value);
3547             l_valid := 1; -- Not valid
3548          else
3549             l_valid := 0; -- Valid
3550          end if;
3551       end if ;
3552 
3553 END IF;
3554     --
3555 hr_utility.trace('Leaving validate_input');
3556 return l_valid;
3557 end validate_input;
3558 
3559 -- Function for validating Date fields
3560     FUNCTION date_validate (c_assignment_action_id  NUMBER,
3561                             p_mode                  VARCHAR2,
3562                             p_validate_date         DATE)
3563     RETURN NUMBER
3564     IS
3565 
3566 
3567      cursor csr_parameter_info is
3568      select pay_gb_eoy_archive.get_parameter(legislative_parameters, 'TEST'),
3569             /*ppa.effective_date*/
3570             sysdate
3571      from   pay_payroll_actions ppa
3572            ,pay_assignment_actions paa
3573      where paa.assignment_action_id =  c_assignment_action_id
3574            and ppa.payroll_action_id = paa.payroll_action_id;
3575 
3576      l_date_valid        DATE;
3577      l_return_valid      NUMBER;
3578      l_test_submission   VARCHAR2(1);
3579      l_tax_date          DATE;
3580      l_tax_year          VARCHAR2(4);
3581      l_tax_year_start    DATE ;
3582   BEGIN
3583      l_return_valid := 1; -- Initializing to one
3584      open csr_parameter_info;
3585      fetch csr_parameter_info into l_test_submission,l_tax_date;
3586      close csr_parameter_info;
3587 
3588      hr_utility.trace('date as parameter : '||p_validate_date);
3589 
3590      l_tax_year := to_char(l_tax_date,'RRRR');
3591      if (l_tax_date > to_date(l_tax_year||'0405','RRRRMMDD')) THEN
3592        l_tax_date := ADD_MONTHS(to_date(l_tax_year||'0405','RRRRMMDD'),12) ; /*tax year end date*/
3593      else
3594        l_tax_date := to_date(l_tax_year||'0405','RRRRMMDD');     /*tax year end date*/
3595      end if;
3596 
3597      l_tax_date := fnd_date.canonical_to_date(to_char(l_tax_date,'RRRRMMDD'));
3598 
3599      l_tax_year_start := add_months(l_tax_date,-12)+1 ;
3600 
3601      l_date_valid := p_validate_date;
3602 
3603     -- Start Date Validation
3604       if (p_mode = 'UK_EMPL_DATE') then
3605            if (l_test_submission = 'N') then -- Live Files
3606              if (l_date_valid > (sysdate+30)) then -- No later than current date + 30 days
3607                l_return_valid := 0;
3608              end if;
3609            else                               -- Test Files
3610              if (l_date_valid > add_months(l_tax_date,12)) then -- Current Tax year +1
3611                l_return_valid := 0;
3612              end if;
3613            end if;
3614 		-- End Date Validation
3615 			elsif (p_mode = 'UK_EMPL_DATE_LEAVING') then
3616            if (l_test_submission = 'N') then   --Live Files
3617              if (l_date_valid > (sysdate+30)) then -- No later than current date + 30 days
3618                l_return_valid := 0;
3619 						 elsif(l_date_valid < (add_months(l_tax_date,-24)+1)) then -- Start of previous tax year
3620 							  l_return_valid := 0;
3621              end if;
3622            else                                 -- Test Files
3623              if (l_date_valid > add_months(l_tax_date,12)) then  -- Current Tax year +1
3624                l_return_valid := 0;
3625              end if;
3626            end if;
3627 
3628       end if;
3629 
3630    RETURN l_return_valid;
3631  END date_validate;
3632 
3633 -- Returns 1 on success, 0 on failure
3634 function econ_validate(econ varchar2)
3635 return number
3636 is
3637 l_fixed_value number := 37;
3638 l_temp number := 0;
3639 l_sum number := 0 ;
3640 l_reminder number;
3641 l_check_letters varchar2(19) := 'ABCDEFHJKLMNPQRTWXY';
3642 
3643 begin
3644 hr_utility.trace('Entering ECON Validate');
3645 
3646 -- Format Check ENNNNNNNA
3647 IF regexp_instr(econ,'^E[[:digit:]]{7}[[:alpha:]]$') = 0 THEN
3648 	hr_utility.set_location('ECON Validation Fails',10);
3649 	return 0;-- Validation fails
3650 END IF;
3651 
3652 -- First Char must be E
3653 IF substr(econ,1,1) <> 'E' THEN
3654 	hr_utility.set_location('ECON Validation Fails',10);
3655 	return 0;-- Validation fails
3656 
3657 -- Next 7 should be numeric ranging 3000000 up to 3999999
3658 ELSIF substr(econ,2,7) < 3000000 OR substr(econ,2,7) > 3999999 THEN
3659 	hr_utility.set_location('ECON Validation Fails',20);
3660 	return 0;-- Validation fails
3661 END IF;
3662 
3663 -- Last char must be alpha satifying modulas 19 rule
3664 for i in reverse 2..8 loop
3665 	l_temp := substr(econ,(10-i),1) * i;
3666 	l_sum := l_sum + l_temp;
3667 end loop;
3668 
3669 l_sum := l_sum + l_fixed_value;
3670 l_reminder := mod(l_sum,19);
3671 
3672 IF substr(l_check_letters,l_reminder+1,1) <> substr(econ,9,1) THEN
3673 	hr_utility.set_location('ECON Validation Fails',30);
3674 	return 0; -- Validation Fails
3675 END IF;
3676 
3677 return 1; -- Validation passes
3678 hr_utility.trace('Leaving ECON Validate');
3679 END econ_validate;
3680 
3681 FUNCTION get_version(
3682     p_assig_id IN NUMBER,
3683     p_type     IN VARCHAR2,
3684     p_aei_id OUT nocopy NUMBER)
3685   RETURN NUMBER
3686 IS
3687   l_proc CONSTANT VARCHAR2(50):= 'get_version';
3688   l_ovn  NUMBER;
3689   CURSOR csr_ovn
3690   IS
3691     SELECT object_version_number,
3692       assignment_extra_info_id
3693     FROM per_assignment_extra_info
3694     WHERE assignment_id  = p_assig_id
3695     AND information_type = p_type;
3696 BEGIN
3697   hr_utility.set_location('Entering: '||l_proc,1);
3698   OPEN csr_ovn;
3699   FETCH csr_ovn INTO l_ovn, p_aei_id;
3700   CLOSE csr_ovn;
3701   RETURN l_ovn;
3702   hr_utility.set_location('Leaving: '||l_proc,999);
3703 END;
3704 
3705 -- Procedure to insert data to the archive table pay_action_information
3706 PROCEDURE insert_archive_row
3707   (
3708     p_assactid       IN NUMBER,
3709     p_effective_date IN DATE,
3710     p_tab_rec_data   IN action_info_table
3711   )
3712 IS
3713   l_proc      CONSTANT VARCHAR2(50):= g_package||'insert_archive_row';
3714   l_ovn       NUMBER;
3715   l_action_id NUMBER;
3716 BEGIN
3717   hr_utility.set_location('Entering: '||l_proc,1);
3718 
3719   IF p_tab_rec_data.count > 0 THEN
3720     FOR i                IN p_tab_rec_data.first .. p_tab_rec_data.last
3721     LOOP
3722       hr_utility.trace
3723       (
3724         'Defining category '|| p_tab_rec_data(i).action_info_category
3725       )
3726       ;
3727       hr_utility.trace('action_context_id = '|| p_assactid);
3728       IF p_tab_rec_data(i).action_info_category IS NOT NULL THEN
3729         pay_action_information_api.create_action_information( p_action_information_id => l_action_id,
3730                                                               p_object_version_number => l_ovn,
3731                                                               p_action_information_category => p_tab_rec_data(i).action_info_category,
3732                                                               p_action_context_id => p_assactid,
3733                                                               p_action_context_type => 'AAP',
3734                                                               p_assignment_id => p_tab_rec_data(i).assignment_id,
3735                                                               p_effective_date => p_effective_date,
3736                                                               p_action_information1 => p_tab_rec_data(i).act_info1,
3737                                                               p_action_information2 => p_tab_rec_data(i).act_info2,
3738                                                               p_action_information3 => p_tab_rec_data(i).act_info3,
3739                                                               p_action_information4 => p_tab_rec_data(i).act_info4,
3740                                                               p_action_information5 => p_tab_rec_data(i).act_info5,
3741                                                               p_action_information6 => p_tab_rec_data(i).act_info6,
3742                                                               p_action_information7 => p_tab_rec_data(i).act_info7,
3743                                                               p_action_information8 => p_tab_rec_data(i).act_info8,
3744                                                               p_action_information9 => p_tab_rec_data(i).act_info9,
3745                                                               p_action_information10 => p_tab_rec_data(i).act_info10,
3746                                                               p_action_information11 => p_tab_rec_data(i).act_info11,
3747                                                               p_action_information12 => p_tab_rec_data(i).act_info12,
3748                                                               p_action_information13 => p_tab_rec_data(i).act_info13,
3749                                                               p_action_information14 => p_tab_rec_data(i).act_info14,
3750                                                               p_action_information15 => p_tab_rec_data(i).act_info15,
3751                                                               p_action_information16 => p_tab_rec_data(i).act_info16,
3752                                                               p_action_information17 => p_tab_rec_data(i).act_info17,
3753                                                               p_action_information18 => p_tab_rec_data(i).act_info18,
3754                                                               p_action_information19 => p_tab_rec_data(i).act_info19,
3755                                                               p_action_information20 => p_tab_rec_data(i).act_info20,
3756                                                               p_action_information21 => p_tab_rec_data(i).act_info21,
3757                                                               p_action_information22 => p_tab_rec_data(i).act_info22,
3758                                                               p_action_information23 => p_tab_rec_data(i).act_info23,
3759                                                               p_action_information24 => p_tab_rec_data(i).act_info24,
3760                                                               p_action_information25 => p_tab_rec_data(i).act_info25,
3761                                                               p_action_information26 => p_tab_rec_data(i).act_info26,
3762                                                               p_action_information27 => p_tab_rec_data(i).act_info27,
3763                                                               p_action_information28 => p_tab_rec_data(i).act_info28,
3764                                                               p_action_information29 => p_tab_rec_data(i).act_info29,
3765                                                               p_action_information30 => p_tab_rec_data(i).act_info30 );
3766       END IF;
3767     END LOOP;
3768   END IF;
3769   hr_utility.set_location('Leaving: '||l_proc,999);
3770 END insert_archive_row;
3771 
3772 
3773 --
3774 --
3775 /*------------ PUBLIC PROCEDURES --------------*/
3776 /*--------------------------------------------------------------------------
3777 Name      : range_cursor
3778 Purpose   : This returns the select statement that is used to create the
3779 range rows.
3780 Arguments :
3781 Notes     : The range cursor determines which people should be processed.
3782 The normal practice is to include everyone, and then limit
3783 the list during the assignment action creation.
3784 --------------------------------------------------------------------------*/
3785 PROCEDURE range_cursor
3786   (
3787     pactid IN NUMBER,
3788     sqlstr OUT NOCOPY VARCHAR2
3789   )
3790 IS
3791 
3792   l_proc        CONSTANT VARCHAR2(35):= g_package||'range_cursor';
3793 
3794 BEGIN
3795   hr_utility.set_location('Entering: '||l_proc,1);
3796 
3797   sqlstr := 'select distinct PERSON_ID '|| 'from per_all_people_f ppf, '
3798           || 'pay_payroll_actions ppa '|| 'where ppa.payroll_action_id = :payroll_action_id '
3799 	        || 'and ppa.business_group_id = ppf.business_group_id '
3800 	        || ' order by person_id';
3801 
3802   hr_utility.trace(' Range Cursor Statement : '||sqlstr);
3803   -- Header validations
3804   header_validations(pactid);
3805 
3806   hr_utility.set_location(' Leaving: '||l_proc,100);
3807 
3808 EXCEPTION
3809 WHEN OTHERS THEN
3810   hr_utility.raise_error;
3811 END range_cursor;
3812 --
3813 --
3814 PROCEDURE internal_action_creation_eyu(
3815     pactid      IN NUMBER,
3816     stperson    IN NUMBER,
3817     endperson   IN NUMBER,
3818     chunk       IN NUMBER,
3819     p_info_type IN VARCHAR2,
3820     p_rep_type  IN VARCHAR2)
3821 IS
3822   l_proc              CONSTANT VARCHAR2(90):= g_package||'internal_action_creation_eyu';
3823 
3824   l_tax_ref           VARCHAR2(20);
3825   l_business_group_id NUMBER;
3826   l_effective_date DATE;
3827 	l_rti_payroll_id per_assignments_f.assignment_number%TYPE;
3828 	l_flag varchar2(1) := 'Y';
3829 	l_fps_run_date date;
3830 	l_last_asg_action_id number;
3831 	l_last_effective_date date;
3832 	l_last_asg_action_id1 number;
3833 	l_last_effective_date1 date;
3834 	lockingactid number;
3835 	l_asg_num varchar2(50);
3836 	l_latest_asg number;
3837 	l_pact_id number;
3838 
3839 CURSOR csr_parameter_info
3840   IS
3841     SELECT
3842       SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'TAX_REF'),1,20) tax_ref,
3843       effective_date,
3844       business_group_id
3845     FROM pay_payroll_actions pact
3846     WHERE payroll_action_id = pactid;
3847 
3848 CURSOR csr_asg is
3849      select distinct asg.assignment_id assignment_id,trim(pap.per_information10) per_agg_flag,trim(pap.per_information9) per_ni_flag,
3850 						pap.person_id person_id , asg.assignment_number l_asg_num
3851      from   per_all_people_f pap,
3852             per_all_assignments_f asg,
3853 						per_assignment_status_types past,
3854             pay_all_payrolls_f pay,
3855             hr_soft_coding_keyflex sck
3856      where  pap.person_id between stperson and endperson
3857      and    pap.person_id = asg.person_id
3858      and    asg.business_group_id +0 = l_business_group_id
3859 		 and    asg.assignment_status_type_id = past.assignment_status_type_id
3860                     and past.per_system_status in ('ACTIVE_ASSIGN', 'SUSP_ASSIGN','TERM_ASSIGN')
3861      and    asg.payroll_id = pay.payroll_id
3862      and    pay.soft_coding_keyflex_id = sck.soft_coding_keyflex_id
3863      and    upper(l_tax_ref) = upper(sck.segment1)
3864      and    asg.effective_start_date =
3865        ( select max(asg2.effective_start_date)
3866          from   per_all_assignments_f asg2
3867          where  asg2.assignment_id         = asg.assignment_id
3868          and    asg2.assignment_type       = 'E'
3869          and    asg2.effective_start_date <= g_end_year
3870        )
3871      and    l_effective_date between pap.effective_start_date and pap.effective_end_date
3872      and    l_effective_date between pay.effective_start_date and pay.effective_end_date
3873 order by person_id,assignment_id;
3874 
3875 --Cursor to fetch RTI Payroll ID for the assignment
3876   CURSOR csr_rti_payroll_id(asg_id  NUMBER)
3877   IS
3878   SELECT aei_information3 rti_payroll_id
3879   FROM   per_assignment_extra_info
3880   WHERE  assignment_id            = asg_id
3881   AND    aei_information_category = 'GB_RTI_AGGREGATION';
3882 
3883 --Cursor to fetch Latest FPS Run date for the assignment
3884 cursor csr_latest_fps_date(asg_id number) is select ppa.effective_date,ppa.payroll_action_id
3885 from pay_assignment_actions paa,
3886 pay_payroll_actions ppa
3887 where paa.assignment_id = asg_id
3888 and paa.action_status ='C'
3889 and ppa.action_type ='X'
3890 and ppa.payroll_action_id = paa.payroll_action_id
3891 and ppa.report_type in( 'RTI_FPS_REP' , 'RTI_EYU_REP_13')
3892 and ppa.effective_date >= g_start_year
3893 and UPPER(l_tax_ref) = UPPER(SUBSTR(pay_gb_eoy_archive.get_parameter(ppa.legislative_parameters,'TAX_REF'),1,20))
3894 order by ppa.effective_date desc;
3895 
3896 CURSOR csr_latest_asg_action1(asg_id number,p_pact_id number) is
3897 select paa.ASSIGNMENT_ACTION_ID , ppa.EFFECTIVE_DATE  from pay_payroll_actions ppa,pay_assignment_actions paa
3898 where ASSIGNMENT_ID = asg_id
3899 and ppa.ACTION_TYPE in ('Q','R','B','I','V','P','U')
3900 AND paa.action_status IN ('C', 'S')
3901 and ppa.PAYROLL_ACTION_ID = paa.PAYROLL_ACTION_ID
3902 and ppa.PAYROLL_ACTION_ID > p_pact_id
3903 and ppa.EFFECTIVE_DATE <= g_end_year
3904 order by ppa.effective_date desc;
3905 
3906 --Cursor to fetch Latest assignment action after fps run before end of tax year
3907 CURSOR csr_latest_asg_action(asg_id number,l_latest_fps_run_date date) is
3908 SELECT
3909         to_number (substr (max (lpad (paa.action_sequence, 15
3910                                     , '0')
3911                                 || paa.assignment_action_id), 16))
3912       , max (pact.effective_date) effective_date
3913 FROM    pay_assignment_actions paa
3914       , pay_payroll_actions pact
3915       , per_time_periods ptp
3916 WHERE   paa.assignment_id = asg_id
3917 AND     paa.payroll_action_id = pact.payroll_action_id
3918 AND     pact.time_period_id = ptp.time_period_id
3919 AND     pact.action_type IN ('Q', 'R', 'B'
3920                            , 'I', 'V')
3921 AND     paa.action_status IN ('C', 'S')
3922 AND     ptp.regular_payment_date
3923         BETWEEN l_latest_fps_run_date
3924         AND     g_end_year;
3925 
3926 cursor csr_action_type (l_asg_act_id number) is
3927     SELECT
3928       pact.action_type
3929     FROM pay_payroll_actions pact, pay_assignment_actions paa
3930 		WHERE paa.ASSIGNMENT_ACTION_ID = l_asg_act_id
3931 		and paa.payroll_action_id = pact.payroll_action_id;
3932 
3933 cursor csr_all_actions_after_fps (asg_id number, p_pact_id number) is
3934 select paa.ASSIGNMENT_ACTION_ID asg_act_id from pay_payroll_actions ppa,pay_assignment_actions paa,
3935 				per_all_assignments_f paaf,
3936 				pay_all_payrolls_f pay,
3937         hr_soft_coding_keyflex sck
3938 where   paa.ASSIGNMENT_ID  = asg_id
3939 AND     paaf.assignment_id = asg_id
3940 AND     pay.payroll_id = paaf.payroll_id
3941 and    pay.soft_coding_keyflex_id = sck.soft_coding_keyflex_id
3942 and    upper(l_tax_ref) = upper(sck.segment1)
3943 and    paaf.effective_start_date =
3944  ( select max(asg2.effective_start_date)
3945    from   per_all_assignments_f asg2
3946    where  asg2.assignment_id         = paaf.assignment_id
3947    and    asg2.assignment_type       = 'E'
3948    and    asg2.effective_start_date <= g_end_year
3949  )
3950 and    l_effective_date between pay.effective_start_date and pay.effective_end_date
3951 and ppa.ACTION_TYPE in ('Q','R','B','I','V','P','U')
3952 AND paa.action_status IN ('C', 'S')
3953 and ppa.PAYROLL_ACTION_ID = paa.PAYROLL_ACTION_ID
3954 and ppa.PAYROLL_ACTION_ID > p_pact_id
3955 and ppa.EFFECTIVE_DATE <= g_end_year;
3956 
3957 
3958 cursor csr_all_actions_tax_year (asg_id number)is
3959 select  paa.assignment_action_id asg_act_id
3960 FROM    pay_assignment_actions paa
3961       , pay_payroll_actions pact
3962       , per_time_periods ptp,
3963 				per_all_assignments_f paaf,
3964 				pay_all_payrolls_f pay,
3965         hr_soft_coding_keyflex sck
3966 
3967 WHERE   paa.assignment_id = asg_id
3968 AND     paaf.assignment_id = asg_id
3969 AND     pay.payroll_id = paaf.payroll_id
3970 and    pay.soft_coding_keyflex_id = sck.soft_coding_keyflex_id
3971 and    upper(l_tax_ref) = upper(sck.segment1)
3972 and    paaf.effective_start_date =
3973  ( select max(asg2.effective_start_date)
3974    from   per_all_assignments_f asg2
3975    where  asg2.assignment_id         = paaf.assignment_id
3976    and    asg2.assignment_type       = 'E'
3977    and    asg2.effective_start_date <= g_end_year
3978  )
3979 and    l_effective_date between pay.effective_start_date and pay.effective_end_date
3980 AND     paa.payroll_action_id = pact.payroll_action_id
3981 AND     pact.time_period_id = ptp.time_period_id
3982 AND     pact.action_type IN ('Q', 'R', 'B'
3983                            , 'I', 'V')
3984 AND     paa.action_status IN ('C', 'S')
3985 AND     ptp.regular_payment_date
3986         BETWEEN g_start_year
3987         AND     g_end_year;
3988 
3989 
3990 cursor csr_all_actions_after_fps_agg (per_id number, p_pact_id number) is
3991 select paa.ASSIGNMENT_ACTION_ID asg_act_id from per_all_assignments_f paaf, pay_payroll_actions ppa,pay_assignment_actions paa,
3992 				pay_all_payrolls_f pay,
3993         hr_soft_coding_keyflex sck
3994 where  paaf.person_ID = per_id
3995 and    paa.assignment_id = paaf.assignment_id
3996 AND    pay.payroll_id = paaf.payroll_id
3997 and    pay.soft_coding_keyflex_id = sck.soft_coding_keyflex_id
3998 and    upper(l_tax_ref) = upper(sck.segment1)
3999 and    l_effective_date between pay.effective_start_date and pay.effective_end_date
4000 
4001 and ppa.ACTION_TYPE in ('Q','R','B','I','V','P','U')
4002 AND paa.action_status IN ('C', 'S')
4003 and ppa.PAYROLL_ACTION_ID = paa.PAYROLL_ACTION_ID
4004 and ppa.PAYROLL_ACTION_ID > p_pact_id
4005 AND paaf.effective_start_date =
4006        ( select max(asg2.effective_start_date)
4007          from   per_all_assignments_f asg2
4008          where  asg2.assignment_id         = paaf.assignment_id
4009          and    asg2.assignment_type       = 'E'
4010          and    asg2.effective_start_date <= g_end_year
4011        )
4012 and ppa.EFFECTIVE_DATE <= g_end_year;
4013 
4014 cursor csr_all_actions_tax_year_agg (per_id number)is
4015 select paa.ASSIGNMENT_ACTION_ID asg_act_id
4016 FROM   per_all_assignments_f paaf,
4017        pay_assignment_actions paa
4018       , pay_payroll_actions pact
4019       , per_time_periods ptp,
4020 				pay_all_payrolls_f pay,
4021         hr_soft_coding_keyflex sck
4022 WHERE   paa.assignment_id = paaf.assignment_id
4023 and     paaf.person_id = per_id
4024 AND     pay.payroll_id = paaf.payroll_id
4025 and     pay.soft_coding_keyflex_id = sck.soft_coding_keyflex_id
4026 and     upper(l_tax_ref) = upper(sck.segment1)
4027 and     l_effective_date between pay.effective_start_date and pay.effective_end_date
4028 AND     paa.payroll_action_id = pact.payroll_action_id
4029 AND     pact.time_period_id = ptp.time_period_id
4030 AND     pact.action_type IN ('Q', 'R', 'B'
4031                            , 'I', 'V')
4032 AND     paa.action_status IN ('C', 'S')
4033 AND     ptp.regular_payment_date
4034         BETWEEN g_start_year
4035         AND     g_end_year
4036 AND paaf.effective_start_date =
4037        ( select max(asg2.effective_start_date)
4038          from   per_all_assignments_f asg2
4039          where  asg2.assignment_id         = paaf.assignment_id
4040          and    asg2.assignment_type       = 'E'
4041          and    asg2.effective_start_date <= g_end_year
4042        );
4043 
4044 
4045 -- To get maximum assignment action id for the person
4046 cursor csr_get_max_asg_actid_person(per_id number) is
4047 SELECT  /*+ USE_NL(paa, pact, ptp) */
4048         to_number (substr (max (lpad (paa.action_sequence, 15
4049                                     , '0')
4050                                 || paa.assignment_action_id), 16))
4051       , max (pact.effective_date) effective_date
4052 
4053 FROM   per_all_assignments_f paaf,
4054        pay_assignment_actions paa
4055       , pay_payroll_actions pact
4056       , per_time_periods ptp,
4057 				pay_all_payrolls_f pay,
4058         hr_soft_coding_keyflex sck
4059 WHERE   paa.assignment_id = paaf.assignment_id
4060 and     paaf.person_id = per_id
4061 AND     pay.payroll_id = paaf.payroll_id
4062 and     pay.soft_coding_keyflex_id = sck.soft_coding_keyflex_id
4063 and     upper(l_tax_ref) = upper(sck.segment1)
4064 and     l_effective_date between pay.effective_start_date and pay.effective_end_date
4065 AND     paa.payroll_action_id = pact.payroll_action_id
4066 AND     pact.time_period_id = ptp.time_period_id
4067 AND     pact.action_type IN ('Q', 'R', 'B'
4068                            , 'I', 'V')
4069 AND     paa.action_status IN ('C', 'S')
4070 AND     ptp.regular_payment_date
4071         BETWEEN g_start_year
4072         AND     g_end_year
4073 AND paaf.effective_start_date =
4074        ( select max(asg2.effective_start_date)
4075          from   per_all_assignments_f asg2
4076          where  asg2.assignment_id         = paaf.assignment_id
4077          and    asg2.assignment_type       = 'E'
4078          and    asg2.effective_start_date <= g_end_year
4079        );
4080 
4081 -- To get maximum assignment action id for the person (NI aggr)
4082 
4083 cursor csr_get_max_asg_actid_person_n(per_id number,asg_id number) is
4084 SELECT  /*+ USE_NL(paa, pact, ptp) */
4085         to_number (substr (max (lpad (paa.action_sequence, 15
4086                                     , '0')
4087                                 || paa.assignment_action_id), 16))
4088       , max (pact.effective_date) effective_date
4089 
4090 FROM   per_all_assignments_f paaf,
4091        pay_assignment_actions paa
4092       , pay_payroll_actions pact
4093       , per_time_periods ptp,
4094 				pay_all_payrolls_f pay,
4095         hr_soft_coding_keyflex sck
4096 WHERE   paa.assignment_id = paaf.assignment_id
4097 and     paaf.person_id = per_id
4098 and     paaf.assignment_id <> asg_id
4099 AND     pay.payroll_id = paaf.payroll_id
4100 and    pay.soft_coding_keyflex_id = sck.soft_coding_keyflex_id
4101 and    upper(l_tax_ref) = upper(sck.segment1)
4102 and    l_effective_date between pay.effective_start_date and pay.effective_end_date
4103 AND     paa.payroll_action_id = pact.payroll_action_id
4104 AND     pact.time_period_id = ptp.time_period_id
4105 AND     pact.action_type IN ('Q', 'R', 'B'
4106                            , 'I', 'V')
4107 AND     paa.action_status IN ('C', 'S')
4108 AND     ptp.regular_payment_date
4109         BETWEEN g_start_year
4110         AND     g_end_year
4111 AND paaf.effective_start_date =
4112        ( select max(asg2.effective_start_date)
4113          from   per_all_assignments_f asg2
4114          where  asg2.assignment_id         = paaf.assignment_id
4115          and    asg2.assignment_type       = 'E'
4116          and    asg2.effective_start_date <= g_end_year
4117        );
4118 
4119 cursor csr_latest_asg(p_asg_act_id number) is
4120 select assignment_id from pay_assignment_actions where assignment_action_id = p_asg_act_id;
4121 
4122 	-- Curosr to fetch the RTI Reporting flag and effective date of the assignment
4123    cursor csr_ni_rpt_flag(c_asg_id number) is
4124    select AEI_INFORMATION1, AEI_INFORMATION2 from per_assignment_extra_info where assignment_id = c_asg_id
4125    and AEI_INFORMATION_CATEGORY = 'GB_RTI_AGGREGATION';
4126 
4127    -- Cursor to fetch the RTI NI Reporting assignment for this person.
4128    cursor csr_get_ni_rpt_asg(c_asg_id number) is
4129    select
4130    distinct paei.assignment_id , fnd_date.canonical_to_date(paei.AEI_INFORMATION2)
4131    from per_all_assignments_f paaf1, per_all_assignments_f paaf2 ,per_assignment_extra_info paei,
4132 				pay_all_payrolls_f pay,
4133         hr_soft_coding_keyflex sck
4134    where paaf1.assignment_id = c_asg_id
4135    and paaf1.person_id = paaf2.person_id
4136    and paaf2.assignment_type= 'E'
4137    and paei.assignment_id = paaf2.assignment_id
4138    and paei.AEI_INFORMATION_CATEGORY = 'GB_RTI_AGGREGATION'
4139    and paei. AEI_INFORMATION1 = 'Y'
4140 		AND     pay.payroll_id = paaf2.payroll_id
4141 		and    pay.soft_coding_keyflex_id = sck.soft_coding_keyflex_id
4142 		and    upper(l_tax_ref) = upper(sck.segment1)
4143     and    l_effective_date between pay.effective_start_date and pay.effective_end_date
4144 	 AND paaf1.effective_start_date =
4145 		       ( select max(asg2.effective_start_date)
4146 		         from   per_all_assignments_f asg2
4147 		         where  asg2.assignment_id         = paaf1.assignment_id
4148 		         and    asg2.assignment_type       = 'E'
4149 		         and    asg2.effective_start_date <= g_end_year
4150 		       )
4151 	 AND paaf2.effective_start_date =
4152 		       ( select max(asg2.effective_start_date)
4153 		         from   per_all_assignments_f asg2
4154 		         where  asg2.assignment_id         = paaf2.assignment_id
4155 		         and    asg2.assignment_type       = 'E'
4156 		         and    asg2.effective_start_date <= g_end_year
4157 		       )
4158    order by 2 desc;
4159 
4160   l_ni_rpt_asg_id     NUMBER;
4161   l_ni_rpt_date   DATE;
4162 	l_ni_max_asg number;
4163   l_action_created VARCHAR2(1) := 'N';
4164   l_latest_action_type VARCHAR2(5);
4165   l_tax_year varchar2(4) := '2013';
4166 
4167 BEGIN
4168   hr_utility.set_location('Entering: '||l_proc,1);
4169 
4170 --Fetching Request Details
4171   OPEN csr_parameter_info;
4172   FETCH csr_parameter_info
4173   INTO
4174        l_tax_ref,
4175        l_effective_date,
4176        l_business_group_id  ;
4177   CLOSE csr_parameter_info;
4178 
4179   l_effective_date := to_date('05-04-'||l_tax_year,'DD-MM-YYYY');
4180 
4181 --Fetching Start and End of Tax Year
4182   IF l_effective_date >= to_date('06-04-'||SUBSTR(TO_CHAR(l_effective_date,'YYYY/MON/DD'),1,4),'DD-MM-YYYY' ) THEN
4183     g_start_year      := to_date('06-04-'||SUBSTR(TO_CHAR(l_effective_date,'YYYY/MON/DD'),1,4),'DD-MM-YYYY' ) ;
4184     g_end_year        := to_date('05-04-'||TO_CHAR(to_number(SUBSTR(TO_CHAR(l_effective_date,'YYYY/MON/DD'),1,4))+1 ),'DD-MM-YYYY') ;
4185   ELSE
4186     g_start_year := to_date('06-04-'||TO_CHAR(to_number(SUBSTR(TO_CHAR(l_effective_date,'YYYY/MON/DD'),1,4))-1 ),'DD-MM-YYYY') ;
4187     g_end_year   := to_date('05-04-'||SUBSTR(TO_CHAR(l_effective_date,'YYYY/MON/DD'),1,4),'DD-MM-YYYY') ;
4188   END IF;
4189 
4190   hr_utility.set_location('pactid           : '||pactid,20);
4191   hr_utility.set_location('stperson         : '||stperson,20);
4192   hr_utility.set_location('endperson        : '||endperson,20);
4193   hr_utility.set_location('l_tax_ref        : '||l_tax_ref,20);
4194   hr_utility.set_location('l_effective_date : '||l_effective_date,20);
4195   hr_utility.set_location('l_bg_id          : '||l_business_group_id,20);
4196 
4197 for asg_rec in csr_asg
4198 loop
4199 		l_flag := 'Y';
4200     l_action_created := 'N';
4201 
4202 	  hr_utility.set_location('Assignment ID    : '||asg_rec.assignment_id,20);
4203 	  hr_utility.set_location('Person ID        : '||asg_rec.person_id,20);
4204 	  hr_utility.set_location('PAYE Aggregation : '||asg_rec.per_agg_flag,20);
4205 	  hr_utility.set_location('NI Aggregation   : '||asg_rec.per_ni_flag,20);
4206 
4207 -- PAYE Aggregation
4208 		if NVL(asg_rec.per_agg_flag,'N') = 'Y' then
4209 				open csr_rti_payroll_id(asg_rec.assignment_id);
4210 					fetch csr_rti_payroll_id into l_rti_payroll_id;
4211         close csr_rti_payroll_id;
4212 
4213 	      hr_utility.set_location('l_rti_payroll_id  : '||l_rti_payroll_id,20);
4214 
4215 			  -- Fetch latest asg action id , asg id for the person
4216 				open csr_get_max_asg_actid_person(asg_rec.person_id);
4217 				fetch csr_get_max_asg_actid_person INTO l_last_asg_action_id1,l_last_effective_date1;
4218 				close csr_get_max_asg_actid_person;
4219 
4220 	      hr_utility.set_location('l_last_asg_action_id1  : '||l_last_asg_action_id1,20);
4221 	      hr_utility.set_location('l_last_effective_date1 : '||l_last_effective_date1,20);
4222 
4223 				open csr_latest_asg(l_last_asg_action_id1);
4224 				fetch csr_latest_asg INTO l_latest_asg;
4225 				close csr_latest_asg;
4226 
4227 	      hr_utility.set_location('l_latest_asg : '||l_latest_asg,20);
4228 
4229 				if asg_rec.assignment_id <> l_latest_asg then
4230 
4231 	          hr_utility.set_location('Not archiving as this is not the latest assignment.',20);
4232 						l_flag := 'N';
4233 				end if;
4234 
4235     end if;
4236 --PAYE Aggregation ends
4237 
4238 		if l_flag = 'Y' then
4239 
4240 		  hr_utility.set_location('asg_rec.assignment_id : '||asg_rec.assignment_id,20);
4241       l_fps_run_date := NULL;
4242       l_pact_id      := NULL;
4243 -- Get the Last FPS run date
4244 -- check any payroll actions after that date till 5-apr-13
4245 
4246 				open csr_latest_fps_date(asg_rec.assignment_id);
4247 				fetch csr_latest_fps_date into l_fps_run_date,l_pact_id;
4248         close csr_latest_fps_date;
4249 
4250 				hr_utility.set_location('l_fps_run_date : '||l_fps_run_date,20);
4251 				hr_utility.set_location('l_pact_id      : '||l_pact_id,20);
4252 
4253 				if l_fps_run_date is not null then
4254 				open csr_latest_asg_action1(asg_rec.assignment_id,l_pact_id);
4255 					fetch csr_latest_asg_action1 into l_last_asg_action_id, l_last_effective_date;
4256         close csr_latest_asg_action1;
4257 				end if;
4258 
4259 -- For New Starters where no FPS run exists, set the date to Start of the Tax Year
4260         if l_fps_run_date is null then
4261 				open csr_latest_asg_action(asg_rec.assignment_id,g_start_year);
4262 					fetch csr_latest_asg_action into l_last_asg_action_id, l_last_effective_date;
4263         close csr_latest_asg_action;
4264 				end if;
4265 
4266 				hr_utility.set_location('l_fps_run_date : '||l_fps_run_date,20);
4267 				hr_utility.set_location('l_last_asg_action_id  : '||l_last_asg_action_id,20);
4268 				hr_utility.set_location('l_last_effective_date : '||l_last_effective_date,20);
4269 
4270 			  if l_last_asg_action_id is not null then
4271 					hr_utility.set_location('Creating assignment action for the assignment ID : '||asg_rec.assignment_id,20);
4272 
4273 		      SELECT pay_assignment_actions_s.nextval INTO lockingactid FROM dual;
4274 		      -- Insert assignment into pay_assignment_actions
4275 		      hr_nonrun_asact.insact ( lockingactid, asg_rec.assignment_id, pactid, chunk, NULL );
4276 
4277           --Locking mechanism
4278 					-- If NI Aggr and non aggr
4279 if (NVL(asg_rec.per_ni_flag,'N') = 'Y' and NVL(asg_rec.per_agg_flag,'N') = 'N') or  (NVL(asg_rec.per_ni_flag,'N') = 'N')then
4280 			  open csr_action_type(l_last_asg_action_id);
4281 				fetch csr_action_type INTO l_latest_action_type;
4282 				close csr_action_type;
4283 
4284 				if l_latest_action_type = 'P' or l_latest_action_type = 'U' then
4285 					       hr_utility.set_location('lockingactid '||lockingactid, 50);
4286 					       hr_utility.set_location('Prepayment l_last_asg_action_id '||l_last_asg_action_id, 50);
4287 					       hr_nonrun_asact.insint(lockingactid, l_last_asg_action_id);
4288 				else
4289 						  if l_fps_run_date is not null then
4290 
4291 										for asg_actions in csr_all_actions_after_fps(asg_rec.assignment_id,l_pact_id)
4292 										loop
4293 													 hr_utility.set_location('lockingactid '||lockingactid, 50);
4294 										       hr_utility.set_location('asg_actions.asg_act_id '||asg_actions.asg_act_id, 50);
4295 					                 hr_nonrun_asact.insint(lockingactid, asg_actions.asg_act_id);
4296 										end loop;
4297 							else
4298 										for asg_actions in csr_all_actions_tax_year(asg_rec.assignment_id)
4299 										loop
4300 													 hr_utility.set_location('New Starter ', 50);
4301 													 hr_utility.set_location('lockingactid '||lockingactid, 50);
4302 										       hr_utility.set_location('asg_actions.asg_act_id '||asg_actions.asg_act_id, 50);
4303 					                 hr_nonrun_asact.insint(lockingactid, asg_actions.asg_act_id);
4304 										end loop;
4305 							end if;
4306 				end if;
4307 end if;
4308 					-- If PAYE Aggr
4309 if (NVL(asg_rec.per_agg_flag,'N') = 'Y')then
4310 			  open csr_action_type(l_last_asg_action_id);
4311 				fetch csr_action_type INTO l_latest_action_type;
4312 				close csr_action_type;
4313 
4314 				if l_latest_action_type = 'P' or l_latest_action_type = 'U' then
4315 					       hr_utility.set_location('lockingactid '||lockingactid, 50);
4316 					       hr_utility.set_location('Prepayment l_last_asg_action_id '||l_last_asg_action_id, 50);
4317 					       hr_nonrun_asact.insint(lockingactid, l_last_asg_action_id);
4318 				else
4319 						  if l_fps_run_date is not null then
4320 
4321 										for asg_actions in csr_all_actions_after_fps_agg(asg_rec.person_id,l_pact_id)
4322 										loop
4323 													 hr_utility.set_location('lockingactid '||lockingactid, 50);
4324 										       hr_utility.set_location('asg_actions.asg_act_id '||asg_actions.asg_act_id, 50);
4325 					                 hr_nonrun_asact.insint(lockingactid, asg_actions.asg_act_id);
4326 										end loop;
4327 							else
4328 										for asg_actions in csr_all_actions_tax_year_agg(asg_rec.person_id)
4329 										loop
4330 													 hr_utility.set_location('New Starter ', 50);
4331 													 hr_utility.set_location('lockingactid '||lockingactid, 50);
4332 										       hr_utility.set_location('asg_actions.asg_act_id '||asg_actions.asg_act_id, 50);
4333 					                 hr_nonrun_asact.insint(lockingactid, asg_actions.asg_act_id);
4334 										end loop;
4335 							end if;
4336 				end if;
4337 end if;
4338 				--NI Aggr
4339 		    if NVL(asg_rec.per_ni_flag,'N') = 'Y' and NVL(asg_rec.per_agg_flag,'N') = 'N' then
4340 					l_action_created := 'Y';
4341 				end if;
4342 		  end if;
4343 
4344 		end if; --	if l_flag = 'Y' then
4345 
4346 --Ni Aggr
4347 		if l_action_created = 'Y' then
4348 								hr_utility.set_location('Created assignment action for the NI Aggr assignment ID : '||asg_rec.assignment_id,20);
4349 
4350 					--Get NI RTI reporting  assignment
4351 			   open csr_get_ni_rpt_asg(asg_rec.assignment_id);
4352 			   fetch csr_get_ni_rpt_asg into l_ni_rpt_asg_id,l_ni_rpt_date;
4353 			   close csr_get_ni_rpt_asg;
4354 
4355          hr_utility.set_location('l_ni_rpt_asg_id: ' || l_ni_rpt_asg_id, 50);
4356 
4357 				if asg_rec.assignment_id <> l_ni_rpt_asg_id then
4358 
4359 					-- fetch latest asg action id , asg id for the person , if both r same create actions
4360 					open csr_get_max_asg_actid_person_n(asg_rec.person_id,l_ni_rpt_asg_id);
4361 					fetch csr_get_max_asg_actid_person_n INTO l_last_asg_action_id1,l_last_effective_date1;
4362 					close csr_get_max_asg_actid_person_n;
4363 
4364 				hr_utility.set_location('l_last_asg_action_id1  : '||l_last_asg_action_id1,20);
4365 				hr_utility.set_location('l_last_effective_date1 : '||l_last_effective_date1,20);
4366 
4367 								open csr_latest_asg(l_last_asg_action_id1);
4368 								fetch csr_latest_asg INTO l_latest_asg;
4369 								close csr_latest_asg;
4370 
4371          hr_utility.set_location('l_latest_asg : ' || l_latest_asg, 50);
4372 
4373 							if l_latest_asg = asg_rec.assignment_id then
4374 								-- If RTI Reporting asg is not processed then create action for it
4375 
4376 ----------------------------------------------------------------------------------------
4377       l_fps_run_date := NULL;
4378 -- Get the Last FPS run date
4379 -- check any payroll actions after that date till 5-apr-13
4380 				hr_utility.set_location('l_fps_run_date : '||l_fps_run_date,20);
4381 
4382 				open csr_latest_fps_date(l_ni_rpt_asg_id);
4383 				fetch csr_latest_fps_date into l_fps_run_date,l_pact_id;
4384 					if csr_latest_fps_date%found then
4385 					hr_utility.set_location('Cursor Found. l_fps_run_date : '||l_fps_run_date,20);
4386 					hr_utility.set_location('Cursor Found. l_pact_id : '||l_pact_id,20);
4387 					end if;
4388         close csr_latest_fps_date;
4389 
4390 				if l_fps_run_date is not null then
4391 				open csr_latest_asg_action1(l_ni_rpt_asg_id,l_pact_id);
4392 					fetch csr_latest_asg_action1 into l_last_asg_action_id, l_last_effective_date;
4393         close csr_latest_asg_action1;
4394 				end if;
4395 
4396 -- For New Starters where no FPS run exists, set the date to Start of the Tax Year
4397         if l_fps_run_date is null then
4398 					l_fps_run_date := g_start_year;
4399 				open csr_latest_asg_action(l_ni_rpt_asg_id,g_start_year);
4400 					fetch csr_latest_asg_action into l_last_asg_action_id, l_last_effective_date;
4401         close csr_latest_asg_action;
4402 				end if;
4403 
4404 				hr_utility.set_location('l_last_asg_action_id: '||l_last_asg_action_id,20);
4405 				hr_utility.set_location('l_last_effective_date: '||l_last_effective_date,20);
4406 
4407 			if l_last_asg_action_id is null then
4408 				hr_utility.set_location('Creating assignment action for the assignment ID : '||l_ni_rpt_asg_id,20);
4409 
4410 	      SELECT pay_assignment_actions_s.nextval INTO lockingactid FROM dual;
4411 	      -- Insert assignment into pay_assignment_actions
4412 	      hr_nonrun_asact.insact ( lockingactid, l_ni_rpt_asg_id, pactid, chunk, NULL );
4413 
4414 				--NI Aggr
4415 				  hr_utility.set_location('Action Created for RTI Reporting Ni Aggr asg : '||l_ni_rpt_asg_id,20);
4416 
4417 			         --Locking mechanism
4418 					-- If NI Aggr
4419 
4420 			  open csr_action_type(l_last_asg_action_id);
4421 				fetch csr_action_type INTO l_latest_action_type;
4422 				close csr_action_type;
4423 
4424 				if l_latest_action_type = 'P' or l_latest_action_type = 'U' then
4425 					       hr_utility.set_location('lockingactid '||lockingactid, 50);
4426 					       hr_utility.set_location('Prepayment l_last_asg_action_id '||l_last_asg_action_id, 50);
4427 					       hr_nonrun_asact.insint(lockingactid, l_last_asg_action_id);
4428 				else
4429 						  if l_fps_run_date is not null then
4430 
4431 										for asg_actions in csr_all_actions_after_fps(l_ni_rpt_asg_id,l_pact_id)
4432 										loop
4433 													 hr_utility.set_location('lockingactid '||lockingactid, 50);
4434 										       hr_utility.set_location('asg_actions.asg_act_id '||asg_actions.asg_act_id, 50);
4435 					                 hr_nonrun_asact.insint(lockingactid, asg_actions.asg_act_id);
4436 										end loop;
4437 							else
4438 										for asg_actions in csr_all_actions_tax_year(l_ni_rpt_asg_id)
4439 										loop
4440 													 hr_utility.set_location('New Starter ', 50);
4441 													 hr_utility.set_location('lockingactid '||lockingactid, 50);
4442 										       hr_utility.set_location('asg_actions.asg_act_id '||asg_actions.asg_act_id, 50);
4443 					                 hr_nonrun_asact.insint(lockingactid, asg_actions.asg_act_id);
4444 										end loop;
4445 							end if;
4446 				end if;
4447 
4448 
4449 
4450 		  end if;
4451 ----------------------------------------------------------------------------------------
4452 
4453 							end if;
4454 
4455 				end if;
4456 		end if;
4457 --NI Aggr
4458 
4459 end loop;
4460 
4461   hr_utility.set_location('Leaving: '||l_proc,999);
4462 END internal_action_creation_eyu;
4463 --
4464 --
4465 --
4466 /*--------------------------------------------------------------------------
4467 Name      : action_creation
4468 Purpose   : This creates the assignment actions for a specific chunk.
4469 Arguments :
4470 Notes     :
4471 --------------------------------------------------------------------------*/
4472 PROCEDURE rti_eyu_action_creation(
4473     pactid    IN NUMBER,
4474     stperson  IN NUMBER,
4475     endperson IN NUMBER,
4476     chunk     IN NUMBER)
4477 IS
4478 BEGIN
4479   internal_action_creation_eyu(pactid, stperson, endperson, chunk,'GB_RTI_EYU_13', 'RTI_EYU_REP_13');
4480 END rti_eyu_action_creation;
4481 ---
4482 ---
4483 PROCEDURE reset_flag(
4484     p_type            VARCHAR2,
4485     p_reset_flag_type VARCHAR2,
4486     p_assact          NUMBER)
4487 IS
4488   l_proc CONSTANT VARCHAR2(50):= g_package||'reset_flag';
4489 
4490   CURSOR csr_aei_starter_details
4491   IS
4492     SELECT aei.assignment_extra_info_id,
4493       aei.object_version_number,
4494       aei.aei_information8
4495     FROM pay_assignment_actions paa,
4496       per_assignment_extra_info aei
4497     WHERE paa.assignment_action_id = p_assact
4498     AND aei.assignment_id          = paa.assignment_id
4499     AND aei.information_type       = p_type;
4500 
4501   CURSOR csr_aei_pensioner_details
4502   IS
4503     SELECT aei.assignment_extra_info_id,
4504       aei.object_version_number,
4505       aei.aei_information9
4506     FROM pay_assignment_actions paa,
4507       per_assignment_extra_info aei
4508     WHERE paa.assignment_action_id = p_assact
4509     AND aei.assignment_id          = paa.assignment_id
4510     AND aei.information_type       = p_type;
4511 
4512   CURSOR csr_aei_expat_details
4513   IS
4514     SELECT aei.assignment_extra_info_id,
4515       aei.object_version_number,
4516       aei.aei_information19
4517     FROM pay_assignment_actions paa,
4518       per_assignment_extra_info aei
4519     WHERE paa.assignment_action_id = p_assact
4520     AND aei.assignment_id          = paa.assignment_id
4521     AND aei.information_type       = p_type;
4522 
4523   l_aei_starter_rec csr_aei_starter_details%rowtype;
4524   l_aei_pensioner_rec csr_aei_pensioner_details%rowtype;
4525   l_aei_expat_rec csr_aei_expat_details%rowtype;
4526   l_ovn        NUMBER;
4527   l_reset_flag VARCHAR2(30);
4528 
4529 BEGIN
4530   IF p_reset_flag_type = 'STARTER' THEN
4531 
4532     OPEN csr_aei_starter_details;
4533     FETCH csr_aei_starter_details INTO l_aei_starter_rec;
4534     CLOSE csr_aei_starter_details;
4535 
4536     IF l_aei_starter_rec.aei_information8 = 'Y' THEN
4537       hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false,
4538                                                                  p_object_version_number => l_ovn,
4539                                                                  p_assignment_extra_info_id => l_aei_starter_rec.assignment_extra_info_id,
4540                                                                  p_aei_information_category => p_type,
4541                                                                  p_aei_information8 => 'N');
4542     END IF;
4543   END IF;
4544 
4545   IF p_reset_flag_type = 'PENSIONER' THEN
4546 
4547     OPEN csr_aei_pensioner_details;
4548     FETCH csr_aei_pensioner_details INTO l_aei_pensioner_rec;
4549     CLOSE csr_aei_pensioner_details;
4550 
4551     IF l_aei_pensioner_rec.aei_information9 = 'Y' THEN
4552       hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false,
4553                                                                  p_object_version_number => l_ovn,
4554                                                                  p_assignment_extra_info_id => l_aei_pensioner_rec.assignment_extra_info_id,
4555                                                                  p_aei_information_category => p_type,
4556                                                                  p_aei_information9 => 'N');
4557     END IF;
4558   END IF;
4559 
4560   IF p_reset_flag_type = 'EXPAT' THEN
4561 
4562     OPEN csr_aei_expat_details;
4563     FETCH csr_aei_expat_details INTO l_aei_expat_rec;
4564     CLOSE csr_aei_expat_details;
4565 
4566     IF l_aei_expat_rec.aei_information19 = 'Y' THEN
4567       hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false,
4568                                                                  p_object_version_number => l_ovn,
4569                                                                  p_assignment_extra_info_id => l_aei_expat_rec.assignment_extra_info_id,
4570                                                                  p_aei_information_category => p_type,
4571                                                                  p_aei_information19 => 'N');
4572     END IF;
4573   END IF;
4574 END;
4575 
4576 /*--------------------------------------------------------------------------
4577 Name      : archinit
4578 Purpose   : This procedure can be used to perform an initialisation
4579 section and validation of Employer details
4580 Arguments :
4581 Notes     :
4582 --------------------------------------------------------------------------*/
4583 PROCEDURE archinit(
4584     p_payroll_action_id IN NUMBER)
4585 IS
4586   error_found EXCEPTION;
4587   l_proc CONSTANT VARCHAR2(50) := g_package || ' archinit';
4588   l_sender_id hr_organization_information.org_information11%TYPE;
4589   l_tax_ref hr_organization_information.org_information1%TYPE;
4590   l_tax_dist hr_organization_information.org_information2%TYPE;
4591   l_employer_addr VARCHAR2(255);
4592   l_employer_name VARCHAR2(150);
4593   l_err           BOOLEAN;
4594   l_exp           EXCEPTION;
4595   l_rep_typ       VARCHAR2(100);
4596   l_effective_date DATE;
4597 
4598 
4599   CURSOR csr_parameter_info(p_payroll_action_id NUMBER)
4600   IS
4601     SELECT
4602            SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'TAX_REF'),1,20) tax_ref
4603     FROM pay_payroll_actions
4604     WHERE payroll_action_id = p_payroll_action_id;
4605 
4606   CURSOR csr_payroll_details(pactid NUMBER)
4607   IS
4608     SELECT NVL(UPPER(hoi.org_information11),' ') sender_id,
4609       DECODE(SUBSTR(pact.legislative_parameters,instr(pact.legislative_parameters,'TEST=') + 5,1) ,'N',' ','Y','1') test_indicator,
4610       fnd_number.number_to_canonical(pact.request_id) request_id,
4611       NVL(upper(SUBSTR(ltrim(hoi.org_information3),1,35)),' ') employer_name,
4612       NVL(upper(SUBSTR(ltrim(SUBSTR(hoi.org_information1,4,11),'/'),1,10)),' ') tax_ref_no,
4613       lpad(NVL(SUBSTR(hoi.org_information1,1,3),' '),3,0) tax_office_no,
4614       DECODE(PAY_GB_EOY_MAGTAPE.get_payroll_version, ' ', '0', PAY_GB_EOY_MAGTAPE.get_payroll_version) payroll_ver,
4615       NVL(upper(SUBSTR(hoi.org_information6,1,13)),' ') acc_ref_no,
4616       report_type
4617     FROM pay_payroll_actions pact,
4618       hr_organization_information hoi
4619     WHERE pact.payroll_action_id        =pactid
4620     AND pact.business_group_id          = hoi.organization_id
4621     AND hoi.org_information_context     = 'Tax Details References'
4622     AND NVL(hoi.org_information10,'UK') = 'UK'
4623     AND SUBSTR(pact.legislative_parameters,instr(pact.legislative_parameters,'TAX_REF=') + 8, instr(pact.legislative_parameters
4624       ||' ',' ', instr(pact.legislative_parameters,'TAX_REF=')                           +8) - instr(pact.legislative_parameters, 'TAX_REF=') - 8) = hoi.org_information1;
4625 
4626 
4627 CURSOR get_defined_balance_id (p_balance_name VARCHAR2, p_dimension_name VARCHAR2)
4628   IS
4629     SELECT defined_balance_id
4630     FROM pay_defined_balances db,
4631       pay_balance_types b,
4632       pay_balance_dimensions d
4633     WHERE b.balance_name        = p_balance_name
4634     AND d.dimension_name        = p_dimension_name
4635     AND db.balance_type_id      = b.balance_type_id
4636     AND db.balance_dimension_id = d.balance_dimension_id
4637     AND b.legislation_code = 'GB'
4638     AND d.legislation_code = 'GB'
4639     AND db.legislation_code = 'GB';
4640 
4641   CURSOR get_defined_balance_id1
4642   IS
4643 SELECT b.balance_name balance_name,
4644       b.balance_type_id balance_type_id,
4645       d.database_item_suffix database_item_suffix,
4646       d.balance_dimension_id balance_dimension_id,
4647       db.defined_balance_id defined_balance_id
4648     FROM pay_defined_balances db,
4649       pay_balance_types b,
4650       pay_balance_dimensions d
4651     WHERE db.balance_type_id     = b.balance_type_id
4652     AND db.balance_dimension_id  = d.balance_dimension_id
4653 
4654     AND (d.database_item_suffix = '_ASG_TD_YTD'
4655     AND b.balance_name          IN ('Taxable Pay','PAYE','Student Loan','SSP Total',
4656                                     'SMP Total','SPP Adoption Total', 'SPP Birth Total','SAP Total',
4657                                     'ASPP Adoption Total','ASPP Birth Total'
4658                                     ))
4659 
4660     AND b.legislation_code = 'GB'
4661     AND d.legislation_code = 'GB'
4662     AND db.legislation_code = 'GB';
4663 
4664   CURSOR get_aggr_defined_balance_id
4665   IS
4666     SELECT b.balance_name balance_name,
4667       b.balance_type_id balance_type_id,
4668       d.database_item_suffix database_item_suffix,
4669       d.balance_dimension_id balance_dimension_id,
4670       db.defined_balance_id defined_balance_id
4671     FROM pay_defined_balances db,
4672       pay_balance_types b,
4673       pay_balance_dimensions d
4674     WHERE db.balance_type_id     = b.balance_type_id
4675     AND db.balance_dimension_id  = d.balance_dimension_id
4676     AND ((d.database_item_suffix = '_PER_TD_YTD'
4677     AND b.balance_name          IN ('Taxable Pay','Student Loan','SSP Total','SMP Total',
4678                                     'SPP Adoption Total', 'SAP Total','ASPP Adoption Total',
4679                                     'SPP Birth Total','ASPP Birth Total'))
4680 
4681     OR(d.database_item_suffix    = '_PER_TD_CPE_YTD'
4682     AND b.balance_name          IN ('PAYE')))
4683 
4684 
4685    and b.legislation_code = 'GB'
4686    and d.legislation_code = 'GB'
4687    and db.legislation_code = 'GB';
4688 
4689   CURSOR get_defined_balance_id_ni
4690   IS
4691     SELECT b.balance_name balance_name,
4692       b.balance_type_id balance_type_id,
4693       d.database_item_suffix database_item_suffix,
4694       d.balance_dimension_id balance_dimension_id,
4695       db.defined_balance_id defined_balance_id
4696     FROM pay_defined_balances db,
4697       pay_balance_types b,
4698       pay_balance_dimensions d
4699     WHERE db.balance_type_id     = b.balance_type_id
4700     AND db.balance_dimension_id  = d.balance_dimension_id
4701 
4702     AND (d.database_item_suffix = '_ASG_TD_YTD'
4703     AND b.balance_name          IN ('NI A Total','NI A Able',
4704                                     'NI B Total','NI B Able',
4705                                     'NI C Total','NI C Able',
4706                                     'NI D Total','NI D Able',
4707                                     'NI E Total','NI E Able',
4708                                     'NI J Total','NI J Able',
4709                                     'NI L Total','NI L Able'))
4710    and b.legislation_code = 'GB'
4711    and d.legislation_code = 'GB'
4712    and db.legislation_code = 'GB';
4713 
4714   CURSOR get_aggr_defined_balance_id_ni
4715   IS
4716     SELECT b.balance_name balance_name,
4717       b.balance_type_id balance_type_id,
4718       d.database_item_suffix database_item_suffix,
4719       d.balance_dimension_id balance_dimension_id,
4720       db.defined_balance_id defined_balance_id
4721     FROM pay_defined_balances db,
4722       pay_balance_types b,
4723       pay_balance_dimensions d
4724     WHERE db.balance_type_id     = b.balance_type_id
4725     AND db.balance_dimension_id  = d.balance_dimension_id
4726 
4727     AND (d.database_item_suffix = '_PER_TD_YTD'
4728     AND b.balance_name          IN ('NI A Total','NI A Able',
4729                                     'NI B Total','NI B Able',
4730                                     'NI C Total','NI C Able',
4731                                     'NI D Total','NI D Able',
4732                                     'NI E Total','NI E Able',
4733                                     'NI J Total','NI J Able',
4734                                     'NI L Total','NI L Able'))
4735 
4736    and b.legislation_code = 'GB'
4737    and d.legislation_code = 'GB'
4738    and db.legislation_code = 'GB';
4739 
4740 
4741 
4742   l_count              NUMBER                := 1;
4743   l_fps_effective_date VARCHAR2(30);
4744   l_balance_counter    NUMBER;
4745   taxable_id           NUMBER :=1;
4746   paye_id              NUMBER :=2;
4747   student_loan_id      NUMBER :=3;
4748   taxable_ptd_id       NUMBER :=4;
4749   student_loan_ptd_id  NUMBER :=5;
4750   paye_ptd_id          NUMBER :=6;
4751   ssp_id               NUMBER :=7;
4752   smp_id               NUMBER :=8;
4753   ospp_adopt_id        NUMBER :=9;
4754   sap_id               NUMBER :=10;
4755   aspp_adopt_id        NUMBER :=11;
4756   l_dummy              NUMBER;
4757   l_pre_pact_effective_date DATE;
4758   l_first_fps_run_date date;
4759   l_tax_year varchar2(4) := '2013';
4760 BEGIN
4761   hr_utility.set_location('Entering '|| l_proc, 10);
4762   l_err := FALSE;
4763 
4764   OPEN csr_parameter_info(p_payroll_action_id);
4765   FETCH csr_parameter_info
4766    INTO g_tax_ref;
4767   CLOSE csr_parameter_info;
4768 
4769   l_effective_date := to_date('05-04-'||l_tax_year,'DD-MM-YYYY');
4770 
4771   IF l_effective_date >= to_date('06-04-'||SUBSTR(TO_CHAR(l_effective_date,'YYYY/MON/DD'),1,4),'DD-MM-YYYY' ) THEN
4772     g_start_year      := to_date('06-04-'||SUBSTR(TO_CHAR(l_effective_date,'YYYY/MON/DD'),1,4),'DD-MM-YYYY' ) ;
4773     g_end_year        := to_date('05-04-'||TO_CHAR(to_number(SUBSTR(TO_CHAR(l_effective_date,'YYYY/MON/DD'),1,4))+1 ),'DD-MM-YYYY') ;
4774   ELSE
4775     g_start_year := to_date('06-04-'||TO_CHAR(to_number(SUBSTR(TO_CHAR(l_effective_date,'YYYY/MON/DD'),1,4))-1 ),'DD-MM-YYYY') ;
4776     g_end_year   := to_date('05-04-'||SUBSTR(TO_CHAR(l_effective_date,'YYYY/MON/DD'),1,4),'DD-MM-YYYY') ;
4777   END IF;
4778 
4779 
4780   SELECT distinct element_type_id
4781   INTO g_paye_element_id
4782   FROM pay_element_types_f
4783   WHERE element_name = 'PAYE'
4784   AND legislation_code = 'GB';
4785 
4786 SELECT distinct element_type_id
4787   INTO g_paye_details_id
4788   FROM pay_element_types_f
4789   WHERE element_name = 'PAYE Details'
4790   AND legislation_code = 'GB';
4791 
4792   hr_utility.trace('g_paye_element_id: '||TO_CHAR(g_paye_element_id));
4793 
4794   --******************************
4795   l_balance_counter := 1;
4796   FOR rec IN get_defined_balance_id1
4797   LOOP
4798     g_fps_bal_det_tab(l_balance_counter).balance_name := rec.balance_name;
4799     hr_utility.trace('balance_name: '||g_fps_bal_det_tab(l_balance_counter).balance_name);
4800     g_fps_bal_det_tab(l_balance_counter).balance_type_id := rec.balance_type_id;
4801     hr_utility.trace('balance_type_id: '||g_fps_bal_det_tab(l_balance_counter).balance_type_id);
4802     g_fps_bal_det_tab(l_balance_counter).database_item_suffix := rec.database_item_suffix;
4803     hr_utility.trace('database_item_suffix: '||g_fps_bal_det_tab(l_balance_counter).database_item_suffix);
4804     g_fps_bal_det_tab(l_balance_counter).balance_dimension_id := rec.balance_dimension_id;
4805     hr_utility.trace('balance_dimension_id: '||g_fps_bal_det_tab(l_balance_counter).balance_dimension_id);
4806     g_fps_bal_det_tab(l_balance_counter).defined_balance_id := rec.defined_balance_id;
4807     hr_utility.trace('defined_balance_id: '||g_fps_bal_det_tab(l_balance_counter).defined_balance_id);
4808     l_balance_counter := l_balance_counter + 1;
4809     hr_utility.trace('Balance Counter: '||l_balance_counter);
4810   END LOOP;
4811 
4812   FOR i IN 1..g_fps_bal_det_tab.last
4813   LOOP
4814     g_defined_balance_lst(i).defined_balance_id := g_fps_bal_det_tab(i).defined_balance_id;
4815   END LOOP;
4816 
4817 
4818  --NI balances for non aggregated assignments starts here
4819   l_balance_counter := 1;
4820   FOR rec IN get_defined_balance_id_ni
4821   LOOP
4822     g_fps_ni_bal_det_tab(l_balance_counter).balance_name         := rec.balance_name;
4823     g_fps_ni_bal_det_tab(l_balance_counter).balance_type_id      := rec.balance_type_id;
4824     g_fps_ni_bal_det_tab(l_balance_counter).database_item_suffix := rec.database_item_suffix;
4825     g_fps_ni_bal_det_tab(l_balance_counter).balance_dimension_id := rec.balance_dimension_id;
4826     g_fps_ni_bal_det_tab(l_balance_counter).defined_balance_id   := rec.defined_balance_id;
4827     l_balance_counter                                            := l_balance_counter + 1;
4828   END LOOP;
4829   FOR i IN 1..g_fps_ni_bal_det_tab.last
4830   LOOP
4831     g_defined_balance_lst_ni(i).defined_balance_id := g_fps_ni_bal_det_tab(i).defined_balance_id;
4832   END LOOP;
4833 
4834 
4835   --Aggregation balances starts here
4836   l_balance_counter := 1;
4837   FOR rec IN get_aggr_defined_balance_id
4838   LOOP
4839     g_fps_aggr_bal_det_tab(l_balance_counter).balance_name := rec.balance_name;
4840     hr_utility.trace('balance name: '||g_fps_aggr_bal_det_tab(l_balance_counter).balance_name);
4841     g_fps_aggr_bal_det_tab(l_balance_counter).balance_type_id := rec.balance_type_id;
4842     hr_utility.trace('balance_type_id: '||g_fps_aggr_bal_det_tab(l_balance_counter).balance_type_id);
4843     g_fps_aggr_bal_det_tab(l_balance_counter).database_item_suffix := rec.database_item_suffix;
4844     hr_utility.trace('database_item_suffix: '||g_fps_aggr_bal_det_tab(l_balance_counter).database_item_suffix);
4845     g_fps_aggr_bal_det_tab(l_balance_counter).balance_dimension_id := rec.balance_dimension_id;
4846     hr_utility.trace('balance_dimension_id: '||g_fps_aggr_bal_det_tab(l_balance_counter).balance_dimension_id);
4847     g_fps_aggr_bal_det_tab(l_balance_counter).defined_balance_id := rec.defined_balance_id;
4848     hr_utility.trace('defined_balance_id: '||g_fps_aggr_bal_det_tab(l_balance_counter).defined_balance_id);
4849     l_balance_counter := l_balance_counter + 1;
4850     hr_utility.trace('Balance Counter: '||l_balance_counter);
4851   END LOOP;
4852 
4853   FOR i IN 1..g_fps_aggr_bal_det_tab.last
4854   LOOP
4855     g_aggr_defined_balance_lst(i).defined_balance_id := g_fps_aggr_bal_det_tab(i).defined_balance_id;
4856   END LOOP;
4857 
4858   --Aggregation balances ends here
4859 
4860   --NI balances for Aggregation assignments starts here
4861   l_balance_counter := 1;
4862 
4863   FOR rec IN get_aggr_defined_balance_id_ni
4864   LOOP
4865     g_fps_ni_aggr_bal_det_tab(l_balance_counter).balance_name         := rec.balance_name;
4866     g_fps_ni_aggr_bal_det_tab(l_balance_counter).balance_type_id      := rec.balance_type_id;
4867     g_fps_ni_aggr_bal_det_tab(l_balance_counter).database_item_suffix := rec.database_item_suffix;
4868     g_fps_ni_aggr_bal_det_tab(l_balance_counter).balance_dimension_id := rec.balance_dimension_id;
4869     g_fps_ni_aggr_bal_det_tab(l_balance_counter).defined_balance_id   := rec.defined_balance_id;
4870     l_balance_counter                                                 := l_balance_counter + 1;
4871   END LOOP;
4872 
4873   FOR i IN 1..g_fps_ni_aggr_bal_det_tab.last
4874   LOOP
4875     g_aggr_defined_balance_lst_ni(i).defined_balance_id := g_fps_ni_aggr_bal_det_tab(i).defined_balance_id;
4876   END LOOP;
4877 
4878 
4879   OPEN get_defined_balance_id('NI A Able LEL','_ASG_TD_YTD');
4880   FETCH get_defined_balance_id INTO g_nia_lel_id;
4881   CLOSE get_defined_balance_id;
4882 
4883   OPEN get_defined_balance_id('NI A Able ET','_ASG_TD_YTD');
4884   FETCH get_defined_balance_id INTO g_nia_et_id;
4885   CLOSE get_defined_balance_id;
4886 
4887   OPEN get_defined_balance_id('NI A Able UAP','_ASG_TD_YTD');
4888   FETCH get_defined_balance_id INTO g_nia_uap_id;
4889   CLOSE get_defined_balance_id;
4890 
4891   OPEN get_defined_balance_id('NI A Able UEL','_ASG_TD_YTD');
4892   FETCH get_defined_balance_id INTO g_nia_uel_id;
4893   CLOSE get_defined_balance_id;
4894 
4895   OPEN get_defined_balance_id('NI A Employee','_ASG_TD_YTD');
4896   FETCH get_defined_balance_id INTO g_nia_e_ytd_id;
4897   CLOSE get_defined_balance_id;
4898 
4899   OPEN get_defined_balance_id('NI A Employer','_ASG_TD_YTD');
4900   FETCH get_defined_balance_id INTO g_nia_r_ytd_id;
4901   CLOSE get_defined_balance_id;
4902 --
4903   OPEN get_defined_balance_id('NI B Able LEL','_ASG_TD_YTD');
4904   FETCH get_defined_balance_id INTO g_nib_lel_id;
4905   CLOSE get_defined_balance_id;
4906 
4907   OPEN get_defined_balance_id('NI B Able ET','_ASG_TD_YTD');
4908   FETCH get_defined_balance_id INTO g_nib_et_id;
4909   CLOSE get_defined_balance_id;
4910 
4911   OPEN get_defined_balance_id('NI B Able UAP','_ASG_TD_YTD');
4912   FETCH get_defined_balance_id INTO g_nib_uap_id;
4913   CLOSE get_defined_balance_id;
4914 
4915   OPEN get_defined_balance_id('NI B Able UEL','_ASG_TD_YTD');
4916   FETCH get_defined_balance_id INTO g_nib_uel_id;
4917   CLOSE get_defined_balance_id;
4918 
4919   OPEN get_defined_balance_id('NI B Employee','_ASG_TD_YTD');
4920   FETCH get_defined_balance_id INTO g_nib_e_ytd_id;
4921   CLOSE get_defined_balance_id;
4922 
4923   OPEN get_defined_balance_id('NI B Employer','_ASG_TD_YTD');
4924   FETCH get_defined_balance_id INTO g_nib_r_ytd_id;
4925   CLOSE get_defined_balance_id;
4926 --
4927   OPEN get_defined_balance_id('NI C Able LEL','_ASG_TD_YTD');
4928   FETCH get_defined_balance_id INTO g_nic_lel_id;
4929   CLOSE get_defined_balance_id;
4930 
4931   OPEN get_defined_balance_id('NI C Able ET','_ASG_TD_YTD');
4932   FETCH get_defined_balance_id INTO g_nic_et_id;
4933   CLOSE get_defined_balance_id;
4934 
4935   OPEN get_defined_balance_id('NI C Able UAP','_ASG_TD_YTD');
4936   FETCH get_defined_balance_id INTO g_nic_uap_id;
4937   CLOSE get_defined_balance_id;
4938 
4939   OPEN get_defined_balance_id('NI C Able UEL','_ASG_TD_YTD');
4940   FETCH get_defined_balance_id INTO g_nic_uel_id;
4941   CLOSE get_defined_balance_id;
4942 
4943   OPEN get_defined_balance_id('NI C Employee','_ASG_TD_YTD');
4944   FETCH get_defined_balance_id INTO g_nic_e_ytd_id;
4945   CLOSE get_defined_balance_id;
4946 
4947   OPEN get_defined_balance_id('NI C Employer','_ASG_TD_YTD');
4948   FETCH get_defined_balance_id INTO g_nic_r_ytd_id;
4949   CLOSE get_defined_balance_id;
4950 ---
4951 
4952   OPEN get_defined_balance_id('NI D Able LEL','_ASG_TD_YTD');
4953   FETCH get_defined_balance_id INTO g_nid_lel_id;
4954   CLOSE get_defined_balance_id;
4955 
4956   OPEN get_defined_balance_id('NI D Able ET','_ASG_TD_YTD');
4957   FETCH get_defined_balance_id INTO g_nid_et_id;
4958   CLOSE get_defined_balance_id;
4959 
4960   OPEN get_defined_balance_id('NI D Able UAP','_ASG_TD_YTD');
4961   FETCH get_defined_balance_id INTO g_nid_uap_id;
4962   CLOSE get_defined_balance_id;
4963 
4964   OPEN get_defined_balance_id('NI D Able UEL','_ASG_TD_YTD');
4965   FETCH get_defined_balance_id INTO g_nid_uel_id;
4966   CLOSE get_defined_balance_id;
4967 
4968   OPEN get_defined_balance_id('NI D Employee','_ASG_TD_YTD');
4969   FETCH get_defined_balance_id INTO g_nid_e_ytd_id;
4970   CLOSE get_defined_balance_id;
4971 
4972   OPEN get_defined_balance_id('NI D Employer','_ASG_TD_YTD');
4973   FETCH get_defined_balance_id INTO g_nid_r_ytd_id;
4974   CLOSE get_defined_balance_id;
4975 ---
4976   OPEN get_defined_balance_id('NI E Able LEL','_ASG_TD_YTD');
4977   FETCH get_defined_balance_id INTO g_nie_lel_id;
4978   CLOSE get_defined_balance_id;
4979 
4980   OPEN get_defined_balance_id('NI E Able ET','_ASG_TD_YTD');
4981   FETCH get_defined_balance_id INTO g_nie_et_id;
4982   CLOSE get_defined_balance_id;
4983 
4984   OPEN get_defined_balance_id('NI E Able UAP','_ASG_TD_YTD');
4985   FETCH get_defined_balance_id INTO g_nie_uap_id;
4986   CLOSE get_defined_balance_id;
4987 
4988   OPEN get_defined_balance_id('NI E Able UEL','_ASG_TD_YTD');
4989   FETCH get_defined_balance_id INTO g_nie_uel_id;
4990   CLOSE get_defined_balance_id;
4991 
4992   OPEN get_defined_balance_id('NI E Employee','_ASG_TD_YTD');
4993   FETCH get_defined_balance_id INTO g_nie_e_ytd_id;
4994   CLOSE get_defined_balance_id;
4995 
4996   OPEN get_defined_balance_id('NI E Employer','_ASG_TD_YTD');
4997   FETCH get_defined_balance_id INTO g_nie_r_ytd_id;
4998   CLOSE get_defined_balance_id;
4999 
5000 ---
5001   OPEN get_defined_balance_id('NI J Able LEL','_ASG_TD_YTD');
5002   FETCH get_defined_balance_id INTO g_nij_lel_id;
5003   CLOSE get_defined_balance_id;
5004 
5005   OPEN get_defined_balance_id('NI J Able ET','_ASG_TD_YTD');
5006   FETCH get_defined_balance_id INTO g_nij_et_id;
5007   CLOSE get_defined_balance_id;
5008 
5009   OPEN get_defined_balance_id('NI J Able UAP','_ASG_TD_YTD');
5010   FETCH get_defined_balance_id INTO g_nij_uap_id;
5011   CLOSE get_defined_balance_id;
5012 
5013   OPEN get_defined_balance_id('NI J Able UEL','_ASG_TD_YTD');
5014   FETCH get_defined_balance_id INTO g_nij_uel_id;
5015   CLOSE get_defined_balance_id;
5016 
5017   OPEN get_defined_balance_id('NI J Employee','_ASG_TD_YTD');
5018   FETCH get_defined_balance_id INTO g_nij_e_ytd_id;
5019   CLOSE get_defined_balance_id;
5020 
5021   OPEN get_defined_balance_id('NI J Employer','_ASG_TD_YTD');
5022   FETCH get_defined_balance_id INTO g_nij_r_ytd_id;
5023   CLOSE get_defined_balance_id;
5024 ---
5025   OPEN get_defined_balance_id('NI L Able LEL','_ASG_TD_YTD');
5026   FETCH get_defined_balance_id INTO g_nil_lel_id;
5027   CLOSE get_defined_balance_id;
5028 
5029   OPEN get_defined_balance_id('NI L Able ET','_ASG_TD_YTD');
5030   FETCH get_defined_balance_id INTO g_nil_et_id;
5031   CLOSE get_defined_balance_id;
5032 
5033   OPEN get_defined_balance_id('NI L Able UAP','_ASG_TD_YTD');
5034   FETCH get_defined_balance_id INTO g_nil_uap_id;
5035   CLOSE get_defined_balance_id;
5036 
5037   OPEN get_defined_balance_id('NI L Able UEL','_ASG_TD_YTD');
5038   FETCH get_defined_balance_id INTO g_nil_uel_id;
5039   CLOSE get_defined_balance_id;
5040 
5041   OPEN get_defined_balance_id('NI L Employee','_ASG_TD_YTD');
5042   FETCH get_defined_balance_id INTO g_nil_e_ytd_id;
5043   CLOSE get_defined_balance_id;
5044 
5045   OPEN get_defined_balance_id('NI L Employer','_ASG_TD_YTD');
5046   FETCH get_defined_balance_id INTO g_nil_r_ytd_id;
5047   CLOSE get_defined_balance_id;
5048 ---
5049 ---
5050 ---
5051 
5052 
5053   OPEN get_defined_balance_id('NI A Able LEL','_PER_TD_YTD');
5054   FETCH get_defined_balance_id INTO g_per_nia_lel_id;
5055   CLOSE get_defined_balance_id;
5056 
5057   OPEN get_defined_balance_id('NI A Able ET','_PER_TD_YTD');
5058   FETCH get_defined_balance_id INTO g_per_nia_et_id;
5059   CLOSE get_defined_balance_id;
5060 
5061   OPEN get_defined_balance_id('NI A Able UAP','_PER_TD_YTD');
5062   FETCH get_defined_balance_id INTO g_per_nia_uap_id;
5063   CLOSE get_defined_balance_id;
5064 
5065   OPEN get_defined_balance_id('NI A Able UEL','_PER_TD_YTD');
5066   FETCH get_defined_balance_id INTO g_per_nia_uel_id;
5067   CLOSE get_defined_balance_id;
5068 
5069   OPEN get_defined_balance_id('NI A Employee','_PER_TD_YTD');
5070   FETCH get_defined_balance_id INTO g_per_nia_e_ytd_id;
5071   CLOSE get_defined_balance_id;
5072 
5073   OPEN get_defined_balance_id('NI A Employer','_PER_TD_YTD');
5074   FETCH get_defined_balance_id INTO g_per_nia_r_ytd_id;
5075   CLOSE get_defined_balance_id;
5076 --
5077   OPEN get_defined_balance_id('NI B Able LEL','_PER_TD_YTD');
5078   FETCH get_defined_balance_id INTO g_per_nib_lel_id;
5079   CLOSE get_defined_balance_id;
5080 
5081   OPEN get_defined_balance_id('NI B Able ET','_PER_TD_YTD');
5082   FETCH get_defined_balance_id INTO g_per_nib_et_id;
5083   CLOSE get_defined_balance_id;
5084 
5085   OPEN get_defined_balance_id('NI B Able UAP','_PER_TD_YTD');
5086   FETCH get_defined_balance_id INTO g_per_nib_uap_id;
5087   CLOSE get_defined_balance_id;
5088 
5089   OPEN get_defined_balance_id('NI B Able UEL','_PER_TD_YTD');
5090   FETCH get_defined_balance_id INTO g_per_nib_uel_id;
5091   CLOSE get_defined_balance_id;
5092 
5093   OPEN get_defined_balance_id('NI B Employee','_PER_TD_YTD');
5094   FETCH get_defined_balance_id INTO g_per_nib_e_ytd_id;
5095   CLOSE get_defined_balance_id;
5096 
5097   OPEN get_defined_balance_id('NI B Employer','_PER_TD_YTD');
5098   FETCH get_defined_balance_id INTO g_per_nib_r_ytd_id;
5099   CLOSE get_defined_balance_id;
5100 --
5101   OPEN get_defined_balance_id('NI C Able LEL','_PER_TD_YTD');
5102   FETCH get_defined_balance_id INTO g_per_nic_lel_id;
5103   CLOSE get_defined_balance_id;
5104 
5105   OPEN get_defined_balance_id('NI C Able ET','_PER_TD_YTD');
5106   FETCH get_defined_balance_id INTO g_per_nic_et_id;
5107   CLOSE get_defined_balance_id;
5108 
5109   OPEN get_defined_balance_id('NI C Able UAP','_PER_TD_YTD');
5110   FETCH get_defined_balance_id INTO g_per_nic_uap_id;
5111   CLOSE get_defined_balance_id;
5112 
5113   OPEN get_defined_balance_id('NI C Able UEL','_PER_TD_YTD');
5114   FETCH get_defined_balance_id INTO g_per_nic_uel_id;
5115   CLOSE get_defined_balance_id;
5116 
5117   OPEN get_defined_balance_id('NI C Employee','_PER_TD_YTD');
5118   FETCH get_defined_balance_id INTO g_per_nic_e_ytd_id;
5119   CLOSE get_defined_balance_id;
5120 
5121   OPEN get_defined_balance_id('NI C Employer','_PER_TD_YTD');
5122   FETCH get_defined_balance_id INTO g_per_nic_r_ytd_id;
5123   CLOSE get_defined_balance_id;
5124 ---
5125 
5126   OPEN get_defined_balance_id('NI D Able LEL','_PER_TD_YTD');
5127   FETCH get_defined_balance_id INTO g_per_nid_lel_id;
5128   CLOSE get_defined_balance_id;
5129 
5130   OPEN get_defined_balance_id('NI D Able ET','_PER_TD_YTD');
5131   FETCH get_defined_balance_id INTO g_per_nid_et_id;
5132   CLOSE get_defined_balance_id;
5133 
5134   OPEN get_defined_balance_id('NI D Able UAP','_PER_TD_YTD');
5135   FETCH get_defined_balance_id INTO g_per_nid_uap_id;
5136   CLOSE get_defined_balance_id;
5137 
5138   OPEN get_defined_balance_id('NI D Able UEL','_PER_TD_YTD');
5139   FETCH get_defined_balance_id INTO g_per_nid_uel_id;
5140   CLOSE get_defined_balance_id;
5141 
5142   OPEN get_defined_balance_id('NI D Employee','_PER_TD_YTD');
5143   FETCH get_defined_balance_id INTO g_per_nid_e_ytd_id;
5144   CLOSE get_defined_balance_id;
5145 
5146   OPEN get_defined_balance_id('NI D Employer','_PER_TD_YTD');
5147   FETCH get_defined_balance_id INTO g_per_nid_r_ytd_id;
5148   CLOSE get_defined_balance_id;
5149 ---
5150   OPEN get_defined_balance_id('NI E Able LEL','_PER_TD_YTD');
5151   FETCH get_defined_balance_id INTO g_per_nie_lel_id;
5152   CLOSE get_defined_balance_id;
5153 
5154   OPEN get_defined_balance_id('NI E Able ET','_PER_TD_YTD');
5155   FETCH get_defined_balance_id INTO g_per_nie_et_id;
5156   CLOSE get_defined_balance_id;
5157 
5158   OPEN get_defined_balance_id('NI E Able UAP','_PER_TD_YTD');
5159   FETCH get_defined_balance_id INTO g_per_nie_uap_id;
5160   CLOSE get_defined_balance_id;
5161 
5162   OPEN get_defined_balance_id('NI E Able UEL','_PER_TD_YTD');
5163   FETCH get_defined_balance_id INTO g_per_nie_uel_id;
5164   CLOSE get_defined_balance_id;
5165 
5166   OPEN get_defined_balance_id('NI E Employee','_PER_TD_YTD');
5167   FETCH get_defined_balance_id INTO g_per_nie_e_ytd_id;
5168   CLOSE get_defined_balance_id;
5169 
5170   OPEN get_defined_balance_id('NI E Employer','_PER_TD_YTD');
5171   FETCH get_defined_balance_id INTO g_per_nie_r_ytd_id;
5172   CLOSE get_defined_balance_id;
5173 
5174 ---
5175   OPEN get_defined_balance_id('NI J Able LEL','_PER_TD_YTD');
5176   FETCH get_defined_balance_id INTO g_per_nij_lel_id;
5177   CLOSE get_defined_balance_id;
5178 
5179   OPEN get_defined_balance_id('NI J Able ET','_PER_TD_YTD');
5180   FETCH get_defined_balance_id INTO g_per_nij_et_id;
5181   CLOSE get_defined_balance_id;
5182 
5183   OPEN get_defined_balance_id('NI J Able UAP','_PER_TD_YTD');
5184   FETCH get_defined_balance_id INTO g_per_nij_uap_id;
5185   CLOSE get_defined_balance_id;
5186 
5187   OPEN get_defined_balance_id('NI J Able UEL','_PER_TD_YTD');
5188   FETCH get_defined_balance_id INTO g_per_nij_uel_id;
5189   CLOSE get_defined_balance_id;
5190 
5191   OPEN get_defined_balance_id('NI J Employee','_PER_TD_YTD');
5192   FETCH get_defined_balance_id INTO g_per_nij_e_ytd_id;
5193   CLOSE get_defined_balance_id;
5194 
5195   OPEN get_defined_balance_id('NI J Employer','_PER_TD_YTD');
5196   FETCH get_defined_balance_id INTO g_per_nij_r_ytd_id;
5197   CLOSE get_defined_balance_id;
5198 ---
5199   OPEN get_defined_balance_id('NI L Able LEL','_PER_TD_YTD');
5200   FETCH get_defined_balance_id INTO g_per_nil_lel_id;
5201   CLOSE get_defined_balance_id;
5202 
5203   OPEN get_defined_balance_id('NI L Able ET','_PER_TD_YTD');
5204   FETCH get_defined_balance_id INTO g_per_nil_et_id;
5205   CLOSE get_defined_balance_id;
5206 
5207   OPEN get_defined_balance_id('NI L Able UAP','_PER_TD_YTD');
5208   FETCH get_defined_balance_id INTO g_per_nil_uap_id;
5209   CLOSE get_defined_balance_id;
5210 
5211   OPEN get_defined_balance_id('NI L Able UEL','_PER_TD_YTD');
5212   FETCH get_defined_balance_id INTO g_per_nil_uel_id;
5213   CLOSE get_defined_balance_id;
5214 
5215   OPEN get_defined_balance_id('NI L Employee','_PER_TD_YTD');
5216   FETCH get_defined_balance_id INTO g_per_nil_e_ytd_id;
5217   CLOSE get_defined_balance_id;
5218 
5219   OPEN get_defined_balance_id('NI L Employer','_PER_TD_YTD');
5220   FETCH get_defined_balance_id INTO g_per_nil_r_ytd_id;
5221   CLOSE get_defined_balance_id;
5222 
5223 -- Run Values for Ni Balances
5224   OPEN get_defined_balance_id('NI A Able','_ASG_RUN');
5225   FETCH get_defined_balance_id INTO g_nia_able_id_run;
5226   CLOSE get_defined_balance_id;
5227 
5228   OPEN get_defined_balance_id('NI A Employee','_ASG_RUN');
5229   FETCH get_defined_balance_id INTO g_nia_e_id_run;
5230   CLOSE get_defined_balance_id;
5231 
5232   OPEN get_defined_balance_id('NI B Able','_ASG_RUN');
5233   FETCH get_defined_balance_id INTO g_nib_able_id_run;
5234   CLOSE get_defined_balance_id;
5235 
5236   OPEN get_defined_balance_id('NI B Employee','_ASG_RUN');
5237   FETCH get_defined_balance_id INTO g_nib_e_id_run;
5238   CLOSE get_defined_balance_id;
5239 
5240   OPEN get_defined_balance_id('NI C Able','_ASG_RUN');
5241   FETCH get_defined_balance_id INTO g_nic_able_id_run;
5242   CLOSE get_defined_balance_id;
5243 
5244   OPEN get_defined_balance_id('NI C Employee','_ASG_RUN');
5245   FETCH get_defined_balance_id INTO g_nic_e_id_run;
5246   CLOSE get_defined_balance_id;
5247 
5248   OPEN get_defined_balance_id('NI D Able','_ASG_RUN');
5249   FETCH get_defined_balance_id INTO g_nid_able_id_run;
5250   CLOSE get_defined_balance_id;
5251 
5252   OPEN get_defined_balance_id('NI D Employee','_ASG_RUN');
5253   FETCH get_defined_balance_id INTO g_nid_e_id_run;
5254   CLOSE get_defined_balance_id;
5255 
5256   OPEN get_defined_balance_id('NI E Able','_ASG_RUN');
5257   FETCH get_defined_balance_id INTO g_nie_able_id_run;
5258   CLOSE get_defined_balance_id;
5259 
5260   OPEN get_defined_balance_id('NI E Employee','_ASG_RUN');
5261   FETCH get_defined_balance_id INTO g_nie_e_id_run;
5262   CLOSE get_defined_balance_id;
5263 
5264   OPEN get_defined_balance_id('NI J Able','_ASG_RUN');
5265   FETCH get_defined_balance_id INTO g_nij_able_id_run;
5266   CLOSE get_defined_balance_id;
5267 
5268   OPEN get_defined_balance_id('NI J Employee','_ASG_RUN');
5269   FETCH get_defined_balance_id INTO g_nij_e_id_run;
5270   CLOSE get_defined_balance_id;
5271 
5272   OPEN get_defined_balance_id('NI L Able','_ASG_RUN');
5273   FETCH get_defined_balance_id INTO g_nil_able_id_run;
5274   CLOSE get_defined_balance_id;
5275 
5276   OPEN get_defined_balance_id('NI L Employee','_ASG_RUN');
5277   FETCH get_defined_balance_id INTO g_nil_e_id_run;
5278   CLOSE get_defined_balance_id;
5279 
5280   hr_utility.set_location('Leaving '|| l_proc, 10);
5281 
5282 EXCEPTION
5283 WHEN OTHERS THEN
5284   fnd_file.put_line(fnd_file.LOG,'Exception:' || SQLCODE || ' - ' || SQLERRM);
5285   hr_utility.raise_error;
5286 END archinit;
5287 --
5288 --
5289 /*--------------------------------------------------------------------------
5290 Name      : archive_data
5291 Purpose   : This sets up the contexts needed for the live (non-archive)
5292 database items
5293 Arguments :
5294 Notes     : Every possible context for a specific assignment action has to
5295 be added to the PL/SQL table
5296 --------------------------------------------------------------------------*/
5297 --
5298 --
5299 PROCEDURE archive_code(
5300     p_assactid       IN NUMBER,
5301     p_effective_date IN DATE)
5302 IS
5303   l_proc      CONSTANT VARCHAR2(35):= g_package||'archive_code';
5304   error_found EXCEPTION;
5305   already_processed EXCEPTION;
5306   l_archive_tab action_info_table;
5307   l_archive_tab_det1 action_info_table;
5308   l_archive_tab_det2 action_info_table;
5309   l_archive_tab_ni_det action_info_table;
5310   l_archive_tab_ni_det_1 action_info_table;
5311   l_archive_tab_det1_local action_info_table;
5312   l_archive_tab_det2_local action_info_table;
5313 
5314   l_archive_person     BOOLEAN;
5315   l_archive_addr       BOOLEAN;
5316   l_archive_asg        BOOLEAN;
5317   l_per_addr_val_flag  VARCHAR2(1);
5318   l_fps_etext_asg_flag VARCHAR2(1);
5319   l_fps_etext_ni_flag  VARCHAR2(1);
5320   l_archive_asg_det1   BOOLEAN;
5321   l_archive_asg_det2   BOOLEAN;
5322   l_archive_asg_ni_det BOOLEAN;
5323 
5324 	l_asg_id number;
5325 	l_person_id                  NUMBER;
5326 	l_last_asg_action_id number;
5327 	l_last_effective_date date;
5328 	l_asg_no 		per_assignments_f.assignment_number%TYPE;
5329 
5330 	l_last_fps_pactid number := NULL;
5331 	l_last_fps_effdate date;
5332 	l_flag VARCHAR2(1) := 'N';
5333 	l_flag_ni VARCHAR2(1) := 'N';
5334 	l_flag_strt VARCHAR2(1) := 'N';
5335 	l_asg_val_flag VARCHAR2(1);
5336 	l_ni_val_flag  VARCHAR2(1);
5337 	l_ni_val_flag1  VARCHAR2(1) := 'N';
5338 	l_report_type VARCHAR2(20);
5339 
5340 	l_paye_flag VARCHAR2(1);
5341 	l_ni_flag VARCHAR2(1);
5342 
5343 	i_count number;
5344 
5345 cursor fetch_asg_details is
5346 select paaf.assignment_id ,
5347        paaf.person_id ,
5348       trim(NVL(pap.per_information9,'N')) per_ni_agg_flag,
5349       trim(NVL(pap.per_information10,'N')) per_paye_agg_flag,
5350       assignment_number
5351  from pay_assignment_actions paa,
5352 per_all_assignments_f paaf,
5353 per_all_people_f pap
5354 where assignment_action_id = p_assactid
5355 and paaf.assignment_id = paa.assignment_id
5356 and pap.person_id = paaf.person_id
5357 and    paaf.effective_start_date =
5358         ( select max(asg2.effective_start_date)
5359           from   per_all_assignments_f asg2
5360           where  asg2.assignment_id         = paaf.assignment_id
5361           and    asg2.assignment_type       = 'E'
5362           and    asg2.effective_start_date <= g_end_year
5363         )
5364     AND g_end_year BETWEEN pap.effective_start_date AND pap.effective_end_date;
5365 
5366 
5367 --Cursor to fetch Latest assignment action after fps run before end of tax year
5368 CURSOR csr_latest_asg_action(asg_id number) is
5369 SELECT
5370         to_number (substr (max (lpad (paa.action_sequence, 15
5371                                     , '0')
5372                                 || paa.assignment_action_id), 16))
5373       , max (pact.effective_date) effective_date
5374 FROM    pay_assignment_actions paa
5375       , pay_payroll_actions pact
5376       , per_time_periods ptp
5377 WHERE   paa.assignment_id = asg_id
5378 AND     paa.payroll_action_id = pact.payroll_action_id
5379 AND     pact.time_period_id = ptp.time_period_id
5380 AND     pact.action_type IN ('Q', 'R', 'B'
5381                            , 'I', 'V')
5382 AND     paa.action_status IN ('C', 'S')
5383 AND     ptp.regular_payment_date
5384         BETWEEN g_start_year
5385         AND     g_end_year;
5386 
5387 
5388 -- To get maximum assignment action id for the person
5389 cursor csr_get_max_asg_actid_person(person_id number) is
5390 SELECT  /*+ USE_NL(paa, pact, ptp) */
5391         to_number (substr (max (lpad (paa.action_sequence, 15
5392                                     , '0')
5393                                 || paa.assignment_action_id), 16))
5394       , max (pact.effective_date) effective_date
5395 
5396 FROM   per_all_assignments_f paaf,
5397        pay_assignment_actions paa
5398       , pay_payroll_actions pact
5399       , per_time_periods ptp,
5400 				pay_all_payrolls_f pay,
5401         hr_soft_coding_keyflex sck
5402 WHERE   paa.assignment_id = paaf.assignment_id
5403 and     paaf.person_id = person_id
5404 AND     paa.payroll_action_id = pact.payroll_action_id
5405 AND     pact.time_period_id = ptp.time_period_id
5406 AND     pact.action_type IN ('Q', 'R', 'B'
5407                            , 'I', 'V')
5408 AND     paa.action_status IN ('C', 'S')
5409 AND     pay.payroll_id = paaf.payroll_id
5410 and     pay.soft_coding_keyflex_id = sck.soft_coding_keyflex_id
5411 and     upper(g_tax_ref) = upper(sck.segment1)
5412 AND     ptp.regular_payment_date
5413         BETWEEN g_start_year
5414         AND     g_end_year
5415 AND paaf.effective_start_date =
5416        ( select max(asg2.effective_start_date)
5417          from   per_all_assignments_f asg2
5418          where  asg2.assignment_id         = paaf.assignment_id
5419          and    asg2.assignment_type       = 'E'
5420          and    asg2.effective_start_date <= g_end_year
5421        );
5422 
5423 --Cursor to fetch Latest FPS Run date and Payroll action ID for the assignment
5424 cursor csr_latest_fps(asg_id number) is
5425 select ppa.effective_date,ppa.payroll_action_id,ppa.report_type
5426 from pay_assignment_actions paa,
5427 pay_payroll_actions ppa
5428 where paa.assignment_id = asg_id
5429 and paa.action_status ='C'
5430 and ppa.payroll_action_id = paa.payroll_action_id
5431 and ppa.report_type in ( 'RTI_FPS_REP' , 'RTI_EYU_REP_13')
5432 and UPPER(g_tax_ref) = UPPER(SUBSTR(pay_gb_eoy_archive.get_parameter(ppa.legislative_parameters,'TAX_REF'),1,20))
5433 order by ppa.effective_date desc;
5434 
5435 --cursor to get person latest fps run
5436 cursor csr_latest_fps_payeagg(per_id number) is
5437 select ppa.effective_date,ppa.payroll_action_id,ppa.report_type
5438 from pay_assignment_actions paa,
5439 pay_payroll_actions ppa,
5440 per_all_assignments_f paaf ,
5441 pay_all_payrolls_f pay,
5442 hr_soft_coding_keyflex sck
5443 where  paaf.person_id = per_id
5444 AND    pay.payroll_id = paaf.payroll_id
5445 and    pay.soft_coding_keyflex_id = sck.soft_coding_keyflex_id
5446 and    upper(g_tax_ref) = upper(sck.segment1)
5447 and paa.assignment_id = paaf.assignment_id
5448 and paa.action_status ='C'
5449 and ppa.payroll_action_id = paa.payroll_action_id
5450 and ppa.report_type in ( 'RTI_FPS_REP' , 'RTI_EYU_REP_13')
5451 and    paaf.effective_start_date =
5452         ( select max(asg2.effective_start_date)
5453           from   per_all_assignments_f asg2
5454           where  asg2.assignment_id         = paaf.assignment_id
5455           and    asg2.assignment_type       = 'E'
5456           and    asg2.effective_start_date <= g_end_year
5457         )
5458 and    g_end_year between pay.effective_start_date and pay.effective_end_date
5459 order by ppa.effective_date desc;
5460 
5461 cursor csr_is_retry_request is
5462 select 'Y' from
5463 pay_assignment_actions
5464 where assignment_action_id = p_assactid
5465 AND ACTION_STATUS = 'M';
5466 
5467  CURSOR csr_get_starter_details(p_asg_id NUMBER)
5468   IS
5469     SELECT assignment_extra_info_id l_aei_id,
5470       aei_information8 starter_flag,
5471       aei_information9 pensioner_flag,
5472       aei_information19 expat_flag,
5473       object_version_number l_ovn
5474     FROM per_assignment_extra_info
5475     WHERE assignment_id  = p_asg_id
5476     AND information_type = 'GB_RTI_ASG_DETAILS';
5477 
5478 cursor csr_fps_check(p_asg_id number) is
5479 select count(*)
5480 from pay_assignment_actions paa,
5481 pay_payroll_actions ppa
5482 where paa.assignment_id = p_asg_id
5483 and paa.action_status ='C'
5484 and paa.assignment_action_id <> p_assactid
5485 and ppa.payroll_action_id = paa.payroll_action_id
5486 and ppa.report_type in ( 'RTI_FPS_REP' , 'RTI_EYU_REP_13')
5487 order by ppa.effective_date desc;
5488 
5489 l_retry_req_flag varchar2(1) := 'N';
5490 l_new_starter csr_get_starter_details%rowtype;
5491 l_ovn           NUMBER;
5492 l_aei_id        NUMBER;
5493 l_fps_check NUMBER;
5494 
5495 BEGIN
5496 --archive_code begins here
5497   hr_utility.set_location('Entering the debug: '||l_proc,1);
5498   hr_utility.trace('p_assactid: '||p_assactid);
5499   hr_utility.trace('p_effective_date: '||p_effective_date);
5500 
5501 				open fetch_asg_details;
5502 					fetch fetch_asg_details into l_asg_id,l_person_id,l_ni_flag,l_paye_flag,l_asg_no;
5503         close fetch_asg_details;
5504 
5505        hr_utility.trace('l_asg_id    : '||l_asg_id);
5506        hr_utility.trace('l_person_id : '||l_person_id);
5507        hr_utility.trace('l_ni_flag   : '||l_ni_flag);
5508        hr_utility.trace('l_paye_flag : '||l_paye_flag);
5509        hr_utility.trace('l_asg_no    : '||l_asg_no);
5510 
5511 --RETRY LOGIC
5512 l_retry_req_flag := NULL;
5513    open csr_is_retry_request;
5514    fetch csr_is_retry_request into l_retry_req_flag;
5515    close csr_is_retry_request;
5516 
5517 if l_retry_req_flag = 'Y' then
5518 
5519 hr_utility.trace('RETRY : l_retry_req_flag: '|| l_retry_req_flag);
5520 open csr_get_starter_details(l_asg_id);
5521 fetch csr_get_starter_details into l_new_starter;
5522 close csr_get_starter_details;
5523 
5524 hr_utility.trace('RETRY : l_new_starter.l_aei_id       : '|| l_new_starter.l_aei_id);
5525 hr_utility.trace('RETRY : l_new_starter.l_ovn          : '|| l_new_starter.l_ovn);
5526 hr_utility.trace('RETRY : l_new_starter.starter_flag   : '|| l_new_starter.starter_flag);
5527 hr_utility.trace('RETRY : l_new_starter.pensioner_flag : '|| l_new_starter.pensioner_flag);
5528 hr_utility.trace('RETRY : l_new_starter.expat_flag     : '|| l_new_starter.expat_flag);
5529 
5530 if l_new_starter.starter_flag = 'Y'  OR l_new_starter.pensioner_flag = 'Y' OR l_new_starter.expat_flag = 'Y'  THEN
5531 
5532 hr_utility.trace('RTI Sent checked.');
5533 
5534 open csr_fps_check(l_asg_id);
5535 fetch csr_fps_check into l_fps_check;
5536 close csr_fps_check;
5537 
5538 if l_fps_check = 0 then
5539 
5540 			hr_utility.trace('RETRY : Reset is required.');
5541 
5542 	--EXPAT Flag
5543     IF l_new_starter.starter_flag = 'Y' THEN
5544       l_ovn                             := get_version(l_asg_id,'GB_RTI_ASG_DETAILS',l_new_starter.l_aei_id);
5545       IF l_ovn                          IS NOT NULL THEN
5546         hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false, p_object_version_number => l_ovn, p_assignment_extra_info_id => l_new_starter.l_aei_id, p_aei_information_category => 'GB_RTI_ASG_DETAILS',
5547         p_aei_information8 => 'N');
5548       END IF;
5549     END IF;
5550     --PENSIONER Flag
5551     IF l_new_starter.pensioner_flag = 'Y' THEN
5552       l_ovn                              := get_version(l_asg_id,'GB_RTI_ASG_DETAILS',l_new_starter.l_aei_id);
5553       IF l_ovn                           IS NOT NULL THEN
5554         hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false, p_object_version_number => l_ovn, p_assignment_extra_info_id => l_new_starter.l_aei_id, p_aei_information_category => 'GB_RTI_ASG_DETAILS',
5555         p_aei_information9 => 'N');
5556       END IF;
5557     END IF;
5558     --STARTER Flag
5559     IF l_new_starter.expat_flag = 'Y' THEN
5560       l_ovn                             := get_version(l_asg_id,'GB_RTI_ASG_DETAILS',l_new_starter.l_aei_id);
5561       IF l_ovn                          IS NOT NULL THEN
5562         hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false, p_object_version_number => l_ovn, p_assignment_extra_info_id => l_new_starter.l_aei_id, p_aei_information_category => 'GB_RTI_ASG_DETAILS',
5563         p_aei_information19 => 'N');
5564       END IF;
5565     END IF;
5566 
5567 end if; --l_fps_check
5568 
5569 end if;
5570 
5571 end if; --l_retry_req_flag
5572 
5573 --RETRY Logic ends here
5574 
5575   if l_paye_flag = 'Y' then
5576 				open csr_latest_fps_payeagg(l_person_id);
5577 					fetch csr_latest_fps_payeagg into l_last_fps_effdate,l_last_fps_pactid,l_report_type;
5578         close csr_latest_fps_payeagg;
5579   else
5580 				open csr_latest_fps(l_asg_id);
5581 					fetch csr_latest_fps into l_last_fps_effdate,l_last_fps_pactid,l_report_type;
5582         close csr_latest_fps;
5583   end if;
5584 
5585 			 hr_utility.set_location('l_last_fps_pactid ' || l_last_fps_pactid ,999);
5586 			 hr_utility.set_location('l_last_fps_effdate ' || l_last_fps_effdate ,999);
5587 			 hr_utility.set_location('l_report_type ' || l_report_type ,999);
5588 
5589 			if l_last_fps_effdate is null then
5590 				l_last_fps_effdate := g_start_year;
5591 			end if;
5592 
5593 			 hr_utility.set_location('l_last_fps_effdate : ' || l_last_fps_effdate ,999);
5594 
5595 OPEN csr_latest_asg_action(l_asg_id);
5596       FETCH csr_latest_asg_action
5597       INTO l_last_asg_action_id,
5598         l_last_effective_date;
5599 close csr_latest_asg_action;
5600 
5601     hr_utility.trace('l_asg_id : '||l_asg_id);
5602     hr_utility.set_location('l_last_asg_action_id '||l_last_asg_action_id,10);
5603     hr_utility.set_location('l_last_effective_date '||l_last_effective_date,10);
5604 
5605     hr_utility.set_location('Fetching person details ',10);
5606     l_archive_person := fetch_person_rec(p_assactid, l_last_effective_date,l_archive_tab(0));
5607 
5608     hr_utility.set_location('Fetching address details ',20);
5609     l_archive_addr := fetch_address_rec(l_archive_tab(0).person_id,
5610                                         l_archive_tab(0).assignment_id,
5611                                         l_last_effective_date,
5612                                         l_archive_tab(1));
5613 
5614     hr_utility.set_location('Fetching Assignment details ',30);
5615     l_archive_asg_det1 := fetch_asg_det1(
5616                                              l_last_effective_date,
5617                                              l_last_asg_action_id,
5618 																						 p_effective_date,
5619                                              l_archive_tab(0),
5620                                              l_archive_tab(2));
5621 
5622 if NVL(l_archive_tab(0).act_info10,'N') = 'Y' then
5623 
5624 OPEN csr_get_max_asg_actid_person(l_archive_tab(0).person_id);
5625       FETCH csr_get_max_asg_actid_person
5626       INTO l_last_asg_action_id,
5627         l_last_effective_date;
5628 close csr_get_max_asg_actid_person;
5629 
5630 end if;
5631 
5632     hr_utility.trace('l_asg_id : '||l_asg_id);
5633     hr_utility.set_location('l_last_asg_action_id '||l_last_asg_action_id,10);
5634     hr_utility.set_location('l_last_effective_date '||l_last_effective_date,10);
5635 
5636     hr_utility.set_location('Fetching Assignment details 2',30);
5637     l_archive_asg_det2 := fetch_asg_det2(l_last_asg_action_id,l_asg_id,l_last_effective_date,l_archive_tab(2));
5638 
5639     hr_utility.set_location('Fetching Ni details 2',30);
5640     l_archive_asg_det2 := fetch_ni_det(l_last_asg_action_id,l_asg_id,l_last_effective_date,l_archive_tab_ni_det);
5641 
5642 
5643 
5644 if l_last_fps_pactid is not null then
5645 
5646 			hr_utility.set_location('FPS/EYU Run Exist.',999);
5647 
5648 			calculate_diff (l_last_fps_pactid , l_report_type,l_asg_id, l_archive_tab ,l_flag);
5649 
5650 			if l_report_type = 'RTI_FPS_REP' and NVL(l_archive_tab(0).act_info10,'N') = 'Y' then
5651 			calculate_diff_ni_payeagg (l_last_fps_pactid , l_report_type,l_asg_id,l_archive_tab(0).person_id,l_archive_tab_ni_det ,l_flag_ni);
5652 			else
5653 			calculate_diff_ni (l_last_fps_pactid , l_report_type,l_asg_id,l_archive_tab_ni_det ,l_flag_ni);
5654 			end if;
5655 
5656 else
5657 			supressing_zeros_new_starter(l_archive_tab,l_flag_strt);
5658 end if;
5659 
5660     fetch_nic_refund(l_asg_id,l_archive_tab_ni_det);
5661 
5662 			 hr_utility.set_location('l_flag ' || l_flag ,999);
5663 			 hr_utility.set_location('l_flag_ni ' || l_flag_ni ,999);
5664 
5665 -- no payment for the assignment exist
5666 if l_last_fps_pactid is null and l_flag_strt = 'N' then
5667 		populate_run_msg(p_assactid, 'No payment has been made for assignment ' || l_asg_no || '.');
5668     fnd_file.put_line (fnd_file.LOG,'No payment has been made for assignment ' || l_asg_no || '.');
5669     raise error_found;
5670 ELSIF l_last_fps_pactid is not null and l_flag = 'N' and l_flag_ni = 'N' then
5671 		populate_run_msg(p_assactid, 'No payment has been made for assignment ' || l_asg_no || '.');
5672     fnd_file.put_line (fnd_file.LOG,'No payment has been made for assignment ' || l_asg_no || '.');
5673     raise error_found;
5674 end if;
5675 
5676 if l_last_fps_pactid is null or (l_flag = 'Y' or l_flag_ni = 'Y') then
5677 
5678 			 hr_utility.set_location('Calling validations ',999);
5679     set_address_fields(l_archive_tab(1),l_archive_tab(0),l_archive_tab(2));
5680 
5681  person_address_validations(p_assactid, l_last_effective_date, l_archive_tab,l_asg_no,l_per_addr_val_flag);
5682 			 hr_utility.set_location('l_per_addr_val_flag : ' || l_per_addr_val_flag ,999);
5683  assignment_validations(p_assactid, l_last_effective_date, l_archive_tab,l_asg_no,l_asg_val_flag);
5684 			 hr_utility.set_location('l_asg_val_flag      : ' || l_asg_val_flag ,999);
5685 
5686 IF l_archive_tab_ni_det.count > 0 THEN
5687  FOR i  IN l_archive_tab_ni_det.first .. l_archive_tab_ni_det.last
5688     LOOP
5689    			  hr_utility.set_location('i       : ' || i ,999);
5690 		      ni_validations(p_assactid, l_last_effective_date, l_archive_tab_ni_det,i,l_asg_no,l_ni_val_flag);
5691    			  hr_utility.set_location('l_ni_val_flag       : ' || l_ni_val_flag ,999);
5692 					if l_ni_val_flag = 'Y' then
5693 						l_ni_val_flag1 := 'Y';
5694 					end if;
5695  END LOOP;
5696 END IF;
5697 
5698 if l_per_addr_val_flag = 'N' and l_asg_val_flag ='N' and l_ni_val_flag1 = 'N' then
5699       hr_utility.set_location('Archiving - assignment action id ' || p_assactid ,999);
5700       insert_archive_row(p_assactid, p_effective_date,l_archive_tab);
5701       insert_archive_row(p_assactid, p_effective_date,l_archive_tab_ni_det);
5702 else
5703 		 hr_utility.set_location('Validation failed - assignment action id ' || p_assactid ,999);
5704      raise error_found;
5705 end if;
5706 
5707 end if;
5708 
5709 
5710 EXCEPTION
5711 WHEN error_found THEN
5712   reset_flag('GB_RTI_ASG_DETAILS',g_reset_flag_type, p_assactid);
5713   fnd_file.put_line(fnd_file.LOG,'Errors found while archiving data.');
5714   raise_application_error(-20001,'Errors found while archiving data.');
5715 WHEN OTHERS THEN
5716     fnd_file.put_line(fnd_file.LOG,'An error encountered was - '||SQLERRM);
5717   	raise_application_error(-20001,'An error encountered was - '||SQLERRM);
5718 END archive_code;
5719 --
5720 --
5721 PROCEDURE deinitialization_code
5722   (
5723     pactid IN NUMBER
5724   )
5725 IS
5726   l_proc    CONSTANT VARCHAR2(50) := g_package || 'deinitialization_code';
5727   l_counter NUMBER;
5728   l_flag      VARCHAR2(1);
5729   l_exp EXCEPTION;
5730   errbuf varchar2(100);
5731   retcode number;
5732   l_econ varchar2(100);
5733   l_person_count number :=0;
5734   l_error_flag VARCHAR2(1);
5735   CURSOR csr_is_etext_report
5736   IS
5737     SELECT report_type
5738     FROM pay_payroll_actions pact
5739     WHERE pact.payroll_action_id = pactid;
5740   l_is_etext_report VARCHAR2(50);
5741   l_request_id fnd_concurrent_requests.request_id%TYPE;
5742   xml_layout BOOLEAN;
5743 
5744   -- Cursor to fetch Employer details
5745   CURSOR csr_payroll_details(pactid NUMBER)
5746   IS
5747     SELECT NVL(UPPER(hoi.org_information11),' ') sender_id,
5748       DECODE(SUBSTR(pact.legislative_parameters,instr(pact.legislative_parameters,'TEST=') + 5,1) ,'N',' ','Y','1') test_indicator,
5749       fnd_number.number_to_canonical(pact.request_id) request_id,
5750       NVL(upper(SUBSTR(ltrim(hoi.org_information3),1,35)),' ') employer_name,
5751       NVL(upper(SUBSTR(ltrim(SUBSTR(hoi.org_information1,4,11),'/'),1,10)),' ') tax_ref_no,
5752       lpad(SUBSTR(hoi.ORG_INFORMATION1,0,instr(hoi.ORG_INFORMATION1,'/')-1),3,0) tax_office_no,
5753       DECODE(PAY_GB_EOY_MAGTAPE.get_payroll_version, ' ', '0', PAY_GB_EOY_MAGTAPE.get_payroll_version) payroll_ver,
5754       (lpad(SUBSTR(hoi.ORG_INFORMATION6,0,instr(hoi.ORG_INFORMATION6,'P')-1),3,0)
5755       || 'P'
5756       || SUBSTR(hoi.ORG_INFORMATION6,instr(hoi.ORG_INFORMATION6,'P')     +1,1)
5757       || lpad(SUBSTR(hoi.ORG_INFORMATION6,instr(hoi.ORG_INFORMATION6,'P')+2,LENGTH(hoi.ORG_INFORMATION6)-3-(instr(hoi.ORG_INFORMATION6,'P')-1)),7,0)
5758       || SUBSTR(hoi.ORG_INFORMATION6,LENGTH(hoi.ORG_INFORMATION6),1) ) AS acc_ref_no,
5759       hoi.org_information7 econ_number,
5760       pact.business_group_id bus_grp_id,
5761       pact.action_parameter_group_id act_param_grp_id,
5762       org_information19 service_company
5763     FROM pay_payroll_actions pact,
5764       hr_organization_information hoi
5765     WHERE pact.payroll_action_id        =pactid
5766     AND pact.business_group_id          = hoi.organization_id
5767     AND hoi.org_information_context     = 'Tax Details References'
5768     AND NVL(hoi.org_information10,'UK') = 'UK'
5769     AND SUBSTR(pact.legislative_parameters,instr(pact.legislative_parameters,'TAX_REF=') + 8, instr(pact.legislative_parameters
5770       ||' ',' ', instr(pact.legislative_parameters,'TAX_REF=')                           +8) - instr(pact.legislative_parameters, 'TAX_REF=') - 8) = hoi.org_information1;
5771 
5772 
5773   l_payroll_rec csr_payroll_details%rowtype;
5774   l_action_info_id          NUMBER(15);
5775   l_ovn                     NUMBER;
5776 
5777 
5778   ---------------------
5779   ---------------------
5780 
5781 PROCEDURE write_header(
5782     report_type VARCHAR2)
5783 IS
5784   l_token     VARCHAR2(255);
5785   l_addr1     VARCHAR2(255);
5786   l_addr2     VARCHAR2(255);
5787   l_addr3     VARCHAR2(255);
5788   l_addr4     VARCHAR2(255);
5789   l_form      VARCHAR2(40);
5790   l_tax_ref   VARCHAR2(20);
5791   l_urgent    VARCHAR2(2);
5792   l_test      VARCHAR2(2);
5793   l_temp      NUMBER;
5794   l_form_name VARCHAR2(100);
5795   l_payroll_name VARCHAR2(100);
5796   l_prepay_eff_date date;
5797 
5798   CURSOR csr_leg_param
5799   IS
5800     SELECT legislative_parameters para,
5801       fnd_number.number_to_canonical(request_id) control_id,
5802       report_type,
5803       business_group_id
5804     FROM pay_payroll_actions pact
5805     WHERE payroll_action_id = pactid;
5806 
5807   CURSOR csr_header_det(p_bus_id NUMBER, p_tax_ref VARCHAR2)
5808   IS
5809     SELECT NVL(hoi.org_information11,' ') sender_id,
5810       NVL(upper(hoi.org_information2),' ') hrmc_office,
5811       NVL(upper(hoi.org_information4),' ') er_addr,
5812       NVL(upper(hoi.org_information3),' ') er_name
5813     FROM hr_organization_information hoi
5814     WHERE hoi.organization_id           = p_bus_id
5815     AND hoi.org_information_context     = 'Tax Details References'
5816     AND NVL(hoi.org_information10,'UK') = 'UK'
5817     AND upper(hoi.org_information1)     = upper(p_tax_ref);
5818 
5819 CURSOR csr_payroll_details
5820   IS
5821     SELECT  ppf.PAYROLL_NAME
5822     from pay_payrolls_f ppf,pay_payroll_actions ppa
5823     WHERE ppa.payroll_action_id = pactid
5824     and ppf.payroll_id = SUBSTR(pay_gb_eoy_archive.get_parameter(ppa.legislative_parameters,'PAYROLL'),1,20);
5825 
5826   -- Cursor to fetch  Errored Records
5827   CURSOR get_asg_action_id_error
5828   IS
5829     SELECT DISTINCT paa.assignment_action_id asg_action_id,
5830       assignment_id
5831     FROM pay_payroll_actions ppa,
5832       pay_assignment_actions paa
5833     WHERE ppa.payroll_action_id = pactid -- pact_id
5834     AND paa.payroll_action_id   = ppa.payroll_action_id
5835     AND paa.action_status       = 'E';
5836 
5837 
5838 --CURSOR csr_err_msg(asg_action_id NUMBER)
5839 CURSOR csr_prepay_err_msg(asg_action_id NUMBER)
5840   IS
5841     SELECT DISTINCT line_text
5842     FROM pay_message_lines
5843     WHERE source_id = asg_action_id --9919881 --asg_action_id
5844     AND message_level <> 'W'-- p_message_level
5845     AND payroll_id  = 100;
5846 
5847   l_param csr_leg_param%rowtype;
5848   l_det csr_header_det%rowtype;
5849   l_err_msg varchar2(100);
5850 BEGIN
5851   OPEN csr_leg_param;
5852   FETCH csr_leg_param INTO l_param;
5853   CLOSE csr_leg_param;
5854 
5855   open csr_payroll_details;
5856   fetch csr_payroll_details into l_payroll_name;
5857   close csr_payroll_details;
5858 
5859   l_token   := 'TAX_REF';
5860   l_temp    := instr(l_param.para,l_token);
5861   l_tax_ref := SUBSTR(l_param.para, l_temp + LENGTH(l_token) + 1, instr(l_param.para||' ',' ',l_temp)
5862                                                              - (l_temp + LENGTH(l_token) + 1));
5863   l_token   := 'TEST';
5864   l_temp    := instr(l_param.para,l_token);
5865   l_test    := SUBSTR(l_param.para, l_temp + LENGTH(l_token) + 1, instr(l_param.para||' ',' ',l_temp)
5866                                                              - (l_temp + LENGTH(l_token) + 1));
5867 
5868   OPEN csr_header_det(l_param.business_group_id, l_tax_ref);
5869   FETCH csr_header_det INTO l_det;
5870   CLOSE csr_header_det;
5871 
5872   l_addr1           := l_det.er_addr;
5873   IF LENGTH(l_addr1) > 35 THEN
5874     l_temp          := instr(l_addr1, ',', 34 - LENGTH(l_addr1));
5875     IF l_temp        = 0 THEN
5876       l_temp        := 35;
5877     END IF;
5878     l_addr2 := ltrim(SUBSTR(l_addr1, 1 + l_temp),' ,');
5879     l_addr1 := SUBSTR(l_addr1,1,l_temp);
5880   END IF;
5881   IF LENGTH(l_addr2) > 35 THEN
5882     l_temp          := instr(l_addr2, ',', 34 - LENGTH(l_addr2));
5883     IF l_temp        = 0 THEN
5884       l_temp        := 35;
5885     END IF;
5886     l_addr3 := ltrim(SUBSTR(l_addr2, 1 + l_temp),' ,');
5887     l_addr2 := SUBSTR(l_addr2,1,l_temp);
5888   END IF;
5889   IF LENGTH(l_addr3) > 35 THEN
5890     l_temp          := instr(l_addr3, ',', 34 - LENGTH(l_addr3));
5891     IF l_temp        = 0 THEN
5892       l_temp        := 35;
5893     END IF;
5894     l_addr3 := ltrim(SUBSTR(l_addr3, 1 + l_temp),' ,');
5895     l_addr4 := SUBSTR(l_addr3,1,l_temp);
5896   END IF;
5897 
5898   l_form      := 'RTI_EYU_REP_13';
5899   l_form_name := 'RTI Earlier Year Update Process (EYU) 2012/13';
5900 
5901   fnd_file.put_line(fnd_file.output,' ');
5902   fnd_file.put_line(fnd_file.output,'EDI Transmission Report:');
5903   fnd_file.put_line(fnd_file.output,' ');
5904   fnd_file.put_line(fnd_file.output,rpad('Form Type : ',32) || l_form_name);
5905   fnd_file.put_line(fnd_file.output,rpad('Sender : ',32) || l_det.sender_id);
5906   fnd_file.put_line(fnd_file.output,rpad('Date : ',32) || TO_CHAR(sysdate, 'DD/MM/YYYY HH24:MI:SS'));
5907   fnd_file.put_line(fnd_file.output,rpad('Interchange Control Reference : ',32) || l_param.control_id);
5908   fnd_file.put_line(fnd_file.output,rpad('Test Transmission : ',32) || l_test);
5909   fnd_file.put_line(fnd_file.output,rpad('-',80,'-'));
5910   fnd_file.put_line(fnd_file.output,rpad('Employers PAYE Reference : ',32) || l_tax_ref);
5911   fnd_file.put_line(fnd_file.output,rpad('HRMC Office : ',32) || l_det.hrmc_office);
5912   fnd_file.put_line(fnd_file.output,rpad('Employer Name : ',32) || l_det.er_name);
5913   fnd_file.put_line(fnd_file.output,rpad('Employer Address : ',32) || l_addr1);
5914 
5915   IF LENGTH(l_addr2) > 0 THEN
5916     fnd_file.put_line(fnd_file.output,rpad(' ',32) || l_addr2);
5917   END IF;
5918   IF LENGTH(l_addr3) > 0 THEN
5919     fnd_file.put_line(fnd_file.output,rpad(' ',32) || l_addr3);
5920   END IF;
5921   IF LENGTH(l_addr4) > 0 THEN
5922     fnd_file.put_line(fnd_file.output,rpad(' ',32) || l_addr4);
5923   END IF;
5924 
5925   fnd_file.put_line(fnd_file.output,rpad('Payroll : ',32) || l_payroll_name);
5926 
5927 END write_header;
5928 ---
5929 PROCEDURE write_sub_header(
5930     p_type      VARCHAR2,
5931     report_type VARCHAR2)
5932 IS
5933 BEGIN
5934   fnd_file.put_line(fnd_file.output,NULL);
5935   IF p_type = 'E' THEN
5936     fnd_file.put_line(fnd_file.output,'The following employments have completed with error');
5937   ELSE
5938     fnd_file.put_line(fnd_file.output,'The following employments have completed successfully');
5939   END IF;
5940 
5941   IF p_type <> 'E' THEN --Completed records
5942     fnd_file.put_line(fnd_file.output,rpad('Assignment Number',19) || rpad('NI Number',11) || rpad('Employee Name', 51));
5943   ELSE -- errored records
5944     fnd_file.put_line(fnd_file.output,rpad('Assignment Number',19) || rpad('NI Number',11) || rpad('Employee Name', 51)
5945                       || rpad('Error Messages',30));
5946   END IF;
5947 
5948  IF p_type <> 'E' THEN -- Completed records
5949     fnd_file.put_line(fnd_file.output,rpad('-',18,'-') || ' ' || rpad('-',10,'-') || ' ' || rpad('-',50,'-'));
5950   ELSE -- errored records
5951     fnd_file.put_line(fnd_file.output,rpad('-',18,'-') || ' ' || rpad('-',10,'-') || ' ' || rpad('-',50,'-') || ' '
5952                      || rpad('-',30,'-'));
5953   END IF;
5954 END write_sub_header;
5955 ---
5956 PROCEDURE write_body(
5957     p_type VARCHAR2,
5958     pactid IN NUMBER,
5959     report_type VARCHAR2)
5960 IS
5961   l_count     NUMBER;
5962   i           NUMBER;
5963   l_temp      VARCHAR2(255);
5964   l_emp_count NUMBER;
5965   l_number    VARCHAR2(30);
5966   l_start_date DATE;
5967   l_end_date DATE;
5968 
5969   l_effective_date date;
5970 
5971   -- Cursor to fetch Completed records
5972   CURSOR get_asg_action_id
5973   IS
5974     SELECT DISTINCT paa.assignment_action_id asg_action_id,
5975       assignment_id
5976     FROM pay_payroll_actions ppa,
5977       pay_assignment_actions paa
5978     WHERE ppa.payroll_action_id = pactid -- pact_id
5979     AND paa.payroll_action_id   = ppa.payroll_action_id
5980     AND paa.action_status       = 'C';
5981 
5982   -- Cursor to fetch  Errored Records
5983   CURSOR get_asg_action_id_error
5984   IS
5985     SELECT DISTINCT paa.assignment_action_id asg_action_id,
5986       assignment_id
5987     FROM pay_payroll_actions ppa,
5988       pay_assignment_actions paa
5989     WHERE ppa.payroll_action_id = pactid -- pact_id
5990     AND paa.payroll_action_id   = ppa.payroll_action_id
5991     AND paa.action_status       = 'E';
5992 
5993   CURSOR get_person_details(c_assignment_id NUMBER)
5994   IS
5995 			SELECT DISTINCT pap.first_name f_name ,
5996       pap.middle_names m_name,
5997       pap.last_name l_name,
5998       pap.title title,
5999       paa.assignment_number emp_no,
6000       NVL(pap.national_identifier,'        ')ni_no,
6001       NVL(pap.employee_number,'    ') employee_number,
6002       TO_CHAR(paa.EFFECTIVE_START_DATE,'DD-MON-RRRR') start_date,
6003       paa.EFFECTIVE_END_DATE end_date, --to_char(paa.EFFECTIVE_END_DATE,'DD-MON-RRRR') end_date
6004       pap.person_id
6005     FROM per_all_assignments_f paa,
6006       per_assignment_status_types past,
6007       per_all_people_f pap
6008     WHERE paa.person_id                = pap.person_id
6009     AND paa.assignment_id              = c_assignment_id
6010     AND past.ASSIGNMENT_STATUS_TYPE_ID = paa.ASSIGNMENT_STATUS_TYPE_ID
6011     AND past.per_system_status        IN ('ACTIVE_ASSIGN', 'SUSP_ASSIGN') -- Added for Bug#13626488
6012      and    pap.effective_start_date =
6013        ( select max(pap2.effective_start_date) from
6014 				 per_all_people_f pap2
6015          where  pap2.person_id         = pap.person_id
6016          and    pap2.effective_start_date <= g_end_year
6017        )
6018      and    paa.effective_start_date =
6019        ( select max(asg2.effective_start_date)
6020          from   per_all_assignments_f asg2
6021          where  asg2.assignment_id         = paa.assignment_id
6022          and    asg2.assignment_type       = 'E'
6023          and    ASSIGNMENT_STATUS_TYPE_ID = paa.ASSIGNMENT_STATUS_TYPE_ID
6024          and    asg2.effective_start_date <= g_end_year
6025        )
6026 
6027     ORDER BY end_date DESC;
6028 
6029   -- Cursor to fetch error Messages from pay_message lines table
6030 --CURSOR csr_err_msg(asg_action_id NUMBER)
6031 CURSOR csr_err_msg(asg_action_id NUMBER)
6032   IS
6033     SELECT DISTINCT line_text
6034     FROM pay_message_lines
6035     WHERE source_id = asg_action_id
6036     --AND message_level <> 'W'-- p_message_level
6037     AND payroll_id  = 100;
6038 
6039   err_msg varchar2(255);--csr_err_msg%rowtype;
6040   et_asg_rec get_person_details%rowtype;
6041   asg_rec get_person_details%rowtype;
6042   l_et_temp VARCHAR2(255);
6043 BEGIN
6044   l_count := 0;
6045 
6046     fnd_file.put_line(fnd_file.LOG, 'l_effective_date: ' || l_effective_date);
6047   --Completed Records
6048   IF p_type        = 'ET' THEN
6049     FOR action_id IN get_asg_action_id
6050     LOOP
6051       OPEN get_person_details(action_id.assignment_id);
6052       FETCH get_person_details INTO et_asg_rec;
6053       CLOSE get_person_details;
6054       l_et_temp             := et_asg_rec.l_name || ', '|| et_asg_rec.title || ' ' || et_asg_rec.f_name || ' ' || et_asg_rec.m_name;
6055       IF et_asg_rec.end_date = fnd_date.canonical_to_date('4712/12/31 00:00:00') THEN
6056         fnd_file.put_line(fnd_file.output,rpad(et_asg_rec.emp_no, 18) || ' ' || rpad(et_asg_rec.ni_no ,10) || ' '
6057                           || rpad(l_et_temp,50) );
6058       ELSE
6059         fnd_file.put_line(fnd_file.output,rpad(et_asg_rec.emp_no, 18) || ' ' || rpad(et_asg_rec.ni_no ,10) || ' '
6060                           || rpad(l_et_temp,50));
6061       END IF;
6062       l_count := l_count + 1;
6063     END LOOP;
6064   END IF;
6065 
6066   -- Errored Records
6067   IF p_type        = 'E'THEN
6068     FOR action_id IN get_asg_action_id_error
6069     LOOP
6070       err_msg := ' ';
6071       -- Fetching details
6072       OPEN get_person_details(action_id.assignment_id);
6073       FETCH get_person_details INTO asg_rec;
6074       CLOSE get_person_details;
6075 
6076       OPEN csr_err_msg(action_id.asg_action_id);
6077       FETCH csr_err_msg INTO err_msg;
6078 			if csr_err_msg%notfound then
6079          SELECT LINE_TEXT into err_msg FROM pay_message_lines WHERE source_id = action_id.asg_action_id and rownum <=1;
6080       end if;
6081 
6082 	  l_error_flag := 'Y';
6083 
6084       l_temp             := asg_rec.l_name || ', '|| asg_rec.title || ' ' || asg_rec.f_name || ' ' || asg_rec.m_name;
6085       IF asg_rec.end_date = fnd_date.canonical_to_date('4712/12/31 00:00:00') THEN
6086         fnd_file.put_line(fnd_file.output,rpad(asg_rec.emp_no, 18) || ' ' || rpad(asg_rec.ni_no ,10) || ' ' || rpad(l_temp,50)
6087                           || ' ' || rpad(err_msg,120) ); -- error message
6088       ELSE
6089         fnd_file.put_line(fnd_file.output,rpad(asg_rec.emp_no, 18) || ' ' || rpad(asg_rec.ni_no ,10) || ' ' || rpad(l_temp,50)
6090                           || ' ' || rpad(err_msg,120) ); -- error message
6091       END IF;
6092 
6093       -- To print remaining error messgaes if any
6094       LOOP
6095         FETCH csr_err_msg INTO err_msg;
6096         EXIT
6097       WHEN csr_err_msg%notfound;
6098         fnd_file.put_line(fnd_file.output,rpad(' ',81,' ')||rpad(err_msg,120));
6099       END LOOP;
6100 
6101       CLOSE csr_err_msg;
6102       l_count := l_count + 1;
6103     END LOOP;
6104   END IF;
6105   fnd_file.put_line(fnd_file.output,NULL);
6106 
6107   IF p_type = 'E' THEN
6108     fnd_file.put_line(fnd_file.output,'Total Number of employments completed with error : ' || l_count);
6109   ELSE
6110     fnd_file.put_line(fnd_file.output,'Total Number of employments completed successfully :' || l_count);
6111   END IF;
6112   l_counter := l_counter + l_count;
6113 END write_body;
6114 ---
6115 PROCEDURE write_footer
6116 IS
6117 
6118   CURSOR get_person_count
6119   IS
6120     SELECT COUNT(DISTINCT(paaf.person_id))
6121     FROM pay_payroll_actions ppa,
6122       pay_assignment_actions paa,
6123       per_all_assignments_f paaf
6124     WHERE ppa.payroll_action_id = pactid -- pact_id
6125     AND paa.payroll_action_id   = ppa.payroll_action_id
6126     AND paa.action_status       = 'C'
6127     AND paaf.assignment_id      = paa.assignment_id;
6128 
6129 BEGIN
6130   OPEN get_person_count;
6131   FETCH get_person_count INTO l_person_count;
6132   CLOSE get_person_count;
6133 
6134   fnd_file.put_line(fnd_file.output,NULL);
6135   fnd_file.put_line(fnd_file.output,'Total Number of employments : ' || l_counter);
6136   fnd_file.put_line(fnd_file.output,NULL);
6137   fnd_file.put_line(fnd_file.output,'Total Number of employees successfully processed : ' || l_person_count);
6138 END write_footer;
6139 ---------------------
6140 BEGIN
6141   hr_utility.trace('Entering deinit: '||l_proc);
6142 
6143    -- To avoid re-archiving while Retry
6144    delete from pay_action_information pai
6145    where pai.action_context_id = pactid
6146    and pai.action_context_type = 'PA'
6147    and pai.action_information_category in ('RTI PAYROLL INFO');
6148 
6149    delete from pay_action_information pai
6150    where pai.action_context_id = pactid
6151    and pai.action_context_type = 'PA'
6152    and pai.action_information_category in ('GB_RTI_FPS_EXTRA_DET');
6153 
6154   OPEN csr_payroll_details(pactid);
6155   FETCH csr_payroll_details INTO l_payroll_rec;
6156   CLOSE csr_payroll_details;
6157 
6158   l_econ := l_payroll_rec.econ_number;
6159 
6160   --Footer Validations
6161   footer_validations(l_payroll_rec.econ_number,l_flag);
6162 
6163   pay_balance_pkg.set_context('PAYROLL_ACTION_ID',pactid);
6164   hr_utility.set_location('l_payroll_rec.bus_grp_id   = ' || l_payroll_rec.bus_grp_id,10);
6165   hr_utility.set_location('l_payroll_rec.act_param_grp_id   = ' || l_payroll_rec.act_param_grp_id,20);
6166   hr_utility.set_location('l_sender_id = '||l_payroll_rec.sender_id,30);
6167   hr_utility.set_location('l_test_indicator = '||l_payroll_rec.test_indicator,40);
6168   hr_utility.set_location('l_request_id = '||l_payroll_rec.request_id,50);
6169   hr_utility.set_location('g_start_year = '||g_start_year,60);
6170 
6171   hr_utility.set_location('Archiving RTI PAYROLL INFO',60);
6172 
6173   pay_action_information_api.create_action_information ( p_action_information_id => l_action_info_id ,
6174                                                          p_action_context_id => pactid ,
6175                                                          p_action_context_type => 'PA' ,
6176                                                          p_object_version_number => l_ovn ,
6177                                                          p_source_id => NULL ,
6178                                                          p_source_text => NULL ,
6179                                                          p_action_information_category => 'RTI PAYROLL INFO' ,
6180                                                          p_action_information1 => pactid ,
6181                                                          p_action_information3 => NULL ,
6182                                                          p_action_information4 => l_payroll_rec.employer_name ,
6183                                                          p_action_information6 => l_payroll_rec.tax_office_no ,
6184                                                          p_action_information7 => l_payroll_rec.tax_ref_no ,
6185                                                          p_action_information8 => l_payroll_rec.payroll_ver ,
6186                                                          p_action_information11 => l_payroll_rec.acc_ref_no ,
6187                                                          p_action_information12 => l_payroll_rec.sender_id ,
6188                                                          p_action_information13 => l_payroll_rec.test_indicator ,
6189                                                          p_action_information14 => TO_CHAR(l_payroll_rec.request_id),
6190                                                          p_action_information15 => to_char(g_end_year,'RRRR'));
6191   ---
6192   pay_action_information_api.create_action_information ( p_action_information_id => l_action_info_id ,
6193                                                          p_action_context_id => pactid ,
6194                                                          p_action_context_type => 'PA' ,
6195                                                          p_object_version_number => l_ovn ,
6196                                                          p_source_id => NULL ,
6197                                                          p_source_text => NULL ,
6198                                                          p_action_information_category => 'GB_RTI_FPS_EXTRA_DET' ,
6199                                                          p_action_information3 => l_econ );
6200   ---
6201   OPEN csr_is_etext_report;
6202   FETCH csr_is_etext_report INTO l_is_etext_report;
6203   CLOSE csr_is_etext_report;
6204 
6205   l_counter := 0;
6206   write_header(l_is_etext_report);
6207   write_sub_header('C',l_is_etext_report);
6208   write_body('ET',pactid,l_is_etext_report);
6209   write_sub_header('E',l_is_etext_report);
6210   write_body('E',pactid,l_is_etext_report);
6211   write_footer;
6212 
6213 
6214 	--Footer Validations
6215 	if l_flag = 'Y' then
6216 		raise l_exp;
6217 	end if;
6218 
6219   -- For Spawning the output Concurrent Program
6220   hr_utility.set_location('Spawning RTI EYU output process',1);
6221   xml_layout     := FND_REQUEST.ADD_LAYOUT('PAY','PYGBRTIEYUOP13','en','US', 'ETEXT');
6222 
6223 
6224   IF xml_layout   = true and g_validation_check = 'Y' and l_person_count <> 0 THEN
6225     l_request_id := fnd_request.submit_request (application => 'PAY'
6226                                                 ,program => 'PYGBRTIEYUOP13'
6227                                                 ,argument1 => pactid     --Process Name
6228 						);
6229     COMMIT;
6230     --check for process submit error
6231     IF l_request_id = 0 THEN
6232       hr_utility.set_location('Error spawning output process',1);
6233     END IF;
6234 
6235   END IF;
6236   hr_utility.set_location('Leaving: '||l_proc,999);
6237 
6238 EXCEPTION
6239 	When l_exp then
6240     fnd_file.put_line(fnd_file.LOG,'Errors found while archiving data.');
6241 		raise_application_error(-20001,'Errors found while archiving data.');
6242 END deinitialization_code;
6243 --
6244 END PAY_GB_RTI_EYU;