DBA Data[Home] [Help]

PACKAGE BODY: APPS.PAY_GB_RTI_FPS_ARCHIVE

Source


1 PACKAGE BODY PAY_GB_RTI_FPS_ARCHIVE AS
2   /* $Header: pygbrtifps13.pkb 120.0.12020000.32 2013/03/29 13:38:55 ssarap noship $ */
3   /*===========================================================================+
4   |               Copyright (c) 1993 Oracle Corporation                       |
5   |                  Redwood Shores, California, USA                          |
6   |                       All rights reserved.                                |
7   +============================================================================
8   Name:
9   PAY_GB_RTI_FPS_ARCHIVE
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   26-Dec-2012  rajganga     115.0  13918120  Created.
15   03-JAN-2013  ssarap       115.2            Hours worked change for PAYE Aggregation.
16   10-Jan-2013  rajganga     115.10           Fixed Ni aggr and other issues.
17   10-Jan-2013  rajganga     115.11           Corrected continue statement.
18   25-Jan-2013  rajganga     115.12           csr_director.
19   07-FEB-2013  ssarap       115.111 16276411   Fix for Mckesson reported issues.
20   08-FEB-2013 ssarap        115.11  16276411   Assignment number data type is modified.
21   09-FEB-2013 ssarap        115.12  16276411   Validation logic change.
22   12-FEB-2013 sampmand   115.13  16276411   Added logic to delete from pay_gb_fps_details in case of retry.
23  12-FEB-2013 ssarap     115.117   16310246   Changed the Action informatin column. For irre payemnt it is 3 and for one-off pay it is 4.
24  14-FEB-2013 sampmand    115.18  16276411   Modified Tax Code Fetch logic to fix  Mckesson issue.
25 			      Included 'TERM_ASSIGN' in get_eff_start_date cursor
26 			        to set first fps starter date correctly.
27   21-FEB-2013 sampmand   115.19   16328672   Modified starter flag checks in fetch_fps_asg_det1.
28   21-FEB-2013 ssarap            115.120   16345058   Initialiazed variable l_flag1 to 'Y' each time  at
29                                                                                           the start of the loop in action creation code.
30   04-Mar-2013 sampmand     115.121   16386622  Modified Retry Cursor.
31   04-Mar-2013 sampmand     115.122   16386622  Modified NI reporting cursor.
32   13-Mar-2013 ssarap       115.123   16414987  Hours worked fix for multiple assignments.
33   15-Mar-2013 rajganga     115.125   16386622  Modified for Retry.
34   11-Mar-2013 krreddy      115.23    16396194  Modified the below two procedures for correcting the balance values if they contain
35                                                Process Separate elements in the run:
36                                                fetch_fps_asg_det2 and fetch_fps_agg_asg_det2.
37   20-Mar-2013 sampmand    115.24    16505555  Modified procedures to archive Emp Pensions Contrib YTD values.
38   20-Mar-2013 rajganga     115.25  16501443    Added sysdate+30 condition to Termination date.
39   20-Mar-2013 sampmand     115.26  16505555   modified decode logic of tax_basis in procedure fetch_tax_code_basis.
40   22-Mar-2013 krreddy      115.128  16409794  Resolved the issue of incorrect picking of actions when no payment exists.
41   25-Mar-2013 rajganga     115.28   16501443    Added sysdate+30 condition to Termination date in first fps.Added Det3 in First FPS.
42   25-Mar-2013 rajganga     115.29   16542698  Resolved the NI Only and PAYE Aggr issues with No Payment Exist scenarios.
43   26-Mar-2013 ssarap           115.128  16306737  Added a third party prepayment check for pay_pre_payments tables. Removed
44 																						the balances Pre Tax Deductions and NIable Deductions Free of Tax from 58B.
45   28-Mar-2013 rajganga     115.30   16567045   Added 13 version report type in fetching first fps
46  29-Mar-2013  ssarap         115.32    16555308  Changes to 58B calculation. Used the updated procedure fetch_HASH_FPS_PER.
47                                                                                      Fetched the correct NI Employee values .
48 =============================================================================*/
49   --
50   --
51   g_package             CONSTANT VARCHAR2(20)                         := 'pay_gb_rti_fps.';
52   c_contract_table_name CONSTANT pay_user_tables.user_table_name%TYPE := 'PQP_CONTRACT_TYPES';
53   g_start_year DATE;
54   g_end_year DATE;
55   g_effective_date DATE;
56   g_fps_effective_date DATE;
57   g_fps_start_year DATE;
58   g_fps_end_year DATE;
59   g_business_group_id hr_organization_units.business_group_id%TYPE;
60   g_legislation_code       VARCHAR2(2) := 'GB';
61   g_permit_number          VARCHAR2(12);
62   g_tax_district_reference VARCHAR2(3);
63   g_tax_reference_number   VARCHAR2(10); --4011263: length 10 chars
64   g_split                  VARCHAR2(1);
65   g_pre_pact_id            NUMBER;
66   g_first_fps              VARCHAR2(1);
67   g_paye_element_id        NUMBER:= -1;
68   g_paye_details_id        NUMBER:= -1;
69   g_payroll_action_id      NUMBER;
70   g_date_paid DATE;
71   g_asg_primary_flag VARCHAR2(1);
72   g_per_agg_flag     VARCHAR2(1);
73   g_reset_flag_type  VARCHAR2(30);
74   g_taxable_id pay_defined_balances.defined_balance_id%TYPE;
75   g_paye_id pay_defined_balances.defined_balance_id%TYPE;
76   g_student_loan_id pay_defined_balances.defined_balance_id%TYPE;
77   g_taxable_ptd_id pay_defined_balances.defined_balance_id%TYPE;
78   g_student_loan_ptd_id pay_defined_balances.defined_balance_id%TYPE;
79   g_paye_ptd_id pay_defined_balances.defined_balance_id%TYPE;
80   g_ssp_id pay_defined_balances.defined_balance_id%TYPE;
81   g_smp_id pay_defined_balances.defined_balance_id%TYPE;
82   g_ospp_adopt_id pay_defined_balances.defined_balance_id%TYPE;
83   g_sap_id pay_defined_balances.defined_balance_id%TYPE;
84   g_aspp_adopt_id pay_defined_balances.defined_balance_id%TYPE;
85   g_final_submission         VARCHAR2(100);
86   g_free_tax_payments_made   VARCHAR2(100);
87   g_expenses_benefits_others VARCHAR2(100);
88   g_employed_outside_uk      VARCHAR2(100);
89   g_pay_to_third_party       VARCHAR2(100);
90   g_p11d_due                 VARCHAR2(100);
91   g_hmrc_advance_received    VARCHAR2(100);
92   g_cis_deductions           VARCHAR2(100);
93   g_econ                     VARCHAR2(100);
94   g_service_company          VARCHAR2(100);
95   g_ni_pt_eid                NUMBER:=0;
96   g_ni_pt_ivid               NUMBER:=0;
97   g_fps_bal_det_tab t_fps_bal_det_tab;
98   g_fps_aggr_bal_det_tab t_fps_bal_det_tab;
99   g_defined_balance_lst pay_balance_pkg.t_balance_value_tab;         -- used for batch balance retrieval of normal balances
100   g_aggr_defined_balance_lst pay_balance_pkg.t_balance_value_tab;    -- used for batch balance retrieval of aggregation balances
101   g_aggr_defined_balance_lst_ni pay_balance_pkg.t_balance_value_tab; -- used for batch balance retrieval of ni aggregation balances
102   --
103   g_tax_ref VARCHAR2(20);
104   --
105   g_paye_eid      NUMBER :=0 ;
106   g_ni_eid        NUMBER :=0;
107   g_tax_ivid      NUMBER :=0;
108   g_taxbasis_ivid NUMBER :=0;
109   g_pt_ivid       NUMBER :=0;
110   --
111   --
112   g_ssp_total NUMBER;
113   g_smp_total NUMBER;
114   g_assp_total NUMBER;
115   g_sap_total NUMBER;
116   g_spp_total NUMBER;
117 
118   g_payroll_id NUMBER;
119   g_first_fps_run_date date;
120 
121   first_fps_indicator_error  EXCEPTION;
122   first_fps_ran_already_error EXCEPTION;
123 --
124   g_adv_period_id NUMBER;
125   g_validation_check VARCHAR2(1) := 'Y';
126   g_prepayment_date date;
127 
128   -- Function to fetch address details (CONTEXT - ADDRESS DETAILS)
129 FUNCTION fetch_address_rec(
130     p_person_id      IN NUMBER,
131     p_assignment_id  IN NUMBER,
132     p_effective_date IN DATE,
133     p_addr_rec OUT nocopy act_info_rec)
134   RETURN BOOLEAN
135 IS
136   l_proc CONSTANT VARCHAR2(50):= g_package||'fetch_address_rec';
137   l_arch BOOLEAN;
138   --address details
139   l_address_line1 per_addresses.address_line1%TYPE;
140   l_address_line2 per_addresses.address_line2%TYPE;
141   l_address_line3 per_addresses.address_line3%TYPE;
142   l_address_line4 per_addresses.address_line3%TYPE;
143 
144   CURSOR csr_address
145   IS
146     SELECT upper(SUBSTR(trim(addr.address_line1),1,35)) addr1,
147       upper(SUBSTR(trim(addr.address_line2),1,35)) addr2,
148       upper(SUBSTR(trim(addr.address_line3),1,35)) addr3,
149       SUBSTR(addr.postal_code,1,10) post_code,
150       upper(SUBSTR(trim(addr.town_or_city),1,35)) addr4,
151       upper(SUBSTR(trim(addr.country),1,35)) country
152     FROM per_addresses addr
153     WHERE addr.person_id    = p_person_id
154     AND ( addr.primary_flag = 'Y'
155     OR addr.primary_flag   IS NULL)
156     AND p_effective_date
157     BETWEEN NVL(addr.date_from,fnd_date.canonical_to_date('0001/01/01 00:00:00'))
158     AND NVL(addr.date_to, fnd_date.canonical_to_date('4712/12/31 00:00:00'));
159 
160   l_addr_rec csr_address%rowtype;
161 
162 BEGIN
163   hr_utility.set_location('Entering : '||l_proc,1);
164   l_arch := true;
165 
166   OPEN csr_address;
167   FETCH csr_address INTO l_addr_rec;
168   CLOSE csr_address;
169 
170   l_address_line1 := l_addr_rec.addr1;
171   l_address_line2 := l_addr_rec.addr2;
172   l_address_line3 := l_addr_rec.addr3;
173   l_address_line4 := l_addr_rec.addr4;
174   -- Swapping from Address line4 to line2
175 
176   IF l_address_line3 = ' ' THEN
177     l_address_line3 := l_address_line4;
178     l_address_line4 := ' ';
179   END IF;
180 
181   IF l_address_line2 = ' ' THEN
182     l_address_line2 := l_address_line3;
183     l_address_line3 := l_address_line4;
184     l_address_line4 := ' ';
185   END IF;
186 
187   IF LENGTH(TRIM(l_address_line4)) > 0 THEN
188     l_address_line4               := l_address_line4;
189   ELSE
190     l_address_line4 := ' ';
191   END IF;
192 
193   IF LENGTH(TRIM(l_address_line3)) > 0 THEN
194     l_address_line3               := l_address_line3;
195   ELSE
196     l_address_line3 := l_address_line4;
197     l_address_line4 := ' ';
198   END IF;
199 
200   IF LENGTH(TRIM(l_address_line2)) > 0 THEN
201     l_address_line2               := l_address_line2;
202   ELSE
203     l_address_line2 := l_address_line3;
204     l_address_line3 := l_address_line4;
205     l_address_line4 := ' ';
206   END IF;
207   -- For Foreign Country, postal code will not be reported , where as Country will be reported
208   -- For GB , postal code will be reported
209 
210   IF l_addr_rec.country      = 'GB' THEN
211     IF l_addr_rec.post_code <> ' ' OR l_addr_rec.post_code IS NOT NULL THEN
212       l_addr_rec.country    := ' ';
213     END IF;
214   ELSE
215     l_addr_rec.post_code:= ' ';
216   END IF;
217 
218   hr_utility.trace('line 1'||l_address_line1);
219   hr_utility.trace('line 2'||l_address_line2);
220   hr_utility.trace('line 3'||l_address_line3);
221   hr_utility.trace('line 4'||l_address_line4);
222 
223   p_addr_rec.assignment_id        := p_assignment_id;
224   p_addr_rec.action_info_category := 'ADDRESS DETAILS';
225   p_addr_rec.act_info5            := l_address_line1;
226   p_addr_rec.act_info6            := l_address_line2;
227   p_addr_rec.act_info7            := l_address_line3;
228   p_addr_rec.act_info8            := l_address_line4;
229   p_addr_rec.act_info12           := l_addr_rec.post_code;
230   p_addr_rec.act_info13           := l_addr_rec.country;
231   hr_utility.set_location('Leaving: '||l_proc,999);
232   RETURN l_arch;
233 END fetch_address_rec;
234 
235 --
236 /*
237 Returns the hours worked value for the person from the source configured in Configuration
238 values page for this BG.
239 */
240 FUNCTION get_hours_worked(
241     p_assignment_id NUMBER)
242   RETURN VARCHAR2
243 IS
244   l_config_values PQP_UTILITIES.t_config_values;
245   g_bon_bal_type_id NUMBER;
246   l_source_name     VARCHAR2(100);
247   l_context_name    VARCHAR2(100);
248   l_column_name     VARCHAR2(100);
249   l_function_name   VARCHAR2(100);
250   l_sqlstr          VARCHAR2(1000);
251   l_hours_worked    VARCHAR2(20) := NULL;
252   l_package         VARCHAR2(100);
253   l_frequency       VARCHAR2(20);
254   l_working_hours   VARCHAR2(20);
255   l_effective_date  date;
256   l_paye_agg_flag   varchar2(100);
257   l_hours_worked_asg number;
258   l_asg_eff_date      date;
259   l_irregular       varchar2(2):= 'N';
260 cursor csr_normal_hours is
261   select  AEI_INFORMATION2 from per_assignment_extra_info
262   where assignment_id = p_assignment_id and INFORMATION_TYPE = 'GB_PAY_RTI'
263         and AEI_INFORMATION_CATEGORY = 'GB_PAY_RTI';
264 
265   cursor csr_stnd_cond(c_asg_id number) is
266    select  FREQUENCY , NORMAL_HOURS from per_all_assignments_f where assignment_id = c_asg_id and
267    l_effective_date  between effective_start_date and effective_end_date;
268 
269 cursor csr_asg_start_date(c_asg_id number) is
270 select max(effective_start_date) from per_all_assignments_f
271 where assignment_id = c_asg_id
272 and assignment_type = 'E'
273 and effective_start_date <= g_effective_date;
274 
275 -- to get the agg flag.
276 cursor csr_agg_flag(c_asg_id number) is
277     SELECT trim(nvl(pap.per_information10,'N')) per_agg_flag
278     FROM per_all_people_f pap,
279       per_all_assignments_f asg
280     WHERE asg.assignment_id       = c_asg_id
281     AND pap.person_id             = asg.person_id
282     AND asg.business_group_id     = g_business_group_id
283     AND l_effective_date BETWEEN asg.effective_start_date AND asg.effective_end_date
284     AND l_effective_date BETWEEN pap.effective_start_date AND pap.effective_end_date;
285 
286   cursor csr_asg is
287   select paaf.assignment_id
288 	from per_all_assignments_f paaf,
289     	 pay_payrolls_f pay,
290 	     hr_soft_coding_keyflex sck
291 	where paaf.person_id     =  (select distinct person_id from per_all_assignments_f where ASSIGNMENT_ID =p_assignment_id)
292 	and   pay.payroll_id     = paaf.payroll_id
293 	and   pay.SOFT_CODING_KEYFLEX_ID = sck.SOFT_CODING_KEYFLEX_ID
294 	and   sck.SEGMENT1 = g_tax_ref
295 	and   paaf.EFFECTIVE_START_DATE =
296 				( select max(paaf1.effective_start_date)
297 					from per_all_assignments_f paaf1
298 					where paaf1.assignment_id = paaf.assignment_id
299 					and paaf1.assignment_type       = 'E'
300 					and paaf1.effective_start_date <= l_effective_date
301 				)
302 	and l_effective_date between pay.EFFECTIVE_START_DATE and pay.EFFECTIVE_END_DATE;
303 
304 
305 BEGIN
306   hr_utility.trace('Entering get_hours_worked');
307   hr_utility.trace('g_effective_date in hours worked : ' || g_effective_date);
308   open csr_asg_start_date(p_assignment_id);
309   fetch csr_asg_start_date into l_effective_date;
310   close csr_asg_start_date;
311   hr_utility.trace('l_effective_date in hours worked : ' || l_effective_date);
312 
313     open csr_agg_flag(p_assignment_id);
314     fetch csr_agg_flag into l_paye_agg_flag;
315     close csr_agg_flag;
316     hr_utility.trace('l_paye_agg_flag: ' || l_paye_agg_flag);
317 --  Source 1
318 
319 -- First check the hours worked from normal hours in the assignment form
320 -- Assignment EIT Context='RTI Information' and segment 'Normal Hours Band'
321 
322   open csr_normal_hours;
323   fetch csr_normal_hours into l_hours_worked;
324   close csr_normal_hours;
325 
326 -- Source 2
327 -- Configuration values
328   if l_hours_worked is null then
329   hr_utility.trace('in config ');
330   --  Use below API to get the config values for the given context in the business group
331    PQP_UTILITIES.get_config_type_values( p_configuration_type => 'PAY_GB_FPS_HOURS_WORKED' ,
332                                         p_business_group_id => g_business_group_id ,
333                                         p_legislation_code => g_legislation_code ,
334                                         p_tab_config_values => l_config_values );
335 
336   IF l_config_values.COUNT > 0 THEN -- Source is hours worked.
337     l_source_name         := l_config_values(l_config_values.FIRST).pcv_information1;
338     l_context_name        := l_config_values(l_config_values.FIRST).pcv_information4;
339     l_column_name         := l_config_values(l_config_values.FIRST).pcv_information5;
340     l_function_name       := l_config_values(l_config_values.FIRST).pcv_information6;
341     hr_utility.trace('l_source_name: ' || l_source_name);
342     hr_utility.trace('l_context_name: ' || l_context_name);
343     hr_utility.trace('l_column_name: ' || l_column_name);
344     hr_utility.trace('l_function_name: ' || l_function_name);
345 
346     /**
347     Source for deriving the hours worked can be
348     - Assignment ==> Extra details
349     - Assignment ==> DFF
350     - Formula Function
351     **/
352     IF l_source_name = 'Assignment Developer DF' THEN
353       l_sqlstr      := 'select ' || l_column_name ||
354                        ' from per_assignment_extra_info where assignment_id = :assignment_id and AEI_INFORMATION_CATEGORY = :l_context_name';
355       begin
356 	EXECUTE immediate l_sqlstr INTO l_hours_worked USING p_assignment_id,l_context_name;
357      exception
358       WHEN OTHERS THEN
359 			  hr_utility.trace('Exception in get hours worked.Assignment Developer DFF.');
360 			  hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
361       end;
362     elsif l_source_name = 'PER_ASSIGNMENTS' THEN
363       l_sqlstr         := 'select ' || l_column_name ||
364                           ' from per_all_assignments_f where assignment_id = :assignment_id and ASS_ATTRIBUTE_CATEGORY = :l_context_name'||
365 													' and '||l_effective_date||' between effective_start_date and effective_end_date' ;
366 			begin
367 	      EXECUTE immediate l_sqlstr INTO l_hours_worked USING p_assignment_id,l_context_name;
368 						exception
369       WHEN OTHERS THEN
370 			  hr_utility.trace('Exception in get hours worked.PER_ASSIGNMENTS.');
371 			  hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
372       end;
373     elsif l_source_name = 'Function' THEN
374 			begin
375       SELECT definition
376       INTO l_package
377       FROM ff_functions
378       WHERE name = l_function_name
379       and business_group_id = g_business_group_id;
380 
381       --EXECUTE IMMEDIATE 'CALL ' || l_package || '() INTO :l_hours_worked' USING OUT l_hours_worked;
382 	   hr_utility.trace('l_package'||l_package);
383 
384       if l_paye_agg_flag = 'Y' then
385        --get all asg for PAYE agg
386        hr_utility.trace('Agg Person . Hours worked.');
387        for asg_rec in csr_asg loop
388        open csr_asg_start_date(asg_rec.assignment_id);
389        fetch csr_asg_start_date into l_asg_eff_date;
390        close csr_asg_start_date;
391            l_sqlstr    :=
392                                'SELECT '
393                             || l_package
394                             || ' (:p_assignment_id,:p_eff_date) '
395                             || 'FROM DUAL';
396        EXECUTE IMMEDIATE l_sqlstr into l_hours_worked_asg USING asg_rec.assignment_id,l_asg_eff_date;
397         l_hours_worked := nvl(l_hours_worked,0) + l_hours_worked_asg;
398        end loop;
399       else
400       l_sqlstr    :=
401                                'SELECT '
402                             || l_package
403                             || ' (:p_assignment_id,:p_eff_date) '
404                             || 'FROM DUAL';
405        EXECUTE IMMEDIATE l_sqlstr into l_hours_worked USING p_assignment_id,l_effective_date;
406        end if; -- end paye agg
407        if l_hours_worked = 0 then
408           l_hours_worked := 'D';
409        end if;
410        hr_utility.trace('Function value l_hours_worked '||l_hours_worked);
411 			exception
412       WHEN OTHERS THEN
413 			  hr_utility.trace('Exception in get hours worked.Function.');
414 			  hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
415 			end;
416     END IF;
417 
418   END IF;
419  END IF;--source 2 end
420 
421 -- Source 3
422 --Assignment Standard Conditions
423   if l_hours_worked is null then
424   hr_utility.trace('in standard ');
425 
426     if l_paye_agg_flag = 'Y' then
427        --get all asg for PAYE agg
428        hr_utility.trace('Agg Person . Hours worked.');
429        for asg_rec in csr_asg loop
430           open csr_stnd_cond(asg_rec.assignment_id);
431        fetch csr_stnd_cond into l_frequency, l_working_hours;
432       close csr_stnd_cond;
433       if l_frequency is not null and  l_working_hours is not null then
434 
435  	      if l_frequency = 'W' then
436           l_hours_worked := nvl(l_hours_worked,0) + l_working_hours;
437    	    elsif l_frequency = 'M' then
438           l_hours_worked := nvl(l_hours_worked,0) + round(l_working_hours *12/52,2);
439     	  elsif l_frequency = 'D' then
440           l_hours_worked := nvl(l_hours_worked,0) + round(l_working_hours *5,2);
441       	elsif l_frequency = 'Y' then
442           l_hours_worked := nvl(l_hours_worked,0) + round(l_working_hours/52,2);
443       	elsif l_frequency = 'H' then
444           l_irregular := 'Y';
445         end if;
446       end if;
447        end loop;
448       if l_irregular = 'Y' and l_hours_worked is null then
449           l_hours_worked := 'D';
450         end if;
451 
452    else -- else paye agg
453       open csr_stnd_cond(p_assignment_id);
454       fetch csr_stnd_cond into l_frequency, l_working_hours;
455       close csr_stnd_cond;
456       if l_frequency is not null and  l_working_hours is not null then
457 
458  	      if l_frequency = 'W' then
459           l_hours_worked := l_working_hours;
460    	    elsif l_frequency = 'M' then
461           l_hours_worked := round(l_working_hours *12/52,2);
462     	  elsif l_frequency = 'D' then
463           l_hours_worked := round(l_working_hours *5,2);
464       	elsif l_frequency = 'Y' then
465           l_hours_worked := round(l_working_hours/52,2);
466       	elsif l_frequency = 'H' then
467           l_hours_worked := 'D';
468         end if;
469       end if;
470     end if; -- end for PAYE agg
471   end if; -- Soruce 3 end
472 
473   hr_utility.trace(' l_hours_worked : ' || l_hours_worked);
474 
475   -- Convert hours worked into Grades.
476   IF l_hours_worked IS NOT NULL AND LENGTH(TRIM(TRANSLATE (l_hours_worked, ' +-.0123456789',' '))) IS NULL THEN
477     IF to_number(l_hours_worked) <= 15.99 THEN
478       RETURN 'A';
479     elsif to_number(l_hours_worked) <= 29.99 THEN
480       RETURN 'B';
481     ELSE
482       RETURN 'C';
483     END IF;
484   ELSE
485     RETURN l_hours_worked;
486   END IF;
487   hr_utility.trace('Leaving get_hours_worked');
488 EXCEPTION
489 WHEN OTHERS THEN
490   hr_utility.trace('Exception in get hours worked end of function block.');
491   hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
492   fnd_file.put_line(fnd_file.LOG,'Exception:' || SQLCODE || ' - ' || SQLERRM);
493   return null;
494 END get_hours_worked;
495 
496 /*
497 Returns get_periods_covered value for the person from the source configured in Configuration
498 values page for this BG.
499 */
500 FUNCTION get_periods_covered(
501     p_assignment_id NUMBER)
502   RETURN VARCHAR2
503 IS
504   l_config_values PQP_UTILITIES.t_config_values;
505   g_bon_bal_type_id NUMBER;
506   l_source_name     VARCHAR2(100);
507   l_context_name    VARCHAR2(100);
508   l_column_name     VARCHAR2(100);
509   l_function_name   VARCHAR2(100);
510   l_sqlstr          VARCHAR2(1000);
511   l_periods_covered    VARCHAR2(20) := NULL;
512   l_package         VARCHAR2(100);
513   l_frequency       VARCHAR2(20);
514   l_effective_date date;
515 
516 cursor csr_periods_covered_eit is
517   select  AEI_INFORMATION1 from per_assignment_extra_info
518   where assignment_id = p_assignment_id and INFORMATION_TYPE = 'GB_PAY_RTI'
519         and AEI_INFORMATION_CATEGORY = 'GB_PAY_RTI';
520 
521 cursor csr_asg_start_date is
522 select max(effective_start_date) from per_all_assignments_f
523 where assignment_id = p_assignment_id
524 and assignment_type = 'E'
525 and effective_start_date <= g_effective_date;
526 
527 BEGIN
528 
529   hr_utility.trace('Entering get_periods_covered');
530   hr_utility.trace('g_effective_date in get_periods_covered : ' || g_effective_date);
531   open csr_asg_start_date;
532   fetch csr_asg_start_date into l_effective_date;
533   close csr_asg_start_date;
534   hr_utility.trace('l_effective_date in get_periods_covered : ' || l_effective_date);
535 
536 --  Source 1
537 
538 -- First check in the assignment form
539 -- Assignment EIT Context='RTI Information'
540 
541   open csr_periods_covered_eit;
542   fetch csr_periods_covered_eit into l_periods_covered;
543   close csr_periods_covered_eit;
544 
545 -- Source 2
546 -- Configuration values
547   if l_periods_covered is null then
548   hr_utility.trace('in config ');
549 
550   --  Use below API to get the config values for the given context in the business group
551    PQP_UTILITIES.get_config_type_values( p_configuration_type => 'PAY_GB_FPS_PERIODS_COVERED' ,
552                                         p_business_group_id => g_business_group_id ,
553                                         p_legislation_code => g_legislation_code ,
554                                         p_tab_config_values => l_config_values );
555 
556   IF l_config_values.COUNT > 0 THEN
557     l_source_name         := l_config_values(l_config_values.FIRST).pcv_information1;
558     l_context_name        := l_config_values(l_config_values.FIRST).pcv_information4;
559     l_column_name         := l_config_values(l_config_values.FIRST).pcv_information5;
560     l_function_name       := l_config_values(l_config_values.FIRST).pcv_information6;
561 
562     hr_utility.trace('l_source_name: ' || l_source_name);
563     hr_utility.trace('l_context_name: ' || l_context_name);
564     hr_utility.trace('l_column_name: ' || l_column_name);
565     hr_utility.trace('l_function_name: ' || l_function_name);
566 
567     /**
568 
569     - Assignment ==> Extra details
570     - Assignment ==> DFF
571     - Formula Function
572     **/
573     IF l_source_name = 'Assignment Developer DF' THEN
574       l_sqlstr      := 'select ' || l_column_name ||
575                        ' from per_assignment_extra_info where assignment_id = :assignment_id and AEI_INFORMATION_CATEGORY = :l_context_name';
576       begin
577 
578         hr_utility.trace('string '||l_sqlstr);
579 				EXECUTE immediate l_sqlstr INTO l_periods_covered USING p_assignment_id,l_context_name;
580 
581 		    exception
582 		    WHEN OTHERS THEN
583 					  hr_utility.trace('Exception in get_periods_covered.Assignment Developer DFF.');
584 					  hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
585 		        return null;
586 	    end;
587 
588     elsif l_source_name = 'PER_ASSIGNMENTS' THEN
589 
590 		  l_sqlstr         := 'select ' || l_column_name ||
591                           ' from per_all_assignments_f where assignment_id = :assignment_id and ASS_ATTRIBUTE_CATEGORY = :l_context_name'||
592 													' and '||l_effective_date||' between effective_start_date and effective_end_date' ;
593 			begin
594 	      EXECUTE immediate l_sqlstr INTO l_periods_covered USING p_assignment_id,l_context_name;
595 
596 				exception
597 	      WHEN OTHERS THEN
598 				  hr_utility.trace('Exception in get_periods_covered.PER_ASSIGNMENTS.');
599 				  hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
600 		      return null;
601 	    end;
602 
603     elsif l_source_name = 'Function' THEN
604 
605 			begin
606       SELECT definition
607       INTO l_package
608       FROM ff_functions
609       WHERE name = l_function_name
610       and business_group_id = g_business_group_id;
611 
612       --EXECUTE IMMEDIATE 'CALL ' || l_package || '() INTO :l_periods_covered' USING OUT l_periods_covered;
613       hr_utility.trace('l_package'||l_package);
614 
615       l_sqlstr    :=
616                                'SELECT '
617                             || l_package
618                             || ' (:p_assignment_id,:p_eff_date) '
619                             || 'FROM DUAL';
620        EXECUTE IMMEDIATE l_sqlstr into l_periods_covered USING p_assignment_id,l_effective_date;
621 
622        hr_utility.trace('Function value l_periods_covered '||l_periods_covered);
623 
624       exception
625       WHEN OTHERS THEN
626 			  hr_utility.trace('Exception in get_periods_covered.Function.');
627 			  hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
628         return null;
629 			end;
630 
631     END IF;
632 
633   END IF;
634  END IF;--source 2 end
635 
636   hr_utility.trace(' l_periods_covered : ' || l_periods_covered);
637   hr_utility.trace('Leaving get_periods_covered');
638 
639   return l_periods_covered;
640 
641 EXCEPTION
642 WHEN OTHERS THEN
643   hr_utility.trace('Exception in get_periods_covered end of function block.');
644   hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
645   fnd_file.put_line(fnd_file.LOG,'Exception:' || SQLCODE || ' - ' || SQLERRM);
646   return null;
647 END get_periods_covered;
648 
649 
650 /*
651 Returns get_irregular_payment value for the person from the source configured in Configuration
652 values page for this BG.
653 */
654 FUNCTION get_irregular_payment(
655     p_assignment_id NUMBER)
656   RETURN VARCHAR2
657 IS
658   l_config_values PQP_UTILITIES.t_config_values;
659   g_bon_bal_type_id NUMBER;
660   l_source_name     VARCHAR2(100);
661   l_context_name    VARCHAR2(100);
662   l_column_name     VARCHAR2(100);
663   l_function_name   VARCHAR2(100);
664   l_sqlstr          VARCHAR2(1000);
665   l_irregular_payment    VARCHAR2(20) := NULL;
666   l_package         VARCHAR2(100);
667   l_frequency       VARCHAR2(20);
668   l_effective_date date;
669 
670 cursor csr_irregular_payment_eit is
671   select  AEI_INFORMATION3 from per_assignment_extra_info
672   where assignment_id = p_assignment_id and INFORMATION_TYPE = 'GB_PAY_RTI'
673         and AEI_INFORMATION_CATEGORY = 'GB_PAY_RTI';
674 
675 cursor csr_asg_start_date is
676 select max(effective_start_date) from per_all_assignments_f
677 where assignment_id = p_assignment_id
678 and assignment_type = 'E'
679 and effective_start_date <= g_effective_date;
680 
681 BEGIN
682 
683   hr_utility.trace('Entering get_irregular_payment');
684   hr_utility.trace('g_effective_date in get_irregular_payment : ' || g_effective_date);
685   open csr_asg_start_date;
686   fetch csr_asg_start_date into l_effective_date;
687   close csr_asg_start_date;
688   hr_utility.trace('l_effective_date in get_irregular_payment : ' || l_effective_date);
689 
690 --  Source 1
691 
692 -- First check in the assignment form
693 -- Assignment EIT Context='RTI Information'
694 
695   open csr_irregular_payment_eit;
696   fetch csr_irregular_payment_eit into l_irregular_payment;
697   close csr_irregular_payment_eit;
698 
699 -- Source 2
700 -- Configuration values
701   if l_irregular_payment is null then
702   hr_utility.trace('in config ');
703 
704   --  Use below API to get the config values for the given context in the business group
705    PQP_UTILITIES.get_config_type_values( p_configuration_type => 'PAY_GB_FPS_IRREGULAR_PAYMENT' ,
706                                         p_business_group_id => g_business_group_id ,
707                                         p_legislation_code => g_legislation_code ,
708                                         p_tab_config_values => l_config_values );
709 
710   IF l_config_values.COUNT > 0 THEN
711     l_source_name         := l_config_values(l_config_values.FIRST).pcv_information1;
712     l_context_name        := l_config_values(l_config_values.FIRST).pcv_information4;
713     l_column_name         := l_config_values(l_config_values.FIRST).pcv_information5;
714     l_function_name       := l_config_values(l_config_values.FIRST).pcv_information6;
715 
716     hr_utility.trace('l_source_name: ' || l_source_name);
717     hr_utility.trace('l_context_name: ' || l_context_name);
718     hr_utility.trace('l_column_name: ' || l_column_name);
719     hr_utility.trace('l_function_name: ' || l_function_name);
720 
721     /**
722 
723     - Assignment ==> Extra details
724     - Assignment ==> DFF
725     - Formula Function
726     **/
727     IF l_source_name = 'Assignment Developer DF' THEN
728       l_sqlstr      := 'select ' || l_column_name ||
729                        ' from per_assignment_extra_info where assignment_id = :assignment_id and AEI_INFORMATION_CATEGORY = :l_context_name';
730       begin
731 
732         hr_utility.trace('string '||l_sqlstr);
733 				EXECUTE immediate l_sqlstr INTO l_irregular_payment USING p_assignment_id,l_context_name;
734 
735 		    exception
736 		    WHEN OTHERS THEN
737 					  hr_utility.trace('Exception in get_irregular_payment Assignment Developer DFF.');
738 					  hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
739 		        return null;
740 	    end;
741 
742     elsif l_source_name = 'PER_ASSIGNMENTS' THEN
743 
744 		  l_sqlstr         := 'select ' || l_column_name ||
745                           ' from per_all_assignments_f where assignment_id = :assignment_id and ASS_ATTRIBUTE_CATEGORY = :l_context_name'||
746 													' and '||l_effective_date||' between effective_start_date and effective_end_date' ;
747 			begin
748 	      EXECUTE immediate l_sqlstr INTO l_irregular_payment USING p_assignment_id,l_context_name;
749 
750 				exception
751 	      WHEN OTHERS THEN
752 				  hr_utility.trace('Exception in get_irregular_payment PER_ASSIGNMENTS.');
753 				  hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
754 		      return null;
755 	    end;
756 
757     elsif l_source_name = 'Function' THEN
758 
759 			begin
760       SELECT definition
761       INTO l_package
762       FROM ff_functions
763       WHERE name = l_function_name
764       and business_group_id = g_business_group_id;
765 
766       --EXECUTE IMMEDIATE 'CALL ' || l_package || '() INTO :l_periods_covered' USING OUT l_irregular_payment;
767 
768       hr_utility.trace('l_package'||l_package);
769 
770       l_sqlstr    :=
771                                'SELECT '
772                             || l_package
773                             || ' (:p_assignment_id,:p_eff_date) '
774                             || 'FROM DUAL';
775 
776        EXECUTE IMMEDIATE l_sqlstr into l_irregular_payment USING p_assignment_id,l_effective_date;
777 
778        hr_utility.trace('Function value l_irregular_payment '||l_irregular_payment);
779 
780       exception
781       WHEN OTHERS THEN
782 			  hr_utility.trace('Exception in get_irregular_payment Function.');
783 			  hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
784         return null;
785 			end;
786 
787     END IF;
788 
789   END IF;
790  END IF;--source 2 end
791 
792   hr_utility.trace(' l_irregular_payment : ' || l_irregular_payment);
793   hr_utility.trace('Leaving get_irregular_payment');
794 
795   return l_irregular_payment;
796 
797 EXCEPTION
798 WHEN OTHERS THEN
799   hr_utility.trace('Exception in get_irregular_payment end of function block.');
800   hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
801   fnd_file.put_line(fnd_file.LOG,'Exception:' || SQLCODE || ' - ' || SQLERRM);
802   return null;
803 END get_irregular_payment;
804 
805 
806 /*
807 Returns get_oneoff_payment value for the person from the source configured in Configuration
808 values page for this BG.
809 */
810 FUNCTION get_oneoff_payment(
811     p_assignment_id NUMBER)
812   RETURN VARCHAR2
813 IS
814   l_config_values PQP_UTILITIES.t_config_values;
815   g_bon_bal_type_id NUMBER;
816   l_source_name     VARCHAR2(100);
817   l_context_name    VARCHAR2(100);
818   l_column_name     VARCHAR2(100);
819   l_function_name   VARCHAR2(100);
820   l_sqlstr          VARCHAR2(1000);
821   l_oneoff_payment    VARCHAR2(20) := NULL;
822   l_package         VARCHAR2(100);
823   l_frequency       VARCHAR2(20);
824   l_effective_date date;
825 
826 cursor csr_oneoff_payment_eit is
827   select  AEI_INFORMATION4 from per_assignment_extra_info
828   where assignment_id = p_assignment_id and INFORMATION_TYPE = 'GB_PAY_RTI'
829         and AEI_INFORMATION_CATEGORY = 'GB_PAY_RTI';
830 
831 cursor csr_asg_start_date is
832 select max(effective_start_date) from per_all_assignments_f
833 where assignment_id = p_assignment_id
834 and assignment_type = 'E'
835 and effective_start_date <= g_effective_date;
836 
837 BEGIN
838 
839   hr_utility.trace('Entering get_oneoff_payment');
840   hr_utility.trace('g_effective_date in get_oneoff_payment : ' || g_effective_date);
841   open csr_asg_start_date;
842   fetch csr_asg_start_date into l_effective_date;
843   close csr_asg_start_date;
844   hr_utility.trace('l_effective_date in get_oneoff_payment : ' || l_effective_date);
845 
846 --  Source 1
847 
848 -- First check in the assignment form
849 -- Assignment EIT Context='RTI Information'
850 
851   open csr_oneoff_payment_eit;
852   fetch csr_oneoff_payment_eit into l_oneoff_payment;
853   close csr_oneoff_payment_eit;
854 
855 -- Source 2
856 -- Configuration values
857   if l_oneoff_payment is null then
858   hr_utility.trace('in config ');
859 
860   --  Use below API to get the config values for the given context in the business group
861    PQP_UTILITIES.get_config_type_values( p_configuration_type => 'PAY_GB_FPS_ONEOFF_PAYMENT' ,
862                                         p_business_group_id => g_business_group_id ,
863                                         p_legislation_code => g_legislation_code ,
864                                         p_tab_config_values => l_config_values );
865 
866   IF l_config_values.COUNT > 0 THEN
867     l_source_name         := l_config_values(l_config_values.FIRST).pcv_information1;
868     l_context_name        := l_config_values(l_config_values.FIRST).pcv_information4;
869     l_column_name         := l_config_values(l_config_values.FIRST).pcv_information5;
870     l_function_name       := l_config_values(l_config_values.FIRST).pcv_information6;
871 
872     hr_utility.trace('l_source_name: ' || l_source_name);
873     hr_utility.trace('l_context_name: ' || l_context_name);
874     hr_utility.trace('l_column_name: ' || l_column_name);
875     hr_utility.trace('l_function_name: ' || l_function_name);
876 
877     /**
878 
879     - Assignment ==> Extra details
880     - Assignment ==> DFF
881     - Formula Function
882     **/
883     IF l_source_name = 'Assignment Developer DF' THEN
884       l_sqlstr      := 'select ' || l_column_name ||
885                        ' from per_assignment_extra_info where assignment_id = :assignment_id and AEI_INFORMATION_CATEGORY = :l_context_name';
886       begin
887 
888         hr_utility.trace('string '||l_sqlstr);
889 				EXECUTE immediate l_sqlstr INTO l_oneoff_payment USING p_assignment_id,l_context_name;
890 
891 		    exception
892 		    WHEN OTHERS THEN
893 					  hr_utility.trace('Exception in get_oneoff_payment Assignment Developer DFF.');
894 					  hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
895 		        return null;
896 	    end;
897 
898     elsif l_source_name = 'PER_ASSIGNMENTS' THEN
899 
900 		  l_sqlstr         := 'select ' || l_column_name ||
901                           ' from per_all_assignments_f where assignment_id = :assignment_id and ASS_ATTRIBUTE_CATEGORY = :l_context_name'||
902 													' and '||l_effective_date||' between effective_start_date and effective_end_date' ;
903 			begin
904 	      EXECUTE immediate l_sqlstr INTO l_oneoff_payment USING p_assignment_id,l_context_name;
905 
906 				exception
907 	      WHEN OTHERS THEN
908 				  hr_utility.trace('Exception in get_oneoff_payment.PER_ASSIGNMENTS.');
909 				  hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
910 		      return null;
911 	    end;
912 
913     elsif l_source_name = 'Function' THEN
914 
915 			begin
916       SELECT definition
917       INTO l_package
918       FROM ff_functions
919       WHERE name = l_function_name
920       and business_group_id = g_business_group_id;
921 
922       hr_utility.trace('l_package'||l_package);
923 
924       l_sqlstr    :=
925                                'SELECT '
926                             || l_package
927                             || ' (:p_assignment_id,:p_eff_date) '
928                             || 'FROM DUAL';
929        EXECUTE IMMEDIATE l_sqlstr into l_oneoff_payment USING p_assignment_id,l_effective_date;
930 
931        hr_utility.trace('Function value l_oneoff_payment '||l_oneoff_payment);
932       --EXECUTE IMMEDIATE 'CALL ' || l_package || '() INTO :l_periods_covered' USING OUT l_oneoff_payment;
933 
934       exception
935       WHEN OTHERS THEN
936 			  hr_utility.trace('Exception in get_oneoff_payment.Function.');
937 			  hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
938         return null;
939 			end;
940 
941     END IF;
942 
943   END IF;
944  END IF;--source 2 end
945 
946   hr_utility.trace(' l_oneoff_payment : ' || l_oneoff_payment);
947   hr_utility.trace('Leaving get_oneoff_payment');
948 
949   return l_oneoff_payment;
950 
951 EXCEPTION
952 WHEN OTHERS THEN
953   hr_utility.trace('Exception in get_oneoff_payment end of function block.');
954   hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
955   fnd_file.put_line(fnd_file.LOG,'Exception:' || SQLCODE || ' - ' || SQLERRM);
956   return null;
957 END get_oneoff_payment;
958 
959 /*
960 Returns get_payment_non_indiv value for the person from the source configured in Configuration
961 values page for this BG.
962 */
963 FUNCTION get_payment_non_indiv(
964     p_assignment_id NUMBER)
965   RETURN VARCHAR2
966 IS
967   l_config_values PQP_UTILITIES.t_config_values;
968   g_bon_bal_type_id NUMBER;
969   l_source_name     VARCHAR2(100);
970   l_context_name    VARCHAR2(100);
971   l_column_name     VARCHAR2(100);
972   l_function_name   VARCHAR2(100);
973   l_sqlstr          VARCHAR2(1000);
974   l_pay_non_indiv_ind    VARCHAR2(20) := NULL;
975   l_package         VARCHAR2(100);
976   l_frequency       VARCHAR2(20);
977   l_effective_date date;
978 
979 
980 cursor csr_asg_start_date is
981 select max(effective_start_date) from per_all_assignments_f
982 where assignment_id = p_assignment_id
983 and assignment_type = 'E'
984 and effective_start_date <= g_effective_date;
985 
986 BEGIN
987 
988   hr_utility.trace('Entering get_payment_non_indiv');
989   hr_utility.trace('g_effective_date in get_payment_non_indiv : ' || g_effective_date);
990 
991   open csr_asg_start_date;
992   fetch csr_asg_start_date into l_effective_date;
993   close csr_asg_start_date;
994 
995   hr_utility.trace('l_effective_date in get_payment_non_indiv : ' || l_effective_date);
996 
997 -- Source 2
998 -- Configuration values
999   if l_pay_non_indiv_ind is null then
1000   hr_utility.trace('in config ');
1001 
1002   --  Use below API to get the config values for the given context in the business group
1003    PQP_UTILITIES.get_config_type_values( p_configuration_type => 'PAY_GB_FPS_PAY_NON_INDIV_IND' ,
1004                                         p_business_group_id => g_business_group_id ,
1005                                         p_legislation_code => g_legislation_code ,
1006                                         p_tab_config_values => l_config_values );
1007 
1008   IF l_config_values.COUNT > 0 THEN
1009     l_source_name         := l_config_values(l_config_values.FIRST).pcv_information1;
1010     l_context_name        := l_config_values(l_config_values.FIRST).pcv_information4;
1011     l_column_name         := l_config_values(l_config_values.FIRST).pcv_information5;
1012     l_function_name       := l_config_values(l_config_values.FIRST).pcv_information6;
1013 
1014     hr_utility.trace('l_source_name: ' || l_source_name);
1015     hr_utility.trace('l_context_name: ' || l_context_name);
1016     hr_utility.trace('l_column_name: ' || l_column_name);
1017     hr_utility.trace('l_function_name: ' || l_function_name);
1018 
1019     /**
1020 
1021     - Assignment ==> Extra details
1022     - Assignment ==> DFF
1023     - Formula Function
1024     **/
1025     IF l_source_name = 'Assignment Developer DF' THEN
1026       l_sqlstr      := 'select ' || l_column_name ||
1027                        ' from per_assignment_extra_info where assignment_id = :assignment_id and AEI_INFORMATION_CATEGORY = :l_context_name';
1028       begin
1029 
1030         hr_utility.trace('string '||l_sqlstr);
1031 				EXECUTE immediate l_sqlstr INTO l_pay_non_indiv_ind USING p_assignment_id,l_context_name;
1032 
1033 		    exception
1034 		    WHEN OTHERS THEN
1035 					  hr_utility.trace('Exception in get_payment_non_indiv Assignment Developer DFF.');
1036 					  hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
1037 		        return null;
1038 	    end;
1039 
1040     elsif l_source_name = 'PER_ASSIGNMENTS' THEN
1041 
1042 		  l_sqlstr         := 'select ' || l_column_name ||
1043                           ' from per_all_assignments_f where assignment_id = :assignment_id and ASS_ATTRIBUTE_CATEGORY = :l_context_name'||
1044 													' and '||l_effective_date||' between effective_start_date and effective_end_date' ;
1045 			begin
1046 	      EXECUTE immediate l_sqlstr INTO l_pay_non_indiv_ind USING p_assignment_id,l_context_name;
1047 
1048 				exception
1049 	      WHEN OTHERS THEN
1050 				  hr_utility.trace('Exception in get_payment_non_indiv.PER_ASSIGNMENTS.');
1051 				  hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
1052 		      return null;
1053 	    end;
1054 
1055     elsif l_source_name = 'Function' THEN
1056 
1057 			begin
1058       SELECT definition
1059       INTO l_package
1060       FROM ff_functions
1061       WHERE name = l_function_name
1062       and business_group_id = g_business_group_id;
1063 
1064       hr_utility.trace('l_package'||l_package);
1065 
1066       l_sqlstr    :=
1067                                'SELECT '
1068                             || l_package
1069                             || ' (:p_assignment_id,:p_eff_date) '
1070                             || 'FROM DUAL';
1071        EXECUTE IMMEDIATE l_sqlstr into l_pay_non_indiv_ind USING p_assignment_id,l_effective_date;
1072 
1073        hr_utility.trace('Function value get_payment_non_indiv '||l_pay_non_indiv_ind);
1074 
1075       exception
1076       WHEN OTHERS THEN
1077 			  hr_utility.trace('Exception in get_payment_non_indiv Function.');
1078 			  hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
1079         return null;
1080 			end;
1081 
1082     END IF;
1083 
1084   END IF;
1085  END IF;--source 2 end
1086 
1087   hr_utility.trace(' l_onstrike_ind : ' || l_pay_non_indiv_ind);
1088   hr_utility.trace('Leaving get_payment_non_indiv');
1089 
1090   return l_pay_non_indiv_ind;
1091 
1092 EXCEPTION
1093 WHEN OTHERS THEN
1094   hr_utility.trace('Exception in get_payment_non_indiv end of function block.');
1095   hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
1096   fnd_file.put_line(fnd_file.LOG,'Exception:' || SQLCODE || ' - ' || SQLERRM);
1097   return null;
1098 END get_payment_non_indiv;
1099 
1100 
1101 /*
1102 Returns get_onstrike_indicator value for the person from the source configured in Configuration
1103 values page for this BG.
1104 */
1105 FUNCTION get_onstrike_indicator(
1106     p_assignment_id NUMBER)
1107   RETURN VARCHAR2
1108 IS
1109   l_config_values PQP_UTILITIES.t_config_values;
1110   g_bon_bal_type_id NUMBER;
1111   l_source_name     VARCHAR2(100);
1112   l_context_name    VARCHAR2(100);
1113   l_column_name     VARCHAR2(100);
1114   l_function_name   VARCHAR2(100);
1115   l_sqlstr          VARCHAR2(1000);
1116   l_onstrike_ind    VARCHAR2(20) := NULL;
1117   l_package         VARCHAR2(100);
1118   l_frequency       VARCHAR2(20);
1119   l_effective_date date;
1120 
1121 
1122 cursor csr_asg_start_date is
1123 select max(effective_start_date) from per_all_assignments_f
1124 where assignment_id = p_assignment_id
1125 and assignment_type = 'E'
1126 and effective_start_date <= g_effective_date;
1127 
1128 BEGIN
1129 
1130   hr_utility.trace('Entering get_onstrike_indicator');
1131   hr_utility.trace('g_effective_date in get_onstrike_indicator : ' || g_effective_date);
1132 
1133   open csr_asg_start_date;
1134   fetch csr_asg_start_date into l_effective_date;
1135   close csr_asg_start_date;
1136 
1137   hr_utility.trace('l_effective_date in get_onstrike_indicator : ' || l_effective_date);
1138 
1139 -- Source 2
1140 -- Configuration values
1141   if l_onstrike_ind is null then
1142   hr_utility.trace('in config ');
1143 
1144   --  Use below API to get the config values for the given context in the business group
1145    PQP_UTILITIES.get_config_type_values( p_configuration_type => 'PAY_GB_FPS_ONSTRIKE_INDICATOR' ,
1146                                         p_business_group_id => g_business_group_id ,
1147                                         p_legislation_code => g_legislation_code ,
1148                                         p_tab_config_values => l_config_values );
1149 
1150   IF l_config_values.COUNT > 0 THEN
1151     l_source_name         := l_config_values(l_config_values.FIRST).pcv_information1;
1152     l_context_name        := l_config_values(l_config_values.FIRST).pcv_information4;
1153     l_column_name         := l_config_values(l_config_values.FIRST).pcv_information5;
1154     l_function_name       := l_config_values(l_config_values.FIRST).pcv_information6;
1155 
1156     hr_utility.trace('l_source_name: ' || l_source_name);
1157     hr_utility.trace('l_context_name: ' || l_context_name);
1158     hr_utility.trace('l_column_name: ' || l_column_name);
1159     hr_utility.trace('l_function_name: ' || l_function_name);
1160 
1161     /**
1162 
1163     - Assignment ==> Extra details
1164     - Assignment ==> DFF
1165     - Formula Function
1166     **/
1167     IF l_source_name = 'Assignment Developer DF' THEN
1168       l_sqlstr      := 'select ' || l_column_name ||
1169                        ' from per_assignment_extra_info where assignment_id = :assignment_id and AEI_INFORMATION_CATEGORY = :l_context_name';
1170       begin
1171 
1172         hr_utility.trace('string '||l_sqlstr);
1173 				EXECUTE immediate l_sqlstr INTO l_onstrike_ind USING p_assignment_id,l_context_name;
1174 
1175 		    exception
1176 		    WHEN OTHERS THEN
1177 					  hr_utility.trace('Exception in get_oneoff_payment Assignment Developer DFF.');
1178 					  hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
1179 		        return null;
1180 	    end;
1181 
1182     elsif l_source_name = 'PER_ASSIGNMENTS' THEN
1183 
1184 		  l_sqlstr         := 'select ' || l_column_name ||
1185                           ' from per_all_assignments_f where assignment_id = :assignment_id and ASS_ATTRIBUTE_CATEGORY = :l_context_name'||
1186 													' and '||l_effective_date||' between effective_start_date and effective_end_date' ;
1187 			begin
1188 	      EXECUTE immediate l_sqlstr INTO l_onstrike_ind USING p_assignment_id,l_context_name;
1189 
1190 				exception
1191 	      WHEN OTHERS THEN
1192 				  hr_utility.trace('Exception in get_onstrike_indicator.PER_ASSIGNMENTS.');
1193 				  hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
1194 		      return null;
1195 	    end;
1196 
1197     elsif l_source_name = 'Function' THEN
1198 
1199 			begin
1200       SELECT definition
1201       INTO l_package
1202       FROM ff_functions
1203       WHERE name = l_function_name
1204       and business_group_id = g_business_group_id;
1205 
1206       hr_utility.trace('l_package'||l_package);
1207 
1208       l_sqlstr    :=
1209                                'SELECT '
1210                             || l_package
1211                             || ' (:p_assignment_id,:p_eff_date) '
1212                             || 'FROM DUAL';
1213        EXECUTE IMMEDIATE l_sqlstr into l_onstrike_ind USING p_assignment_id,l_effective_date;
1214 
1215        hr_utility.trace('Function value l_onstrike_ind '||l_onstrike_ind);
1216 
1217       exception
1218       WHEN OTHERS THEN
1219 			  hr_utility.trace('Exception in get_l_onstrike_indicator Function.');
1220 			  hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
1221         return null;
1222 			end;
1223 
1224     END IF;
1225 
1226   END IF;
1227  END IF;--source 2 end
1228 
1229   hr_utility.trace(' l_onstrike_ind : ' || l_onstrike_ind);
1230   hr_utility.trace('Leaving l_onstrike_ind');
1231 
1232   return l_onstrike_ind;
1233 
1234 EXCEPTION
1235 WHEN OTHERS THEN
1236   hr_utility.trace('Exception in get_onstrike_indicator end of function block.');
1237   hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
1238   fnd_file.put_line(fnd_file.LOG,'Exception:' || SQLCODE || ' - ' || SQLERRM);
1239   return null;
1240 END get_onstrike_indicator;
1241 
1242 
1243 /*
1244 Returns get_unpaid_absence value for the person from the source configured in Configuration
1245 values page for this BG.
1246 */
1247 FUNCTION get_unpaid_absence(
1248     p_assignment_id NUMBER)
1249   RETURN VARCHAR2
1250 IS
1251   l_config_values PQP_UTILITIES.t_config_values;
1252   g_bon_bal_type_id NUMBER;
1253   l_source_name     VARCHAR2(100);
1254   l_context_name    VARCHAR2(100);
1255   l_column_name     VARCHAR2(100);
1256   l_function_name   VARCHAR2(100);
1257   l_sqlstr          VARCHAR2(1000);
1258   l_unpaid_absence_ind    VARCHAR2(20) := NULL;
1259   l_package         VARCHAR2(100);
1260   l_frequency       VARCHAR2(20);
1261   l_effective_date date;
1262 
1263 cursor csr_asg_start_date is
1264 select max(effective_start_date) from per_all_assignments_f
1265 where assignment_id = p_assignment_id
1266 and assignment_type = 'E'
1267 and effective_start_date <= g_effective_date;
1268 
1269 BEGIN
1270 
1271   hr_utility.trace('Entering get_unpaid_absence');
1272   hr_utility.trace('g_effective_date in get_unpaid_absence : ' || g_effective_date);
1273 
1274   open csr_asg_start_date;
1275   fetch csr_asg_start_date into l_effective_date;
1276   close csr_asg_start_date;
1277 
1278   hr_utility.trace('l_effective_date in get_unpaid_absence : ' || l_effective_date);
1279 
1280 -- Source 2
1281 -- Configuration values
1282   if l_unpaid_absence_ind is null then
1283   hr_utility.trace('in config ');
1284 
1285   --  Use below API to get the config values for the given context in the business group
1286    PQP_UTILITIES.get_config_type_values( p_configuration_type => 'PAY_GB_FPS_ONSTRIKE_INDICATOR' ,
1287                                         p_business_group_id => g_business_group_id ,
1288                                         p_legislation_code => g_legislation_code ,
1289                                         p_tab_config_values => l_config_values );
1290 
1291   IF l_config_values.COUNT > 0 THEN
1292     l_source_name         := l_config_values(l_config_values.FIRST).pcv_information1;
1293     l_context_name        := l_config_values(l_config_values.FIRST).pcv_information4;
1294     l_column_name         := l_config_values(l_config_values.FIRST).pcv_information5;
1295     l_function_name       := l_config_values(l_config_values.FIRST).pcv_information6;
1296 
1297     hr_utility.trace('l_source_name: ' || l_source_name);
1298     hr_utility.trace('l_context_name: ' || l_context_name);
1299     hr_utility.trace('l_column_name: ' || l_column_name);
1300     hr_utility.trace('l_function_name: ' || l_function_name);
1301 
1302     /**
1303 
1304     - Assignment ==> Extra details
1305     - Assignment ==> DFF
1306     - Formula Function
1307     **/
1308     IF l_source_name = 'Assignment Developer DF' THEN
1309       l_sqlstr      := 'select ' || l_column_name ||
1310                        ' from per_assignment_extra_info where assignment_id = :assignment_id and AEI_INFORMATION_CATEGORY = :l_context_name';
1311       begin
1312 
1313         hr_utility.trace('string '||l_sqlstr);
1314 				EXECUTE immediate l_sqlstr INTO l_unpaid_absence_ind USING p_assignment_id,l_context_name;
1315 
1316 		    exception
1317 		    WHEN OTHERS THEN
1318 					  hr_utility.trace('Exception in get_unpaid_absence Assignment Developer DFF.');
1319 					  hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
1320 		        return null;
1321 	    end;
1322 
1323     elsif l_source_name = 'PER_ASSIGNMENTS' THEN
1324 
1325 		  l_sqlstr         := 'select ' || l_column_name ||
1326                           ' from per_all_assignments_f where assignment_id = :assignment_id and ASS_ATTRIBUTE_CATEGORY = :l_context_name'||
1327 													' and '||l_effective_date||' between effective_start_date and effective_end_date' ;
1328 			begin
1329 	      EXECUTE immediate l_sqlstr INTO l_unpaid_absence_ind USING p_assignment_id,l_context_name;
1330 
1331 				exception
1332 	      WHEN OTHERS THEN
1333 				  hr_utility.trace('Exception in get_unpaid_absence.PER_ASSIGNMENTS.');
1334 				  hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
1335 		      return null;
1336 	    end;
1337 
1338     elsif l_source_name = 'Function' THEN
1339 
1340 			begin
1341       SELECT definition
1342       INTO l_package
1343       FROM ff_functions
1344       WHERE name = l_function_name
1345       and business_group_id = g_business_group_id;
1346 
1347       hr_utility.trace('l_package'||l_package);
1348 
1349       l_sqlstr    :=
1350                                'SELECT '
1351                             || l_package
1352                             || ' (:p_assignment_id,:p_eff_date) '
1353                             || 'FROM DUAL';
1354        EXECUTE IMMEDIATE l_sqlstr into l_unpaid_absence_ind USING p_assignment_id,l_effective_date;
1355 
1356        hr_utility.trace('Function value l_unpaid_absence_ind '||l_unpaid_absence_ind);
1357 
1358       exception
1359       WHEN OTHERS THEN
1360 			  hr_utility.trace('Exception in get_unpaid_absence Function.');
1361 			  hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
1362         return null;
1363 			end;
1364 
1365     END IF;
1366 
1367   END IF;
1368  END IF;--source 2 end
1369 
1370   hr_utility.trace(' l_onstrike_ind : ' || l_unpaid_absence_ind);
1371   hr_utility.trace('Leaving get_unpaid_absence');
1372 
1373   return l_unpaid_absence_ind;
1374 
1375 EXCEPTION
1376 WHEN OTHERS THEN
1377   hr_utility.trace('Exception in get_unpaid_absence end of function block.');
1378   hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
1379   fnd_file.put_line(fnd_file.LOG,'Exception:' || SQLCODE || ' - ' || SQLERRM);
1380   return null;
1381 END get_unpaid_absence;
1382 
1383 /*
1384 Returns the passport number for the person from the source configured in Configuration
1385 values page for this BG.
1386 */
1387 FUNCTION get_passport_number(
1388     p_person_id VARCHAR2)
1389   RETURN VARCHAR2
1390 IS
1391   l_config_values PQP_UTILITIES.t_config_values;
1392   g_bon_bal_type_id NUMBER;
1393   l_source_name     VARCHAR2(100);
1394   l_context_name    VARCHAR2(100);
1395   l_column_name     VARCHAR2(100);
1396   l_function_name   VARCHAR2(100);
1397   l_passport_number VARCHAR2(100) := NULL;
1398   sqlstr            VARCHAR2(1000);
1399   l_proc            CONSTANT VARCHAR2(50):= g_package||'get_passport_number';
1400   l_package         VARCHAR2(100);
1401   l_effective_date date;
1402   cursor csr_doc_of_rec
1403   is
1404    select hdei.document_number from hr_document_types hdt,hr_document_extra_info hdei
1405    where hdt.category_code = 'PPT_INFO'
1406    and hdt.document_type_id = hdei.document_type_id
1407    and hdei.person_id = p_person_id;
1408 
1409 CURSOR csr_per_all_people
1410   IS
1411     SELECT l_column_name
1412     FROM per_all_people_f
1413     WHERE person_id        = p_person_id
1414     AND ATTRIBUTE_CATEGORY = l_context_name
1415     ORDER BY effective_start_date,
1416       effective_end_date;
1417 
1418   CURSOR csr_per_extra_people_info
1419   IS
1420     SELECT l_column_name
1421     FROM per_people_extra_info
1422     WHERE person_id              = p_person_id
1423     AND PEI_INFORMATION_CATEGORY = l_context_name;
1424 
1425 cursor csr_per_start_date is
1426 select max(effective_start_date) from per_all_people_f
1427 where person_id = p_person_id
1428 and effective_start_date <= g_effective_date;
1429 
1430 BEGIN
1431   hr_utility.set_location('Entering: '||l_proc,1);
1432   hr_utility.trace('g_effective_date in get_passport_number : ' || g_effective_date);
1433 
1434   open csr_per_start_date;
1435   fetch csr_per_start_date into l_effective_date;
1436   close csr_per_start_date;
1437 
1438   hr_utility.trace('l_effective_date in get_oneoff_payment : ' || l_effective_date);
1439 	  --  Use below API to get the config values for the given context in the business group
1440   	PQP_UTILITIES.get_config_type_values( p_configuration_type => 'PAY_GB_FPS_PASSPORT_NO' ,
1441                                         p_business_group_id => g_business_group_id ,
1442                                         p_legislation_code => g_legislation_code ,
1443                                         p_tab_config_values => l_config_values );
1444 
1445 	  IF l_config_values.COUNT > 0 THEN
1446       l_source_name         := l_config_values(l_config_values.FIRST).pcv_information1;
1447       l_context_name        := l_config_values(l_config_values.FIRST).pcv_information4;
1448       l_column_name         := l_config_values(l_config_values.FIRST).pcv_information5;
1449       l_function_name       := l_config_values(l_config_values.FIRST).pcv_information6;
1450 	    hr_utility.set_location('l_source_name' || l_source_name,1);
1451 	    hr_utility.set_location('l_context_name' || l_context_name,1);
1452 	    hr_utility.set_location('l_column_name' || l_column_name,1);
1453 	    hr_utility.set_location('l_function_name' || l_function_name,1);
1454 
1455   	  /**  The source can be either from Others--> Extra information of the person
1456 	    or from the descriptive flex field on the person form.
1457 	    **/
1458   	  IF l_source_name = 'Extra Person Info DDF' THEN
1459 	    hr_utility.set_location('into Extra Person Info DDF',1);
1460     	  sqlstr        := 'select ' || l_column_name ||
1461 	                       ' from per_people_extra_info where person_id = :p_person_id and PEI_INFORMATION_CATEGORY = :l_context_name';
1462 	    hr_utility.set_location(sqlstr,1);
1463         begin
1464   	    EXECUTE immediate sqlstr INTO l_passport_number USING p_person_id,l_context_name;
1465         Exception
1466         when others then
1467 	    hr_utility.set_location('Exception in extra info : ' || sqlerrm,1);
1468         end;
1469 
1470 	    elsif l_source_name = 'PER_PEOPLE' THEN
1471    	    hr_utility.set_location('into PER_PEOPLE',1);
1472   	    sqlstr           := 'select ' || l_column_name ||
1473     	                      ' from per_all_people_f where person_id = :p_person_id and ATTRIBUTE_CATEGORY = :l_context_name' ||
1474                             ' and :l_effective_date between effective_start_date and effective_end_date' ;
1475 	    hr_utility.trace(sqlstr);
1476          begin
1477   	     EXECUTE immediate sqlstr INTO l_passport_number USING p_person_id,l_context_name,l_effective_date;
1478         exception
1479         when others then
1480         	    hr_utility.trace('Exception in per_people: ' || sqlerrm);
1481         end;
1482 
1483       elsif l_source_name = 'Function' THEN
1484 
1485 			 begin
1486        SELECT definition
1487        INTO l_package
1488        FROM ff_functions
1489        WHERE name = l_function_name
1490        and business_group_id = g_business_group_id;
1491 
1492        hr_utility.trace('l_package'||l_package);
1493 
1494         sqlstr    :=
1495                                'SELECT '
1496                             || l_package
1497                             || ' (:p_person_id,:p_eff_date) '
1498                             || 'FROM DUAL';
1499   	    hr_utility.set_location(sqlstr,1);
1500         EXECUTE IMMEDIATE sqlstr into  l_passport_number USING p_person_id,l_effective_date;
1501          hr_utility.trace('Function value l_passport_number '||l_passport_number);
1502          exception
1503         WHEN OTHERS THEN
1504 	 		  hr_utility.trace('Exception in get_passport_number.Function.');
1505 			  hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
1506         return null;
1507 	  		end;
1508 
1509     	END IF;
1510 		ELSE
1511 				-- GEt the passport number from Documents of record, if it null then get from config values.
1512 				  open csr_doc_of_rec;
1513 				  fetch csr_doc_of_rec into l_passport_number;
1514 				  close csr_doc_of_rec;
1515 
1516   END IF;
1517   hr_utility.set_location('l_passport_number: '||l_passport_number,1);
1518   hr_utility.set_location('Leaving: '||l_proc,1);
1519 
1520   RETURN l_passport_number;
1521 
1522 EXCEPTION
1523 WHEN OTHERS THEN
1524   RETURN l_passport_number;
1525   return null;
1526 END get_passport_number;
1527 
1528 /*
1529 Procedure get_paye_agg_values(
1530     p_asg_id             IN NUMBER,
1531     p_fps_rec3 IN OUT nocopy act_info_rec)
1532 is
1533 begin
1534 end;*/
1535 
1536 -- Procedure to fetch Trivial Commutation Amount Detials
1537 PROCEDURE fetch_trivial_payment(
1538     p_asg_id             IN NUMBER,
1539     p_last_asg_action_id IN NUMBER,
1540     p_fps_rec3 IN OUT nocopy act_info_rec)
1541 IS
1542 
1543 l_proc                CONSTANT VARCHAR2(50):= g_package||'fetch_trivial_payment';
1544 l_arch                BOOLEAN;
1545 l_trivial_a number;
1546 l_trivial_b number;
1547 l_trivial_c number;
1548 l_trivial_a_id number;
1549 l_trivial_b_id number;
1550 l_trivial_c_id number;
1551 l_last_asg_action_id number;
1552 
1553 -- get the defined balance id for specified balance and dimension
1554 cursor get_defined_balance_id
1555     (p_balance_name VARCHAR2, p_dimension_name VARCHAR2) IS
1556 SELECT  defined_balance_id
1557 FROM    pay_defined_balances db
1558       , pay_balance_types b
1559       , pay_balance_dimensions d
1560 WHERE   b.balance_name = p_balance_name
1561 AND     d.dimension_name = p_dimension_name
1562 AND     db.balance_type_id = b.balance_type_id
1563 AND     db.balance_dimension_id = d.balance_dimension_id
1564 AND     b.legislation_code = 'GB'
1565 AND     d.legislation_code = 'GB';
1566 
1567   CURSOR csr_child_act_id(c_lst_act_id NUMBER)
1568   IS
1569     SELECT MAX(ASSIGNMENT_ACTION_ID)
1570     FROM pay_assignment_actions
1571     WHERE SOURCE_ACTION_ID = c_lst_act_id;
1572 
1573   BEGIN
1574     hr_utility.set_location('Entering: '||l_proc,1);
1575     l_arch := true;
1576 
1577 	  OPEN csr_child_act_id(p_last_asg_action_id);
1578     FETCH csr_child_act_id INTO l_last_asg_action_id;
1579     CLOSE csr_child_act_id;
1580 
1581 		if l_last_asg_action_id is null then
1582 		l_last_asg_action_id := p_last_asg_action_id;
1583 		end if;
1584 
1585     OPEN get_defined_balance_id('Trivial Commutation Type A','_ASG_RUN');
1586     FETCH get_defined_balance_id INTO l_trivial_a_id;
1587     CLOSE get_defined_balance_id;
1588 
1589     OPEN get_defined_balance_id('Trivial Commutation Type B','_ASG_RUN');
1590     FETCH get_defined_balance_id INTO l_trivial_b_id;
1591     CLOSE get_defined_balance_id;
1592 
1593     OPEN get_defined_balance_id('Trivial Commutation Type C','_ASG_RUN');
1594     FETCH get_defined_balance_id INTO l_trivial_c_id;
1595     CLOSE get_defined_balance_id;
1596 
1597 	 l_trivial_a  := 100 * NVL(pay_balance_pkg.get_value(l_trivial_a_id,l_last_asg_action_id),0);
1598 
1599 	 l_trivial_b  := 100 * NVL(pay_balance_pkg.get_value(l_trivial_b_id,l_last_asg_action_id),0);
1600 
1601 	 l_trivial_c  := 100 * NVL(pay_balance_pkg.get_value(l_trivial_c_id,l_last_asg_action_id),0);
1602 
1603   p_fps_rec3.assignment_id        := p_asg_id;
1604   p_fps_rec3.action_info_category := 'GB_RTI_FPS_ASG_DET3';
1605 
1606 -- initialized to 0 act info 2,4,6
1607 -- IF PAYE Aggregation values summed up value of all assignments should be reported
1608 if l_trivial_a > 0 then
1609 p_fps_rec3.act_info1 := 'A';
1610 p_fps_rec3.act_info2 := p_fps_rec3.act_info2 + l_trivial_a;
1611 end if;
1612 
1613 if l_trivial_b > 0 then
1614 p_fps_rec3.act_info3 := 'B';
1615 p_fps_rec3.act_info4 := p_fps_rec3.act_info4 + l_trivial_b;
1616 end if;
1617 
1618 if l_trivial_c > 0 then
1619 p_fps_rec3.act_info5 := 'C';
1620 p_fps_rec3.act_info6 := p_fps_rec3.act_info6  +l_trivial_c;
1621 end if;
1622 
1623 hr_utility.set_location('Leaving: '||l_proc,999);
1624 END fetch_trivial_payment;
1625 
1626 
1627 -- Function to fetch Assignment Details3 (CONTEXT - GB RTI ASG DET3)
1628 FUNCTION fetch_asg_det3(
1629     p_asg_id             IN NUMBER,
1630     p_last_asg_action_id IN NUMBER,
1631     p_fps_rec3 IN OUT NOCOPY act_info_rec,
1632     p_fps                IN VARCHAR2 DEFAULT 'Y')
1633   RETURN BOOLEAN
1634 IS
1635 
1636   l_proc                CONSTANT VARCHAR2(50):= g_package||'fetch_asg_det3';
1637   l_arch                BOOLEAN;
1638   l_onstrike varchar2(10);
1639   l_unpaid_absence varchar2(10);
1640   l_payment_nonindiv varchar2(10);
1641   l_asg_id number;
1642 
1643 --To fetch Assignment Extra info details
1644   CURSOR csr_fetch_other_fields
1645   IS
1646     SELECT
1647       AEI_INFORMATION7 payment_nonindiv,
1648       AEI_INFORMATION8 onstrike ,
1649       AEI_INFORMATION9 unpaid_absence
1650     FROM PER_ASSIGNMENT_EXTRA_INFO
1651     WHERE INFORMATION_TYPE       = 'GB_PAY_RTI'
1652     AND AEI_INFORMATION_CATEGORY = 'GB_PAY_RTI'
1653     AND assignment_id            = l_asg_id;
1654 
1655 --To fetch assignment id of the payroll run
1656 	cursor csr_get_asg_id is
1657 		select assignment_id
1658 		from pay_assignment_actions
1659 		where assignment_action_id = p_last_asg_action_id;
1660 
1661 BEGIN
1662 
1663     hr_utility.set_location('Entering: '||l_proc,1);
1664     l_arch := true;
1665 
1666 		open csr_get_asg_id;
1667 		fetch csr_get_asg_id into l_asg_id;
1668 		close csr_get_asg_id;
1669 
1670     hr_utility.set_location('l_asg_id            : '||l_asg_id,1);
1671     hr_utility.set_location('p_last_asg_action_id: '||p_last_asg_action_id,1);
1672 
1673     p_fps_rec3.assignment_id        := l_asg_id;
1674     p_fps_rec3.action_info_category := 'GB_RTI_FPS_ASG_DET3';
1675 
1676 --If First FPS (p_fps = 'N') then dont fetch Trivial Amounts
1677 	if p_fps = 'Y' then
1678 	    fetch_trivial_payment(p_asg_id,p_last_asg_action_id,p_fps_rec3);
1679 	end if;
1680 
1681 -- Get the Irregular payment indicator, periods covered and one-off payment.
1682   OPEN csr_fetch_other_fields;
1683   FETCH csr_fetch_other_fields
1684   INTO l_payment_nonindiv,
1685     l_onstrike,
1686     l_unpaid_absence;
1687   CLOSE csr_fetch_other_fields;
1688 
1689 --Fetch Payment to Non Individual, OnStrike and Unpaid Absence Indicators
1690 -- From Configuration
1691 
1692 if l_payment_nonindiv is null then
1693 l_payment_nonindiv := get_payment_non_indiv(l_asg_id);
1694 end if;
1695 
1696 if l_onstrike is null then
1697 l_onstrike := get_onstrike_indicator(l_asg_id);
1698 end if;
1699 
1700 if l_unpaid_absence is null then
1701 l_unpaid_absence := get_unpaid_absence(l_asg_id);
1702 end if;
1703 
1704 -- Modify the value only if the old value is null or 'N'
1705 -- If PAYE Aggregation 'Y' should be reported , at least one of the assignment in the the prepayment has 'Y'
1706 if l_payment_nonindiv is not null then
1707 		if p_fps_rec3.act_info7 is null or p_fps_rec3.act_info7 ='N' then
1708 			p_fps_rec3.act_info7 := l_payment_nonindiv;
1709     end if;
1710 end if;
1711 
1712 if l_onstrike is not null then
1713 		if p_fps_rec3.act_info8 is null or p_fps_rec3.act_info8 ='N' then
1714 			p_fps_rec3.act_info8 := l_onstrike;
1715     end if;
1716 end if;
1717 
1718 if l_unpaid_absence is not null then
1719 		if p_fps_rec3.act_info9 is null or p_fps_rec3.act_info9 ='N' then
1720 			p_fps_rec3.act_info9 := l_unpaid_absence;
1721     end if;
1722 end if;
1723 
1724     hr_utility.set_location('p_fps_rec3.act_info1: '||p_fps_rec3.act_info1,1);
1725     hr_utility.set_location('p_fps_rec3.act_info2: '||p_fps_rec3.act_info2,1);
1726     hr_utility.set_location('p_fps_rec3.act_info3: '||p_fps_rec3.act_info3,1);
1727     hr_utility.set_location('p_fps_rec3.act_info4: '||p_fps_rec3.act_info4,1);
1728     hr_utility.set_location('p_fps_rec3.act_info5: '||p_fps_rec3.act_info5,1);
1729     hr_utility.set_location('p_fps_rec3.act_info6: '||p_fps_rec3.act_info6,1);
1730     hr_utility.set_location('p_fps_rec3.act_info7: '||p_fps_rec3.act_info7,1);
1731     hr_utility.set_location('p_fps_rec3.act_info8: '||p_fps_rec3.act_info8,1);
1732     hr_utility.set_location('p_fps_rec3.act_info9: '||p_fps_rec3.act_info9,1);
1733 
1734     hr_utility.set_location('Leaving: '||l_proc,999);
1735     RETURN l_arch;
1736 END fetch_asg_det3;
1737 
1738 -- Function to fetch person details (CONTEXT - GB RTI EMPLOYEE DETAILS)
1739 FUNCTION fetch_person_rec(
1740     p_assactid   IN NUMBER,
1741     p_start_date IN DATE,
1742     p_end_date   IN DATE,
1743     p_person_rec OUT nocopy act_info_rec)
1744   RETURN BOOLEAN
1745 IS
1746   l_proc                CONSTANT VARCHAR2(50):= g_package||'fetch_person_rec';
1747   l_arch                BOOLEAN;
1748   l_partner_name        VARCHAR2(50);
1749   l_partner_ni          VARCHAR2(30);
1750   l_partner_surname     VARCHAR2(50);
1751   l_partner_first_name  VARCHAR2(50);
1752   l_partner_second_name VARCHAR2(50);
1753 
1754   CURSOR csr_person_details
1755   IS
1756     SELECT rownum Number_of_employee,
1757       pap.person_id p_person_id,
1758       paa.assignment_id,
1759       SUBSTR(trim(pap.last_name), 1,35) last_name,
1760       SUBSTR(trim(pap.first_name), 1,least(DECODE(instr(trim(pap.first_name),' '),0,35,instr(trim(pap.first_name),' ')),35)) first_name,
1761       SUBSTR(trim(pap.middle_names), 1,least(decode(instr(trim(pap.middle_names),' '),0,35,instr(trim(pap.middle_names),' ')),35)) middle_name,
1762       pap.title title,
1763       SUBSTR(pap.national_identifier,1,9) national_identifier,
1764       pap.date_of_birth date_of_birth,
1765       SUBSTR(pap.sex,1,1) sex ,
1766       DECODE(pap.per_information10,'Y','Y',NULL) agg_paye_flag,
1767       DECODE(pap.per_information9,'Y','Y',NULL) multiple_asg_flag
1768     FROM pay_assignment_actions act,
1769       per_all_assignments_f paa,
1770       per_all_people_f pap
1771     WHERE act.assignment_action_id = p_assactid
1772     AND act.assignment_id          = paa.assignment_id
1773     AND paa.person_id              = pap.person_id
1774 	AND p_end_date between pap.effective_start_date and pap.effective_end_date
1775     AND paa.effective_start_date =
1776        (
1777          SELECT MAX(paa2.effective_start_date)
1778          FROM   per_all_assignments_f paa2
1779          WHERE  paa2.assignment_id         = paa.assignment_id
1780          AND    paa2.assignment_type       = 'E'
1781          AND    paa2.effective_start_date <= p_end_date
1782        );
1783 
1784 
1785   CURSOR csr_partner_details(c_person_id NUMBER)
1786   IS
1787     SELECT NVL(partner_name,''),
1788       partner_ni_number
1789     FROM ssp_medicals
1790     WHERE maternity_id IN
1791       (SELECT MAX(maternity_id)
1792       FROM per_absence_attendances
1793       WHERE person_id                 = c_person_id
1794       AND ABSENCE_ATTENDANCE_TYPE_ID IN
1795         (SELECT ABSENCE_ATTENDANCE_TYPE_ID
1796         FROM per_absence_attendance_types
1797         WHERE ABSENCE_CATEGORY IN ('GB_ADDL_PAT_ADOPT', 'GB_ADDL_PAT_BIRTH')
1798         )
1799       )
1800     AND EVIDENCE_STATUS = 'CURRENT';
1801     l_person_rec csr_person_details%rowtype;
1802 
1803   BEGIN
1804     hr_utility.set_location('Entering: '||l_proc,1);
1805     l_arch := true;
1806     hr_utility.trace('p_assactid: '||p_assactid);
1807     hr_utility.trace('p_start_date: '||TO_CHAR(p_start_date));
1808     hr_utility.trace('p_end_date: '||TO_CHAR(p_end_date));
1809 
1810     OPEN csr_person_details;
1811     FETCH csr_person_details INTO l_person_rec;
1812     CLOSE csr_person_details;
1813 
1814     p_person_rec.person_id            := l_person_rec.p_person_id;
1815     p_person_rec.assignment_id        := l_person_rec.assignment_id;
1816     p_person_rec.action_info_category := 'GB RTI EMPLOYEE DETAILS';
1817     p_person_rec.act_info3            := l_person_rec.last_name;
1818     p_person_rec.act_info4            := l_person_rec.first_name;
1819     p_person_rec.act_info5            := l_person_rec.middle_name;
1820     p_person_rec.act_info6            := l_person_rec.title;
1821     p_person_rec.act_info7            := l_person_rec.national_identifier;
1822     p_person_rec.act_info8            := TO_CHAR(l_person_rec.date_of_birth,'YYYY-MM-DD');
1823     p_person_rec.act_info9            := l_person_rec.sex;
1824     p_person_rec.act_info10           := l_person_rec.agg_paye_flag;
1825     p_person_rec.act_info11           := l_person_rec.multiple_asg_flag;
1826     p_person_rec.act_info16           := get_passport_number(l_person_rec.p_person_id);
1827 
1828     OPEN csr_partner_details(l_person_rec.p_person_id);
1829     FETCH csr_partner_details INTO l_partner_name, l_partner_ni;
1830     CLOSE csr_partner_details;
1831 
1832     if instr(l_partner_name,' ') <> 0 then
1833       l_partner_surname       := trim(SUBSTR(l_partner_name,1,instr(l_partner_name,' ')));
1834     else
1835       l_partner_surname       := l_partner_name;
1836     end if;
1837     l_partner_first_name    := trim(SUBSTR(l_partner_name,LENGTH(l_partner_surname) +1,instr(l_partner_name,' ',LENGTH(l_partner_surname))));
1838     l_partner_second_name   := trim(SUBSTR(l_partner_name,LENGTH(l_partner_surname||l_partner_first_name)+2,(instr(l_partner_name,' ',
1839                                LENGTH(l_partner_surname||l_partner_first_name)+3)) - (LENGTH(l_partner_surname||l_partner_first_name)+2) ));
1840     p_person_rec.act_info12 := l_partner_surname;
1841     p_person_rec.act_info13 := l_partner_first_name;
1842     p_person_rec.act_info14 := l_partner_second_name;
1843     p_person_rec.act_info15 := l_partner_ni;
1844     hr_utility.set_location('Leaving: '||l_proc,999);
1845     RETURN l_arch;
1846   END fetch_person_rec;
1847   --
1848 
1849   -- Function to fetch Assignment details (CONTEXT - GB_RTI_FPS_ASG_DET1)
1850 FUNCTION fetch_fps_asg_det1(
1851     p_start_date         IN DATE,
1852     p_end_date           IN DATE,
1853     p_assactid           IN NUMBER,
1854     p_last_asg_action_id IN NUMBER,
1855 	  p_fps                IN varchar2,
1856     p_person_rec         IN act_info_rec,
1857     p_fps_rec1 OUT nocopy act_info_rec,
1858     p_starter_set  out nocopy varchar2)
1859   RETURN BOOLEAN
1860 IS
1861   l_proc CONSTANT VARCHAR2(50):= g_package||'fetch_fps_asg_det1';
1862   l_arch BOOLEAN;
1863 
1864   --Below cursor fetches the asg extra details of the current assignment
1865   CURSOR csr_fetch_other_fields
1866   IS
1867     SELECT AEI_INFORMATION1 periods_worked,
1868       AEI_INFORMATION3 irr_payment ,
1869       AEI_INFORMATION4 "One-Off Payment",
1870       ASSIGNMENT_EXTRA_INFO_ID,
1871       object_version_number
1872     FROM PER_ASSIGNMENT_EXTRA_INFO
1873     WHERE INFORMATION_TYPE       = 'GB_PAY_RTI'
1874     AND AEI_INFORMATION_CATEGORY = 'GB_PAY_RTI'
1875     AND assignment_id            = p_person_rec.assignment_id;
1876 
1877   --Below cursor fetches the starter details of the current assignment
1878   CURSOR csr_get_starter_details(p_asg_id NUMBER)
1879   IS
1880     SELECT assignment_extra_info_id,
1881       aei_information1 starter_decl,
1882       aei_information2 prev_emp_paye_ref,
1883       aei_information3 prev_tax_code,
1884       aei_information4 date_left_prev_employer,
1885       aei_information5 prev_tax_basis,
1886       aei_information6 last_payment_period_type,
1887       aei_information7 last_payment_period,
1888       aei_information8 starter_flag,
1889       aei_information10 continue_with_student_loan,
1890       aei_information8 not_paid_between,
1891       object_version_number object_version_number
1892     FROM per_assignment_extra_info
1893     WHERE assignment_id  = p_asg_id
1894     AND information_type = 'GB_RTI_ASG_DETAILS';
1895 
1896   --Below cursor fetches the pension details of the current assignment
1897   CURSOR csr_get_pensioner_details(p_asg_id NUMBER)
1898   IS
1899     SELECT assignment_extra_info_id,
1900       aei_information9 pensioner_flag,
1901       aei_information12 date_pension_started,
1902       trim(aei_information13) annual_pension,
1903       aei_information14 recently_bereaved,
1904       object_version_number object_version_number
1905     FROM per_assignment_extra_info
1906     WHERE assignment_id  = p_asg_id
1907     AND information_type = 'GB_RTI_ASG_DETAILS';
1908 
1909   --Below cursor fetches the expat details of the current assignment
1910   CURSOR csr_get_expat_details(p_asg_id NUMBER)
1911   IS
1912     SELECT assignment_extra_info_id,
1913       aei_information15 expat_statement,
1914       aei_information16 date_emp_start_uk,
1915       aei_information17 eea_cw_citizen,
1916       aei_information18 epm6_scheme,
1917       aei_information19 expat_flag,
1918       object_version_number object_version_number
1919     FROM per_assignment_extra_info
1920     WHERE assignment_id  = p_asg_id
1921     AND information_type = 'GB_RTI_ASG_DETAILS';
1922 
1923   --Below cursor fetches the assignment numbers of the current assignment
1924   CURSOR csr_get_asg_numbers
1925   IS
1926     SELECT paaf.assignment_number assignment_number,
1927       paaf_old.assignment_number old_assignment_number
1928     FROM per_all_assignments_f paaf,
1929       per_all_assignments_f paaf_old
1930     WHERE paaf.assignment_id          = p_person_rec.assignment_id
1931     AND ((paaf_old.assignment_id      = paaf.assignment_id
1932     AND paaf_old.effective_start_date < paaf.effective_start_date
1933     AND paaf.effective_start_date     > g_start_year
1934     AND paaf_old.effective_end_date   > g_start_year)
1935     OR (paaf.assignment_number        = paaf_old.assignment_number));
1936 
1937   --Below cursor fetches further payment details of the current assignment
1938   CURSOR csr_get_more_payment_details
1939   IS
1940     SELECT ptp.regular_payment_date,
1941       ptp.period_num,
1942       ptp.period_type
1943     FROM pay_payroll_actions ppa,
1944       pay_assignment_actions paa,
1945       per_time_periods ptp
1946     WHERE assignment_action_id = p_last_asg_action_id
1947     AND ppa.time_period_id     = ptp.time_period_id
1948     AND ppa.payroll_id         = ptp.payroll_id
1949     AND paa.payroll_action_id  = ppa.payroll_action_id;
1950 
1951   --Below cursor fetches further period type details of the current assignment
1952   CURSOR csr_period_type_info(p_period_type VARCHAR2)
1953   IS
1954     SELECT ptpt.number_per_fiscal_year
1955     FROM per_time_period_types ptpt
1956     WHERE p_period_type = ptpt.period_type;
1957 
1958   --Below cursor fetches basic ni details of the current assignment
1959   CURSOR csr_ni_info(c_asg_id NUMBER, c_asg_eff_start_date DATE)
1960   IS
1961     SELECT peevf.screen_entry_value screen_value
1962     FROM
1963       pay_element_entries_f peef,
1964       pay_element_entry_values_f peevf
1965     WHERE peef.assignment_id        = c_asg_id
1966     AND peef.element_entry_id       = peevf.element_entry_id
1967     AND peevf.input_value_id        = g_ni_pt_ivid
1968     AND peef.element_type_id        = g_ni_pt_eid
1969     AND c_asg_eff_start_date between peef.effective_start_date and peef.effective_end_date
1970     AND c_asg_eff_start_date between peevf.effective_start_date and peevf.effective_end_date;
1971 /*
1972     AND peef.effective_start_date  <= g_effective_date
1973     AND peef.effective_end_date    >= c_asg_eff_start_date
1974     AND peevf.effective_start_date <= g_effective_date
1975     AND peevf.effective_end_date   >= c_asg_eff_start_date;
1976 */
1977 
1978   --Below cursor fetches further ni details of the current assignment
1979   CURSOR csr_cat_NI_Details
1980   IS
1981     SELECT MAX(DECODE(name,'Periods',result_value,NULL))
1982     FROM pay_assignment_actions paa ,
1983       pay_run_results prr,
1984       pay_run_result_values prrv,
1985       pay_element_types_f petf ,
1986       pay_input_values_f pivf
1987     WHERE paa.source_action_id   = p_last_asg_action_id
1988     AND paa.assignment_action_id = prr.assignment_action_id
1989     AND prr.element_type_id      = petf.element_type_id
1990     AND petf.element_name        = 'NI DETAILS'
1991     AND prr.run_result_id        = prrv.run_result_id
1992     AND prrv.input_value_id      = pivf.input_value_id
1993     AND p_start_date between petf.effective_start_date and petf.effective_end_date
1994     AND p_start_date between pivf.effective_start_date and pivf.effective_end_date;
1995 
1996   --Below cursor fetches further ni details of the current assignment
1997   CURSOR csr_cat_NI
1998   IS
1999     SELECT MAX(DECODE(name,'Periods',result_value,NULL))
2000     FROM pay_assignment_actions paa ,
2001       pay_run_results prr,
2002       pay_run_result_values prrv,
2003       pay_element_types_f petf ,
2004       pay_input_values_f pivf
2005     WHERE paa.source_action_id   = p_last_asg_action_id
2006     AND paa.assignment_action_id = prr.assignment_action_id
2007     AND prr.element_type_id      = petf.element_type_id
2008     AND petf.element_name        = 'NI'
2009     AND prr.run_result_id        = prrv.run_result_id
2010     AND prrv.input_value_id      = pivf.input_value_id
2011     AND p_start_date between petf.effective_start_date and petf.effective_end_date
2012     AND p_start_date between pivf.effective_start_date and pivf.effective_end_date;
2013 
2014   --Below cursor fetches asg details of the current assignment
2015   CURSOR csr_asg(c_asg_act_id NUMBER, c_effective_date DATE)
2016   IS
2017     SELECT trim(NVL(pap.per_information9,'N')) per_ni_agg_flag,
2018       trim(NVL(pap.per_information10,'N')) per_agg_flag,
2019                asg.assignment_number assignment_number
2020     FROM per_all_people_f pap,
2021       per_all_assignments_f asg,
2022       pay_assignment_actions paa
2023     WHERE paa.assignment_action_id = c_asg_act_id
2024     AND paa.assignment_id          = asg.assignment_id
2025     AND pap.person_id              = asg.person_id
2026     AND c_effective_date BETWEEN asg.effective_start_date AND asg.effective_end_date
2027     AND c_effective_date BETWEEN pap.effective_start_date AND pap.effective_end_date
2028     AND pap.per_information_category = 'GB';
2029     /*AND asg.EFFECTIVE_START_DATE     =
2030       (SELECT MAX(EFFECTIVE_START_DATE)
2031       FROM per_all_assignments_f paaf
2032       WHERE paaf.assignment_id = asg.assignment_id
2033       );*/
2034 
2035   --Below cursor fetches the period start and end dates of payrolls processed in the current prepayment
2036   CURSOR csr_all_payroll_actions(p_asgid NUMBER, p_pre_pay_id NUMBER, p_asg_start DATE, p_start_year DATE, p_end_year DATE)
2037   IS
2038     SELECT
2039       /*+ USE_NL(paa, pact, ptp) */
2040       MIN(ptp.start_date) payroll_period_start_date,
2041       MAX(ptp.end_date) payroll_period_end_date
2042     FROM pay_assignment_actions paa,
2043       pay_payroll_actions pact,
2044       per_time_periods ptp,
2045       pay_assignment_actions paa1,    --Prepayments
2046       pay_payroll_actions ppa1,       --Prepayments
2047       pay_action_interlocks pai       --Prepayments
2048     WHERE paa.assignment_id   = p_asgid
2049     AND paa.payroll_action_id = pact.payroll_action_id
2050     AND pact.time_period_id   = ptp.time_period_id
2051     AND pact.action_type     IN ('Q','R','B','I','V')
2052     AND paa.action_status    IN ('C','S')
2053     AND ptp.regular_payment_date BETWEEN p_start_year AND p_end_year
2054     AND ppa1.payroll_action_id    = p_pre_pay_id
2055     AND ppa1.action_type         IN ('P','U')
2056     AND paa1.payroll_action_id    = ppa1.payroll_action_id
2057     AND paa1.assignment_action_id = pai.locking_action_id
2058     AND paa.assignment_action_id  = pai.locked_action_id;
2059 
2060 -- Cursor to fetch Termination date
2061 cursor csr_terminated_date is
2062      select serv.actual_termination_date actual_termination_date
2063      from
2064             per_all_assignments_f asg,
2065             per_periods_of_service serv
2066      where  asg.assignment_id = p_person_rec.assignment_id
2067      and    asg.period_of_service_id = serv.period_of_service_id
2068      and    p_end_date between asg.effective_start_date and asg.effective_end_date
2069      and    actual_termination_date <= g_effective_date
2070      and    actual_termination_date <= sysdate + 30 ;
2071 
2072   --Below cursor fetches the termination date of the current assignment
2073   CURSOR csr_get_term_asg_info (p_asg_id NUMBER)
2074   IS
2075     SELECT min(paaf.effective_start_date) min_active_start_date
2076     FROM per_all_assignments_f paaf,
2077       per_assignment_status_types past
2078     WHERE paaf.assignment_id           = p_asg_id
2079     AND paaf.assignment_status_type_id = past.assignment_status_type_id
2080     AND past.per_system_status        IN ('ACTIVE_ASSIGN', 'SUSP_ASSIGN');
2081 
2082   --Below cursor fetches the Last Pre-Payment id
2083   CURSOR csr_last_pre_pay_id (c_asg_id NUMBER)
2084   IS
2085   select ppa_prev.payroll_action_id
2086   from pay_payroll_actions ppa_prev,
2087      pay_payroll_actions ppa_current
2088   where ppa_prev.action_type IN ('P','U')
2089   and ppa_prev.payroll_id = ppa_current.payroll_id
2090   and ppa_prev.payroll_action_id < ppa_current.payroll_action_id
2091   and ppa_current.payroll_action_id = g_pre_pact_id
2092   and ppa_prev.payroll_action_id =
2093       (select max(ppa_max.payroll_action_id)
2094        from pay_payroll_actions ppa_max,
2095             pay_assignment_actions paa_max
2096        where ppa_max.payroll_id = ppa_current.payroll_id
2097        and ppa_max.payroll_action_id < ppa_current.payroll_action_id
2098        and ppa_max.action_type IN ('P','U')
2099        and ppa_max.payroll_action_id = paa_max.payroll_action_id
2100        and paa_max.assignment_id = c_asg_id );
2101 
2102   --Below cursor fetches the Previous run FPS assignment_action_id
2103   CURSOR csr_last_fps_asg_act_id (c_last_pre_pay_id NUMBER, c_asg_id NUMBER)
2104   IS
2105   select paa_fps.assignment_action_id
2106   from pay_assignment_actions paa_prepay,
2107        pay_payroll_actions ppa_prepay,
2108        pay_assignment_actions paa_fps,
2109        pay_payroll_actions ppa_fps,
2110        pay_action_interlocks pai
2111   where ppa_prepay.payroll_action_id = c_last_pre_pay_id
2112   and ppa_prepay.payroll_action_id = paa_prepay.payroll_action_id
2113   and paa_prepay.assignment_action_id = pai.locked_action_id
2114   and paa_fps.assignment_action_id = pai.locking_action_id
2115   and paa_fps.payroll_action_id = ppa_fps.payroll_action_id
2116   and ppa_fps.action_type = 'X'
2117   and paa_fps.assignment_id = c_asg_id;
2118 
2119   --Below cursor fetches the New Asg Number reported in Last FPS
2120   CURSOR csr_last_asg_num_submitted(c_last_fps_asg_act_id NUMBER, c_asg_id NUMBER)
2121   IS
2122   select ACTION_INFORMATION13
2123   from pay_action_information
2124   where action_context_id = c_last_fps_asg_act_id
2125   and action_information_category = 'GB_RTI_FPS_ASG_DET1'
2126   and assignment_id = c_asg_id;
2127 
2128 
2129   cursor csr_advance_pay_dates
2130   is
2131   select  fnd_date.canonical_to_date(max(decode(pivf.name,'Start Date',peevf.screen_entry_value,null))) start_date,
2132   fnd_date.canonical_to_date(max(decode(pivf.name,'End Date',peevf.screen_entry_value,null))) end_date
2133   from pay_element_entries_f peef,
2134 	  pay_element_entry_values_f peevf ,
2135 		pay_input_values_f pivf
2136   where
2137   peef.assignment_id = p_person_rec.assignment_id
2138   and peef.ELEMENT_TYPE_ID = g_adv_period_id
2139   and peef.element_entry_id = peevf.element_entry_id
2140   and peevf.input_value_id = pivf.input_value_id
2141   and pivf.element_type_id = peef.ELEMENT_TYPE_ID
2142   and g_effective_date between peevf.effective_start_date and peevf.effective_end_date
2143   and g_effective_date between pivf.effective_start_date and pivf.effective_end_date
2144   and g_effective_date between peef.effective_start_date and peef.effective_end_date;
2145 
2146 -- Cursor to fetch Director details for the person
2147 	cursor csr_director is
2148 	select PER_INFORMATION2 from per_all_people_f papf
2149 	where person_id = p_person_rec.person_id
2150 	and effective_start_date =
2151 	(select max(effective_start_date)
2152 	from per_all_people_f where person_id = papf.person_id and effective_start_date <= g_effective_date);
2153 
2154 
2155   l_starter_rec csr_get_starter_details%rowtype;
2156   l_pensioner_rec csr_get_pensioner_details%rowtype;
2157   l_expat_rec csr_get_expat_details%rowtype;
2158   l_stay_over_6_months           VARCHAR2(1);
2159   l_stay_less_6_months           VARCHAR2(1);
2160   l_working_in_out_UK            VARCHAR2(1);
2161   l_asg_number                   VARCHAR2(30);
2162   l_asg_number_old               VARCHAR2(30);
2163   l_irr_payment_ind              VARCHAR2(10);
2164   l_periods_covered              VARCHAR2(10);
2165   l_one_off_pay                  VARCHAR2(10);
2166   l_payroll_id_changed_indicator VARCHAR2(1) := 'N';
2167   l_payment_date               DATE;
2168   l_period_num                 NUMBER;
2169   l_period_type                VARCHAR2(30);
2170   l_number_per_fiscal_yr       NUMBER;
2171   l_payment_month_number       NUMBER;
2172   l_payment_week_number        NUMBER;
2173   l_ni_process_type            VARCHAR2(10);
2174   l_dir_nic_calc_method        VARCHAR2(30);
2175   l_dir_tax_week_num           NUMBER;
2176   l_per_ni_agg_flag            VARCHAR2(1);
2177   l_per_agg_flag               VARCHAR2(1);
2178   l_aggr_earnings              VARCHAR2(1);
2179   l_starter_decl               VARCHAR2(30);
2180   l_continue_with_student_loan VARCHAR2(30);
2181   l_ovn                        NUMBER;
2182   l_starter_flag               VARCHAR2(1);
2183   l_pensioner_flag             VARCHAR2(1);
2184   l_expat_flag                 VARCHAR2(1);
2185   l_recently_bereaved          VARCHAR2(30);
2186   l_annual_pension             VARCHAR2(30);
2187   l_eea_cw_citizen             VARCHAR2(30);
2188   l_epm6_scheme                VARCHAR2(30);
2189   l_asg_eff_start_date         DATE;
2190   l_frequency                  VARCHAR2(30);
2191   l_payroll_period_start_date  DATE;
2192   l_payroll_period_end_date    DATE;
2193   l_person_actual_term_date  DATE;
2194   l_asg_effective_end_date     DATE;
2195   l_payment_after_leaving      VARCHAR2(1);
2196   l_date_of_leaving            DATE;
2197   l_ovn_extra_info             NUMBER;
2198   l_asg_info_id                NUMBER;
2199   l_start_date DATE;
2200   l_end_date DATE;
2201   l_last_pre_pay_id            NUMBER;
2202   l_last_fps_asg_act_id        NUMBER;
2203   l_last_asg_num_submitted     VARCHAR2(30);
2204   l_person_id   number;
2205   l_min_active_start_date      DATE;
2206   l_director                   VARCHAR2(1);
2207 
2208 BEGIN
2209   hr_utility.set_location('Entering: '||l_proc,1);
2210   l_arch := true;
2211   p_starter_set := 'N';
2212   hr_utility.trace('Start Year: '||TO_CHAR(g_start_year));
2213   hr_utility.trace('End Year: '||TO_CHAR(g_end_year));
2214   hr_utility.trace('Calling csr_get_starter_details');
2215   hr_utility.trace('p_person_rec.assignment_id: '||p_person_rec.assignment_id);
2216 
2217   OPEN csr_get_starter_details(p_person_rec.assignment_id);
2218   FETCH csr_get_starter_details INTO l_starter_rec;
2219   CLOSE csr_get_starter_details;
2220 
2221   l_starter_decl               := NULL;
2222   l_continue_with_student_loan := NULL;
2223   l_starter_flag               := l_starter_rec.starter_flag;
2224   g_reset_flag_type            := NULL;
2225   hr_utility.trace('Calling csr_get_starter_details1');
2226   hr_utility.trace('l_starter_flag: '||l_starter_flag);
2227   hr_utility.trace('l_starter_rec.starter_decl: '||l_starter_rec.starter_decl);
2228   hr_utility.trace(' l_starter_rec.continue_with_student_loan: '|| l_starter_rec.continue_with_student_loan);
2229 
2230   IF (l_starter_flag = 'N'
2231       AND (l_starter_rec.starter_decl IS NOT NULL
2232 	   OR NVL(l_starter_rec.continue_with_student_loan,'N') = 'Y')) THEN
2233     hr_utility.trace('Calling csr_get_starter_details2');
2234     l_starter_decl               := l_starter_rec.starter_decl;
2235     l_continue_with_student_loan := l_starter_rec.continue_with_student_loan;
2236     l_ovn                        := l_starter_rec.object_version_number;
2237     hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false,
2238                                                                p_object_version_number => l_ovn,
2239                                                                p_assignment_extra_info_id => l_starter_rec.assignment_extra_info_id,
2240                                                                p_aei_information_category => 'GB_RTI_ASG_DETAILS',
2241                                                                p_aei_information8 => 'Y');
2242     p_starter_set := 'Y';
2243     g_reset_flag_type := 'STARTER';
2244     hr_utility.trace('Calling csr_get_starter_details3');
2245   END IF;
2246   ---
2247   hr_utility.trace('Calling csr_get_pensioner_details');
2248 
2249   OPEN csr_get_pensioner_details(p_person_rec.assignment_id);
2250   FETCH csr_get_pensioner_details INTO l_pensioner_rec;
2251   CLOSE csr_get_pensioner_details;
2252 
2253   l_recently_bereaved   := NULL;
2254   l_pensioner_flag      := l_pensioner_rec.pensioner_flag;
2255   l_annual_pension      := NULL;
2256   g_reset_flag_type     := NULL;
2257 
2258   hr_utility.trace('l_pensioner_flag: '||l_pensioner_flag);
2259   hr_utility.trace('l_pensioner_rec.pensioner_flag: '||l_pensioner_rec.pensioner_flag);
2260   hr_utility.trace('l_pensioner_rec.recently_bereaved: '||l_pensioner_rec.recently_bereaved);
2261   hr_utility.trace('l_pensioner_rec.annual_pension: '||l_pensioner_rec.annual_pension);
2262 
2263   IF (l_pensioner_flag   = 'N'
2264       AND (NVL(l_pensioner_rec.recently_bereaved,'N') = 'Y'
2265        OR l_pensioner_rec.annual_pension IS NOT NULL)) THEN
2266     l_starter_decl      := 'B';
2267     l_recently_bereaved := l_pensioner_rec.recently_bereaved;
2268     if l_pensioner_rec.annual_pension is not null then
2269        l_annual_pension    := (l_pensioner_rec.annual_pension)*100;
2270    end if;
2271     l_ovn               := l_pensioner_rec.object_version_number;
2272     hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false,
2273                                                                p_object_version_number => l_ovn,
2274                                                                p_assignment_extra_info_id => l_pensioner_rec.assignment_extra_info_id,
2275                                                                p_aei_information_category => 'GB_RTI_ASG_DETAILS',
2276                                                                p_aei_information9 => 'Y');
2277     g_reset_flag_type := 'PENSIONER';
2278   END IF;
2279   ---
2280   hr_utility.trace('Calling csr_get_expat_details');
2281 
2282   OPEN csr_get_expat_details(p_person_rec.assignment_id);
2283   FETCH csr_get_expat_details INTO l_expat_rec;
2284   CLOSE csr_get_expat_details;
2285 
2286   l_eea_cw_citizen     := NULL;
2287   l_epm6_scheme        := NULL;
2288   l_stay_over_6_months := NULL;
2289   l_stay_less_6_months := NULL;
2290   l_working_in_out_UK  := NULL;
2291   l_expat_flag      := l_expat_rec.expat_flag;
2292 
2293   hr_utility.trace('Calling csr_get_expat_details1');
2294   hr_utility.trace('l_expat_flag: '||l_expat_flag);
2295   hr_utility.trace('l_expat_rec.eea_cw_citizen: '||l_expat_rec.eea_cw_citizen);
2296   hr_utility.trace(' l_expat_rec.epm6_scheme: '|| l_expat_rec.epm6_scheme);
2297   hr_utility.trace(' l_expat_rec.expat_statement: '|| l_expat_rec.expat_statement);
2298 
2299   g_reset_flag_type := NULL;
2300 
2301   IF (l_expat_flag   = 'N'
2302       AND (NVL(l_expat_rec.eea_cw_citizen,'N') = 'Y'
2303            OR NVL(l_expat_rec.epm6_scheme,'N') = 'Y'
2304            OR l_expat_rec.expat_statement IS NOT NULL)) THEN
2305     hr_utility.trace('Calling csr_get_expat_details2');
2306     IF l_expat_rec.expat_statement    = 'A' THEN
2307       l_stay_over_6_months           := 'Y';
2308     elsif l_expat_rec.expat_statement = 'B' THEN
2309       l_stay_less_6_months           := 'Y';
2310     elsif l_expat_rec.expat_statement = 'C' THEN
2311       l_working_in_out_UK            := 'Y';
2312     END IF;
2313 
2314     hr_utility.trace('Calling csr_get_expat_details3');
2315     l_starter_decl   := l_expat_rec.expat_statement;
2316     l_eea_cw_citizen := l_expat_rec.eea_cw_citizen;
2317     l_epm6_scheme    := l_expat_rec.epm6_scheme;
2318     l_ovn            := l_expat_rec.object_version_number;
2319     hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false,
2320                                                                p_object_version_number => l_ovn,
2321                                                                p_assignment_extra_info_id => l_expat_rec.assignment_extra_info_id,
2322                                                                p_aei_information_category => 'GB_RTI_ASG_DETAILS',
2323                                                                p_aei_information19 => 'Y');
2324     g_reset_flag_type := 'EXPAT';
2325   END IF;
2326 
2327   OPEN csr_get_term_asg_info (p_person_rec.assignment_id );
2328   FETCH csr_get_term_asg_info INTO l_min_active_start_date;
2329   CLOSE csr_get_term_asg_info;
2330 
2331   ---
2332 IF (l_starter_rec.starter_flag = 'N') THEN
2333   IF((l_starter_rec.starter_decl IS NOT NULL
2334       OR NVL(l_starter_rec.continue_with_student_loan,'N') = 'Y')
2335       AND l_starter_rec.starter_flag = 'N')
2336 
2337   OR ((l_pensioner_rec.date_pension_started IS NOT NULL
2338        OR l_pensioner_rec.annual_pension IS NOT NULL
2339        OR NVL(l_pensioner_rec.recently_bereaved,'N') = 'Y')
2340        AND l_pensioner_rec.pensioner_flag = 'N')
2341 
2342   OR ((l_expat_rec.expat_statement IS NOT NULL
2343        OR l_expat_rec.date_emp_start_uk IS NOT NULL
2344        OR NVL(l_expat_rec.eea_cw_citizen,'N') = 'Y'
2345        OR NVL(l_expat_rec.epm6_scheme,'N') = 'Y')
2346        AND l_expat_rec.expat_flag = 'N') THEN
2347 --       l_asg_eff_start_date         := p_start_date;
2348        if(l_min_active_start_date >= g_start_year) then
2349           l_asg_eff_start_date := l_min_active_start_date;
2350           hr_utility.trace('l_asg_eff_start_date assigned: '||l_asg_eff_start_date);
2351        end if;
2352 
2353   ELSE
2354        l_asg_eff_start_date := NULL;
2355        hr_utility.trace('l_asg_eff_start_date'||l_asg_eff_start_date);
2356   END IF;
2357 END IF;
2358   ---
2359   OPEN csr_get_more_payment_details;
2360   FETCH csr_get_more_payment_details
2361   INTO l_payment_date,
2362     l_period_num,
2363     l_period_type;
2364   CLOSE csr_get_more_payment_details;
2365 
2366   hr_utility.trace('l_payment_date :'||l_payment_date);
2367   hr_utility.trace('l_period_num :'||l_period_num);
2368   hr_utility.trace('l_period_type :'||l_period_type);
2369   g_date_paid:= l_payment_date;
2370 
2371 ---
2372 if (l_period_type = 'Week') then
2373        l_frequency := 'W1';
2374 elsif (l_period_type = 'Bi-Month' or l_period_type = 'Bi-Week') then
2375        l_frequency := 'W2';
2376 elsif (l_period_type = 'Lunar Month') then
2377        l_frequency := 'W4';
2378 elsif (l_period_type = 'Calendar Month' or l_period_type = 'Semi-Month') then
2379        l_frequency := 'M1';
2380 elsif (l_period_type = 'Quarter') then
2381        l_frequency := 'M3';
2382 elsif (l_period_type = 'Semi-Year') then
2383        l_frequency := 'M6';
2384 elsif (l_period_type = 'Year') then
2385        l_frequency := 'MA';
2386 end if;
2387 ---
2388 
2389 --  OPEN csr_asg(p_assactid, g_date_paid);
2390   OPEN csr_asg(p_last_asg_action_id, g_date_paid);
2391   FETCH csr_asg INTO l_per_ni_agg_flag, l_per_agg_flag, l_asg_number;
2392   CLOSE csr_asg;
2393 
2394   hr_utility.trace('l_per_ni_agg_flag :'||l_per_ni_agg_flag);
2395   hr_utility.trace('l_per_agg_flag :'||l_per_agg_flag);
2396   hr_utility.trace('l_frequency :'||l_frequency);
2397 
2398   IF l_per_ni_agg_flag = 'Y' OR l_per_agg_flag = 'Y' THEN
2399     l_aggr_earnings   := 'Y';
2400   ELSE
2401     l_aggr_earnings:= 'N';
2402   END IF;
2403 
2404   OPEN csr_period_type_info(l_period_type);
2405   FETCH csr_period_type_info INTO l_number_per_fiscal_yr;
2406   CLOSE csr_period_type_info;
2407 
2408   hr_utility.trace('l_number_per_fiscal_yr :'||l_number_per_fiscal_yr);
2409   l_payment_month_number    := NULL;
2410   l_payment_week_number     := NULL;
2411 
2412   IF l_number_per_fiscal_yr IN (1,2,4,6,12,24) THEN
2413     l_payment_month_number  := l_period_num;
2414   ELSE
2415     l_payment_week_number := l_period_num;
2416   END IF;
2417 
2418   hr_utility.trace('l_payment_month_number :'||l_payment_month_number);
2419   hr_utility.trace('l_payment_week_number :'||l_payment_week_number);
2420   ---
2421 --New Asg Number and Old Asg Number logic starts below
2422   hr_utility.trace('p_person_rec.assignment_id :'||p_person_rec.assignment_id);
2423 
2424   OPEN csr_last_pre_pay_id(p_person_rec.assignment_id);
2425   FETCH csr_last_pre_pay_id INTO l_last_pre_pay_id;
2426   CLOSE csr_last_pre_pay_id;
2427   hr_utility.trace('l_last_pre_pay_id :'||l_last_pre_pay_id);
2428 
2429   OPEN csr_last_fps_asg_act_id(l_last_pre_pay_id, p_person_rec.assignment_id);
2430   FETCH csr_last_fps_asg_act_id INTO l_last_fps_asg_act_id;
2431   CLOSE csr_last_fps_asg_act_id;
2432   hr_utility.trace('l_last_fps_asg_act_id :'||l_last_fps_asg_act_id);
2433 
2434   OPEN csr_last_asg_num_submitted(l_last_fps_asg_act_id, p_person_rec.assignment_id);
2435   FETCH csr_last_asg_num_submitted INTO l_last_asg_num_submitted;
2436   CLOSE csr_last_asg_num_submitted;
2437   hr_utility.trace('l_last_asg_num_submitted :'||l_last_asg_num_submitted);
2438   hr_utility.trace('l_asg_number :'||l_asg_number);
2439 
2440   if (l_asg_number <> l_last_asg_num_submitted)
2441   then
2442   hr_utility.trace('Inside if asg number is changed');
2443     l_asg_number_old := l_last_asg_num_submitted;
2444     l_payroll_id_changed_indicator := 'Y';
2445   else
2446   hr_utility.trace('Inside else asg number is not changed');
2447     l_asg_number_old               := NULL;
2448     l_payroll_id_changed_indicator := NULL;
2449   end if;
2450 --New Asg Number and Old Asg Number logic ends below
2451   ---
2452   OPEN csr_ni_info(p_person_rec.assignment_id, p_start_date);
2453   FETCH csr_ni_info INTO l_ni_process_type;
2454   CLOSE csr_ni_info;
2455 
2456   hr_utility.trace('l_ni_process_type: '||l_ni_process_type);
2457 
2458   IF (l_ni_process_type     = 'DY') THEN --Director
2459     l_dir_nic_calc_method  := 'AN';
2460   elsif ((l_ni_process_type = 'DN')       --Director Normal
2461     OR (l_ni_process_type   = 'DP')       --Director Pro Rate
2462     OR (l_ni_process_type   = 'DR')       --Director Pro Rate Normal
2463     OR (l_ni_process_type   = 'PY')) THEN --Pensioner Director
2464     l_dir_nic_calc_method  := 'AL';
2465   END IF;
2466   ---
2467 open csr_director;
2468 fetch csr_director into l_director;
2469 close csr_director;
2470 
2471 if l_director = 'Y' then
2472   OPEN csr_cat_NI_Details;
2473   FETCH csr_cat_NI_Details INTO l_dir_tax_week_num;
2474   CLOSE csr_cat_NI_Details;
2475 
2476   IF l_dir_tax_week_num IS NULL THEN
2477     OPEN csr_cat_NI;
2478     FETCH csr_cat_NI INTO l_dir_tax_week_num;
2479     CLOSE csr_cat_NI;
2480   END IF;
2481 
2482 end if;
2483 
2484   -- Get the Irregular payment indicator, periods covered and one-off payment.
2485   OPEN csr_fetch_other_fields;
2486   FETCH csr_fetch_other_fields
2487   INTO l_periods_covered,
2488     l_irr_payment_ind,
2489     l_one_off_pay,
2490     l_asg_info_id,
2491     l_ovn_extra_info;
2492   CLOSE csr_fetch_other_fields;
2493 
2494 hr_utility.trace('l_periods_covered '||l_periods_covered);
2495 hr_utility.trace('l_irr_payment_ind '||l_irr_payment_ind);
2496 hr_utility.trace('l_one_off_pay '||l_one_off_pay);
2497 
2498 hr_utility.trace('l_asg_info_id '||l_asg_info_id);
2499 hr_utility.trace('l_ovn_extra_info '||l_ovn_extra_info);
2500 
2501 if l_periods_covered is null then
2502 l_periods_covered := get_periods_covered(p_person_rec.assignment_id);
2503 end if;
2504 
2505 if l_irr_payment_ind is null then
2506 l_irr_payment_ind := get_irregular_payment(p_person_rec.assignment_id);
2507 end if;
2508 
2509 if l_one_off_pay is null then
2510 l_one_off_pay := get_oneoff_payment(p_person_rec.assignment_id);
2511 end if;
2512 
2513 
2514 hr_utility.trace('l_periods_covered '||l_periods_covered);
2515 hr_utility.trace('l_irr_payment_ind '||l_irr_payment_ind);
2516 hr_utility.trace('l_one_off_pay '||l_one_off_pay);
2517 
2518   open csr_advance_pay_dates;
2519   fetch csr_advance_pay_dates into l_start_date, l_end_date;
2520   close csr_advance_pay_dates;
2521   hr_utility.trace('l_start_date : ' || l_start_date);
2522   hr_utility.trace('l_end_date : ' || l_end_date);
2523 
2524   if l_start_date is not null and  l_end_date is not null then
2525   hr_utility.trace('test3');
2526     select
2527     pay_advance_pay_pkg.advanced_periods(
2528     p_person_rec.assignment_id,
2529     l_start_date,
2530     l_end_date
2531     ) into l_periods_covered from dual;
2532   hr_utility.trace('test4');
2533   -- reset the periods covered value to 1
2534   elsif l_periods_covered IS NOT NULL AND l_periods_covered <> 1 THEN
2535     hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false,
2536                                                                p_object_version_number => l_ovn_extra_info,
2537                                                                p_assignment_extra_info_id => l_asg_info_id,
2538                                                                p_aei_information_category => 'GB_PAY_RTI',
2539                                                                p_aei_information1 => 1);
2540 	else
2541      l_periods_covered := 1;
2542   end if;
2543   hr_utility.trace('l_periods_covered : ' || l_periods_covered);
2544   hr_utility.trace('l_dir_tax_week_num : '|| l_dir_tax_week_num);
2545   ---
2546 
2547   IF (l_irr_payment_ind = 'Y') THEN
2548     l_frequency        := 'IR';
2549   elsif (l_one_off_pay  = 'Y') THEN
2550     l_frequency        := 'IO';
2551   END IF;
2552 
2553   OPEN csr_all_payroll_actions(p_person_rec.assignment_id, g_pre_pact_id, p_start_date, g_start_year,g_end_year);
2554   FETCH csr_all_payroll_actions
2555   INTO l_payroll_period_start_date,
2556     l_payroll_period_end_date;
2557   CLOSE csr_all_payroll_actions;
2558 
2559   open csr_terminated_date;
2560   fetch csr_terminated_date into l_person_actual_term_date;
2561   close csr_terminated_date;
2562   ---
2563   hr_utility.trace('p_end_date  : '|| p_end_date);
2564   hr_utility.trace('l_person_actual_term_date  : '|| l_person_actual_term_date);
2565 
2566   IF p_fps = 'Y' and l_person_actual_term_date is not null THEN
2567    IF l_person_actual_term_date >= l_payroll_period_start_date and l_person_actual_term_date <= l_payroll_period_end_date THEN
2568     l_payment_after_leaving := 'N';
2569    ELSE
2570     l_payment_after_leaving := 'Y';
2571    END IF;
2572   ELSE
2573     l_payment_after_leaving := 'N';
2574   END IF;
2575 
2576     l_date_of_leaving := l_person_actual_term_date;
2577 
2578 
2579 -- If Date of Leaving is less then Start of the Tax Year - 6
2580 -- Updating it to Payment Date as Validation rule will fail
2581 if l_date_of_leaving is not null and l_date_of_leaving < (add_months(g_start_year,-72)+1) then
2582 	l_date_of_leaving := l_payment_date;
2583 end if;
2584 
2585 
2586   hr_utility.trace('l_date_of_leaving : '|| l_date_of_leaving);
2587   hr_utility.trace('l_starter_decl : '|| l_starter_decl);
2588   hr_utility.trace('l_asg_eff_start_date : '|| l_asg_eff_start_date);
2589   ---
2590   hr_utility.trace('Assigning values to p_fps_rec1');
2591 
2592   p_fps_rec1.assignment_id        := p_person_rec.assignment_id;
2593   p_fps_rec1.action_info_category := 'GB_RTI_FPS_ASG_DET1';
2594   p_fps_rec1.act_info1            := to_char(l_asg_eff_start_date,'YYYY-MM-DD');
2595   p_fps_rec1.act_info2            := to_char(l_date_of_leaving,'YYYY-MM-DD');
2596   p_fps_rec1.act_info3            := to_char(l_payment_date,'YYYY-MM-DD');
2597   p_fps_rec1.act_info4            := l_starter_decl;
2598   p_fps_rec1.act_info5            := l_continue_with_student_loan;
2599   p_fps_rec1.act_info6            := l_stay_over_6_months;
2600   p_fps_rec1.act_info7            := l_stay_less_6_months;
2601   p_fps_rec1.act_info8            := l_working_in_out_UK;
2602   p_fps_rec1.act_info9            := l_eea_cw_citizen;
2603   p_fps_rec1.act_info10           := l_epm6_scheme;
2604   p_fps_rec1.act_info11           := NULL; -- Recently Bereaved spouse / Civil Partner (State Pension) Not applicable
2605   p_fps_rec1.act_info12           := l_recently_bereaved;
2606   p_fps_rec1.act_info13           := l_asg_number;
2607   p_fps_rec1.act_info14           := l_payroll_id_changed_indicator;
2608   p_fps_rec1.act_info15           := l_asg_number_old;
2609   p_fps_rec1.act_info16           := l_irr_payment_ind;
2610   p_fps_rec1.act_info17           := l_frequency;
2611   p_fps_rec1.act_info18           := l_payment_week_number;
2612   p_fps_rec1.act_info19           := l_payment_month_number;
2613   p_fps_rec1.act_info20           := l_periods_covered;
2614   p_fps_rec1.act_info21           := l_aggr_earnings;
2615   p_fps_rec1.act_info22           := l_payment_after_leaving;
2616   p_fps_rec1.act_info23           := get_hours_worked(p_person_rec.assignment_id);
2617   p_fps_rec1.act_info24           := l_dir_nic_calc_method;
2618   p_fps_rec1.act_info25           := l_dir_tax_week_num;
2619   p_fps_rec1.act_info26           := l_annual_pension;
2620   p_fps_rec1.act_info27           := NULL; -- State Pension Not applicable
2621 
2622   hr_utility.set_location('Leaving: '||l_proc,999);
2623   RETURN l_arch;
2624 
2625 EXCEPTION
2626 WHEN OTHERS THEN
2627   hr_utility.set_location('Error in function fetch_fps_asg_det1 ', 15);
2628   hr_utility.trace('Exception:' || SQLCODE || ' - ' || SQLERRM );
2629   fnd_file.put_line(fnd_file.LOG,'Exception:' || SQLCODE || ' - ' || SQLERRM);
2630   RAISE;
2631 END fetch_fps_asg_det1;
2632 --
2633 
2634 -- Function to fetch Assignment details (CONTEXT - GB_RTI_FPS_ASG_DET1)
2635 -- When there are no payments for the assignment this function will be called for Ni only Agg asgs
2636 FUNCTION fetch_fps_nopay_asg_det1(
2637     p_start_date         IN DATE,
2638     p_end_date           IN DATE,
2639     p_assactid           IN NUMBER,
2640     p_last_asg_action_id IN NUMBER,
2641 	  p_fps                IN varchar2,
2642     p_person_rec         IN act_info_rec,
2643     p_fps_rec1 OUT nocopy act_info_rec,
2644     p_starter_set  out nocopy varchar2)
2645   RETURN BOOLEAN
2646 IS
2647   l_proc CONSTANT VARCHAR2(50):= g_package||'fetch_fps_asg_det1';
2648   l_arch BOOLEAN;
2649 
2650   --Below cursor fetches the asg extra details of the current assignment
2651   CURSOR csr_fetch_other_fields
2652   IS
2653     SELECT AEI_INFORMATION1 periods_worked,
2654       AEI_INFORMATION3 irr_payment ,
2655       AEI_INFORMATION4 "One-Off Payment",
2656       ASSIGNMENT_EXTRA_INFO_ID,
2657       object_version_number
2658     FROM PER_ASSIGNMENT_EXTRA_INFO
2659     WHERE INFORMATION_TYPE       = 'GB_PAY_RTI'
2660     AND AEI_INFORMATION_CATEGORY = 'GB_PAY_RTI'
2661     AND assignment_id            = p_person_rec.assignment_id;
2662 
2663   --Below cursor fetches the starter details of the current assignment
2664   CURSOR csr_get_starter_details(p_asg_id NUMBER)
2665   IS
2666     SELECT assignment_extra_info_id,
2667       aei_information1 starter_decl,
2668       aei_information2 prev_emp_paye_ref,
2669       aei_information3 prev_tax_code,
2670       aei_information4 date_left_prev_employer,
2671       aei_information5 prev_tax_basis,
2672       aei_information6 last_payment_period_type,
2673       aei_information7 last_payment_period,
2674       aei_information8 starter_flag,
2675       aei_information10 continue_with_student_loan,
2676       aei_information8 not_paid_between,
2677       object_version_number object_version_number
2678     FROM per_assignment_extra_info
2679     WHERE assignment_id  = p_asg_id
2680     AND information_type = 'GB_RTI_ASG_DETAILS';
2681 
2682   --Below cursor fetches the pension details of the current assignment
2683   CURSOR csr_get_pensioner_details(p_asg_id NUMBER)
2684   IS
2685     SELECT assignment_extra_info_id,
2686       aei_information9 pensioner_flag,
2687       aei_information12 date_pension_started,
2688       trim(aei_information13) annual_pension,
2689       aei_information14 recently_bereaved,
2690       object_version_number object_version_number
2691     FROM per_assignment_extra_info
2692     WHERE assignment_id  = p_asg_id
2693     AND information_type = 'GB_RTI_ASG_DETAILS';
2694 
2695   --Below cursor fetches the expat details of the current assignment
2696   CURSOR csr_get_expat_details(p_asg_id NUMBER)
2697   IS
2698     SELECT assignment_extra_info_id,
2699       aei_information15 expat_statement,
2700       aei_information16 date_emp_start_uk,
2701       aei_information17 eea_cw_citizen,
2702       aei_information18 epm6_scheme,
2703       aei_information19 expat_flag,
2704       object_version_number object_version_number
2705     FROM per_assignment_extra_info
2706     WHERE assignment_id  = p_asg_id
2707     AND information_type = 'GB_RTI_ASG_DETAILS';
2708 
2709   --Below cursor fetches the assignment numbers of the current assignment
2710   CURSOR csr_get_asg_numbers
2711   IS
2712     SELECT paaf.assignment_number assignment_number,
2713       paaf_old.assignment_number old_assignment_number
2714     FROM per_all_assignments_f paaf,
2715       per_all_assignments_f paaf_old
2716     WHERE paaf.assignment_id          = p_person_rec.assignment_id
2717     AND ((paaf_old.assignment_id      = paaf.assignment_id
2718     AND paaf_old.effective_start_date < paaf.effective_start_date
2719     AND paaf.effective_start_date     > g_start_year
2720     AND paaf_old.effective_end_date   > g_start_year)
2721     OR (paaf.assignment_number        = paaf_old.assignment_number));
2722 
2723   --Below cursor fetches further payment details of the current assignment
2724   CURSOR csr_get_more_payment_details(l_last_asg_action_id number)
2725   IS
2726     SELECT ptp.regular_payment_date,
2727       ptp.period_num,
2728       ptp.period_type
2729     FROM pay_payroll_actions ppa,
2730       pay_assignment_actions paa,
2731       per_time_periods ptp
2732     WHERE assignment_action_id = l_last_asg_action_id
2733     AND ppa.time_period_id     = ptp.time_period_id
2734     AND ppa.payroll_id         = ptp.payroll_id
2735     AND paa.payroll_action_id  = ppa.payroll_action_id;
2736 
2737   --Below cursor fetches further period type details of the current assignment
2738   CURSOR csr_period_type_info(p_period_type VARCHAR2)
2739   IS
2740     SELECT ptpt.number_per_fiscal_year
2741     FROM per_time_period_types ptpt
2742     WHERE p_period_type = ptpt.period_type;
2743 
2744   --Below cursor fetches basic ni details of the current assignment
2745   CURSOR csr_ni_info(c_asg_id NUMBER, c_asg_eff_start_date DATE)
2746   IS
2747     SELECT peevf.screen_entry_value screen_value
2748     FROM
2749       pay_element_entries_f peef,
2750       pay_element_entry_values_f peevf
2751     WHERE peef.assignment_id        = c_asg_id
2752     AND peef.element_entry_id       = peevf.element_entry_id
2753     AND peevf.input_value_id        = g_ni_pt_ivid
2754     AND peef.element_type_id        = g_ni_pt_eid
2755     AND c_asg_eff_start_date between peef.effective_start_date and peef.effective_end_date
2756     AND c_asg_eff_start_date between peevf.effective_start_date and peevf.effective_end_date;
2757 
2758 
2759   --Below cursor fetches further ni details of the current assignment
2760   CURSOR csr_cat_NI_Details
2761   IS
2762     SELECT MAX(DECODE(name,'Periods',result_value,NULL))
2763     FROM pay_assignment_actions paa ,
2764       pay_run_results prr,
2765       pay_run_result_values prrv,
2766       pay_element_types_f petf ,
2767       pay_input_values_f pivf
2768     WHERE paa.source_action_id   = p_last_asg_action_id
2769     AND paa.assignment_action_id = prr.assignment_action_id
2770     AND prr.element_type_id      = petf.element_type_id
2771     AND petf.element_name        = 'NI DETAILS'
2772     AND prr.run_result_id        = prrv.run_result_id
2773     AND prrv.input_value_id      = pivf.input_value_id
2774     AND p_start_date between petf.effective_start_date and petf.effective_end_date
2775     AND p_start_date between pivf.effective_start_date and pivf.effective_end_date;
2776 
2777   --Below cursor fetches further ni details of the current assignment
2778   CURSOR csr_cat_NI
2779   IS
2780     SELECT MAX(DECODE(name,'Periods',result_value,NULL))
2781     FROM pay_assignment_actions paa ,
2782       pay_run_results prr,
2783       pay_run_result_values prrv,
2784       pay_element_types_f petf ,
2785       pay_input_values_f pivf
2786     WHERE paa.source_action_id   = p_last_asg_action_id
2787     AND paa.assignment_action_id = prr.assignment_action_id
2788     AND prr.element_type_id      = petf.element_type_id
2789     AND petf.element_name        = 'NI'
2790     AND prr.run_result_id        = prrv.run_result_id
2791     AND prrv.input_value_id      = pivf.input_value_id
2792     AND p_start_date between petf.effective_start_date and petf.effective_end_date
2793     AND p_start_date between pivf.effective_start_date and pivf.effective_end_date;
2794 
2795 
2796  --Below cursor fetches asg details of the current assignment
2797   CURSOR csr_asg(c_asg_act_id NUMBER, c_effective_date DATE)
2798   IS
2799     SELECT trim(NVL(pap.per_information9,'N')) per_ni_agg_flag,
2800       trim(NVL(pap.per_information10,'N')) per_agg_flag,
2801                asg.assignment_number assignment_number
2802     FROM per_all_people_f pap,
2803       per_all_assignments_f asg
2804     WHERE asg.assignment_id = c_asg_act_id
2805     AND pap.person_id              = asg.person_id
2806     AND c_effective_date BETWEEN asg.effective_start_date AND asg.effective_end_date
2807     AND c_effective_date BETWEEN pap.effective_start_date AND pap.effective_end_date
2808     AND pap.per_information_category = 'GB';
2809 
2810 
2811   --Below cursor fetches the period start and end dates of payrolls processed in the current prepayment
2812   CURSOR csr_all_payroll_actions(p_asgid NUMBER, p_pre_pay_id NUMBER, p_asg_start DATE, p_start_year DATE, p_end_year DATE)
2813   IS
2814     SELECT
2815       /*+ USE_NL(paa, pact, ptp) */
2816       MIN(ptp.start_date) payroll_period_start_date,
2817       MAX(ptp.end_date) payroll_period_end_date
2818     FROM pay_assignment_actions paa,
2819       pay_payroll_actions pact,
2820       per_time_periods ptp,
2821       pay_assignment_actions paa1,    --Prepayments
2822       pay_payroll_actions ppa1,       --Prepayments
2823       pay_action_interlocks pai       --Prepayments
2824     WHERE paa.assignment_id   = p_asgid
2825     AND paa.payroll_action_id = pact.payroll_action_id
2826     AND pact.time_period_id   = ptp.time_period_id
2827     AND pact.action_type     IN ('Q','R','B','I','V')
2828     AND paa.action_status    IN ('C','S')
2829     AND ptp.regular_payment_date BETWEEN p_start_year AND p_end_year
2830     AND ppa1.payroll_action_id    = p_pre_pay_id
2831     AND ppa1.action_type         IN ('P','U')
2832     AND paa1.payroll_action_id    = ppa1.payroll_action_id
2833     AND paa1.assignment_action_id = pai.locking_action_id
2834     AND paa.assignment_action_id  = pai.locked_action_id;
2835 
2836 -- Cursor to fetch Termination date
2837 cursor csr_terminated_date is
2838      select serv.actual_termination_date actual_termination_date
2839      from
2840             per_all_assignments_f asg,
2841             per_periods_of_service serv
2842      where  asg.assignment_id = p_person_rec.assignment_id
2843      and    asg.period_of_service_id = serv.period_of_service_id
2844      and    p_end_date between asg.effective_start_date and asg.effective_end_date
2845      and    actual_termination_date <= g_effective_date
2846      and    actual_termination_date <= sysdate + 30 ;
2847 
2848   --Below cursor fetches the termination date of the current assignment
2849   CURSOR csr_get_term_asg_info (p_asg_id NUMBER)
2850   IS
2851     SELECT min(paaf.effective_start_date) min_active_start_date
2852     FROM per_all_assignments_f paaf,
2853       per_assignment_status_types past
2854     WHERE paaf.assignment_id           = p_asg_id
2855     AND paaf.assignment_status_type_id = past.assignment_status_type_id
2856     AND past.per_system_status        IN ('ACTIVE_ASSIGN', 'SUSP_ASSIGN');
2857 
2858   --Below cursor fetches the Last Pre-Payment id
2859   CURSOR csr_last_pre_pay_id (c_asg_id NUMBER)
2860   IS
2861   select ppa_prev.payroll_action_id
2862   from pay_payroll_actions ppa_prev,
2863      pay_payroll_actions ppa_current
2864   where ppa_prev.action_type IN ('P','U')
2865   and ppa_prev.payroll_id = ppa_current.payroll_id
2866   and ppa_prev.payroll_action_id < ppa_current.payroll_action_id
2867   and ppa_current.payroll_action_id = g_pre_pact_id
2868   and ppa_prev.payroll_action_id =
2869       (select max(ppa_max.payroll_action_id)
2870        from pay_payroll_actions ppa_max,
2871             pay_assignment_actions paa_max
2872        where ppa_max.payroll_id = ppa_current.payroll_id
2873        and ppa_max.payroll_action_id < ppa_current.payroll_action_id
2874        and ppa_max.action_type IN ('P','U')
2875        and ppa_max.payroll_action_id = paa_max.payroll_action_id
2876        and paa_max.assignment_id = c_asg_id );
2877 
2878   --Below cursor fetches the Previous run FPS assignment_action_id
2879   CURSOR csr_last_fps_asg_act_id (c_last_pre_pay_id NUMBER, c_asg_id NUMBER)
2880   IS
2881   select paa_fps.assignment_action_id
2882   from pay_assignment_actions paa_prepay,
2883        pay_payroll_actions ppa_prepay,
2884        pay_assignment_actions paa_fps,
2885        pay_payroll_actions ppa_fps,
2886        pay_action_interlocks pai
2887   where ppa_prepay.payroll_action_id = c_last_pre_pay_id
2888   and ppa_prepay.payroll_action_id = paa_prepay.payroll_action_id
2889   and paa_prepay.assignment_action_id = pai.locked_action_id
2890   and paa_fps.assignment_action_id = pai.locking_action_id
2891   and paa_fps.payroll_action_id = ppa_fps.payroll_action_id
2892   and ppa_fps.action_type = 'X'
2893   and paa_fps.assignment_id = c_asg_id;
2894 
2895   --Below cursor fetches the New Asg Number reported in Last FPS
2896   CURSOR csr_last_asg_num_submitted(c_last_fps_asg_act_id NUMBER, c_asg_id NUMBER)
2897   IS
2898   select ACTION_INFORMATION13
2899   from pay_action_information
2900   where action_context_id = c_last_fps_asg_act_id
2901   and action_information_category = 'GB_RTI_FPS_ASG_DET1'
2902   and assignment_id = c_asg_id;
2903 
2904 
2905   cursor csr_advance_pay_dates
2906   is
2907   select  fnd_date.canonical_to_date(max(decode(pivf.name,'Start Date',peevf.screen_entry_value,null))) start_date,
2908   fnd_date.canonical_to_date(max(decode(pivf.name,'End Date',peevf.screen_entry_value,null))) end_date
2909   from pay_element_entries_f peef,
2910 	  pay_element_entry_values_f peevf ,
2911 		pay_input_values_f pivf
2912   where
2913   peef.assignment_id = p_person_rec.assignment_id
2914   and peef.ELEMENT_TYPE_ID = g_adv_period_id
2915   and peef.element_entry_id = peevf.element_entry_id
2916   and peevf.input_value_id = pivf.input_value_id
2917   and pivf.element_type_id = peef.ELEMENT_TYPE_ID
2918   and g_effective_date between peevf.effective_start_date and peevf.effective_end_date
2919   and g_effective_date between pivf.effective_start_date and pivf.effective_end_date
2920   and g_effective_date between peef.effective_start_date and peef.effective_end_date;
2921 
2922 cursor csr_asg_act_id is
2923     SELECT
2924       /*+ USE_NL(paa, pact, ptp) */
2925       to_number(SUBSTR(MAX(lpad(paa.action_sequence,15,'0')
2926       || paa.assignment_action_id),16)) max_asg_act_id,
2927       MAX(pact.effective_date) effective_date
2928     FROM per_all_assignments_f paaf,
2929       pay_assignment_actions paa,
2930       pay_payroll_actions pact,
2931       per_time_periods ptp,
2932       pay_assignment_actions paa1, --Prepayments
2933       pay_payroll_actions ppa1,    --Prepayments
2934       pay_action_interlocks pai    --Prepayments
2935     WHERE paaf.person_id = p_person_rec.person_id--59437
2936 		AND sysdate between paaf.effective_start_date and paaf.effective_end_date
2937     AND paa.assignment_id   = paaf.assignment_id
2938     AND paa.payroll_action_id = pact.payroll_action_id
2939     AND pact.time_period_id   = ptp.time_period_id
2940     AND pact.action_type     IN ('Q','R','I','V','B')
2941     AND paa.action_status    IN ('C','S')
2942     AND ptp.regular_payment_date BETWEEN  g_start_year AND g_end_year--p_start_year AND p_end_year
2943     AND ppa1.payroll_action_id    = g_pre_pact_id --1160712
2944     AND ppa1.action_type         IN ('P','U')
2945     AND paa1.payroll_action_id    = ppa1.payroll_action_id
2946     AND paa1.assignment_action_id = pai.locking_action_id
2947     AND paa.assignment_action_id  = pai.locked_action_id;
2948 
2949 
2950   l_starter_rec csr_get_starter_details%rowtype;
2951   l_pensioner_rec csr_get_pensioner_details%rowtype;
2952   l_expat_rec csr_get_expat_details%rowtype;
2953   l_stay_over_6_months           VARCHAR2(1);
2954   l_stay_less_6_months           VARCHAR2(1);
2955   l_working_in_out_UK            VARCHAR2(1);
2956   l_asg_number                   VARCHAR2(30);
2957   l_asg_number_old               VARCHAR2(30);
2958   l_irr_payment_ind              VARCHAR2(10);
2959   l_periods_covered              VARCHAR2(10);
2960   l_one_off_pay                  VARCHAR2(10);
2961   l_payroll_id_changed_indicator VARCHAR2(1) := 'N';
2962   l_payment_date               DATE;
2963   l_period_num                 NUMBER;
2964   l_period_type                VARCHAR2(30);
2965   l_number_per_fiscal_yr       NUMBER;
2966   l_payment_month_number       NUMBER;
2967   l_payment_week_number        NUMBER;
2968   l_ni_process_type            VARCHAR2(10);
2969   l_dir_nic_calc_method        VARCHAR2(30);
2970   l_dir_tax_week_num           NUMBER;
2971   l_per_ni_agg_flag            VARCHAR2(1);
2972   l_per_agg_flag               VARCHAR2(1);
2973   l_aggr_earnings              VARCHAR2(1);
2974   l_starter_decl               VARCHAR2(30);
2975   l_continue_with_student_loan VARCHAR2(30);
2976   l_ovn                        NUMBER;
2977   l_starter_flag               VARCHAR2(1);
2978   l_pensioner_flag             VARCHAR2(1);
2979   l_expat_flag                 VARCHAR2(1);
2980   l_recently_bereaved          VARCHAR2(30);
2981   l_annual_pension             VARCHAR2(30);
2982   l_eea_cw_citizen             VARCHAR2(30);
2983   l_epm6_scheme                VARCHAR2(30);
2984   l_asg_eff_start_date         DATE;
2985   l_frequency                  VARCHAR2(30);
2986   l_payroll_period_start_date  DATE;
2987   l_payroll_period_end_date    DATE;
2988   l_person_actual_term_date  DATE;
2989   l_asg_effective_end_date     DATE;
2990   l_payment_after_leaving      VARCHAR2(1);
2991   l_date_of_leaving            DATE;
2992   l_ovn_extra_info             NUMBER;
2993   l_asg_info_id                NUMBER;
2994   l_start_date DATE;
2995   l_end_date DATE;
2996   l_last_pre_pay_id            NUMBER;
2997   l_last_fps_asg_act_id        NUMBER;
2998   l_last_asg_num_submitted     VARCHAR2(30);
2999   l_person_id   number;
3000   l_min_active_start_date      DATE;
3001   l_last_asg_action_id         NUMBER;
3002   l_last_effective_date             DATE;
3003 
3004 BEGIN
3005   hr_utility.set_location('Entering: '||l_proc,1);
3006   l_arch := true;
3007   p_starter_set := 'N';
3008   hr_utility.trace('Start Year: '||TO_CHAR(g_start_year));
3009   hr_utility.trace('End Year: '||TO_CHAR(g_end_year));
3010 	  hr_utility.trace('Calling csr_get_starter_details');
3011   hr_utility.trace('p_person_rec.assignment_id: '||p_person_rec.assignment_id);
3012 
3013   OPEN csr_get_starter_details(p_person_rec.assignment_id);
3014   FETCH csr_get_starter_details INTO l_starter_rec;
3015   CLOSE csr_get_starter_details;
3016 
3017   l_starter_decl               := NULL;
3018   l_continue_with_student_loan := NULL;
3019   l_starter_flag               := l_starter_rec.starter_flag;
3020   g_reset_flag_type            := NULL;
3021   hr_utility.trace('Calling csr_get_starter_details1');
3022   hr_utility.trace('l_starter_flag: '||l_starter_flag);
3023   hr_utility.trace('l_starter_rec.starter_decl: '||l_starter_rec.starter_decl);
3024   hr_utility.trace(' l_starter_rec.continue_with_student_loan: '|| l_starter_rec.continue_with_student_loan);
3025 
3026   IF (l_starter_flag = 'N'
3027       AND (l_starter_rec.starter_decl IS NOT NULL
3028 	   OR l_starter_rec.continue_with_student_loan IS NOT NULL )) THEN
3029     hr_utility.trace('Calling csr_get_starter_details2');
3030     l_starter_decl               := l_starter_rec.starter_decl;
3031     l_continue_with_student_loan := l_starter_rec.continue_with_student_loan;
3032     l_ovn                        := l_starter_rec.object_version_number;
3033     hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false,
3034                                                                p_object_version_number => l_ovn,
3035                                                                p_assignment_extra_info_id => l_starter_rec.assignment_extra_info_id,
3036                                                                p_aei_information_category => 'GB_RTI_ASG_DETAILS',
3037                                                                p_aei_information8 => 'Y');
3038     p_starter_set := 'Y';
3039     g_reset_flag_type := 'STARTER';
3040     hr_utility.trace('Calling csr_get_starter_details3');
3041   END IF;
3042   ---
3043   hr_utility.trace('Calling csr_get_pensioner_details');
3044 
3045   OPEN csr_get_pensioner_details(p_person_rec.assignment_id);
3046   FETCH csr_get_pensioner_details INTO l_pensioner_rec;
3047   CLOSE csr_get_pensioner_details;
3048 
3049   l_recently_bereaved   := NULL;
3050   l_pensioner_flag      := l_pensioner_rec.pensioner_flag;
3051   l_annual_pension      := NULL;
3052   g_reset_flag_type     := NULL;
3053 
3054   hr_utility.trace('l_pensioner_flag: '||l_pensioner_flag);
3055   hr_utility.trace('l_pensioner_rec.pensioner_flag: '||l_pensioner_rec.pensioner_flag);
3056   hr_utility.trace('l_pensioner_rec.recently_bereaved: '||l_pensioner_rec.recently_bereaved);
3057   hr_utility.trace('l_pensioner_rec.annual_pension: '||l_pensioner_rec.annual_pension);
3058 
3059   IF (l_pensioner_flag   = 'N'
3060       AND (l_pensioner_rec.recently_bereaved IS NOT NULL
3061        OR l_pensioner_rec.annual_pension IS NOT NULL)) THEN
3062     l_starter_decl      := 'B';
3063     l_recently_bereaved := l_pensioner_rec.recently_bereaved;
3064     if l_pensioner_rec.annual_pension is not null then
3065       l_annual_pension    := (l_pensioner_rec.annual_pension)*100;
3066     end if;
3067     l_ovn               := l_pensioner_rec.object_version_number;
3068     hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false,
3069                                                                p_object_version_number => l_ovn,
3070                                                                p_assignment_extra_info_id => l_pensioner_rec.assignment_extra_info_id,
3071                                                                p_aei_information_category => 'GB_RTI_ASG_DETAILS',
3072                                                                p_aei_information9 => 'Y');
3073     g_reset_flag_type := 'PENSIONER';
3074   END IF;
3075   ---
3076   hr_utility.trace('Calling csr_get_expat_details');
3077 
3078   OPEN csr_get_expat_details(p_person_rec.assignment_id);
3079   FETCH csr_get_expat_details INTO l_expat_rec;
3080   CLOSE csr_get_expat_details;
3081 
3082   l_eea_cw_citizen     := NULL;
3083   l_epm6_scheme        := NULL;
3084   l_stay_over_6_months := NULL;
3085   l_stay_less_6_months := NULL;
3086   l_working_in_out_UK  := NULL;
3087   l_expat_flag      := l_expat_rec.expat_flag;
3088 
3089   hr_utility.trace('Calling csr_get_expat_details1');
3090   hr_utility.trace('l_expat_flag: '||l_expat_flag);
3091   hr_utility.trace('l_expat_rec.eea_cw_citizen: '||l_expat_rec.eea_cw_citizen);
3092   hr_utility.trace(' l_expat_rec.epm6_scheme: '|| l_expat_rec.epm6_scheme);
3093   hr_utility.trace(' l_expat_rec.expat_statement: '|| l_expat_rec.expat_statement);
3094 
3095   g_reset_flag_type := NULL;
3096 
3097   IF (l_expat_flag   = 'N'
3098       AND (l_expat_rec.eea_cw_citizen IS NOT NULL
3099            OR l_expat_rec.epm6_scheme IS NOT NULL
3100            OR l_expat_rec.expat_statement IS NOT NULL)) THEN
3101     hr_utility.trace('Calling csr_get_expat_details2');
3102     IF l_expat_rec.expat_statement    = 'A' THEN
3103       l_stay_over_6_months           := 'Y';
3104     elsif l_expat_rec.expat_statement = 'B' THEN
3105       l_stay_less_6_months           := 'Y';
3106     elsif l_expat_rec.expat_statement = 'C' THEN
3107       l_working_in_out_UK            := 'Y';
3108     END IF;
3109 
3110     hr_utility.trace('Calling csr_get_expat_details3');
3111     l_starter_decl   := l_expat_rec.expat_statement;
3112     l_eea_cw_citizen := l_expat_rec.eea_cw_citizen;
3113     l_epm6_scheme    := l_expat_rec.epm6_scheme;
3114     l_ovn            := l_expat_rec.object_version_number;
3115     hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false,
3116                                                                p_object_version_number => l_ovn,
3117                                                                p_assignment_extra_info_id => l_expat_rec.assignment_extra_info_id,
3118                                                                p_aei_information_category => 'GB_RTI_ASG_DETAILS',
3119                                                                p_aei_information19 => 'Y');
3120     g_reset_flag_type := 'EXPAT';
3121   END IF;
3122 
3123   OPEN csr_get_term_asg_info (p_person_rec.assignment_id );
3124   FETCH csr_get_term_asg_info INTO l_min_active_start_date;
3125   CLOSE csr_get_term_asg_info;
3126 
3127   ---
3128 IF (l_starter_rec.starter_flag = 'N') THEN
3129   IF((l_starter_rec.starter_decl IS NOT NULL
3130       OR l_starter_rec.continue_with_student_loan IS NOT NULL)
3131       AND l_starter_rec.starter_flag = 'N')
3132 
3133   OR ((l_pensioner_rec.date_pension_started IS NOT NULL
3134        OR l_pensioner_rec.annual_pension IS NOT NULL
3135        OR l_pensioner_rec.recently_bereaved IS NOT NULL)
3136        AND l_pensioner_rec.pensioner_flag = 'N')
3137 
3138   OR ((l_expat_rec.expat_statement IS NOT NULL
3139        OR l_expat_rec.date_emp_start_uk IS NOT NULL
3140        OR l_expat_rec.eea_cw_citizen IS NOT NULL
3141        OR l_expat_rec.epm6_scheme IS NOT NULL)
3142        AND l_expat_rec.expat_flag = 'N') THEN
3143 --       l_asg_eff_start_date         := p_start_date;
3144        if(l_min_active_start_date >= g_start_year) then
3145           l_asg_eff_start_date := l_min_active_start_date;
3146           hr_utility.trace('l_asg_eff_start_date assigned: '||l_asg_eff_start_date);
3147        end if;
3148 
3149   ELSE
3150        l_asg_eff_start_date := NULL;
3151        hr_utility.trace('l_asg_eff_start_date'||l_asg_eff_start_date);
3152   END IF;
3153 END IF;
3154   ---
3155 
3156   OPEN csr_get_more_payment_details(p_last_asg_action_id);
3157   FETCH csr_get_more_payment_details
3158   INTO l_payment_date,
3159     l_period_num,
3160     l_period_type;
3161   CLOSE csr_get_more_payment_details;
3162 
3163 -- If there is no payment fetch details from the other assignments of the person
3164 -- Latest assignment action which is locked by the prepayment
3165 if l_payment_date is null then
3166 	open csr_asg_act_id;
3167 	fetch csr_asg_act_id into l_last_asg_action_id, l_last_effective_date;
3168 	close csr_asg_act_id;
3169 
3170   OPEN csr_get_more_payment_details(l_last_asg_action_id);
3171   FETCH csr_get_more_payment_details
3172   INTO l_payment_date,
3173     l_period_num,
3174     l_period_type;
3175   CLOSE csr_get_more_payment_details;
3176 
3177 end if;
3178 
3179   hr_utility.trace('l_payment_date :'||l_payment_date);
3180   hr_utility.trace('l_period_num :'||l_period_num);
3181   hr_utility.trace('l_period_type :'||l_period_type);
3182   g_date_paid:= l_payment_date;
3183 
3184 ---
3185 if (l_period_type = 'Week') then
3186        l_frequency := 'W1';
3187 elsif (l_period_type = 'Bi-Month' or l_period_type = 'Bi-Week') then
3188        l_frequency := 'W2';
3189 elsif (l_period_type = 'Lunar Month') then
3190        l_frequency := 'W4';
3191 elsif (l_period_type = 'Calendar Month' or l_period_type = 'Semi-Month') then
3192        l_frequency := 'M1';
3193 elsif (l_period_type = 'Quarter') then
3194        l_frequency := 'M3';
3195 elsif (l_period_type = 'Semi-Year') then
3196        l_frequency := 'M6';
3197 elsif (l_period_type = 'Year') then
3198        l_frequency := 'MA';
3199 end if;
3200 ---
3201 
3202 	hr_utility.trace('p_person_rec.assignment_id :'||p_person_rec.assignment_id);
3203   hr_utility.trace('g_date_paid :'||g_date_paid);
3204   hr_utility.trace('g_effective_date :'||g_effective_date);
3205 
3206   OPEN csr_asg(p_person_rec.assignment_id, g_effective_date);
3207   FETCH csr_asg INTO l_per_ni_agg_flag, l_per_agg_flag, l_asg_number;
3208   CLOSE csr_asg;
3209 
3210   hr_utility.trace('l_per_ni_agg_flag :'||l_per_ni_agg_flag);
3211   hr_utility.trace('l_per_agg_flag :'||l_per_agg_flag);
3212   hr_utility.trace('l_frequency :'||l_frequency);
3213 
3214   IF l_per_ni_agg_flag = 'Y' OR l_per_agg_flag = 'Y' THEN
3215     l_aggr_earnings   := 'Y';
3216   ELSE
3217     l_aggr_earnings:= 'N';
3218   END IF;
3219 
3220   OPEN csr_period_type_info(l_period_type);
3221   FETCH csr_period_type_info INTO l_number_per_fiscal_yr;
3222   CLOSE csr_period_type_info;
3223 
3224   hr_utility.trace('l_number_per_fiscal_yr :'||l_number_per_fiscal_yr);
3225   l_payment_month_number    := NULL;
3226   l_payment_week_number     := NULL;
3227 
3228   IF l_number_per_fiscal_yr IN (1,2,4,6,12,24) THEN
3229     l_payment_month_number  := l_period_num;
3230   ELSE
3231     l_payment_week_number := l_period_num;
3232   END IF;
3233 
3234   hr_utility.trace('l_payment_month_number :'||l_payment_month_number);
3235   hr_utility.trace('l_payment_week_number :'||l_payment_week_number);
3236   ---
3237 --New Asg Number and Old Asg Number logic starts below
3238   hr_utility.trace('p_person_rec.assignment_id :'||p_person_rec.assignment_id);
3239 
3240   OPEN csr_last_pre_pay_id(p_person_rec.assignment_id);
3241   FETCH csr_last_pre_pay_id INTO l_last_pre_pay_id;
3242   CLOSE csr_last_pre_pay_id;
3243   hr_utility.trace('l_last_pre_pay_id :'||l_last_pre_pay_id);
3244 
3245   OPEN csr_last_fps_asg_act_id(l_last_pre_pay_id, p_person_rec.assignment_id);
3246   FETCH csr_last_fps_asg_act_id INTO l_last_fps_asg_act_id;
3247   CLOSE csr_last_fps_asg_act_id;
3248   hr_utility.trace('l_last_fps_asg_act_id :'||l_last_fps_asg_act_id);
3249 
3250   OPEN csr_last_asg_num_submitted(l_last_fps_asg_act_id, p_person_rec.assignment_id);
3251   FETCH csr_last_asg_num_submitted INTO l_last_asg_num_submitted;
3252   CLOSE csr_last_asg_num_submitted;
3253   hr_utility.trace('l_last_asg_num_submitted :'||l_last_asg_num_submitted);
3254   hr_utility.trace('l_asg_number :'||l_asg_number);
3255 
3256   if (l_asg_number <> l_last_asg_num_submitted)
3257   then
3258   hr_utility.trace('Inside if asg number is changed');
3259     l_asg_number_old := l_last_asg_num_submitted;
3260     l_payroll_id_changed_indicator := 'Y';
3261   else
3262   hr_utility.trace('Inside else asg number is not changed');
3263     l_asg_number_old               := NULL;
3264     l_payroll_id_changed_indicator := NULL;
3265   end if;
3266 --New Asg Number and Old Asg Number logic ends below
3267   ---
3268   OPEN csr_ni_info(p_person_rec.assignment_id, p_start_date);
3269   FETCH csr_ni_info INTO l_ni_process_type;
3270   CLOSE csr_ni_info;
3271 
3272   hr_utility.trace('l_ni_process_type: '||l_ni_process_type);
3273 
3274   IF (l_ni_process_type     = 'DY') THEN --Director
3275     l_dir_nic_calc_method  := 'AN';
3276   elsif ((l_ni_process_type = 'DN')       --Director Normal
3277     OR (l_ni_process_type   = 'DP')       --Director Pro Rate
3278     OR (l_ni_process_type   = 'DR')       --Director Pro Rate Normal
3279     OR (l_ni_process_type   = 'PY')) THEN --Pensioner Director
3280     l_dir_nic_calc_method  := 'AL';
3281   END IF;
3282   ---
3283   OPEN csr_cat_NI_Details;
3284   FETCH csr_cat_NI_Details INTO l_dir_tax_week_num;
3285   CLOSE csr_cat_NI_Details;
3286 
3287   IF l_dir_tax_week_num IS NULL THEN
3288     OPEN csr_cat_NI;
3289     FETCH csr_cat_NI INTO l_dir_tax_week_num;
3290     CLOSE csr_cat_NI;
3291   END IF;
3292   -- Get the Irregular payment indicator, periods covered and one-off payment.
3293   OPEN csr_fetch_other_fields;
3294   FETCH csr_fetch_other_fields
3295   INTO l_periods_covered,
3296     l_irr_payment_ind,
3297     l_one_off_pay,
3298     l_asg_info_id,
3299     l_ovn_extra_info;
3300   CLOSE csr_fetch_other_fields;
3301 
3302 hr_utility.trace('l_periods_covered '||l_periods_covered);
3303 hr_utility.trace('l_irr_payment_ind '||l_irr_payment_ind);
3304 hr_utility.trace('l_one_off_pay '||l_one_off_pay);
3305 
3306 hr_utility.trace('l_asg_info_id '||l_asg_info_id);
3307 hr_utility.trace('l_ovn_extra_info '||l_ovn_extra_info);
3308 
3309 if l_periods_covered is null then
3310 l_periods_covered := get_periods_covered(p_person_rec.assignment_id);
3311 end if;
3312 
3313 if l_irr_payment_ind is null then
3314 l_irr_payment_ind := get_irregular_payment(p_person_rec.assignment_id);
3315 end if;
3316 
3317 if l_one_off_pay is null then
3318 l_one_off_pay := get_oneoff_payment(p_person_rec.assignment_id);
3319 end if;
3320 
3321 
3322 hr_utility.trace('l_periods_covered '||l_periods_covered);
3323 hr_utility.trace('l_irr_payment_ind '||l_irr_payment_ind);
3324 hr_utility.trace('l_one_off_pay '||l_one_off_pay);
3325 
3326   open csr_advance_pay_dates;
3327   fetch csr_advance_pay_dates into l_start_date, l_end_date;
3328   close csr_advance_pay_dates;
3329   hr_utility.trace('l_start_date : ' || l_start_date);
3330   hr_utility.trace('l_end_date : ' || l_end_date);
3331 
3332   if l_start_date is not null and  l_end_date is not null then
3333   hr_utility.trace('test3');
3334     select
3335     pay_advance_pay_pkg.advanced_periods(
3336     p_person_rec.assignment_id,
3337     l_start_date,
3338     l_end_date
3339     ) into l_periods_covered from dual;
3340   hr_utility.trace('test4');
3341   -- reset the periods covered value to 1
3342   elsif l_periods_covered IS NOT NULL AND l_periods_covered <> 1 THEN
3343     hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false,
3344                                                                p_object_version_number => l_ovn_extra_info,
3345                                                                p_assignment_extra_info_id => l_asg_info_id,
3346                                                                p_aei_information_category => 'GB_PAY_RTI',
3347                                                                p_aei_information1 => 1);
3348 	else
3349      l_periods_covered := 1;
3350   end if;
3351   hr_utility.trace('l_periods_covered : ' || l_periods_covered);
3352   hr_utility.trace('l_dir_tax_week_num : '|| l_dir_tax_week_num);
3353   ---
3354 
3355   IF (l_irr_payment_ind = 'Y') THEN
3356     l_frequency        := 'IR';
3357   elsif (l_one_off_pay  = 'Y') THEN
3358     l_frequency        := 'IO';
3359   END IF;
3360 
3361   OPEN csr_all_payroll_actions(p_person_rec.assignment_id, g_pre_pact_id, p_start_date, g_start_year,g_end_year);
3362   FETCH csr_all_payroll_actions
3363   INTO l_payroll_period_start_date,
3364     l_payroll_period_end_date;
3365   CLOSE csr_all_payroll_actions;
3366 
3367   open csr_terminated_date;
3368   fetch csr_terminated_date into l_person_actual_term_date;
3369   close csr_terminated_date;
3370   ---
3371   hr_utility.trace('p_end_date  : '|| p_end_date);
3372   hr_utility.trace('l_person_actual_term_date  : '|| l_person_actual_term_date);
3373 
3374   IF p_fps = 'Y' and l_person_actual_term_date is not null THEN
3375    IF l_person_actual_term_date >= l_payroll_period_start_date and l_person_actual_term_date <= l_payroll_period_end_date THEN
3376     l_payment_after_leaving := 'N';
3377    ELSE
3378     l_payment_after_leaving := 'Y';
3379    END IF;
3380   ELSE
3381     l_payment_after_leaving := 'N';
3382   END IF;
3383 
3384     l_date_of_leaving := l_person_actual_term_date;
3385 
3386 
3387 
3388   hr_utility.trace('l_date_of_leaving : '|| l_date_of_leaving);
3389   hr_utility.trace('l_starter_decl : '|| l_starter_decl);
3390   hr_utility.trace('l_asg_eff_start_date : '|| l_asg_eff_start_date);
3391   ---
3392   hr_utility.trace('Assigning values to p_fps_rec1');
3393 
3394   p_fps_rec1.assignment_id        := p_person_rec.assignment_id;
3395   p_fps_rec1.action_info_category := 'GB_RTI_FPS_ASG_DET1';
3396   p_fps_rec1.act_info1            := to_char(l_asg_eff_start_date,'YYYY-MM-DD');
3397   p_fps_rec1.act_info2            := to_char(l_date_of_leaving,'YYYY-MM-DD');
3398   p_fps_rec1.act_info3            := to_char(l_payment_date,'YYYY-MM-DD');
3399   p_fps_rec1.act_info4            := l_starter_decl;
3400   p_fps_rec1.act_info5            := l_continue_with_student_loan;
3401   p_fps_rec1.act_info6            := l_stay_over_6_months;
3402   p_fps_rec1.act_info7            := l_stay_less_6_months;
3403   p_fps_rec1.act_info8            := l_working_in_out_UK;
3404   p_fps_rec1.act_info9            := l_eea_cw_citizen;
3405   p_fps_rec1.act_info10           := l_epm6_scheme;
3406   p_fps_rec1.act_info11           := NULL; -- Recently Bereaved spouse / Civil Partner (State Pension) Not applicable
3407   p_fps_rec1.act_info12           := l_recently_bereaved;
3408   p_fps_rec1.act_info13           := l_asg_number;
3409   p_fps_rec1.act_info14           := l_payroll_id_changed_indicator;
3410   p_fps_rec1.act_info15           := l_asg_number_old;
3411   p_fps_rec1.act_info16           := l_irr_payment_ind;
3412   p_fps_rec1.act_info17           := l_frequency;
3413   p_fps_rec1.act_info18           := l_payment_week_number;
3414   p_fps_rec1.act_info19           := l_payment_month_number;
3415   p_fps_rec1.act_info20           := l_periods_covered;
3416   p_fps_rec1.act_info21           := l_aggr_earnings;
3417   p_fps_rec1.act_info22           := l_payment_after_leaving;
3418   p_fps_rec1.act_info23           := get_hours_worked(p_person_rec.assignment_id);
3419   p_fps_rec1.act_info24           := l_dir_nic_calc_method;
3420   p_fps_rec1.act_info25           := l_dir_tax_week_num;
3421   p_fps_rec1.act_info26           := l_annual_pension;
3422   p_fps_rec1.act_info27           := NULL; -- State Pension Not applicable
3423 
3424   hr_utility.set_location('Leaving: '||l_proc,999);
3425   RETURN l_arch;
3426 
3427 EXCEPTION
3428 WHEN OTHERS THEN
3429   hr_utility.set_location('Error in function fetch_fps_asg_det1 ', 15);
3430   hr_utility.trace('Exception:' || SQLCODE || ' - ' || SQLERRM );
3431   fnd_file.put_line(fnd_file.LOG,'Exception:' || SQLCODE || ' - ' || SQLERRM);
3432   RAISE;
3433 END fetch_fps_nopay_asg_det1;
3434 
3435 
3436 
3437  -- Function to fetch Assignment details for Aggregated employees (CONTEXT - GB_RTI_FPS_ASG_DET1)
3438 FUNCTION fetch_fps_aggr_asg_det1(
3439     p_start_date         IN DATE,
3440     p_end_date           IN DATE,
3441     p_assactid           IN NUMBER,
3442     p_last_asg_action_id IN NUMBER,
3443 	  p_fps                IN varchar2,
3444     p_person_rec         IN act_info_rec,
3445     p_fps_rec1 OUT nocopy act_info_rec)
3446   RETURN BOOLEAN
3447 IS
3448   l_proc CONSTANT VARCHAR2(50):= g_package||'fetch_fps_aggr_asg_det1';
3449   l_arch BOOLEAN;
3450   l_asg_id                     NUMBER;
3451 
3452   --Below cursor fetches the asg extra details of the current assignment
3453   CURSOR csr_fetch_other_fields
3454   IS
3455     SELECT AEI_INFORMATION1 periods_worked,
3456       AEI_INFORMATION3 irr_payment ,
3457       AEI_INFORMATION4 "One-Off Payment",
3458       ASSIGNMENT_EXTRA_INFO_ID,
3459       object_version_number
3460     FROM PER_ASSIGNMENT_EXTRA_INFO
3461     WHERE INFORMATION_TYPE       = 'GB_PAY_RTI'
3462     AND AEI_INFORMATION_CATEGORY = 'GB_PAY_RTI'
3463     AND assignment_id            = l_asg_id;
3464 
3465   --Below cursor fetches the starter details of the current assignment
3466   CURSOR csr_get_starter_details(p_asg_id NUMBER)
3467   IS
3468     SELECT assignment_extra_info_id,
3469       aei_information1 starter_decl,
3470       aei_information2 prev_emp_paye_ref,
3471       aei_information3 prev_tax_code,
3472       aei_information4 date_left_prev_employer,
3473       aei_information5 prev_tax_basis,
3474       aei_information6 last_payment_period_type,
3475       aei_information7 last_payment_period,
3476       aei_information8 starter_flag,
3477       aei_information10 continue_with_student_loan,
3478       aei_information8 not_paid_between,
3479       object_version_number object_version_number
3480     FROM per_assignment_extra_info
3481     WHERE assignment_id  = p_asg_id
3482     AND information_type = 'GB_RTI_ASG_DETAILS';
3483 
3484   --Below cursor fetches the pension details of the current assignment
3485   CURSOR csr_get_pensioner_details(p_asg_id NUMBER)
3486   IS
3487     SELECT assignment_extra_info_id,
3488       aei_information9 pensioner_flag,
3489       aei_information12 date_pension_started,
3490       trim(aei_information13) annual_pension,
3491       aei_information14 recently_bereaved,
3492       object_version_number object_version_number
3493     FROM per_assignment_extra_info
3494     WHERE assignment_id  = p_asg_id
3495     AND information_type = 'GB_RTI_ASG_DETAILS';
3496 
3497   --Below cursor fetches the expat details of the current assignment
3498   CURSOR csr_get_expat_details(p_asg_id NUMBER)
3499   IS
3500     SELECT assignment_extra_info_id,
3501       aei_information15 expat_statement,
3502       aei_information16 date_emp_start_uk,
3503       aei_information17 eea_cw_citizen,
3504       aei_information18 epm6_scheme,
3505       aei_information19 expat_flag,
3506       object_version_number object_version_number
3507     FROM per_assignment_extra_info
3508     WHERE assignment_id  = p_asg_id
3509     AND information_type = 'GB_RTI_ASG_DETAILS';
3510 
3511   --Below cursor fetches the assignment numbers of the current assignment
3512   CURSOR csr_get_asg_numbers
3513   IS
3514     SELECT paaf.assignment_number assignment_number,
3515       paaf_old.assignment_number old_assignment_number
3516     FROM per_all_assignments_f paaf,
3517       per_all_assignments_f paaf_old
3518     WHERE paaf.assignment_id          = l_asg_id
3519     AND ((paaf_old.assignment_id      = paaf.assignment_id
3520     AND paaf_old.effective_start_date < paaf.effective_start_date
3521     AND paaf.effective_start_date     > g_start_year
3522     AND paaf_old.effective_end_date   > g_start_year)
3523     OR (paaf.assignment_number        = paaf_old.assignment_number));
3524 
3525   --Below cursor fetches further payment details of the current assignment
3526   CURSOR csr_get_more_payment_details
3527   IS
3528     SELECT ptp.regular_payment_date,
3529       ptp.period_num,
3530       ptp.period_type
3531     FROM pay_payroll_actions ppa,
3532       pay_assignment_actions paa,
3533       per_time_periods ptp
3534     WHERE assignment_action_id = p_last_asg_action_id
3535     AND ppa.time_period_id     = ptp.time_period_id
3536     AND ppa.payroll_id         = ptp.payroll_id
3537     AND paa.payroll_action_id  = ppa.payroll_action_id;
3538 
3539   --Below cursor fetches further period type details of the current assignment
3540   CURSOR csr_period_type_info(p_period_type VARCHAR2)
3541   IS
3542     SELECT ptpt.number_per_fiscal_year
3543     FROM per_time_period_types ptpt
3544     WHERE p_period_type = ptpt.period_type;
3545 
3546   --Below cursor fetches basic ni details of the current assignment
3547   CURSOR csr_ni_info(c_asg_id NUMBER, c_asg_eff_start_date DATE)
3548   IS
3549     SELECT peevf.screen_entry_value screen_value
3550     FROM
3551       pay_element_entries_f peef,
3552       pay_element_entry_values_f peevf
3553     WHERE peef.assignment_id        = c_asg_id
3554     AND peef.element_entry_id       = peevf.element_entry_id
3555     AND peevf.input_value_id        = g_ni_pt_ivid
3556     AND peef.element_type_id        = g_ni_pt_eid
3557     AND c_asg_eff_start_date between peef.effective_start_date and peef.effective_end_date
3558     AND c_asg_eff_start_date between peevf.effective_start_date and peevf.effective_end_date;
3559 
3560   --Below cursor fetches further ni details of the current assignment
3561   CURSOR csr_cat_NI_Details
3562   IS
3563     SELECT MAX(DECODE(name,'Periods',result_value,NULL))
3564     FROM pay_assignment_actions paa ,
3565       pay_run_results prr,
3566       pay_run_result_values prrv,
3567       pay_element_types_f petf ,
3568       pay_input_values_f pivf
3569     WHERE paa.source_action_id   = p_last_asg_action_id
3570     AND paa.assignment_action_id = prr.assignment_action_id
3571     AND prr.element_type_id      = petf.element_type_id
3572     AND petf.element_name        = 'NI DETAILS'
3573     AND prr.run_result_id        = prrv.run_result_id
3574     AND prrv.input_value_id      = pivf.input_value_id;
3575 
3576   --Below cursor fetches further ni details of the current assignment
3577   CURSOR csr_cat_NI
3578   IS
3579     SELECT MAX(DECODE(name,'Periods',result_value,NULL))
3580     FROM pay_assignment_actions paa ,
3581       pay_run_results prr,
3582       pay_run_result_values prrv,
3583       pay_element_types_f petf ,
3584       pay_input_values_f pivf
3585     WHERE paa.source_action_id   = p_last_asg_action_id
3586     AND paa.assignment_action_id = prr.assignment_action_id
3587     AND prr.element_type_id      = petf.element_type_id
3588     AND petf.element_name        = 'NI'
3589     AND prr.run_result_id        = prrv.run_result_id
3590     AND prrv.input_value_id      = pivf.input_value_id;
3591 
3592   --Below cursor fetches asg details of the current assignment
3593   CURSOR csr_asg(c_asg_act_id NUMBER, c_effective_date DATE)
3594   IS
3595     SELECT trim(NVL(pap.per_information9,'N')) per_ni_agg_flag,
3596            trim(NVL(pap.per_information10,'N')) per_agg_flag,
3597            asg.assignment_number assignment_number,
3598            asg.assignment_id assignment_id
3599     FROM per_all_people_f pap,
3600          per_all_assignments_f asg,
3601          pay_assignment_actions paa
3602     WHERE paa.assignment_action_id = c_asg_act_id
3603     AND paa.assignment_id          = asg.assignment_id
3604     AND pap.person_id              = asg.person_id
3605     AND c_effective_date BETWEEN asg.effective_start_date AND asg.effective_end_date
3606     AND c_effective_date BETWEEN pap.effective_start_date AND pap.effective_end_date
3607     AND pap.per_information_category = 'GB';
3608     /*AND asg.EFFECTIVE_START_DATE     =
3609       (SELECT MAX(EFFECTIVE_START_DATE)
3610       FROM per_all_assignments_f paaf
3611       WHERE paaf.assignment_id = asg.assignment_id
3612       );*/
3613 
3614   --Below cursor fetches the period start and end dates of payrolls processed in the current prepayment
3615   CURSOR csr_all_payroll_actions(p_asgid NUMBER, p_pre_pay_id NUMBER, p_asg_start DATE, p_start_year DATE, p_end_year DATE)
3616   IS
3617     SELECT
3618       /*+ USE_NL(paa, pact, ptp) */
3619       MIN(ptp.start_date) payroll_period_start_date,
3620       MAX(ptp.end_date) payroll_period_end_date
3621     FROM pay_assignment_actions paa,
3622       pay_payroll_actions pact,
3623       per_time_periods ptp,
3624       pay_assignment_actions paa1,    --Prepayments
3625       pay_payroll_actions ppa1,       --Prepayments
3626       pay_action_interlocks pai       --Prepayments
3627     WHERE paa.assignment_id   = p_asgid
3628     AND paa.payroll_action_id = pact.payroll_action_id
3629     AND pact.time_period_id   = ptp.time_period_id
3630     AND pact.action_type     IN ('Q','R','B','I','V')
3631     AND paa.action_status    IN ('C','S')
3632     AND ptp.regular_payment_date BETWEEN p_start_year AND p_end_year
3633     AND ppa1.payroll_action_id    = p_pre_pay_id
3634     AND ppa1.action_type         IN ('P','U')
3635     AND paa1.payroll_action_id    = ppa1.payroll_action_id
3636     AND paa1.assignment_action_id = pai.locking_action_id
3637     AND paa.assignment_action_id  = pai.locked_action_id;
3638 
3639 -- Cursor to fetch Termination date
3640 cursor csr_terminated_date is
3641      select serv.actual_termination_date actual_termination_date
3642      from
3643             per_all_assignments_f asg,
3644             per_periods_of_service serv
3645      where  asg.assignment_id = l_asg_id
3646      and    asg.period_of_service_id = serv.period_of_service_id
3647      and    p_end_date between asg.effective_start_date and asg.effective_end_date
3648      and    actual_termination_date <= g_effective_date
3649      and    actual_termination_date <= sysdate + 30 ;
3650 
3651   --Below cursor fetches the termination date of the current assignment
3652   CURSOR csr_get_term_asg_info (p_asg_id NUMBER)
3653   IS
3654     SELECT min(paaf.effective_start_date) min_active_start_date
3655     FROM per_all_assignments_f paaf,
3656       per_assignment_status_types past
3657     WHERE paaf.assignment_id           = p_asg_id
3658     AND paaf.assignment_status_type_id = past.assignment_status_type_id
3659     AND past.per_system_status        IN ('ACTIVE_ASSIGN', 'SUSP_ASSIGN');
3660 
3661   --Below cursor fetches the Last Pre-Payment id
3662   CURSOR csr_last_pre_pay_id (c_asg_id NUMBER)
3663   IS
3664   select ppa_prev.payroll_action_id
3665   from pay_payroll_actions ppa_prev,
3666      pay_payroll_actions ppa_current
3667   where ppa_prev.action_type IN ('P','U')
3668   and ppa_prev.payroll_id = ppa_current.payroll_id
3669   and ppa_prev.payroll_action_id < ppa_current.payroll_action_id
3670   and ppa_current.payroll_action_id = g_pre_pact_id
3671   and ppa_prev.payroll_action_id =
3672       (select max(ppa_max.payroll_action_id)
3673        from pay_payroll_actions ppa_max,
3674             pay_assignment_actions paa_max
3675        where ppa_max.payroll_id = ppa_current.payroll_id
3676        and ppa_max.payroll_action_id < ppa_current.payroll_action_id
3677        and ppa_max.action_type IN ('P','U')
3678        and ppa_max.payroll_action_id = paa_max.payroll_action_id
3679        and paa_max.assignment_id = c_asg_id );
3680 
3681   --Below cursor fetches the Previous run FPS assignment_action_id
3682   CURSOR csr_last_fps_asg_act_id (c_last_pre_pay_id NUMBER, c_asg_id NUMBER)
3683   IS
3684   select paa_fps.assignment_action_id
3685   from pay_assignment_actions paa_prepay,
3686        pay_payroll_actions ppa_prepay,
3687        pay_assignment_actions paa_fps,
3688        pay_payroll_actions ppa_fps,
3689        pay_action_interlocks pai
3690   where ppa_prepay.payroll_action_id = c_last_pre_pay_id
3691   and ppa_prepay.payroll_action_id = paa_prepay.payroll_action_id
3692   and paa_prepay.assignment_action_id = pai.locked_action_id
3693   and paa_fps.assignment_action_id = pai.locking_action_id
3694   and paa_fps.payroll_action_id = ppa_fps.payroll_action_id
3695   and ppa_fps.action_type = 'X'
3696   and paa_fps.assignment_id = c_asg_id;
3697 
3698   --Below cursor fetches the New Asg Number reported in Last FPS
3699   CURSOR csr_last_asg_num_submitted(c_last_fps_asg_act_id NUMBER, c_asg_id NUMBER)
3700   IS
3701   select ACTION_INFORMATION13
3702   from pay_action_information
3703   where action_context_id = c_last_fps_asg_act_id
3704   and action_information_category = 'GB_RTI_FPS_ASG_DET1'
3705   and assignment_id = c_asg_id;
3706 
3707 
3708   cursor csr_advance_pay_dates
3709   is
3710   select  fnd_date.canonical_to_date(max(decode(pivf.name,'Start Date',peevf.screen_entry_value,null))) start_date,
3711   fnd_date.canonical_to_date(max(decode(pivf.name,'End Date',peevf.screen_entry_value,null))) end_date
3712   from pay_element_entries_f peef,
3713 	  pay_element_entry_values_f peevf ,
3714 		pay_input_values_f pivf
3715   where
3716   peef.assignment_id = l_asg_id
3717   and peef.ELEMENT_TYPE_ID = g_adv_period_id
3718   and peef.element_entry_id = peevf.element_entry_id
3719   and peevf.input_value_id = pivf.input_value_id
3720   and pivf.element_type_id = peef.ELEMENT_TYPE_ID;
3721 
3722 --Cursor to fetch RTI Payroll ID for the assignment
3723   CURSOR csr_rti_payroll_id(cp_assignment_id  NUMBER)
3724   IS
3725   SELECT aei_information3 rti_payroll_id
3726   FROM   per_assignment_extra_info
3727   WHERE  assignment_id            = cp_assignment_id
3728   AND    aei_information_category = 'GB_RTI_AGGREGATION';
3729 
3730   -- Cursor to fetch Director details for the person
3731 	cursor csr_director is
3732 	select PER_INFORMATION2 from per_all_people_f papf
3733 	where person_id = p_person_rec.person_id
3734 	and effective_start_date =
3735 	(select max(effective_start_date)
3736 	from per_all_people_f where person_id = papf.person_id and effective_start_date <= g_effective_date);
3737 
3738   l_starter_rec csr_get_starter_details%rowtype;
3739   l_pensioner_rec csr_get_pensioner_details%rowtype;
3740   l_expat_rec csr_get_expat_details%rowtype;
3741   l_stay_over_6_months           VARCHAR2(1);
3742   l_stay_less_6_months           VARCHAR2(1);
3743   l_working_in_out_UK            VARCHAR2(1);
3744   l_asg_number                   VARCHAR2(30);
3745   l_asg_number_old               VARCHAR2(30);
3746   l_irr_payment_ind              VARCHAR2(10);
3747   l_periods_covered              VARCHAR2(10);
3748   l_one_off_pay                  VARCHAR2(10);
3749   l_payroll_id_changed_indicator VARCHAR2(1) := 'N';
3750   l_payment_date               DATE;
3751   l_period_num                 NUMBER;
3752   l_period_type                VARCHAR2(30);
3753   l_number_per_fiscal_yr       NUMBER;
3754   l_payment_month_number       NUMBER;
3755   l_payment_week_number        NUMBER;
3756   l_ni_process_type            VARCHAR2(10);
3757   l_dir_nic_calc_method        VARCHAR2(30);
3758   l_dir_tax_week_num           NUMBER;
3759   l_per_ni_agg_flag            VARCHAR2(1);
3760   l_per_agg_flag               VARCHAR2(1);
3761   l_aggr_earnings              VARCHAR2(1);
3762   l_starter_decl               VARCHAR2(30);
3763   l_continue_with_student_loan VARCHAR2(30);
3764   l_ovn                        NUMBER;
3765   l_starter_flag               VARCHAR2(1);
3766   l_pensioner_flag             VARCHAR2(1);
3767   l_expat_flag                 VARCHAR2(1);
3768   l_recently_bereaved          VARCHAR2(30);
3769   l_annual_pension             VARCHAR2(30);
3770   l_eea_cw_citizen             VARCHAR2(30);
3771   l_epm6_scheme                VARCHAR2(30);
3772   l_asg_eff_start_date         DATE;
3773   l_frequency                  VARCHAR2(30);
3774   l_payroll_period_start_date  DATE;
3775   l_payroll_period_end_date    DATE;
3776   l_person_actual_term_date  DATE;
3777   l_asg_effective_end_date     DATE;
3778   l_payment_after_leaving      VARCHAR2(1);
3779   l_date_of_leaving            DATE;
3780   l_ovn_extra_info             NUMBER;
3781   l_asg_info_id                NUMBER;
3782   l_start_date DATE;
3783   l_end_date DATE;
3784   l_last_pre_pay_id            NUMBER;
3785   l_last_fps_asg_act_id        NUMBER;
3786   l_last_asg_num_submitted     VARCHAR2(30);
3787   l_person_id                  NUMBER;
3788   l_min_active_start_date      DATE;
3789   l_rti_payroll_id             VARCHAR2(30);
3790   l_director                   VARCHAR2(1);
3791 
3792 BEGIN
3793   hr_utility.set_location('Entering: '||l_proc,1);
3794   l_arch := true;
3795 --  p_starter_set := 'N';
3796   hr_utility.trace('Start Year: '||TO_CHAR(g_start_year));
3797   hr_utility.trace('End Year: '||TO_CHAR(g_end_year));
3798   hr_utility.trace('Calling csr_get_starter_details');
3799   hr_utility.trace('p_person_rec.assignment_id: '||p_person_rec.assignment_id);
3800 --
3801 
3802   OPEN csr_get_more_payment_details;
3803   FETCH csr_get_more_payment_details
3804   INTO l_payment_date,
3805        l_period_num,
3806        l_period_type;
3807   CLOSE csr_get_more_payment_details;
3808 
3809   hr_utility.trace('l_payment_date :'||l_payment_date);
3810   hr_utility.trace('l_period_num :'||l_period_num);
3811   hr_utility.trace('l_period_type :'||l_period_type);
3812   g_date_paid:= l_payment_date;
3813 
3814   OPEN csr_asg(p_last_asg_action_id, g_date_paid);
3815   FETCH csr_asg INTO l_per_ni_agg_flag, l_per_agg_flag, l_asg_number, l_asg_id;
3816   CLOSE csr_asg;
3817 
3818   hr_utility.trace('l_per_ni_agg_flag :'||l_per_ni_agg_flag);
3819   hr_utility.trace('l_per_agg_flag :'||l_per_agg_flag);
3820   hr_utility.trace('l_asg_number :'||l_asg_number);
3821   hr_utility.trace('l_asg_id :'||l_asg_id);
3822 
3823 --
3824 
3825   OPEN csr_get_starter_details(l_asg_id);
3826   FETCH csr_get_starter_details INTO l_starter_rec;
3827   CLOSE csr_get_starter_details;
3828 
3829   l_starter_decl               := NULL;
3830   l_continue_with_student_loan := NULL;
3831   l_starter_flag               := l_starter_rec.starter_flag;
3832   g_reset_flag_type            := NULL;
3833   hr_utility.trace('Calling csr_get_starter_details1');
3834   hr_utility.trace('l_starter_flag: '||l_starter_flag);
3835   hr_utility.trace('l_starter_rec.starter_decl: '||l_starter_rec.starter_decl);
3836   hr_utility.trace(' l_starter_rec.continue_with_student_loan: '|| l_starter_rec.continue_with_student_loan);
3837 
3838   IF (l_starter_flag = 'N'
3839       AND (l_starter_rec.starter_decl IS NOT NULL
3840 	   OR l_starter_rec.continue_with_student_loan IS NOT NULL )) THEN
3841     hr_utility.trace('Calling csr_get_starter_details2');
3842     l_starter_decl               := l_starter_rec.starter_decl;
3843     l_continue_with_student_loan := l_starter_rec.continue_with_student_loan;
3844     l_ovn                        := l_starter_rec.object_version_number;
3845     hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false,
3846                                                                p_object_version_number => l_ovn,
3847                                                                p_assignment_extra_info_id => l_starter_rec.assignment_extra_info_id,
3848                                                                p_aei_information_category => 'GB_RTI_ASG_DETAILS',
3849                                                                p_aei_information8 => 'Y');
3850     g_reset_flag_type := 'STARTER';
3851     hr_utility.trace('Calling csr_get_starter_details3');
3852   END IF;
3853   ---
3854   hr_utility.trace('Calling csr_get_pensioner_details');
3855 
3856   OPEN csr_get_pensioner_details(l_asg_id);
3857   FETCH csr_get_pensioner_details INTO l_pensioner_rec;
3858   CLOSE csr_get_pensioner_details;
3859 
3860   l_recently_bereaved   := NULL;
3861   l_pensioner_flag      := l_pensioner_rec.pensioner_flag;
3862   l_annual_pension      := NULL;
3863   g_reset_flag_type     := NULL;
3864 
3865   hr_utility.trace('l_pensioner_flag: '||l_pensioner_flag);
3866   hr_utility.trace('l_pensioner_rec.pensioner_flag: '||l_pensioner_rec.pensioner_flag);
3867   hr_utility.trace('l_pensioner_rec.recently_bereaved: '||l_pensioner_rec.recently_bereaved);
3868   hr_utility.trace('l_pensioner_rec.annual_pension: '||l_pensioner_rec.annual_pension);
3869 
3870   IF (l_pensioner_flag   = 'N'
3871       AND (l_pensioner_rec.recently_bereaved IS NOT NULL
3872        OR l_pensioner_rec.annual_pension IS NOT NULL)) THEN
3873     l_starter_decl      := 'B';
3874     l_recently_bereaved := l_pensioner_rec.recently_bereaved;
3875     if  l_pensioner_rec.annual_pension is not null then
3876        l_annual_pension    := (l_pensioner_rec.annual_pension)*100;
3877     end if;
3878     l_ovn               := l_pensioner_rec.object_version_number;
3879     hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false,
3880                                                                p_object_version_number => l_ovn,
3881                                                                p_assignment_extra_info_id => l_pensioner_rec.assignment_extra_info_id,
3882                                                                p_aei_information_category => 'GB_RTI_ASG_DETAILS',
3883                                                                p_aei_information9 => 'Y');
3884     g_reset_flag_type := 'PENSIONER';
3885   END IF;
3886   ---
3887   hr_utility.trace('Calling csr_get_expat_details');
3888 
3889   OPEN csr_get_expat_details(l_asg_id);
3890   FETCH csr_get_expat_details INTO l_expat_rec;
3891   CLOSE csr_get_expat_details;
3892 
3893   l_eea_cw_citizen     := NULL;
3894   l_epm6_scheme        := NULL;
3895   l_stay_over_6_months := NULL;
3896   l_stay_less_6_months := NULL;
3897   l_working_in_out_UK  := NULL;
3898   l_expat_flag      := l_expat_rec.expat_flag;
3899 
3900   hr_utility.trace('Calling csr_get_expat_details1');
3901   hr_utility.trace('l_expat_flag: '||l_expat_flag);
3902   hr_utility.trace('l_expat_rec.eea_cw_citizen: '||l_expat_rec.eea_cw_citizen);
3903   hr_utility.trace(' l_expat_rec.epm6_scheme: '|| l_expat_rec.epm6_scheme);
3904   hr_utility.trace(' l_expat_rec.expat_statement: '|| l_expat_rec.expat_statement);
3905 
3906   g_reset_flag_type := NULL;
3907 
3908   IF (l_expat_flag   = 'N'
3909       AND (l_expat_rec.eea_cw_citizen IS NOT NULL
3910            OR l_expat_rec.epm6_scheme IS NOT NULL
3911            OR l_expat_rec.expat_statement IS NOT NULL)) THEN
3912     hr_utility.trace('Calling csr_get_expat_details2');
3913     IF l_expat_rec.expat_statement    = 'A' THEN
3914       l_stay_over_6_months           := 'Y';
3915     elsif l_expat_rec.expat_statement = 'B' THEN
3916       l_stay_less_6_months           := 'Y';
3917     elsif l_expat_rec.expat_statement = 'C' THEN
3918       l_working_in_out_UK            := 'Y';
3919     END IF;
3920 
3921     hr_utility.trace('Calling csr_get_expat_details3');
3922     l_starter_decl   := l_expat_rec.expat_statement;
3923     l_eea_cw_citizen := l_expat_rec.eea_cw_citizen;
3924     l_epm6_scheme    := l_expat_rec.epm6_scheme;
3925     l_ovn            := l_expat_rec.object_version_number;
3926     hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false,
3927                                                                p_object_version_number => l_ovn,
3928                                                                p_assignment_extra_info_id => l_expat_rec.assignment_extra_info_id,
3929                                                                p_aei_information_category => 'GB_RTI_ASG_DETAILS',
3930                                                                p_aei_information19 => 'Y');
3931     g_reset_flag_type := 'EXPAT';
3932   END IF;
3933 
3934   OPEN csr_get_term_asg_info (l_asg_id);
3935   FETCH csr_get_term_asg_info INTO l_min_active_start_date;
3936   CLOSE csr_get_term_asg_info;
3937 
3938   ---
3939 IF (l_starter_rec.starter_flag = 'N') THEN
3940   IF((l_starter_rec.starter_decl IS NOT NULL
3941       OR l_starter_rec.continue_with_student_loan IS NOT NULL)
3942       AND l_starter_rec.starter_flag = 'N')
3943 
3944   OR ((l_pensioner_rec.date_pension_started IS NOT NULL
3945        OR l_pensioner_rec.annual_pension IS NOT NULL
3946        OR l_pensioner_rec.recently_bereaved IS NOT NULL)
3947        AND l_pensioner_rec.pensioner_flag = 'N')
3948 
3949   OR ((l_expat_rec.expat_statement IS NOT NULL
3950        OR l_expat_rec.date_emp_start_uk IS NOT NULL
3951        OR l_expat_rec.eea_cw_citizen IS NOT NULL
3952        OR l_expat_rec.epm6_scheme IS NOT NULL)
3953        AND l_expat_rec.expat_flag = 'N') THEN
3954        --l_asg_eff_start_date         := p_start_date;
3955        if(l_min_active_start_date >= g_start_year) then
3956           l_asg_eff_start_date := l_min_active_start_date;
3957           hr_utility.trace('l_asg_eff_start_date assigned: '||l_asg_eff_start_date);
3958        end if;
3959   ELSE
3960        l_asg_eff_start_date := NULL;
3961        hr_utility.trace('l_asg_eff_start_date'||l_asg_eff_start_date);
3962   END IF;
3963 END IF;
3964   ---
3965 
3966 if (l_period_type = 'Week') then
3967        l_frequency := 'W1';
3968 elsif (l_period_type = 'Bi-Month' or l_period_type = 'Bi-Week') then
3969        l_frequency := 'W2';
3970 elsif (l_period_type = 'Lunar Month') then
3971        l_frequency := 'W4';
3972 elsif (l_period_type = 'Calendar Month' or l_period_type = 'Semi-Month') then
3973        l_frequency := 'M1';
3974 elsif (l_period_type = 'Quarter') then
3975        l_frequency := 'M3';
3976 elsif (l_period_type = 'Semi-Year') then
3977        l_frequency := 'M6';
3978 elsif (l_period_type = 'Year') then
3979        l_frequency := 'MA';
3980 end if;
3981 ---
3982 
3983   hr_utility.trace('l_frequency :'||l_frequency);
3984 
3985 
3986   -- PAYE aggregation should be reported on rti payroll id which should be the primary assignment
3987   IF l_per_agg_flag = 'Y'
3988   THEN
3989      hr_utility.trace('Fetching RTI Payroll ID for the assignment : '||l_asg_id);
3990      hr_utility.trace('Assignment Number : ' || l_asg_number);
3991      OPEN csr_rti_payroll_id(l_asg_id);
3992      FETCH csr_rti_payroll_id INTO l_rti_payroll_id;
3993      IF csr_rti_payroll_id%FOUND
3994      THEN
3995        l_asg_number := l_rti_payroll_id;
3996        hr_utility.trace('RTI Payroll ID : ' || l_asg_number);
3997      ELSE
3998        hr_utility.trace('Unable to fetch the rti payroll id for assignment number ' || l_asg_number);
3999      END IF;
4000      CLOSE csr_rti_payroll_id;
4001   END IF;
4002 
4003   IF l_per_ni_agg_flag = 'Y' OR l_per_agg_flag = 'Y' THEN
4004     l_aggr_earnings   := 'Y';
4005   ELSE
4006     l_aggr_earnings:= 'N';
4007   END IF;
4008 
4009   OPEN csr_period_type_info(l_period_type);
4010   FETCH csr_period_type_info INTO l_number_per_fiscal_yr;
4011   CLOSE csr_period_type_info;
4012 
4013   hr_utility.trace('l_number_per_fiscal_yr :'||l_number_per_fiscal_yr);
4014   l_payment_month_number    := NULL;
4015   l_payment_week_number     := NULL;
4016 
4017   IF l_number_per_fiscal_yr IN (1,2,4,6,12,24) THEN
4018     l_payment_month_number  := l_period_num;
4019   ELSE
4020     l_payment_week_number := l_period_num;
4021   END IF;
4022 
4023   hr_utility.trace('l_payment_month_number :'||l_payment_month_number);
4024   hr_utility.trace('l_payment_week_number :'||l_payment_week_number);
4025   ---
4026 --New Asg Number and Old Asg Number logic starts below
4027   hr_utility.trace('l_asg_id :'||l_asg_id);
4028 
4029   OPEN csr_last_pre_pay_id(l_asg_id);
4030   FETCH csr_last_pre_pay_id INTO l_last_pre_pay_id;
4031   CLOSE csr_last_pre_pay_id;
4032   hr_utility.trace('l_last_pre_pay_id :'||l_last_pre_pay_id);
4033 
4034   OPEN csr_last_fps_asg_act_id(l_last_pre_pay_id, l_asg_id);
4035   FETCH csr_last_fps_asg_act_id INTO l_last_fps_asg_act_id;
4036   CLOSE csr_last_fps_asg_act_id;
4037   hr_utility.trace('l_last_fps_asg_act_id :'||l_last_fps_asg_act_id);
4038 
4039   OPEN csr_last_asg_num_submitted(l_last_fps_asg_act_id, l_asg_id);
4040   FETCH csr_last_asg_num_submitted INTO l_last_asg_num_submitted;
4041   CLOSE csr_last_asg_num_submitted;
4042   hr_utility.trace('l_last_asg_num_submitted :'||l_last_asg_num_submitted);
4043   hr_utility.trace('l_asg_number :'||l_asg_number);
4044 
4045   if (l_asg_number <> l_last_asg_num_submitted)
4046   then
4047   hr_utility.trace('Inside if asg number is changed');
4048     l_asg_number_old := l_last_asg_num_submitted;
4049     l_payroll_id_changed_indicator := 'Y';
4050   else
4051   hr_utility.trace('Inside else asg number is not changed');
4052     l_asg_number_old               := NULL;
4053     l_payroll_id_changed_indicator := NULL;
4054   end if;
4055 --New Asg Number and Old Asg Number logic ends below
4056   ---
4057   OPEN csr_ni_info(l_asg_id, p_start_date);
4058   FETCH csr_ni_info INTO l_ni_process_type;
4059   CLOSE csr_ni_info;
4060 
4061   hr_utility.trace('l_ni_process_type: '||l_ni_process_type);
4062 
4063   IF (l_ni_process_type     = 'DY') THEN --Director
4064     l_dir_nic_calc_method  := 'AN';
4065   elsif ((l_ni_process_type = 'DN')       --Director Normal
4066     OR (l_ni_process_type   = 'DP')       --Director Pro Rate
4067     OR (l_ni_process_type   = 'DR')       --Director Pro Rate Normal
4068     OR (l_ni_process_type   = 'PY')) THEN --Pensioner Director
4069     l_dir_nic_calc_method  := 'AL';
4070   END IF;
4071 
4072 open csr_director;
4073 fetch csr_director into l_director;
4074 close csr_director;
4075 
4076 if l_director = 'Y' then
4077   OPEN csr_cat_NI_Details;
4078   FETCH csr_cat_NI_Details INTO l_dir_tax_week_num;
4079   CLOSE csr_cat_NI_Details;
4080 
4081   IF l_dir_tax_week_num IS NULL THEN
4082     OPEN csr_cat_NI;
4083     FETCH csr_cat_NI INTO l_dir_tax_week_num;
4084     CLOSE csr_cat_NI;
4085   END IF;
4086 
4087 end if;
4088 
4089 
4090   -- Get the Irregular payment indicator, periods covered and one-off payment.
4091   OPEN csr_fetch_other_fields;
4092   FETCH csr_fetch_other_fields
4093   INTO l_periods_covered,
4094     l_irr_payment_ind,
4095     l_one_off_pay,
4096     l_asg_info_id,
4097     l_ovn_extra_info;
4098   CLOSE csr_fetch_other_fields;
4099 
4100   open csr_advance_pay_dates;
4101   fetch csr_advance_pay_dates into l_start_date, l_end_date;
4102   close csr_advance_pay_dates;
4103   hr_utility.trace('l_start_date : ' || l_start_date);
4104   hr_utility.trace('l_end_date : ' || l_end_date);
4105 
4106   if l_start_date is not null and  l_end_date is not null then
4107   hr_utility.trace('test3');
4108     select
4109     pay_advance_pay_pkg.advanced_periods(
4110     l_asg_id,
4111     l_start_date,
4112     l_end_date
4113     ) into l_periods_covered from dual;
4114   hr_utility.trace('test4');
4115   -- reset the periods covered value to 1
4116   elsif l_periods_covered IS NOT NULL AND l_periods_covered <> 1 THEN
4117     hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false,
4118                                                                p_object_version_number => l_ovn_extra_info,
4119                                                                p_assignment_extra_info_id => l_asg_info_id,
4120                                                                p_aei_information_category => 'GB_PAY_RTI',
4121                                                                p_aei_information1 => 1);
4122 	else
4123      l_periods_covered := 1;
4124   end if;
4125   hr_utility.trace('l_periods_covered : ' || l_periods_covered);
4126   hr_utility.trace('l_dir_tax_week_num : '|| l_dir_tax_week_num);
4127   ---
4128 
4129   IF (l_irr_payment_ind = 'Y') THEN
4130     l_frequency        := 'IR';
4131   elsif (l_one_off_pay  = 'Y') THEN
4132     l_frequency        := 'IO';
4133   END IF;
4134 
4135   OPEN csr_all_payroll_actions(l_asg_id, g_pre_pact_id, p_start_date, g_start_year,g_end_year);
4136   FETCH csr_all_payroll_actions
4137   INTO l_payroll_period_start_date,
4138     l_payroll_period_end_date;
4139   CLOSE csr_all_payroll_actions;
4140 
4141   OPEN csr_terminated_date;
4142   FETCH csr_terminated_date INTO l_person_actual_term_date;
4143   CLOSE csr_terminated_date;
4144   ---
4145 
4146   IF p_fps = 'Y' and l_person_actual_term_date is not null THEN
4147    IF l_person_actual_term_date >= l_payroll_period_start_date and l_person_actual_term_date <= l_payroll_period_end_date THEN
4148     l_payment_after_leaving := 'N';
4149    ELSE
4150     l_payment_after_leaving := 'Y';
4151    END IF;
4152   ELSE
4153     l_payment_after_leaving := 'N';
4154   END IF;
4155 
4156 /*
4157   IF (l_asg_effective_end_date > l_payroll_period_start_date
4158       AND l_asg_effective_end_date < l_payroll_period_end_date ) THEN
4159     l_date_of_leaving := l_asg_effective_end_date;
4160   ELSE
4161     l_date_of_leaving := NULL;
4162   END IF;
4163 */
4164 /*
4165   IF l_payment_after_leaving = 'Y' THEN
4166     l_date_of_leaving := l_person_actual_term_date;
4167   ELSE
4168     l_date_of_leaving := NULL;
4169   END IF;
4170 */
4171 
4172   l_date_of_leaving := l_person_actual_term_date;
4173 
4174 
4175 -- If Date of Leaving is less then Start of the Previous Tax Year
4176 -- Updating it to Payment Date as Validation rule will fail
4177 if l_date_of_leaving is not null and l_date_of_leaving < (add_months(g_end_year,-24)+1) then
4178 	l_date_of_leaving := l_payment_date;
4179 end if;
4180 
4181 
4182   hr_utility.trace('l_date_of_leaving : '|| l_date_of_leaving);
4183   hr_utility.trace('l_starter_decl : '|| l_starter_decl);
4184   hr_utility.trace('l_asg_eff_start_date : '|| l_asg_eff_start_date);
4185   ---
4186   hr_utility.trace('Assigning values to p_fps_rec1');
4187 
4188   p_fps_rec1.assignment_id        := l_asg_id;
4189   p_fps_rec1.action_info_category := 'GB_RTI_FPS_ASG_DET1';
4190   p_fps_rec1.act_info1            := to_char(l_asg_eff_start_date,'YYYY-MM-DD');
4191   p_fps_rec1.act_info2            := to_char(l_date_of_leaving,'YYYY-MM-DD');
4192   p_fps_rec1.act_info3            := to_char(l_payment_date,'YYYY-MM-DD');
4193   p_fps_rec1.act_info4            := l_starter_decl;
4194   p_fps_rec1.act_info5            := l_continue_with_student_loan;
4195   p_fps_rec1.act_info6            := l_stay_over_6_months;
4196   p_fps_rec1.act_info7            := l_stay_less_6_months;
4197   p_fps_rec1.act_info8            := l_working_in_out_UK;
4198   p_fps_rec1.act_info9            := l_eea_cw_citizen;
4199   p_fps_rec1.act_info10           := l_epm6_scheme;
4200   p_fps_rec1.act_info11           := NULL; -- Recently Bereaved spouse / Civil Partner (State Pension) Not applicable
4201   p_fps_rec1.act_info12           := l_recently_bereaved;
4202   p_fps_rec1.act_info13           := l_asg_number;
4203   p_fps_rec1.act_info14           := l_payroll_id_changed_indicator;
4204   p_fps_rec1.act_info15           := l_asg_number_old;
4205   p_fps_rec1.act_info16           := l_irr_payment_ind;
4206   p_fps_rec1.act_info17           := l_frequency;
4207   p_fps_rec1.act_info18           := l_payment_week_number;
4208   p_fps_rec1.act_info19           := l_payment_month_number;
4209   p_fps_rec1.act_info20           := l_periods_covered;
4210   p_fps_rec1.act_info21           := l_aggr_earnings;
4211   p_fps_rec1.act_info22           := l_payment_after_leaving;
4212   p_fps_rec1.act_info23           := get_hours_worked(l_asg_id);
4213   p_fps_rec1.act_info24           := l_dir_nic_calc_method;
4214   p_fps_rec1.act_info25           := l_dir_tax_week_num;
4215   p_fps_rec1.act_info26           := l_annual_pension;
4216   p_fps_rec1.act_info27           := NULL; -- State Pension Not applicable
4217 
4218   hr_utility.set_location('Leaving: '||l_proc,999);
4219   RETURN l_arch;
4220 
4221 EXCEPTION
4222 WHEN OTHERS THEN
4223   hr_utility.set_location('Error in function fetch_fps_aggr_asg_det1 ', 15);
4224   hr_utility.trace('Exception:' || SQLCODE || ' - ' || SQLERRM );
4225   fnd_file.put_line(fnd_file.LOG,'Exception:' || SQLCODE || ' - ' || SQLERRM);
4226   RAISE;
4227 END fetch_fps_aggr_asg_det1;
4228 --
4229 --
4230 /*FUNCTION get_ni_contrib(
4231     f_asg_act_id NUMBER,
4232     f_aggr       VARCHAR2 DEFAULT 'N')
4233   RETURN NUMBER
4234 IS
4235   l_ni_contrib  NUMBER := 0;
4236   l_def_bal_id  NUMBER := 0;
4237   l_def_bal_id1 NUMBER := 0;
4238 
4239   CURSOR csr_cat_NI_Details
4240   IS
4241     SELECT MAX(DECODE(name,'Category',result_value,NULL))
4242     FROM pay_assignment_actions paa ,
4243       pay_run_results prr,
4244       pay_run_result_values prrv,
4245       pay_element_types_f petf ,
4246       pay_input_values_f pivf
4247     WHERE paa.source_action_id   = f_asg_act_id
4248     AND paa.assignment_action_id = prr.assignment_action_id
4249     AND prr.element_type_id      = petf.element_type_id
4250     AND petf.element_name        = 'NI DETAILS'
4251     AND prr.run_result_id        = prrv.run_result_id
4252     AND prrv.input_value_id      = pivf.input_value_id;
4253 
4254   CURSOR csr_cat_NI
4255   IS
4256     SELECT MAX(DECODE(name,'Category',result_value,NULL))
4257     FROM pay_assignment_actions paa ,
4258       pay_run_results prr,
4259       pay_run_result_values prrv,
4260       pay_element_types_f petf ,
4261       pay_input_values_f pivf
4262     WHERE paa.source_action_id   = f_asg_act_id
4263     AND paa.assignment_action_id = prr.assignment_action_id
4264     AND prr.element_type_id      = petf.element_type_id
4265     AND petf.element_name        = 'NI'
4266     AND prr.run_result_id        = prrv.run_result_id
4267     AND prrv.input_value_id      = pivf.input_value_id;
4268 
4269   l_cat VARCHAR2(1)             := NULL;
4270 
4271   CURSOR get_defined_balance_id_ni(c_ni_cat VARCHAR2, c_dim VARCHAR2)
4272   IS
4273     SELECT db.defined_balance_id defined_balance_id
4274     FROM pay_defined_balances db,
4275       pay_balance_types b,
4276       pay_balance_dimensions d
4277     WHERE db.balance_type_id    = b.balance_type_id
4278     AND db.balance_dimension_id = d.balance_dimension_id
4279     AND d.database_item_suffix  = c_dim
4280     AND b.balance_name          = 'NI '
4281       || c_ni_cat
4282       || ' Total'
4283     AND b.legislation_code = 'GB';
4284 
4285   CURSOR get_def_bal_id_ni_total_emplyr(c_dim VARCHAR2)
4286   IS
4287     SELECT db.defined_balance_id defined_balance_id
4288     FROM pay_defined_balances db,
4289       pay_balance_types b,
4290       pay_balance_dimensions d
4291     WHERE db.balance_type_id    = b.balance_type_id
4292     AND db.balance_dimension_id = d.balance_dimension_id
4293     AND d.database_item_suffix  = c_dim
4294     AND b.balance_name          = 'NI Employer'
4295     AND b.legislation_code      = 'GB';
4296 
4297 BEGIN
4298   hr_utility.trace('Entering get_ni_contrib');
4299   hr_utility.trace('f_asg_act_id : ' || TO_CHAR(f_asg_act_id));
4300   hr_utility.trace('f_aggr : ' || f_aggr );
4301 
4302   OPEN csr_cat_NI_Details;
4303   FETCH csr_cat_NI_Details INTO l_cat;
4304   CLOSE csr_cat_NI_Details;
4305 
4306   IF l_cat IS NULL THEN
4307     OPEN csr_cat_NI;
4308     FETCH csr_cat_NI INTO l_cat;
4309     CLOSE csr_cat_NI;
4310   END IF;
4311 
4312   IF l_cat IS NOT NULL THEN
4313     hr_utility.trace('Entered if - l_cat : '|| l_cat);
4314     IF f_aggr = 'Y' THEN
4315       OPEN get_defined_balance_id_ni(l_cat, '_PER_TD_STAT_PTD');
4316       FETCH get_defined_balance_id_ni INTO l_def_bal_id;
4317       CLOSE get_defined_balance_id_ni;
4318       OPEN get_def_bal_id_ni_total_emplyr('_PER_TD_STAT_PTD');
4319       FETCH get_def_bal_id_ni_total_emplyr INTO l_def_bal_id1;
4320       CLOSE get_def_bal_id_ni_total_emplyr;
4321       l_ni_contrib := HR_GBNIDIR.NI_BALANCES_PER_NI_PTD(f_asg_act_id, lower(l_cat) || '_employee');
4322     ELSE
4323       OPEN get_defined_balance_id_ni(l_cat, '_ASG_TRANSFER_PTD');
4324       FETCH get_defined_balance_id_ni INTO l_def_bal_id;
4325       CLOSE get_defined_balance_id_ni;
4326       OPEN get_def_bal_id_ni_total_emplyr('_ASG_TRANSFER_PTD');
4327       FETCH get_def_bal_id_ni_total_emplyr INTO l_def_bal_id1;
4328       CLOSE get_def_bal_id_ni_total_emplyr;
4329       hr_utility.trace('l_def_bal_id : '|| TO_CHAR(l_def_bal_id));
4330       hr_utility.trace('l_def_bal_id1 : '|| TO_CHAR(l_def_bal_id1));
4331       l_ni_contrib := NVL(pay_balance_pkg.get_value(p_defined_balance_id => l_def_bal_id, p_assignment_action_id => f_asg_act_id ),0);
4332       l_ni_contrib := l_ni_contrib - NVL(pay_balance_pkg.get_value(p_defined_balance_id => l_def_bal_id1, p_assignment_action_id => f_asg_act_id ),0);
4333     END IF;
4334     hr_utility.trace('Leaving get_ni_contrib');
4335   END IF;
4336 
4337   RETURN l_ni_contrib;
4338 
4339 EXCEPTION
4340 WHEN OTHERS THEN
4341   hr_utility.trace('Exception in get_ni_contrib');
4342   hr_utility.trace('Exception : ' ||SQLERRM ||'  ' || SQLCODE );-- return type: varchar2
4343   RETURN l_ni_contrib;
4344   RAISE;
4345 END get_ni_contrib;
4346 --
4347 --
4348 */
4349 
4350 function get_eff_start_date (asg_id number,eff_date date,l_tax_ref varchar2)
4351 return date is
4352 l_eff_date date;
4353 cursor csr_get_start_date is
4354 select paaf.effective_start_date from
4355 per_all_assignments_f paaf,
4356 pay_all_payrolls_f papf ,
4357 hr_soft_coding_keyflex flex,
4358 per_assignment_status_types past
4359 where paaf.assignment_id = asg_id and paaf.effective_end_date = eff_date - 1
4360 and papf.payroll_id = paaf.payroll_id
4361 and flex.SOFT_CODING_KEYFLEX_ID = papf.SOFT_CODING_KEYFLEX_ID
4362 and upper(l_tax_ref) = upper(flex.segment1)
4363 and paaf.assignment_status_type_id = past.assignment_status_type_id
4364                     and past.per_system_status in ('ACTIVE_ASSIGN', 'SUSP_ASSIGN', 'TERM_ASSIGN'); -- Bug 16276411
4365 begin
4366   open csr_get_start_date;
4367   fetch csr_get_start_date into l_eff_date;
4368   if csr_get_start_date%notfound then
4369 		close csr_get_start_date;
4370 		return eff_date;
4371   else
4372     close csr_get_start_date;
4373     l_eff_date := get_eff_start_date(asg_id,l_eff_date,l_tax_ref);
4374     return l_eff_date;
4375   end if;
4376 end;
4377 
4378 procedure fetch_tax_code_basis(
4379     p_last_asg_action_id IN NUMBER,
4380     p_tax_code  OUT nocopy varchar2,
4381 	p_tax_basis  OUT nocopy varchar2)
4382 
4383 IS
4384 
4385   l_proc              CONSTANT VARCHAR2(50):= g_package||'fetch_tax_code_basis';
4386   l_paye_rr_id   number;
4387   l_paye_details_rr_id number;
4388 
4389 
4390   CURSOR csr_max_run_result(p_assignment_action_id number,p_element_id number) IS
4391   SELECT max(prr.RUN_RESULT_ID)
4392   FROM pay_run_results prr
4393   WHERE prr.ASSIGNMENT_ACTION_ID = p_assignment_action_id
4394   AND prr.ELEMENT_TYPE_ID = p_element_id
4395   AND prr.status in ('P','PA');
4396 
4397 
4398   CURSOR csr_run_result(p_run_result_id number,p_element_type_id number) IS
4399   SELECT  max(decode(name,'Tax Code',result_value,NULL)) tax_code,
4400           MAX(DECODE(name,'Tax Basis',DECODE(result_value,'N','Y',NULL),NULL)) tax_basis
4401   FROM pay_input_values_f v,
4402        pay_run_result_values rrv
4403   WHERE rrv.run_result_id = p_run_result_id
4404     AND v.input_value_id = rrv.input_value_id
4405     AND v.element_type_id = p_element_type_id;
4406 
4407 
4408 BEGIN
4409 
4410   hr_utility.set_location('Entering: '||l_proc,1);
4411   hr_utility.set_location('Assignment_action_id :' || p_last_asg_action_id,15);
4412 
4413   ---
4414 
4415 	open csr_max_run_result(p_last_asg_action_id,g_paye_element_id);
4416     fetch csr_max_run_result into l_paye_rr_id;
4417     close csr_max_run_result;
4418 
4419     open csr_max_run_result(p_last_asg_action_id,g_paye_details_id);
4420     fetch csr_max_run_result into l_paye_details_rr_id;
4421     close csr_max_run_result;
4422 
4423     hr_utility.trace('Fetching run result 1');
4424     -- 1. First we try to fetch it from the latest PAYE run results
4425     open csr_run_result(l_paye_rr_id, g_paye_element_id);
4426     fetch csr_run_result into p_tax_code,p_tax_basis;
4427     close csr_run_result;
4428     -- 2. Tax code is not found, fetch from the latest PAYE Details run results
4429     if p_tax_code is null then
4430        hr_utility.trace('Fetching run result 2');
4431        open csr_run_result(l_paye_details_rr_id, g_paye_details_id);
4432        fetch csr_run_result into p_tax_code,p_tax_basis;
4433        close csr_run_result;
4434 
4435     end if;
4436 
4437    hr_utility.trace('Tax Code '||p_tax_code||' Tax Basis '||p_tax_basis);
4438 
4439 exception
4440 when others then
4441 	hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
4442 end fetch_tax_code_basis;
4443 
4444 
4445 
4446 
4447 function fetch_start_date(p_asg_id number,p_effective_date date, p_payment_date date,p_tax_ref varchar2,p_tax_year_start date ,p_starter_set varchar2,p_fps_rec1 in OUT nocopy act_info_rec)
4448 return boolean
4449 is
4450 
4451 cursor csr_terminated_emp is
4452      select serv.actual_termination_date actual_termination_date
4453      from
4454             per_all_assignments_f asg,
4455             per_periods_of_service serv
4456      where  asg.assignment_id = p_asg_id
4457 	   and    serv.actual_termination_date is not null
4458      and    asg.period_of_service_id = serv.period_of_service_id
4459      and    p_payment_date between asg.effective_start_date and asg.effective_end_date
4460      and    actual_termination_date <= sysdate + 30 ;
4461 
4462 cursor csr_get_start_date is
4463 		select paaf.effective_start_date,paaf.effective_end_date
4464 		from per_all_assignments_f paaf
4465 		where paaf.assignment_id = p_asg_id
4466 		and p_payment_date between paaf.effective_start_date and paaf.effective_end_date;
4467 
4468 cursor csr_get_starter is
4469     SELECT aei_information8 starter_flag , aei_information1 starter_decl
4470     FROM per_assignment_extra_info
4471     WHERE assignment_id  = p_asg_id
4472     AND information_type = 'GB_RTI_ASG_DETAILS';
4473 
4474 l_eff_start_date date;
4475 l_eff_end_date date;
4476 l_termination_date date;
4477 l_starter_flag varchar2(1);
4478 l_starter_declaration varchar2(1);
4479 
4480 begin
4481 hr_utility.trace('Fetching First FPS Details');
4482 
4483 open csr_get_starter;
4484 fetch csr_get_starter into l_starter_flag,l_starter_declaration;
4485 hr_utility.trace('Fetching First FPS Details l_starter_flag: '||l_starter_flag);
4486 hr_utility.trace('Fetching First FPS Details l_starter_declaration: '||l_starter_declaration);
4487 close csr_get_starter;
4488 
4489 if l_starter_flag = 'Y' and p_starter_set = 'N' then
4490   hr_utility.trace('RTI Sent flag is already set.');
4491 	p_fps_rec1.act_info1 := NULL;
4492 	p_fps_rec1.act_info4 := NULL;
4493 
4494 else
4495 
4496 open csr_get_start_date;
4497 fetch csr_get_start_date into l_eff_start_date,l_eff_end_date;
4498 close csr_get_start_date;
4499 
4500 l_eff_start_date  := get_eff_start_date(p_asg_id,l_eff_start_date,p_tax_ref);
4501 
4502 if l_eff_start_date >= p_tax_year_start and l_eff_start_date <= p_effective_date then
4503 p_fps_rec1.act_info1 := to_char(l_eff_start_date,'YYYY-MM-DD');
4504 p_fps_rec1.act_info4 := l_starter_declaration;
4505 else p_fps_rec1.act_info1 := NULL;
4506 end if;
4507 
4508 end if; --Starter_flag check ends
4509 
4510 open csr_terminated_emp;
4511 fetch csr_terminated_emp into l_termination_date;
4512 close csr_terminated_emp;
4513 
4514 if l_termination_date is not null then
4515 if l_termination_date >= p_tax_year_start and l_termination_date <= p_effective_date then
4516 p_fps_rec1.act_info2 := to_char(l_termination_date,'YYYY-MM-DD');
4517 else
4518 p_fps_rec1.act_info2 := to_char(p_payment_date,'YYYY-MM-DD');
4519 end if;
4520 end if;
4521 
4522 hr_utility.trace('l_eff_start_date = '||l_eff_start_date);
4523 hr_utility.trace('l_eff_end_date = '||l_eff_end_date);
4524 hr_utility.trace('p_fps_rec1.act_info1 = '||p_fps_rec1.act_info1);
4525 hr_utility.trace('p_fps_rec1.act_info2 = '||p_fps_rec1.act_info2);
4526 return true;
4527 end;
4528 
4529 -- Function to fetch Assignment details (CONTEXT - GB_RTI_FPS_ASG_DET2)
4530 FUNCTION fetch_first_fps_asg_det2(
4531     p_last_asg_action_id IN NUMBER,
4532     p_asg_id             IN NUMBER,
4533     p_effective_date     in date,
4534     p_fps_bal_context_2  OUT nocopy act_info_rec )
4535   RETURN BOOLEAN
4536 IS
4537 
4538   l_context_lst pay_balance_pkg.t_context_tab;           -- used for batch balance retrieval
4539   l_output_table pay_balance_pkg.t_detailed_bal_out_tab; -- output of batch balance retrieval
4540   l_proc              CONSTANT VARCHAR2(50):= g_package||'fetch_first_fps_asg_det2';
4541   l_asg_primary_flag  VARCHAR2(1);
4542   l_per_agg_flag      VARCHAR2(1);
4543   l_aggr_archive_flag VARCHAR2(1);
4544   l_last_chld_act_id  NUMBER;
4545   l_arch BOOLEAN;
4546 
4547   CURSOR csr_asg(c_asg_id NUMBER)
4548   IS
4549     SELECT trim(asg.primary_flag) asg_primary_flag,
4550       trim(pap.per_information10) per_agg_flag
4551     FROM per_all_people_f pap,
4552       per_all_assignments_f asg
4553     WHERE asg.assignment_id       = c_asg_id
4554     AND pap.person_id             = asg.person_id
4555     AND p_effective_date BETWEEN asg.effective_start_date AND asg.effective_end_date
4556     AND p_effective_date BETWEEN pap.effective_start_date AND pap.effective_end_date;
4557 
4558 	cursor csr_tax_code_basis is
4559   SELECT  max(decode(iv.name,'Tax Code',screen_entry_value)),
4560           decode(max(decode(iv.name,'Tax Basis',screen_entry_value)),'N','Y',NULL)
4561   FROM  pay_element_entries_f e,
4562         pay_element_entry_values_f v,
4563         pay_input_values_f iv,
4564         pay_element_links_f link
4565   WHERE e.assignment_id = p_asg_id
4566   AND   link.element_type_id = g_paye_details_id
4567   AND   e.element_link_id = link.element_link_id
4568   AND   e.element_entry_id = v.element_entry_id
4569   AND   iv.input_value_id = v.input_value_id
4570   AND   e.effective_end_date BETWEEN link.effective_start_date AND link.effective_end_date
4571   AND   e.effective_end_date BETWEEN iv.effective_start_date AND iv.effective_end_date
4572   AND   e.effective_end_date BETWEEN v.effective_start_date AND v.effective_end_date
4573   AND   e.effective_end_date = (select max(e1.effective_end_date)
4574                                 from   pay_element_entries_f  e1,
4575                                        pay_element_links_f    link1
4576                                 where  link1.element_type_id = g_paye_details_id
4577                                 and    e1.assignment_id = p_asg_id
4578                                 and    e1.element_link_id = link1.element_link_id);
4579 
4580 CURSOR csr_child_act_id(c_lst_act_id NUMBER)     --   kvinayku
4581   IS
4582     SELECT NVL(MAX(ASSIGNMENT_ACTION_ID),c_lst_act_id)
4583     FROM pay_assignment_actions
4584     WHERE SOURCE_ACTION_ID = c_lst_act_id;
4585 
4586  CURSOR csr_tax_paye_result(p_action_id NUMBER)   --  kvinayku
4587   IS
4588    SELECT MAX(DECODE(name,'Tax Code',prrv.result_value,NULL)),
4589       MAX(DECODE(name,'Tax Basis',DECODE(prrv.result_value,'N','Y',NULL),NULL))
4590     FROM pay_run_results prr ,
4591       pay_run_result_values prrv ,
4592       pay_input_values_f pivf
4593     WHERE prr.assignment_action_id = p_action_id
4594     AND prr.ELEMENT_TYPE_ID        = g_paye_element_id
4595     AND prrv.run_result_id         = prr.run_result_id
4596     AND pivf.INPUT_VALUE_ID        = prrv.INPUT_VALUE_ID;
4597 
4598 l_tax_code varchar2(10);
4599 l_tax_basis varchar2(1);
4600 
4601 BEGIN
4602   l_arch := true;
4603 
4604   hr_utility.set_location('Entering: '||l_proc,1);
4605   l_context_lst(1).tax_unit_id       :=NULL;
4606   l_context_lst(1).jurisdiction_code :=NULL;
4607   l_context_lst(1).source_id         :=NULL;
4608   l_context_lst(1).source_text       :=NULL;
4609   l_context_lst(1).source_number     :=NULL;
4610   l_context_lst(1).source_text2      :=NULL;
4611   l_context_lst(1).time_def_id       :=NULL;
4612   l_context_lst(1).balance_date      :=NULL;
4613   l_context_lst(1).local_unit_id     :=NULL;
4614   l_context_lst(1).source_number2    :=NULL;
4615   l_context_lst(1).organization_id   :=NULL;
4616 
4617   hr_utility.set_location('Assignment_id :' || p_asg_id,15);
4618   l_asg_primary_flag  := 'N';
4619   l_per_agg_flag      := 'N';
4620   l_aggr_archive_flag := 'N';
4621 
4622   OPEN csr_asg(p_asg_id);
4623   FETCH csr_asg INTO l_asg_primary_flag, l_per_agg_flag;
4624   CLOSE csr_asg;
4625 
4626   hr_utility.set_location('l_asg_primary_flag :' || l_asg_primary_flag,15);
4627   hr_utility.set_location('l_per_agg_flag     :' || l_per_agg_flag,15);
4628 /*
4629   IF NVL(l_per_agg_flag,'N')       = 'Y' THEN
4630     IF NVL(l_asg_primary_flag,'N') = 'Y' THEN
4631       hr_utility.trace('Aggregation Found.');
4632       l_aggr_archive_flag := 'Y';
4633     END IF;
4634   END IF;
4635 */
4636   hr_utility.set_location('l_aggr_archive_flag :' || l_aggr_archive_flag,15);
4637   ---
4638 
4639 --  IF (l_aggr_archive_flag = 'N' AND NVL(l_per_agg_flag,'N') = 'N') THEN
4640     hr_utility.trace('l_aggr_archive_flag = N');
4641     -- Get the child assignment action id to Archive Tax code and Tax basis.
4642     -- As the run results are generated with child assignment action id.
4643 
4644 -- added by kvinayku   start
4645 OPEN csr_child_act_id(p_last_asg_action_id);
4646     FETCH csr_child_act_id INTO l_last_chld_act_id;
4647     CLOSE csr_child_act_id;
4648 
4649 --Tax code fix start
4650    /* OPEN csr_tax_paye_result(l_last_chld_act_id);
4651     FETCH csr_tax_paye_result
4652     INTO p_fps_bal_context_2.act_info25,
4653          p_fps_bal_context_2.act_info27;
4654     CLOSE csr_tax_paye_result;
4655 
4656 if p_fps_bal_context_2.act_info27 is null then
4657 open csr_tax_code_basis;
4658 fetch csr_tax_code_basis into p_fps_bal_context_2.act_info25,
4659          p_fps_bal_context_2.act_info27;
4660 close csr_tax_code_basis;
4661 end if; */
4662 
4663 	fetch_tax_code_basis(l_last_chld_act_id,
4664 	p_fps_bal_context_2.act_info25,p_fps_bal_context_2.act_info27);
4665 
4666 	if p_fps_bal_context_2.act_info25 is null then
4667 	open csr_tax_code_basis;
4668 	fetch csr_tax_code_basis into p_fps_bal_context_2.act_info25,
4669          p_fps_bal_context_2.act_info27;
4670 	close csr_tax_code_basis;
4671 	end if;
4672 
4673 --Tax code fix end
4674 
4675 hr_utility.trace('Tax Code '||p_fps_bal_context_2.act_info25||' Tax Basis '||p_fps_bal_context_2.act_info27);
4676 
4677 --p_fps_bal_context_2.act_info25 := l_tax_code;
4678 --p_fps_bal_context_2.act_info27 := l_tax_basis;
4679 
4680 --  added by kvinayku end
4681 
4682     pay_balance_pkg.get_value(p_assignment_action_id => p_last_asg_action_id ,
4683                               p_defined_balance_lst => g_defined_balance_lst ,
4684                               p_context_lst => l_context_lst ,
4685                               p_output_table => l_output_table );
4686     hr_utility.trace('After invoking get_value');
4687     p_fps_bal_context_2.assignment_id        := p_asg_id;
4688     p_fps_bal_context_2.action_info_category := 'GB_RTI_FPS_ASG_DET2';
4689     hr_utility.trace('Before entering for i in 1..g_fps_bal_det_tab.last loop');
4690 
4691     FOR outer_rec IN 1..l_output_table.count
4692     LOOP
4693 
4694 	 IF l_output_table(outer_rec).balance_value is not null then -- Null Check
4695 
4696       FOR inner_rec IN 1..g_fps_bal_det_tab.last
4697       LOOP
4698         IF (g_fps_bal_det_tab(inner_rec).defined_balance_id         = l_output_table(outer_rec).defined_balance_id) THEN
4699           IF g_fps_bal_det_tab(inner_rec).balance_name              = 'Taxable Pay' THEN
4700             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_TD_YTD' ) THEN
4701               g_fps_bal_det_tab(inner_rec).balance_value           := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4702               p_fps_bal_context_2.act_info1                        := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4703             END IF;
4704           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'PAYE' THEN
4705             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_TD_YTD') THEN
4706               g_fps_bal_det_tab(inner_rec).balance_value           := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4707               p_fps_bal_context_2.act_info2                        := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4708             END IF;
4709           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'Student Loan' THEN
4710             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_TD_YTD') THEN
4711               g_fps_bal_det_tab(inner_rec).balance_value           := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4712               p_fps_bal_context_2.act_info3                        := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4713             END IF;
4714           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'NI Employer' THEN
4715             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_TD_YTD') THEN
4716               g_fps_bal_det_tab(inner_rec).balance_value           := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4717               p_fps_bal_context_2.act_info4                        := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4718             END IF;
4719             --  This is for newly created balances
4720           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'Earnings Free of Tax' THEN
4721             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
4722               g_fps_bal_det_tab(inner_rec).balance_value         := 100                                  * NVL(l_output_table(outer_rec).balance_value,0);
4723               p_fps_bal_context_2.act_info7                      := NVL(p_fps_bal_context_2.act_info7,0) + 100 * NVL(l_output_table(outer_rec).balance_value,0);
4724             END IF;
4725           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'Earnings Free of NI' THEN
4726             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_TD_YTD') THEN
4727               g_fps_bal_det_tab(inner_rec).balance_value           := 100                                  * NVL(l_output_table(outer_rec).balance_value,0);
4728               p_fps_bal_context_2.act_info7                        := NVL(p_fps_bal_context_2.act_info7,0) + 100 * NVL(l_output_table(outer_rec).balance_value,0);
4729             END IF;
4730           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SSP Total' THEN
4731             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
4732               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4733               p_fps_bal_context_2.act_info18                     := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4734             END IF;
4735           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SMP Total' THEN
4736             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
4737               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4738               p_fps_bal_context_2.act_info19                     := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4739             END IF;
4740           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SPP Adoption Total' THEN
4741             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
4742               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4743               p_fps_bal_context_2.act_info20                     := nvl(p_fps_bal_context_2.act_info20,0) + 100 * NVL(l_output_table(outer_rec).balance_value,0);
4744             END IF;
4745           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SPP Birth Total' THEN
4746             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
4747               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4748               p_fps_bal_context_2.act_info20                     := nvl(p_fps_bal_context_2.act_info20,0) + 100 * NVL(l_output_table(outer_rec).balance_value,0);
4749             END IF;
4750 
4751           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SAP Total' THEN
4752             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
4753               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4754               p_fps_bal_context_2.act_info21                     := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4755             END IF;
4756           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'ASPP Adoption Total' THEN
4757             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
4758               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4759               p_fps_bal_context_2.act_info22                     := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4760             END IF;
4761          elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'ASPP Birth Total' THEN
4762             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
4763               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4764               p_fps_bal_context_2.act_info22                     := nvl(p_fps_bal_context_2.act_info22,0) + 100 * NVL(l_output_table(outer_rec).balance_value,0);
4765             END IF;
4766            -- Bug 16505555 fix
4767            elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'Pre Tax Pension Contributions' THEN
4768             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
4769               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4770               p_fps_bal_context_2.act_info26                     := nvl(p_fps_bal_context_2.act_info26,0) + 100 * NVL(l_output_table(outer_rec).balance_value,0);
4771             END IF;
4772             -- Bug 16505555 fix
4773            elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'Post Tax Pension Contributions' THEN
4774             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
4775               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4776               p_fps_bal_context_2.act_info28                     := nvl(p_fps_bal_context_2.act_info28,0) + 100 * NVL(l_output_table(outer_rec).balance_value,0);
4777             END IF;
4778           END IF;
4779         END IF;
4780       END LOOP;
4781       hr_utility.trace('After for i in 1..g_fps_bal_det_tab.last loop');
4782 	 END IF; --Not null check ends
4783     END LOOP;
4784  p_fps_bal_context_2.act_info17    := 0; -- Tax Deducted refunded
4785 --  END IF;
4786 
4787  hr_utility.trace(p_asg_id||'Leaving  asg2 details function ');
4788 
4789   RETURN l_arch;
4790 
4791 EXCEPTION
4792 WHEN OTHERS THEN
4793   hr_utility.set_location('Error in function fetch_fps_asg_det2 ', 15);
4794   hr_utility.trace('Exception:' || SQLCODE || ' - ' || SQLERRM );
4795   fnd_file.put_line(fnd_file.LOG,'Exception:' || SQLCODE || ' - ' || SQLERRM);
4796   RAISE;
4797 
4798 END fetch_first_fps_asg_det2;
4799 
4800 -- Below function is to fetch Assignment details (CONTEXT - GB_RTI_FPS_ASG_DET2).
4801 -- This function is used for PAYE Aggregated scenarios processed as part of First FPS.
4802 
4803 FUNCTION fetch_first_fps_agg_asg_det2(
4804     p_last_asg_action_id IN NUMBER,
4805     p_asg_id             IN NUMBER,
4806     p_effective_date     in date,
4807     p_fps_bal_context_2  OUT nocopy act_info_rec )
4808   RETURN BOOLEAN
4809 IS
4810 
4811   l_context_lst pay_balance_pkg.t_context_tab;           -- used for batch balance retrieval
4812   l_output_table pay_balance_pkg.t_detailed_bal_out_tab; -- output of batch balance retrieval
4813   l_proc              CONSTANT VARCHAR2(50):= g_package||'fetch_first_fps_agg_asg_det2';
4814   l_asg_primary_flag  VARCHAR2(1);
4815   l_per_agg_flag      VARCHAR2(1);
4816   l_aggr_archive_flag VARCHAR2(1);
4817   l_last_chld_act_id  NUMBER;
4818   l_arch BOOLEAN;
4819 
4820   CURSOR csr_asg(c_asg_id NUMBER)
4821   IS
4822     SELECT trim(asg.primary_flag) asg_primary_flag,
4823       trim(pap.per_information10) per_agg_flag
4824     FROM per_all_people_f pap,
4825       per_all_assignments_f asg
4826     WHERE asg.assignment_id       = c_asg_id
4827     AND pap.person_id             = asg.person_id
4828     AND p_effective_date BETWEEN asg.effective_start_date AND asg.effective_end_date
4829     AND p_effective_date BETWEEN pap.effective_start_date AND pap.effective_end_date;
4830 
4831 	cursor csr_tax_code_basis is
4832   SELECT  max(decode(iv.name,'Tax Code',screen_entry_value)),
4833           decode(max(decode(iv.name,'Tax Basis',screen_entry_value)),'N','Y',NULL)
4834   FROM  pay_element_entries_f e,
4835         pay_element_entry_values_f v,
4836         pay_input_values_f iv,
4837         pay_element_links_f link
4838   WHERE e.assignment_id = p_asg_id
4839   AND   link.element_type_id = g_paye_details_id
4840   AND   e.element_link_id = link.element_link_id
4841   AND   e.element_entry_id = v.element_entry_id
4842   AND   iv.input_value_id = v.input_value_id
4843   AND   e.effective_end_date BETWEEN link.effective_start_date AND link.effective_end_date
4844   AND   e.effective_end_date BETWEEN iv.effective_start_date AND iv.effective_end_date
4845   AND   e.effective_end_date BETWEEN v.effective_start_date AND v.effective_end_date
4846   AND   e.effective_end_date = (select max(e1.effective_end_date)
4847                                 from   pay_element_entries_f  e1,
4848                                        pay_element_links_f    link1
4849                                 where  link1.element_type_id = g_paye_details_id
4850                                 and    e1.assignment_id = p_asg_id
4851                                 and    e1.element_link_id = link1.element_link_id);
4852 
4853 CURSOR csr_child_act_id(c_lst_act_id NUMBER)     --   kvinayku
4854   IS
4855     SELECT NVL(MAX(ASSIGNMENT_ACTION_ID),c_lst_act_id)
4856     FROM pay_assignment_actions
4857     WHERE SOURCE_ACTION_ID = c_lst_act_id;
4858 
4859  CURSOR csr_tax_paye_result(p_action_id NUMBER)   --  kvinayku
4860   IS
4861    SELECT MAX(DECODE(name,'Tax Code',prrv.result_value,NULL)),
4862       MAX(DECODE(name,'Tax Basis',DECODE(prrv.result_value,'N','Y',NULL),NULL))
4863     FROM pay_run_results prr ,
4864       pay_run_result_values prrv ,
4865       pay_input_values_f pivf
4866     WHERE prr.assignment_action_id = p_action_id
4867     AND prr.ELEMENT_TYPE_ID        = g_paye_element_id
4868     AND prrv.run_result_id         = prr.run_result_id
4869     AND pivf.INPUT_VALUE_ID        = prrv.INPUT_VALUE_ID;
4870 
4871 l_tax_code varchar2(10);
4872 l_tax_basis varchar2(1);
4873 
4874 BEGIN
4875   l_arch := true;
4876 
4877   hr_utility.set_location('Entering: '||l_proc,1);
4878   l_context_lst(1).tax_unit_id       :=NULL;
4879   l_context_lst(1).jurisdiction_code :=NULL;
4880   l_context_lst(1).source_id         :=NULL;
4881   l_context_lst(1).source_text       :=NULL;
4882   l_context_lst(1).source_number     :=NULL;
4883   l_context_lst(1).source_text2      :=NULL;
4884   l_context_lst(1).time_def_id       :=NULL;
4885   l_context_lst(1).balance_date      :=NULL;
4886   l_context_lst(1).local_unit_id     :=NULL;
4887   l_context_lst(1).source_number2    :=NULL;
4888   l_context_lst(1).organization_id   :=NULL;
4889 
4890   hr_utility.set_location('Assignment_id :' || p_asg_id,15);
4891   l_asg_primary_flag  := 'N';
4892   l_per_agg_flag      := 'N';
4893   l_aggr_archive_flag := 'N';
4894 
4895   OPEN csr_asg(p_asg_id);
4896   FETCH csr_asg INTO l_asg_primary_flag, l_per_agg_flag;
4897   CLOSE csr_asg;
4898 
4899   hr_utility.set_location('l_asg_primary_flag :' || l_asg_primary_flag,15);
4900   hr_utility.set_location('l_per_agg_flag     :' || l_per_agg_flag,15);
4901 
4902 OPEN csr_child_act_id(p_last_asg_action_id);
4903     FETCH csr_child_act_id INTO l_last_chld_act_id;
4904     CLOSE csr_child_act_id;
4905 
4906 --Tax code fix start
4907    /* OPEN csr_tax_paye_result(l_last_chld_act_id);
4908     FETCH csr_tax_paye_result
4909     INTO p_fps_bal_context_2.act_info25,
4910          p_fps_bal_context_2.act_info27;
4911     CLOSE csr_tax_paye_result;
4912 
4913 if p_fps_bal_context_2.act_info27 is null then
4914 open csr_tax_code_basis;
4915 fetch csr_tax_code_basis into p_fps_bal_context_2.act_info25,
4916          p_fps_bal_context_2.act_info27;
4917 close csr_tax_code_basis;
4918 end if; */
4919 
4920 fetch_tax_code_basis(l_last_chld_act_id,
4921 	p_fps_bal_context_2.act_info25,p_fps_bal_context_2.act_info27);
4922 
4923 	if p_fps_bal_context_2.act_info25 is null then
4924 		open csr_tax_code_basis;
4925 		fetch csr_tax_code_basis into p_fps_bal_context_2.act_info25,
4926          p_fps_bal_context_2.act_info27;
4927 		close csr_tax_code_basis;
4928 	end if;
4929 
4930 --Tax code fix end
4931 hr_utility.trace('Tax Code '||p_fps_bal_context_2.act_info25||' Tax Basis '||p_fps_bal_context_2.act_info27);
4932 
4933     pay_balance_pkg.get_value(p_assignment_action_id => p_last_asg_action_id ,
4934                               p_defined_balance_lst => g_defined_balance_lst ,
4935                               p_context_lst => l_context_lst ,
4936                               p_output_table => l_output_table );
4937     hr_utility.trace('After invoking get_value');
4938     p_fps_bal_context_2.assignment_id        := p_asg_id;
4939     p_fps_bal_context_2.action_info_category := 'GB_RTI_FPS_ASG_DET2';
4940     hr_utility.trace('Before entering for i in 1..g_fps_bal_det_tab.last loop');
4941 
4942     FOR outer_rec IN 1..l_output_table.count
4943     LOOP
4944 
4945 	 IF l_output_table(outer_rec).balance_value is not null then -- Null Check
4946 
4947       FOR inner_rec IN 1..g_fps_bal_det_tab.last
4948       LOOP
4949         IF (g_fps_bal_det_tab(inner_rec).defined_balance_id         = l_output_table(outer_rec).defined_balance_id) THEN
4950           IF g_fps_bal_det_tab(inner_rec).balance_name              = 'Taxable Pay' THEN
4951             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_PER_TD_YTD' ) THEN
4952               g_fps_bal_det_tab(inner_rec).balance_value           := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4953               p_fps_bal_context_2.act_info1                        := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4954             END IF;
4955           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'PAYE' THEN
4956             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_PER_TD_CPE_YTD') THEN
4957               g_fps_bal_det_tab(inner_rec).balance_value           := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4958               p_fps_bal_context_2.act_info2                        := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4959             END IF;
4960           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'Student Loan' THEN
4961             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_PER_TD_YTD') THEN
4962               g_fps_bal_det_tab(inner_rec).balance_value           := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4963               p_fps_bal_context_2.act_info3                        := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4964             END IF;
4965           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'NI Employer' THEN
4966             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_PER_TD_YTD') THEN
4967               g_fps_bal_det_tab(inner_rec).balance_value           := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4968               p_fps_bal_context_2.act_info4                        := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4969             END IF;
4970             --  This is for newly created balances
4971           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'Earnings Free of Tax' THEN
4972             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
4973               g_fps_bal_det_tab(inner_rec).balance_value         := 100                                  * NVL(l_output_table(outer_rec).balance_value,0);
4974               p_fps_bal_context_2.act_info7                      := NVL(p_fps_bal_context_2.act_info7,0) + 100 * NVL(l_output_table(outer_rec).balance_value,0);
4975             END IF;
4976           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'Earnings Free of NI' THEN
4977             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_PER_TD_YTD') THEN
4978               g_fps_bal_det_tab(inner_rec).balance_value           := 100                                  * NVL(l_output_table(outer_rec).balance_value,0);
4979               p_fps_bal_context_2.act_info7                        := NVL(p_fps_bal_context_2.act_info7,0) + 100 * NVL(l_output_table(outer_rec).balance_value,0);
4980             END IF;
4981           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SSP Total' THEN
4982             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
4983               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4984               p_fps_bal_context_2.act_info18                     := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4985             END IF;
4986           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SMP Total' THEN
4987             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
4988               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4989               p_fps_bal_context_2.act_info19                     := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4990             END IF;
4991           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SPP Adoption Total' THEN
4992             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
4993               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4994               p_fps_bal_context_2.act_info20                     := nvl(p_fps_bal_context_2.act_info20,0) + 100 * NVL(l_output_table(outer_rec).balance_value,0);
4995             END IF;
4996           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SPP Birth Total' THEN
4997             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
4998               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4999               p_fps_bal_context_2.act_info20                     := nvl(p_fps_bal_context_2.act_info20,0) + 100 * NVL(l_output_table(outer_rec).balance_value,0);
5000             END IF;
5001 
5002           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SAP Total' THEN
5003             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
5004               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
5005               p_fps_bal_context_2.act_info21                     := 100 * NVL(l_output_table(outer_rec).balance_value,0);
5006             END IF;
5007           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'ASPP Adoption Total' THEN
5008             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
5009               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
5010               p_fps_bal_context_2.act_info22                     := 100 * NVL(l_output_table(outer_rec).balance_value,0);
5011             END IF;
5012          elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'ASPP Birth Total' THEN
5013             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
5014               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
5015               p_fps_bal_context_2.act_info22                     := nvl(p_fps_bal_context_2.act_info22,0) + 100 * NVL(l_output_table(outer_rec).balance_value,0);
5016             END IF;
5017             -- Bug 16505555 fix
5018            elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'Pre Tax Pension Contributions' THEN
5019             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
5020               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
5021               p_fps_bal_context_2.act_info26                     := nvl(p_fps_bal_context_2.act_info26,0) + 100 * NVL(l_output_table(outer_rec).balance_value,0);
5022             END IF;
5023             -- Bug 16505555 fix
5024            elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'Post Tax Pension Contributions' THEN
5025             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
5026               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
5027               p_fps_bal_context_2.act_info28                     := nvl(p_fps_bal_context_2.act_info28,0) + 100 * NVL(l_output_table(outer_rec).balance_value,0);
5028             END IF;
5029           END IF;
5030         END IF;
5031       END LOOP;
5032       hr_utility.trace('After for i in 1..g_fps_bal_det_tab.last loop');
5033 	 END IF; --Not null check ends
5034     END LOOP;
5035  p_fps_bal_context_2.act_info17    := 0; -- Tax Deducted refunded
5036 
5037  hr_utility.trace(p_asg_id||'Leaving fetch_first_fps_agg_asg_det2 details function');
5038 
5039   RETURN l_arch;
5040 
5041 EXCEPTION
5042 WHEN OTHERS THEN
5043   hr_utility.set_location('Error in function fetch_first_fps_agg_asg_det2 ', 15);
5044   hr_utility.trace('Exception:' || SQLCODE || ' - ' || SQLERRM );
5045   fnd_file.put_line(fnd_file.LOG,'Exception:' || SQLCODE || ' - ' || SQLERRM);
5046   RAISE;
5047 
5048 END fetch_first_fps_agg_asg_det2;
5049 
5050 -- Function to fetch Assignment details (CONTEXT - GB_RTI_FPS_ASG_DET2)
5051 FUNCTION fetch_fps_asg_det2(
5052     p_last_asg_action_id IN NUMBER,
5053     p_asg_id             IN NUMBER,
5054     p_fps_bal_context_2  IN OUT nocopy act_info_rec )
5055   RETURN BOOLEAN
5056 IS
5057   l_context_lst pay_balance_pkg.t_context_tab;           -- used for batch balance retrieval
5058   l_output_table pay_balance_pkg.t_detailed_bal_out_tab; -- output of batch balance retrieval
5059   l_proc              CONSTANT VARCHAR2(50):= g_package||'fetch_fps_asg_det2';
5060   l_asg_primary_flag  VARCHAR2(1);
5061   l_per_agg_flag      VARCHAR2(1);
5062   l_aggr_archive_flag VARCHAR2(1);
5063   l_last_chld_act_id  NUMBER;
5064   l_tax_pay_val number;
5065   l_tax_pay_def_bal_id number;
5066   l_child_exists VARCHAR2(1);
5067   l_chld_act_id NUMBER;
5068   l_max_chld_act_id NUMBER;
5069 
5070   CURSOR csr_asg(c_asg_id NUMBER, c_effective_date DATE)
5071   IS
5072     SELECT trim(asg.primary_flag) asg_primary_flag,
5073       trim(pap.per_information10) per_agg_flag
5074     FROM per_all_people_f pap,
5075       per_all_assignments_f asg
5076     WHERE asg.assignment_id       = c_asg_id
5077     AND pap.person_id             = asg.person_id
5078     AND c_effective_date BETWEEN asg.effective_start_date AND asg.effective_end_date
5079     AND c_effective_date BETWEEN pap.effective_start_date AND pap.effective_end_date;
5080 
5081   CURSOR csr_child_act_id(c_lst_act_id NUMBER)
5082   IS
5083     SELECT assignment_action_id
5084     FROM pay_assignment_actions
5085     WHERE source_action_id = c_lst_act_id;
5086 
5087   CURSOR csr_tax_paye_result(p_action_id NUMBER)
5088   IS
5089     SELECT MAX(DECODE(name,'Tax Code',prrv.result_value,NULL)),
5090       MAX(DECODE(name,'Tax Basis',DECODE(prrv.result_value,'N','Y',NULL),NULL))
5091     FROM pay_run_results prr ,
5092       pay_run_result_values prrv ,
5093       pay_input_values_f pivf
5094     WHERE prr.assignment_action_id = p_action_id
5095     AND prr.ELEMENT_TYPE_ID        = g_paye_element_id
5096     AND prrv.run_result_id         = prr.run_result_id
5097     AND pivf.INPUT_VALUE_ID        = prrv.INPUT_VALUE_ID;
5098 
5099 CURSOR  csr_paye_details(p_assignment_id  NUMBER) IS
5100   SELECT  max(decode(iv.name,'Tax Code',screen_entry_value))     tax_code,
5101           max(decode(iv.name,'Tax Basis',DECODE(screen_entry_value,'N','Y',NULL),NULL))    tax_basis   --  kvinayku  bug no 14774165
5102   FROM  pay_element_entries_f e,
5103         pay_element_entry_values_f v,
5104         pay_input_values_f iv,
5105         pay_element_links_f link
5106   WHERE e.assignment_id = p_asg_id
5107   AND   link.element_type_id = g_paye_details_id
5108   AND   e.element_link_id = link.element_link_id
5109   AND   e.element_entry_id = v.element_entry_id
5110   AND   iv.input_value_id = v.input_value_id
5111   AND   e.effective_end_date BETWEEN link.effective_start_date AND link.effective_end_date
5112   AND   e.effective_end_date BETWEEN iv.effective_start_date AND iv.effective_end_date
5113   AND   e.effective_end_date BETWEEN v.effective_start_date AND v.effective_end_date
5114   AND   e.effective_end_date = (select max(e1.effective_end_date)
5115                                 from   pay_element_entries_f  e1,
5116                                        pay_element_links_f    link1
5117                                 where  link1.element_type_id = g_paye_details_id
5118                                 and    e1.assignment_id = p_asg_id
5119                                 and    e1.element_link_id = link1.element_link_id);
5120 
5121 cursor csr_get_taxable_pay(c_balance_name varchar2, c_dim_name varchar2) is
5122 select pdb.defined_balance_id from pay_defined_balances pdb,
5123 pay_balance_dimensions pbd,
5124 pay_balance_types pbt
5125 where pbt.balance_name = c_balance_name
5126 and pbd.database_item_suffix = c_dim_name
5127 and pbt.balance_type_id= pdb.balance_type_id
5128 and pbd.balance_dimension_id = pdb.balance_dimension_id and
5129 pbt.legislation_code = 'GB';
5130 
5131    cursor csr_tax_pay_value(p_last_asg_action_id number,l_tax_pay_def_bal_id number)
5132    is
5133 		select hr_dirbal.get_balance(p_last_asg_action_id,l_tax_pay_def_bal_id) from dual;
5134 
5135   CURSOR csr_max_child_act_id(c_lst_act_id NUMBER)
5136   IS
5137     SELECT max(assignment_action_id)
5138     FROM pay_assignment_actions
5139     WHERE source_action_id = c_lst_act_id;
5140 
5141 BEGIN
5142   hr_utility.set_location('Entering: '||l_proc,1);
5143   l_context_lst(1).tax_unit_id       :=NULL;
5144   l_context_lst(1).jurisdiction_code :=NULL;
5145   l_context_lst(1).source_id         :=NULL;
5146   l_context_lst(1).source_text       :=NULL;
5147   l_context_lst(1).source_number     :=NULL;
5148   l_context_lst(1).source_text2      :=NULL;
5149   l_context_lst(1).time_def_id       :=NULL;
5150   l_context_lst(1).balance_date      :=NULL;
5151   l_context_lst(1).local_unit_id     :=NULL;
5152   l_context_lst(1).source_number2    :=NULL;
5153   l_context_lst(1).organization_id   :=NULL;
5154   hr_utility.set_location('assignment_id :' || p_asg_id,15);
5155   l_asg_primary_flag  := 'N';
5156   l_per_agg_flag      := 'N';
5157   l_aggr_archive_flag := 'N';
5158 
5159   OPEN csr_asg(p_asg_id, g_effective_date);
5160   FETCH csr_asg INTO l_asg_primary_flag, l_per_agg_flag;
5161   CLOSE csr_asg;
5162 
5163   hr_utility.set_location('l_asg_primary_flag :' || l_asg_primary_flag,15);
5164   hr_utility.set_location('l_per_agg_flag :' || l_per_agg_flag,15);
5165 
5166   IF NVL(l_per_agg_flag,'N')       = 'Y' THEN
5167     IF NVL(l_asg_primary_flag,'N') = 'Y' THEN
5168       hr_utility.trace('Aggregation Found.');
5169       l_aggr_archive_flag := 'Y';
5170     END IF;
5171   END IF;
5172   hr_utility.set_location('l_aggr_archive_flag :' || l_aggr_archive_flag,15);
5173   ---
5174 
5175   IF (l_aggr_archive_flag = 'N' AND NVL(l_per_agg_flag,'N') = 'N') THEN
5176     hr_utility.trace('l_aggr_archive_flag = N');
5177     -- Get the child assignment action id to Archive Tax code and Tax basis.
5178     -- As the run results are generated with child assignment action id.
5179 
5180    open csr_get_taxable_pay('Taxable Pay', '_ASG_RUN');
5181    fetch csr_get_taxable_pay into l_tax_pay_def_bal_id;
5182    close csr_get_taxable_pay;
5183 
5184    open csr_tax_pay_value(p_last_asg_action_id,l_tax_pay_def_bal_id);
5185    fetch csr_tax_pay_value into l_tax_pay_val;
5186    close csr_tax_pay_value;
5187    hr_utility.set_location('l_tax_pay_val :' ||l_tax_pay_val ,15);
5188 
5189    IF l_tax_pay_val = 0 THEN
5190     OPEN csr_child_act_id(p_last_asg_action_id);
5191     FETCH csr_child_act_id INTO l_chld_act_id;
5192     CLOSE csr_child_act_id;
5193     l_child_exists := 'Y';
5194    ELSE
5195     l_chld_act_id := p_last_asg_action_id;
5196     l_child_exists := 'N';
5197    END IF;
5198 
5199    IF l_chld_act_id IS NULL THEN
5200     l_chld_act_id := p_last_asg_action_id;
5201     l_child_exists := 'N';
5202    END IF;
5203 
5204     OPEN csr_max_child_act_id(p_last_asg_action_id);
5205     FETCH csr_max_child_act_id INTO l_max_chld_act_id;
5206     CLOSE csr_max_child_act_id;
5207 
5208      hr_utility.trace('l_max_chld_act_id : '||l_max_chld_act_id);
5209 
5210    fetch_tax_code_basis(l_max_chld_act_id,
5211    p_fps_bal_context_2.act_info25,p_fps_bal_context_2.act_info27);
5212 
5213    if p_fps_bal_context_2.act_info25 is null then
5214       open csr_paye_details(p_asg_id);
5215 	    fetch csr_paye_details
5216       into p_fps_bal_context_2.act_info25,
5217  			     p_fps_bal_context_2.act_info27;
5218 	    close csr_paye_details;
5219 	 end if;
5220 
5221    hr_utility.trace('Tax Code '||p_fps_bal_context_2.act_info25||' Tax Basis '||p_fps_bal_context_2.act_info27);
5222 
5223 --Check whether we need to get balances with master asg action id or child asg action id
5224 if l_child_exists = 'N' then
5225 --We need to get balances with master asg action id
5226    hr_utility.trace('Processing with Master Action ID:'||p_last_asg_action_id);
5227 
5228    pay_balance_pkg.get_value(p_assignment_action_id => p_last_asg_action_id ,
5229                               p_defined_balance_lst => g_defined_balance_lst ,
5230                               p_context_lst => l_context_lst ,
5231                               p_output_table => l_output_table );
5232 
5233     hr_utility.trace('After invoking get_value');
5234     p_fps_bal_context_2.assignment_id        := p_asg_id;
5235     p_fps_bal_context_2.action_info_category := 'GB_RTI_FPS_ASG_DET2';
5236     hr_utility.trace('Before entering for i in 1..g_fps_bal_det_tab.last loop');
5237 
5238 --Get all balances with master asg action id
5239     FOR outer_rec IN 1..l_output_table.count
5240     LOOP
5241 
5242 	  IF l_output_table(outer_rec).balance_value is not null then -- Null Check
5243 
5244       FOR inner_rec IN 1..g_fps_bal_det_tab.last
5245       LOOP
5246         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
5247           IF g_fps_bal_det_tab(inner_rec).balance_name              = 'Taxable Pay' THEN
5248             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_TD_YTD' ) THEN
5249               g_fps_bal_det_tab(inner_rec).balance_value           := 100 *  l_output_table(outer_rec).balance_value;
5250               p_fps_bal_context_2.act_info1                        := 100 * l_output_table(outer_rec).balance_value;
5251           elsif g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5252               g_fps_bal_det_tab(inner_rec).balance_value           := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5253               p_fps_bal_context_2.act_info6                        := NVL(p_fps_bal_context_2.act_info6,0)              + 100 * l_output_table(outer_rec).balance_value;
5254             END IF;
5255           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'PAYE' THEN
5256             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_TD_YTD') THEN
5257               g_fps_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
5258               p_fps_bal_context_2.act_info2                        := 100 * l_output_table(outer_rec).balance_value;
5259           elsif g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5260               g_fps_bal_det_tab(inner_rec).balance_value           := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5261               p_fps_bal_context_2.act_info17                       := NVL(p_fps_bal_context_2.act_info17,0)             + 100 * l_output_table(outer_rec).balance_value;
5262             END IF;
5263           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'Student Loan' THEN
5264             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_TD_YTD') THEN
5265               g_fps_bal_det_tab(inner_rec).balance_value           := 100 * NVL(l_output_table(outer_rec).balance_value,0);
5266               p_fps_bal_context_2.act_info3                        := 100 * NVL(l_output_table(outer_rec).balance_value,0);
5267           elsif g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5268               g_fps_bal_det_tab(inner_rec).balance_value           := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5269               p_fps_bal_context_2.act_info16                       := NVL(p_fps_bal_context_2.act_info16,0)             + 100 * l_output_table(outer_rec).balance_value;
5270             END IF;
5271           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'NI Employer' THEN
5272             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_TD_YTD') THEN
5273               g_fps_bal_det_tab(inner_rec).balance_value           := 100 * NVL(l_output_table(outer_rec).balance_value,0);
5274               p_fps_bal_context_2.act_info4                        := 100 * NVL(l_output_table(outer_rec).balance_value,0);
5275           elsif g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5276               g_fps_bal_det_tab(inner_rec).balance_value           := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5277               p_fps_bal_context_2.act_info23                       := NVL(p_fps_bal_context_2.act_info23,0)             + 100 * l_output_table(outer_rec).balance_value;
5278             END IF;
5279             --  This is for newly created balances
5280           elsif g_fps_bal_det_tab(inner_rec).balance_name         =  'Total Direct Payments' THEN
5281             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN') THEN
5282               g_fps_bal_det_tab(inner_rec).balance_value         := 100  * l_output_table(outer_rec).balance_value;
5283               p_fps_bal_context_2.act_info7                      := NVL(p_fps_bal_context_2.act_info7,0) + 100 * l_output_table(outer_rec).balance_value;
5284             END IF;
5285           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'Earnings Free of Tax and NI' THEN
5286             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_RUN') THEN
5287               g_fps_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
5288               p_fps_bal_context_2.act_info7                        := NVL(p_fps_bal_context_2.act_info7,0) + 100 * l_output_table(outer_rec).balance_value;
5289           elsif g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5290               g_fps_bal_det_tab(inner_rec).balance_value           := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5291               p_fps_bal_context_2.act_info9                       := NVL(p_fps_bal_context_2.act_info9,0)             - 100 * l_output_table(outer_rec).balance_value;
5292             end if;
5293           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'Earnings Free of Tax' THEN
5294             if g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5295               g_fps_bal_det_tab(inner_rec).balance_value           := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5296               p_fps_bal_context_2.act_info14                       := NVL(p_fps_bal_context_2.act_info14,0)             + 100 * l_output_table(outer_rec).balance_value;
5297             end if;
5298           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Total Deductions' THEN
5299             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5300               g_fps_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5301               p_fps_bal_context_2.act_info8                     := NVL( p_fps_bal_context_2.act_info8,0)             + 100 * l_output_table(outer_rec).balance_value;
5302             END IF;
5303           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Pre Tax Deductions' THEN
5304             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5305               g_fps_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5306               p_fps_bal_context_2.act_info8                     := NVL( p_fps_bal_context_2.act_info8,0)             - 100 * l_output_table(outer_rec).balance_value;
5307             END IF;
5308 	        elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'NIable Deductions Free of Tax' THEN
5309             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5310               g_fps_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5311               p_fps_bal_context_2.act_info8                     := NVL( p_fps_bal_context_2.act_info8,0)             - 100 * l_output_table(outer_rec).balance_value;
5312             END IF;
5313           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Gross Pay' THEN
5314             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5315               g_fps_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5316               p_fps_bal_context_2.act_info9                     := NVL(p_fps_bal_context_2.act_info9,0)              + 100 * l_output_table(outer_rec).balance_value;
5317             END IF;
5318           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll Subject to NIC Earnings' THEN
5319             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5320               g_fps_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5321               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
5322               p_fps_bal_context_2.act_info11                    := NVL(p_fps_bal_context_2.act_info11,0)             + 100 * l_output_table(outer_rec).balance_value;
5323             END IF;
5324           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll Subject to NIC Information' THEN
5325             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5326               g_fps_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5327               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
5328               p_fps_bal_context_2.act_info11                    := NVL(p_fps_bal_context_2.act_info11,0)             + 100 * l_output_table(outer_rec).balance_value;
5329             END IF;
5330           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll NOT Subject to NIC Earnings' THEN
5331             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5332               g_fps_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5333               p_fps_bal_context_2.act_info12                    := NVL(p_fps_bal_context_2.act_info12,0)             + 100 * l_output_table(outer_rec).balance_value;
5334               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
5335             END IF;
5336           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll NOT Subject to NIC Information' THEN
5337             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5338               g_fps_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5339               p_fps_bal_context_2.act_info12                    := NVL(p_fps_bal_context_2.act_info12,0)             + 100 * l_output_table(outer_rec).balance_value;
5340               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
5341             END IF;
5342           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Pre Tax Pension Contributions' THEN
5343             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5344               g_fps_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5345               p_fps_bal_context_2.act_info13                    := NVL(p_fps_bal_context_2.act_info13,0)             + 100 * l_output_table(outer_rec).balance_value;
5346              -- Bug 16505555 fix
5347             elsif (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_TD_YTD') THEN
5348               g_fps_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
5349               p_fps_bal_context_2.act_info26                        := 100 * l_output_table(outer_rec).balance_value;
5350             END IF;
5351           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Post Tax Pension Contributions' THEN
5352             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5353               g_fps_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5354               p_fps_bal_context_2.act_info15                    := NVL(p_fps_bal_context_2.act_info15,0)             + 100 * l_output_table(outer_rec).balance_value;
5355             -- Bug 16505555 fix
5356             elsif (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_TD_YTD') THEN
5357               g_fps_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
5358               p_fps_bal_context_2.act_info28                        := 100 * l_output_table(outer_rec).balance_value;
5359             END IF;
5360           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SSP Total' THEN
5361             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
5362               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
5363               p_fps_bal_context_2.act_info18                     := 100 * l_output_table(outer_rec).balance_value;
5364           elsif g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5365               g_ssp_total                                        := NVL(g_ssp_total,0) + 100 * l_output_table(outer_rec).balance_value;
5366             END IF;
5367           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SMP Total' THEN
5368             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
5369               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
5370               p_fps_bal_context_2.act_info19                     := 100 * NVL(l_output_table(outer_rec).balance_value,0);
5371           elsif g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5372               g_smp_total                                        := NVL(g_smp_total,0) + 100 * l_output_table(outer_rec).balance_value;
5373             END IF;
5374           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SPP Adoption Total' THEN
5375             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
5376               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
5377               p_fps_bal_context_2.act_info20                     := nvl(p_fps_bal_context_2.act_info20,0) + 100 * l_output_table(outer_rec).balance_value;
5378             END IF;
5379           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SPP Birth Total' THEN
5380             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
5381               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
5382               --g_spp_total                                        := 100 * l_output_table(outer_rec).balance_value;
5383               p_fps_bal_context_2.act_info20                     := nvl(p_fps_bal_context_2.act_info20,0) + 100 * l_output_table(outer_rec).balance_value;
5384             END IF;
5385           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SAP Total' THEN
5386             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
5387               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
5388               p_fps_bal_context_2.act_info21                     := 100 * l_output_table(outer_rec).balance_value;
5389           elsif g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5390               g_sap_total                                        := NVL(g_sap_total,0) + 100 * l_output_table(outer_rec).balance_value;
5391             END IF;
5392           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'ASPP Adoption Total' THEN
5393             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
5394               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
5395               p_fps_bal_context_2.act_info22                     := nvl(p_fps_bal_context_2.act_info22,0) + 100 * l_output_table(outer_rec).balance_value;
5396             END IF;
5397           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'ASPP Birth Total' THEN
5398             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
5399               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
5400               --g_assp_total                                       := 100 * l_output_table(outer_rec).balance_value;
5401               p_fps_bal_context_2.act_info22                     := nvl(p_fps_bal_context_2.act_info22,0) + 100 * l_output_table(outer_rec).balance_value;
5402             END IF;
5403         END IF;
5404 	    END IF;
5405       END LOOP;
5406       hr_utility.trace('After for i in 1..g_fps_bal_det_tab.last loop');
5407 	  END IF;
5408     END LOOP;
5409 
5410 ELSE               -- for if l_child_exists = 'N' then
5411 --We need to get balances with child asg action id
5412    hr_utility.trace('Processing with Child Action IDs of:'||p_last_asg_action_id);
5413 
5414 FOR rec IN csr_child_act_id(p_last_asg_action_id)
5415 LOOP
5416 --Loop for getting the balances for all child asg action id's
5417    l_chld_act_id := rec.assignment_action_id;
5418    hr_utility.trace('l_chld_act_id:'||l_chld_act_id);
5419    pay_balance_pkg.get_value(p_assignment_action_id => l_chld_act_id ,
5420                               p_defined_balance_lst => g_defined_balance_lst ,
5421                               p_context_lst => l_context_lst ,
5422                               p_output_table => l_output_table );
5423 
5424     hr_utility.trace('After invoking get_value');
5425     p_fps_bal_context_2.assignment_id        := p_asg_id;
5426     p_fps_bal_context_2.action_info_category := 'GB_RTI_FPS_ASG_DET2';
5427     hr_utility.trace('Before entering for i in 1..g_fps_bal_det_tab.last loop');
5428 --Check whether this is the latest child asg action id
5429     IF (l_chld_act_id = l_max_chld_act_id) then
5430 --It is the latest child asg action id
5431 --Get all the balances with this latest child asg action id
5432     hr_utility.trace('in side if l_chld_act_id = l_max_chld_act_id');
5433     FOR outer_rec IN 1..l_output_table.count
5434     LOOP
5435 	  IF l_output_table(outer_rec).balance_value is not null then -- Null Check
5436 
5437       FOR inner_rec IN 1..g_fps_bal_det_tab.last
5438       LOOP
5439         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
5440           IF g_fps_bal_det_tab(inner_rec).balance_name              = 'Taxable Pay' THEN
5441             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_TD_YTD' ) THEN
5442               g_fps_bal_det_tab(inner_rec).balance_value           := 100 *  l_output_table(outer_rec).balance_value;
5443               p_fps_bal_context_2.act_info1                        := 100 * l_output_table(outer_rec).balance_value;
5444           elsif g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5445               g_fps_bal_det_tab(inner_rec).balance_value           := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5446               p_fps_bal_context_2.act_info6                        := NVL(p_fps_bal_context_2.act_info6,0)              + 100 * l_output_table(outer_rec).balance_value;
5447             END IF;
5448           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'PAYE' THEN
5449             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_TD_YTD') THEN
5450               g_fps_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
5451               p_fps_bal_context_2.act_info2                        := 100 * l_output_table(outer_rec).balance_value;
5452           elsif g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5453               g_fps_bal_det_tab(inner_rec).balance_value           := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5454               p_fps_bal_context_2.act_info17                       := NVL(p_fps_bal_context_2.act_info17,0)             + 100 * l_output_table(outer_rec).balance_value;
5455             END IF;
5456           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'Student Loan' THEN
5457             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_TD_YTD') THEN
5458               g_fps_bal_det_tab(inner_rec).balance_value           := 100 * NVL(l_output_table(outer_rec).balance_value,0);
5459               p_fps_bal_context_2.act_info3                        := 100 * NVL(l_output_table(outer_rec).balance_value,0);
5460           elsif g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5461               g_fps_bal_det_tab(inner_rec).balance_value           := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5462               p_fps_bal_context_2.act_info16                       := NVL(p_fps_bal_context_2.act_info16,0)             + 100 * l_output_table(outer_rec).balance_value;
5463             END IF;
5464           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'NI Employer' THEN
5465             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_TD_YTD') THEN
5466               g_fps_bal_det_tab(inner_rec).balance_value           := 100 * NVL(l_output_table(outer_rec).balance_value,0);
5467               p_fps_bal_context_2.act_info4                        := 100 * NVL(l_output_table(outer_rec).balance_value,0);
5468           elsif g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5469               g_fps_bal_det_tab(inner_rec).balance_value           := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5470               p_fps_bal_context_2.act_info23                       := NVL(p_fps_bal_context_2.act_info23,0)             + 100 * l_output_table(outer_rec).balance_value;
5471             END IF;
5472           elsif g_fps_bal_det_tab(inner_rec).balance_name         =  'Total Direct Payments' THEN
5473             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN') THEN
5474               g_fps_bal_det_tab(inner_rec).balance_value         := 100  * l_output_table(outer_rec).balance_value;
5475               p_fps_bal_context_2.act_info7                      := NVL(p_fps_bal_context_2.act_info7,0) + 100 * l_output_table(outer_rec).balance_value;
5476             END IF;
5477           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'Earnings Free of Tax and NI' THEN
5478             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_RUN') THEN
5479               g_fps_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
5480               p_fps_bal_context_2.act_info7                        := NVL(p_fps_bal_context_2.act_info7,0) + 100 * l_output_table(outer_rec).balance_value;
5481             elsif g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5482               g_fps_bal_det_tab(inner_rec).balance_value           := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5483               p_fps_bal_context_2.act_info9                       := NVL(p_fps_bal_context_2.act_info9,0)             - 100 * l_output_table(outer_rec).balance_value;
5484             end if;
5485           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'Earnings Free of Tax' THEN
5486             if g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5487               g_fps_bal_det_tab(inner_rec).balance_value           := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5488               p_fps_bal_context_2.act_info14                       := NVL(p_fps_bal_context_2.act_info14,0)             + 100 * l_output_table(outer_rec).balance_value;
5489             end if;
5490           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Total Deductions' THEN
5491             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5492               g_fps_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5493               p_fps_bal_context_2.act_info8                     := NVL( p_fps_bal_context_2.act_info8,0)             + 100 * l_output_table(outer_rec).balance_value;
5494             END IF;
5495           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Pre Tax Deductions' THEN
5496             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5497               g_fps_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5498               p_fps_bal_context_2.act_info8                     := NVL( p_fps_bal_context_2.act_info8,0)             - 100 * l_output_table(outer_rec).balance_value;
5499             END IF;
5500  	        elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'NIable Deductions Free of Tax' THEN
5501             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5502               g_fps_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5503               p_fps_bal_context_2.act_info8                     := NVL( p_fps_bal_context_2.act_info8,0)             - 100 * l_output_table(outer_rec).balance_value;
5504             END IF;
5505           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Gross Pay' THEN
5506             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5507               g_fps_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5508               p_fps_bal_context_2.act_info9                     := NVL(p_fps_bal_context_2.act_info9,0)              + 100 * l_output_table(outer_rec).balance_value;
5509             END IF;
5510           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll Subject to NIC Earnings' THEN
5511             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5512               g_fps_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5513               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
5514               p_fps_bal_context_2.act_info11                    := NVL(p_fps_bal_context_2.act_info11,0)             + 100 * l_output_table(outer_rec).balance_value;
5515             END IF;
5516           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll Subject to NIC Information' THEN
5517             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5518               g_fps_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5519               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
5520               p_fps_bal_context_2.act_info11                    := NVL(p_fps_bal_context_2.act_info11,0)             + 100 * l_output_table(outer_rec).balance_value;
5521             END IF;
5522           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll NOT Subject to NIC Earnings' THEN
5523             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5524               g_fps_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5525               p_fps_bal_context_2.act_info12                    := NVL(p_fps_bal_context_2.act_info12,0)             + 100 * l_output_table(outer_rec).balance_value;
5526               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
5527             END IF;
5528           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll NOT Subject to NIC Information' THEN
5529             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5530               g_fps_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5531               p_fps_bal_context_2.act_info12                    := NVL(p_fps_bal_context_2.act_info12,0)             + 100 * l_output_table(outer_rec).balance_value;
5532               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
5533             END IF;
5534           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Pre Tax Pension Contributions' THEN
5535             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5536               g_fps_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5537               p_fps_bal_context_2.act_info13                    := NVL(p_fps_bal_context_2.act_info13,0)             + 100 * l_output_table(outer_rec).balance_value;
5538            -- Bug 16505555 fix
5539            elsif (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_TD_YTD') THEN
5540               g_fps_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
5541               p_fps_bal_context_2.act_info26                       := 100 * l_output_table(outer_rec).balance_value;
5542             END IF;
5543           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Post Tax Pension Contributions' THEN
5544             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5545               g_fps_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5546               p_fps_bal_context_2.act_info15                    := NVL(p_fps_bal_context_2.act_info15,0)             + 100 * l_output_table(outer_rec).balance_value;
5547             -- Bug 16505555 fix
5548             elsif (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_TD_YTD') THEN
5549               g_fps_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
5550               p_fps_bal_context_2.act_info28                        := 100 * l_output_table(outer_rec).balance_value;
5551             END IF;
5552           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SSP Total' THEN
5553             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
5554               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
5555               p_fps_bal_context_2.act_info18                     := 100 * l_output_table(outer_rec).balance_value;
5556           elsif g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5557               g_ssp_total                                        := NVL(g_ssp_total,0) + 100 * l_output_table(outer_rec).balance_value;
5558             END IF;
5559           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SMP Total' THEN
5560             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
5561               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
5562               p_fps_bal_context_2.act_info19                     := 100 * NVL(l_output_table(outer_rec).balance_value,0);
5563           elsif g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5564               g_smp_total                                        := NVL(g_smp_total,0) + 100 * l_output_table(outer_rec).balance_value;
5565 
5566             END IF;
5567           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SPP Adoption Total' THEN
5568             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
5569               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
5570               p_fps_bal_context_2.act_info20                     := nvl(p_fps_bal_context_2.act_info20,0) + 100 * l_output_table(outer_rec).balance_value;
5571             END IF;
5572           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SPP Birth Total' THEN
5573             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
5574               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
5575               --g_spp_total                                        := 100 * l_output_table(outer_rec).balance_value;
5576               p_fps_bal_context_2.act_info20                     := nvl(p_fps_bal_context_2.act_info20,0) + 100 * l_output_table(outer_rec).balance_value;
5577             END IF;
5578           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SAP Total' THEN
5579             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
5580               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
5581               p_fps_bal_context_2.act_info21                     := 100 * l_output_table(outer_rec).balance_value;
5582           elsif g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5583               g_sap_total                                        := NVL(g_sap_total,0) + 100 * l_output_table(outer_rec).balance_value;
5584             END IF;
5585           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'ASPP Adoption Total' THEN
5586             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
5587               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
5588               p_fps_bal_context_2.act_info22                     := nvl(p_fps_bal_context_2.act_info22,0) + 100 * l_output_table(outer_rec).balance_value;
5589             END IF;
5590           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'ASPP Birth Total' THEN
5591             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
5592               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
5593               --g_assp_total                                       := 100 * l_output_table(outer_rec).balance_value;
5594               p_fps_bal_context_2.act_info22                     := nvl(p_fps_bal_context_2.act_info22,0) + 100 * l_output_table(outer_rec).balance_value;
5595             END IF;
5596         END IF;
5597 	    END IF;
5598       END LOOP;
5599       hr_utility.trace('After for i in 1..g_fps_bal_det_tab.last loop');
5600 	  END IF;
5601     END LOOP;
5602 
5603 ELSE  --for IF (l_chld_act_id = l_max_chld_act_id) then
5604 --It is not the latest child asg action id
5605 --Get only the RUN balances with this child asg action id
5606     hr_utility.trace('in side else l_chld_act_id = l_max_chld_act_id');
5607     FOR outer_rec IN 1..l_output_table.count
5608     LOOP
5609 	  IF l_output_table(outer_rec).balance_value is not null then -- Null Check
5610 
5611       FOR inner_rec IN 1..g_fps_bal_det_tab.last
5612       LOOP
5613         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
5614           IF g_fps_bal_det_tab(inner_rec).balance_name              = 'Taxable Pay' THEN
5615             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5616               g_fps_bal_det_tab(inner_rec).balance_value           := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5617               p_fps_bal_context_2.act_info6                        := NVL(p_fps_bal_context_2.act_info6,0)              + 100 * l_output_table(outer_rec).balance_value;
5618             END IF;
5619           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'PAYE' THEN
5620             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5621               g_fps_bal_det_tab(inner_rec).balance_value           := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5622               p_fps_bal_context_2.act_info17                       := NVL(p_fps_bal_context_2.act_info17,0)             + 100 * l_output_table(outer_rec).balance_value;
5623             END IF;
5624           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'Student Loan' THEN
5625             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5626               g_fps_bal_det_tab(inner_rec).balance_value           := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5627               p_fps_bal_context_2.act_info16                       := NVL(p_fps_bal_context_2.act_info16,0)             + 100 * l_output_table(outer_rec).balance_value;
5628             END IF;
5629           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'NI Employer' THEN
5630             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5631               g_fps_bal_det_tab(inner_rec).balance_value           := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5632               p_fps_bal_context_2.act_info23                       := NVL(p_fps_bal_context_2.act_info23,0)             + 100 * l_output_table(outer_rec).balance_value;
5633             END IF;
5634           elsif g_fps_bal_det_tab(inner_rec).balance_name         =  'Total Direct Payments' THEN
5635             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN') THEN
5636               g_fps_bal_det_tab(inner_rec).balance_value         := 100  * l_output_table(outer_rec).balance_value;
5637               p_fps_bal_context_2.act_info7                      := NVL(p_fps_bal_context_2.act_info7,0) + 100 * l_output_table(outer_rec).balance_value;
5638             END IF;
5639           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'Earnings Free of Tax and NI' THEN
5640             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_RUN') THEN
5641               g_fps_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
5642               p_fps_bal_context_2.act_info7                        := NVL(p_fps_bal_context_2.act_info7,0) + 100 * l_output_table(outer_rec).balance_value;
5643             elsif g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5644               g_fps_bal_det_tab(inner_rec).balance_value           := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5645               p_fps_bal_context_2.act_info9                       := NVL(p_fps_bal_context_2.act_info9,0)             - 100 * l_output_table(outer_rec).balance_value;
5646             end if;
5647           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'Earnings Free of Tax' THEN
5648             if g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5649               g_fps_bal_det_tab(inner_rec).balance_value           := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5650               p_fps_bal_context_2.act_info14                       := NVL(p_fps_bal_context_2.act_info14,0)             + 100 * l_output_table(outer_rec).balance_value;
5651             end if;
5652           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Total Deductions' THEN
5653             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5654               g_fps_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5655               p_fps_bal_context_2.act_info8                     := NVL( p_fps_bal_context_2.act_info8,0)             + 100 * l_output_table(outer_rec).balance_value;
5656             END IF;
5657           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Gross Pay' THEN
5658             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5659               g_fps_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5660               p_fps_bal_context_2.act_info9                     := NVL(p_fps_bal_context_2.act_info9,0)              + 100 * l_output_table(outer_rec).balance_value;
5661             END IF;
5662           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll Subject to NIC Earnings' THEN
5663             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5664               g_fps_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5665               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
5666               p_fps_bal_context_2.act_info11                    := NVL(p_fps_bal_context_2.act_info11,0)             + 100 * l_output_table(outer_rec).balance_value;
5667             END IF;
5668           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll Subject to NIC Information' THEN
5669             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5670               g_fps_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5671               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
5672               p_fps_bal_context_2.act_info11                    := NVL(p_fps_bal_context_2.act_info11,0)             + 100 * l_output_table(outer_rec).balance_value;
5673             END IF;
5674           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll NOT Subject to NIC Earnings' THEN
5675             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5676               g_fps_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5677               p_fps_bal_context_2.act_info12                    := NVL(p_fps_bal_context_2.act_info12,0)             + 100 * l_output_table(outer_rec).balance_value;
5678               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
5679             END IF;
5680           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll NOT Subject to NIC Information' THEN
5681             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5682               g_fps_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5683               p_fps_bal_context_2.act_info12                    := NVL(p_fps_bal_context_2.act_info12,0)             + 100 * l_output_table(outer_rec).balance_value;
5684               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
5685             END IF;
5686           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Pre Tax Pension Contributions' THEN
5687             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5688               g_fps_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5689               p_fps_bal_context_2.act_info13                    := NVL(p_fps_bal_context_2.act_info13,0)             + 100 * l_output_table(outer_rec).balance_value;
5690             END IF;
5691           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Post Tax Pension Contributions' THEN
5692             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5693               g_fps_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5694               p_fps_bal_context_2.act_info15                    := NVL(p_fps_bal_context_2.act_info15,0)             + 100 * l_output_table(outer_rec).balance_value;
5695             END IF;
5696           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SSP Total' THEN
5697             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5698               g_ssp_total                                        := NVL(g_ssp_total,0) + 100 * l_output_table(outer_rec).balance_value;
5699             END IF;
5700           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SMP Total' THEN
5701             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5702               g_smp_total                                        := NVL(g_smp_total,0) + 100 * l_output_table(outer_rec).balance_value;
5703             END IF;
5704           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SAP Total' THEN
5705             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5706               g_sap_total                                        := NVL(g_sap_total,0) + 100 * l_output_table(outer_rec).balance_value;
5707             END IF;
5708         END IF;
5709 	    END IF;
5710       END LOOP;
5711       hr_utility.trace('After for i in 1..g_fps_bal_det_tab.last loop');
5712 	  END IF;
5713     END LOOP;
5714 
5715 END IF;
5716 
5717 END LOOP;
5718 END IF; --for if l_child_exists = 'N' then
5719   END IF;
5720   RETURN true;
5721 
5722 EXCEPTION
5723 WHEN OTHERS THEN
5724   hr_utility.set_location('Error in function fetch_fps_asg_det2 ', 15);
5725   hr_utility.trace('Exception:' || SQLCODE || ' - ' || SQLERRM );
5726   fnd_file.put_line(fnd_file.LOG,'Exception:' || SQLCODE || ' - ' || SQLERRM);
5727   RAISE;
5728 END fetch_fps_asg_det2;
5729 --
5730 --
5731 --
5732 -- Function to fetch Assignment details (CONTEXT - GB_RTI_FPS_ASG_DET2) for PAYE aggregated cases
5733 FUNCTION fetch_fps_agg_asg_det2(
5734     p_last_asg_action_id IN NUMBER,
5735     p_asg_id             IN NUMBER,
5736     p_fps_bal_context_2  IN OUT nocopy act_info_rec )
5737   RETURN BOOLEAN
5738 IS
5739   l_context_lst pay_balance_pkg.t_context_tab;           -- used for batch balance retrieval
5740   l_output_table pay_balance_pkg.t_detailed_bal_out_tab; -- output of batch balance retrieval
5741   l_proc              CONSTANT VARCHAR2(50):= g_package||'fetch_fps_agg_asg_det2';
5742   l_asg_primary_flag  VARCHAR2(1);
5743   l_per_agg_flag      VARCHAR2(1);
5744   l_aggr_archive_flag VARCHAR2(1);
5745   l_last_chld_act_id  NUMBER;
5746   l_tax_pay_val number;
5747   l_tax_pay_def_bal_id number;
5748   l_child_exists VARCHAR2(1);
5749   l_chld_act_id NUMBER;
5750   l_max_chld_act_id NUMBER;
5751 
5752   CURSOR csr_asg(c_asg_id NUMBER, c_effective_date DATE)
5753   IS
5754     SELECT trim(asg.primary_flag) asg_primary_flag,
5755       trim(pap.per_information10) per_agg_flag
5756     FROM per_all_people_f pap,
5757       per_all_assignments_f asg
5758     WHERE asg.assignment_id       = c_asg_id
5759     AND pap.person_id             = asg.person_id
5760     AND c_effective_date BETWEEN asg.effective_start_date AND asg.effective_end_date
5761     AND c_effective_date BETWEEN pap.effective_start_date AND pap.effective_end_date;
5762 
5763   CURSOR csr_child_act_id(c_lst_act_id NUMBER)
5764   IS
5765     SELECT ASSIGNMENT_ACTION_ID
5766     FROM pay_assignment_actions
5767     WHERE SOURCE_ACTION_ID = c_lst_act_id;
5768 
5769   CURSOR csr_tax_paye_result(p_action_id NUMBER)
5770   IS
5771     SELECT MAX(DECODE(name,'Tax Code',prrv.result_value,NULL)),
5772       MAX(DECODE(name,'Tax Basis',DECODE(prrv.result_value,'N','Y',NULL),NULL))
5773     FROM pay_run_results prr ,
5774       pay_run_result_values prrv ,
5775       pay_input_values_f pivf
5776     WHERE prr.assignment_action_id = p_action_id
5777     AND prr.ELEMENT_TYPE_ID        = g_paye_element_id
5778     AND prrv.run_result_id         = prr.run_result_id
5779     AND pivf.INPUT_VALUE_ID        = prrv.INPUT_VALUE_ID;
5780 
5781 CURSOR  csr_paye_details(p_assignment_id  NUMBER) IS
5782   SELECT  max(decode(iv.name,'Tax Code',screen_entry_value))     tax_code,
5783           max(decode(iv.name,'Tax Basis',decode(screen_entry_value,'N','Y',NULL),NULL))    tax_basis  --  added by kvinayku  14774165
5784   FROM  pay_element_entries_f e,
5785         pay_element_entry_values_f v,
5786         pay_input_values_f iv,
5787         pay_element_links_f link
5788   WHERE e.assignment_id = p_asg_id
5789   AND   link.element_type_id = g_paye_details_id
5790   AND   e.element_link_id = link.element_link_id
5791   AND   e.element_entry_id = v.element_entry_id
5792   AND   iv.input_value_id = v.input_value_id
5793   AND   e.effective_end_date BETWEEN link.effective_start_date AND link.effective_end_date
5794   AND   e.effective_end_date BETWEEN iv.effective_start_date AND iv.effective_end_date
5795   AND   e.effective_end_date BETWEEN v.effective_start_date AND v.effective_end_date
5796   AND   e.effective_end_date = (select max(e1.effective_end_date)
5797                                 from   pay_element_entries_f  e1,
5798                                        pay_element_links_f    link1
5799                                 where  link1.element_type_id = g_paye_details_id
5800                                 and    e1.assignment_id = p_asg_id
5801                                 and    e1.element_link_id = link1.element_link_id);
5802 
5803 
5804 cursor csr_get_taxable_pay(c_balance_name varchar2, c_dim_name varchar2) is
5805 select pdb.defined_balance_id from pay_defined_balances pdb,
5806 pay_balance_dimensions pbd,
5807 pay_balance_types pbt
5808 where pbt.balance_name = c_balance_name
5809 and pbd.database_item_suffix = c_dim_name
5810 and pbt.balance_type_id= pdb.balance_type_id
5811 and pbd.balance_dimension_id = pdb.balance_dimension_id and
5812 pbt.legislation_code = 'GB';
5813 
5814    cursor csr_tax_pay_value(p_last_asg_action_id number,l_tax_pay_def_bal_id number)
5815    is
5816 		select hr_dirbal.get_balance(p_last_asg_action_id,l_tax_pay_def_bal_id) from dual;
5817 
5818   CURSOR csr_max_child_act_id(c_lst_act_id NUMBER)
5819   IS
5820     SELECT max(assignment_action_id)
5821     FROM pay_assignment_actions
5822     WHERE source_action_id = c_lst_act_id;
5823 
5824 BEGIN
5825   hr_utility.set_location('Entering: '||l_proc,1);
5826   l_context_lst(1).tax_unit_id       :=NULL;
5827   l_context_lst(1).jurisdiction_code :=NULL;
5828   l_context_lst(1).source_id         :=NULL;
5829   l_context_lst(1).source_text       :=NULL;
5830   l_context_lst(1).source_number     :=NULL;
5831   l_context_lst(1).source_text2      :=NULL;
5832   l_context_lst(1).time_def_id       :=NULL;
5833   l_context_lst(1).balance_date      :=NULL;
5834   l_context_lst(1).local_unit_id     :=NULL;
5835   l_context_lst(1).source_number2    :=NULL;
5836   l_context_lst(1).organization_id   :=NULL;
5837   hr_utility.set_location('assignment_id :' || p_asg_id,15);
5838   l_asg_primary_flag  := 'N';
5839   l_per_agg_flag      := 'N';
5840   l_aggr_archive_flag := 'N';
5841 
5842   OPEN csr_asg(p_asg_id, g_effective_date);
5843   FETCH csr_asg INTO l_asg_primary_flag, l_per_agg_flag;
5844   CLOSE csr_asg;
5845 
5846   hr_utility.set_location('l_asg_primary_flag :' || l_asg_primary_flag,15);
5847   hr_utility.set_location('l_per_agg_flag :' || l_per_agg_flag,15);
5848   hr_utility.set_location('l_aggr_archive_flag :' || l_aggr_archive_flag,15);
5849   ---
5850 
5851    open csr_get_taxable_pay('Taxable Pay', '_ASG_RUN');
5852    fetch csr_get_taxable_pay into l_tax_pay_def_bal_id;
5853    close csr_get_taxable_pay;
5854 
5855    open csr_tax_pay_value(p_last_asg_action_id,l_tax_pay_def_bal_id);
5856    fetch csr_tax_pay_value into l_tax_pay_val;
5857    close csr_tax_pay_value;
5858   hr_utility.set_location('l_tax_pay_val :' ||l_tax_pay_val ,15);
5859 -- Test whether we can get run level value with parent action id.
5860 -- If not pass the child assignment action id.
5861 
5862     if l_tax_pay_val = 0 then
5863 
5864     OPEN csr_child_act_id(p_last_asg_action_id);
5865     FETCH csr_child_act_id INTO l_chld_act_id;
5866     CLOSE csr_child_act_id;
5867 
5868    l_child_exists := 'Y';
5869    ELSE
5870     l_chld_act_id := p_last_asg_action_id;
5871     l_child_exists := 'N';
5872    END IF;
5873 
5874    IF l_chld_act_id IS NULL THEN
5875     l_chld_act_id := p_last_asg_action_id;
5876     l_child_exists := 'N';
5877    END IF;
5878 
5879     OPEN csr_max_child_act_id(p_last_asg_action_id);
5880     FETCH csr_max_child_act_id INTO l_max_chld_act_id;
5881     CLOSE csr_max_child_act_id;
5882 
5883      hr_utility.trace('l_max_chld_act_id : '||l_max_chld_act_id);
5884 
5885 fetch_tax_code_basis(l_max_chld_act_id, p_fps_bal_context_2.act_info25,p_fps_bal_context_2.act_info27);
5886 
5887 if p_fps_bal_context_2.act_info25 is null then
5888 	open csr_paye_details(p_asg_id);
5889 	fetch csr_paye_details
5890 		INTO p_fps_bal_context_2.act_info25,
5891 			 p_fps_bal_context_2.act_info27;
5892 	close csr_paye_details;
5893 	end if;
5894 hr_utility.trace('Tax Code '||p_fps_bal_context_2.act_info25||' Tax Basis '||p_fps_bal_context_2.act_info27);
5895 
5896 --Check whether we need to get balances with master asg action id or child asg action id
5897 if l_child_exists = 'N' then
5898 --We need to get balances with master asg action id
5899    hr_utility.trace('Processing with Master Action ID:'||p_last_asg_action_id);
5900 --
5901    pay_balance_pkg.get_value(p_assignment_action_id => p_last_asg_action_id ,
5902                               p_defined_balance_lst => g_aggr_defined_balance_lst ,
5903                               p_context_lst => l_context_lst ,
5904                               p_output_table => l_output_table );
5905 
5906     hr_utility.trace('After invoking get_value');
5907     p_fps_bal_context_2.assignment_id        := p_asg_id;
5908     p_fps_bal_context_2.action_info_category := 'GB_RTI_FPS_ASG_DET2';
5909     hr_utility.trace('Before entering for i in 1..g_fps_bal_det_tab.last loop');
5910 
5911 --Get all the balances with master asg action id
5912     FOR outer_rec IN 1..l_output_table.count
5913     LOOP
5914 
5915 	IF l_output_table(outer_rec).balance_value is not null then -- Null Check
5916 
5917       FOR inner_rec IN 1..g_fps_aggr_bal_det_tab.last
5918       LOOP
5919         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
5920           IF g_fps_aggr_bal_det_tab(inner_rec).balance_name              = 'Taxable Pay' THEN
5921             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix   = '_PER_TD_YTD' ) THEN
5922               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := 100 *  l_output_table(outer_rec).balance_value;
5923               p_fps_bal_context_2.act_info1                        := 100 * l_output_table(outer_rec).balance_value;
5924             elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5925               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5926               p_fps_bal_context_2.act_info6                        := NVL(p_fps_bal_context_2.act_info6,0)              + 100 * l_output_table(outer_rec).balance_value;
5927             END IF;
5928           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name           = 'PAYE' THEN
5929             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix   = '_PER_TD_CPE_YTD') THEN
5930               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
5931               p_fps_bal_context_2.act_info2                        := 100 * l_output_table(outer_rec).balance_value;
5932             elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5933               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5934               p_fps_bal_context_2.act_info17                       := NVL(p_fps_bal_context_2.act_info17,0)             + 100 * l_output_table(outer_rec).balance_value;
5935             END IF;
5936           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name           = 'Student Loan' THEN
5937             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix   = '_PER_TD_YTD') THEN
5938               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := 100 * NVL(l_output_table(outer_rec).balance_value,0);
5939               p_fps_bal_context_2.act_info3                        := 100 * NVL(l_output_table(outer_rec).balance_value,0);
5940             elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5941               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5942               p_fps_bal_context_2.act_info16                       := NVL(p_fps_bal_context_2.act_info16,0)             + 100 * l_output_table(outer_rec).balance_value;
5943             END IF;
5944           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name           = 'NI Employer' THEN
5945             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix   = '_PER_TD_YTD') THEN
5946               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := 100 * NVL(l_output_table(outer_rec).balance_value,0);
5947               p_fps_bal_context_2.act_info4                        := 100 * NVL(l_output_table(outer_rec).balance_value,0);
5948             elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5949               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5950               p_fps_bal_context_2.act_info23                       := NVL(p_fps_bal_context_2.act_info23,0)             + 100 * l_output_table(outer_rec).balance_value;
5951             END IF;
5952             --  This is for newly created balances
5953           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         =  'Total Direct Payments' THEN
5954             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN') THEN
5955               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100  * l_output_table(outer_rec).balance_value;
5956               p_fps_bal_context_2.act_info7                      := NVL(p_fps_bal_context_2.act_info7,0) + 100 * l_output_table(outer_rec).balance_value;
5957             END IF;
5958           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name           = 'Earnings Free of Tax and NI' THEN
5959             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_RUN') THEN
5960               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
5961               p_fps_bal_context_2.act_info7                        := NVL(p_fps_bal_context_2.act_info7,0) + 100 * l_output_table(outer_rec).balance_value;
5962             elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5963               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5964               p_fps_bal_context_2.act_info9                       := NVL(p_fps_bal_context_2.act_info9,0)             - 100 * l_output_table(outer_rec).balance_value;
5965             end if;
5966          elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name           = 'Earnings Free of Tax' THEN
5967             if g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5968               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5969               p_fps_bal_context_2.act_info14                       := NVL(p_fps_bal_context_2.act_info14,0)             + 100 * l_output_table(outer_rec).balance_value;
5970             end if;
5971         elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Total Deductions' THEN
5972             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5973               g_fps_aggr_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5974               p_fps_bal_context_2.act_info8                     := NVL( p_fps_bal_context_2.act_info8,0)             + 100 * l_output_table(outer_rec).balance_value;
5975             END IF;
5976         elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'NIable Deductions Free of Tax' THEN
5977             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5978               g_fps_aggr_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5979               p_fps_bal_context_2.act_info8                     := NVL( p_fps_bal_context_2.act_info8,0)             - 100 * l_output_table(outer_rec).balance_value;
5980             END IF;
5981         elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Pre Tax Deductions' THEN
5982             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5983               g_fps_aggr_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5984               p_fps_bal_context_2.act_info8                     := NVL( p_fps_bal_context_2.act_info8,0)             - 100 * l_output_table(outer_rec).balance_value;
5985             END IF;
5986           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Gross Pay' THEN
5987             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5988               g_fps_aggr_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5989               p_fps_bal_context_2.act_info9                     := NVL(p_fps_bal_context_2.act_info9,0)              + 100 * l_output_table(outer_rec).balance_value;
5990             END IF;
5991           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll Subject to NIC Earnings' THEN
5992             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5993               g_fps_aggr_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
5994               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
5995               p_fps_bal_context_2.act_info11                    := NVL(p_fps_bal_context_2.act_info11,0)             + 100 * l_output_table(outer_rec).balance_value;
5996             END IF;
5997           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll Subject to NIC Information' THEN
5998             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5999               g_fps_aggr_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
6000               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
6001               p_fps_bal_context_2.act_info11                    := NVL(p_fps_bal_context_2.act_info11,0)             + 100 * l_output_table(outer_rec).balance_value;
6002             END IF;
6003           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll NOT Subject to NIC Earnings' THEN
6004             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6005               g_fps_aggr_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
6006               p_fps_bal_context_2.act_info12                    := NVL(p_fps_bal_context_2.act_info12,0)             + 100 * l_output_table(outer_rec).balance_value;
6007               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
6008             END IF;
6009           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll NOT Subject to NIC Information' THEN
6010             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6011               g_fps_aggr_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
6012               p_fps_bal_context_2.act_info12                    := NVL(p_fps_bal_context_2.act_info12,0)             + 100 * l_output_table(outer_rec).balance_value;
6013               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
6014             END IF;
6015           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Pre Tax Pension Contributions' THEN
6016             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6017               g_fps_aggr_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
6018               p_fps_bal_context_2.act_info13                    := NVL(p_fps_bal_context_2.act_info13,0)             + 100 * l_output_table(outer_rec).balance_value;
6019           -- Bug 16505555 fix
6020           elsif (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix   = '_PER_TD_YTD' ) THEN
6021               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := 100 *  l_output_table(outer_rec).balance_value;
6022               p_fps_bal_context_2.act_info26                        := 100 * l_output_table(outer_rec).balance_value;
6023             END IF;
6024           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Post Tax Pension Contributions' THEN
6025             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6026               g_fps_aggr_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
6027               p_fps_bal_context_2.act_info15                    := NVL(p_fps_bal_context_2.act_info15,0)             + 100 * l_output_table(outer_rec).balance_value;
6028            -- Bug 16505555 fix
6029            elsif (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix   = '_PER_TD_YTD' ) THEN
6030               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := 100 *  l_output_table(outer_rec).balance_value;
6031               p_fps_bal_context_2.act_info28                        := 100 * l_output_table(outer_rec).balance_value;
6032             END IF;
6033           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'SSP Total' THEN
6034             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
6035               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
6036               p_fps_bal_context_2.act_info18                     := 100 * l_output_table(outer_rec).balance_value;
6037           elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6038               g_ssp_total                                        := NVL(g_ssp_total,0) + 100 * l_output_table(outer_rec).balance_value;
6039             END IF;
6040           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'SMP Total' THEN
6041             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
6042               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
6043               p_fps_bal_context_2.act_info19                     := 100 * NVL(l_output_table(outer_rec).balance_value,0);
6044           elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6045               g_smp_total                                        := NVL(g_smp_total,0) + 100 * l_output_table(outer_rec).balance_value;
6046 
6047             END IF;
6048           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'SPP Adoption Total' THEN
6049             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
6050               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
6051               p_fps_bal_context_2.act_info20                     := nvl(p_fps_bal_context_2.act_info20,0) + 100 * l_output_table(outer_rec).balance_value;
6052             elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6053               g_spp_total                                        := NVL(g_spp_total,0) + 100 * l_output_table(outer_rec).balance_value;
6054             END IF;
6055           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'SPP Birth Total' THEN
6056             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
6057               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
6058               p_fps_bal_context_2.act_info20                     := nvl(p_fps_bal_context_2.act_info20,0) + 100 * l_output_table(outer_rec).balance_value;
6059             END IF;
6060           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'SAP Total' THEN
6061             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
6062               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
6063               p_fps_bal_context_2.act_info21                     := 100 * l_output_table(outer_rec).balance_value;
6064           elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6065               g_sap_total                                        := NVL(g_sap_total,0) + 100 * l_output_table(outer_rec).balance_value;
6066 
6067             END IF;
6068           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'ASPP Adoption Total' THEN
6069             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
6070               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
6071               p_fps_bal_context_2.act_info22                     := nvl(p_fps_bal_context_2.act_info22,0) + 100 * l_output_table(outer_rec).balance_value;
6072            elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6073               g_assp_total                                        := NVL(g_assp_total,0) + 100 * l_output_table(outer_rec).balance_value;
6074             END IF;
6075           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'ASPP Birth Total' THEN
6076             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
6077               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
6078               p_fps_bal_context_2.act_info22                     := nvl(p_fps_bal_context_2.act_info22,0) + 100 * l_output_table(outer_rec).balance_value;
6079             END IF;
6080           END IF;
6081         END IF;
6082       END LOOP;
6083       hr_utility.trace('After for i in 1..g_fps_bal_det_tab.last loop');
6084 	  END IF; --Not null check ends
6085     END LOOP;
6086 
6087 ELSE --For if l_child_exists = 'N' then
6088 --We need to get balances with child asg action id
6089 hr_utility.trace('Processing with Child Action IDs of:'||p_last_asg_action_id);
6090 
6091 FOR rec IN csr_child_act_id(p_last_asg_action_id)
6092 LOOP
6093 
6094 --Loop for getting the balances for all child asg action id's
6095 l_chld_act_id := rec.assignment_action_id;
6096    hr_utility.trace('l_chld_act_id:'||l_chld_act_id);
6097 
6098   pay_balance_pkg.get_value(p_assignment_action_id => l_chld_act_id,
6099                               p_defined_balance_lst => g_aggr_defined_balance_lst ,
6100                               p_context_lst => l_context_lst ,
6101                               p_output_table => l_output_table );
6102 
6103     hr_utility.trace('After invoking get_value');
6104     p_fps_bal_context_2.assignment_id        := p_asg_id;
6105     p_fps_bal_context_2.action_info_category := 'GB_RTI_FPS_ASG_DET2';
6106     hr_utility.trace('Before entering for i in 1..g_fps_bal_det_tab.last loop');
6107 
6108 --Check whether this is the latest child asg action id
6109 IF (l_chld_act_id = l_max_chld_act_id) then
6110 --It is the latest child asg action id
6111 --Get all the balances with this latest child asg action id
6112     FOR outer_rec IN 1..l_output_table.count
6113     LOOP
6114 
6115     IF l_output_table(outer_rec).balance_value is not null then -- Null Check
6116 
6117       FOR inner_rec IN 1..g_fps_aggr_bal_det_tab.last
6118       LOOP
6119         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
6120           IF g_fps_aggr_bal_det_tab(inner_rec).balance_name              = 'Taxable Pay' THEN
6121             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix   = '_PER_TD_YTD' ) THEN
6122               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := 100 *  l_output_table(outer_rec).balance_value;
6123               p_fps_bal_context_2.act_info1                        := 100 * l_output_table(outer_rec).balance_value;
6124             elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6125               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
6126               p_fps_bal_context_2.act_info6                        := NVL(p_fps_bal_context_2.act_info6,0)              + 100 * l_output_table(outer_rec).balance_value;
6127             END IF;
6128           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name           = 'PAYE' THEN
6129             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix   = '_PER_TD_CPE_YTD') THEN
6130               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
6131               p_fps_bal_context_2.act_info2                        := 100 * l_output_table(outer_rec).balance_value;
6132             elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6133               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
6134               p_fps_bal_context_2.act_info17                       := NVL(p_fps_bal_context_2.act_info17,0)             + 100 * l_output_table(outer_rec).balance_value;
6135             END IF;
6136           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name           = 'Student Loan' THEN
6137             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix   = '_PER_TD_YTD') THEN
6138               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := 100 * NVL(l_output_table(outer_rec).balance_value,0);
6139               p_fps_bal_context_2.act_info3                        := 100 * NVL(l_output_table(outer_rec).balance_value,0);
6140             elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6141               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
6142               p_fps_bal_context_2.act_info16                       := NVL(p_fps_bal_context_2.act_info16,0)             + 100 * l_output_table(outer_rec).balance_value;
6143             END IF;
6144           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name           = 'NI Employer' THEN
6145             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix   = '_PER_TD_YTD') THEN
6146               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := 100 * NVL(l_output_table(outer_rec).balance_value,0);
6147               p_fps_bal_context_2.act_info4                        := 100 * NVL(l_output_table(outer_rec).balance_value,0);
6148             elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6149               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
6150               p_fps_bal_context_2.act_info23                       := NVL(p_fps_bal_context_2.act_info23,0)             + 100 * l_output_table(outer_rec).balance_value;
6151             END IF;
6152             --  This is for newly created balances
6153           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         =  'Total Direct Payments' THEN
6154             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN') THEN
6155               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100  * l_output_table(outer_rec).balance_value;
6156               p_fps_bal_context_2.act_info7                      := NVL(p_fps_bal_context_2.act_info7,0) + 100 * l_output_table(outer_rec).balance_value;
6157             END IF;
6158           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name           = 'Earnings Free of Tax and NI' THEN
6159             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_RUN') THEN
6160               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
6161               p_fps_bal_context_2.act_info7                        := NVL(p_fps_bal_context_2.act_info7,0) + 100 * l_output_table(outer_rec).balance_value;
6162             elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6163               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
6164               p_fps_bal_context_2.act_info9                       := NVL(p_fps_bal_context_2.act_info9,0)             - 100 * l_output_table(outer_rec).balance_value;
6165             end if;
6166          elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name           = 'Earnings Free of Tax' THEN
6167             if g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6168               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
6169               p_fps_bal_context_2.act_info14                       := NVL(p_fps_bal_context_2.act_info14,0)             + 100 * l_output_table(outer_rec).balance_value;
6170             end if;
6171         elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Total Deductions' THEN
6172             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6173               g_fps_aggr_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
6174               p_fps_bal_context_2.act_info8                     := NVL( p_fps_bal_context_2.act_info8,0)             + 100 * l_output_table(outer_rec).balance_value;
6175             END IF;
6176         elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'NIable Deductions Free of Tax' THEN
6177             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6178               g_fps_aggr_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
6179               p_fps_bal_context_2.act_info8                     := NVL( p_fps_bal_context_2.act_info8,0)             - 100 * l_output_table(outer_rec).balance_value;
6180             END IF;
6181         elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Pre Tax Deductions' THEN
6182             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6183               g_fps_aggr_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
6184               p_fps_bal_context_2.act_info8                     := NVL( p_fps_bal_context_2.act_info8,0)             - 100 * l_output_table(outer_rec).balance_value;
6185             END IF;
6186           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Gross Pay' THEN
6187             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6188               g_fps_aggr_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
6189               p_fps_bal_context_2.act_info9                     := NVL(p_fps_bal_context_2.act_info9,0)              + 100 * l_output_table(outer_rec).balance_value;
6190             END IF;
6191           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll Subject to NIC Earnings' THEN
6192             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6193               g_fps_aggr_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
6194               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
6195               p_fps_bal_context_2.act_info11                    := NVL(p_fps_bal_context_2.act_info11,0)             + 100 * l_output_table(outer_rec).balance_value;
6196             END IF;
6197           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll Subject to NIC Information' THEN
6198             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6199               g_fps_aggr_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
6200               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
6201               p_fps_bal_context_2.act_info11                    := NVL(p_fps_bal_context_2.act_info11,0)             + 100 * l_output_table(outer_rec).balance_value;
6202             END IF;
6203           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll NOT Subject to NIC Earnings' THEN
6204             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6205               g_fps_aggr_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
6206               p_fps_bal_context_2.act_info12                    := NVL(p_fps_bal_context_2.act_info12,0)             + 100 * l_output_table(outer_rec).balance_value;
6207               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
6208             END IF;
6209           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll NOT Subject to NIC Information' THEN
6210             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6211               g_fps_aggr_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
6212               p_fps_bal_context_2.act_info12                    := NVL(p_fps_bal_context_2.act_info12,0)             + 100 * l_output_table(outer_rec).balance_value;
6213               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
6214             END IF;
6215           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Pre Tax Pension Contributions' THEN
6216             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6217               g_fps_aggr_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
6218               p_fps_bal_context_2.act_info13                    := NVL(p_fps_bal_context_2.act_info13,0)             + 100 * l_output_table(outer_rec).balance_value;
6219             -- Bug 16505555 fix
6220             elsif (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix   = '_PER_TD_YTD' ) THEN
6221               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := 100 *  l_output_table(outer_rec).balance_value;
6222               p_fps_bal_context_2.act_info26                        := 100 * l_output_table(outer_rec).balance_value;
6223             END IF;
6224           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Post Tax Pension Contributions' THEN
6225             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6226               g_fps_aggr_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
6227               p_fps_bal_context_2.act_info15                    := NVL(p_fps_bal_context_2.act_info15,0)             + 100 * l_output_table(outer_rec).balance_value;
6228              -- Bug 16505555 fix
6229             elsif (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix   = '_PER_TD_YTD' ) THEN
6230               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := 100 *  l_output_table(outer_rec).balance_value;
6231               p_fps_bal_context_2.act_info28                        := 100 * l_output_table(outer_rec).balance_value;
6232             END IF;
6233           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'SSP Total' THEN
6234             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
6235               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
6236               p_fps_bal_context_2.act_info18                     := 100 * l_output_table(outer_rec).balance_value;
6237           elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6238               g_ssp_total                                        := NVL(g_ssp_total,0) + 100 * l_output_table(outer_rec).balance_value;
6239             END IF;
6240           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'SMP Total' THEN
6241             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
6242               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
6243               p_fps_bal_context_2.act_info19                     := 100 * NVL(l_output_table(outer_rec).balance_value,0);
6244           elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6245               g_smp_total                                        := NVL(g_smp_total,0) + 100 * l_output_table(outer_rec).balance_value;
6246 
6247             END IF;
6248           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'SPP Adoption Total' THEN
6249             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
6250               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
6251               p_fps_bal_context_2.act_info20                     := nvl(p_fps_bal_context_2.act_info20,0) + 100 * l_output_table(outer_rec).balance_value;
6252             elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6253               g_spp_total                                        := NVL(g_spp_total,0) + 100 * l_output_table(outer_rec).balance_value;
6254             END IF;
6255           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'SPP Birth Total' THEN
6256             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
6257               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
6258               p_fps_bal_context_2.act_info20                     := nvl(p_fps_bal_context_2.act_info20,0) + 100 * l_output_table(outer_rec).balance_value;
6259             END IF;
6260           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'SAP Total' THEN
6261             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
6262               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
6263               p_fps_bal_context_2.act_info21                     := 100 * l_output_table(outer_rec).balance_value;
6264           elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6265               g_sap_total                                        := NVL(g_sap_total,0) + 100 * l_output_table(outer_rec).balance_value;
6266 
6267             END IF;
6268           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'ASPP Adoption Total' THEN
6269             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
6270               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
6271               p_fps_bal_context_2.act_info22                     := nvl(p_fps_bal_context_2.act_info22,0) + 100 * l_output_table(outer_rec).balance_value;
6272            elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6273               g_assp_total                                        := NVL(g_assp_total,0) + 100 * l_output_table(outer_rec).balance_value;
6274             END IF;
6275           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'ASPP Birth Total' THEN
6276             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
6277               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
6278               p_fps_bal_context_2.act_info22                     := nvl(p_fps_bal_context_2.act_info22,0) + 100 * l_output_table(outer_rec).balance_value;
6279             END IF;
6280           END IF;
6281         END IF;
6282       END LOOP;
6283       hr_utility.trace('After for i in 1..g_fps_bal_det_tab.last loop');
6284 	  END IF; --Not null check ends
6285     END LOOP;
6286 
6287 ELSE  --IF (l_chld_act_id = l_max_chld_act_id) then
6288 --It is not the latest child asg action id
6289 --Get only the RUN balances with this child asg action id
6290 
6291     FOR outer_rec IN 1..l_output_table.count
6292     LOOP
6293 
6294     IF l_output_table(outer_rec).balance_value is not null then -- Null Check
6295 
6296       FOR inner_rec IN 1..g_fps_aggr_bal_det_tab.last
6297       LOOP
6298         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
6299           IF g_fps_aggr_bal_det_tab(inner_rec).balance_name              = 'Taxable Pay' THEN
6300             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6301               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
6302               p_fps_bal_context_2.act_info6                        := NVL(p_fps_bal_context_2.act_info6,0)              + 100 * l_output_table(outer_rec).balance_value;
6303             END IF;
6304           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name           = 'PAYE' THEN
6305             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6306               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
6307               p_fps_bal_context_2.act_info17                       := NVL(p_fps_bal_context_2.act_info17,0)             + 100 * l_output_table(outer_rec).balance_value;
6308             END IF;
6309           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name           = 'Student Loan' THEN
6310             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6311               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
6312               p_fps_bal_context_2.act_info16                       := NVL(p_fps_bal_context_2.act_info16,0)             + 100 * l_output_table(outer_rec).balance_value;
6313             END IF;
6314           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name           = 'NI Employer' THEN
6315             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6316               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
6317               p_fps_bal_context_2.act_info23                       := NVL(p_fps_bal_context_2.act_info23,0)             + 100 * l_output_table(outer_rec).balance_value;
6318             END IF;
6319             --  This is for newly created balances
6320           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         =  'Total Direct Payments' THEN
6321             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN') THEN
6322               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100  * l_output_table(outer_rec).balance_value;
6323               p_fps_bal_context_2.act_info7                      := NVL(p_fps_bal_context_2.act_info7,0) + 100 * l_output_table(outer_rec).balance_value;
6324             END IF;
6325           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name           = 'Earnings Free of Tax and NI' THEN
6326             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_RUN') THEN
6327               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
6328               p_fps_bal_context_2.act_info7                        := NVL(p_fps_bal_context_2.act_info7,0) + 100 * l_output_table(outer_rec).balance_value;
6329             elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6330               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
6331               p_fps_bal_context_2.act_info9                       := NVL(p_fps_bal_context_2.act_info9,0)             - 100 * l_output_table(outer_rec).balance_value;
6332             end if;
6333          elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name           = 'Earnings Free of Tax' THEN
6334             if g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6335               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
6336               p_fps_bal_context_2.act_info14                       := NVL(p_fps_bal_context_2.act_info14,0)             + 100 * l_output_table(outer_rec).balance_value;
6337             end if;
6338         elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Total Deductions' THEN
6339             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6340               g_fps_aggr_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
6341               p_fps_bal_context_2.act_info8                     := NVL( p_fps_bal_context_2.act_info8,0)             + 100 * l_output_table(outer_rec).balance_value;
6342             END IF;
6343           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Gross Pay' THEN
6344             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6345               g_fps_aggr_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
6346               p_fps_bal_context_2.act_info9                     := NVL(p_fps_bal_context_2.act_info9,0)              + 100 * l_output_table(outer_rec).balance_value;
6347             END IF;
6348           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll Subject to NIC Earnings' THEN
6349             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6350               g_fps_aggr_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
6351               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
6352               p_fps_bal_context_2.act_info11                    := NVL(p_fps_bal_context_2.act_info11,0)             + 100 * l_output_table(outer_rec).balance_value;
6353             END IF;
6354           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll Subject to NIC Information' THEN
6355             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6356               g_fps_aggr_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
6357               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
6358               p_fps_bal_context_2.act_info11                    := NVL(p_fps_bal_context_2.act_info11,0)             + 100 * l_output_table(outer_rec).balance_value;
6359             END IF;
6360           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll NOT Subject to NIC Earnings' THEN
6361             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6362               g_fps_aggr_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
6363               p_fps_bal_context_2.act_info12                    := NVL(p_fps_bal_context_2.act_info12,0)             + 100 * l_output_table(outer_rec).balance_value;
6364               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
6365             END IF;
6366           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll NOT Subject to NIC Information' THEN
6367             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6368               g_fps_aggr_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
6369               p_fps_bal_context_2.act_info12                    := NVL(p_fps_bal_context_2.act_info12,0)             + 100 * l_output_table(outer_rec).balance_value;
6370               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
6371             END IF;
6372           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Pre Tax Pension Contributions' THEN
6373             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6374               g_fps_aggr_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
6375               p_fps_bal_context_2.act_info13                    := NVL(p_fps_bal_context_2.act_info13,0)             + 100 * l_output_table(outer_rec).balance_value;
6376             END IF;
6377           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Post Tax Pension Contributions' THEN
6378             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6379               g_fps_aggr_bal_det_tab(inner_rec).balance_value        := NVL(g_fps_aggr_bal_det_tab(inner_rec).balance_value,0) + 100 * l_output_table(outer_rec).balance_value;
6380               p_fps_bal_context_2.act_info15                    := NVL(p_fps_bal_context_2.act_info15,0)             + 100 * l_output_table(outer_rec).balance_value;
6381             END IF;
6382           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'SSP Total' THEN
6383           IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6384               g_ssp_total                                        := NVL(g_ssp_total,0) + 100 * l_output_table(outer_rec).balance_value;
6385             END IF;
6386           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'SMP Total' THEN
6387             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6388               g_smp_total                                        := NVL(g_smp_total,0) + 100 * l_output_table(outer_rec).balance_value;
6389 
6390             END IF;
6391           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'SPP Adoption Total' THEN
6392             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6393               g_spp_total                                        := NVL(g_spp_total,0) + 100 * l_output_table(outer_rec).balance_value;
6394             END IF;
6395           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'SAP Total' THEN
6396            IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6397               g_sap_total                                        := NVL(g_sap_total,0) + 100 * l_output_table(outer_rec).balance_value;
6398 
6399             END IF;
6400           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'ASPP Adoption Total' THEN
6401            IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
6402               g_assp_total                                        := NVL(g_assp_total,0) + 100 * l_output_table(outer_rec).balance_value;
6403             END IF;
6404           END IF;
6405         END IF;
6406       END LOOP;
6407       hr_utility.trace('After for i in 1..g_fps_bal_det_tab.last loop');
6408 	  END IF; --Not null check ends
6409     END LOOP;
6410 END IF; --IF (l_chld_act_id = l_max_chld_act_id) then
6411 
6412 END LOOP;
6413 END IF; --For if l_child_exists = 'N' then
6414 
6415 
6416   RETURN true;
6417 
6418 EXCEPTION
6419 WHEN OTHERS THEN
6420   hr_utility.set_location('Error in function fetch_fps_agg_asg_det2 ', 15);
6421   hr_utility.trace('Exception:' || SQLCODE || ' - ' || SQLERRM );
6422   fnd_file.put_line(fnd_file.LOG,'Exception:' || SQLCODE || ' - ' || SQLERRM);
6423   RAISE;
6424 END fetch_fps_agg_asg_det2;
6425 
6426 PROCEDURE populate_run_msg(
6427     p_assignment_action_id IN NUMBER ,
6428     p_message_text         IN VARCHAR2,
6429     p_message_level        IN VARCHAR2 DEFAULT 'F')
6430 IS
6431   PRAGMA AUTONOMOUS_TRANSACTION;
6432 BEGIN
6433   hr_utility.set_location(' Entering: populate_run_msg',111);
6434 
6435   INSERT
6436   INTO pay_message_lines
6437     (
6438       line_sequence,
6439       payroll_id,
6440       message_level,
6441       source_id,
6442       source_type,
6443       line_text
6444     )
6445     VALUES
6446     (
6447       pay_message_lines_s.nextval ,
6448       100 ,
6449       p_message_level, --'F' ,
6450       p_assignment_action_id ,
6451       'A' ,
6452       SUBSTR(p_message_text,1,240)
6453     );
6454   hr_utility.set_location(' Leaving: populate_run_msg',999);
6455   COMMIT;
6456 
6457 EXCEPTION
6458 WHEN OTHERS THEN
6459   hr_utility.trace('Error occured in populate_run_msg');
6460   RAISE;
6461 END populate_run_msg;
6462 
6463 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 )
6464 is
6465 begin
6466 hr_utility.trace('Entering set_address_fields');
6467 
6468 --Address Fields are mandatory when nino is not known or on starter
6469 if p_asg_det.act_info1 is null then
6470 	if p_person_rec.act_info7 is not null then
6471 			p_addr_rec.act_info5  := NULL;
6472 			p_addr_rec.act_info6  := NULL;
6473 			p_addr_rec.act_info7  := NULL;
6474 			p_addr_rec.act_info8  := NULL;
6475 			p_addr_rec.act_info12 := NULL;
6476 			p_addr_rec.act_info13 := NULL;
6477 			hr_utility.trace('Address details will not be reported.');
6478 	end if;
6479 end if;
6480 
6481 hr_utility.trace('Leaving set_address_fields');
6482 end set_address_fields;
6483 
6484 -- Procedure to insert data to the archive table pay_action_information
6485 PROCEDURE insert_archive_row
6486   (
6487     p_assactid       IN NUMBER,
6488     p_effective_date IN DATE,
6489     p_tab_rec_data   IN action_info_table
6490   )
6491 IS
6492   l_proc      CONSTANT VARCHAR2(50):= g_package||'insert_archive_row';
6493   l_ovn       NUMBER;
6494   l_action_id NUMBER;
6495 BEGIN
6496   hr_utility.set_location('Entering: '||l_proc,1);
6497 
6498   IF p_tab_rec_data.count > 0 THEN
6499     FOR i                IN p_tab_rec_data.first .. p_tab_rec_data.last
6500     LOOP
6501       hr_utility.trace
6502       (
6503         'Defining category '|| p_tab_rec_data(i).action_info_category
6504       )
6505       ;
6506       hr_utility.trace('action_context_id = '|| p_assactid);
6507       IF p_tab_rec_data(i).action_info_category IS NOT NULL THEN
6508         pay_action_information_api.create_action_information( p_action_information_id => l_action_id,
6509                                                               p_object_version_number => l_ovn,
6510                                                               p_action_information_category => p_tab_rec_data(i).action_info_category,
6511                                                               p_action_context_id => p_assactid,
6512                                                               p_action_context_type => 'AAP',
6513                                                               p_assignment_id => p_tab_rec_data(i).assignment_id,
6514                                                               p_effective_date => p_effective_date,
6515                                                               p_action_information1 => p_tab_rec_data(i).act_info1,
6516                                                               p_action_information2 => p_tab_rec_data(i).act_info2,
6517                                                               p_action_information3 => p_tab_rec_data(i).act_info3,
6518                                                               p_action_information4 => p_tab_rec_data(i).act_info4,
6519                                                               p_action_information5 => p_tab_rec_data(i).act_info5,
6520                                                               p_action_information6 => p_tab_rec_data(i).act_info6,
6521                                                               p_action_information7 => p_tab_rec_data(i).act_info7,
6522                                                               p_action_information8 => p_tab_rec_data(i).act_info8,
6523                                                               p_action_information9 => p_tab_rec_data(i).act_info9,
6524                                                               p_action_information10 => p_tab_rec_data(i).act_info10,
6525                                                               p_action_information11 => p_tab_rec_data(i).act_info11,
6526                                                               p_action_information12 => p_tab_rec_data(i).act_info12,
6527                                                               p_action_information13 => p_tab_rec_data(i).act_info13,
6528                                                               p_action_information14 => p_tab_rec_data(i).act_info14,
6529                                                               p_action_information15 => p_tab_rec_data(i).act_info15,
6530                                                               p_action_information16 => p_tab_rec_data(i).act_info16,
6531                                                               p_action_information17 => p_tab_rec_data(i).act_info17,
6532                                                               p_action_information18 => p_tab_rec_data(i).act_info18,
6533                                                               p_action_information19 => p_tab_rec_data(i).act_info19,
6534                                                               p_action_information20 => p_tab_rec_data(i).act_info20,
6535                                                               p_action_information21 => p_tab_rec_data(i).act_info21,
6536                                                               p_action_information22 => p_tab_rec_data(i).act_info22,
6537                                                               p_action_information23 => p_tab_rec_data(i).act_info23,
6538                                                               p_action_information24 => p_tab_rec_data(i).act_info24,
6539                                                               p_action_information25 => p_tab_rec_data(i).act_info25,
6540                                                               p_action_information26 => p_tab_rec_data(i).act_info26,
6541                                                               p_action_information27 => p_tab_rec_data(i).act_info27,
6542                                                               p_action_information28 => p_tab_rec_data(i).act_info28,
6543                                                               p_action_information29 => p_tab_rec_data(i).act_info29,
6544                                                               p_action_information30 => p_tab_rec_data(i).act_info30 );
6545       END IF;
6546     END LOOP;
6547   END IF;
6548   hr_utility.set_location('Leaving: '||l_proc,999);
6549 END insert_archive_row;
6550 -- Procedure to insert data to the archive table pay_action_information.
6551 -- This is used in PAYE aggregation case inaddition to the procedure insert_archive_row
6552 PROCEDURE insert_archive_row_agg
6553   (
6554     p_assactid       IN NUMBER,
6555     p_effective_date IN DATE,
6556     p_tab_rec_data   IN action_info_table
6557   )
6558 IS
6559   l_proc      CONSTANT VARCHAR2(50):= g_package||'insert_archive_row_agg';
6560   l_ovn       NUMBER;
6561   l_action_id NUMBER;
6562   l_assact_id number;
6563 BEGIN
6564   hr_utility.set_location('Entering: '||l_proc,1);
6565 
6566   IF p_tab_rec_data.count > 0 THEN
6567     FOR i                IN p_tab_rec_data.first .. p_tab_rec_data.last
6568     LOOP
6569       hr_utility.trace
6570       (
6571         'Defining category '|| p_tab_rec_data(i).action_info_category
6572       )
6573       ;
6574       hr_utility.trace('action_context_id = '|| p_assactid);
6575       IF p_tab_rec_data(i).action_info_category IS NOT NULL THEN
6576 --       get the assignment action id for the each assignment which are created in action creation
6577   select paa.assignment_action_id into l_assact_id from  pay_assignment_actions paa
6578   where paa.payroll_action_id = g_payroll_action_id
6579   and paa.assignment_id = p_tab_rec_data(i).assignment_id;
6580 
6581         pay_action_information_api.create_action_information( p_action_information_id => l_action_id,
6582                                                               p_object_version_number => l_ovn,
6583                                                               p_action_information_category => p_tab_rec_data(i).action_info_category,
6584                                                               p_action_context_id => l_assact_id,
6585                                                               p_action_context_type => 'AAP',
6586                                                               p_assignment_id => p_tab_rec_data(i).assignment_id,
6587                                                               p_effective_date => p_effective_date,
6588                                                               p_action_information1 => p_tab_rec_data(i).act_info1,
6589                                                               p_action_information2 => p_tab_rec_data(i).act_info2,
6590                                                               p_action_information3 => p_tab_rec_data(i).act_info3,
6591                                                               p_action_information4 => p_tab_rec_data(i).act_info4,
6592                                                               p_action_information5 => p_tab_rec_data(i).act_info5,
6593                                                               p_action_information6 => p_tab_rec_data(i).act_info6,
6594                                                               p_action_information7 => p_tab_rec_data(i).act_info7,
6595                                                               p_action_information8 => p_tab_rec_data(i).act_info8,
6596                                                               p_action_information9 => p_tab_rec_data(i).act_info9,
6597                                                               p_action_information10 => p_tab_rec_data(i).act_info10,
6598                                                               p_action_information11 => p_tab_rec_data(i).act_info11,
6599                                                               p_action_information12 => p_tab_rec_data(i).act_info12,
6600                                                               p_action_information13 => p_tab_rec_data(i).act_info13,
6601                                                               p_action_information14 => p_tab_rec_data(i).act_info14,
6602                                                               p_action_information15 => p_tab_rec_data(i).act_info15,
6603                                                               p_action_information16 => p_tab_rec_data(i).act_info16,
6604                                                               p_action_information17 => p_tab_rec_data(i).act_info17,
6605                                                               p_action_information18 => p_tab_rec_data(i).act_info18,
6606                                                               p_action_information19 => p_tab_rec_data(i).act_info19,
6607                                                               p_action_information20 => p_tab_rec_data(i).act_info20,
6608                                                               p_action_information21 => p_tab_rec_data(i).act_info21,
6609                                                               p_action_information22 => p_tab_rec_data(i).act_info22,
6610                                                               p_action_information23 => p_tab_rec_data(i).act_info23,
6611                                                               p_action_information24 => p_tab_rec_data(i).act_info24,
6612                                                               p_action_information25 => p_tab_rec_data(i).act_info25,
6613                                                               p_action_information26 => p_tab_rec_data(i).act_info26,
6614                                                               p_action_information27 => p_tab_rec_data(i).act_info27,
6615                                                               p_action_information28 => p_tab_rec_data(i).act_info28,
6616                                                               p_action_information29 => p_tab_rec_data(i).act_info29,
6617                                                               p_action_information30 => p_tab_rec_data(i).act_info30 );
6618       END IF;
6619     END LOOP;
6620   END IF;
6621   hr_utility.set_location('Leaving: '||l_proc,999);
6622 END insert_archive_row_agg;
6623 
6624 --
6625 --
6626 /*------------ PUBLIC PROCEDURES --------------*/
6627 /*--------------------------------------------------------------------------
6628 Name      : range_cursor
6629 Purpose   : This returns the select statement that is used to create the
6630 range rows.
6631 Arguments :
6632 Notes     : The range cursor determines which people should be processed.
6633 The normal practice is to include everyone, and then limit
6634 the list during the assignment action creation.
6635 --------------------------------------------------------------------------*/
6636 PROCEDURE range_cursor
6637   (
6638     pactid IN NUMBER,
6639     sqlstr OUT NOCOPY VARCHAR2
6640   )
6641 IS
6642 
6643   CURSOR csr_parameter_info
6644   IS
6645     SELECT SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'PRE_PAY_ID'),1,20) pre_pay_id,
6646            SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'FIRST_FPS'),1,20) first_fps,
6647            SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'TAX_REF'),1,20) tax_ref,
6648            fnd_date.canonical_to_date(SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'FIRST_FPS_DATE'),1,10)) first_fps_date,
6649            SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'FIN_SUB'),1,20) final_submission,
6650            fnd_date.canonical_to_date(SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'DATE_SCHEME'),1,10)) final_submission,
6651 					 effective_date
6652     FROM pay_payroll_actions
6653     WHERE payroll_action_id = pactid;
6654 
6655   CURSOR csr_get_payroll_id(c_pre_pact_id NUMBER)
6656   IS
6657     SELECT payroll_id
6658     FROM pay_payroll_actions
6659     WHERE payroll_action_id = c_pre_pact_id;
6660 
6661    -- cursor to check whether first fps is run for this payroll or not
6662   cursor c_first_fps_ran(c_payroll_id number) is
6663   select 'Y' from pay_payroll_actions ppa
6664   where c_payroll_id = pay_gb_eoy_archive.get_parameter(legislative_parameters,'PAYROLL_ID')
6665   and   pay_gb_eoy_archive.get_parameter(legislative_parameters,'FIRST_FPS') = 'Y'
6666   and ACTION_STATUS = 'C'
6667   and exists (select 1 from pay_gb_fps_details where PAYROLL_ACTION_ID = ppa.payroll_action_id);
6668 
6669   cursor csr_other_prepay_pactid(c_tax_ref varchar2) is
6670   select distinct ppa.payroll_action_id
6671   from pay_payroll_actions ppa
6672   where ppa.effective_date >= sysdate - 30
6673   and ppa.action_type in ('P','U')
6674   and ppa.action_status ='C'
6675   and ppa.payroll_id in (select distinct payroll_id
6676                            from pay_all_payrolls_f papf,
6677                                 hr_soft_coding_keyflex flex
6678                            where upper(flex.segment1) = c_tax_ref
6679                              and flex.SOFT_CODING_KEYFLEX_ID = papf.SOFT_CODING_KEYFLEX_ID)
6680   minus
6681   select distinct pre_payment_payroll_action_id from pay_gb_bacs_fps;
6682 
6683   l_report_type VARCHAR2(15);
6684   l_payroll_id  NUMBER;
6685   l_proc        CONSTANT VARCHAR2(35):= g_package||'range_cursor';
6686   l_first_fps_ind varchar2(10);
6687   l_first_fps_date date;
6688   l_frst_fps_ran char;
6689   l_dummy number;
6690   l_other_prepay_pactid number;
6691   l_tax_ref varchar2(30);
6692   l_final_submission varchar2(50);
6693   l_date_scheme_ceased date;
6694   date_scheme_error EXCEPTION;
6695   l_effective_date date;
6696 	l_start_year date;
6697 	l_end_year date;
6698 
6699 BEGIN
6700   hr_utility.set_location('Entering: '||l_proc,1);
6701 
6702   OPEN  csr_parameter_info;
6703   FETCH csr_parameter_info INTO g_pre_pact_id,l_first_fps_ind,l_tax_ref,l_first_fps_date,l_final_submission,l_date_scheme_ceased,l_effective_date;
6704   CLOSE csr_parameter_info;
6705   hr_utility.trace('g_pre_pact_id: '||g_pre_pact_id);
6706   hr_utility.trace('l_tax_ref: '||l_tax_ref);
6707   hr_utility.trace('Before calling PAY_GB_FPS_NI_AND_OTHERS.FPS_BACS_PREPROCESS: ');
6708   l_dummy := PAY_GB_FPS_NI_AND_OTHERS_13.FPS_BACS_PREPROCESS(g_pre_pact_id, 'FPS');
6709 
6710 /*Below code generates the HASH CODE for All Prepayments ran within 30 days.
6711 This will avoid generating duplicate records when it is called from Archive Code*/
6712 
6713   OPEN csr_other_prepay_pactid(l_tax_ref);
6714   LOOP
6715   FETCH csr_other_prepay_pactid INTO l_other_prepay_pactid;
6716   EXIT WHEN csr_other_prepay_pactid%notfound;
6717   hr_utility.trace('Before calling PAY_GB_FPS_NI_AND_OTHERS.FPS_BACS_PREPROCESS for: '||l_other_prepay_pactid);
6718   l_dummy := PAY_GB_FPS_NI_AND_OTHERS_13.FPS_BACS_PREPROCESS(l_other_prepay_pactid, 'FPS');
6719   hr_utility.trace('After calling PAY_GB_FPS_NI_AND_OTHERS.FPS_BACS_PREPROCESS for: '||l_other_prepay_pactid);
6720   END LOOP;
6721   CLOSE csr_other_prepay_pactid;
6722 
6723   OPEN csr_get_payroll_id(g_pre_pact_id);
6724   FETCH csr_get_payroll_id INTO l_payroll_id;
6725   CLOSE csr_get_payroll_id;
6726 
6727   IF l_effective_date >= to_date('06-04-'||SUBSTR(TO_CHAR(l_effective_date,'YYYY/MON/DD'),1,4),'DD-MM-YYYY' ) THEN
6728     l_start_year      := to_date('06-04-'||SUBSTR(TO_CHAR(l_effective_date,'YYYY/MON/DD'),1,4),'DD-MM-YYYY' ) ;
6729     l_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') ;
6730   ELSE
6731     l_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') ;
6732     l_end_year   := to_date('05-04-'||SUBSTR(TO_CHAR(l_effective_date,'YYYY/MON/DD'),1,4),'DD-MM-YYYY') ;
6733   END IF;
6734 
6735   hr_utility.trace(' Payroll  : '||l_payroll_id);
6736   hr_utility.trace(' l_first_fps_ind  : '||l_first_fps_ind);
6737   hr_utility.trace(' l_first_fps_date  : '||l_first_fps_date);
6738   hr_utility.trace(' l_final_submission  : '||l_final_submission);
6739   hr_utility.trace(' l_date_scheme_ceased  : '||l_date_scheme_ceased);
6740 
6741   -- This blocks checks whether First FPS is already ran for this payroll.
6742   if l_first_fps_ind is not null and l_first_fps_ind = 'Y' then
6743      open c_first_fps_ran(l_payroll_id);
6744      fetch c_first_fps_ran into l_frst_fps_ran;
6745      close c_first_fps_ran;
6746 
6747      if l_frst_fps_ran = 'Y' then
6748         fnd_file.put_line (fnd_file.LOG,'Error : First FPS has already been run for the requested payroll. Either rollback or select to run a normal FPS.');
6749         --raise first_fps_ran_already_error;
6750      end if;
6751   end if;
6752 
6753   if l_first_fps_ind is not null and l_first_fps_ind <> 'Y'
6754          and l_first_fps_date is not null then
6755         fnd_file.put_line (fnd_file.LOG,'Error : First FPS date should not be entered when First FPS Indicator is not Yes.');
6756         RAISE first_fps_indicator_error;
6757   end if;
6758 
6759   if l_first_fps_ind = 'Y' and l_first_fps_date is null then
6760         fnd_file.put_line (fnd_file.LOG,'Error : Enter the First FPS date when First FPS Indicator is Yes.');
6761         RAISE first_fps_indicator_error;
6762   end if;
6763 
6764 -- Raise error if Date Scheme Ceased not entered when Final Submission set to Yes - Final for Ceased PAYE Ref
6765   if l_final_submission = 'YCEAS' and l_date_scheme_ceased is null then
6766         fnd_file.put_line (fnd_file.LOG,'Error : Enter Date Scheme Ceased when Final Submission is Yes - Final for Ceased PAYE Ref.');
6767 	 			fnd_file.put_line (fnd_file.output,'Error : Enter Date Scheme Ceased when Final Submission is Yes - Final for Ceased PAYE Ref.');
6768         RAISE date_scheme_error;
6769   end if;
6770 
6771 -- Raise error if Date Scheme Ceased entered when Final Submission not set to Yes - Final for Ceased PAYE Ref
6772  if l_date_scheme_ceased is not null and l_final_submission <> 'YCEAS' then
6773         fnd_file.put_line (fnd_file.LOG,'Error : Date Scheme Ceased should not be entered when Final Submission is not Yes - Final for Ceased PAYE Ref.');
6774         fnd_file.put_line (fnd_file.output,'Error : Date Scheme Ceased should not be entered when Final Submission is not Yes - Final for Ceased PAYE Ref.');
6775         RAISE date_scheme_error;
6776  end if;
6777 
6778 if l_date_scheme_ceased < l_start_year or l_date_scheme_ceased > l_end_year then
6779         fnd_file.put_line (fnd_file.LOG,'Error : Date Scheme Ceased should be within Tax Year.');
6780         fnd_file.put_line (fnd_file.output,'Error : Date Scheme Ceased should be within Tax Year.');
6781         RAISE date_scheme_error;
6782 end if;
6783 
6784   sqlstr := 'select distinct PERSON_ID '|| 'from per_all_assignments_f paaf, '
6785              || 'pay_payroll_actions ppa '|| 'where ppa.payroll_action_id = :payroll_action_id '
6786 	     || 'and ppa.business_group_id = paaf.business_group_id '|| ' and paaf.payroll_id = '
6787 	     ||''''||l_payroll_id||''''|| ' order by person_id';
6788 
6789   hr_utility.trace(' Range Cursor Statement : '||sqlstr);
6790   -- Header validations
6791   pay_gb_rti_fps_validate_13.header_validations(pactid,g_validation_check);
6792 
6793   hr_utility.set_location(' Leaving: '||l_proc,100);
6794 
6795 EXCEPTION
6796 when first_fps_indicator_error then
6797 hr_utility.raise_error;
6798 when date_scheme_error then
6799 hr_utility.raise_error;
6800 when first_fps_ran_already_error then
6801 hr_utility.set_location('First FPS already ran for the payroll id  '||l_payroll_id,1);
6802 hr_utility.raise_error;
6803 WHEN OTHERS THEN
6804   hr_utility.raise_error;
6805 END range_cursor;
6806 --
6807 --
6808 --
6809 PROCEDURE internal_action_creation_fps(
6810     pactid      IN NUMBER,
6811     stperson    IN NUMBER,
6812     endperson   IN NUMBER,
6813     chunk       IN NUMBER,
6814     p_info_type IN VARCHAR2,
6815     p_rep_type  IN VARCHAR2)
6816 IS
6817   l_proc              CONSTANT VARCHAR2(90):= g_package||'internal_action_creation_fps';
6818   l_payroll_id        NUMBER;
6819   l_tax_ref           VARCHAR2(20);
6820   l_business_group_id NUMBER;
6821   l_end_date DATE;
6822   l_start_date DATE;
6823   l_ass_act_id       NUMBER;
6824   l_assignment_id    NUMBER;
6825   l_arch             BOOLEAN;
6826   lockingactid       NUMBER;
6827   l_locked_action_id NUMBER;
6828   l_exist            NUMBER;
6829   l_first_fps        VARCHAR2(1);
6830   l_first_fps_run_date date;
6831   l_first_fps_eff_date date;
6832   l_asg_number        per_all_assignments_f.assignment_number%type;
6833   CURSOR csr_parameter_info
6834   IS
6835     SELECT to_number(pay_gb_eoy_archive.get_parameter(legislative_parameters, 'PAYROLL_ID')) payroll_id,
6836       SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'TAX_REF'),1,20) tax_ref,
6837       SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'FIRST_FPS'),1,1) first_fps,
6838       effective_date,
6839       business_group_id,
6840       fnd_date.canonical_to_date(SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'FIRST_FPS_DATE'),1,10)) first_fps_date
6841     FROM pay_payroll_actions pact
6842     WHERE payroll_action_id = pactid;
6843 
6844   CURSOR csr_asg(c_asg_id NUMBER, c_effective_date DATE)
6845   IS
6846     SELECT asg.person_id person_id,
6847       trim(asg.primary_flag) asg_primary_flag,
6848       trim(nvl(pap.per_information10,'N')) per_agg_flag,
6849       trim(nvl(pap.per_information9,'N')) ni_agg_flag,
6850       asg.assignment_number
6851     FROM per_all_people_f pap,
6852       per_all_assignments_f asg
6853     WHERE asg.assignment_id       = c_asg_id
6854     AND pap.person_id             = asg.person_id
6855     AND asg.business_group_id     = l_business_group_id
6856     AND c_effective_date BETWEEN asg.effective_start_date AND asg.effective_end_date
6857     AND c_effective_date BETWEEN pap.effective_start_date AND pap.effective_end_date;
6858 
6859   CURSOR csr_get_assignments( pactid NUMBER,
6860                               stperson NUMBER,
6861                               endperson NUMBER,
6862                               p_payroll_id NUMBER,
6863                               p_pre_pact_id NUMBER,
6864                               c_effective_date DATE)
6865   IS
6866     SELECT DISTINCT act.assignment_id assignment_id,
6867           act.assignment_action_id asg_act_id
6868     FROM pay_payroll_actions ppa,  --Current pactid
6869       pay_payroll_actions appa,    --Payroll Run
6870       pay_payroll_actions appa2,   --Prepayments
6871       pay_assignment_actions act,  --Payroll Run
6872       pay_assignment_actions act1, --Prepayments
6873       pay_action_interlocks pai,   --Prepayments
6874       per_all_assignments_f as1
6875     WHERE ppa.payroll_action_id = pactid
6876     AND as1.person_id BETWEEN stperson AND endperson
6877     AND appa.action_type     IN ('R','Q','V','B') -- Payroll Run or Quickpay Run
6878     AND act.payroll_action_id = appa.payroll_action_id
6879     AND act.source_action_id IS NULL
6880     AND as1.assignment_id     = act.assignment_id
6881     AND ppa.effective_date BETWEEN as1.effective_start_date AND as1.effective_end_date
6882     AND act.action_status         = 'C'
6883     AND act.assignment_action_id  = pai.locked_action_id
6884     AND act1.assignment_action_id = pai.locking_action_id
6885     AND act1.action_status        = 'C'
6886     AND act1.payroll_action_id    = appa2.payroll_action_id
6887     AND appa2.action_type        IN ('P','U') -- Prepayments or Quickpay Prepayments
6888     AND (as1.payroll_id           = p_payroll_id
6889     OR p_payroll_id              IS NULL)
6890     AND appa2.payroll_action_id   = p_pre_pact_id
6891     AND exists( select 1
6892                   from pay_pre_payments ppp
6893                  where ASSIGNMENT_ACTION_ID = act1.assignment_action_id
6894                    and ppp.value <> 0)
6895     ORDER BY act.assignment_id;
6896 
6897   l_flag        VARCHAR2(1) :='Y';
6898   l_prev_person NUMBER      :=0;
6899   --
6900   l_effective_date DATE;
6901   l_asg_primary_flag VARCHAR2(1);
6902   l_per_agg_flag     VARCHAR2(1);
6903   l_ni_agg_flag     VARCHAR2(1);
6904   l_pre_pact_id      NUMBER;
6905 
6906 
6907 -- First FPS Cursors
6908 cursor csr_get_prepayment_date(p_pre_pact_id number) is
6909 select EFFECTIVE_DATE from pay_payroll_actions where payroll_action_id = p_pre_pact_id;
6910 
6911 cursor csr_asg_details(p_prepay_id number,p_prepayment_date date) is
6912 select distinct paaf.assignment_id assignment_id,
6913 		  trim(paaf.primary_flag)      asg_primary_flag,
6914       trim(pap.per_information10) per_agg_flag,
6915       pap.person_id
6916      from   per_all_people_f pap,
6917             per_all_assignments_f paaf,
6918 			per_assignment_status_types past,
6919 			pay_payroll_actions paa
6920      where  pap.person_id between stperson and endperson
6921 		 and    paa.payroll_Action_id = p_prepay_id
6922      and    pap.person_id = paaf.person_id
6923 		 and    paaf.assignment_type = 'E'
6924 		 and    paaf.assignment_status_type_id = past.assignment_status_type_id
6925      and    past.per_system_status in ('ACTIVE_ASSIGN', 'SUSP_ASSIGN','TERM_ASSIGN')
6926      and    paaf.business_group_id = paa.business_group_id
6927      and    paaf.payroll_id = paa.payroll_id
6928      and    pap.effective_start_date =
6929        ( select max(pap2.effective_start_date) from
6930 				 per_all_people_f pap2
6931          where  pap2.person_id         = pap.person_id
6932          and    pap2.effective_start_date <= p_prepayment_date
6933        )
6934      and    paaf.effective_start_date =
6935        ( select max(asg2.effective_start_date)
6936          from   per_all_assignments_f asg2
6937          where  asg2.assignment_id         = paaf.assignment_id
6938          and    asg2.assignment_type       = 'E'
6939          and    asg2.effective_start_date <= p_prepayment_date
6940        )
6941 order by pap.person_id;
6942 
6943 -- cursor to check whether this assignment processed in prepayment or not
6944 cursor csr_prepayment_made(pre_pay_id number,p_asg_id number) is
6945 SELECT  paa_pre.assignment_id
6946 FROM    pay_assignment_actions paa_pre
6947       , pay_assignment_actions paa_arcv
6948 WHERE   paa_arcv.assignment_id = p_asg_id
6949 AND     paa_pre.payroll_action_id = pre_pay_id
6950 AND     paa_pre.assignment_id = paa_arcv.assignment_id;
6951 
6952 -- get the defined balance id for specified balance and dimension
6953 cursor get_defined_balance_id
6954     (p_balance_name VARCHAR2, p_dimension_name VARCHAR2) IS
6955 SELECT  defined_balance_id
6956 FROM    pay_defined_balances db
6957       , pay_balance_types b
6958       , pay_balance_dimensions d
6959 WHERE   b.balance_name = p_balance_name
6960 AND     d.dimension_name = p_dimension_name
6961 AND     db.balance_type_id = b.balance_type_id
6962 AND     db.balance_dimension_id = d.balance_dimension_id
6963 AND     b.legislation_code = 'GB'
6964 AND     d.legislation_code = 'GB';
6965 
6966 -- to fetch last assignment action id for the given assignment
6967 cursor csr_last_action(p_asgid NUMBER, p_start_year DATE,p_end_year DATE) IS
6968 SELECT
6969         to_number (substr (max (lpad (paa.action_sequence, 15
6970                                     , '0')
6971                                 || paa.assignment_action_id), 16))
6972       , max (pact.effective_date) effective_date
6973 FROM    pay_assignment_actions paa
6974       , pay_payroll_actions pact
6975       , per_time_periods ptp
6976 WHERE   paa.assignment_id = p_asgid
6977 AND     paa.payroll_action_id = pact.payroll_action_id
6978 AND     pact.payroll_id = l_payroll_id
6979 AND     pact.time_period_id = ptp.time_period_id
6980 AND     pact.action_type IN ('Q', 'R', 'B'
6981                            , 'I', 'V')
6982 AND     paa.action_status IN ('C', 'S')
6983 AND     ptp.regular_payment_date
6984         BETWEEN p_start_year
6985         AND     p_end_year;
6986 
6987   CURSOR csr_aggr_min_act_id( p_person_id NUMBER,
6988                               p_payroll_id NUMBER,
6989                               p_pre_pact_id NUMBER,
6990                               c_effective_date DATE)
6991   IS
6992 
6993     SELECT max (act.assignment_action_id) assignment_id
6994 --    SELECT min (act.assignment_action_id) assignment_id
6995 --    SELECT max (act.assignment_id) assignment_id
6996     FROM pay_payroll_actions ppa,  --Current pactid
6997       pay_payroll_actions appa,    --Payroll Run
6998       pay_payroll_actions appa2,   --Prepayments
6999       pay_assignment_actions act,  --Payroll Run
7000       pay_assignment_actions act1, --Prepayments
7001       pay_action_interlocks pai,   --Prepayments
7002       per_all_assignments_f as1
7003     WHERE as1.person_id = p_person_id --45885
7004     AND appa.action_type     IN ('R','Q','V','B') -- Payroll Run or Quickpay Run
7005     AND act.payroll_action_id = appa.payroll_action_id
7006     AND act.source_action_id IS NULL
7007     AND as1.assignment_id     = act.assignment_id
7008     AND ppa.effective_date BETWEEN as1.effective_start_date AND as1.effective_end_date
7009     AND act.action_status         = 'C'
7010     AND act.assignment_action_id  = pai.locked_action_id
7011     AND act1.assignment_action_id = pai.locking_action_id
7012     AND act1.action_status        = 'C'
7013     AND act1.payroll_action_id    = appa2.payroll_action_id
7014     AND appa2.action_type        IN ('P','U') -- Prepayments or Quickpay Prepayments
7015     AND (as1.payroll_id           = p_payroll_id
7016     OR p_payroll_id              IS NULL)
7017     AND appa2.payroll_action_id   = p_pre_pact_id
7018     AND exists( select 1
7019                   from pay_pre_payments ppp
7020                  where ASSIGNMENT_ACTION_ID = act1.assignment_action_id
7021                    and ppp.value <> 0); --For the bug 16542698
7022 
7023  CURSOR csr_ni_aggr_max_act_id( p_person_id NUMBER,
7024                               p_payroll_id NUMBER,
7025                               p_pre_pact_id NUMBER,
7026                               c_effective_date DATE)
7027   IS
7028 
7029     SELECT max (act.assignment_action_id) assignment_id
7030 --    SELECT max (act.assignment_id) assignment_id
7031     FROM pay_payroll_actions ppa,  --Current pactid
7032       pay_payroll_actions appa,    --Payroll Run
7033       pay_payroll_actions appa2,   --Prepayments
7034       pay_assignment_actions act,  --Payroll Run
7035       pay_assignment_actions act1, --Prepayments
7036       pay_action_interlocks pai,   --Prepayments
7037       per_all_assignments_f as1
7038     WHERE as1.person_id = p_person_id --45885
7039     AND appa.action_type     IN ('R','Q') -- Payroll Run or Quickpay Run
7040     AND act.payroll_action_id = appa.payroll_action_id
7041     AND act.source_action_id IS NULL
7042     AND as1.assignment_id     = act.assignment_id
7043     AND ppa.effective_date BETWEEN as1.effective_start_date AND as1.effective_end_date
7044     AND act.action_status         = 'C'
7045     AND act.assignment_action_id  = pai.locked_action_id
7046     AND act1.assignment_action_id = pai.locking_action_id
7047     AND act1.action_status        = 'C'
7048     AND act1.payroll_action_id    = appa2.payroll_action_id
7049     AND appa2.action_type        IN ('P','U') -- Prepayments or Quickpay Prepayments
7050     AND (as1.payroll_id           = p_payroll_id
7051     OR p_payroll_id              IS NULL)
7052     AND appa2.payroll_action_id   = p_pre_pact_id;
7053 
7054 l_person_id number;
7055 cursor csr_get_other_asg(c_asg_id number) is
7056   select paaf.assignment_id asg_id from per_all_assignments_f paaf where
7057   paaf.person_id = l_person_id
7058   and paaf.assignment_id <> c_asg_id
7059   and l_effective_date between paaf.effective_start_date and paaf.effective_end_date;
7060 
7061 
7062 -- new agg changes
7063 cursor csr_agg_all_asg_act_creat(p_person_id NUMBER,
7064                                 p_asg_id NUMBER,
7065                                 p_asg_act_id NUMBER,
7066                                 p_start_year DATE,
7067                                 p_end_year DATE) is
7068 SELECT
7069         /*    to_number (substr (max (lpad (paa.action_sequence ,15,'0')
7070                                     || paa.assignment_action_id),16)) max_asg_act_id*/
7071            distinct paa.assignment_id
7072 /*           ,max (pact.effective_date) effective_date
7073            ,max(paa1.assignment_action_id)*/
7074     FROM    pay_assignment_actions paa
7075            ,pay_assignment_actions paa1
7076            ,per_all_assignments_f paaf
7077            ,pay_payroll_actions pact
7078            ,pay_payroll_actions pact1
7079            ,per_time_periods ptp
7080            ,pay_action_interlocks pai
7081     WHERE   paa.assignment_id = paaf.assignment_id
7082     AND     paa.assignment_id <> p_asg_id
7083     AND     paaf.person_id = p_person_id
7084     AND     paa.payroll_action_id = pact.payroll_action_id
7085     AND     paa1.payroll_action_id = pact1.payroll_action_id
7086     AND     pai.locked_action_id = paa.assignment_action_id
7087     and     pai.locking_action_id = paa1.assignment_action_id
7088     AND     pact1.action_type IN ('P','U')
7089     AND     pact.time_period_id = ptp.time_period_id
7090     AND     pact.action_type IN ('Q','R','B','I','V')
7091     AND     paa.action_status IN ('C','S')
7092     AND     paa1.action_status IN ('C','S')
7093     AND     ptp.regular_payment_date BETWEEN p_start_year
7094                                      AND     p_end_year
7095     AND     (
7096                     (
7097                             paa.assignment_action_id >
7098                             (
7099                             SELECT  nvl (max (payroll_asg_act_id),paa.assignment_action_id)
7100                             FROM    pay_gb_fps_details pgfd
7101                             WHERE   pgfd.person_id = p_person_id
7102                             )
7103                     AND     paa.source_action_id IS NULL
7104                     )
7105             OR      (
7106                             (
7107                             SELECT  count (*)
7108                             FROM    pay_gb_fps_details pgfd
7109                             WHERE   pgfd.person_id = p_person_id
7110                             ) = 0
7111                     )
7112             )
7113     AND     ptp.regular_payment_date >= nvl (l_first_fps_run_date, l_first_fps_eff_date)
7114     AND     paa.assignment_action_id < p_asg_act_id
7115     AND exists( select 1
7116                   from pay_pre_payments ppp
7117                  where ASSIGNMENT_ACTION_ID = paa1.assignment_action_id
7118                    and ppp.value <> 0)
7119     GROUP BY paa.payroll_action_id,paa.assignment_id ;
7120 --    ORDER BY max_asg_act_id;
7121 
7122 cursor csr_agg_all_actions_lock(p_person_id NUMBER,
7123                                 p_asg_id NUMBER,
7124                                 p_start_year DATE,
7125                                 p_end_year DATE)is
7126 SELECT  /*+ USE_NL(paa, pact, ptp) */
7127          /*   to_number (substr (max (lpad (paa.action_sequence ,15,'0')
7128                                     || paa.assignment_action_id),16)) max_asg_act_id
7129            ,max(paa.assignment_id)
7130            ,max (pact.effective_date) effective_date*/
7131            distinct max(paa1.assignment_action_id) max_pre_act_id
7132     FROM    pay_assignment_actions paa
7133            ,pay_assignment_actions paa1
7134            ,per_all_assignments_f paaf
7135            ,pay_payroll_actions pact
7136            ,pay_payroll_actions pact1
7137            ,per_time_periods ptp
7138            ,pay_action_interlocks pai
7139     WHERE   paa.assignment_id = paaf.assignment_id
7140     AND     paa.assignment_id = p_asg_id
7141     AND     paaf.person_id = p_person_id
7142     AND     paa.payroll_action_id = pact.payroll_action_id
7143     AND     paa1.payroll_action_id = pact1.payroll_action_id
7144     AND     pai.locked_action_id = paa.assignment_action_id
7145     and     pai.locking_action_id = paa1.assignment_action_id
7146     AND     pact1.action_type IN ('P','U')
7147     AND     pact.time_period_id = ptp.time_period_id
7148     AND     pact.action_type IN ('Q','R','B','I','V')
7149     AND     paa.action_status IN ('C','S')
7150     AND     paa1.action_status IN ('C','S')
7151     AND     ptp.regular_payment_date BETWEEN p_start_year
7152                                      AND     p_end_year
7153     AND     (
7154                     (
7155                             paa.assignment_action_id >
7156                             (
7157                             SELECT  nvl (max (payroll_asg_act_id),paa.assignment_action_id)
7158                             FROM    pay_gb_fps_details pgfd
7159                             WHERE   pgfd.person_id = p_person_id
7160 --                            AND pgfd.assignment_id = p_asg_id
7161                             )
7162                     AND     paa.source_action_id IS NULL
7163                     )
7164             OR      (
7165                             (
7166                             SELECT  count (*)
7167                             FROM    pay_gb_fps_details pgfd
7168                             WHERE   pgfd.person_id = p_person_id
7169                             AND pgfd.assignment_id = p_asg_id
7170                             ) = 0
7171                     )
7172             )
7173     AND     ptp.regular_payment_date >= nvl (l_first_fps_run_date, l_first_fps_eff_date)
7174     GROUP BY paa.payroll_action_id
7175     ORDER BY max_pre_act_id;
7176 
7177 cursor chk_processed_in_prepay(c_cur_asg_action_id number) is
7178 select pai.locking_action_id
7179 from
7180 pay_action_interlocks pai,
7181 pay_payroll_actions ppa,
7182 pay_assignment_actions paa
7183 where pai.locked_action_id = c_cur_asg_action_id
7184 and ppa.action_type in ('P','U')
7185 and paa.payroll_action_id = ppa.payroll_action_id
7186 and paa.assignment_action_id = pai.locking_action_id;
7187 
7188 CURSOR csr_prepay_asg_act_details(p_asgid NUMBER, p_pre_pay_id NUMBER)
7189   IS
7190     SELECT paa.assignment_action_id,
7191       ppa.payroll_action_id,
7192       ppa.effective_date
7193     FROM pay_assignment_actions paa,
7194       pay_payroll_actions ppa
7195     WHERE paa.assignment_id   = p_asgid
7196     AND ppa.payroll_action_id = p_pre_pay_id
7197     AND paa.payroll_action_id = ppa.payroll_action_id;
7198 
7199   CURSOR get_first_fps_date(c_payroll_id number)
7200   IS
7201   SELECT max (ppa2.effective_date)
7202                   FROM    pay_payroll_actions ppa2
7203                   WHERE   ppa2.report_qualifier = 'GB'
7204                   AND     ppa2.report_type in ('RTI_FPS_REP','RTI_FPS_REP_13')
7205                   AND     ppa2.action_status = 'C'
7206                   AND     substr (pay_gb_eoy_archive.get_parameter (ppa2.legislative_parameters,'FIRST_FPS'),1,20) = 'Y'
7207                   AND     substr (pay_gb_eoy_archive.get_parameter (ppa2.legislative_parameters,'PAYROLL_ID'),1,20) = c_payroll_id;
7208 
7209     -- Curosr to fetch the RTI Reporting flag and effective date of the assignment
7210    cursor csr_ni_rpt_flag(c_asg_id number) is
7211    select AEI_INFORMATION1, AEI_INFORMATION2 from per_assignment_extra_info where assignment_id = c_asg_id
7212    and AEI_INFORMATION_CATEGORY = 'GB_RTI_AGGREGATION';
7213 
7214    -- Cursor to fetch the RTI NI Reporting assignment for this person.
7215    cursor csr_get_ni_rpt_asg(c_asg_id number) is
7216    select
7217    paei.assignment_id , fnd_date.canonical_to_date(paei.AEI_INFORMATION2)
7218    from per_all_assignments_f paaf1, per_all_assignments_f paaf2 ,per_assignment_extra_info paei
7219    where paaf1.assignment_id = c_asg_id
7220    and paaf1.person_id = paaf2.person_id
7221    and paaf2.ASSIGNMENT_TYPE = 'E'
7222 
7223    and paei.assignment_id = paaf2.assignment_id
7224    and paei.AEI_INFORMATION_CATEGORY = 'GB_RTI_AGGREGATION'
7225    and paei. AEI_INFORMATION1 = 'Y'
7226    and l_effective_date between paaf1.effective_start_date and paaf1.effective_end_date
7227    and l_effective_date between paaf2.effective_start_date and paaf2.effective_end_date
7228    order by 2 desc;
7229 
7230 -- cursor to fetch the prepayment asg_action id for the given payroll asg_action id
7231 cursor csr_ni_prepay_asg_act_details(c_payroll_asg_act_id number) is
7232       select pai.locking_action_id prepay_asg_act_id from
7233 pay_action_interlocks pai,
7234 pay_assignment_actions paa,
7235 pay_payroll_actions ppa
7236 where pai.locked_action_id = c_payroll_asg_act_id
7237 and pai.locking_action_id = paa.assignment_action_id
7238 and paa.action_status in ('C','S')
7239 and ppa.action_type in ('P','U')
7240 and paa.payroll_action_id = ppa.payroll_action_id;
7241 
7242 -- to check whether the given assignment is processed in given prepay payroll_action id
7243 cursor csr_rti_rpt_proc_prepay(c_ni_rpt_asg_id number,c_pre_pay_action_id number) is
7244   select 'Y' from pay_assignment_actions paa,
7245   pay_payroll_actions ppa
7246   where
7247   ppa.payroll_action_id = c_pre_pay_action_id
7248   and ppa.payroll_action_id = paa.payroll_action_id
7249   and paa.assignment_id = c_ni_rpt_asg_id
7250   and ppa.action_type    IN ('P','U')
7251   and paa.action_status  IN ('C','S')
7252     AND exists( select 1
7253                   from pay_pre_payments ppp
7254                  where ASSIGNMENT_ACTION_ID = paa.assignment_action_id
7255                    and ppp.value <> 0); --For the bug 16542698
7256 
7257 CURSOR csr_chk_earlier_processed (c_person_id number, c_cur_asg_action_id number) is
7258  SELECT  count (*)
7259  FROM  pay_gb_fps_details pgfd
7260  WHERE  pgfd.person_id = c_person_id
7261  AND  pgfd.payroll_asg_act_id = c_cur_asg_action_id;
7262 
7263   --Below cursor fetches the latest payroll run details of the current assignment
7264   CURSOR csr_aggr_asgs_processed(p_person_id NUMBER, p_pre_pay_id NUMBER, p_start_year DATE, p_end_year DATE)
7265   IS
7266     SELECT count(distinct paa1.assignment_id)
7267     FROM pay_assignment_actions paa,
7268       per_all_assignments_f paaf,
7269       pay_payroll_actions pact,
7270       per_time_periods ptp,
7271       pay_assignment_actions paa1, --Prepayments
7272       pay_payroll_actions ppa1,    --Prepayments
7273       pay_action_interlocks pai    --Prepayments
7274     WHERE paa.assignment_id = paaf.assignment_id
7275     AND paaf.person_id = p_person_id
7276     AND paa.payroll_action_id = pact.payroll_action_id
7277     AND pact.time_period_id   = ptp.time_period_id
7278     AND pact.action_type     IN ('Q','R','B','I','V')
7279     AND paa.action_status    IN ('C','S')
7280     AND ptp.regular_payment_date BETWEEN p_start_year AND p_end_year
7281     AND ppa1.payroll_action_id    = p_pre_pay_id
7282     AND ppa1.action_type         IN ('P','U')
7283     AND paa1.payroll_action_id    = ppa1.payroll_action_id
7284     AND paa1.assignment_action_id = pai.locking_action_id
7285     AND paa.assignment_action_id  = pai.locked_action_id;
7286 
7287   CURSOR csr_aggr_max_act_id( p_person_id NUMBER)
7288   IS
7289     SELECT max(act.assignment_action_id) assignment_action_id
7290     FROM pay_payroll_actions appa,    --Payroll Run
7291       pay_payroll_actions appa2,   --Prepayments
7292       pay_assignment_actions act,  --Payroll Run
7293       pay_assignment_actions act1, --Prepayments
7294       pay_action_interlocks pai,   --Prepayments
7295       per_all_assignments_f as1,
7296       pay_all_payrolls_f papf ,
7297       hr_soft_coding_keyflex flex
7298     WHERE as1.person_id = p_person_id --58105
7299     AND appa.action_type     IN ('R','Q','V','B') -- Payroll Run or Quickpay Run
7300     AND act.payroll_action_id = appa.payroll_action_id
7301     AND act.source_action_id IS NULL
7302     AND as1.assignment_id     = act.assignment_id
7303     AND act.action_status         = 'C'
7304     AND act.assignment_action_id  = pai.locked_action_id
7305     AND act1.assignment_action_id = pai.locking_action_id
7306     AND act1.action_status        = 'C'
7307     AND act1.payroll_action_id    = appa2.payroll_action_id
7308     AND appa2.action_type        IN ('P','U') -- Prepayments or Quickpay Prepayments
7309     AND appa2.effective_date between g_start_year and l_first_fps_eff_date
7310     AND appa2.effective_date BETWEEN as1.effective_start_date AND as1.effective_end_date
7311     AND papf.payroll_id = as1.payroll_id
7312     AND flex.SOFT_CODING_KEYFLEX_ID = papf.SOFT_CODING_KEYFLEX_ID
7313     AND upper(flex.segment1) = upper(l_tax_ref);
7314 
7315   CURSOR csr_asg_id(c_aggr_max_act_id number)
7316   IS
7317     SELECT assignment_id
7318     FROM pay_assignment_actions
7319     WHERE assignment_action_id = c_aggr_max_act_id;
7320 
7321 -- Declarations for First FPS
7322 l_last_asg_action_id number;
7323 
7324 l_gross number;
7325 l_taxable number;
7326 l_niable number;
7327 l_gross_id number;
7328 l_taxable_id number;
7329 l_niable_id number;
7330 
7331 l_first_fps_prepay_asg varchar2(10);
7332 l_temp_asg_id number;
7333 l_date_soy date;
7334 l_date_eoy date;
7335 l_pre_id number;
7336 l_prepayment_date date;
7337 
7338 l_asg_action_id number;
7339 l_asg_id number;
7340 l_pre_pay_asg_action_id number;
7341 l_last_effective_date date;
7342 l_aggr_max_asg_id number;
7343 l_aggr_min_act_id number;
7344 l_prepay_asg_action_id number;
7345 l_prepay_payroll_action_id number;
7346 l_prepay_effective_date date;
7347 l_cur_asg_pre_pay_act_id number;
7348 l_ni_rpt_asg_id number;
7349 l_ni_rti_flag varchar2(1);
7350 l_ni_rpt_date date;
7351 l_ni_rti_date varchar2(30);
7352 l_ni_prepay_asg_action_id number;
7353 l_rti_ni_proc_flag varchar2(1);
7354 l_ni_aggr_max_act_id number;
7355 l_earlier_processed number;
7356 l_aggr_asgs_processed number;
7357 l_aggr_max_act_id number;
7358 l_latest_first_fps_asg_id number;
7359 l_prev_asg_id number := 0;
7360 l_flag1        VARCHAR2(1) :='Y';
7361 
7362 BEGIN
7363   hr_utility.set_location('Entering: '||l_proc,1);
7364 
7365   OPEN csr_parameter_info;
7366   FETCH csr_parameter_info
7367   INTO l_payroll_id,
7368        l_tax_ref,
7369        l_first_fps,
7370        l_effective_date,
7371        l_business_group_id,
7372        l_first_fps_eff_date;
7373   CLOSE csr_parameter_info;
7374 
7375 
7376   OPEN get_first_fps_date(l_payroll_id);
7377   FETCH get_first_fps_date
7378    INTO l_first_fps_run_date;
7379   CLOSE get_first_fps_date;
7380 
7381   hr_utility.set_location('process start date'||l_start_date,20);
7382   hr_utility.set_location('process end date'||l_end_date,20);
7383   hr_utility.set_location('pactid: '||pactid,20);
7384   hr_utility.set_location('stperson: '||stperson,20);
7385   hr_utility.set_location('endperson: '||endperson,20);
7386   hr_utility.set_location('l_payroll_id: '||l_payroll_id,20);
7387   hr_utility.set_location('l_tax_ref: '||l_tax_ref,20);
7388   hr_utility.set_location('l_effective_date: '||l_effective_date,20);
7389   hr_utility.set_location('l_business_group_id: '||l_business_group_id,20);
7390   hr_utility.set_location('g_start_year: '||g_start_year,20);
7391   hr_utility.set_location('l_first_fps_run_date: '||l_first_fps_run_date,20);
7392   hr_utility.set_location('l_first_fps_eff_date: '||l_first_fps_eff_date,20);
7393 
7394   PAY_GB_P11D_ARCHIVE_SS.get_parameters( p_payroll_action_id => pactid,
7395                                          p_token_name => 'PRE_PAY_ID',
7396                                          p_token_value => l_pre_pact_id);
7397 
7398   hr_utility.trace(' Payroll  : '||l_payroll_id);
7399   hr_utility.trace(' Pre Payment Payroll_Action_ID Entered : '||to_number(l_pre_pact_id));
7400 
7401   IF l_effective_date >= to_date('06-04-'||SUBSTR(TO_CHAR(l_effective_date,'YYYY/MON/DD'),1,4),'DD-MM-YYYY' ) THEN
7402     g_start_year      := to_date('06-04-'||SUBSTR(TO_CHAR(l_effective_date,'YYYY/MON/DD'),1,4),'DD-MM-YYYY' ) ;
7403     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') ;
7404   ELSE
7405     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') ;
7406     g_end_year   := to_date('05-04-'||SUBSTR(TO_CHAR(l_effective_date,'YYYY/MON/DD'),1,4),'DD-MM-YYYY') ;
7407   END IF;
7408 
7409 --  hr_utility.set_location('Before csr_get_assignments cursor',10);
7410   hr_utility.set_location('pactid :' || pactid,15);
7411   hr_utility.set_location('stperson :' || stperson,15);
7412   hr_utility.set_location('endperson :' || endperson,15);
7413   hr_utility.set_location('l_payroll_id :' || l_payroll_id,15);
7414   hr_utility.set_location('l_pre_pact_id :' || l_pre_pact_id,15);
7415   hr_utility.set_location('l_effective_date :' || l_effective_date,15);
7416 
7417 l_pre_id := to_number(l_pre_pact_id);
7418 
7419   hr_utility.set_location('l_first_fps    : '||l_first_fps,20);
7420 if l_first_fps = 'Y' then
7421 
7422 open csr_get_prepayment_date(l_pre_id);
7423 fetch csr_get_prepayment_date into l_prepayment_date;
7424 close csr_get_prepayment_date;
7425 
7426 FOR asg_record IN csr_asg_details(l_pre_pact_id,l_prepayment_date)
7427 LOOP
7428 l_flag := 'Y';
7429 
7430 --PAYE Aggr logic starts here
7431 /* Below code is to filter out PAYE Aggregated employees as part of First FPS processing logic
7432 if they have any of the assignments processed in current prepayment request id.
7433 That means this employee would be processed in main PAYE Aggregated code itself.
7434 Hence, skip the action creation in First FPS logic. */
7435 
7436 l_aggr_asgs_processed := 0;
7437 IF asg_record.per_agg_flag  = 'Y' THEN
7438         hr_utility.trace('PAYE Aggregated Assignment');
7439 
7440         OPEN csr_aggr_asgs_processed(asg_record.person_id, l_pre_pact_id, g_start_year, g_end_year);
7441         FETCH csr_aggr_asgs_processed
7442         INTO l_aggr_asgs_processed;
7443 
7444         hr_utility.trace('l_aggr_asgs_processed:' ||l_aggr_asgs_processed);
7445 
7446         CLOSE csr_aggr_asgs_processed;
7447 
7448         IF l_aggr_asgs_processed > 0 THEN
7449                 l_flag:= 'N';
7450                 hr_utility.trace('There is a payment made for one of his asgs in current prepayment request');
7451 
7452         ELSIF l_aggr_asgs_processed = 0 THEN  --l_aggr_asgs_processed > 0 THEN
7453 
7454                 OPEN csr_aggr_max_act_id(asg_record.person_id);
7455                 FETCH csr_aggr_max_act_id
7456                 INTO l_aggr_max_act_id;
7457                 CLOSE csr_aggr_max_act_id;
7458 
7459                 hr_utility.set_location('l_aggr_max_act_id    : '||l_aggr_max_act_id,20);
7460 
7461                 OPEN csr_asg_id(l_aggr_max_act_id);
7462                 FETCH csr_asg_id
7463                 INTO l_latest_first_fps_asg_id;
7464                 CLOSE csr_asg_id;
7465 
7466                 hr_utility.set_location('l_latest_first_fps_asg_id    : '||l_latest_first_fps_asg_id,20);
7467                 hr_utility.set_location('asg_record.assignment_id    : '||asg_record.assignment_id,20);
7468 
7469                 IF (nvl(l_latest_first_fps_asg_id,-999) <> asg_record.assignment_id) THEN
7470                 l_flag:= 'N';
7471                 END IF;
7472 
7473         END IF;  --l_aggr_asgs_processed > 0 THEN
7474 
7475 END IF;  --IF asg_record.per_agg_flag  = 'Y' THEN
7476 hr_utility.set_location('l_flag: '||l_flag,20);
7477 --PAYE Aggr logic ends here
7478 
7479 if (l_flag = 'Y') then
7480 
7481 -- Added to check YTD balances
7482 open csr_prepayment_made(l_pre_pact_id,asg_record.assignment_id);
7483 fetch csr_prepayment_made into l_temp_asg_id;
7484 if csr_prepayment_made%found then
7485 	l_first_fps_prepay_asg := 'Y';
7486 else
7487   l_first_fps_prepay_asg := 'N';
7488 end if;
7489 close csr_prepayment_made;
7490 
7491 	hr_utility.trace(asg_record.assignment_id||' First FPS Pre Pay Asg : '||l_first_fps_prepay_asg );
7492 
7493 if l_first_fps_prepay_asg = 'N' then
7494 
7495 hr_utility.trace(asg_record.assignment_id||'Entering First FPS Logic');
7496 
7497     OPEN get_defined_balance_id('Gross Pay','_ASG_TD_YTD');
7498     FETCH get_defined_balance_id INTO l_gross_id;
7499     CLOSE get_defined_balance_id;
7500 
7501     OPEN get_defined_balance_id('Taxable Pay','_ASG_TD_YTD');
7502     FETCH get_defined_balance_id INTO l_taxable_id;
7503     CLOSE get_defined_balance_id;
7504 
7505     OPEN get_defined_balance_id('NIable Pay','_ASG_TD_YTD');
7506     FETCH get_defined_balance_id INTO l_niable_id;
7507     CLOSE get_defined_balance_id;
7508 
7509 l_effective_date := l_prepayment_date;
7510 
7511 -- Tax Year Start and End
7512       If l_effective_date >= to_date('06-04-'||substr(to_char(l_effective_date,'YYYY/MON/DD'),1,4),'DD-MM-YYYY' ) Then
7513          l_date_soy := to_date('06-04-'||substr(to_char(l_effective_date,'YYYY/MON/DD'),1,4),'DD-MM-YYYY' ) ;
7514          l_date_eoy := to_date('05-04-'||to_char(to_number(substr(to_char(l_effective_date,'YYYY/MON/DD'),1,4))+1 ),'DD-MM-YYYY')  ;
7515       Else
7516          l_date_soy := to_date('06-04-'||to_char(to_number(substr(to_char(l_effective_date,'YYYY/MON/DD'),1,4))-1 ),'DD-MM-YYYY')  ;
7517          l_date_eoy := to_date('05-04-'||substr(to_char(l_effective_date,'YYYY/MON/DD'),1,4),'DD-MM-YYYY') ;
7518       End If;
7519 
7520 -- To get latest assignment action id for the assignment
7521 OPEN csr_last_action(asg_record.assignment_id,l_date_soy,l_prepayment_date);
7522 FETCH csr_last_action INTO  l_last_asg_action_id,l_last_effective_date;
7523 
7524 -- If there are no assignment action ids, no payment has been made for the assignment
7525 -- This assignment will not be archived.
7526 IF l_last_asg_action_id is null then
7527    fnd_file.put_line (fnd_file.LOG,'No Payment has been made for assignment ' || asg_record.assignment_id|| '.');
7528    l_flag:= 'N';
7529 end if;
7530 CLOSE csr_last_action;
7531 
7532 -- Fetching balances
7533   IF l_last_asg_action_id IS NOT NULL THEN
7534       l_gross   := pay_balance_pkg.get_value(l_gross_id,l_last_asg_action_id);
7535       IF l_gross <= 0 THEN
7536 			l_taxable   := pay_balance_pkg.get_value(l_taxable_id,l_last_asg_action_id);
7537       END IF;
7538 
7539 			IF l_taxable <= 0 THEN
7540 			l_niable   := pay_balance_pkg.get_value(l_niable_id,l_last_asg_action_id);
7541       end if;
7542   END IF;
7543 
7544  IF l_gross > 0 or l_taxable > 0 or l_niable > 0 THEN
7545     hr_utility.trace('Assignment '||asg_record.assignment_id||' has YTD values');
7546  ELSE
7547     hr_utility.trace('Assignment '||asg_record.assignment_id||' has No YTD values.');
7548     l_flag:= 'N';
7549  END IF;
7550 
7551 end if;
7552 end if; --if (l_flag = 'Y') then
7553 
7554 if l_flag = 'Y' and l_first_fps_prepay_asg = 'N' Then
7555      SELECT pay_assignment_actions_s.nextval INTO lockingactid FROM dual;
7556       -- Insert assignment into pay_assignment_actions
7557       hr_nonrun_asact.insact ( lockingactid, asg_record.assignment_id, pactid, chunk, NULL );
7558 End if;
7559 
7560 END LOOP;
7561 end if; -- First FPS logic ends
7562 --else
7563   hr_utility.set_location('Before csr_get_assignments cursor',10);
7564   FOR asg_rec IN csr_get_assignments (pactid, stperson, endperson, l_payroll_id, l_pre_pact_id, l_effective_date)
7565   LOOP
7566     hr_utility.set_location('Assignment ID :' || asg_rec.assignment_id,15);
7567     l_flag1 := 'Y'; --Added for Bug - 16345058
7568 --Ignore the same assignment ids (Prepayment would have processed same assignment's payroll, Quickpay)
7569     if l_prev_asg_id = asg_rec.assignment_id then
7570 			l_flag1 := 'N';
7571     else
7572 			l_prev_asg_id := asg_rec.assignment_id;
7573     end if;
7574 
7575     l_arch := false;
7576     --     hr_utility.set_location('Before CSR_ASG cursor l_effective_date '|| to_char(l_effective_date),10);
7577     hr_utility.set_location('Before CSR_ASG cursor',10);
7578 
7579     OPEN csr_asg(asg_rec.assignment_id, l_effective_date);
7580     FETCH csr_asg INTO l_person_id, l_asg_primary_flag, l_per_agg_flag,l_ni_agg_flag,l_asg_number;
7581     CLOSE csr_asg;
7582 
7583     hr_utility.set_location('l_person_id :' || l_person_id,20);
7584     hr_utility.set_location('l_asg_primary_flag :' || l_asg_primary_flag,20);
7585     hr_utility.set_location('l_per_agg_flag :' || l_per_agg_flag,20);
7586     hr_utility.set_location('l_ni_agg_flag :' || l_ni_agg_flag,20);
7587     hr_utility.set_location('l_payroll_id :' || l_payroll_id,20);
7588     hr_utility.set_location('l_pre_pact_id :' || l_pre_pact_id,20);
7589     hr_utility.set_location('l_effective_date :' || l_effective_date,20);
7590 
7591     hr_utility.set_location('Assignment ID :' || asg_rec.assignment_id,20);
7592     l_arch := false;
7593     -- If Aggregate flag is set then ignore non primary assignments
7594 IF l_per_agg_flag        = 'Y' and l_flag1 = 'Y' THEN
7595 
7596     OPEN csr_aggr_min_act_id (l_person_id, l_payroll_id, l_pre_pact_id, l_effective_date);
7597     FETCH csr_aggr_min_act_id INTO l_aggr_min_act_id;
7598     CLOSE csr_aggr_min_act_id;
7599 
7600     l_earlier_processed := 0;
7601     OPEN csr_chk_earlier_processed(l_person_id, asg_rec.asg_act_id);
7602     FETCH csr_chk_earlier_processed
7603     INTO l_earlier_processed;
7604     CLOSE csr_chk_earlier_processed;
7605 
7606     hr_utility.set_location('asg_rec.asg_act_id: '||asg_rec.asg_act_id, 50);
7607     hr_utility.set_location('l_earlier_processed :' || l_earlier_processed,20);
7608     hr_utility.set_location('l_aggr_min_act_id :' || l_aggr_min_act_id,20);
7609 
7610 if ((asg_rec.asg_act_id = l_aggr_min_act_id) and (l_earlier_processed = 0)) then
7611       hr_utility.set_location('Creating Assignment Action for assignment_id '||asg_rec.assignment_id, 50);
7612 
7613       SELECT pay_assignment_actions_s.nextval INTO lockingactid FROM dual;
7614       hr_nonrun_asact.insact ( lockingactid, asg_rec.assignment_id, pactid, chunk, NULL );
7615  -- get the assigment action id of the prepayment payroll action id for the current assignment.
7616     OPEN csr_prepay_asg_act_details(asg_rec.assignment_id, l_pre_pact_id);
7617     FETCH csr_prepay_asg_act_details
7618     INTO l_prepay_asg_action_id,
7619       l_prepay_payroll_action_id,
7620       l_prepay_effective_date;
7621     CLOSE csr_prepay_asg_act_details;
7622 
7623 -- apply lock
7624         hr_nonrun_asact.insint(lockingactid, l_prepay_asg_action_id);
7625 
7626      hr_utility.set_location('Creating other Assignment Action ids for assignment_id '||asg_rec.assignment_id, 50);
7627 
7628 /*for c_asg in csr_get_other_asg(asg_rec.assignment_id)
7629 loop*/
7630   /*    SELECT pay_assignment_actions_s.nextval INTO lockingactid FROM dual;
7631      hr_utility.set_location('Creating action for asg '||c_asg.asg_id, 50);
7632       hr_nonrun_asact.insact(lockingactid, c_asg.asg_id, pactid, chunk, NULL );
7633      hr_utility.set_location('Created action for asg '||c_asg.asg_id, 50);*/
7634 
7635    hr_utility.set_location('l_person_id:'||l_person_id || ' asg_rec.assignment_id:' ||
7636    asg_rec.assignment_id ||  ' g_start_year: ' || g_start_year ,50);
7637    hr_utility.set_location(' g_end_year: ' || g_end_year || ' g_first_fps_run_date: '||l_first_fps_run_date, 50);
7638    hr_utility.set_location('asg_rec.assignment_id '||asg_rec.assignment_id, 50);
7639 --     OPEN csr_agg_all_asg_act_creat(l_person_id, asg_rec.assignment_id, g_start_year, g_end_year);
7640      OPEN csr_agg_all_asg_act_creat(l_person_id, asg_rec.assignment_id, asg_rec.asg_act_id, g_start_year, g_end_year);
7641      loop
7642       FETCH csr_agg_all_asg_act_creat
7643       INTO l_asg_id;
7644 
7645        EXIT WHEN csr_agg_all_asg_act_creat%NOTFOUND;
7646        SELECT pay_assignment_actions_s.nextval INTO lockingactid FROM dual;
7647        hr_utility.set_location('Creating action for asg '||l_asg_id, 50);
7648        hr_nonrun_asact.insact(lockingactid, l_asg_id, pactid, chunk, NULL );
7649        hr_utility.set_location('Created action for asg '||l_asg_id, 50);
7650 
7651         -- new changes
7652        open csr_agg_all_actions_lock(l_person_id, l_asg_id, g_start_year, g_end_year);
7653 
7654           loop
7655 
7656 		       FETCH csr_agg_all_actions_lock
7657 --      INTO l_asg_action_id,
7658 --           l_asg_id,
7659 --           l_last_effective_date,
7660 INTO           l_pre_pay_asg_action_id;
7661            EXIT WHEN csr_agg_all_actions_lock%NOTFOUND;
7662         -- Apply lock
7663 
7664        hr_utility.set_location('lockingactid '||lockingactid, 50);
7665        hr_utility.set_location('l_pre_pay_asg_action_id '||l_pre_pay_asg_action_id, 50);
7666        hr_nonrun_asact.insint(lockingactid, l_pre_pay_asg_action_id);
7667 
7668          end loop;
7669         close csr_agg_all_actions_lock;
7670      end loop;
7671      close csr_agg_all_asg_act_creat;
7672 
7673         /*open chk_processed_in_prepay(l_cur_asg_action_id);
7674         fetch chk_processed_in_prepay into l_cur_asg_pre_pay_act_id;
7675         close chk_processed_in_prepay;*/
7676 -- lock
7677        -- hr_nonrun_asact.insint(lockingactid, l_cur_asg_pre_pay_act_id);
7678 
7679 /*end loop;*/
7680 
7681 -- end get the other assigment ids for this person.
7682 
7683 else
7684       hr_utility.set_location('Another higher assignment for current employee exists.', 50);
7685       hr_utility.set_location('Hence, not creating assignment action for the current assignment: '||asg_rec.assignment_id, 50);
7686 end if;
7687 
7688 ELSIF l_flag1 = 'Y' THEN
7689       -- Create one assignment action for every assignment
7690       hr_utility.set_location('Archiving for assignment_id '||asg_rec.assignment_id, 50);
7691       SELECT pay_assignment_actions_s.nextval INTO lockingactid FROM dual;
7692 
7693       -- Insert assignment into pay_assignment_actions
7694       hr_nonrun_asact.insact ( lockingactid, asg_rec.assignment_id, pactid, chunk, NULL );
7695  -- get the assigment action id of the prepayment payroll action id for the current assignment.
7696     OPEN csr_prepay_asg_act_details(asg_rec.assignment_id, l_pre_pact_id);
7697     FETCH csr_prepay_asg_act_details
7698     INTO l_prepay_asg_action_id,
7699       l_prepay_payroll_action_id,
7700       l_prepay_effective_date;
7701   --apply the lock
7702       hr_nonrun_asact.insint(lockingactid, l_prepay_asg_action_id);
7703     CLOSE csr_prepay_asg_act_details;
7704       if l_ni_agg_flag = 'Y' then
7705          hr_utility.set_location('This is NI aggregation case ', 50);
7706          -- Get the RTI NI Reporting asg and effective date.
7707          open csr_ni_rpt_flag(asg_rec.assignment_id);
7708          fetch csr_ni_rpt_flag into l_ni_rti_flag,l_ni_rti_date;
7709          close csr_ni_rpt_flag;
7710          hr_utility.set_location('l_ni_rti_flag: ' || l_ni_rti_flag, 50);
7711          hr_utility.set_location('l_ni_rti_date: ' || l_ni_rti_date, 50);
7712          if nvl(l_ni_rti_flag,'N') <> 'Y' then
7713                  hr_utility.set_location('non RTI reporting assigment' || l_ni_rti_date, 50);
7714                  open csr_get_ni_rpt_asg(asg_rec.assignment_id);
7715                  fetch csr_get_ni_rpt_asg into l_ni_rpt_asg_id,l_ni_rpt_date;
7716                  close csr_get_ni_rpt_asg;
7717                  hr_utility.set_location('l_ni_rpt_asg_id: ' || l_ni_rpt_asg_id, 50);
7718                  hr_utility.set_location('l_ni_rpt_date: ' || l_ni_rpt_date, 50);
7719 
7720                  if l_ni_rpt_asg_id is null then
7721                       	hr_utility.set_location('NO RTI Reporting asg for :'|| l_asg_number, 50);
7722 						fnd_file.put_line (fnd_file.LOG,'NO RTI Reporting asg for :'|| l_asg_number);
7723                       --raise_application_error(-20001,'NO RTI Reporting asg for :'|| asg_rec.assignment_id);
7724                  else
7725                        -- check whether the RTI reporting is being processed in the current assignment.
7726                          open csr_rti_rpt_proc_prepay(l_ni_rpt_asg_id,l_pre_pact_id);
7727                          fetch csr_rti_rpt_proc_prepay into l_rti_ni_proc_flag;
7728                          close csr_rti_rpt_proc_prepay;
7729 
7730                          OPEN csr_ni_aggr_max_act_id (l_person_id, l_payroll_id, l_pre_pact_id, l_effective_date);
7731                          FETCH csr_ni_aggr_max_act_id INTO l_ni_aggr_max_act_id;
7732                          CLOSE csr_ni_aggr_max_act_id;
7733 
7734                          if nvl(l_rti_ni_proc_flag,'N') <> 'Y' and asg_rec.asg_act_id = l_ni_aggr_max_act_id then
7735                             SELECT pay_assignment_actions_s.nextval INTO lockingactid FROM dual;
7736                            -- Insert assignment into pay_assignment_actions
7737                              hr_nonrun_asact.insact ( lockingactid, l_ni_rpt_asg_id, pactid, chunk, NULL );
7738 /*                            -- get the assigment action id of the prepayment payroll action id for the current assignment.
7739                              OPEN csr_ni_prepay_asg_act_details(asg_rec.asg_act_id);
7740                              FETCH csr_ni_prepay_asg_act_details
7741                              INTO l_ni_prepay_asg_action_id;
7742                              CLOSE csr_ni_prepay_asg_act_details;
7743                             hr_utility.trace('l_ni_prepay_asg_action_id: '|| l_ni_prepay_asg_action_id);
7744                             --apply the lock
7745                              if l_ni_prepay_asg_action_id is not null then
7746                                  hr_utility.trace('lockingactid: '||lockingactid);
7747                                  hr_utility.trace('l_ni_prepay_asg_action_id: '|| l_ni_prepay_asg_action_id);
7748                                  hr_nonrun_asact.insint(lockingactid, l_ni_prepay_asg_action_id);
7749                              else
7750                                  hr_utility.trace('No prepayment for asg_id : '|| );
7751 */
7752                          end if;
7753 
7754                  end if;
7755          else
7756               hr_utility.set_location('Current assignment - ' || asg_rec.assignment_id || ' is RTI NI Reporting assignment.',50);
7757               -- proceed with next assignment
7758          end if;
7759       end if;
7760 
7761 END IF; -- IF l_per_agg_flag        = 'Y' THEN
7762 
7763   END LOOP;
7764 --end if;
7765   hr_utility.set_location('Leaving: '||l_proc,999);
7766 END internal_action_creation_fps;
7767 --
7768 --
7769 --
7770 /*--------------------------------------------------------------------------
7771 Name      : action_creation
7772 Purpose   : This creates the assignment actions for a specific chunk.
7773 Arguments :
7774 Notes     :
7775 --------------------------------------------------------------------------*/
7776 PROCEDURE rti_fps_action_creation(
7777     pactid    IN NUMBER,
7778     stperson  IN NUMBER,
7779     endperson IN NUMBER,
7780     chunk     IN NUMBER)
7781 IS
7782 BEGIN
7783   internal_action_creation_fps(pactid, stperson, endperson, chunk,'GB_RTI_FPS', 'RTI_FPS_REP');
7784 END rti_fps_action_creation;
7785 ---
7786 ---
7787 PROCEDURE reset_flag(
7788     p_type            VARCHAR2,
7789     p_reset_flag_type VARCHAR2,
7790     p_assact          NUMBER)
7791 IS
7792   l_proc CONSTANT VARCHAR2(50):= g_package||'reset_flag';
7793 
7794   CURSOR csr_aei_starter_details
7795   IS
7796     SELECT aei.assignment_extra_info_id,
7797       aei.object_version_number,
7798       aei.aei_information8
7799     FROM pay_assignment_actions paa,
7800       per_assignment_extra_info aei
7801     WHERE paa.assignment_action_id = p_assact
7802     AND aei.assignment_id          = paa.assignment_id
7803     AND aei.information_type       = p_type;
7804 
7805   CURSOR csr_aei_pensioner_details
7806   IS
7807     SELECT aei.assignment_extra_info_id,
7808       aei.object_version_number,
7809       aei.aei_information9
7810     FROM pay_assignment_actions paa,
7811       per_assignment_extra_info aei
7812     WHERE paa.assignment_action_id = p_assact
7813     AND aei.assignment_id          = paa.assignment_id
7814     AND aei.information_type       = p_type;
7815 
7816   CURSOR csr_aei_expat_details
7817   IS
7818     SELECT aei.assignment_extra_info_id,
7819       aei.object_version_number,
7820       aei.aei_information19
7821     FROM pay_assignment_actions paa,
7822       per_assignment_extra_info aei
7823     WHERE paa.assignment_action_id = p_assact
7824     AND aei.assignment_id          = paa.assignment_id
7825     AND aei.information_type       = p_type;
7826 
7827   l_aei_starter_rec csr_aei_starter_details%rowtype;
7828   l_aei_pensioner_rec csr_aei_pensioner_details%rowtype;
7829   l_aei_expat_rec csr_aei_expat_details%rowtype;
7830   l_ovn        NUMBER;
7831   l_reset_flag VARCHAR2(30);
7832 
7833 BEGIN
7834   IF p_reset_flag_type = 'STARTER' THEN
7835 
7836     OPEN csr_aei_starter_details;
7837     FETCH csr_aei_starter_details INTO l_aei_starter_rec;
7838     CLOSE csr_aei_starter_details;
7839 
7840     IF l_aei_starter_rec.aei_information8 = 'Y' THEN
7841       hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false,
7842                                                                  p_object_version_number => l_ovn,
7843                                                                  p_assignment_extra_info_id => l_aei_starter_rec.assignment_extra_info_id,
7844                                                                  p_aei_information_category => p_type,
7845                                                                  p_aei_information8 => 'N');
7846     END IF;
7847   END IF;
7848 
7849   IF p_reset_flag_type = 'PENSIONER' THEN
7850 
7851     OPEN csr_aei_pensioner_details;
7852     FETCH csr_aei_pensioner_details INTO l_aei_pensioner_rec;
7853     CLOSE csr_aei_pensioner_details;
7854 
7855     IF l_aei_pensioner_rec.aei_information9 = 'Y' THEN
7856       hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false,
7857                                                                  p_object_version_number => l_ovn,
7858                                                                  p_assignment_extra_info_id => l_aei_pensioner_rec.assignment_extra_info_id,
7859                                                                  p_aei_information_category => p_type,
7860                                                                  p_aei_information9 => 'N');
7861     END IF;
7862   END IF;
7863 
7864   IF p_reset_flag_type = 'EXPAT' THEN
7865 
7866     OPEN csr_aei_expat_details;
7867     FETCH csr_aei_expat_details INTO l_aei_expat_rec;
7868     CLOSE csr_aei_expat_details;
7869 
7870     IF l_aei_expat_rec.aei_information19 = 'Y' THEN
7871       hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false,
7872                                                                  p_object_version_number => l_ovn,
7873                                                                  p_assignment_extra_info_id => l_aei_expat_rec.assignment_extra_info_id,
7874                                                                  p_aei_information_category => p_type,
7875                                                                  p_aei_information19 => 'N');
7876     END IF;
7877   END IF;
7878 END;
7879 
7880 /*--------------------------------------------------------------------------
7881 Name      : archinit
7882 Purpose   : This procedure can be used to perform an initialisation
7883 section and validation of Employer details
7884 Arguments :
7885 Notes     :
7886 --------------------------------------------------------------------------*/
7887 PROCEDURE archinit(
7888     p_payroll_action_id IN NUMBER)
7889 IS
7890   error_found EXCEPTION;
7891   l_proc CONSTANT VARCHAR2(50) := g_package || ' archinit';
7892   l_sender_id hr_organization_information.org_information11%TYPE;
7893   l_tax_ref hr_organization_information.org_information1%TYPE;
7894   l_tax_dist hr_organization_information.org_information2%TYPE;
7895   l_employer_addr VARCHAR2(255);
7896   l_employer_name VARCHAR2(150);
7897   l_err           BOOLEAN;
7898   l_exp           EXCEPTION;
7899   l_rep_typ       VARCHAR2(100);
7900   l_effective_date DATE;
7901 
7902 
7903   CURSOR csr_parameter_info(p_payroll_action_id NUMBER)
7904   IS
7905     SELECT effective_date,
7906            business_group_id,
7907            SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'PRE_PAY_ID'),1,20) pre_pay_id,
7908            SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'PAYROLL_ID'),1,20) payroll_id,
7909            SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'TAX_REF'),1,20) tax_ref,
7910            SUBSTR(pay_gb_eoy_archive.get_parameter (legislative_parameters, 'FIRST_FPS'), 1,1) first_fps
7911 
7912     FROM pay_payroll_actions
7913     WHERE payroll_action_id = p_payroll_action_id;
7914 
7915   cursor csr_prepayment_date(pre_pay_id number)
7916   is
7917     SELECT
7918       ppa.effective_date
7919     FROM
7920       pay_payroll_actions ppa
7921     WHERE
7922      ppa.payroll_action_id = pre_pay_id;
7923 
7924   CURSOR csr_pre_pact_eff_date(p_payroll_action_id NUMBER)
7925   IS
7926     SELECT effective_date
7927     FROM pay_payroll_actions
7928     WHERE payroll_action_id = p_payroll_action_id;
7929 
7930   CURSOR csr_payroll_details(pactid NUMBER)
7931   IS
7932     SELECT NVL(UPPER(hoi.org_information11),' ') sender_id,
7933       DECODE(SUBSTR(pact.legislative_parameters,instr(pact.legislative_parameters,'TEST=') + 5,1) ,'N',' ','Y','1') test_indicator,
7934       fnd_number.number_to_canonical(pact.request_id) request_id,
7935       NVL(upper(SUBSTR(ltrim(hoi.org_information3),1,35)),' ') employer_name,
7936       NVL(upper(SUBSTR(ltrim(SUBSTR(hoi.org_information1,4,11),'/'),1,10)),' ') tax_ref_no,
7937       lpad(NVL(SUBSTR(hoi.org_information1,1,3),' '),3,0) tax_office_no,
7938       DECODE(PAY_GB_EOY_MAGTAPE.get_payroll_version, ' ', '0', PAY_GB_EOY_MAGTAPE.get_payroll_version) payroll_ver,
7939       NVL(upper(SUBSTR(hoi.org_information6,1,13)),' ') acc_ref_no,
7940       report_type
7941     FROM pay_payroll_actions pact,
7942       hr_organization_information hoi
7943     WHERE pact.payroll_action_id        =pactid
7944     AND pact.business_group_id          = hoi.organization_id
7945     AND hoi.org_information_context     = 'Tax Details References'
7946     AND NVL(hoi.org_information10,'UK') = 'UK'
7947     AND SUBSTR(pact.legislative_parameters,instr(pact.legislative_parameters,'TAX_REF=') + 8, instr(pact.legislative_parameters
7948       ||' ',' ', instr(pact.legislative_parameters,'TAX_REF=')                           +8) - instr(pact.legislative_parameters, 'TAX_REF=') - 8) = hoi.org_information1;
7949 
7950   CURSOR csr_ni_details
7951   IS
7952     SELECT petf.element_type_id,
7953       input_value_id
7954     FROM pay_element_types_f petf,
7955       pay_input_values_f pivf
7956     WHERE petf.element_name   = 'NI'
7957     AND petf.element_type_id  = pivf.element_type_id
7958     AND pivf.name             = 'Process Type'
7959     AND petf.legislation_code = 'GB'
7960     AND pivf.legislation_code = 'GB'
7961     AND l_effective_date BETWEEN petf.effective_start_date AND petf.effective_end_date
7962     AND l_effective_date BETWEEN pivf.effective_start_date AND pivf.effective_end_date;
7963 
7964   CURSOR get_defined_balance_id
7965   IS
7966     SELECT b.balance_name balance_name,
7967       b.balance_type_id balance_type_id,
7968       d.database_item_suffix database_item_suffix,
7969       d.balance_dimension_id balance_dimension_id,
7970       db.defined_balance_id defined_balance_id
7971     FROM pay_defined_balances db,
7972       pay_balance_types b,
7973       pay_balance_dimensions d
7974     WHERE db.balance_type_id     = b.balance_type_id
7975     AND db.balance_dimension_id  = d.balance_dimension_id
7976     AND ((d.database_item_suffix = '_ASG_TD_YTD'
7977     AND b.balance_name          IN ('Taxable Pay','PAYE','Student Loan','SSP Total',
7978                                     'SMP Total','SPP Adoption Total', 'SPP Birth Total','SAP Total',
7979                                     'ASPP Adoption Total','ASPP Birth Total','Pre Tax Pension Contributions',
7980                                     'Post Tax Pension Contributions',
7981                                     'Earnings Free of Tax','Earnings Free of NI','Earnings Free of Tax and NI',
7982                                     'Benefits Taxed Through Payroll Subject to NIC Earnings',
7983                                     'Benefits Taxed Through Payroll NOT Subject to NIC Earnings',
7984                                     'Benefits Taxed Through Payroll Subject to NIC Information',
7985                                     'Benefits Taxed Through Payroll NOT Subject to NIC Information', 'NI Employer',
7986                                      'Total Direct Payments'))
7987     OR(d.database_item_suffix    = '_ASG_RUN'
7988     AND b.balance_name          IN ('Taxable Pay', 'Student Loan', 'PAYE', 'Pre Tax Pension Contributions',
7989                                     'Post Tax Pension Contributions','NIC able Benefits',
7990                                     'Earnings Free of Tax','Earnings Free of NI','Earnings Free of Tax and NI',
7991                                     'Benefits Taxed Through Payroll Subject to NIC Earnings',
7992                                     'Benefits Taxed Through Payroll NOT Subject to NIC Earnings',
7993                                     'Benefits Taxed Through Payroll Subject to NIC Information',
7994                                     'Benefits Taxed Through Payroll NOT Subject to NIC Information',
7995                                     'Gross Pay', 'Total Deductions', 'NI Employer',
7996                                      'Total Direct Payments','SSP Total',
7997                                     'SMP Total','SPP Adoption Total', 'SAP Total',
7998                                     'ASPP Adoption Total','ASPP Birth Total','Pre Tax Deductions'
7999                                      ,'NIable Deductions Free of Tax'))
8000 /*
8001       OR(d.database_item_suffix    = '_ASG_PROC_PTD'
8002     AND b.balance_name          IN ('Court Order','Court Order Non Priority'))
8003 */
8004       OR(d.database_item_suffix    = '_PER_TD_YTD'
8005     AND b.balance_name          IN ('Taxable Pay', 'Student Loan', 'NI Employer', 'Earnings Free of Tax',
8006                                     'Earnings Free of NI', 'SSP Total', 'SMP Total', 'SPP Adoption Total',
8007                                     'SPP Birth Total', 'SAP Total', 'ASPP Adoption Total', 'ASPP Birth Total'))
8008 
8009       OR(d.database_item_suffix    = '_PER_TD_CPE_YTD'
8010     AND b.balance_name          IN ('PAYE')))
8011     AND b.legislation_code = 'GB'
8012     AND d.legislation_code = 'GB'
8013     AND db.legislation_code = 'GB';
8014 
8015   CURSOR get_aggr_defined_balance_id
8016   IS
8017     SELECT b.balance_name balance_name,
8018       b.balance_type_id balance_type_id,
8019       d.database_item_suffix database_item_suffix,
8020       d.balance_dimension_id balance_dimension_id,
8021       db.defined_balance_id defined_balance_id
8022     FROM pay_defined_balances db,
8023       pay_balance_types b,
8024       pay_balance_dimensions d
8025     WHERE db.balance_type_id     = b.balance_type_id
8026     AND db.balance_dimension_id  = d.balance_dimension_id
8027     AND ((d.database_item_suffix = '_PER_TD_YTD'
8028     AND b.balance_name          IN ('Taxable Pay','PAYE','Student Loan','SSP Total','SMP Total',
8029                                     'SPP Adoption Total', 'SAP Total','ASPP Adoption Total',
8030                                     'Pre Tax Pension Contributions','Post Tax Pension Contributions',
8031                                     'Earnings Free of Tax','Earnings Free of NI','Earnings Free of Tax and NI',
8032                                     'Benefits Taxed Through Payroll Subject to NIC Earnings',
8033                                     'Benefits Taxed Through Payroll NOT Subject to NIC Earnings',
8034                                     'Benefits Taxed Through Payroll Subject to NIC Information',
8035                                     'Benefits Taxed Through Payroll NOT Subject to NIC Information','Total Direct Payments',
8036                                     'SPP Birth Total','ASPP Birth Total'))
8037     OR(d.database_item_suffix    = '_ASG_RUN'
8038     AND b.balance_name          IN ('Taxable Pay', 'NIC able Benefits','Student Loan', 'PAYE',
8039                                     'Pre Tax Pension Contributions','Post Tax Pension Contributions',
8040                                     'Earnings Free of Tax','Earnings Free of NI','Earnings Free of Tax and NI',
8041                                     'Benefits Taxed Through Payroll Subject to NIC Earnings',
8042                                     'Benefits Taxed Through Payroll NOT Subject to NIC Earnings',
8043                                     'Benefits Taxed Through Payroll Subject to NIC Information',
8044                                     'Benefits Taxed Through Payroll NOT Subject to NIC Information',
8045                                     'Gross Pay', 'Total Deductions','Total Direct Payments','Pre Tax Deductions'
8046                                      ,'NIable Deductions Free of Tax'))
8047 /*      OR(d.database_item_suffix    = '_ASG_PROC_PTD'
8048     AND b.balance_name          IN ('Court Order','Court Order Non Priority'))
8049 */
8050     OR(d.database_item_suffix    = '_PER_TD_CPE_YTD'
8051      AND b.balance_name          IN ('PAYE'))
8052     )
8053    and b.legislation_code = 'GB'
8054    and d.legislation_code = 'GB'
8055    and db.legislation_code = 'GB';
8056 
8057   CURSOR get_first_fps_date(c_payroll_id number)
8058   IS
8059   SELECT max (ppa2.effective_date)
8060                   FROM    pay_payroll_actions ppa2
8061                   WHERE   ppa2.report_qualifier = 'GB'
8062                   AND     ppa2.report_type in ('RTI_FPS_REP','RTI_FPS_REP_13')
8063                   AND     ppa2.action_status = 'C'
8064                   AND     substr (pay_gb_eoy_archive.get_parameter (ppa2.legislative_parameters,'FIRST_FPS'),1,20) = 'Y'
8065                   AND     substr (pay_gb_eoy_archive.get_parameter (ppa2.legislative_parameters,'PAYROLL_ID'),1,20) = c_payroll_id; --'4064' --'4065' --ppa1.payroll_id
8066 
8067 
8068   l_count              NUMBER                := 1;
8069   l_fps_effective_date VARCHAR2(30);
8070   l_balance_counter    NUMBER;
8071   taxable_id           NUMBER :=1;
8072   paye_id              NUMBER :=2;
8073   student_loan_id      NUMBER :=3;
8074   taxable_ptd_id       NUMBER :=4;
8075   student_loan_ptd_id  NUMBER :=5;
8076   paye_ptd_id          NUMBER :=6;
8077   ssp_id               NUMBER :=7;
8078   smp_id               NUMBER :=8;
8079   ospp_adopt_id        NUMBER :=9;
8080   sap_id               NUMBER :=10;
8081   aspp_adopt_id        NUMBER :=11;
8082   l_dummy              NUMBER;
8083   l_pre_pact_effective_date DATE;
8084   l_first_fps_run_date date;
8085 
8086 BEGIN
8087   hr_utility.set_location('Entering '|| l_proc, 10);
8088   l_err := FALSE;
8089 
8090   OPEN csr_parameter_info(p_payroll_action_id);
8091   FETCH csr_parameter_info
8092    INTO l_effective_date,
8093         g_business_group_id,
8094         g_pre_pact_id,
8095         g_payroll_id,
8096         g_tax_ref,
8097         g_first_fps;
8098   CLOSE csr_parameter_info;
8099 
8100  open csr_prepayment_date(g_pre_pact_id);
8101  fetch csr_prepayment_date into g_prepayment_date;
8102  close csr_prepayment_date;
8103 
8104   g_fps_effective_date := l_effective_date;
8105   g_payroll_action_id := p_payroll_action_id;
8106 
8107   hr_utility.trace('l_effective_date: '||l_effective_date);
8108   hr_utility.trace('g_fps_effective_date: '||g_fps_effective_date);
8109   hr_utility.trace('g_business_group_id: '||g_business_group_id);
8110   hr_utility.trace('g_pre_pact_id: '||g_pre_pact_id);
8111   hr_utility.trace('g_payroll_id: '||g_payroll_id);
8112 
8113   OPEN csr_pre_pact_eff_date(g_pre_pact_id);
8114   FETCH csr_pre_pact_eff_date
8115    INTO l_pre_pact_effective_date;
8116   CLOSE csr_pre_pact_eff_date;
8117 
8118   OPEN get_first_fps_date(g_payroll_id);
8119   FETCH get_first_fps_date
8120    INTO l_first_fps_run_date;
8121   CLOSE get_first_fps_date;
8122 
8123   hr_utility.trace('l_first_fps_run_date: '||l_first_fps_run_date);
8124 
8125   g_first_fps_run_date := l_first_fps_run_date;
8126 
8127   hr_utility.trace('g_first_fps_run_date: '||g_first_fps_run_date);
8128 
8129   SELECT distinct element_type_id
8130   INTO g_paye_element_id
8131   FROM pay_element_types_f
8132   WHERE element_name = 'PAYE'
8133   AND legislation_code = 'GB';
8134 
8135 SELECT distinct element_type_id
8136   INTO g_paye_details_id
8137   FROM pay_element_types_f
8138   WHERE element_name = 'PAYE Details'
8139   AND legislation_code = 'GB';
8140 
8141   SELECT distinct element_type_id
8142   INTO g_adv_period_id
8143   FROM pay_element_types_f
8144   WHERE element_name = 'Advance Period'
8145   AND legislation_code = 'GB';
8146 
8147   hr_utility.trace('g_paye_element_id: '||TO_CHAR(g_paye_element_id));
8148 
8149   IF l_effective_date >= to_date('06-04-'||SUBSTR(TO_CHAR(l_effective_date,'YYYY/MON/DD'),1,4),'DD-MM-YYYY' ) THEN
8150     g_start_year      := to_date('06-04-'||SUBSTR(TO_CHAR(l_effective_date,'YYYY/MON/DD'),1,4),'DD-MM-YYYY' ) ;
8151     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') ;
8152   ELSE
8153     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') ;
8154     g_end_year   := to_date('05-04-'||SUBSTR(TO_CHAR(l_effective_date,'YYYY/MON/DD'),1,4),'DD-MM-YYYY') ;
8155   END IF;
8156 
8157   hr_utility.trace('g_start_year: '||g_start_year);
8158   hr_utility.trace('g_end_year: '||g_end_year);
8159   hr_utility.trace('l_pre_pact_effective_date: '||l_pre_pact_effective_date);
8160 
8161 if (g_start_year <= l_pre_pact_effective_date and g_end_year >= l_pre_pact_effective_date) then
8162   hr_utility.trace('Valid Effective Date for FPS Concurrent Program');
8163 else
8164   hr_utility.trace('Invalid Effective Date for FPS Concurrent Program');
8165   fnd_file.put_line(fnd_file.LOG,'FPS Program Effective date must be within the tax year of corresponding Pre-Payment Process Effective Date.');
8166   fnd_file.put_line(fnd_file.output,'FPS Program Effective date must be within the tax year of corresponding Pre-Payment Process Effective Date.');
8167   raise_application_error(-20001,'FPS Program Effective date must be within the tax year of corresponding Pre-Payment Process Effective Date.');
8168 end if;
8169 
8170 /*
8171   hr_utility.trace('Before calling PAY_GB_FPS_NI_AND_OTHERS.FPS_BACS_PREPROCESS: ');
8172   l_dummy := PAY_GB_FPS_NI_AND_OTHERS.FPS_BACS_PREPROCESS(g_pre_pact_id, 'FPS');
8173 */
8174 
8175   OPEN csr_ni_details;
8176   FETCH csr_ni_details INTO g_ni_pt_eid, g_ni_pt_ivid;
8177   CLOSE csr_ni_details;
8178 
8179   --******************************
8180   l_balance_counter := 1;
8181   FOR rec IN get_defined_balance_id
8182   LOOP
8183     g_fps_bal_det_tab(l_balance_counter).balance_name := rec.balance_name;
8184     hr_utility.trace('balance_name: '||g_fps_bal_det_tab(l_balance_counter).balance_name);
8185     g_fps_bal_det_tab(l_balance_counter).balance_type_id := rec.balance_type_id;
8186     hr_utility.trace('balance_type_id: '||g_fps_bal_det_tab(l_balance_counter).balance_type_id);
8187     g_fps_bal_det_tab(l_balance_counter).database_item_suffix := rec.database_item_suffix;
8188     hr_utility.trace('database_item_suffix: '||g_fps_bal_det_tab(l_balance_counter).database_item_suffix);
8189     g_fps_bal_det_tab(l_balance_counter).balance_dimension_id := rec.balance_dimension_id;
8190     hr_utility.trace('balance_dimension_id: '||g_fps_bal_det_tab(l_balance_counter).balance_dimension_id);
8191     g_fps_bal_det_tab(l_balance_counter).defined_balance_id := rec.defined_balance_id;
8192     hr_utility.trace('defined_balance_id: '||g_fps_bal_det_tab(l_balance_counter).defined_balance_id);
8193     l_balance_counter := l_balance_counter + 1;
8194     hr_utility.trace('Balance Counter: '||l_balance_counter);
8195   END LOOP;
8196 
8197   FOR i IN 1..g_fps_bal_det_tab.last
8198   LOOP
8199     g_defined_balance_lst(i).defined_balance_id := g_fps_bal_det_tab(i).defined_balance_id;
8200   END LOOP;
8201 
8202   --Aggregation balances starts here
8203   l_balance_counter := 1;
8204   FOR rec IN get_aggr_defined_balance_id
8205   LOOP
8206     g_fps_aggr_bal_det_tab(l_balance_counter).balance_name := rec.balance_name;
8207     hr_utility.trace('balance name: '||g_fps_aggr_bal_det_tab(l_balance_counter).balance_name);
8208     g_fps_aggr_bal_det_tab(l_balance_counter).balance_type_id := rec.balance_type_id;
8209     hr_utility.trace('balance_type_id: '||g_fps_aggr_bal_det_tab(l_balance_counter).balance_type_id);
8210     g_fps_aggr_bal_det_tab(l_balance_counter).database_item_suffix := rec.database_item_suffix;
8211     hr_utility.trace('database_item_suffix: '||g_fps_aggr_bal_det_tab(l_balance_counter).database_item_suffix);
8212     g_fps_aggr_bal_det_tab(l_balance_counter).balance_dimension_id := rec.balance_dimension_id;
8213     hr_utility.trace('balance_dimension_id: '||g_fps_aggr_bal_det_tab(l_balance_counter).balance_dimension_id);
8214     g_fps_aggr_bal_det_tab(l_balance_counter).defined_balance_id := rec.defined_balance_id;
8215     hr_utility.trace('defined_balance_id: '||g_fps_aggr_bal_det_tab(l_balance_counter).defined_balance_id);
8216     l_balance_counter := l_balance_counter + 1;
8217     hr_utility.trace('Balance Counter: '||l_balance_counter);
8218   END LOOP;
8219 
8220   FOR i IN 1..g_fps_aggr_bal_det_tab.last
8221   LOOP
8222     g_aggr_defined_balance_lst(i).defined_balance_id := g_fps_aggr_bal_det_tab(i).defined_balance_id;
8223   END LOOP;
8224 
8225   --Aggregation balances ends here
8226   hr_utility.set_location('Leaving '|| l_proc, 10);
8227 
8228 EXCEPTION
8229 WHEN OTHERS THEN
8230   fnd_file.put_line(fnd_file.LOG,'Exception:' || SQLCODE || ' - ' || SQLERRM);
8231   hr_utility.raise_error;
8232 END archinit;
8233 --
8234 procedure add_other_asg_ni_ytd(c_asg_act_id in number , p_archive_tab in out nocopy act_info_rec) is
8235 
8236 cursor csr_def_bal_id(c_bal_name varchar2, c_dim_name varchar2) is
8237 select pdb.defined_balance_id from pay_balance_types pbt, pay_balance_dimensions pbd,
8238 pay_defined_balances pdb where
8239 pbt.balance_name = c_bal_name
8240 and pbd.database_item_suffix = c_dim_name
8241 and pdb.balance_type_id = pbt.balance_type_id
8242 and pdb.balance_dimension_id = pbd.balance_dimension_id
8243 and pbd.LEGISLATION_CODE = 'GB'
8244 and pbt.LEGISLATION_CODE = 'GB';
8245 l_def_bal_id number;
8246 begin
8247                hr_utility.trace('Entering : add_other_asg_ni_ytd');
8248                hr_utility.trace('c_asg_act_id: ' || c_asg_act_id);
8249 
8250                open csr_def_bal_id('NI ' || p_archive_tab.act_info1 || ' Able', '_ASG_TD_YTD');
8251                fetch csr_def_bal_id into l_def_bal_id;
8252                hr_utility.trace('l_def_bal_id1: ' || l_def_bal_id);
8253                close csr_def_bal_id;
8254                p_archive_tab.act_info2 := nvl(p_archive_tab.act_info2,0) + nvl(100* hr_dirbal.get_balance(c_asg_act_id, l_def_bal_id),0);
8255 
8256                open csr_def_bal_id('NI ' || p_archive_tab.act_info1 || ' Able LEL', '_ASG_TD_YTD');
8257                fetch csr_def_bal_id into l_def_bal_id;
8258                hr_utility.trace('l_def_bal_id2: ' || l_def_bal_id);
8259                close csr_def_bal_id;
8260                p_archive_tab.act_info3 := nvl(p_archive_tab.act_info3,0) + nvl(100* hr_dirbal.get_balance(c_asg_act_id, l_def_bal_id),0);
8261 
8262                open csr_def_bal_id('NI ' || p_archive_tab.act_info1 || ' Able ET', '_ASG_TD_YTD');
8263                fetch csr_def_bal_id into l_def_bal_id;
8264                hr_utility.trace('l_def_bal_id3: ' || l_def_bal_id);
8265                close csr_def_bal_id;
8266                p_archive_tab.act_info4 := nvl(p_archive_tab.act_info4,0) + nvl(100* hr_dirbal.get_balance(c_asg_act_id, l_def_bal_id),0);
8267 
8268                open csr_def_bal_id('NI ' || p_archive_tab.act_info1 || ' Able UAP', '_ASG_TD_YTD');
8269                fetch csr_def_bal_id into l_def_bal_id;
8270                hr_utility.trace('l_def_bal_id4: ' || l_def_bal_id);
8271                close csr_def_bal_id;
8272                p_archive_tab.act_info5 := nvl(p_archive_tab.act_info5,0) + nvl(100* hr_dirbal.get_balance(c_asg_act_id, l_def_bal_id),0);
8273 
8274                open csr_def_bal_id('NI ' || p_archive_tab.act_info1 || ' Able UEL', '_ASG_TD_YTD');
8275                fetch csr_def_bal_id into l_def_bal_id;
8276                hr_utility.trace('l_def_bal_id5: ' || l_def_bal_id);
8277                close csr_def_bal_id;
8278                p_archive_tab.act_info6 := nvl(p_archive_tab.act_info6,0) + nvl(100* hr_dirbal.get_balance(c_asg_act_id, l_def_bal_id),0);
8279 
8280                open csr_def_bal_id('NI ' || p_archive_tab.act_info1 || ' Employer', '_ASG_TD_YTD');
8281                fetch csr_def_bal_id into l_def_bal_id;
8282                hr_utility.trace('l_def_bal_id6: ' || l_def_bal_id);
8283                close csr_def_bal_id;
8284                p_archive_tab.act_info7 := nvl(p_archive_tab.act_info7,0) + nvl(100* hr_dirbal.get_balance(c_asg_act_id, l_def_bal_id),0);
8285 
8286                open csr_def_bal_id('NI ' || p_archive_tab.act_info1 || ' Employee', '_ASG_TD_YTD');
8287                fetch csr_def_bal_id into l_def_bal_id;
8288                hr_utility.trace('l_def_bal_id7: ' || l_def_bal_id);
8289                close csr_def_bal_id;
8290                p_archive_tab.act_info8 := nvl(p_archive_tab.act_info8,0) + nvl(100* hr_dirbal.get_balance(c_asg_act_id, l_def_bal_id),0);
8291 
8292                hr_utility.trace('Leaving : add_other_asg_ni_ytd');
8293 end add_other_asg_ni_ytd;
8294 
8295 ---
8296 procedure ni_agg_ytd_sum(l_archive_tab in out nocopy action_info_table,
8297                          i in out nocopy number,
8298                          p_per_ni_a_balance act_info_rec,
8299                          p_per_ni_b_balance act_info_rec,
8300                          p_per_ni_c_balance act_info_rec,
8301                          p_per_ni_d_balance act_info_rec,
8302                          p_per_ni_e_balance act_info_rec,
8303                          p_per_ni_j_balance act_info_rec,
8304                          p_per_ni_l_balance act_info_rec
8305                          ) is
8306   l_ni_rpt_asg_id     NUMBER;
8307   l_ni_rpt_date   DATE;
8308   l_cat number := null;
8309 
8310 begin
8311 			  l_ni_rpt_asg_id := l_archive_tab(3).assignment_id;
8312 --A
8313               if p_per_ni_a_balance.act_info1 is not null then
8314                 for k in 4..i
8315                 loop
8316                     if l_archive_tab(k).act_info1 = p_per_ni_a_balance.act_info1 then
8317                         l_archive_tab(k).action_info_category := 'GB_RTI_FPS_NI_DET';
8318                         l_archive_tab(k).assignment_id := l_ni_rpt_asg_id;
8319                         l_archive_tab(k).act_info3 := p_per_ni_a_balance.act_info3;
8320                         l_archive_tab(k).act_info4 := p_per_ni_a_balance.act_info4;
8321                         l_archive_tab(k).act_info5 := p_per_ni_a_balance.act_info5;
8322                         l_archive_tab(k).act_info6 := p_per_ni_a_balance.act_info6;
8323                         l_archive_tab(k).act_info7 := p_per_ni_a_balance.act_info7;
8324                         l_archive_tab(k).act_info8 := p_per_ni_a_balance.act_info8;
8325                         l_cat := 1;
8326                     end if;
8327                 end loop;
8328                     if l_cat is null then
8329                         i := i+1;
8330                         l_archive_tab(i).action_info_category := 'GB_RTI_FPS_NI_DET';
8331                         l_archive_tab(i).assignment_id := l_ni_rpt_asg_id;
8332                         l_archive_tab(i).act_info1 := 'A';
8333                         l_archive_tab(i).act_info2 := 0;
8334                         l_archive_tab(i).act_info3 := p_per_ni_a_balance.act_info3;
8335                         l_archive_tab(i).act_info4 := p_per_ni_a_balance.act_info4;
8336                         l_archive_tab(i).act_info5 := p_per_ni_a_balance.act_info5;
8337                         l_archive_tab(i).act_info6 := p_per_ni_a_balance.act_info6;
8338                         l_archive_tab(i).act_info7 := p_per_ni_a_balance.act_info7;
8339                         l_archive_tab(i).act_info8 := p_per_ni_a_balance.act_info8;
8340                         l_archive_tab(i).act_info9 := 0;
8341                         l_archive_tab(i).act_info10 := 0;
8342                     end if;
8343 
8344               end if;
8345             l_cat := null;
8346 --B
8347  if p_per_ni_b_balance.act_info1 is not null then
8348                 for k in 4..i
8349                 loop
8350                     if l_archive_tab(k).act_info1 = p_per_ni_b_balance.act_info1 then
8351                         l_archive_tab(k).action_info_category := 'GB_RTI_FPS_NI_DET';
8352                         l_archive_tab(k).assignment_id := l_ni_rpt_asg_id;
8353                         l_archive_tab(k).act_info3 := p_per_ni_b_balance.act_info3;
8354                         l_archive_tab(k).act_info4 := p_per_ni_b_balance.act_info4;
8355                         l_archive_tab(k).act_info5 := p_per_ni_b_balance.act_info5;
8356                         l_archive_tab(k).act_info6 := p_per_ni_b_balance.act_info6;
8357                         l_archive_tab(k).act_info7 := p_per_ni_b_balance.act_info7;
8358                         l_archive_tab(k).act_info8 := p_per_ni_b_balance.act_info8;
8359                         l_cat := 1;
8360                     end if;
8361                 end loop;
8362                     if l_cat is null then
8363                         i := i+1;
8364                         l_archive_tab(i).action_info_category := 'GB_RTI_FPS_NI_DET';
8365                         l_archive_tab(i).assignment_id := l_ni_rpt_asg_id;
8366                         l_archive_tab(i).act_info1 := 'B';
8367                         l_archive_tab(i).act_info2 := 0;
8368                         l_archive_tab(i).act_info3 := p_per_ni_b_balance.act_info3;
8369                         l_archive_tab(i).act_info4 := p_per_ni_b_balance.act_info4;
8370                         l_archive_tab(i).act_info5 := p_per_ni_b_balance.act_info5;
8371                         l_archive_tab(i).act_info6 := p_per_ni_b_balance.act_info6;
8372                         l_archive_tab(i).act_info7 := p_per_ni_b_balance.act_info7;
8373                         l_archive_tab(i).act_info8 := p_per_ni_b_balance.act_info8;
8374                         l_archive_tab(i).act_info9 := 0;
8375                         l_archive_tab(i).act_info10 := 0;
8376                     end if;
8377               end if;
8378 l_cat := null;
8379 -- D
8380             if p_per_ni_d_balance.act_info1 is not null then
8381                 for k in 4..i
8382                 loop
8383                     if l_archive_tab(k).act_info1 = p_per_ni_d_balance.act_info1 then
8384                         l_archive_tab(k).action_info_category := 'GB_RTI_FPS_NI_DET';
8385                         l_archive_tab(k).assignment_id := l_ni_rpt_asg_id;
8386                         l_archive_tab(k).act_info3 := p_per_ni_d_balance.act_info3;
8387                         l_archive_tab(k).act_info4 := p_per_ni_d_balance.act_info4;
8388                         l_archive_tab(k).act_info5 := p_per_ni_d_balance.act_info5;
8389                         l_archive_tab(k).act_info6 := p_per_ni_d_balance.act_info6;
8390                         l_archive_tab(k).act_info7 := p_per_ni_d_balance.act_info7;
8391                         l_archive_tab(k).act_info8 := p_per_ni_d_balance.act_info8;
8392                         l_cat := 1;
8393                     end if;
8394                   end loop;
8395                      if l_cat is null then
8396                         i := i + 1;
8397                         l_archive_tab(i).action_info_category := 'GB_RTI_FPS_NI_DET';
8398                         l_archive_tab(i).assignment_id := l_ni_rpt_asg_id;
8399                         l_archive_tab(i).act_info1 := 'D';
8400                         l_archive_tab(i).act_info2 := 0;
8401                         l_archive_tab(i).act_info3 := p_per_ni_d_balance.act_info3;
8402                         l_archive_tab(i).act_info4 := p_per_ni_d_balance.act_info4;
8403                         l_archive_tab(i).act_info5 := p_per_ni_d_balance.act_info5;
8404                         l_archive_tab(i).act_info6 := p_per_ni_d_balance.act_info6;
8405                         l_archive_tab(i).act_info7 := p_per_ni_d_balance.act_info7;
8406                         l_archive_tab(i).act_info8 := p_per_ni_d_balance.act_info8;
8407                         l_archive_tab(i).act_info9 := 0;
8408                         l_archive_tab(i).act_info10 := 0;
8409                     end if;
8410             end if;
8411             l_cat := null;
8412 --C
8413               if p_per_ni_c_balance.act_info1 is not null then
8414                 for k in 4..i
8415                 loop
8416                     if l_archive_tab(k).act_info1 = p_per_ni_c_balance.act_info1 then
8417                         l_archive_tab(k).action_info_category := 'GB_RTI_FPS_NI_DET';
8418                         l_archive_tab(k).assignment_id := l_ni_rpt_asg_id;
8419                         l_archive_tab(k).act_info3 := p_per_ni_c_balance.act_info3;
8420                         l_archive_tab(k).act_info4 := p_per_ni_c_balance.act_info4;
8421                         l_archive_tab(k).act_info5 := p_per_ni_c_balance.act_info5;
8422                         l_archive_tab(k).act_info6 := p_per_ni_c_balance.act_info6;
8423                         l_archive_tab(k).act_info7 := p_per_ni_c_balance.act_info7;
8424                         l_archive_tab(k).act_info8 := p_per_ni_c_balance.act_info8;
8425                         l_cat := 1;
8426                     end if;
8427                  end loop;
8428                      if l_cat is null then
8429                         i := i+1;
8430                         l_archive_tab(i).action_info_category := 'GB_RTI_FPS_NI_DET';
8431                         l_archive_tab(i).assignment_id := l_ni_rpt_asg_id;
8432                         l_archive_tab(i).act_info1 := 'C';
8433                         l_archive_tab(i).act_info2 := 0;
8434                         l_archive_tab(i).act_info3 := p_per_ni_c_balance.act_info3;
8435                         l_archive_tab(i).act_info4 := p_per_ni_c_balance.act_info4;
8436                         l_archive_tab(i).act_info5 := p_per_ni_c_balance.act_info5;
8437                         l_archive_tab(i).act_info6 := p_per_ni_c_balance.act_info6;
8438                         l_archive_tab(i).act_info7 := p_per_ni_c_balance.act_info7;
8439                         l_archive_tab(i).act_info8 := p_per_ni_c_balance.act_info8;
8440                         l_archive_tab(i).act_info9 := 0;
8441                         l_archive_tab(i).act_info10 := 0;
8442                     end if;
8443               end if;
8444             l_cat := null;
8445 --E
8446               if p_per_ni_e_balance.act_info1 is not null then
8447                 for k in 4..i
8448                 loop
8449                     if l_archive_tab(k).act_info1 = p_per_ni_e_balance.act_info1 then
8450                         l_archive_tab(k).action_info_category := 'GB_RTI_FPS_NI_DET';
8451                         l_archive_tab(k).assignment_id := l_ni_rpt_asg_id;
8452                         l_archive_tab(k).act_info3 := p_per_ni_e_balance.act_info3;
8453                         l_archive_tab(k).act_info4 := p_per_ni_e_balance.act_info4;
8454                         l_archive_tab(k).act_info5 := p_per_ni_e_balance.act_info5;
8455                         l_archive_tab(k).act_info6 := p_per_ni_e_balance.act_info6;
8456                         l_archive_tab(k).act_info7 := p_per_ni_e_balance.act_info7;
8457                         l_archive_tab(k).act_info8 := p_per_ni_e_balance.act_info8;
8458                         l_cat := 1;
8459                     end if;
8460                  end loop;
8461                      if l_cat is null then
8462                         i := i+1;
8463                         l_archive_tab(i).action_info_category := 'GB_RTI_FPS_NI_DET';
8464                         l_archive_tab(i).assignment_id := l_ni_rpt_asg_id;
8465                         l_archive_tab(i).act_info1 := 'E';
8466                         l_archive_tab(i).act_info2 := 0;
8467                         l_archive_tab(i).act_info3 := p_per_ni_e_balance.act_info3;
8468                         l_archive_tab(i).act_info4 := p_per_ni_e_balance.act_info4;
8469                         l_archive_tab(i).act_info5 := p_per_ni_e_balance.act_info5;
8470                         l_archive_tab(i).act_info6 := p_per_ni_e_balance.act_info6;
8471                         l_archive_tab(i).act_info7 := p_per_ni_e_balance.act_info7;
8472                         l_archive_tab(i).act_info8 := p_per_ni_e_balance.act_info8;
8473                         l_archive_tab(i).act_info9 := 0;
8474                         l_archive_tab(i).act_info10 := 0;
8475                     end if;
8476               end if;
8477             l_cat := null;
8478 --j
8479               if p_per_ni_j_balance.act_info1 is not null then
8480                 for k in 4..i
8481                 loop
8482                     if l_archive_tab(k).act_info1 = p_per_ni_j_balance.act_info1 then
8483                         l_archive_tab(k).action_info_category := 'GB_RTI_FPS_NI_DET';
8484                         l_archive_tab(k).assignment_id := l_ni_rpt_asg_id;
8485                         l_archive_tab(k).act_info3 := p_per_ni_j_balance.act_info3;
8486                         l_archive_tab(k).act_info4 := p_per_ni_j_balance.act_info4;
8487                         l_archive_tab(k).act_info5 := p_per_ni_j_balance.act_info5;
8488                         l_archive_tab(k).act_info6 := p_per_ni_j_balance.act_info6;
8489                         l_archive_tab(k).act_info7 := p_per_ni_j_balance.act_info7;
8490                         l_archive_tab(k).act_info8 := p_per_ni_j_balance.act_info8;
8491                         l_cat := 1;
8492                     end if;
8493                  end loop;
8494                      if l_cat is null then
8495                         i := i+1;
8496                         l_archive_tab(i).action_info_category := 'GB_RTI_FPS_NI_DET';
8497                         l_archive_tab(i).assignment_id := l_ni_rpt_asg_id;
8498                         l_archive_tab(i).act_info1 := 'J';
8499                         l_archive_tab(i).act_info2 := 0;
8500                         l_archive_tab(i).act_info3 := p_per_ni_j_balance.act_info3;
8501                         l_archive_tab(i).act_info4 := p_per_ni_j_balance.act_info4;
8502                         l_archive_tab(i).act_info5 := p_per_ni_j_balance.act_info5;
8503                         l_archive_tab(i).act_info6 := p_per_ni_j_balance.act_info6;
8504                         l_archive_tab(i).act_info7 := p_per_ni_j_balance.act_info7;
8505                         l_archive_tab(i).act_info8 := p_per_ni_j_balance.act_info8;
8506                         l_archive_tab(i).act_info9 := 0;
8507                         l_archive_tab(i).act_info10 := 0;
8508                     end if;
8509               end if;
8510             l_cat := null;
8511 --l
8512               if p_per_ni_l_balance.act_info1 is not null then
8513                 for k in 4..i
8514                 loop
8515                     if l_archive_tab(k).act_info1 = p_per_ni_l_balance.act_info1 then
8516                         l_archive_tab(k).action_info_category := 'GB_RTI_FPS_NI_DET';
8517                         l_archive_tab(k).assignment_id := l_ni_rpt_asg_id;
8518                         l_archive_tab(k).act_info3 := p_per_ni_l_balance.act_info3;
8519                         l_archive_tab(k).act_info4 := p_per_ni_l_balance.act_info4;
8520                         l_archive_tab(k).act_info5 := p_per_ni_l_balance.act_info5;
8521                         l_archive_tab(k).act_info6 := p_per_ni_l_balance.act_info6;
8522                         l_archive_tab(k).act_info7 := p_per_ni_l_balance.act_info7;
8523                         l_archive_tab(k).act_info8 := p_per_ni_l_balance.act_info8;
8524                         l_cat := 1;
8525                     end if;
8526                 end loop;
8527                      if l_cat is null then
8528                         i := i+1;
8529                         l_archive_tab(i).action_info_category := 'GB_RTI_FPS_NI_DET';
8530                         l_archive_tab(i).assignment_id := l_ni_rpt_asg_id;
8531                         l_archive_tab(i).act_info1 := 'L';
8532                         l_archive_tab(i).act_info2 := 0;
8533                         l_archive_tab(i).act_info3 := p_per_ni_l_balance.act_info3;
8534                         l_archive_tab(i).act_info4 := p_per_ni_l_balance.act_info4;
8535                         l_archive_tab(i).act_info5 := p_per_ni_l_balance.act_info5;
8536                         l_archive_tab(i).act_info6 := p_per_ni_l_balance.act_info6;
8537                         l_archive_tab(i).act_info7 := p_per_ni_l_balance.act_info7;
8538                         l_archive_tab(i).act_info8 := p_per_ni_l_balance.act_info8;
8539                         l_archive_tab(i).act_info9 := 0;
8540                         l_archive_tab(i).act_info10 := 0;
8541                     end if;
8542               end if;
8543 
8544 end ni_agg_ytd_sum;
8545 ---
8546 
8547 --added for ni only aggregated case
8548 procedure get_ni_only_asg_details(l_asg_id number,
8549  l_archive_tab_det1 OUT nocopy act_info_rec,
8550 l_archive_tab_det2 OUT nocopy act_info_rec,
8551  l_archive_tab_det3 OUT nocopy act_info_rec,
8552 p_assactid number) is
8553 l_last_asg_action_id number;
8554 l_last_effective_date date;
8555 l_last_asg_action_id_1 number;
8556 l_last_effective_date_1 date;
8557 l_archive_tab_per act_info_rec;
8558 l_asg_eff_start_date date;
8559 l_person_id number;
8560 l_archive_tab_add act_info_rec;
8561 p_starter_set varchar2(1) := 'N';
8562 l_archive_asg_det1 BOOLEAN;
8563 l_archive_asg_det2 BOOLEAN;
8564 l_archive_addr  BOOLEAN;
8565 l_archive_person BOOLEAN;
8566 
8567   CURSOR csr_asg_basic_details(c_asg_id NUMBER)
8568   IS
8569        SELECT asg.EFFECTIVE_START_DATE asg_eff_start_date,
8570            asg.person_id
8571     FROM per_all_assignments_f asg
8572     WHERE asg.assignment_id          = c_asg_id
8573     AND g_effective_date BETWEEN asg.effective_start_date AND asg.effective_end_date;
8574 
8575 -- for ni only aggregation
8576 -- to get the latest payroll run assignment action id for the given assignment.
8577 cursor csr_get_latest_asg_action (c_asg_id number)
8578 is
8579 SELECT
8580             to_number (substr (max (lpad (paa.action_sequence ,15,'0')
8581                                     || paa.assignment_action_id),16)) max_asg_act_id
8582            , max(pact.effective_date) effective_date
8583 
8584     FROM    pay_assignment_actions paa
8585            ,pay_payroll_actions pact
8586            ,per_time_periods ptp
8587     WHERE   paa.assignment_id = c_asg_id
8588     AND     paa.payroll_action_id = pact.payroll_action_id
8589     AND     pact.time_period_id = ptp.time_period_id
8590     AND     pact.action_type IN ('Q','R','B','I','V')
8591     AND     paa.action_status IN ('C','S')
8592     AND     ptp.regular_payment_date BETWEEN g_start_year
8593                                      AND     g_end_year
8594 AND     ptp.regular_payment_date <= g_effective_date;
8595 
8596 cursor csr_get_latest_asg_action_1 (c_asg_id number)
8597 is
8598 SELECT
8599             to_number (substr (max (lpad (paa.action_sequence ,15,'0')
8600                                     || paa.assignment_action_id),16)) max_asg_act_id
8601            , max(pact.effective_date) effective_date
8602 
8603     FROM    pay_assignment_actions paa
8604            ,pay_payroll_actions pact
8605            ,per_time_periods ptp
8606     WHERE   paa.assignment_id = c_asg_id
8607     AND     paa.payroll_action_id = pact.payroll_action_id
8608     AND     pact.time_period_id = ptp.time_period_id
8609     AND     pact.action_type IN ('Q','R','B','I','V')
8610     AND     paa.action_status IN ('C','S')
8611     AND     ptp.regular_payment_date BETWEEN g_start_year
8612                                      AND     g_end_year;
8613 
8614 begin
8615 
8616   hr_utility.trace('Entering get_ni_only_asg_details for asg_id: ' || l_asg_id);
8617 
8618   open csr_get_latest_asg_action(l_asg_id);
8619   fetch csr_get_latest_asg_action into l_last_asg_action_id, l_last_effective_date;
8620   close csr_get_latest_asg_action;
8621   if l_last_asg_action_id is null then
8622      open csr_get_latest_asg_action_1(l_asg_id);
8623      fetch csr_get_latest_asg_action_1 into l_last_asg_action_id_1, l_last_effective_date_1;
8624      close csr_get_latest_asg_action_1;
8625   end if;
8626 
8627 
8628   hr_utility.trace('l_last_asg_action_id: '||l_last_asg_action_id);
8629   hr_utility.trace('l_last_effective_date: '||l_last_effective_date);
8630   OPEN csr_asg_basic_details(l_asg_id);
8631   hr_utility.trace('l_last_asg_action_id_1: '||l_last_asg_action_id_1);
8632   hr_utility.trace('l_last_effective_date_1: '||l_last_effective_date_1);
8633 
8634   FETCH csr_asg_basic_details INTO  l_asg_eff_start_date, l_person_id;
8635   CLOSE csr_asg_basic_details;
8636 
8637     hr_utility.set_location('Fetching person details ',10);
8638     l_archive_person := fetch_person_rec(p_assactid, l_asg_eff_start_date,g_effective_date,l_archive_tab_per);
8639     ---
8640     hr_utility.set_location('Fetching address details ',20);
8641     l_archive_addr := fetch_address_rec(l_archive_tab_per.person_id,
8642                                         l_archive_tab_per.assignment_id,
8643                                         g_effective_date,
8644                                         l_archive_tab_add);
8645     l_person_id    := l_archive_tab_per.person_id;
8646     --Fetching assignments details for FPS
8647     hr_utility.set_location('Fetching Assignment details ',30);
8648     if l_last_asg_action_id is not null then
8649        l_archive_asg_det1 := fetch_fps_asg_det1(l_asg_eff_start_date,
8650                                              g_effective_date,
8651                                              p_assactid,
8652                                              l_last_asg_action_id,
8653 					     'Y',
8654                                              l_archive_tab_per,
8655                                              l_archive_tab_det1,
8656                                              p_starter_set);
8657     else
8658 
8659 --fetch_fps_nopay_asg_det1 procedure will be called when there are no payments for the assignment.
8660               l_archive_asg_det1 := fetch_fps_nopay_asg_det1(l_asg_eff_start_date,
8661                                              g_effective_date,
8662                                              p_assactid,
8663                                              l_last_asg_action_id_1,
8664 					     'Y',
8665                                              l_archive_tab_per,
8666                                              l_archive_tab_det1,
8667                                              p_starter_set);
8668     end if;
8669 
8670     l_archive_tab_det2.assignment_id := l_asg_id;
8671 
8672     l_archive_tab_det2.action_info_category := 'GB_RTI_FPS_ASG_DET2';
8673     l_archive_tab_det2.act_info1 := 0;
8674 	  l_archive_tab_det2.act_info2 := 0;
8675 	  l_archive_tab_det2.act_info3 := 0;
8676 	  l_archive_tab_det2.act_info4 := 0;
8677 	  l_archive_tab_det2.act_info5 := 0;
8678 	  l_archive_tab_det2.act_info6 := 0;
8679 	  l_archive_tab_det2.act_info7 := 0;
8680 	  l_archive_tab_det2.act_info8 := 0;
8681 	  l_archive_tab_det2.act_info9 := 0;
8682 	  l_archive_tab_det2.act_info10 := 0;
8683 	  l_archive_tab_det2.act_info11 := 0;
8684 	  l_archive_tab_det2.act_info12 := 0;
8685 	  l_archive_tab_det2.act_info13 := 0;
8686 	  l_archive_tab_det2.act_info14 := 0;
8687 	  l_archive_tab_det2.act_info15 := 0;
8688 	  l_archive_tab_det2.act_info16 := 0;
8689 	  l_archive_tab_det2.act_info17 := 0;
8690 	  l_archive_tab_det2.act_info18 := 0;
8691 	  l_archive_tab_det2.act_info19 := 0;
8692 	  l_archive_tab_det2.act_info20 := 0;
8693 	  l_archive_tab_det2.act_info21 := 0;
8694 	  l_archive_tab_det2.act_info22 := 0;
8695 	  l_archive_tab_det2.act_info23 := 0;
8696 	  l_archive_tab_det2.act_info24 := 0;
8697 	  if l_last_asg_action_id is not null then
8698        l_archive_asg_det2 := fetch_first_fps_asg_det2(l_last_asg_action_id,l_asg_id,l_last_effective_date,l_archive_tab_det2);
8699     end if;
8700       hr_utility.trace('after det2');
8701 
8702 
8703 
8704     l_archive_tab_det2.act_info29 := g_pre_pact_id||','||l_last_asg_action_id;
8705     l_archive_tab_det1.act_info29 := g_pre_pact_id||','||l_last_asg_action_id;
8706 
8707 end get_ni_only_asg_details;
8708 --
8709 
8710 --
8711 --
8712 /*--------------------------------------------------------------------------
8713 Name      : archive_data
8714 Purpose   : This sets up the contexts needed for the live (non-archive)
8715 database items
8716 Arguments :
8717 Notes     : Every possible context for a specific assignment action has to
8718 be added to the PL/SQL table
8719 --------------------------------------------------------------------------*/
8720 --
8721 --
8722 PROCEDURE archive_code(
8723     p_assactid       IN NUMBER,
8724     p_effective_date IN DATE)
8725 IS
8726   l_proc      CONSTANT VARCHAR2(35):= g_package||'archive_code';
8727   error_found EXCEPTION;
8728   already_processed EXCEPTION;
8729   l_archive_tab action_info_table;
8730   l_archive_tab_det1 action_info_table;
8731   l_archive_tab_det2 action_info_table;
8732   l_archive_tab_det3 action_info_table;
8733   l_archive_tab_ni_det action_info_table;
8734   l_archive_tab_ni_det_1 action_info_table;
8735   l_archive_tab_det1_local action_info_table;
8736   l_archive_tab_det2_local action_info_table;
8737   l_ni_rti_flag varchar(10);
8738   l_ni_rti_date varchar2(30);
8739   l_ni_rpt_asg_id     NUMBER;
8740   l_ni_rpt_date   DATE;
8741   l_archive_tab_ni_rpt action_info_table;
8742   record_count         NUMBER;
8743   l_archive_person     BOOLEAN;
8744   l_archive_addr       BOOLEAN;
8745   l_archive_asg        BOOLEAN;
8746   l_per_addr_val_flag  VARCHAR2(1);
8747   l_fps_etext_asg_flag VARCHAR2(1);
8748   l_fps_etext_ni_flag  VARCHAR2(1);
8749   l_personaddr_val_err BOOLEAN := False;
8750   l_fps_val_err        BOOLEAN := False;
8751   l_fps_ni_val_err     BOOLEAN := False;
8752   l_err_log            NUMBER;
8753   l_start_date DATE;
8754   l_end_date DATE;
8755   l_archive_asg_det1   BOOLEAN;
8756   l_archive_asg_det2   BOOLEAN;
8757   l_archive_asg_ni_det BOOLEAN;
8758   l_rec_count number;
8759   l_cur_asg_pre_pay_act_id NUMBER;
8760   l_asg_action_id number;
8761   l_assact_id  number;
8762   l_oth_min_pre_pay_id number;
8763   l_det3 act_info_rec;
8764   l_bacs_large_asg_id number;
8765   l_ni_emp_run number;
8766   --Below cursor fetches the payment date for the payroll run of the current assignment
8767   CURSOR csr_get_payment_date(p_last_asg_action_id NUMBER)
8768   IS
8769     SELECT ptp.regular_payment_date payment_date
8770     FROM pay_payroll_actions ppa,
8771       pay_assignment_actions paa,
8772       per_time_periods ptp
8773     WHERE assignment_action_id = p_last_asg_action_id
8774     AND ppa.time_period_id     = ptp.time_period_id
8775     AND ppa.payroll_id         = ptp.payroll_id
8776     AND paa.payroll_action_id  = ppa.payroll_action_id;
8777   ---
8778     --Below cursor fetches the minimum assignment_action_id for aggregation case
8779   cursor get_min_asg_actid(p_person_id IN Number,p_assactid IN number)
8780   is
8781     select min(paa2.assignment_action_id) asgactid
8782     from
8783     pay_assignment_actions paa1,
8784     pay_assignment_actions paa2,
8785     per_all_assignments_f asg
8786     where
8787     paa1.assignment_action_id = p_assactid
8788     and paa1.payroll_action_id = paa2.payroll_action_id
8789     and paa2.assignment_id = asg.assignment_id
8790     and asg.person_id = p_person_id ;
8791 
8792   --Below cursor fetches the basic details of the current assignment
8793   CURSOR csr_asg_basic_details(c_asg_act_id NUMBER)
8794   IS
8795     SELECT asg.assignment_id,
8796       asg.EFFECTIVE_START_DATE asg_eff_start_date,
8797            asg.person_id,
8798            asg.assignment_number
8799     FROM per_all_assignments_f asg,
8800       pay_assignment_actions paa,
8801       pay_payroll_actions ppa
8802     WHERE paa.assignment_action_id = c_asg_act_id
8803     AND paa.assignment_id          = asg.assignment_id
8804     AND ppa.payroll_action_id      = g_pre_pact_id
8805     AND ppa.effective_date BETWEEN asg.effective_start_date AND asg.effective_end_date;
8806 
8807   ---
8808 
8809   --Below cursor fetches the further details of the current assignment
8810   CURSOR csr_asg(c_asg_act_id NUMBER, c_effective_date DATE)
8811   IS
8812     SELECT trim(NVL(asg.primary_flag,'N')) asg_primary_flag,
8813       trim(NVL(pap.per_information9,'N')) per_ni_agg_flag,
8814       trim(NVL(pap.per_information10,'N')) per_paye_agg_flag,
8815       asg.payroll_id payroll_id
8816     FROM per_all_people_f pap,
8817       per_all_assignments_f asg,
8818       pay_assignment_actions paa
8819     WHERE paa.assignment_action_id = c_asg_act_id
8820     AND paa.assignment_id          = asg.assignment_id
8821     AND pap.person_id              = asg.person_id
8822       --     and    asg.business_group_id = l_business_group_id
8823     AND c_effective_date BETWEEN asg.effective_start_date AND asg.effective_end_date
8824     AND c_effective_date BETWEEN pap.effective_start_date AND pap.effective_end_date
8825     AND pap.per_information_category = 'GB';
8826 
8827   --
8828   --Below cursor fetches the latest payroll run details of the current assignment
8829   CURSOR csr_last_payroll_action(p_asgid NUMBER, p_pre_pay_id NUMBER, p_asg_start DATE, p_start_year DATE, p_end_year DATE)
8830   IS
8831     SELECT
8832       /*+ USE_NL(paa, pact, ptp) */
8833       to_number(SUBSTR(MAX(lpad(paa.action_sequence,15,'0')
8834       || paa.assignment_action_id),16)) max_asg_act_id,
8835       MAX(pact.effective_date) effective_date
8836     FROM pay_assignment_actions paa,
8837       pay_payroll_actions pact,
8838       per_time_periods ptp,
8839       pay_assignment_actions paa1, --Prepayments
8840       pay_payroll_actions ppa1,    --Prepayments
8841       pay_action_interlocks pai    --Prepayments
8842     WHERE paa.assignment_id   = p_asgid
8843     AND paa.payroll_action_id = pact.payroll_action_id
8844     AND pact.time_period_id   = ptp.time_period_id
8845     AND pact.action_type     IN ('Q','R','I','V','B')
8846     AND paa.action_status    IN ('C','S')
8847     AND ptp.regular_payment_date BETWEEN  p_start_year AND p_end_year
8848     AND ppa1.payroll_action_id    = p_pre_pay_id --1160712
8849     AND ppa1.action_type         IN ('P','U')
8850     AND paa1.payroll_action_id    = ppa1.payroll_action_id
8851     AND paa1.assignment_action_id = pai.locking_action_id
8852     AND paa.assignment_action_id  = pai.locked_action_id;
8853 
8854   --Below cursor fetches all the payroll runs details of the current assignment processed in the current prepayment
8855   CURSOR csr_all_payroll_actions(p_asgid NUMBER, p_pre_pay_id NUMBER, p_asg_start DATE, p_start_year DATE, p_end_year DATE)
8856   IS
8857     SELECT
8858       /*+ USE_NL(paa, pact, ptp) */
8859       to_number(SUBSTR(MAX(lpad(paa.action_sequence,15,'0')
8860       || paa.assignment_action_id),16)) max_asg_act_id,
8861       MAX(pact.effective_date) effective_date
8862     FROM pay_assignment_actions paa,
8863       pay_payroll_actions pact,
8864       per_time_periods ptp,
8865       pay_assignment_actions paa1,    --Prepayments
8866       pay_payroll_actions ppa1,       --Prepayments
8867       pay_action_interlocks pai       --Prepayments
8868     WHERE paa.assignment_id   = p_asgid --46959
8869     AND paa.payroll_action_id = pact.payroll_action_id
8870     AND pact.time_period_id   = ptp.time_period_id
8871     AND pact.action_type     IN ('Q','R','I','V','B')
8872     AND paa.action_status    IN ('C','S')
8873     AND ptp.regular_payment_date BETWEEN  p_start_year AND p_end_year
8874     AND ppa1.payroll_action_id    = p_pre_pay_id --1160712
8875     AND ppa1.action_type         IN ('P','U')
8876     AND paa1.payroll_action_id    = ppa1.payroll_action_id
8877     AND paa1.assignment_action_id = pai.locking_action_id
8878     AND paa.assignment_action_id  = pai.locked_action_id
8879     GROUP BY paa.payroll_action_id
8880     ORDER BY max_asg_act_id;
8881 
8882   --Below cursor fetches further details of the current prepayment
8883   CURSOR csr_prepay_asg_act_details(p_asgid NUMBER, p_pre_pay_id NUMBER)
8884   IS
8885     SELECT paa.assignment_action_id,
8886       ppa.payroll_action_id,
8887       ppa.effective_date
8888     FROM pay_assignment_actions paa,
8889       pay_payroll_actions ppa
8890     WHERE paa.assignment_id   = p_asgid
8891     AND ppa.payroll_action_id = p_pre_pay_id
8892     AND paa.payroll_action_id = ppa.payroll_action_id;
8893 ---
8894   CURSOR csr_pay_act_details(p_asg_actid NUMBER)
8895   IS
8896     SELECT paa.payroll_action_id
8897     FROM pay_assignment_actions paa
8898     WHERE paa.assignment_action_id = p_asg_actid;
8899 
8900   --Below cursor verifies whether current payment for this assignment is already archived
8901   CURSOR csr_earlier_archived(p_last_asg_action_id NUMBER)
8902   IS
8903     SELECT DISTINCT fps_asg_act_id
8904     FROM pay_gb_fps_details
8905     WHERE payroll_asg_act_id = p_last_asg_action_id;
8906 
8907   --Below cursor fetches the already archived record for this assignment
8908   CURSOR csr_get_archived_record(p_assignment_action_id NUMBER, p_act_info_cat VARCHAR2)
8909   IS
8910     SELECT action_context_id,
8911       action_context_type,
8912       action_information_category,
8913       action_information1,
8914       action_information2,
8915       action_information3,
8916       action_information4,
8917       action_information5,
8918       action_information6,
8919       action_information7,
8920       action_information8,
8921       action_information9,
8922       action_information10,
8923       action_information11,
8924       action_information12,
8925       action_information13,
8926       action_information14,
8927       action_information15,
8928       action_information16,
8929       action_information17,
8930       action_information18,
8931       action_information19,
8932       action_information20,
8933       action_information21,
8934       action_information22,
8935       action_information23,
8936       action_information24,
8937       action_information25,
8938       action_information26,
8939       action_information27,
8940       action_information28,
8941       action_information29,
8942       action_information30,
8943       effective_date,
8944       assignment_id
8945     FROM pay_action_information pai
8946     WHERE pai.action_context_id         = p_assignment_action_id
8947     AND pai.action_context_type         = 'AAP'
8948     AND pai.action_information_category = p_act_info_cat;
8949 
8950   --Below cursor fetches archived records count
8951   CURSOR csr_archived_records_count(p_assignment_action_id NUMBER)
8952   IS
8953     SELECT COUNT(*)
8954     FROM pay_action_information pai
8955     WHERE pai.action_context_id = p_assignment_action_id;
8956 
8957   CURSOR csr_bacs_payment_exists (c_prepay_payroll_action_id NUMBER,
8958                                   c_prepay_asg_action_id NUMBER)
8959   IS
8960   SELECT 'Y'
8961    FROM pay_pre_payments ppp,
8962             pay_payment_types ppt,
8963             pay_org_payment_methods_f popf,
8964             pay_personal_payment_methods_f pppf,
8965             pay_external_accounts Orgkey,
8966             pay_external_accounts deskey,
8967             PAY_ASSIGNMENT_ACTIONS PAA,
8968             pay_payroll_actions ppa
8969           WHERE popf.ORG_PAYMENT_METHOD_ID    = ppp.ORG_PAYMENT_METHOD_ID
8970           AND pppf.personal_payment_method_ID = ppp.personal_payment_method_ID
8971           AND popf.PAYMENT_TYPE_ID            = ppt.PAYMENT_TYPE_ID
8972           AND ppt.PAYMENT_TYPE_NAME           = 'BACS Tape'
8973           AND popf.defined_balance_id is not null
8974           AND orgkey.external_account_id      = popf.external_account_id
8975           AND deskey.external_account_id      = pppf.external_account_id
8976           AND ppa.effective_date BETWEEN popf.effective_start_date AND popf.effective_end_date
8977           AND ppa.effective_date BETWEEN pppf.effective_start_date AND pppf.effective_end_date
8978           AND ppp.ASSIGNMENT_ACTION_ID = PAA.ASSIGNMENT_ACTION_ID
8979           AND ppa.PAYROLL_ACTION_ID = PAA.PAYROLL_ACTION_ID
8980           AND PAA.PAYROLL_ACTION_ID    = c_prepay_payroll_action_id --1129781
8981           AND PAA.ASSIGNMENT_ACTION_ID = c_prepay_asg_action_id;  --9849423
8982 
8983   CURSOR csr_total_payment (c_prepay_asg_action_id NUMBER)
8984   IS
8985   select (sum(ppp.value) * 100) amount
8986    from pay_pre_payments ppp,
8987         pay_org_payment_methods_f popmf,
8988         pay_assignment_actions paa,
8989         pay_payroll_actions ppa
8990    where ppp.ASSIGNMENT_ACTION_ID = c_prepay_asg_action_id
8991       and popmf.ORG_PAYMENT_METHOD_ID = ppp.ORG_PAYMENT_METHOD_ID
8992       and popmf.defined_balance_id is not null
8993       and ppa.payroll_action_id = paa.payroll_action_id
8994       and paa.assignment_action_id = ppp.assignment_action_id;
8995 
8996    CURSOR csr_total_payment_new(c_prepay_asg_action_id NUMBER)
8997    IS
8998    select (sum(ppp.value) * 100) amount
8999    from pay_pre_payments ppp
9000    where ASSIGNMENT_ACTION_ID = c_prepay_asg_action_id;
9001 
9002   --Below cursor fetches the latest payroll run details of the current assignment
9003   CURSOR csr_aggr_last_payroll_action(p_person_id NUMBER, p_pre_pay_id NUMBER, p_asg_start DATE, p_start_year DATE, p_end_year DATE)
9004   IS
9005     SELECT
9006       /*+ USE_NL(paa, pact, ptp) */
9007       to_number(SUBSTR(MAX(lpad(paa.action_sequence,15,'0')
9008       || paa.assignment_action_id),16)) max_asg_act_id,
9009       MAX(pact.effective_date) effective_date
9010     FROM pay_assignment_actions paa,
9011       per_all_assignments_f paaf,
9012       pay_payroll_actions pact,
9013       per_time_periods ptp,
9014       pay_assignment_actions paa1, --Prepayments
9015       pay_payroll_actions ppa1,    --Prepayments
9016       pay_action_interlocks pai    --Prepayments
9017     WHERE paa.assignment_id = paaf.assignment_id
9018     AND paaf.person_id = p_person_id
9019     AND paa.payroll_action_id = pact.payroll_action_id
9020     AND pact.time_period_id   = ptp.time_period_id
9021     AND pact.action_type     IN ('Q','R','B','I','V')
9022     AND paa.action_status    IN ('C','S')
9023     AND ptp.regular_payment_date BETWEEN NVL(p_asg_start, p_start_year) AND p_end_year
9024     AND ppa1.payroll_action_id    = p_pre_pay_id --1160712
9025     AND ppa1.action_type         IN ('P','U')
9026     AND paa1.payroll_action_id    = ppa1.payroll_action_id
9027     AND paa1.assignment_action_id = pai.locking_action_id
9028     AND paa.assignment_action_id  = pai.locked_action_id
9029     AND exists( select 1
9030                   from pay_pre_payments ppp
9031                  where ASSIGNMENT_ACTION_ID = paa1.assignment_action_id
9032                    and ppp.value <> 0);  --For the bug 16542698
9033 
9034 /**********************************************************************************************
9035      Below cursor fetches the details of the payroll runs processed for an aggregated employee.
9036      It fetches all the Payroll runs processed for a person provided if
9037                                 it ran after First FPS run date
9038                                 and not processed in any earlier FPS.
9039 *********************************************************************************************/
9040   CURSOR csr_aggr_all_payroll_actions(p_person_id NUMBER,
9041                                       p_asg_id NUMBER,
9042                                       p_last_asgact_id NUMBER,
9043                                       p_start_year DATE,
9044                                       p_end_year DATE,
9045                                       c_first_fps_eff_date DATE)
9046   IS
9047     SELECT  /*+ USE_NL(paa, pact, ptp) */
9048             to_number (substr (max (lpad (paa.action_sequence ,15,'0')
9049                                     || paa.assignment_action_id),16)) max_asg_act_id
9050            ,max (pact.effective_date) effective_date
9051     FROM    pay_assignment_actions paa
9052            ,per_all_assignments_f paaf
9053            ,pay_payroll_actions pact
9054            ,per_time_periods ptp
9055     WHERE   paa.assignment_id = paaf.assignment_id
9056     AND     paaf.person_id = p_person_id
9057     AND     paa.payroll_action_id = pact.payroll_action_id
9058     AND     pact.time_period_id = ptp.time_period_id
9059     AND     pact.action_type IN ('Q','R','B','I','V')
9060     AND     paa.action_status IN ('C','S')
9061     AND     ptp.regular_payment_date BETWEEN p_start_year
9062                                      AND     p_end_year
9063     AND     (
9064                     (
9065                             paa.assignment_action_id >
9066                             (
9067                             SELECT  nvl (max (payroll_asg_act_id),paa.assignment_action_id)
9068                             FROM    pay_gb_fps_details pgfd
9069                             WHERE   pgfd.person_id = p_person_id
9070                             )
9071                     AND     source_action_id IS NULL
9072                     )
9073             OR      (
9074                             (
9075                             SELECT  count (*)
9076                             FROM    pay_gb_fps_details pgfd
9077                             WHERE   pgfd.person_id = p_person_id
9078                             ) = 0
9079                     )
9080             )
9081     AND     ptp.regular_payment_date >= nvl (g_first_fps_run_date, c_first_fps_eff_date)
9082     AND     paa.assignment_action_id <= p_last_asgact_id
9083     GROUP BY paa.payroll_action_id
9084     ORDER BY max_asg_act_id;
9085 
9086   CURSOR csr_aggr_sequence_id(c_asg_act_id NUMBER)
9087   IS
9088   SELECT action_sequence
9089   FROM pay_assignment_actions
9090   WHERE assignment_action_id = c_asg_act_id;
9091 
9092   CURSOR csr_aggr_locking_asg_act_id(p_person_id NUMBER, p_action_sequence NUMBER)
9093   IS
9094 /*
9095                select null into dummy
9096                from   dual
9097                where  not exists
9098                   (select null
9099 */
9100 	SELECT  min (act.assignment_action_id)
9101 	FROM    pay_action_classifications class
9102 	       ,pay_payroll_actions pact
9103 	       ,pay_assignment_actions act
9104 	       ,per_all_assignments_f ass
9105 	       ,per_periods_of_service pos
9106 	WHERE   pos.person_id = p_person_id
9107 	AND     ass.period_of_service_id = pos.period_of_service_id
9108 	AND     act.assignment_id = ass.assignment_id
9109 	AND     act.action_sequence > p_action_sequence
9110 	AND     act.action_status IN ('C','S','M')
9111 	AND     act.payroll_action_id = pact.payroll_action_id
9112 	AND     pact.action_type = class.action_type
9113 	AND     class.classification_name = 'SEQUENCED';
9114 
9115 --  CURSOR csr_processed_in_prepayment(c_prepay_asgactid NUMBER, c_payroll_asgactid NUMBER)
9116   CURSOR csr_processed_in_prepayment(c_prepay_asgactid NUMBER, c_payroll_asgactid NUMBER, c_payroll_master_asgactid number)
9117   IS
9118 	SELECT  'Y' this_prepayment
9119         FROM pay_action_interlocks pai,
9120              pay_assignment_actions paa,
9121              pay_payroll_actions ppa
9122         WHERE paa.payroll_action_id = ppa.payroll_action_id
9123         AND paa.assignment_action_id = pai.locking_action_id
9124         AND ppa.action_type in ('P','U')
9125         AND ppa.payroll_action_id = g_pre_pact_id
9126         AND (pai.locked_action_id = c_payroll_asgactid
9127              OR  pai.locked_action_id = c_payroll_master_asgactid );
9128 
9129 /*
9130 	SELECT  'Y' this_prepayment
9131 	FROM    pay_action_interlocks pai
9132 	WHERE   locking_action_id = c_prepay_asgactid
9133 	AND     (locked_action_id = c_payroll_asgactid
9134   OR      locked_action_id = c_payroll_master_asgactid );
9135 */
9136 
9137 cursor csr_get_asg_id(c_asgactid number) is
9138 select distinct assignment_id
9139 from pay_assignment_actions
9140 where assignment_action_id = c_asgactid;
9141  -- Curosr to fetch the RTI Reporting flag and effective date of the assignment
9142    cursor csr_ni_rpt_flag(c_asg_id number) is
9143    select AEI_INFORMATION1, AEI_INFORMATION2 from per_assignment_extra_info where assignment_id = c_asg_id
9144    and AEI_INFORMATION_CATEGORY = 'GB_RTI_AGGREGATION';
9145 
9146 -- Cursor to fetch the RTI NI Reporting assignment for this person.
9147    cursor csr_get_ni_rpt_asg(c_asg_id number) is
9148    select
9149      paei.assignment_id , fnd_date.canonical_to_date(paei.AEI_INFORMATION2)
9150    from per_all_assignments_f paaf1, per_all_assignments_f paaf2 ,per_assignment_extra_info paei
9151    where paaf1.assignment_id = c_asg_id
9152    and paaf1.person_id = paaf2.person_id
9153    and paaf2.ASSIGNMENT_TYPE = 'E'
9154 
9155    and paei.assignment_id = paaf2.assignment_id
9156    and paei.AEI_INFORMATION_CATEGORY = 'GB_RTI_AGGREGATION'
9157    and paei. AEI_INFORMATION1 = 'Y'
9158    and p_effective_date between paaf1.effective_start_date and paaf1.effective_end_date
9159    and p_effective_date between paaf2.effective_start_date and paaf2.effective_end_date
9160    order by 2 desc;
9161 
9162 -- Cursor to fetch the previously archived details for the NI Reporting assignment.
9163    cursor csr_ni_asg_last_archived(c_asg_id number) is
9164    select
9165   assignment_id
9166  ,null
9167  ,null
9168  ,ACTION_INFORMATION_CATEGORY
9169  ,ACTION_INFORMATION1
9170  ,ACTION_INFORMATION2
9171  ,ACTION_INFORMATION3
9172  ,ACTION_INFORMATION4
9173  ,ACTION_INFORMATION5
9174  ,ACTION_INFORMATION6
9175  ,ACTION_INFORMATION7
9176  ,ACTION_INFORMATION8
9177  ,ACTION_INFORMATION9
9178  ,ACTION_INFORMATION10
9179  ,ACTION_INFORMATION11
9180  ,ACTION_INFORMATION12
9181  ,ACTION_INFORMATION13
9182  ,ACTION_INFORMATION14
9183  ,ACTION_INFORMATION15
9184  ,ACTION_INFORMATION16
9185  ,ACTION_INFORMATION17
9186  ,ACTION_INFORMATION18
9187  ,ACTION_INFORMATION19
9188  ,ACTION_INFORMATION20
9189  ,ACTION_INFORMATION21
9190  ,ACTION_INFORMATION22
9191  ,ACTION_INFORMATION23
9192  ,ACTION_INFORMATION24
9193  ,ACTION_INFORMATION25
9194  ,ACTION_INFORMATION26
9195  ,ACTION_INFORMATION27
9196  ,ACTION_INFORMATION28
9197  ,ACTION_INFORMATION29
9198  ,ACTION_INFORMATION30
9199  from pay_action_information where action_context_id  = (select max(FPS_ASG_ACT_ID) from pay_gb_fps_details where assignment_id = c_asg_id
9200    and FPS_PAY_ACT_ID <> g_payroll_action_id) --= 9789749
9201 and ACTION_CONTEXT_TYPE = 'AAP' and
9202 ACTION_INFORMATION_CATEGORY in( 'GB_RTI_FPS_ASG_DET1', 'GB_RTI_FPS_ASG_DET2');
9203 
9204 
9205    /***  Get the latest assignment_action ids for all the other assignments for this employer
9206          and get the YTD balance value for these action ids.
9207          Sum this with the current assignment NI YTD and then archive.
9208    ***/
9209        cursor csr_asg_act_oth_asgs(c_asg_id number) is
9210        select max(paa.assignment_action_id) asg_act_id from per_all_assignments_f paaf,
9211                    per_all_assignments_f paaf1,
9212                    pay_assignment_actions paa,
9213                    pay_payroll_actions ppa
9214        where paaf.assignment_id = c_asg_id
9215        and   paaf1.person_id = paaf.person_id
9216        and paaf1.assignment_id <> c_asg_id
9217        and paaf1.assignment_id = paa.assignment_id
9218        and paa.payroll_action_id = ppa.payroll_action_id
9219        and ppa.effective_date >= g_start_year
9220        and ppa.action_type     IN ('Q','R')
9221        and paa.action_status    IN ('C','S')
9222        group by paa.assignment_id;
9223 
9224 -- First FPS Cursors
9225 -- cursor to check whether this assignment processed in prepayment or not
9226 cursor csr_prepayment_made(pre_pay_id number) is
9227 SELECT  paa_pre.assignment_id
9228 FROM    pay_assignment_actions paa_pre
9229       , pay_assignment_actions paa_arcv
9230 WHERE   paa_arcv.assignment_action_id = p_assactid
9231 AND     paa_pre.payroll_action_id = pre_pay_id
9232 AND     paa_pre.assignment_id = paa_arcv.assignment_id;
9233 
9234 -- cursor to get assignment id using assignment action id parameter
9235 CURSOR csr_asg_id(c_asg_act_id NUMBER) IS
9236 SELECT  paa.assignment_id
9237 FROM    pay_assignment_actions paa
9238 WHERE   paa.assignment_action_id = c_asg_act_id;
9239 
9240 -- To fetch First FPS parameter
9241 /*CURSOR csr_parameter_info IS
9242 SELECT  substr (pay_gb_eoy_archive.get_parameter (legislative_parameters, 'FIRST_FPS'), 1,1) first_fps,
9243         SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'TAX_REF'),1,20) tax_ref
9244 FROM    pay_payroll_actions pact
9245       , pay_assignment_actions paa
9246 WHERE   paa.assignment_action_id = p_assactid
9247 AND     pact.payroll_action_id = paa.payroll_action_id;
9248 */
9249 
9250 -- get the defined balance id for specified balance and dimension
9251 cursor get_defined_balance_id
9252     (p_balance_name VARCHAR2, p_dimension_name VARCHAR2) IS
9253 SELECT  defined_balance_id
9254 FROM    pay_defined_balances db
9255       , pay_balance_types b
9256       , pay_balance_dimensions d
9257 WHERE   b.balance_name = p_balance_name
9258 AND     d.dimension_name = p_dimension_name
9259 AND     db.balance_type_id = b.balance_type_id
9260 AND     db.balance_dimension_id = d.balance_dimension_id
9261 AND     b.legislation_code = 'GB'
9262 AND     d.legislation_code = 'GB';
9263 
9264 -- to fetch last assignment action id for the given assignment
9265 cursor csr_last_action_firstfps(p_asgid NUMBER, p_asg_start DATE,
9266                          p_asg_end DATE, p_start_year DATE,
9267                          p_end_year DATE, l_payroll number) IS--, p_tax_ref_xfer VARCHAR2) IS
9268 SELECT  /*+ USE_NL(paa, pact, ptp) */
9269         to_number (substr (max (lpad (paa.action_sequence, 15
9270                                     , '0')
9271                                 || paa.assignment_action_id), 16))
9272       , max (pact.effective_date) effective_date
9273 FROM    pay_assignment_actions paa
9274       , pay_payroll_actions pact
9275       , per_time_periods ptp
9276 WHERE   paa.assignment_id = p_asgid
9277 AND     paa.payroll_action_id = pact.payroll_action_id
9278 AND     pact.payroll_id = l_payroll
9279 AND     pact.time_period_id = ptp.time_period_id
9280 AND     pact.action_type IN ('Q', 'R', 'B'
9281                            , 'I', 'V')
9282 AND     paa.action_status IN ('C', 'S')
9283 AND     ptp.regular_payment_date
9284         BETWEEN g_start_year
9285         AND     g_end_year;
9286 
9287 -- to fetch last assignment action id for the given assignment
9288 cursor csr_last_action(p_asgid NUMBER, p_asg_start DATE,
9289                          p_asg_end DATE, p_start_year DATE,
9290                          p_end_year DATE) IS--, p_tax_ref_xfer VARCHAR2) IS
9291 SELECT  /*+ USE_NL(paa, pact, ptp) */
9292         to_number (substr (max (lpad (paa.action_sequence, 15
9293                                     , '0')
9294                                 || paa.assignment_action_id), 16))
9295       , max (pact.effective_date) effective_date
9296 FROM    pay_assignment_actions paa
9297       , pay_payroll_actions pact
9298       , per_time_periods ptp
9299 WHERE   paa.assignment_id = p_asgid
9300 AND     paa.payroll_action_id = pact.payroll_action_id
9301 AND     pact.time_period_id = ptp.time_period_id
9302 AND     pact.action_type IN ('Q', 'R', 'B'
9303                            , 'I', 'V')
9304 AND     paa.action_status IN ('C', 'S')
9305 AND     ptp.regular_payment_date
9306         BETWEEN g_start_year
9307         AND     g_end_year;
9308 
9309 cursor csr_get_asg_no(p_asg_id number,p_effective_date date) is
9310 SELECT  assignment_number
9311 FROM    per_all_assignments_f
9312 WHERE   assignment_id = p_asg_id
9313 AND     p_effective_date BETWEEN effective_start_date
9314                          AND     effective_end_date
9315 ORDER BY effective_start_date;
9316 
9317 cursor csr_get_latest_asg_no(p_asg_id number,p_effective_date date) is
9318 SELECT  assignment_number
9319 FROM    per_all_assignments_f
9320 WHERE   assignment_id = p_asg_id
9321 ORDER BY effective_start_date;
9322 
9323 cursor csr_asg_act_processed_earlier(c_person_id number,
9324 c_asg_id number,
9325 c_cur_asg_action_id number) is
9326 select count(*)
9327 --into l_asg_act_processed_earlier
9328 from PAY_GB_FPS_DETAILS
9329 where PERSON_ID = c_person_id
9330 and ASSIGNMENT_ID = c_asg_id
9331 and PAYROLL_ASG_ACT_ID = c_cur_asg_action_id;
9332 
9333 cursor csr_chk_prepayment_run(c_assignment_action_id number) is
9334 select count(*) from pay_assignment_actions paa, --run
9335       pay_assignment_actions paa1, --Prepayments
9336       pay_payroll_actions ppa1,    --Prepayments
9337       pay_action_interlocks pai    --Prepayments
9338     where paa.assignment_action_id = c_assignment_action_id --9917796
9339     AND paa.assignment_action_id  = pai.locked_action_id
9340     AND paa1.assignment_action_id = pai.locking_action_id
9341     AND paa1.payroll_action_id    = ppa1.payroll_action_id
9342     AND ppa1.action_type         IN ('P','U');
9343 
9344   CURSOR csr_aggr_min_act_id( p_person_id NUMBER,
9345                               p_pre_pact_id NUMBER,
9346                               c_effective_date DATE)
9347   IS
9348 
9349     SELECT count(distinct act.assignment_action_id),
9350              min(act.assignment_action_id) assignment_action_id
9351     FROM pay_payroll_actions ppa,  --Current pactid
9352       pay_payroll_actions appa,    --Payroll Run
9353       pay_payroll_actions appa2,   --Prepayments
9354       pay_assignment_actions act,  --Payroll Run
9355       pay_assignment_actions act1, --Prepayments
9356       pay_action_interlocks pai,   --Prepayments
9357       per_all_assignments_f as1
9358     WHERE as1.person_id = p_person_id --45885
9359     AND appa.action_type     IN ('R','Q') -- Payroll Run or Quickpay Run
9360     AND act.payroll_action_id = appa.payroll_action_id
9361     AND act.source_action_id IS NULL
9362     AND as1.assignment_id     = act.assignment_id
9363     AND ppa.effective_date BETWEEN as1.effective_start_date AND as1.effective_end_date
9364     AND act.action_status         = 'C'
9365     AND act.assignment_action_id  = pai.locked_action_id
9366     AND act1.assignment_action_id = pai.locking_action_id
9367     AND act1.action_status        = 'C'
9368     AND act1.payroll_action_id    = appa2.payroll_action_id
9369     AND appa2.action_type        IN ('P','U') -- Prepayments or Quickpay Prepayments
9370     AND appa2.payroll_action_id   = p_pre_pact_id;
9371 
9372 -- source is the above cursor:csr_aggr_min_act_id
9373   CURSOR csr_ni_aggr_max_act_id( p_person_id NUMBER,
9374                                p_pre_pact_id NUMBER)
9375   IS
9376 
9377     SELECT  max(act.assignment_action_id) assignment_action_id
9378     FROM pay_payroll_actions ppa,  --Current pactid
9379       pay_payroll_actions appa,    --Payroll Run
9380       pay_payroll_actions appa2,   --Prepayments
9381       pay_assignment_actions act,  --Payroll Run
9382       pay_assignment_actions act1, --Prepayments
9383       pay_action_interlocks pai,   --Prepayments
9384       per_all_assignments_f as1
9385     WHERE as1.person_id = p_person_id --45885
9386     AND appa.action_type     IN ('R','Q') -- Payroll Run or Quickpay Run
9387     AND act.payroll_action_id = appa.payroll_action_id
9388     AND act.source_action_id IS NULL
9389     AND as1.assignment_id     = act.assignment_id
9390     AND ppa.effective_date BETWEEN as1.effective_start_date AND as1.effective_end_date
9391     AND act.action_status         = 'C'
9392     AND act.assignment_action_id  = pai.locked_action_id
9393     AND act1.assignment_action_id = pai.locking_action_id
9394     AND act1.action_status        = 'C'
9395     AND act1.payroll_action_id    = appa2.payroll_action_id
9396     AND appa2.action_type        IN ('P','U') -- Prepayments or Quickpay Prepayments
9397     AND appa2.payroll_action_id   = p_pre_pact_id;
9398 
9399 cursor csr_asg_in_prepay(c_person_id number)
9400 IS
9401 SELECT act.assignment_id assignment_id,
9402           max(act.assignment_action_id) asg_act_id
9403     FROM
9404       pay_payroll_actions ppa,  --Current pactid
9405       pay_payroll_actions appa,    --Payroll Run
9406       pay_payroll_actions appa2,   --Prepayments
9407       pay_assignment_actions act,  --Payroll Run
9408       pay_assignment_actions act1, --Prepayments
9409       pay_action_interlocks pai,   --Prepayments
9410       per_all_assignments_f as1
9411     WHERE
9412       ppa.payroll_action_id = g_payroll_action_id
9413     AND as1.person_id  = c_person_id --BETWEEN stperson AND endperson
9414     AND appa.action_type     IN ('R','Q') -- Payroll Run or Quickpay Run
9415     AND act.payroll_action_id = appa.payroll_action_id
9416     AND act.source_action_id IS NULL
9417     AND as1.assignment_id     = act.assignment_id
9418     AND ppa.effective_date BETWEEN as1.effective_start_date AND as1.effective_end_date
9419     AND act.action_status         = 'C'
9420     AND act.assignment_action_id  = pai.locked_action_id
9421     AND act1.assignment_action_id = pai.locking_action_id
9422     AND act1.action_status        = 'C'
9423     AND act1.payroll_action_id    = appa2.payroll_action_id
9424     AND appa2.action_type        IN ('P','U') -- Prepayments or Quickpay Prepayments
9425     AND appa2.payroll_action_id   = g_pre_pact_id
9426     group by act.assignment_id
9427     ORDER BY act.assignment_id;
9428 
9429 
9430   CURSOR csr_aggr_master_id(c_child_asg_act_id NUMBER)
9431   IS
9432   SELECT assignment_action_id
9433   FROM pay_assignment_actions
9434   WHERE source_action_id = c_child_asg_act_id;
9435 
9436   CURSOR csr_aggr_max_act_id( p_person_id NUMBER,
9437                               p_pre_pact_id NUMBER,
9438                               c_effective_date DATE)
9439   IS
9440 
9441     SELECT count(distinct act.assignment_action_id),
9442              max(act.assignment_action_id) assignment_action_id
9443     FROM pay_payroll_actions ppa,  --Current pactid
9444       pay_payroll_actions appa,    --Payroll Run
9445       pay_payroll_actions appa2,   --Prepayments
9446       pay_assignment_actions act,  --Payroll Run
9447       pay_assignment_actions act1, --Prepayments
9448       pay_action_interlocks pai,   --Prepayments
9449       per_all_assignments_f as1
9450     WHERE as1.person_id = p_person_id --45885
9451     AND appa.action_type     IN ('R','Q') -- Payroll Run or Quickpay Run
9452     AND act.payroll_action_id = appa.payroll_action_id
9453     AND act.source_action_id IS NULL
9454     AND as1.assignment_id     = act.assignment_id
9455     AND ppa.effective_date BETWEEN as1.effective_start_date AND as1.effective_end_date
9456     AND act.action_status         = 'C'
9457     AND act.assignment_action_id  = pai.locked_action_id
9458     AND act1.assignment_action_id = pai.locking_action_id
9459     AND act1.action_status        = 'C'
9460     AND act1.payroll_action_id    = appa2.payroll_action_id
9461     AND appa2.action_type        IN ('P','U') -- Prepayments or Quickpay Prepayments
9462     AND appa2.payroll_action_id   = p_pre_pact_id
9463     AND exists( select 1
9464                   from pay_pre_payments ppp
9465                  where ASSIGNMENT_ACTION_ID = act1.assignment_action_id
9466                    and ppp.value <> 0); --For the bug 16542698
9467 
9468   l_asg_primary_flag  VARCHAR2(1);
9469   l_per_agg_flag      VARCHAR2(1);
9470   l_aggr_archive_flag VARCHAR2(1);
9471   l_asg_id            NUMBER;
9472   l_effective_start_date DATE;
9473   l_effective_end_date DATE;
9474   l_last_asg_action_id NUMBER;
9475   l_last_effective_date DATE;
9476   l_asg_eff_start_date DATE;
9477   l_payroll_id               NUMBER;
9478   l_ni_process_type          VARCHAR2(50);
9479   l_dir_nic_calc_method      VARCHAR2(30);
9480   l_prepay_asg_action_id     NUMBER;
9481   l_prepay_payroll_action_id NUMBER;
9482   l_prepay_effective_date DATE;
9483   l_payroll_pact_id        NUMBER;
9484   l_person_id              NUMBER;
9485   l_earlier_archived_flag  VARCHAR2(1);
9486   l_earlier_fps_asg_act_id NUMBER;
9487   l_action_info_id         NUMBER(15);
9488   l_ovn                    NUMBER;
9489   l_archived_rec_count     NUMBER;
9490   l_counter                NUMBER;
9491   l_archived_context       VARCHAR2(30);
9492   l_payment_date DATE;
9493   l_ni_rpt_assact_id number;
9494   l_get_archived_rec csr_get_archived_record%rowtype;
9495   p_ni_a_balance act_info_rec;
9496   p_ni_b_balance act_info_rec;
9497   p_ni_c_balance act_info_rec;
9498   p_ni_d_balance act_info_rec;
9499   p_ni_e_balance act_info_rec;
9500   p_ni_j_balance act_info_rec;
9501   p_ni_l_balance act_info_rec;
9502 
9503   p_per_ni_a_balance act_info_rec;
9504   p_per_ni_b_balance act_info_rec;
9505   p_per_ni_c_balance act_info_rec;
9506   p_per_ni_d_balance act_info_rec;
9507   p_per_ni_e_balance act_info_rec;
9508   p_per_ni_j_balance act_info_rec;
9509   p_per_ni_l_balance act_info_rec;
9510 
9511   already_a      NUMBER := -1;
9512   already_b      NUMBER := -1;
9513   already_c      NUMBER := -1;
9514   already_d      NUMBER := -1;
9515   already_e      NUMBER := -1;
9516   already_j      NUMBER := -1;
9517   already_l      NUMBER := -1;
9518   already_a1      NUMBER := -1;
9519   already_b1      NUMBER := -1;
9520   already_c1      NUMBER := -1;
9521   already_d1      NUMBER := -1;
9522   already_e1      NUMBER := -1;
9523   already_j1      NUMBER := -1;
9524   already_l1      NUMBER := -1;
9525 
9526   l_asact_count_prepayed number;
9527   l_aggr_max_act_id number;
9528   l_report_det1_det2_flag varchar2(1);
9529 
9530     i              NUMBER;
9531   i_1              NUMBER;
9532   i_2              NUMBER;
9533   ni_contrib     NUMBER := 0;
9534   ni_contrib_ytd NUMBER := 0;
9535   ni_contrib_1     NUMBER := 0;
9536   ni_contrib_ytd_1 NUMBER := 0;
9537   ni_contrib_2     NUMBER := 0;
9538   ni_contrib_ytd_2 NUMBER := 0;
9539   l_bacs_payment_exists varchar2(1);
9540   l_hash_code varchar2(100);
9541   l_large_bacs_payment NUMBER := 0;
9542   l_total_payment NUMBER := 0;
9543   l_non_bacs_payment NUMBER := 0;
9544   l_max_prepay_act_id number;
9545   l_count_asg number;
9546 -- Declarations for First FPS
9547 
9548 l_assignment_id number;
9549 p_starter_set varchar2(1):= 'N';
9550 
9551 l_asg_f_id number;
9552 l_first_fps varchar2(10);
9553 l_first_fps_prepay_asg varchar2(10);
9554 l_temp_asg_id number;
9555 l_asg_val_flag varchar2(1);
9556 l_date_soy date;
9557 l_date_eoy date;
9558 l_tax_ref varchar2(30);
9559 l_effective_date date; -- cp Parameter
9560 l_date_flag boolean;
9561 l_prepayment_date date;
9562 l_assignment_number per_assignments_f.assignment_number%TYPE;
9563 l_per_ni_agg_flag varchar2(1);
9564 l_per_paye_agg_flag varchar2(1);
9565 l_cur_asg_action_id number;
9566 l_cur_last_effective_date date;
9567 l_aggr_sequence_id number;
9568 l_aggr_locking_asg_act_id number;
9569 l_tab_counter number;
9570 l_tab_proc_counter number;
9571 l_tab_not_proc_counter number;
9572 l_processed_in_prepayment varchar2(1);
9573 
9574 l_archive_det1_counter number;
9575 l_archive_det2_counter number;
9576 l_archive_ni_det_counter number;
9577 /*l_archive_det1_counter_local number;
9578 l_archive_det2_counter_local number;*/
9579 l_cur_asg_id number;
9580 l_single_payroll_run_exists number;
9581 l_asg_act_processed_earlier number;
9582 l_archive_flag varchar2(1);
9583 l_chk_prepayment_run number;
9584 l_fps_etext_asg_temp_flag VARCHAR2(1);
9585 
9586 l_asg_act_count number;
9587 l_aggr_min_act_id number;
9588 l_payroll_master_asgactid number;
9589 l_prepay_master_counter number;
9590 l_retry_req_flag varchar2(1) := 'N';
9591 l_cur_prepay_payroll_action_id number;
9592 l_rti_ni_proc_flag varchar2(1);
9593 l_rti_ni_proc_flag_1 varchar2(1);
9594 l_ni_aggr_max_act_id number;
9595 l_dummy              NUMBER;
9596 l_ni_max_asg_act_id number;
9597 l_ni_max_asg_act_date date;
9598 l_asg_primary_flag1   VARCHAR2(1);
9599 l_per_ni_agg_flag1    VARCHAR2(1);
9600 l_per_paye_agg_flag1  VARCHAR2(1);
9601 l_payroll_id1         NUMBER;
9602 l_rti_ni_proc_flag1 varchar2(1);
9603 l_last_asg_id NUMBER;
9604 l_last_asgact_id NUMBER;
9605 l_last_eff_date DATE;
9606 
9607    TYPE l_typ_payroll_asg_acts IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
9608         l_payroll_asg_acts l_typ_payroll_asg_acts;
9609    TYPE l_typ_proc_in_prepay IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
9610         l_proc_in_prepay l_typ_proc_in_prepay;
9611    TYPE l_typ_not_proc_in_prepay IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
9612         l_not_proc_in_prepay l_typ_not_proc_in_prepay;
9613 
9614 cursor chk_processed_in_prepay(c_cur_asg_action_id number) is
9615 select pai.locking_action_id
9616 from
9617 pay_action_interlocks pai,
9618 pay_payroll_actions ppa,
9619 pay_assignment_actions paa
9620 where pai.locked_action_id = c_cur_asg_action_id
9621 and ppa.action_type in ('P','U')
9622 and paa.payroll_action_id = ppa.payroll_action_id
9623 and paa.assignment_action_id = pai.locking_action_id;
9624 
9625 /* cursor csr_is_retry_request is
9626 select 'Y' from fnd_concurrent_programs fcp,
9627 fnd_concurrent_requests fcr,
9628 pay_payroll_actions ppa,
9629 pay_assignment_actions paa
9630 where paa.assignment_action_id = p_assactid
9631 and ppa.payroll_action_id = paa.payroll_action_id
9632 and ppa.request_id = fcr.request_id
9633 and fcr.CONCURRENT_PROGRAM_ID = fcp.CONCURRENT_PROGRAM_ID
9634 and CONCURRENT_PROGRAM_NAME =  'RETRY'; */
9635 
9636 -- Modified retry cursor
9637 cursor csr_is_retry_request is
9638 select 'Y' from
9639 pay_assignment_actions
9640 where assignment_action_id = p_assactid
9641 AND ACTION_STATUS = 'M';
9642 
9643 /* To get the payroll action id given assignment action id
9644 */
9645 cursor csr_prepay_payrol_act(c_asg_act_id number)
9646 is
9647   select paa.payroll_action_id
9648   from
9649    pay_assignment_actions paa
9650   where paa.assignment_action_id = c_asg_act_id;
9651 
9652 -- to check whether the given assignment is processed in given prepay payroll_action id
9653 cursor csr_rti_rpt_proc_prepay(c_ni_rpt_asg_id number,c_pre_pay_action_id number) is
9654   select 'Y' from pay_assignment_actions paa,
9655   pay_payroll_actions ppa
9656   where
9657   ppa.payroll_action_id = c_pre_pay_action_id
9658   and ppa.payroll_action_id = paa.payroll_action_id
9659   and paa.assignment_id = c_ni_rpt_asg_id
9660   and ppa.action_type    IN ('P','U')
9661   and paa.action_status  IN ('C','S');
9662 -- for ni only aggregation
9663 -- to get the latest payroll run assignment action id for the given assignment.
9664 cursor csr_get_latest_asg_action (c_asg_id number)
9665 is
9666 SELECT
9667             to_number (substr (max (lpad (paa.action_sequence ,15,'0')
9668                                     || paa.assignment_action_id),16)) max_asg_act_id
9669            , max(pact.effective_date) effective_date
9670 
9671     FROM    pay_assignment_actions paa
9672            ,pay_payroll_actions pact
9673            ,per_time_periods ptp
9674     WHERE   paa.assignment_id = c_asg_id
9675     AND     paa.payroll_action_id = pact.payroll_action_id
9676     AND     pact.time_period_id = ptp.time_period_id
9677     AND     pact.action_type IN ('Q','R','B','I','V')
9678     AND     paa.action_status IN ('C','S')
9679     AND     ptp.regular_payment_date BETWEEN g_start_year
9680                                      AND     g_end_year
9681 AND     ptp.regular_payment_date <= g_effective_date;
9682 
9683   CURSOR csr_last_aggr_asg(c_last_asgact_id number) is
9684   select distinct assignment_id
9685   from pay_assignment_actions
9686   where assignment_action_id = c_last_asgact_id;
9687 
9688 
9689   --Below cursor fetches the number of assignments processed in current prepayment request
9690   CURSOR csr_aggr_asgs_processed(p_person_id NUMBER, p_pre_pay_id NUMBER, p_start_year DATE, p_end_year DATE)
9691   IS
9692     SELECT count(distinct paa1.assignment_id)
9693     FROM pay_assignment_actions paa,
9694       per_all_assignments_f paaf,
9695       pay_payroll_actions pact,
9696       per_time_periods ptp,
9697       pay_assignment_actions paa1, --Prepayments
9698       pay_payroll_actions ppa1,    --Prepayments
9699       pay_action_interlocks pai    --Prepayments
9700     WHERE paa.assignment_id = paaf.assignment_id
9701     AND paaf.person_id = p_person_id
9702     AND paa.payroll_action_id = pact.payroll_action_id
9703     AND pact.time_period_id   = ptp.time_period_id
9704     AND pact.action_type     IN ('Q','R','B','I','V')
9705     AND paa.action_status    IN ('C','S')
9706     AND ptp.regular_payment_date BETWEEN p_start_year AND p_end_year
9707     AND ppa1.payroll_action_id    = p_pre_pay_id
9708     AND ppa1.action_type         IN ('P','U')
9709     AND paa1.payroll_action_id    = ppa1.payroll_action_id
9710     AND paa1.assignment_action_id = pai.locking_action_id
9711     AND paa.assignment_action_id  = pai.locked_action_id;
9712 
9713 -- To fetch First FPS parameter
9714 CURSOR csr_parameter_info IS
9715 SELECT fnd_date.canonical_to_date(SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'FIRST_FPS_DATE'),1,10)) first_fps_date,
9716        to_number(pay_gb_eoy_archive.get_parameter(legislative_parameters, 'PAYROLL_ID')) payroll_id
9717 FROM    pay_payroll_actions pact,
9718         pay_assignment_actions paa
9719 WHERE   paa.assignment_action_id = p_assactid
9720 AND     pact.payroll_action_id = paa.payroll_action_id;
9721 
9722 -- To get maximum assignment action id for the person
9723 cursor csr_get_max_asg_actid_person(person_id number,l_first_fps_eff_date date) is
9724 SELECT  /*+ USE_NL(paa, pact, ptp) */
9725         to_number (substr (max (lpad (paa.action_sequence, 15
9726                                     , '0')
9727                                 || paa.assignment_action_id), 16))
9728       , max (pact.effective_date) effective_date
9729 
9730 FROM   per_all_assignments_f paaf,
9731        pay_assignment_actions paa
9732       , pay_payroll_actions pact
9733       , per_time_periods ptp
9734 WHERE   paa.assignment_id = paaf.assignment_id
9735 and paaf.person_id = person_id
9736 AND     paa.payroll_action_id = pact.payroll_action_id
9737 AND     pact.time_period_id = ptp.time_period_id
9738 AND     pact.action_type IN ('Q', 'R', 'B'
9739                            , 'I', 'V')
9740 AND     paa.action_status IN ('C', 'S')
9741 AND     ptp.regular_payment_date
9742         BETWEEN g_start_year
9743         AND     l_first_fps_eff_date
9744 AND paaf.effective_start_date =
9745        ( select max(asg2.effective_start_date)
9746          from   per_all_assignments_f asg2
9747          where  asg2.assignment_id         = paaf.assignment_id
9748          and    asg2.assignment_type       = 'E'
9749          and    asg2.effective_start_date <= l_prepayment_date
9750        );
9751 
9752   --Below cursor fetches the basic details of the current assignment
9753   CURSOR csr_asg_num(c_asg_act_id NUMBER, c_cur_last_effective_date date)
9754   IS
9755     SELECT asg.assignment_number
9756     FROM per_all_assignments_f asg,
9757       pay_assignment_actions paa
9758     WHERE paa.assignment_action_id = c_asg_act_id
9759     AND paa.assignment_id          = asg.assignment_id
9760     AND c_cur_last_effective_date BETWEEN asg.effective_start_date AND asg.effective_end_date;
9761 
9762   CURSOR csr_get_starter_details(p_asg_id NUMBER)
9763   IS
9764     SELECT assignment_extra_info_id l_aei_id,
9765       aei_information8 starter_flag,
9766       aei_information9 pensioner_flag,
9767       aei_information19 expat_flag,
9768       object_version_number l_ovn
9769     FROM per_assignment_extra_info
9770     WHERE assignment_id  = p_asg_id
9771     AND information_type = 'GB_RTI_ASG_DETAILS';
9772 
9773 cursor csr_fps_check(p_asg_id number) is
9774 select count(*)
9775 from pay_assignment_actions paa,
9776 pay_payroll_actions ppa
9777 where paa.assignment_id = p_asg_id
9778 and paa.action_status ='C'
9779 and paa.assignment_action_id <> p_assactid
9780 and ppa.payroll_action_id = paa.payroll_action_id
9781 and ppa.report_type in ( 'RTI_FPS_REP' , 'RTI_FPS_REP_13');
9782 
9783   cursor csr_fps_action_exists(c_cur_asg_id number, c_payroll_action_id number) is
9784   select 'Y'
9785   from  pay_assignment_actions paa
9786   where paa.payroll_action_id = c_payroll_action_id
9787   and paa.assignment_id = c_cur_asg_id;
9788 
9789     l_aggr_asgs_processed number;
9790     l_first_fps_eff_date date;
9791 	l_payroll              NUMBER;
9792 	l_flag        VARCHAR2(1) :='Y';
9793 	l_gross number;
9794 	l_taxable number;
9795 	l_niable number;
9796 	l_gross_id number;
9797 	l_taxable_id number;
9798 	l_niable_id number;
9799 	min_asgactid number;
9800 	l_pact_id number;
9801 	l_new_starter csr_get_starter_details%rowtype;
9802 	l_aei_id        NUMBER;
9803 	l_fps_check NUMBER;
9804 	l_fps_action_exists VARCHAR2(1) :='N';
9805 
9806 BEGIN
9807 
9808 --archive_code begins here
9809   hr_utility.set_location('Entering the debug: '||l_proc,1);
9810   hr_utility.trace('p_assactid: '||p_assactid);
9811   hr_utility.trace('p_effective_date: '||p_effective_date);
9812 
9813 l_archive_tab_det3(0).act_info1 := NULL;
9814 l_archive_tab_det3(0).act_info2 := 0;
9815 l_archive_tab_det3(0).act_info3 := NULL;
9816 l_archive_tab_det3(0).act_info4 := 0;
9817 l_archive_tab_det3(0).act_info5 := NULL;
9818 l_archive_tab_det3(0).act_info6 := 0;
9819 l_archive_tab_det3(0).act_info7 := NULL;
9820 l_archive_tab_det3(0).act_info8 := NULL;
9821 l_archive_tab_det3(0).act_info9 := NULL;
9822 
9823 -- get the parameter values present in globals to local variables.
9824 l_first_fps := g_first_fps;
9825 l_tax_ref := g_tax_ref;
9826 
9827   OPEN csr_parameter_info;
9828   FETCH csr_parameter_info
9829   INTO l_first_fps_eff_date,l_payroll;
9830   CLOSE csr_parameter_info;
9831 
9832   hr_utility.trace('l_first_fps_eff_date: '||l_first_fps_eff_date);
9833 
9834   OPEN csr_asg_basic_details(p_assactid);
9835   FETCH csr_asg_basic_details INTO l_asg_id, l_asg_eff_start_date, l_person_id, l_assignment_number;
9836   CLOSE csr_asg_basic_details;
9837 
9838   hr_utility.trace('l_asg_id: '||l_asg_id);
9839   hr_utility.trace('l_asg_eff_start_date: '||l_asg_eff_start_date);
9840   hr_utility.trace('l_person_id: '||l_person_id);
9841 
9842    open csr_is_retry_request;
9843    fetch csr_is_retry_request into l_retry_req_flag;
9844    close csr_is_retry_request;
9845 --RETRY LOGIC
9846 if l_retry_req_flag = 'Y' then
9847 
9848 hr_utility.trace('RETRY : l_retry_req_flag: '|| l_retry_req_flag);
9849 open csr_get_starter_details(l_asg_id);
9850 fetch csr_get_starter_details into l_new_starter;
9851 close csr_get_starter_details;
9852 
9853 hr_utility.trace('RETRY : l_new_starter.l_aei_id       : '|| l_new_starter.l_aei_id);
9854 hr_utility.trace('RETRY : l_new_starter.l_ovn          : '|| l_new_starter.l_ovn);
9855 hr_utility.trace('RETRY : l_new_starter.starter_flag   : '|| l_new_starter.starter_flag);
9856 hr_utility.trace('RETRY : l_new_starter.pensioner_flag : '|| l_new_starter.pensioner_flag);
9857 hr_utility.trace('RETRY : l_new_starter.expat_flag     : '|| l_new_starter.expat_flag);
9858 
9859 if l_new_starter.starter_flag = 'Y'  OR l_new_starter.pensioner_flag = 'Y' OR l_new_starter.expat_flag = 'Y'  THEN
9860 
9861 hr_utility.trace('RTI Sent checked.');
9862 
9863 open csr_fps_check(l_asg_id);
9864 fetch csr_fps_check into l_fps_check;
9865 close csr_fps_check;
9866 
9867 if l_fps_check = 0 then
9868 
9869 			hr_utility.trace('RETRY : Reset is required.');
9870 
9871 	--EXPAT Flag
9872     IF l_new_starter.starter_flag = 'Y' THEN
9873       IF l_new_starter.l_ovn             IS NOT NULL THEN
9874         hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false, p_object_version_number => l_new_starter.l_ovn, p_assignment_extra_info_id => l_new_starter.l_aei_id, p_aei_information_category => 'GB_RTI_ASG_DETAILS',
9875         p_aei_information8 => 'N');
9876       END IF;
9877     END IF;
9878     --PENSIONER Flag
9879     IF l_new_starter.pensioner_flag = 'Y' THEN
9880       IF l_new_starter.l_ovn             IS NOT NULL THEN
9881         hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false, p_object_version_number => l_new_starter.l_ovn, p_assignment_extra_info_id => l_new_starter.l_aei_id, p_aei_information_category => 'GB_RTI_ASG_DETAILS',
9882         p_aei_information9 => 'N');
9883       END IF;
9884     END IF;
9885     --STARTER Flag
9886     IF l_new_starter.expat_flag = 'Y' THEN
9887       IF  l_new_starter.l_ovn            IS NOT NULL THEN
9888         hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false, p_object_version_number => l_new_starter.l_ovn, p_assignment_extra_info_id => l_new_starter.l_aei_id, p_aei_information_category => 'GB_RTI_ASG_DETAILS',
9889         p_aei_information19 => 'N');
9890       END IF;
9891     END IF;
9892 
9893 end if; --l_fps_check
9894 
9895 end if;
9896 
9897 end if; --l_retry_req_flag
9898 
9899 --RETRY Logic ends here
9900 
9901   --delete from pay_gb_fps_details in case of retry
9902   if l_retry_req_flag = 'Y' then
9903 	hr_utility.trace('RETRY : l_retry_req_flag: '|| l_retry_req_flag);
9904 	select payroll_action_id into l_pact_id
9905 	from pay_assignment_actions where assignment_action_id = p_assactid;
9906 	open get_min_asg_actid(l_person_id,p_assactid);
9907 	fetch get_min_asg_actid into min_asgactid;
9908 	close get_min_asg_actid;
9909 
9910 	if min_asgactid = p_assactid then
9911 	  hr_utility.trace('deleting form pay_gb_fps_details in case of retry ');
9912 	  delete from pay_gb_fps_details
9913  	  where person_ID = l_person_id
9914 	  and FPS_PAY_ACT_ID = l_pact_id;
9915 	end if;
9916  end if;
9917 
9918    OPEN csr_asg(p_assactid, p_effective_date);
9919    FETCH csr_asg INTO l_asg_primary_flag1, l_per_ni_agg_flag1, l_per_paye_agg_flag1, l_payroll_id1;
9920    CLOSE csr_asg;
9921       hr_utility.trace('l_per_ni_agg_flag1: '|| l_per_ni_agg_flag1);
9922       hr_utility.trace('l_per_paye_agg_flag1: '|| l_per_paye_agg_flag1);
9923 
9924 --------------------------------------------------------------------------------------------------------------------
9925 
9926 -- First FPS Changes
9927 if l_first_fps = 'Y' then
9928 
9929 hr_utility.trace(l_asg_f_id||' First FPS Flag : '||l_first_fps);
9930 
9931 -- To get Assignment ID
9932 open csr_asg_id(p_assactid);
9933 fetch csr_asg_id into l_asg_f_id;
9934 close csr_asg_id;
9935 
9936 open csr_prepayment_made(g_pre_pact_id);
9937 fetch csr_prepayment_made into l_temp_asg_id;
9938 if csr_prepayment_made%found then
9939 	l_first_fps_prepay_asg := 'Y';
9940 else
9941   l_first_fps_prepay_asg := 'N';
9942 end if;
9943 close csr_prepayment_made;
9944 
9945 hr_utility.trace(l_asg_f_id||' First FPS Pre Pay Asg : '||l_first_fps_prepay_asg );
9946 
9947 -- PAYE Aggr logic starts
9948 /* Below code is to filter out PAYE Aggregated employees as part of First FPS processing logic
9949 if they have any of the assignments processed in current prepayment request id.
9950 That means this employee would be processed in main PAYE Aggregated code itself. */
9951 
9952 l_aggr_asgs_processed := 0;
9953 IF l_per_paye_agg_flag1  = 'Y' THEN
9954         hr_utility.trace('PAYE Aggregated Assignment');
9955         hr_utility.trace('l_person_id:'||l_person_id);
9956         hr_utility.trace('g_pre_pact_id:'||g_pre_pact_id);
9957         hr_utility.trace('g_start_year:'||g_start_year);
9958         hr_utility.trace('g_end_year:'||g_end_year);
9959 
9960         OPEN csr_aggr_asgs_processed(l_person_id, g_pre_pact_id, g_start_year, g_end_year);
9961         FETCH csr_aggr_asgs_processed
9962         INTO l_aggr_asgs_processed;
9963         hr_utility.trace('l_aggr_asgs_processed:' ||l_aggr_asgs_processed);
9964         CLOSE csr_aggr_asgs_processed;
9965 
9966         IF l_aggr_asgs_processed > 0 THEN
9967                 l_first_fps_prepay_asg := 'Y';
9968                 hr_utility.trace('There is a payment made for one of his asgs in current prepayment request');
9969         END IF;
9970 END IF;
9971 
9972 -- PAYE Aggr logic ends
9973 
9974 end if; -- First FPS if ends
9975 
9976 
9977 --for NI only aggregation
9978    l_rti_ni_proc_flag1 := 'Y';
9979 
9980 if nvl(l_per_ni_agg_flag1,'N') = 'Y' and nvl(l_per_paye_agg_flag1,'N') <> 'Y' then
9981       hr_utility.trace('l_asg_f_id1: '|| l_asg_f_id);
9982       hr_utility.trace('g_pre_pact_id: '|| g_pre_pact_id);
9983 
9984 --Check whether the assignment is first fps assignment or not
9985 --If yes process the assignment else skip the assignment
9986 
9987     OPEN get_defined_balance_id('Gross Pay','_ASG_TD_YTD');
9988     FETCH get_defined_balance_id INTO l_gross_id;
9989     CLOSE get_defined_balance_id;
9990 
9991     OPEN get_defined_balance_id('Taxable Pay','_ASG_TD_YTD');
9992     FETCH get_defined_balance_id INTO l_taxable_id;
9993     CLOSE get_defined_balance_id;
9994 
9995     OPEN get_defined_balance_id('NIable Pay','_ASG_TD_YTD');
9996     FETCH get_defined_balance_id INTO l_niable_id;
9997     CLOSE get_defined_balance_id;
9998 
9999 		-- To get latest assignment action id for the assignment
10000 		OPEN csr_last_action_firstfps(l_asg_f_id, l_effective_start_date,
10001 		                       l_effective_end_date, l_date_soy,
10002 		                       l_prepayment_date,l_payroll);
10003 		FETCH csr_last_action_firstfps INTO  l_last_asg_action_id,
10004 		                              l_last_effective_date;
10005 
10006 		CLOSE csr_last_action_firstfps;
10007 
10008       hr_utility.trace('l_last_asg_action_id: '|| l_last_asg_action_id);
10009       hr_utility.trace('l_last_effective_date: '|| l_last_effective_date);
10010 
10011 -- Fetching balances
10012   IF l_last_asg_action_id IS NOT NULL THEN
10013       l_gross   := pay_balance_pkg.get_value(l_gross_id,l_last_asg_action_id);
10014       IF l_gross <= 0 THEN
10015 			l_taxable   := pay_balance_pkg.get_value(l_taxable_id,l_last_asg_action_id);
10016       END IF;
10017 
10018 			IF l_taxable <= 0 THEN
10019 			l_niable   := pay_balance_pkg.get_value(l_niable_id,l_last_asg_action_id);
10020       end if;
10021   END IF;
10022 
10023  IF l_gross > 0 or l_taxable > 0 or l_niable > 0 THEN
10024     hr_utility.trace('Assignment '||l_asg_f_id||' has YTD values');
10025  ELSE
10026     hr_utility.trace('Assignment '||l_asg_f_id||' has No YTD values.');
10027     l_flag:= 'N';
10028  END IF;
10029 
10030 -- Assignment is not First FPS Assignment
10031 if l_flag = 'N' then
10032   -- skip the NI aggregation logic if the current asg is not processed in this
10033   -- pre payments. This would be processed as part of max asg_act_id for this pre payment.
10034      open csr_rti_rpt_proc_prepay(l_asg_f_id,g_pre_pact_id);
10035      fetch csr_rti_rpt_proc_prepay into l_rti_ni_proc_flag1;
10036      if csr_rti_rpt_proc_prepay%NOTFOUND then
10037          hr_utility.trace('Not processed in this prepayment.');
10038          l_rti_ni_proc_flag1 := 'N';
10039      end if;
10040      close csr_rti_rpt_proc_prepay;
10041      hr_utility.trace('l_rti_ni_proc_flag1: '|| l_rti_ni_proc_flag1);
10042 end if;
10043 
10044 end if;  --nvl(l_per_ni_agg_flag1,'N') = 'Y' and nvl(l_per_paye_agg_flag1,'N') <> 'Y
10045 
10046 
10047 if l_first_fps = 'Y' and l_first_fps_prepay_asg = 'N' and nvl(l_rti_ni_proc_flag1,'N') = 'Y' then
10048 l_prepayment_date := g_prepayment_date;
10049 
10050 hr_utility.trace(l_asg_f_id||'Entering First FPS Logic');
10051 
10052 l_effective_date := l_prepayment_date;
10053 g_effective_date := l_prepayment_date;
10054 
10055 -- Tax Year Start and End
10056       If l_effective_date >= to_date('06-04-'||substr(to_char(l_effective_date,'YYYY/MON/DD'),1,4),'DD-MM-YYYY' ) Then
10057          l_date_soy := to_date('06-04-'||substr(to_char(l_effective_date,'YYYY/MON/DD'),1,4),'DD-MM-YYYY' ) ;
10058          l_date_eoy := to_date('05-04-'||to_char(to_number(substr(to_char(l_effective_date,'YYYY/MON/DD'),1,4))+1 ),'DD-MM-YYYY')  ;
10059       Else
10060          l_date_soy := to_date('06-04-'||to_char(to_number(substr(to_char(l_effective_date,'YYYY/MON/DD'),1,4))-1 ),'DD-MM-YYYY')  ;
10061          l_date_eoy := to_date('05-04-'||substr(to_char(l_effective_date,'YYYY/MON/DD'),1,4),'DD-MM-YYYY') ;
10062       End If;
10063 
10064 hr_utility.trace(l_date_soy||'start tax');
10065 hr_utility.trace(l_date_eoy||'end tax');
10066 
10067 -- To get latest assignment action id for the assignment
10068 OPEN csr_last_action(l_asg_f_id, l_effective_start_date,
10069                        l_effective_end_date, l_date_soy,
10070                        l_prepayment_date);
10071 FETCH csr_last_action INTO  l_last_asg_action_id,
10072                               l_last_effective_date;
10073 
10074 CLOSE csr_last_action;
10075 
10076 
10077   hr_utility.trace('After csr_last_action, l_last_asg_action_id='||l_last_asg_action_id);
10078   hr_utility.trace('l_last_effective_date='||fnd_date.date_to_displaydate(l_last_effective_date));
10079   --
10080 
10081     hr_utility.set_location('Fetching person details ',10);
10082     l_archive_person := fetch_person_rec(p_assactid, l_last_effective_date,l_last_effective_date,l_archive_tab(0));
10083 
10084     hr_utility.set_location('Fetching address details ',20);
10085     l_archive_addr := fetch_address_rec(l_archive_tab(0).person_id,
10086                                         l_archive_tab(0).assignment_id,
10087                                         l_last_effective_date,
10088                                         l_archive_tab(1));
10089 
10090     hr_utility.set_location('Fetching Assignment details ',30);
10091     l_archive_asg_det1 := fetch_fps_asg_det1(l_asg_eff_start_date,
10092                                              l_last_effective_date,
10093                                              p_assactid,
10094                                              l_last_asg_action_id,
10095                                              'N',
10096                                              l_archive_tab(0),
10097                                              l_archive_tab(2), p_starter_set);
10098 
10099     l_date_flag := fetch_start_date(l_asg_f_id,l_effective_date,l_last_effective_date,l_tax_ref,l_date_soy,p_starter_set,l_archive_tab(2));
10100 
10101 IF l_per_paye_agg_flag1  = 'Y' THEN
10102     hr_utility.set_location('Calling fetch_first_fps_agg_asg_det2',30);
10103     l_archive_asg_det2 := fetch_first_fps_agg_asg_det2(l_last_asg_action_id,l_asg_f_id,l_last_effective_date,l_archive_tab(3));
10104 ELSE
10105     hr_utility.set_location('Calling fetch_first_fps_asg_det2',30);
10106     l_archive_asg_det2 := fetch_first_fps_asg_det2(l_last_asg_action_id,l_asg_f_id,l_last_effective_date,l_archive_tab(3));
10107 END IF;
10108 
10109     hr_utility.set_location('Fetching Details3',30);
10110     l_archive_asg_det1 := fetch_asg_det3(    l_archive_tab(0).assignment_id,
10111                                              l_last_asg_action_id,
10112                                              l_archive_tab_det3(0),'N');
10113 
10114     hr_utility.set_location('End Fetching Details3',30);
10115 
10116 	i                              := 3;
10117 
10118    -- OPEN csr_all_payroll_actions(l_asg_id, g_pre_pact_id, l_asg_eff_start_date, g_start_year,g_end_year);
10119 OPEN csr_last_action(l_asg_f_id, l_effective_start_date,
10120                        l_effective_end_date, l_date_soy,
10121                        l_prepayment_date);
10122       FETCH csr_last_action
10123       INTO l_last_asg_action_id,
10124         l_last_effective_date;
10125 
10126      hr_utility.trace(l_asg_f_id||' FIRST FPS ASG Inside NI calculation.');
10127 
10128 IF l_per_paye_agg_flag1  = 'Y' THEN
10129     hr_utility.set_location('Calling get_ni_bal_paye_aggr_for_asg',30);
10130       pay_gb_fps_ni_and_others_13.get_ni_bal_paye_aggr_for_asg(l_asg_f_id,
10131                                                        l_last_asg_action_id,
10132                                                        p_ni_a_balance,
10133                                                        p_ni_b_balance,
10134                                                        p_ni_c_balance,
10135                                                        p_ni_d_balance,
10136                                                        p_ni_e_balance,
10137                                                        p_ni_j_balance,
10138                                                        p_ni_l_balance);
10139 
10140 --NI only Aggregation
10141 ELSIF nvl(l_per_ni_agg_flag1,'N') = 'Y' and nvl(l_per_paye_agg_flag1,'N') <> 'Y' then
10142 
10143 	 --Get NI RTI reporting  assignment
10144    open csr_get_ni_rpt_asg(l_asg_f_id);
10145    fetch csr_get_ni_rpt_asg into l_ni_rpt_asg_id,l_ni_rpt_date;
10146    close csr_get_ni_rpt_asg;
10147    hr_utility.set_location('l_ni_rpt_asg_id: ' || l_ni_rpt_asg_id || ' l_ni_rpt_date: ' || l_ni_rpt_date,1000);
10148    hr_utility.set_location('NI reporting assignment for the assignment: ' || l_asg_f_id || 'is ' ||l_ni_rpt_asg_id ,1000);
10149 
10150  if  l_ni_rpt_asg_id <> l_asg_f_id then
10151  -- Non RTI reporting assignment
10152     hr_utility.set_location('Calling get_ni_balances_for_asg for non Ni RTI reporting assignment',30);
10153       pay_gb_fps_ni_and_others_13.get_ni_balances_for_asg(l_last_asg_action_id,
10154                                                        p_ni_a_balance,
10155                                                        p_ni_b_balance,
10156                                                        p_ni_c_balance,
10157                                                        p_ni_d_balance,
10158                                                        p_ni_e_balance,
10159                                                        p_ni_j_balance,
10160                                                        p_ni_l_balance);
10161 else
10162 --RTI Reporting Assignment
10163     hr_utility.set_location('Calling get_ni_balances_for_asg for Ni RTI reporting assignment',30);
10164 -- get the max assingment action id prcessed in this prepayment
10165 -- get the YTD values for that assignment action id
10166 open csr_get_max_asg_actid_person(l_archive_tab(0).person_id,l_first_fps_eff_date);
10167 fetch csr_get_max_asg_actid_person   INTO l_last_asg_action_id,l_last_effective_date;
10168 close csr_get_max_asg_actid_person;
10169 
10170 -- Fetching Person Level YTDs
10171 pay_gb_fps_ni_and_others_13.get_ni_only_bal_rti_rpt(l_last_asg_action_id,
10172                                                        p_ni_a_balance,
10173                                                        p_ni_b_balance,
10174                                                        p_ni_c_balance,
10175                                                        p_ni_d_balance,
10176                                                        p_ni_e_balance,
10177                                                        p_ni_j_balance,
10178                                                        p_ni_l_balance);
10179 
10180 END IF;
10181 
10182 ELSE
10183 -- Non Aggregation
10184 hr_utility.set_location('Calling get_ni_balances_for_asg',30);
10185       pay_gb_fps_ni_and_others_13.get_ni_balances_for_asg(l_last_asg_action_id,
10186                                                        p_ni_a_balance,
10187                                                        p_ni_b_balance,
10188                                                        p_ni_c_balance,
10189                                                        p_ni_d_balance,
10190                                                        p_ni_e_balance,
10191                                                        p_ni_j_balance,
10192                                                        p_ni_l_balance);
10193 
10194 END IF;
10195 
10196       IF (p_ni_a_balance.act_info1 IS NOT NULL) THEN
10197         IF already_a                =  -1 THEN
10198           i                        := i+1;
10199           already_a                := i;
10200         END IF;
10201 
10202         l_archive_tab(already_a).assignment_id        := l_archive_tab(0).assignment_id;
10203         l_archive_tab(already_a).action_info_category := 'GB_RTI_FPS_NI_DET';
10204         l_archive_tab(already_a).act_info1            := p_ni_a_balance.act_info1;
10205         l_archive_tab(already_a).act_info2            := 0;
10206         l_archive_tab(already_a).act_info3            := p_ni_a_balance.act_info3;
10207         l_archive_tab(already_a).act_info4            := p_ni_a_balance.act_info4;
10208         l_archive_tab(already_a).act_info5            := p_ni_a_balance.act_info5;
10209         l_archive_tab(already_a).act_info6            := p_ni_a_balance.act_info6;
10210         l_archive_tab(already_a).act_info7            := p_ni_a_balance.act_info7;
10211         l_archive_tab(already_a).act_info8            := p_ni_a_balance.act_info8;
10212         l_archive_tab(already_a).act_info9            := 0;
10213         l_archive_tab(already_a).act_info10           := 0;
10214         l_archive_tab(already_a).act_info11            := p_ni_a_balance.act_info11;
10215       END IF;
10216       -- For Category B
10217       IF (p_ni_b_balance.act_info1 IS NOT NULL) THEN
10218         IF already_b                =  -1 THEN
10219           i                        := i+1;
10220           already_b                := i;
10221         END IF;
10222         l_archive_tab(already_b).assignment_id        := l_archive_tab(0).assignment_id;
10223         l_archive_tab(already_b).action_info_category := 'GB_RTI_FPS_NI_DET';
10224         l_archive_tab(already_b).act_info1            := p_ni_b_balance.act_info1;
10225         l_archive_tab(already_b).act_info2            := 0;
10226         l_archive_tab(already_b).act_info3            := p_ni_b_balance.act_info3;
10227         l_archive_tab(already_b).act_info4            := p_ni_b_balance.act_info4;
10228         l_archive_tab(already_b).act_info5            := p_ni_b_balance.act_info5;
10229         l_archive_tab(already_b).act_info6            := p_ni_b_balance.act_info6;
10230         l_archive_tab(already_b).act_info7            := p_ni_b_balance.act_info7;
10231         l_archive_tab(already_b).act_info8            := p_ni_b_balance.act_info8;
10232         l_archive_tab(already_b).act_info9            := 0;
10233         l_archive_tab(already_b).act_info10           := 0;
10234         l_archive_tab(already_b).act_info11            := p_ni_b_balance.act_info11;
10235       END IF;
10236       -- For Category C
10237       IF (p_ni_c_balance.act_info1 IS NOT NULL) THEN
10238         IF already_c                =  -1 THEN
10239           i                        := i+1;
10240           already_c                := i;
10241         END IF;
10242         l_archive_tab(already_c).assignment_id        := l_archive_tab(0).assignment_id;
10243         l_archive_tab(already_c).action_info_category := 'GB_RTI_FPS_NI_DET';
10244         l_archive_tab(already_c).act_info1            := p_ni_c_balance.act_info1;
10245         l_archive_tab(already_c).act_info2            := 0;
10246         l_archive_tab(already_c).act_info3            := p_ni_c_balance.act_info3;
10247         l_archive_tab(already_c).act_info4            := p_ni_c_balance.act_info4;
10248         l_archive_tab(already_c).act_info5            := p_ni_c_balance.act_info5;
10249         l_archive_tab(already_c).act_info6            := p_ni_c_balance.act_info6;
10250         l_archive_tab(already_c).act_info7            := p_ni_c_balance.act_info7;
10251         l_archive_tab(already_c).act_info8            := p_ni_c_balance.act_info8;
10252         l_archive_tab(already_c).act_info9            := 0;
10253         l_archive_tab(already_c).act_info10           := 0;
10254         l_archive_tab(already_c).act_info11            := p_ni_c_balance.act_info11;
10255       END IF;
10256       --For Category D
10257       IF (p_ni_d_balance.act_info1 IS NOT NULL) THEN
10258         IF already_d                =  -1 THEN
10259           i                        := i+1;
10260           already_d                := i;
10261         END IF;
10262         l_archive_tab(already_d).assignment_id        := l_archive_tab(0).assignment_id;
10263         l_archive_tab(already_d).action_info_category := 'GB_RTI_FPS_NI_DET';
10264         l_archive_tab(already_d).act_info1            := p_ni_d_balance.act_info1;
10265         l_archive_tab(already_d).act_info2            := 0;
10266         l_archive_tab(already_d).act_info3            := p_ni_d_balance.act_info3;
10267         l_archive_tab(already_d).act_info4            := p_ni_d_balance.act_info4;
10268         l_archive_tab(already_d).act_info5            := p_ni_d_balance.act_info5;
10269         l_archive_tab(already_d).act_info6            := p_ni_d_balance.act_info6;
10270         l_archive_tab(already_d).act_info7            := p_ni_d_balance.act_info7;
10271         l_archive_tab(already_d).act_info8            := p_ni_d_balance.act_info8;
10272         l_archive_tab(already_d).act_info9            := 0;
10273         l_archive_tab(already_d).act_info10           := 0;
10274         l_archive_tab(already_d).act_info11            := p_ni_d_balance.act_info11;
10275       END IF;
10276       -- For Category E
10277       IF (p_ni_e_balance.act_info1 IS NOT NULL) THEN
10278         IF already_e                =  -1 THEN
10279           i                        := i+1;
10280           already_e                := i;
10281         END IF;
10282         l_archive_tab(already_e).assignment_id        := l_archive_tab(0).assignment_id;
10283         l_archive_tab(already_e).action_info_category := 'GB_RTI_FPS_NI_DET';
10284         l_archive_tab(already_e).act_info1            := p_ni_e_balance.act_info1;
10285         l_archive_tab(already_e).act_info2            := 0;
10286         l_archive_tab(already_e).act_info3            := p_ni_e_balance.act_info3;
10287         l_archive_tab(already_e).act_info4            := p_ni_e_balance.act_info4;
10288         l_archive_tab(already_e).act_info5            := p_ni_e_balance.act_info5;
10289         l_archive_tab(already_e).act_info6            := p_ni_e_balance.act_info6;
10290         l_archive_tab(already_e).act_info7            := p_ni_e_balance.act_info7;
10291         l_archive_tab(already_e).act_info8            := p_ni_e_balance.act_info8;
10292         l_archive_tab(already_e).act_info9            := 0;
10293         l_archive_tab(already_e).act_info10           := 0;
10294         l_archive_tab(already_e).act_info11            := p_ni_e_balance.act_info11;
10295       END IF;
10296       -- For Category J
10297       IF (p_ni_j_balance.act_info1 IS NOT NULL) THEN
10298         IF already_j                =  -1 THEN
10299           i                        := i+1;
10300           already_j                := i;
10301         END IF;
10302         l_archive_tab(already_j).assignment_id        := l_archive_tab(0).assignment_id;
10303         l_archive_tab(already_j).action_info_category := 'GB_RTI_FPS_NI_DET';
10304         l_archive_tab(already_j).act_info1            := p_ni_a_balance.act_info1;
10305         l_archive_tab(already_j).act_info2            := 0;
10306         l_archive_tab(already_j).act_info3            := p_ni_a_balance.act_info3;
10307         l_archive_tab(already_j).act_info4            := p_ni_a_balance.act_info4;
10308         l_archive_tab(already_j).act_info5            := p_ni_a_balance.act_info5;
10309         l_archive_tab(already_j).act_info6            := p_ni_a_balance.act_info6;
10310         l_archive_tab(already_j).act_info7            := p_ni_a_balance.act_info7;
10311         l_archive_tab(already_j).act_info8            := p_ni_a_balance.act_info8;
10312         l_archive_tab(already_j).act_info9            := 0;
10313         l_archive_tab(already_j).act_info10           := 0;
10314         l_archive_tab(already_j).act_info11            := p_ni_j_balance.act_info11;
10315       END IF;
10316       -- For Category L
10317       IF (p_ni_l_balance.act_info1 IS NOT NULL) THEN
10318         IF already_l                =  -1 THEN
10319           i                        := i+1;
10320           already_l                := i;
10321         END IF;
10322         l_archive_tab(already_l).assignment_id        := l_archive_tab(0).assignment_id;
10323         l_archive_tab(already_l).action_info_category := 'GB_RTI_FPS_NI_DET';
10324         l_archive_tab(already_l).act_info1            := p_ni_l_balance.act_info1;
10325         l_archive_tab(already_l).act_info2            := 0;
10326         l_archive_tab(already_l).act_info3            := p_ni_l_balance.act_info3;
10327         l_archive_tab(already_l).act_info4            := p_ni_l_balance.act_info4;
10328         l_archive_tab(already_l).act_info5            := p_ni_l_balance.act_info5;
10329         l_archive_tab(already_l).act_info6            := p_ni_l_balance.act_info6;
10330         l_archive_tab(already_l).act_info7            := p_ni_l_balance.act_info7;
10331         l_archive_tab(already_l).act_info8            := p_ni_l_balance.act_info8;
10332         l_archive_tab(already_l).act_info9            := 0;
10333         l_archive_tab(already_l).act_info10           := 0;
10334         l_archive_tab(already_l).act_info11            := p_ni_l_balance.act_info11;
10335       END IF;
10336 
10337     FOR k IN 4..i
10338     LOOP
10339       IF l_archive_tab(k).act_info10 IS NOT NULL THEN
10340         ni_contrib_ytd := NVL(ni_contrib_ytd,0) + l_archive_tab(k).act_info8;
10341       END IF;
10342     END LOOP;
10343 
10344     l_archive_tab(3).act_info5  := NVL(ni_contrib_ytd,0);
10345     l_archive_tab(3).act_info24 := 0;--NVL(ni_contrib,0);
10346 
10347 -- In NI only aggregation, non RTI Reporting assignment set the NI YTDs to 0
10348 IF nvl(l_per_ni_agg_flag1,'N') = 'Y' and nvl(l_per_paye_agg_flag1,'N') <> 'Y' then
10349  if  l_ni_rpt_asg_id <> l_asg_f_id then
10350                FOR k IN 4..i
10351                LOOP
10352                      if l_archive_tab(k).act_info1 is not null then
10353                       hr_utility.trace('NON RPT act_info1' || l_archive_tab(k).act_info1);
10354                       l_archive_tab(k).act_info3 := 0;
10355                       l_archive_tab(k).act_info4 := 0;
10356                       l_archive_tab(k).act_info5 := 0;
10357                       l_archive_tab(k).act_info6 := 0;
10358                       l_archive_tab(k).act_info7 := 0;
10359                       l_archive_tab(k).act_info8 := 0;
10360                      end if;
10361                END LOOP;
10362 end if;
10363 END IF;
10364 
10365 
10366 set_address_fields(l_archive_tab(1),l_archive_tab(0),l_archive_tab(2));
10367 pay_gb_rti_fps_validate_13.person_address_validations(p_assactid, sysdate, l_archive_tab,l_per_addr_val_flag);
10368 pay_gb_rti_fps_validate_13.assignment_validations(p_assactid, sysdate, l_archive_tab,l_asg_val_flag);
10369 l_fps_etext_ni_flag := 'Y';
10370 l_fps_ni_val_err    := FALSE;
10371 
10372  FOR i_count IN 4..i
10373     LOOP
10374       hr_utility.set_location ('Calling FPS NI validations', 10);
10375       pay_gb_rti_fps_validate_13.ni_validations(p_assactid, p_effective_date, l_archive_tab,i_count,l_fps_etext_ni_flag);
10376       IF l_fps_etext_ni_flag = 'Y'
10377       THEN
10378         l_fps_ni_val_err := TRUE;
10379       END IF;
10380 
10381 END LOOP;
10382 
10383 IF l_archive_person AND l_archive_addr AND l_archive_asg_det1 AND l_archive_asg_det2 THEN
10384       IF l_per_addr_val_flag = 'Y' OR l_asg_val_flag = 'Y' OR l_fps_ni_val_err  -- If validation fails , that record will not be archived.
10385         THEN
10386         hr_utility.set_location('Validation failed, raise error.',999);
10387         raise error_found;
10388       ELSE
10389         hr_utility.set_location('Validation successful, archive data.',999);
10390         insert_archive_row(p_assactid, p_effective_date,l_archive_tab);
10391         insert_archive_row(p_assactid, p_effective_date,l_archive_tab_det3);
10392       END IF;
10393     ELSE
10394       hr_utility.set_location('Archiving Error - assignment action id ' || p_assactid ,999);
10395       raise error_found;
10396     END IF;
10397 
10398  hr_utility.trace(l_asg_f_id||'Leaving First FPS Logic');
10399 
10400 else  -- First Fps and First Fps Prepayment else starts
10401  hr_utility.trace(l_asg_f_id||'Entering FPS Logic');
10402 -- FIRST FPS changes ends
10403 
10404   --*****************************************************************************************************
10405   -- Below code is to verify whether current payment for this assignment is already archived while
10406   -- processing any other future payments as part of running some other FPS Archive Process.
10407   -- In that case, fetch those records only and archive the same again.
10408   -- This is to make sure that always we submit the maximum amounts payed in that period.
10409   -- This ensures the correct values at HMRC even if the previous values gets overridden at HMRC.
10410   --*****************************************************************************************************
10411 
10412   OPEN csr_last_payroll_action(l_asg_id, g_pre_pact_id, l_asg_eff_start_date, g_start_year,g_end_year);
10413   FETCH csr_last_payroll_action
10414   INTO l_last_asg_action_id,
10415     l_last_effective_date;
10416   CLOSE csr_last_payroll_action;
10417 
10418   hr_utility.trace('l_last_asg_action_id: '||l_last_asg_action_id);
10419   hr_utility.trace('l_last_effective_date: '||l_last_effective_date);
10420   ---
10421 
10422   OPEN csr_get_payment_date(l_last_asg_action_id);
10423   FETCH csr_get_payment_date INTO l_payment_date;
10424   CLOSE csr_get_payment_date;
10425 
10426   hr_utility.trace('l_payment_date: '||l_payment_date);
10427   g_effective_date := l_payment_date;
10428 
10429   OPEN csr_asg(p_assactid, g_effective_date);
10430   FETCH csr_asg INTO l_asg_primary_flag, l_per_ni_agg_flag, l_per_paye_agg_flag, l_payroll_id;
10431   CLOSE csr_asg;
10432 
10433   hr_utility.trace('l_asg_primary_flag: '||l_asg_primary_flag);
10434   hr_utility.trace('l_per_paye_agg_flag: '||l_per_paye_agg_flag);
10435     hr_utility.trace('l_per_ni_agg_flag: '||l_per_ni_agg_flag);
10436   hr_utility.trace('l_payroll_id: '||l_payroll_id);
10437 
10438     hr_utility.trace('l_asg_id: '||l_asg_id);
10439     hr_utility.trace('l_asg_eff_start_date: '||l_asg_eff_start_date);
10440     hr_utility.trace('l_asg_primary_flag: '||l_asg_primary_flag);
10441     hr_utility.trace('l_per_agg_flag: '||l_per_agg_flag);
10442     hr_utility.trace('l_payroll_id: '||l_payroll_id);
10443     hr_utility.trace('g_start_year: '||g_start_year);
10444     hr_utility.trace('g_end_year: '||g_end_year);
10445     hr_utility.trace('g_pre_pact_id: '||g_pre_pact_id);
10446 
10447   --*****************************************************************************************************
10448   -- Below code processes all non-aggregated assignments
10449   --*****************************************************************************************************
10450 
10451     IF (l_per_paye_agg_flag <> 'Y' and l_per_ni_agg_flag <> 'Y') THEN
10452 
10453     hr_utility.trace('Entered Non-Aggregated Code');
10454 
10455     OPEN csr_last_payroll_action(l_asg_id, g_pre_pact_id, l_asg_eff_start_date, g_start_year,g_end_year);
10456     FETCH csr_last_payroll_action
10457     INTO l_last_asg_action_id,
10458       l_last_effective_date;
10459     CLOSE csr_last_payroll_action;
10460 
10461     OPEN csr_prepay_asg_act_details(l_asg_id, g_pre_pact_id);
10462     FETCH csr_prepay_asg_act_details
10463     INTO l_prepay_asg_action_id,
10464       l_prepay_payroll_action_id,
10465       l_prepay_effective_date;
10466     CLOSE csr_prepay_asg_act_details;
10467 
10468     hr_utility.trace('l_prepay_asg_action_id: '||l_prepay_asg_action_id);
10469     hr_utility.trace('l_prepay_payroll_action_id: '||l_prepay_payroll_action_id);
10470     hr_utility.trace('l_prepay_effective_date: '||l_prepay_effective_date);
10471 
10472     hr_utility.trace('l_last_asg_action_id: '||l_last_asg_action_id);
10473     hr_utility.trace('l_last_effective_date: '||l_last_effective_date);
10474     l_start_date  := l_asg_eff_start_date;
10475     l_end_date    := g_effective_date;
10476 
10477 ---
10478 
10479 l_bacs_payment_exists := 'N';
10480 
10481   OPEN csr_bacs_payment_exists (l_prepay_payroll_action_id,l_prepay_asg_action_id);
10482   FETCH csr_bacs_payment_exists INTO l_bacs_payment_exists;
10483   CLOSE csr_bacs_payment_exists;
10484 
10485 begin
10486   if (l_bacs_payment_exists = 'Y') then
10487   l_hash_code := PAY_GB_FPS_NI_AND_OTHERS_13.fetch_HASH_FPS_ASG(g_pre_pact_id, l_asg_id, l_large_bacs_payment);
10488   else
10489   l_hash_code := null;
10490   end if;
10491 exception
10492 when others then
10493 populate_run_msg(p_assactid, 'Hash error '||SQLERRM||' for the assignment ' || l_assignment_number|| '.');
10494 fnd_file.put_line (fnd_file.LOG,'Hash error '||SQLERRM||' for the assignment ' || l_assignment_number|| '.');
10495 raise_application_error(-20001,'Hash error '||SQLERRM||' for the assignment ' || l_assignment_number|| '.');
10496 end;
10497 
10498     hr_utility.trace('l_large_bacs_payment: '||l_large_bacs_payment);
10499     hr_utility.trace('l_hash_code: '||l_hash_code);
10500 
10501 ---
10502 
10503   OPEN csr_total_payment (l_prepay_asg_action_id);
10504   FETCH csr_total_payment INTO l_total_payment;
10505   CLOSE csr_total_payment;
10506 
10507     hr_utility.trace('l_total_payment: '||l_total_payment);
10508 
10509     l_non_bacs_payment := l_total_payment - l_large_bacs_payment;
10510 
10511     hr_utility.trace('l_non_bacs_payment: '||l_non_bacs_payment);
10512 ---
10513 
10514     hr_utility.set_location('Fetching person details ',10);
10515     l_archive_person := fetch_person_rec(p_assactid, l_asg_eff_start_date,g_effective_date,l_archive_tab(0));
10516     ---
10517     hr_utility.set_location('Fetching address details ',20);
10518     l_archive_addr := fetch_address_rec(l_archive_tab(0).person_id,
10519                                         l_archive_tab(0).assignment_id,
10520                                         g_effective_date,
10521                                         l_archive_tab(1));
10522     l_person_id    := l_archive_tab(0).person_id;
10523     --Fetching assignments details for FPS
10524     hr_utility.set_location('Fetching Assignment details ',30);
10525     l_archive_asg_det1 := fetch_fps_asg_det1(l_asg_eff_start_date,
10526                                              g_effective_date,
10527                                              p_assactid,
10528                                              l_last_asg_action_id,
10529                                              'Y',
10530                                              l_archive_tab(0),
10531                                              l_archive_tab(2),
10532                                              p_starter_set);
10533 
10534     hr_utility.set_location('Assignment Hash Code to archive record4',30);
10535     l_archive_tab(2).act_info28 := l_hash_code;
10536 
10537     hr_utility.set_location('Fetching Details3',30);
10538     l_archive_asg_det1 := fetch_asg_det3(    l_archive_tab(0).assignment_id,
10539                                              l_last_asg_action_id,
10540                                              l_archive_tab_det3(0));
10541 
10542     hr_utility.set_location('End Fetching Details3',30);
10543 
10544     --****************************
10545     i                              := 3;
10546     l_archive_tab(3).assignment_id := l_asg_id;
10547 
10548     OPEN csr_all_payroll_actions(l_asg_id, g_pre_pact_id, l_asg_eff_start_date, g_start_year,g_end_year);
10549     LOOP
10550       FETCH csr_all_payroll_actions
10551       INTO l_last_asg_action_id,
10552         l_last_effective_date;
10553       EXIT
10554     WHEN csr_all_payroll_actions%NOTFOUND;
10555 
10556       pay_gb_fps_ni_and_others_13.get_ni_balances_for_asg(l_last_asg_action_id,
10557                                                        p_ni_a_balance,
10558                                                        p_ni_b_balance,
10559                                                        p_ni_c_balance,
10560                                                        p_ni_d_balance,
10561                                                        p_ni_e_balance,
10562                                                        p_ni_j_balance,
10563                                                        p_ni_l_balance);
10564       IF (p_ni_a_balance.act_info1 IS NOT NULL) THEN
10565         IF already_a                =  -1 THEN
10566           i                        := i+1;
10567           already_a                := i;
10568         END IF;
10569 
10570         l_archive_tab(already_a).assignment_id        := l_archive_tab(0).assignment_id;
10571         l_archive_tab(already_a).action_info_category := 'GB_RTI_FPS_NI_DET';
10572         l_archive_tab(already_a).act_info1            := p_ni_a_balance.act_info1;
10573         l_archive_tab(already_a).act_info2            := NVL(l_archive_tab(already_a).act_info2,0) + nvl(p_ni_a_balance.act_info2,0);
10574         l_archive_tab(already_a).act_info3            := p_ni_a_balance.act_info3;
10575         l_archive_tab(already_a).act_info4            := p_ni_a_balance.act_info4;
10576         l_archive_tab(already_a).act_info5            := p_ni_a_balance.act_info5;
10577         l_archive_tab(already_a).act_info6            := p_ni_a_balance.act_info6;
10578         l_archive_tab(already_a).act_info7            := p_ni_a_balance.act_info7;
10579         l_archive_tab(already_a).act_info8            := p_ni_a_balance.act_info8;
10580         l_archive_tab(already_a).act_info9            := NVL(l_archive_tab(already_a).act_info9 ,0) + nvl(p_ni_a_balance.act_info9,0);
10581         l_archive_tab(already_a).act_info10           := NVL(l_archive_tab(already_a).act_info10 ,0) + nvl(p_ni_a_balance.act_info10,0);
10582         l_archive_tab(already_a).act_info11            := p_ni_a_balance.act_info11;
10583 
10584       END IF;
10585       -- For Category B
10586       IF (p_ni_b_balance.act_info1 IS NOT NULL) THEN
10587         IF already_b                =  -1 THEN
10588           i                        := i+1;
10589           already_b                := i;
10590         END IF;
10591         l_archive_tab(already_b).assignment_id        := l_archive_tab(0).assignment_id;
10592         l_archive_tab(already_b).action_info_category := 'GB_RTI_FPS_NI_DET';
10593         l_archive_tab(already_b).act_info1            := p_ni_b_balance.act_info1;
10594         l_archive_tab(already_b).act_info2            := NVL(l_archive_tab(already_b).act_info2,0) + nvl(p_ni_b_balance.act_info2,0);
10595         l_archive_tab(already_b).act_info3            := p_ni_b_balance.act_info3;
10596         l_archive_tab(already_b).act_info4            := p_ni_b_balance.act_info4;
10597         l_archive_tab(already_b).act_info5            := p_ni_b_balance.act_info5;
10598         l_archive_tab(already_b).act_info6            := p_ni_b_balance.act_info6;
10599         l_archive_tab(already_b).act_info7            := p_ni_b_balance.act_info7;
10600         l_archive_tab(already_b).act_info8            := p_ni_b_balance.act_info8;
10601         l_archive_tab(already_b).act_info9           := NVL(l_archive_tab(already_b).act_info9 ,0) +nvl( p_ni_b_balance.act_info9,0);
10602         l_archive_tab(already_b).act_info10           := NVL(l_archive_tab(already_b).act_info10 ,0) + nvl(p_ni_b_balance.act_info10,0);
10603         l_archive_tab(already_b).act_info11            := p_ni_b_balance.act_info11;
10604       END IF;
10605       -- For Category C
10606       IF (p_ni_c_balance.act_info1 IS NOT NULL) THEN
10607         IF already_c                =  -1 THEN
10608           i                        := i+1;
10609           already_c                := i;
10610         END IF;
10611         l_archive_tab(already_c).assignment_id        := l_archive_tab(0).assignment_id;
10612         l_archive_tab(already_c).action_info_category := 'GB_RTI_FPS_NI_DET';
10613         l_archive_tab(already_c).act_info1            := p_ni_c_balance.act_info1;
10614         l_archive_tab(already_c).act_info2            := NVL(l_archive_tab(already_c).act_info2,0) + nvl(p_ni_c_balance.act_info2,0);
10615         l_archive_tab(already_c).act_info3            := p_ni_c_balance.act_info3;
10616         l_archive_tab(already_c).act_info4            := p_ni_c_balance.act_info4;
10617         l_archive_tab(already_c).act_info5            := p_ni_c_balance.act_info5;
10618         l_archive_tab(already_c).act_info6            := p_ni_c_balance.act_info6;
10619         l_archive_tab(already_c).act_info7            := p_ni_c_balance.act_info7;
10620         l_archive_tab(already_c).act_info8            := p_ni_c_balance.act_info8;
10621         l_archive_tab(already_c).act_info9           := NVL(l_archive_tab(already_c).act_info9 ,0) + nvl(p_ni_c_balance.act_info9,0);
10622         l_archive_tab(already_c).act_info10           := NVL(l_archive_tab(already_c).act_info10 ,0) + nvl(p_ni_c_balance.act_info10,0);
10623         l_archive_tab(already_c).act_info11            := p_ni_c_balance.act_info11;
10624       END IF;
10625       --For Category D
10626       IF (p_ni_d_balance.act_info1 IS NOT NULL) THEN
10627         IF already_d                =  -1 THEN
10628           i                        := i+1;
10629           already_d                := i;
10630         END IF;
10631         l_archive_tab(already_d).assignment_id        := l_archive_tab(0).assignment_id;
10632         l_archive_tab(already_d).action_info_category := 'GB_RTI_FPS_NI_DET';
10633         l_archive_tab(already_d).act_info1            := p_ni_d_balance.act_info1;
10634         l_archive_tab(already_d).act_info2            := NVL(l_archive_tab(already_d).act_info2,0) + nvl(p_ni_d_balance.act_info2,0);
10635         l_archive_tab(already_d).act_info3            := p_ni_d_balance.act_info3;
10636         l_archive_tab(already_d).act_info4            := p_ni_d_balance.act_info4;
10637         l_archive_tab(already_d).act_info5            := p_ni_d_balance.act_info5;
10638         l_archive_tab(already_d).act_info6            := p_ni_d_balance.act_info6;
10639         l_archive_tab(already_d).act_info7            := p_ni_d_balance.act_info7;
10640         l_archive_tab(already_d).act_info8            := p_ni_d_balance.act_info8;
10641         l_archive_tab(already_d).act_info9           := NVL(l_archive_tab(already_d).act_info9,0) + nvl(p_ni_d_balance.act_info9,0);
10642         l_archive_tab(already_d).act_info10           := NVL(l_archive_tab(already_d).act_info10,0) + nvl(p_ni_d_balance.act_info10,0);
10643         l_archive_tab(already_d).act_info11            := p_ni_d_balance.act_info11;
10644       END IF;
10645       -- For Category E
10646       IF (p_ni_e_balance.act_info1 IS NOT NULL) THEN
10647         IF already_e                =  -1 THEN
10648           i                        := i+1;
10649           already_e                := i;
10650         END IF;
10651         l_archive_tab(already_e).assignment_id        := l_archive_tab(0).assignment_id;
10652         l_archive_tab(already_e).action_info_category := 'GB_RTI_FPS_NI_DET';
10653         l_archive_tab(already_e).act_info1            := p_ni_e_balance.act_info1;
10654         l_archive_tab(already_e).act_info2            := NVL(l_archive_tab(already_e).act_info2,0) + nvl(p_ni_e_balance.act_info2,0);
10655         l_archive_tab(already_e).act_info3            := p_ni_e_balance.act_info3;
10656         l_archive_tab(already_e).act_info4            := p_ni_e_balance.act_info4;
10657         l_archive_tab(already_e).act_info5            := p_ni_e_balance.act_info5;
10658         l_archive_tab(already_e).act_info6            := p_ni_e_balance.act_info6;
10659         l_archive_tab(already_e).act_info7            := p_ni_e_balance.act_info7;
10660         l_archive_tab(already_e).act_info8            := p_ni_e_balance.act_info8;
10661         l_archive_tab(already_e).act_info9           := NVL(l_archive_tab(already_e).act_info9 ,0) + nvl(p_ni_e_balance.act_info9,0);
10662         l_archive_tab(already_e).act_info10           := NVL(l_archive_tab(already_e).act_info10 ,0) + nvl(p_ni_e_balance.act_info10,0);
10663         l_archive_tab(already_e).act_info11            := p_ni_e_balance.act_info11;
10664       END IF;
10665       -- For Category J
10666       IF (p_ni_j_balance.act_info1 IS NOT NULL) THEN
10667         IF already_j                =  -1 THEN
10668           i                        := i+1;
10669           already_j                := i;
10670         END IF;
10671         l_archive_tab(already_j).assignment_id        := l_archive_tab(0).assignment_id;
10672         l_archive_tab(already_j).action_info_category := 'GB_RTI_FPS_NI_DET';
10673         l_archive_tab(already_j).act_info1            := p_ni_j_balance.act_info1;
10674         l_archive_tab(already_j).act_info2            := NVL(l_archive_tab(already_j).act_info2,0) + nvl(p_ni_j_balance.act_info2,0);
10675         l_archive_tab(already_j).act_info3            := p_ni_j_balance.act_info3;
10676         l_archive_tab(already_j).act_info4            := p_ni_j_balance.act_info4;
10677         l_archive_tab(already_j).act_info5            := p_ni_j_balance.act_info5;
10678         l_archive_tab(already_j).act_info6            := p_ni_j_balance.act_info6;
10679         l_archive_tab(already_j).act_info7            := p_ni_j_balance.act_info7;
10680         l_archive_tab(already_j).act_info8            := p_ni_j_balance.act_info8;
10681         l_archive_tab(already_j).act_info9           := NVL(l_archive_tab(already_j).act_info9 ,0) + nvl(p_ni_j_balance.act_info9,0);
10682         l_archive_tab(already_j).act_info10           := NVL(l_archive_tab(already_j).act_info10 ,0) + nvl(p_ni_j_balance.act_info10,0);
10683         l_archive_tab(already_j).act_info11            := p_ni_j_balance.act_info11;
10684       END IF;
10685       -- For Category L
10686       IF (p_ni_l_balance.act_info1 IS NOT NULL) THEN
10687         IF already_l                =  -1 THEN
10688           i                        := i+1;
10689           already_l                := i;
10690         END IF;
10691         l_archive_tab(already_l).assignment_id        := l_archive_tab(0).assignment_id;
10692         l_archive_tab(already_l).action_info_category := 'GB_RTI_FPS_NI_DET';
10693         l_archive_tab(already_l).act_info1            := p_ni_l_balance.act_info1;
10694         l_archive_tab(already_l).act_info2            := NVL(l_archive_tab(already_l).act_info2,0) + nvl(p_ni_l_balance.act_info2,0);
10695         l_archive_tab(already_l).act_info3            := p_ni_l_balance.act_info3;
10696         l_archive_tab(already_l).act_info4            := p_ni_l_balance.act_info4;
10697         l_archive_tab(already_l).act_info5            := p_ni_l_balance.act_info5;
10698         l_archive_tab(already_l).act_info6            := p_ni_l_balance.act_info6;
10699         l_archive_tab(already_l).act_info7            := p_ni_l_balance.act_info7;
10700         l_archive_tab(already_l).act_info8            := p_ni_l_balance.act_info8;
10701         l_archive_tab(already_l).act_info9           := NVL(l_archive_tab(already_l).act_info9 ,0) + nvl(p_ni_l_balance.act_info9,0);
10702         l_archive_tab(already_l).act_info10           := NVL(l_archive_tab(already_l).act_info10 ,0) + nvl(p_ni_l_balance.act_info10,0);
10703         l_archive_tab(already_l).act_info11            := p_ni_l_balance.act_info11;
10704       END IF;
10705 
10706       l_archive_asg_det2 := fetch_fps_asg_det2(l_last_asg_action_id,l_asg_id,l_archive_tab(3));
10707 
10708       OPEN csr_pay_act_details(l_last_asg_action_id);
10709       FETCH csr_pay_act_details INTO l_payroll_pact_id;
10710       CLOSE csr_pay_act_details;
10711 
10712       INSERT
10713       INTO PAY_GB_FPS_DETAILS
10714         (
10715           ASSIGNMENT_ID,
10716           PERSON_ID,
10717           FPS_ASG_ACT_ID,
10718           FPS_PAY_ACT_ID,
10719           FPS_EFFECTIVE_DATE,
10720           PREPAY_ASG_ACT_ID,
10721           PREPAY_PAY_ACT_ID,
10722           PREPAY_EFFECTIVE_DATE,
10723           PAYROLL_ASG_ACT_ID,
10724           PAYROLL_PAY_ACT_ID,
10725           PAYROLL_EFFECTIVE_DATE
10726         )
10727         VALUES
10728         (
10729           l_asg_id,
10730           l_person_id,
10731           p_assactid,
10732           g_payroll_action_id,
10733           g_fps_effective_date,
10734           l_prepay_asg_action_id,
10735           l_prepay_payroll_action_id,
10736           l_prepay_effective_date,
10737           l_last_asg_action_id,
10738           l_payroll_pact_id,
10739           l_last_effective_date
10740         );
10741 
10742     END LOOP;
10743 
10744     CLOSE csr_all_payroll_actions;
10745 
10746     FOR k IN 4..i
10747     LOOP
10748       IF l_archive_tab(k).act_info10 IS NOT NULL THEN
10749         ni_contrib  := NVL(ni_contrib,0) + l_archive_tab(k).act_info10;
10750         ni_contrib_ytd := NVL(ni_contrib_ytd,0) + l_archive_tab(k).act_info8;
10751       END IF;
10752     END LOOP;
10753 
10754     hr_utility.trace( 'value of i :' || i);
10755     hr_utility.trace('Assignment id : ' || l_asg_id);
10756     hr_utility.trace('ni_contrib : ' || ni_contrib);
10757     hr_utility.trace('l_archive_tab(3).act_info8 : ' || l_archive_tab(3).act_info8 );
10758     hr_utility.trace('l_archive_tab(3).act_info9 : ' || l_archive_tab(3).act_info9 );
10759 
10760     -- Derive the fields 58B and 59
10761     -- 58B
10762     l_archive_tab(3).act_info8 := NVL(l_archive_tab(3).act_info8,0) -- Prev holds Total Deductions
10763                                   - NVL(l_archive_tab(3).act_info16,0) -- Student Loan
10764                                   - NVL(l_archive_tab(3).act_info17,0) -- PAYE
10765                                   - NVL(ni_contrib,0) -- NI
10766                                   + l_non_bacs_payment;
10767    -- 59
10768     l_archive_tab(3).act_info9 := NVL(l_archive_tab(3).act_info9,0)
10769                                   - NVL(l_archive_tab(3).act_info16,0) -- Student Loan
10770                                   - NVL(l_archive_tab(3).act_info17,0) -- PAYE
10771                                   - NVL(ni_contrib,0) -- NI
10772                                   + NVL(l_archive_tab(3).act_info10,0); -- sum of all 'Benefits Taxed Through payroll%'
10773     l_archive_tab(3).act_info5  := NVL(ni_contrib_ytd,0);
10774     l_archive_tab(3).act_info24 := NVL(ni_contrib,0);
10775 --    l_archive_tab(3).act_info22 := nvl(l_archive_tab(3).act_info22,0) + nvl(g_assp_total,0);
10776 --    l_archive_tab(3).act_info20 := nvl(l_archive_tab(3).act_info20,0) + nvl(g_spp_total,0);
10777 
10778 /*  g_ssp_total := 0;
10779   g_sap_total := 0;
10780   g_spp_total := 0;
10781   g_assp_total := 0;
10782   g_smp_total := 0;
10783 */
10784     set_address_fields(l_archive_tab(1),l_archive_tab(0),l_archive_tab(2));
10785 
10786     -- Validating fetched Person,Address,Assignment details for FPS
10787     hr_utility.set_location('Calling Person Address validations', 10);
10788    pay_gb_rti_fps_validate_13.person_address_validations(p_assactid, p_effective_date, l_archive_tab,l_per_addr_val_flag);
10789     hr_utility.trace('person address' ||l_per_addr_val_flag);
10790 
10791     IF l_per_addr_val_flag  = 'Y' THEN -- If validation fails
10792       l_personaddr_val_err := TRUE;
10793     END IF;
10794 
10795     hr_utility.set_location('Calling FPS validations', 10);
10796     pay_gb_rti_fps_validate_13.assignment_validations(p_assactid, p_effective_date, l_archive_tab,l_fps_etext_asg_flag);
10797 
10798     IF l_fps_etext_asg_flag = 'Y' THEN -- If validation fails
10799       l_fps_val_err        := TRUE;
10800     END IF;
10801 
10802     hr_utility.set_location('After Calling FPS validations', 10);
10803     -- LOOP through all NIs
10804     FOR i_count IN 4..i
10805     LOOP
10806 
10807       hr_utility.set_location ('Calling FPS NI validations', 10);
10808 
10809       pay_gb_rti_fps_validate_13.ni_validations(p_assactid, p_effective_date, l_archive_tab,i_count,l_fps_etext_ni_flag);
10810 
10811       IF l_fps_etext_ni_flag = 'Y' THEN -- If validation fails
10812         l_fps_ni_val_err    := TRUE;
10813       END IF;
10814 
10815     END LOOP;
10816 
10817     IF l_archive_person AND l_archive_addr AND l_archive_asg_det1 AND l_archive_asg_det2 THEN
10818       IF l_personaddr_val_err OR l_fps_val_err OR l_fps_ni_val_err -- If validation fails , that record will not be archived.
10819         THEN
10820         hr_utility.set_location('Validation failed, raise error.',999);
10821         fnd_file.put_line(fnd_file.LOG,'Not Archiving');
10822         raise error_found;
10823       ELSE
10824         hr_utility.set_location('Validation successful, archive data.',999);
10825         insert_archive_row(p_assactid, p_effective_date,l_archive_tab);
10826         insert_archive_row(p_assactid, p_effective_date,l_archive_tab_det3);
10827 
10828 /* Moved this code to Action creation
10829         -- lock the pre payments action id with current fps assignment action id
10830          begin
10831         hr_nonrun_asact.insint(p_assactid, l_prepay_asg_action_id);
10832          exception
10833          when dup_val_on_index then
10834            hr_utility.set_location(sqlcode || '-' || sqlerrm,60);
10835            hr_utility.set_location('Skip locking for retry.Locking action id-'||p_assactid || ' Locked action id-' || l_prepay_asg_action_id,60);
10836          end;*/
10837       END IF;
10838     ELSE
10839 	  hr_utility.set_location('Archiving Error - assignment action id ' || p_assactid ,999);
10840       raise error_found;
10841     END IF;
10842 
10843 --
10844 
10845 elsif l_per_paye_agg_flag = 'Y' then     -- This else is for IF (l_per_paye_agg_flag <> 'Y' and l_per_ni_agg_flag <> 'Y') THEN
10846 
10847      hr_utility.trace('PAYE Agg code g_payroll_action_id ' || g_payroll_action_id);
10848   --*****************************************************************************************************
10849   -- Below code processes all aggregated assignments
10850   --*****************************************************************************************************
10851 
10852      OPEN csr_aggr_last_payroll_action(l_person_id, g_pre_pact_id, l_asg_eff_start_date, g_start_year,g_end_year);
10853      FETCH csr_aggr_last_payroll_action
10854      INTO l_last_asgact_id,
10855          l_last_eff_date;
10856      CLOSE csr_aggr_last_payroll_action;
10857 
10858      hr_utility.trace('l_last_asgact_id:' || l_last_asgact_id);
10859      hr_utility.trace('l_last_eff_date:' || l_last_eff_date);
10860 
10861      OPEN csr_last_aggr_asg(l_last_asgact_id);
10862      FETCH csr_last_aggr_asg
10863      INTO l_last_asg_id;
10864      CLOSE csr_last_aggr_asg;
10865 
10866      hr_utility.trace('l_last_asg_id:' || l_last_asg_id);
10867 
10868 -- should skip the aggregation logic for other assignments
10869 select  max(paa.assignment_action_id) into l_asg_action_id
10870 from
10871     pay_assignment_actions paa,
10872     per_all_assignments_f paaf
10873 where
10874  paaf.person_id = l_person_id
10875 and paaf.assignment_id = paa.assignment_id
10876 and paa.payroll_action_id = g_payroll_action_id
10877 and paa.assignment_id = l_last_asg_id;
10878       hr_utility.trace('l_asg_action_id:' || l_asg_action_id || '  p_assactid: '|| p_assactid );
10879 
10880  if l_asg_action_id =  p_assactid then
10881 
10882     hr_utility.trace('Entered Aggregated Code');
10883     l_prepay_master_counter := 1;
10884 
10885     OPEN csr_aggr_last_payroll_action(l_person_id, g_pre_pact_id, l_asg_eff_start_date, g_start_year,g_end_year);
10886     FETCH csr_aggr_last_payroll_action
10887     INTO l_last_asg_action_id,
10888          l_last_effective_date;
10889 -- get the flag to check whether the current request is retry.
10890 open csr_is_retry_request;
10891 fetch csr_is_retry_request into l_retry_req_flag;
10892 close csr_is_retry_request;
10893 
10894     hr_utility.trace('l_last_asg_action_id: ' ||l_last_asg_action_id);
10895     hr_utility.trace('l_last_effective_date: ' ||l_last_effective_date);
10896     CLOSE csr_aggr_last_payroll_action;
10897 
10898   OPEN csr_get_payment_date(l_last_asg_action_id);
10899   FETCH csr_get_payment_date INTO l_payment_date;
10900   CLOSE csr_get_payment_date;
10901 
10902   hr_utility.trace('l_payment_date: '||l_payment_date);
10903   g_effective_date := l_payment_date;
10904 
10905     OPEN csr_prepay_asg_act_details(l_asg_id, g_pre_pact_id);
10906     FETCH csr_prepay_asg_act_details
10907     INTO l_prepay_asg_action_id,
10908       l_prepay_payroll_action_id,
10909       l_prepay_effective_date;
10910     CLOSE csr_prepay_asg_act_details;
10911 
10912     hr_utility.trace('l_prepay_asg_action_id: '||l_prepay_asg_action_id);
10913     hr_utility.trace('l_prepay_payroll_action_id: '||l_prepay_payroll_action_id);
10914     hr_utility.trace('l_prepay_effective_date: '||l_prepay_effective_date);
10915 
10916     hr_utility.trace('l_last_asg_action_id: '||l_last_asg_action_id);
10917     hr_utility.trace('l_last_effective_date: '||l_last_effective_date);
10918 
10919 --Fix for the bug 16409794 starts here
10920         OPEN csr_total_payment_new(l_prepay_asg_action_id);
10921         FETCH csr_total_payment_new INTO l_total_payment;
10922         CLOSE csr_total_payment_new;
10923         hr_utility.trace('l_total_payment: '||l_total_payment);
10924 
10925 if (l_total_payment <> 0) then
10926 --Fix for the bug 16409794 ends here
10927 
10928     l_start_date  := l_asg_eff_start_date;
10929     l_end_date    := g_effective_date;
10930 
10931     hr_utility.set_location('Fetching person details ',10);
10932     l_archive_person := fetch_person_rec(p_assactid, l_asg_eff_start_date,g_effective_date,l_archive_tab(0));
10933     ---
10934     hr_utility.set_location('Fetching address details ',20);
10935     l_archive_addr := fetch_address_rec(l_archive_tab(0).person_id,
10936                                         l_archive_tab(0).assignment_id,
10937                                         g_effective_date,
10938                                         l_archive_tab(1));
10939     l_person_id    := l_archive_tab(0).person_id;
10940 
10941 
10942     --****************************
10943       OPEN csr_pay_act_details(l_last_asg_action_id);
10944       FETCH csr_pay_act_details INTO l_payroll_pact_id;
10945       CLOSE csr_pay_act_details;
10946 
10947 
10948 
10949     hr_utility.trace('l_asg_id: ' ||l_asg_id);
10950     hr_utility.trace('l_person_id: ' ||l_person_id);
10951     hr_utility.trace('g_pre_pact_id: ' ||g_pre_pact_id);
10952     hr_utility.trace('l_asg_eff_start_date: ' ||l_asg_eff_start_date);
10953     hr_utility.trace('g_start_year: ' ||g_start_year);
10954     hr_utility.trace('g_end_year: ' ||g_end_year);
10955 
10956     l_tab_counter := 0;
10957     l_tab_proc_counter := 0;
10958     l_tab_not_proc_counter := 0;
10959     l_archive_det1_counter := 0;
10960     l_archive_det2_counter := 0;
10961     /*l_archive_det1_counter_local := 0;
10962     l_archive_det2_counter_local := 0;*/
10963 --    l_single_payroll_run_exists := 'N';
10964 
10965   i_1 := -1;
10966   i_2 := -1;
10967     hr_utility.trace('g_first_fps_run_date: ' ||g_first_fps_run_date);
10968 	hr_utility.trace('l_first_fps_eff_date: ' ||l_first_fps_eff_date);
10969 
10970 l_single_payroll_run_exists := 1;
10971 OPEN csr_aggr_all_payroll_actions(l_person_id, l_asg_id, l_last_asg_action_id, g_start_year, g_end_year, l_first_fps_eff_date);
10972       FETCH csr_aggr_all_payroll_actions
10973       INTO l_cur_asg_action_id,
10974            l_cur_last_effective_date;
10975 
10976 --Raising Exception for the current assignment
10977 if (csr_aggr_all_payroll_actions%NOTFOUND) then
10978 	hr_utility.trace('Current Assignment is already processed in an earlier FPS run. Hence, not processing now.');
10979 	populate_run_msg(p_assactid, 'Current Assignment '|| l_assignment_number ||' is already processed in an earlier FPS run. Hence, not processing now.','W');
10980 	fnd_file.put_line (fnd_file.LOG,'Current Assignment '|| l_assignment_number ||' is already processed in an earlier FPS run. Hence, not processing now.');
10981     raise already_processed;
10982 end if;
10983 --
10984     hr_utility.trace('l_single_payroll_run_exists start point: ' ||l_single_payroll_run_exists);
10985     hr_utility.trace('l_cur_asg_action_id ' ||l_cur_asg_action_id);
10986 
10987     l_payroll_asg_acts(l_tab_counter) := l_cur_asg_action_id;
10988   begin
10989    select ppa.payroll_action_id   into l_oth_min_pre_pay_id from
10990   pay_action_interlocks pai,
10991   pay_payroll_actions ppa,
10992  pay_assignment_actions paa
10993  where
10994    pai.locked_action_id = l_cur_asg_action_id
10995    and pai.locking_action_id = paa.assignment_action_id
10996    and ppa.payroll_action_id = paa.payroll_action_id
10997    and ppa.action_type in ('P','U');
10998 exception
10999 when others then
11000     hr_utility.trace('error : ' || sqlerrm);
11001     hr_utility.trace('Pre pay is not run for the l_cur_asg_action_id :-' ||l_cur_asg_action_id);
11002     l_oth_min_pre_pay_id := g_pre_pact_id;
11003 end;
11004     hr_utility.trace('l_oth_min_pre_pay_id: ' ||l_oth_min_pre_pay_id);
11005 
11006     hr_utility.trace('l_tab_counter: ' ||l_tab_counter);
11007     hr_utility.trace('l_payroll_asg_acts(l_tab_counter): ' ||l_payroll_asg_acts(l_tab_counter));
11008     l_tab_counter := l_tab_counter + 1;
11009 
11010     l_proc_in_prepay(l_tab_proc_counter) := l_cur_asg_action_id;
11011     hr_utility.trace('l_tab_proc_counter: ' ||l_tab_proc_counter);
11012     hr_utility.trace('l_proc_in_prepay(l_tab_proc_counter): ' ||l_proc_in_prepay(l_tab_proc_counter));
11013     l_tab_proc_counter := l_tab_proc_counter + 1;
11014 
11015     OPEN csr_aggr_min_act_id(l_person_id, l_oth_min_pre_pay_id,g_effective_date);
11016       FETCH csr_aggr_min_act_id
11017       INTO l_asg_act_count,
11018            l_aggr_min_act_id;
11019     CLOSE csr_aggr_min_act_id;
11020 
11021     hr_utility.trace('l_asg_act_count: ' ||l_asg_act_count);
11022     hr_utility.trace('l_aggr_min_act_id: ' ||l_aggr_min_act_id);
11023 
11024 --if (l_asg_act_count > 1) then
11025 if (l_asg_act_count > 1) and (l_cur_asg_action_id > l_aggr_min_act_id) then
11026 l_cur_asg_action_id := l_aggr_min_act_id;
11027     hr_utility.trace('l_cur_asg_action_id: ' ||l_cur_asg_action_id);
11028 end if;
11029 
11030     hr_utility.trace('l_cur_asg_action_id: ' ||l_cur_asg_action_id);
11031     hr_utility.trace('l_cur_last_effective_date: ' ||l_cur_last_effective_date);
11032 loop
11033     hr_utility.trace('Entered Main Loop ');
11034       EXIT WHEN csr_aggr_all_payroll_actions%NOTFOUND;
11035 --prepayment run check starts here
11036     hr_utility.trace('Before csr_aggr_sequence_id');
11037     OPEN csr_chk_prepayment_run(l_cur_asg_action_id);
11038       FETCH csr_chk_prepayment_run
11039       INTO l_chk_prepayment_run;
11040     hr_utility.trace('l_chk_prepayment_run: ' ||l_chk_prepayment_run);
11041     CLOSE csr_chk_prepayment_run;
11042 if(l_chk_prepayment_run is null or l_chk_prepayment_run = 0)then
11043 --raise prepayment error
11044 
11045   OPEN csr_asg_num(l_cur_asg_action_id, l_cur_last_effective_date);
11046   FETCH csr_asg_num INTO l_assignment_number;
11047   CLOSE csr_asg_num;
11048 
11049 hr_utility.set_location('Pre payment is not run for asg action id: '|| l_cur_asg_action_id,999);
11050 populate_run_msg(p_assactid, ' Pre payment is not run for the assignment '||l_assignment_number||' (asg action id: '|| l_cur_asg_action_id||')');
11051 fnd_file.put_line (fnd_file.LOG,' Pre payment is not run for the assignment '||l_assignment_number||' (asg action id: '|| l_cur_asg_action_id||')');
11052         raise error_found;
11053 
11054 --prepayment run check ends here
11055 else
11056 
11057     hr_utility.trace('Before csr_aggr_sequence_id');
11058     OPEN csr_aggr_sequence_id(l_cur_asg_action_id);
11059       FETCH csr_aggr_sequence_id
11060       INTO l_aggr_sequence_id;
11061 
11062     hr_utility.trace('l_aggr_sequence_id: ' ||l_aggr_sequence_id);
11063     CLOSE csr_aggr_sequence_id;
11064 
11065 if (l_asg_act_count > 1) then
11066 if (l_prepay_master_counter = 1) then
11067     OPEN csr_aggr_master_id(l_cur_asg_action_id);
11068       FETCH csr_aggr_master_id
11069       INTO l_payroll_master_asgactid;
11070     CLOSE csr_aggr_master_id;
11071 else
11072     l_payroll_master_asgactid := l_payroll_master_asgactid;
11073 end if;
11074     l_prepay_master_counter := l_prepay_master_counter + 1;
11075 end if;
11076 
11077     hr_utility.trace('Before csr_aggr_locking_asg_act_id');
11078 
11079     OPEN csr_aggr_locking_asg_act_id(l_person_id, l_aggr_sequence_id);
11080       FETCH csr_aggr_locking_asg_act_id
11081       INTO l_aggr_locking_asg_act_id;
11082     hr_utility.trace('l_aggr_locking_asg_act_id: ' ||l_aggr_locking_asg_act_id);
11083 
11084     l_payroll_asg_acts(l_tab_counter) := l_cur_asg_action_id;
11085     hr_utility.trace('l_tab_counter: ' ||l_tab_counter);
11086     hr_utility.trace('l_payroll_asg_acts(l_tab_counter): ' ||l_payroll_asg_acts(l_tab_counter));
11087     l_tab_counter := l_tab_counter + 1;
11088 
11089     hr_utility.trace('l_prepay_asg_action_id: ' ||l_prepay_asg_action_id);
11090     hr_utility.trace('l_cur_asg_action_id: ' ||l_cur_asg_action_id);
11091 
11092     OPEN csr_get_asg_id(l_cur_asg_action_id);
11093       FETCH csr_get_asg_id
11094       INTO l_cur_asg_id;
11095     CLOSE csr_get_asg_id;
11096 
11097 l_processed_in_prepayment := 'N';
11098     hr_utility.trace('l_processed_in_prepayment: ' ||l_processed_in_prepayment);
11099     hr_utility.trace('l_prepay_asg_action_id: ' ||l_prepay_asg_action_id);
11100     hr_utility.trace('l_cur_asg_action_id: ' ||l_cur_asg_action_id);
11101     hr_utility.trace('l_payroll_master_asgactid: ' ||l_payroll_master_asgactid);
11102 
11103     OPEN csr_processed_in_prepayment(l_prepay_asg_action_id, l_cur_asg_action_id, l_payroll_master_asgactid);
11104       FETCH csr_processed_in_prepayment
11105       INTO l_processed_in_prepayment;
11106 
11107     hr_utility.trace('l_processed_in_prepayment: ' ||l_processed_in_prepayment);
11108 
11109 --Fix for the bug 16409794 starts here
11110   l_fps_action_exists := 'N';
11111    OPEN csr_fps_action_exists(l_cur_asg_id,g_payroll_action_id);
11112       FETCH csr_fps_action_exists
11113       INTO l_fps_action_exists;
11114     CLOSE csr_fps_action_exists;
11115 
11116 if (l_fps_action_exists = 'Y') then
11117 --Fix for the bug 16409794 ends here
11118 
11119   -- get the assignment action id for the current assginment id.
11120   select paa.assignment_action_id into l_assact_id from  pay_assignment_actions paa
11121   where paa.payroll_action_id = g_payroll_action_id
11122   and paa.assignment_id = l_cur_asg_id;
11123 
11124 if (nvl(l_processed_in_prepayment, 'N') <> 'Y') then
11125 
11126     hr_utility.trace('l_processed_in_prepayment: ' ||l_processed_in_prepayment);
11127     l_not_proc_in_prepay(l_tab_not_proc_counter) := l_cur_asg_action_id;
11128     hr_utility.trace('l_tab_not_proc_counter: ' ||l_tab_not_proc_counter);
11129     hr_utility.trace('l_not_proc_in_prepay(l_tab_not_proc_counter): ' ||l_not_proc_in_prepay(l_tab_not_proc_counter));
11130     l_tab_not_proc_counter := l_tab_not_proc_counter + 1;
11131 
11132     --Fetching assignments details for FPS
11133     hr_utility.set_location('Fetching Assignment details ',30);
11134     hr_utility.trace('l_asg_eff_start_date: ' ||l_asg_eff_start_date);
11135     hr_utility.trace('g_effective_date: ' ||g_effective_date);
11136     hr_utility.trace('p_assactid: ' ||p_assactid);
11137     hr_utility.trace('l_last_asg_action_id: ' ||l_last_asg_action_id);
11138     --l_archive_det1_counter := l_archive_det1_counter + 1;
11139     --l_archive_det2_counter := l_archive_det2_counter + 1;
11140 
11141         open chk_processed_in_prepay(l_cur_asg_action_id);
11142         fetch chk_processed_in_prepay into l_cur_asg_pre_pay_act_id;
11143         close chk_processed_in_prepay;
11144 
11145         open csr_prepay_payrol_act(l_cur_asg_pre_pay_act_id);
11146         fetch csr_prepay_payrol_act into l_cur_prepay_payroll_action_id;
11147         close csr_prepay_payrol_act;
11148 
11149         hr_utility.set_location('l_cur_asg_action_id: '||l_cur_asg_action_id,999);
11150         hr_utility.set_location('l_cur_asg_pre_pay_act_id: '||l_cur_asg_pre_pay_act_id,999);
11151         hr_utility.set_location('l_cur_prepay_payroll_action_id: '||l_cur_prepay_payroll_action_id,999);
11152         hr_utility.set_location('l_person_id: '||l_person_id,999);
11153         hr_utility.set_location('g_effective_date: '||g_effective_date,999);
11154 
11155         l_bacs_payment_exists := 'N';
11156 
11157         OPEN csr_bacs_payment_exists (l_cur_prepay_payroll_action_id,l_cur_asg_pre_pay_act_id);
11158         FETCH csr_bacs_payment_exists INTO l_bacs_payment_exists;
11159         CLOSE csr_bacs_payment_exists;
11160 
11161         hr_utility.set_location('l_bacs_payment_exists: '||l_bacs_payment_exists,999);
11162         hr_utility.trace('Fetching HASH Code Inside if');
11163         l_hash_code := NULL;
11164 
11165 /*
11166 Below we are calling PAY_GB_FPS_NI_AND_OTHERS.FPS_BACS_PREPROCESS for any other prepayment.
11167 This may be needed incase if the Prepayment is run prior to 30 days from sysdate.
11168 All Prepayments ran within 30 days are already processed in Range_Cursor to generate the HASH CODE.
11169 */
11170 
11171         BEGIN
11172              IF (l_bacs_payment_exists = 'Y') THEN
11173                    hr_utility.trace('Before calling PAY_GB_FPS_NI_AND_OTHERS.FPS_BACS_PREPROCESS from Archive');
11174                    l_dummy := PAY_GB_FPS_NI_AND_OTHERS_13.FPS_BACS_PREPROCESS(l_cur_prepay_payroll_action_id, 'FPS');
11175                    hr_utility.trace('After calling PAY_GB_FPS_NI_AND_OTHERS.FPS_BACS_PREPROCESS from Archive');
11176                    --l_hash_code := pay_gb_fps_ni_and_others.fetch_hash_fps_asg (l_cur_prepay_payroll_action_id, l_cur_asg_id, l_large_bacs_payment);
11177                    l_hash_code := pay_gb_fps_ni_and_others_13.fetch_hash_fps_per (l_cur_prepay_payroll_action_id, l_person_id,l_large_bacs_payment,l_bacs_large_asg_id);
11178              ELSE
11179                    l_hash_code := NULL;
11180              END IF;
11181         EXCEPTION
11182         WHEN others THEN
11183              populate_run_msg (p_assactid,'Hash error1 '|| sqlerrm|| ' for the assignment '|| l_assignment_number|| '.');
11184              fnd_file.put_line (fnd_file.log,'Hash error1 '|| sqlerrm|| ' for the assignment '|| l_assignment_number|| '.');
11185              raise_application_error(-20001,'Hash error1 '||SQLERRM||' for the assignment ' || l_assignment_number|| '.');
11186         END;
11187 
11188              hr_utility.trace('l_large_bacs_payment: '||l_large_bacs_payment);
11189              hr_utility.trace('l_hash_code: '||l_hash_code);
11190 ---
11191 
11192         OPEN csr_total_payment (l_cur_asg_pre_pay_act_id);
11193         FETCH csr_total_payment INTO l_total_payment;
11194         CLOSE csr_total_payment;
11195 
11196              hr_utility.trace('l_total_payment: '||l_total_payment);
11197              hr_utility.trace('l_bacs_large_asg_id: '||l_bacs_large_asg_id);
11198              hr_utility.trace('l_cur_asg_id: '||l_cur_asg_id);
11199 
11200              if l_bacs_large_asg_id <> l_cur_asg_id then
11201                     l_large_bacs_payment := 0;
11202              end if;
11203              l_non_bacs_payment := l_total_payment - l_large_bacs_payment;
11204 
11205              hr_utility.trace('l_non_bacs_payment: '||l_non_bacs_payment);
11206 
11207     l_archive_asg_det1 := fetch_fps_aggr_asg_det1(l_asg_eff_start_date,
11208                                              g_effective_date,
11209                                              p_assactid,
11210                                              l_cur_asg_action_id,
11211 					                                   'Y',
11212                                              l_archive_tab(0),
11213                                              l_archive_tab_det1(l_archive_det1_counter));
11214 
11215 
11216 /*
11217     l_archive_addr := fetch_address_rec(l_archive_tab(0).person_id,
11218                                         l_archive_tab(0).assignment_id,
11219                                         g_effective_date,
11220                                         l_archive_tab_det3(0));*/
11221 
11222     hr_utility.set_location('Agg Fetching Details3',30);
11223     l_archive_asg_det1 := fetch_asg_det3(    l_archive_tab(0).assignment_id,
11224                                              l_cur_asg_action_id,
11225                                              l_archive_tab_det3(0));
11226     hr_utility.set_location('End Agg Fetching Details3',30);
11227 
11228     l_archive_tab_det1(l_archive_det1_counter).assignment_id := l_cur_asg_id;
11229     l_archive_tab_det1(l_archive_det1_counter).action_info_category := 'GB_RTI_FPS_ASG_DET1';
11230     hr_utility.trace('l_archive_det1_counter: ' ||l_archive_det1_counter);
11231     hr_utility.trace('l_archive_det2_counter: ' ||l_archive_det2_counter);
11232 
11233     hr_utility.set_location('Assignment Hash Code to archive record5',30);
11234     l_archive_tab_det1(l_archive_det1_counter).act_info28 := l_hash_code;
11235     -- fetch assignment details 2 related to balances.
11236     l_archive_tab_det2(l_archive_det2_counter).assignment_id        := l_cur_asg_id;
11237     l_archive_tab_det2(l_archive_det2_counter).action_info_category := 'GB_RTI_FPS_ASG_DET2';
11238     l_archive_asg_det2 := fetch_fps_agg_asg_det2(l_cur_asg_action_id,l_cur_asg_id,l_archive_tab_det2(l_archive_det2_counter));
11239 
11240 if (l_archive_asg_det1 and l_archive_asg_det2) then
11241 
11242 select count(*)
11243 into l_rec_count
11244 from PAY_GB_FPS_DETAILS
11245 where ASSIGNMENT_ID = l_asg_id
11246 and PERSON_ID = l_person_id
11247 and PAYROLL_ASG_ACT_ID = l_cur_asg_action_id;
11248 
11249 if l_rec_count = 0 then
11250         hr_utility.set_location('1 inserting',999);
11251         hr_utility.set_location('1 l_cur_asg_id: '||l_cur_asg_id,999);
11252         hr_utility.set_location('1 p_assactid: '||p_assactid,999);
11253         hr_utility.set_location('1 l_cur_asg_action_id: '||l_cur_asg_action_id,999);
11254         hr_utility.set_location('1 inserting',999);
11255 
11256         OPEN csr_aggr_max_act_id(l_person_id, l_cur_prepay_payroll_action_id,g_effective_date);
11257              FETCH csr_aggr_max_act_id
11258              INTO l_asact_count_prepayed,
11259                   l_aggr_max_act_id;
11260         CLOSE csr_aggr_max_act_id;
11261 
11262         hr_utility.trace('l_asact_count_prepayed: ' ||l_asact_count_prepayed);
11263         hr_utility.trace('l_aggr_max_act_id: ' ||l_aggr_max_act_id);
11264 
11265         l_report_det1_det2_flag := 'N';
11266 
11267         if (l_cur_asg_action_id = l_aggr_max_act_id) then
11268             l_report_det1_det2_flag := 'Y';
11269             hr_utility.trace('l_report_det1_det2_flag: ' ||l_report_det1_det2_flag);
11270         end if;
11271 
11272 -- archive the pre pay asg act id
11273     l_archive_tab_det1(l_archive_det1_counter).act_info27 := 'Y';
11274     l_archive_tab_det1(l_archive_det1_counter).act_info29 := l_cur_prepay_payroll_action_id||','||l_cur_asg_action_id;
11275     l_archive_tab_det2(l_archive_det2_counter).act_info29 := l_cur_prepay_payroll_action_id||','||l_cur_asg_action_id;
11276     l_archive_tab_det1(l_archive_det1_counter).act_info30 := l_report_det1_det2_flag;
11277     l_archive_tab_det2(l_archive_det2_counter).act_info30 := l_report_det1_det2_flag;
11278 
11279 /* -- lock the pre payments action id with current fps assignment action id
11280         begin
11281         hr_nonrun_asact.insint(p_assactid, l_cur_asg_pre_pay_act_id);
11282         exception
11283         when dup_val_on_index then
11284            hr_utility.set_location(sqlcode || '-' || sqlerrm,60);
11285            hr_utility.set_location('Skip locking for retry.Locking action id-'||p_assactid || ' Locked action id-' || l_cur_asg_pre_pay_act_id,60);
11286         end;
11287 */
11288       INSERT
11289       INTO PAY_GB_FPS_DETAILS
11290         (
11291           ASSIGNMENT_ID,
11292           PERSON_ID,
11293           FPS_ASG_ACT_ID,
11294           FPS_PAY_ACT_ID,
11295           FPS_EFFECTIVE_DATE,
11296           PREPAY_ASG_ACT_ID,
11297           PREPAY_PAY_ACT_ID,
11298           PREPAY_EFFECTIVE_DATE,
11299           PAYROLL_ASG_ACT_ID,
11300           PAYROLL_PAY_ACT_ID,
11301           PAYROLL_EFFECTIVE_DATE
11302         )
11303         VALUES
11304         (
11305           l_cur_asg_id,
11306           l_person_id,
11307           l_assact_id,
11308           g_payroll_action_id,
11309           g_fps_effective_date,
11310           l_cur_asg_pre_pay_act_id,
11311           l_cur_prepay_payroll_action_id,
11312           l_prepay_effective_date,
11313           l_cur_asg_action_id,
11314           l_payroll_pact_id,
11315           l_last_effective_date
11316         );
11317 
11318 end if;
11319 end if;
11320         l_ni_emp_run := 0;
11321 -- for ni balances
11322  pay_gb_fps_ni_and_others_13.get_ni_bal_paye_aggr_for_asg(l_cur_asg_id,
11323                                                        l_cur_asg_action_id,
11324                                                        p_ni_a_balance,
11325                                                        p_ni_b_balance,
11326                                                        p_ni_c_balance,
11327                                                        p_ni_d_balance,
11328                                                        p_ni_e_balance,
11329                                                        p_ni_j_balance,
11330                                                        p_ni_l_balance);
11331       IF (p_ni_a_balance.act_info1 IS NOT NULL and p_ni_a_balance.assignment_id = l_cur_asg_id) THEN
11332         IF already_a                =  -1 THEN
11333           i_1                        := i_1 +1;
11334           already_a                := i_1;
11335         END IF;
11336 
11337         l_archive_tab_ni_det(already_a).assignment_id        := l_cur_asg_id;
11338         l_archive_tab_ni_det(already_a).action_info_category := 'GB_RTI_FPS_NI_DET';
11339         l_archive_tab_ni_det(already_a).act_info1            := p_ni_a_balance.act_info1;
11340         l_archive_tab_ni_det(already_a).act_info2            := NVL(l_archive_tab_ni_det(already_a).act_info2 ,0) + p_ni_a_balance.act_info2;
11341         l_archive_tab_ni_det(already_a).act_info3            := p_ni_a_balance.act_info3;
11342         l_archive_tab_ni_det(already_a).act_info4            := p_ni_a_balance.act_info4;
11343         l_archive_tab_ni_det(already_a).act_info5            := p_ni_a_balance.act_info5;
11344         l_archive_tab_ni_det(already_a).act_info6            := p_ni_a_balance.act_info6;
11345         l_archive_tab_ni_det(already_a).act_info7            := p_ni_a_balance.act_info7;
11346         l_archive_tab_ni_det(already_a).act_info8            := p_ni_a_balance.act_info8;
11347         l_archive_tab_ni_det(already_a).act_info9            := NVL(l_archive_tab_ni_det(already_a).act_info9 ,0) + p_ni_a_balance.act_info9;
11348         l_archive_tab_ni_det(already_a).act_info10           := NVL(l_archive_tab_ni_det(already_a).act_info10 ,0) + p_ni_a_balance.act_info10;
11349         l_ni_emp_run                                            := l_ni_emp_run + p_ni_a_balance.act_info10;
11350 		l_archive_tab_ni_det(already_a).act_info11           := p_ni_a_balance.act_info11;
11351         l_archive_tab_ni_det(already_a).act_info12           := l_prepay_payroll_action_id||','||l_aggr_max_act_id;
11352 
11353       END IF;
11354       -- For Category B
11355       IF (p_ni_b_balance.act_info1 IS NOT NULL and p_ni_b_balance.assignment_id = l_cur_asg_id) THEN
11356         IF already_b                =  -1 THEN
11357           i_1                        := i_1 +1;
11358           already_b                := i_1;
11359         END IF;
11360         l_archive_tab_ni_det(already_b).assignment_id        := l_cur_asg_id;
11361         l_archive_tab_ni_det(already_b).action_info_category := 'GB_RTI_FPS_NI_DET';
11362         l_archive_tab_ni_det(already_b).act_info1            := p_ni_b_balance.act_info1;
11363         l_archive_tab_ni_det(already_b).act_info2            := NVL(l_archive_tab_ni_det(already_b).act_info2,0) + p_ni_b_balance.act_info2;
11364         l_archive_tab_ni_det(already_b).act_info3            := p_ni_b_balance.act_info3;
11365         l_archive_tab_ni_det(already_b).act_info4            := p_ni_b_balance.act_info4;
11366         l_archive_tab_ni_det(already_b).act_info5            := p_ni_b_balance.act_info5;
11367         l_archive_tab_ni_det(already_b).act_info6            := p_ni_b_balance.act_info6;
11368         l_archive_tab_ni_det(already_b).act_info7            := p_ni_b_balance.act_info7;
11369         l_archive_tab_ni_det(already_b).act_info8            := p_ni_b_balance.act_info8;
11370         l_archive_tab_ni_det(already_b).act_info9           := NVL(l_archive_tab_ni_det(already_b).act_info9 ,0) + p_ni_b_balance.act_info9;
11371         l_archive_tab_ni_det(already_b).act_info10           := NVL(l_archive_tab_ni_det(already_b).act_info10 ,0) + p_ni_b_balance.act_info10;
11372         l_ni_emp_run                                            := l_ni_emp_run + p_ni_b_balance.act_info10;
11373 		l_archive_tab_ni_det(already_b).act_info11           := p_ni_b_balance.act_info11;
11374         l_archive_tab_ni_det(already_b).act_info12           := l_prepay_payroll_action_id||','||l_aggr_max_act_id;
11375       END IF;
11376       -- For Category C
11377       IF (p_ni_c_balance.act_info1 IS NOT NULL and p_ni_c_balance.assignment_id = l_cur_asg_id) THEN
11378         IF already_c                =  -1 THEN
11379           i_1                        := i_1 +1;
11380           already_c                := i_1;
11381         END IF;
11382         l_archive_tab_ni_det(already_c).assignment_id        := l_cur_asg_id;
11383         l_archive_tab_ni_det(already_c).action_info_category := 'GB_RTI_FPS_NI_DET';
11384         l_archive_tab_ni_det(already_c).act_info1            := p_ni_c_balance.act_info1;
11385         l_archive_tab_ni_det(already_c).act_info2            := NVL(l_archive_tab_ni_det(already_c).act_info2,0) + p_ni_c_balance.act_info2;
11386         l_archive_tab_ni_det(already_c).act_info3            := p_ni_c_balance.act_info3;
11387         l_archive_tab_ni_det(already_c).act_info4            := p_ni_c_balance.act_info4;
11388         l_archive_tab_ni_det(already_c).act_info5            := p_ni_c_balance.act_info5;
11389         l_archive_tab_ni_det(already_c).act_info6            := p_ni_c_balance.act_info6;
11390         l_archive_tab_ni_det(already_c).act_info7            := p_ni_c_balance.act_info7;
11391         l_archive_tab_ni_det(already_c).act_info8            := p_ni_c_balance.act_info8;
11392         l_archive_tab_ni_det(already_c).act_info9           := NVL(l_archive_tab_ni_det(already_c).act_info9 ,0) + p_ni_c_balance.act_info9;
11393         l_archive_tab_ni_det(already_c).act_info10           := NVL(l_archive_tab_ni_det(already_c).act_info10 ,0) + p_ni_c_balance.act_info10;
11394         l_ni_emp_run                                            := l_ni_emp_run + p_ni_c_balance.act_info10;
11395         l_archive_tab_ni_det(already_c).act_info11           := p_ni_c_balance.act_info11;
11396         l_archive_tab_ni_det(already_c).act_info12           := l_prepay_payroll_action_id||','||l_aggr_max_act_id;
11397 
11398       END IF;
11399       --For Category D
11400       IF (p_ni_d_balance.act_info1 IS NOT NULL and p_ni_d_balance.assignment_id = l_cur_asg_id) THEN
11401         IF already_d                =  -1 THEN
11402           i_1                        := i_1 +1;
11403           already_d                := i_1;
11404         END IF;
11405         l_archive_tab_ni_det(already_d).assignment_id        := l_cur_asg_id;
11406         l_archive_tab_ni_det(already_d).action_info_category := 'GB_RTI_FPS_NI_DET';
11407         l_archive_tab_ni_det(already_d).act_info1            := p_ni_d_balance.act_info1;
11408         l_archive_tab_ni_det(already_d).act_info2            := NVL(l_archive_tab_ni_det(already_d).act_info2,0) + p_ni_d_balance.act_info2;
11409         l_archive_tab_ni_det(already_d).act_info3            := p_ni_d_balance.act_info3;
11410         l_archive_tab_ni_det(already_d).act_info4            := p_ni_d_balance.act_info4;
11411         l_archive_tab_ni_det(already_d).act_info5            := p_ni_d_balance.act_info5;
11412         l_archive_tab_ni_det(already_d).act_info6            := p_ni_d_balance.act_info6;
11413         l_archive_tab_ni_det(already_d).act_info7            := p_ni_d_balance.act_info7;
11414         l_archive_tab_ni_det(already_d).act_info8            := p_ni_d_balance.act_info8;
11415         l_archive_tab_ni_det(already_d).act_info9           := NVL(l_archive_tab_ni_det(already_d).act_info9,0) + p_ni_d_balance.act_info9;
11416         l_archive_tab_ni_det(already_d).act_info10           := NVL(l_archive_tab_ni_det(already_d).act_info10,0) + p_ni_d_balance.act_info10;
11417         l_ni_emp_run                                            := l_ni_emp_run + p_ni_d_balance.act_info10;
11418         l_archive_tab_ni_det(already_d).act_info11           := p_ni_d_balance.act_info11;
11419         l_archive_tab_ni_det(already_d).act_info12           := l_prepay_payroll_action_id||','||l_aggr_max_act_id;
11420       END IF;
11421       -- For Category E
11422       IF (p_ni_e_balance.act_info1 IS NOT NULL and p_ni_e_balance.assignment_id = l_cur_asg_id) THEN
11423         IF already_e                =  -1 THEN
11424           i_1                        := i_1 +1;
11425           already_e                := i_1;
11426         END IF;
11427         l_archive_tab_ni_det(already_e).assignment_id        := l_cur_asg_id;
11428         l_archive_tab_ni_det(already_e).action_info_category := 'GB_RTI_FPS_NI_DET';
11429         l_archive_tab_ni_det(already_e).act_info1            := p_ni_e_balance.act_info1;
11430         l_archive_tab_ni_det(already_e).act_info2            := NVL(l_archive_tab_ni_det(already_e).act_info2,0) + p_ni_e_balance.act_info2;
11431         l_archive_tab_ni_det(already_e).act_info3            := p_ni_e_balance.act_info3;
11432         l_archive_tab_ni_det(already_e).act_info4            := p_ni_e_balance.act_info4;
11433         l_archive_tab_ni_det(already_e).act_info5            := p_ni_e_balance.act_info5;
11434         l_archive_tab_ni_det(already_e).act_info6            := p_ni_e_balance.act_info6;
11435         l_archive_tab_ni_det(already_e).act_info7            := p_ni_e_balance.act_info7;
11436         l_archive_tab_ni_det(already_e).act_info8            := p_ni_e_balance.act_info8;
11437         l_archive_tab_ni_det(already_e).act_info9           := NVL(l_archive_tab_ni_det(already_e).act_info9 ,0) + p_ni_e_balance.act_info9;
11438         l_archive_tab_ni_det(already_e).act_info10           := NVL(l_archive_tab_ni_det(already_e).act_info10 ,0) + p_ni_e_balance.act_info10;
11439         l_ni_emp_run                                            := l_ni_emp_run + p_ni_e_balance.act_info10;
11440         l_archive_tab_ni_det(already_e).act_info11           := p_ni_e_balance.act_info11;
11441         l_archive_tab_ni_det(already_e).act_info12           := l_prepay_payroll_action_id||','||l_aggr_max_act_id;
11442       END IF;
11443       -- For Category J
11444       IF (p_ni_j_balance.act_info1 IS NOT NULL and p_ni_j_balance.assignment_id = l_cur_asg_id) THEN
11445         IF already_j                =  -1 THEN
11446           i_1                        := i_1+1;
11447           already_j                := i_1;
11448         END IF;
11449         l_archive_tab_ni_det(already_j).assignment_id        := l_cur_asg_id;
11450         l_archive_tab_ni_det(already_j).action_info_category := 'GB_RTI_FPS_NI_DET';
11451         l_archive_tab_ni_det(already_j).act_info1            := p_ni_j_balance.act_info1;
11452         l_archive_tab_ni_det(already_j).act_info2            := NVL(l_archive_tab_ni_det(already_j).act_info2 ,0) + p_ni_j_balance.act_info2;
11453         l_archive_tab_ni_det(already_j).act_info3            := p_ni_j_balance.act_info3;
11454         l_archive_tab_ni_det(already_j).act_info4            := p_ni_j_balance.act_info4;
11455         l_archive_tab_ni_det(already_j).act_info5            := p_ni_j_balance.act_info5;
11456         l_archive_tab_ni_det(already_j).act_info6            := p_ni_j_balance.act_info6;
11457         l_archive_tab_ni_det(already_j).act_info7            := p_ni_j_balance.act_info7;
11458         l_archive_tab_ni_det(already_j).act_info8            := p_ni_j_balance.act_info8;
11459         l_archive_tab_ni_det(already_j).act_info9           := NVL(l_archive_tab_ni_det(already_j).act_info9 ,0) + p_ni_j_balance.act_info9;
11460         l_archive_tab_ni_det(already_j).act_info10           := NVL(l_archive_tab_ni_det(already_j).act_info10 ,0) + p_ni_j_balance.act_info10;
11461         l_ni_emp_run                                            := l_ni_emp_run + p_ni_j_balance.act_info10;
11462         l_archive_tab_ni_det(already_j).act_info11           := p_ni_j_balance.act_info11;
11463         l_archive_tab_ni_det(already_j).act_info12           := l_prepay_payroll_action_id||','||l_aggr_max_act_id;
11464       END IF;
11465       -- For Category L
11466       IF (p_ni_l_balance.act_info1 IS NOT NULL and p_ni_l_balance.assignment_id = l_cur_asg_id) THEN
11467         IF already_l                =  -1 THEN
11468           i_1                        := i_1+1;
11469           already_l                := i_1;
11470         END IF;
11471         l_archive_tab_ni_det(already_l).assignment_id        := l_cur_asg_id;
11472         l_archive_tab_ni_det(already_l).action_info_category := 'GB_RTI_FPS_NI_DET';
11473         l_archive_tab_ni_det(already_l).act_info1            := p_ni_l_balance.act_info1;
11474         l_archive_tab_ni_det(already_l).act_info2            := NVL(l_archive_tab_ni_det(already_l).act_info2,0) + p_ni_l_balance.act_info2;
11475         l_archive_tab_ni_det(already_l).act_info3            := p_ni_l_balance.act_info3;
11476         l_archive_tab_ni_det(already_l).act_info4            := p_ni_l_balance.act_info4;
11477         l_archive_tab_ni_det(already_l).act_info5            := p_ni_l_balance.act_info5;
11478         l_archive_tab_ni_det(already_l).act_info6            := p_ni_l_balance.act_info6;
11479         l_archive_tab_ni_det(already_l).act_info7            := p_ni_l_balance.act_info7;
11480         l_archive_tab_ni_det(already_l).act_info8            := p_ni_l_balance.act_info8;
11481         l_archive_tab_ni_det(already_l).act_info9            :=  NVL(l_archive_tab_ni_det(already_l).act_info9 ,0) + p_ni_l_balance.act_info9;
11482         l_archive_tab_ni_det(already_l).act_info10           := NVL(l_archive_tab_ni_det(already_l).act_info10 ,0) + p_ni_l_balance.act_info10;
11483         l_ni_emp_run                                            := l_ni_emp_run + p_ni_l_balance.act_info10;
11484         l_archive_tab_ni_det(already_l).act_info11           := p_ni_l_balance.act_info11;
11485         l_archive_tab_ni_det(already_l).act_info12           := l_prepay_payroll_action_id||','||l_aggr_max_act_id;
11486       END IF;
11487 --end ni balances
11488 
11489      ni_contrib_1 := 0;
11490      ni_contrib_ytd_1 := 0;
11491      FOR k IN 0..i_1
11492      LOOP
11493        hr_utility.trace('k_paye_agg:' || k);
11494        IF l_archive_tab_ni_det(k).act_info10 IS NOT NULL THEN
11495          ni_contrib_1  := NVL(ni_contrib_1,0) + l_archive_tab_ni_det(k).act_info10;
11496          ni_contrib_ytd_1 := NVL(ni_contrib_ytd_1,0) + l_archive_tab_ni_det(k).act_info8;
11497        END IF;
11498      END LOOP;
11499 
11500     hr_utility.trace('l_ni_emp_run' ||l_ni_emp_run);
11501     hr_utility.trace('l_archive_tab_det2(l_archive_det2_counter).act_info8' ||l_archive_tab_det2(l_archive_det2_counter).act_info8);
11502     hr_utility.trace('l_archive_tab_det2(l_archive_det2_counter).act_info16' ||l_archive_tab_det2(l_archive_det2_counter).act_info16);
11503     hr_utility.trace('l_archive_tab_det2(l_archive_det2_counter).act_info17' ||l_archive_tab_det2(l_archive_det2_counter).act_info17);
11504     hr_utility.trace('l_non_bacs_payment' ||l_non_bacs_payment);
11505 
11506     -- Derive the fields 58B and 59
11507     -- 58B
11508     l_archive_tab_det2(l_archive_det2_counter).act_info8 := NVL(l_archive_tab_det2(l_archive_det2_counter).act_info8,0) -- Prev holds Total Deductions
11509                                   - NVL(l_archive_tab_det2(l_archive_det2_counter).act_info16,0) -- Student Loan
11510                                   - NVL(l_archive_tab_det2(l_archive_det2_counter).act_info17,0) -- PAYE
11511                                   - NVL(l_ni_emp_run,0) -- NI
11512                                   + l_non_bacs_payment;
11513    -- 59
11514     l_archive_tab_det2(l_archive_det2_counter).act_info9 := NVL(l_archive_tab_det2(l_archive_det2_counter).act_info9,0)
11515                                   - NVL(l_archive_tab_det2(l_archive_det2_counter).act_info16,0) -- Student Loan
11516                                   - NVL(l_archive_tab_det2(l_archive_det2_counter).act_info17,0) -- PAYE
11517                                   - NVL(l_ni_emp_run,0) -- NI
11518                                   + NVL(l_archive_tab_det2(l_archive_det2_counter).act_info10,0); -- sum of all 'Benefits Taxed Through payroll%'
11519     l_archive_tab_det2(l_archive_det2_counter).act_info5  := NVL(ni_contrib_ytd_1,0);
11520     l_archive_tab_det2(l_archive_det2_counter).act_info24 := NVL(ni_contrib_1,0);
11521 
11522 
11523 --
11524 --Validations needs to be performed for each of the assignments separately
11525     hr_utility.set_location('In PAYE Aggr if Before Calling FPS validations', 10);
11526     pay_gb_rti_fps_validate_13.assignment_validations_aggr(p_assactid,
11527                                                    p_effective_date,
11528                                                    l_archive_tab,
11529                                                    l_archive_tab_det1(l_archive_det1_counter),
11530                                                    l_archive_tab_det2(l_archive_det2_counter),
11531                                                    l_fps_etext_asg_temp_flag);
11532 
11533     hr_utility.trace('l_fps_etext_asg_temp_flag' ||l_fps_etext_asg_temp_flag);
11534 
11535     IF (l_fps_etext_asg_temp_flag = 'Y' or l_fps_val_err = TRUE) THEN -- If validation fails
11536       l_fps_val_err        := TRUE;
11537     END IF;
11538 
11539     hr_utility.set_location('In PAYE Aggr if After Calling FPS validations', 10);
11540 
11541    --
11542     l_archive_det1_counter := l_archive_det1_counter +1;
11543     l_archive_det2_counter := l_archive_det2_counter + 1;
11544 
11545 --
11546 else -- this else is for if (nvl(l_processed_in_prepayment, 'N') <> 'Y') then
11547 
11548     hr_utility.trace('Entered Else part of l_processed_in_prepayment: ' ||l_processed_in_prepayment);
11549 
11550 l_asg_act_processed_earlier := 0;
11551 
11552     hr_utility.trace('l_person_id: ' ||l_person_id);
11553     hr_utility.trace('l_cur_asg_id: ' ||l_cur_asg_id);
11554     hr_utility.trace('l_cur_asg_action_id: ' ||l_cur_asg_action_id);
11555     hr_utility.trace('l_asg_id: ' ||l_asg_id);
11556 
11557     OPEN csr_asg_act_processed_earlier(l_person_id, l_cur_asg_id, l_cur_asg_action_id);
11558       FETCH csr_asg_act_processed_earlier
11559       INTO l_asg_act_processed_earlier;
11560     CLOSE csr_asg_act_processed_earlier;
11561 
11562     hr_utility.trace('l_asg_act_processed_earlier: ' ||l_asg_act_processed_earlier);
11563 
11564 if (nvl(l_asg_act_processed_earlier,-1) <> 0 and l_retry_req_flag is not null ) then
11565     hr_utility.trace('Current Assignment is already processed in an earlier FPS run. Hence, not processing now.');
11566     l_archive_flag := 'N';
11567 populate_run_msg(p_assactid, ' Assignment ' || l_assignment_number|| ' is already processed.','W');
11568 fnd_file.put_line (fnd_file.LOG,' Assignment ' || l_assignment_number|| ' is already processed.');
11569 
11570 else --this else is for nvl(l_asg_act_processed_earlier,-1) <> 0
11571 
11572     hr_utility.trace('l_processed_in_prepayment: ' ||l_processed_in_prepayment);
11573     l_proc_in_prepay(l_tab_proc_counter) := l_cur_asg_action_id;
11574     hr_utility.trace('l_tab_proc_counter: ' ||l_tab_proc_counter);
11575     hr_utility.trace('l_proc_in_prepay(l_tab_proc_counter): ' ||l_proc_in_prepay(l_tab_proc_counter));
11576     l_tab_proc_counter := l_tab_proc_counter + 1;
11577 
11578 --
11579     --Fetching assignments details for FPS
11580     hr_utility.set_location('Fetching Assignment details ',30);
11581 
11582         open chk_processed_in_prepay(l_cur_asg_action_id);
11583         fetch chk_processed_in_prepay into l_cur_asg_pre_pay_act_id;
11584         close chk_processed_in_prepay;
11585 
11586         hr_utility.trace('l_cur_asg_action_id: ' ||l_cur_asg_action_id);
11587         hr_utility.trace('l_cur_asg_pre_pay_act_id: ' ||l_cur_asg_pre_pay_act_id);
11588 
11589         l_bacs_payment_exists := 'N';
11590 
11591         OPEN csr_bacs_payment_exists (l_prepay_payroll_action_id,l_cur_asg_pre_pay_act_id);
11592         FETCH csr_bacs_payment_exists INTO l_bacs_payment_exists;
11593         CLOSE csr_bacs_payment_exists;
11594         hr_utility.trace('l_bacs_payment_exists: ' ||l_bacs_payment_exists);
11595         hr_utility.trace('Fetching HASH Code Inside else');
11596         l_hash_code := NULL;
11597         BEGIN
11598         IF (l_bacs_payment_exists = 'Y') THEN
11599         --l_hash_code := pay_gb_fps_ni_and_others.fetch_hash_fps_asg (g_pre_pact_id, l_cur_asg_id, l_large_bacs_payment);
11600 	      l_hash_code := pay_gb_fps_ni_and_others_13.fetch_hash_fps_per (g_pre_pact_id, l_person_id,l_large_bacs_payment,l_bacs_large_asg_id);
11601         ELSE
11602         l_hash_code := NULL;
11603         END IF;
11604         EXCEPTION
11605         WHEN others THEN
11606         populate_run_msg (p_assactid,'Hash error '|| sqlerrm|| ' for the assignment '|| l_assignment_number|| '.');
11607         fnd_file.put_line (fnd_file.log,'Hash error '|| sqlerrm|| ' for the assignment '|| l_assignment_number|| '.');
11608         raise_application_error(-20001,'Hash error '||SQLERRM||' for the assignment ' || l_assignment_number|| '.');
11609         END;
11610 
11611         hr_utility.trace('l_large_bacs_payment: '||l_large_bacs_payment);
11612         hr_utility.trace('l_hash_code: '||l_hash_code);
11613 ---
11614         OPEN csr_total_payment (l_cur_asg_pre_pay_act_id);
11615         FETCH csr_total_payment INTO l_total_payment;
11616         CLOSE csr_total_payment;
11617 
11618         hr_utility.trace('l_total_payment: '||l_total_payment);
11619         hr_utility.trace('l_bacs_large_asg_id: '||l_bacs_large_asg_id);
11620         hr_utility.trace('l_cur_asg_id: '||l_cur_asg_id);
11621 
11622              if l_bacs_large_asg_id <> l_cur_asg_id then
11623                     l_large_bacs_payment := 0;
11624              end if;
11625         l_non_bacs_payment := l_total_payment - l_large_bacs_payment;
11626         hr_utility.trace('l_non_bacs_payment: '||l_non_bacs_payment);
11627 
11628     hr_utility.trace('l_asg_eff_start_date: ' ||l_asg_eff_start_date);
11629     hr_utility.trace('g_effective_date: ' ||g_effective_date);
11630     hr_utility.trace('p_assactid: ' ||p_assactid);
11631     hr_utility.trace('l_last_asg_action_id: ' ||l_last_asg_action_id);
11632 	--l_archive_det1_counter := l_archive_det1_counter + 1;
11633     --l_archive_det2_counter := l_archive_det2_counter + 1;
11634     l_archive_asg_det1 := fetch_fps_aggr_asg_det1(l_asg_eff_start_date,
11635                                              g_effective_date,
11636                                              p_assactid,
11637                                              l_cur_asg_action_id,
11638 					                                   'Y',
11639                                              l_archive_tab(0),
11640                                              l_archive_tab_det1(l_archive_det1_counter));
11641     l_archive_tab_det1(l_archive_det1_counter).assignment_id := l_cur_asg_id;
11642 
11643 
11644     hr_utility.set_location('one Agg Fetching Details3',30);
11645     l_archive_asg_det1 := fetch_asg_det3(    l_archive_tab(0).assignment_id,
11646                                              l_cur_asg_action_id,
11647                                              l_archive_tab_det3(0));
11648     hr_utility.set_location('one End Agg Fetching Details3',30);
11649 
11650     hr_utility.trace('l_archive_det1_counter: ' ||l_archive_det1_counter);
11651     hr_utility.set_location('Assignment Hash Coode to archive record1',30);
11652     l_archive_tab_det1(l_archive_det1_counter).act_info28 := l_hash_code;
11653     l_archive_tab_det2(l_archive_det2_counter).action_info_category := 'GB_RTI_FPS_ASG_DET2';
11654     l_archive_tab_det2(l_archive_det2_counter).assignment_id := l_cur_asg_id;
11655 
11656     hr_utility.trace('test l_archive_det2_counter: ' ||l_archive_det2_counter);
11657 
11658  --   l_archive_asg_det2 := fetch_fps_asg_det2(p_assactid,l_asg_id,l_archive_tab_det2_local(l_archive_det2_counter_local));
11659     l_archive_asg_det2 := fetch_fps_agg_asg_det2(l_cur_asg_action_id,l_cur_asg_id,l_archive_tab_det2(l_archive_det2_counter));
11660     hr_utility.trace('2test l_archive_det2_counter: ' ||l_archive_det2_counter);
11661 
11662 if (l_archive_asg_det1 and l_archive_asg_det2) then
11663 
11664 select count(*)
11665 into l_rec_count
11666 from PAY_GB_FPS_DETAILS
11667 where ASSIGNMENT_ID = l_cur_asg_id
11668 and PERSON_ID = l_person_id
11669 and PAYROLL_ASG_ACT_ID = l_cur_asg_action_id;
11670 
11671 if l_rec_count = 0 then
11672         hr_utility.set_location('1 inserting',999);
11673         hr_utility.set_location('1 l_cur_asg_id: '||l_cur_asg_id,999);
11674         hr_utility.set_location('1 p_assactid: '||p_assactid,999);
11675         hr_utility.set_location('1 l_cur_asg_action_id: '||l_cur_asg_action_id,999);
11676         hr_utility.set_location('1 inserting',999);
11677 
11678 -- archive the pre pay asg act id
11679 --    l_archive_tab_det1(l_archive_det1_counter).act_info29 := l_prepay_payroll_action_id;
11680 --    l_archive_tab_det2(l_archive_det2_counter).act_info29 := l_prepay_payroll_action_id;
11681 
11682     l_archive_tab_det1(l_archive_det1_counter).act_info29 := l_prepay_payroll_action_id||','||l_cur_asg_action_id;
11683     l_archive_tab_det2(l_archive_det2_counter).act_info29 := l_prepay_payroll_action_id||','||l_cur_asg_action_id;
11684 
11685         hr_utility.set_location('l_person_id: '||l_person_id,999);
11686         hr_utility.set_location('l_prepay_payroll_action_id: '||l_prepay_payroll_action_id,999);
11687         hr_utility.set_location('g_effective_date: '||g_effective_date,999);
11688 
11689         OPEN csr_aggr_max_act_id(l_person_id, l_prepay_payroll_action_id,g_effective_date);
11690         FETCH csr_aggr_max_act_id
11691         INTO l_asact_count_prepayed,
11692               l_aggr_max_act_id;
11693 	CLOSE csr_aggr_max_act_id;
11694 
11695         hr_utility.trace('l_asact_count_prepayed: ' ||l_asact_count_prepayed);
11696         hr_utility.trace('l_aggr_max_act_id: ' ||l_aggr_max_act_id);
11697 
11698         l_report_det1_det2_flag := 'N';
11699 
11700         if (l_cur_asg_action_id = l_aggr_max_act_id) then
11701             l_report_det1_det2_flag := 'Y';
11702             hr_utility.trace('l_report_det1_det2_flag: ' ||l_report_det1_det2_flag);
11703         end if;
11704 
11705 	l_archive_tab_det1(l_archive_det1_counter).act_info27 := 'Y';
11706         l_archive_tab_det1(l_archive_det1_counter).act_info30 := l_report_det1_det2_flag;
11707         l_archive_tab_det2(l_archive_det2_counter).act_info30 := l_report_det1_det2_flag;
11708 
11709 /* -- lock the pre payments action id with current fps assignment action id
11710         begin
11711         hr_nonrun_asact.insint(p_assactid, l_cur_asg_pre_pay_act_id);
11712         exception
11713         when dup_val_on_index then
11714            hr_utility.set_location(sqlcode || '-' || sqlerrm,60);
11715            hr_utility.set_location('Skip locking for retry.Locking action id-'||p_assactid || ' Locked action id-' || l_cur_asg_pre_pay_act_id,60);
11716         end;
11717 */
11718       INSERT
11719       INTO PAY_GB_FPS_DETAILS
11720         (
11721           ASSIGNMENT_ID,
11722           PERSON_ID,
11723           FPS_ASG_ACT_ID,
11724           FPS_PAY_ACT_ID,
11725           FPS_EFFECTIVE_DATE,
11726           PREPAY_ASG_ACT_ID,
11727           PREPAY_PAY_ACT_ID,
11728           PREPAY_EFFECTIVE_DATE,
11729           PAYROLL_ASG_ACT_ID,
11730           PAYROLL_PAY_ACT_ID,
11731           PAYROLL_EFFECTIVE_DATE
11732         )
11733         VALUES
11734         (
11735           l_cur_asg_id,
11736           l_person_id,
11737           l_assact_id,
11738           g_payroll_action_id,
11739           g_fps_effective_date,
11740           l_cur_asg_pre_pay_act_id,
11741           l_prepay_payroll_action_id,
11742           l_prepay_effective_date,
11743           l_cur_asg_action_id,
11744           l_payroll_pact_id,
11745           l_last_effective_date
11746         );
11747 
11748 end if;
11749 end if;
11750 l_ni_emp_run := 0;
11751 -- for ni balances
11752  pay_gb_fps_ni_and_others_13.get_ni_bal_paye_aggr_for_asg(l_cur_asg_id,
11753                                                        l_cur_asg_action_id,
11754                                                        p_ni_a_balance,
11755                                                        p_ni_b_balance,
11756                                                        p_ni_c_balance,
11757                                                        p_ni_d_balance,
11758                                                        p_ni_e_balance,
11759                                                        p_ni_j_balance,
11760                                                        p_ni_l_balance);
11761       IF (p_ni_a_balance.act_info1 IS NOT NULL and p_ni_a_balance.assignment_id = l_cur_asg_id) THEN
11762         IF already_a1                =  -1 THEN
11763           i_2                        := i_2 +1;
11764           already_a1                := i_2;
11765         END IF;
11766 
11767         l_archive_tab_ni_det_1(already_a1).assignment_id        := l_cur_asg_id;
11768         l_archive_tab_ni_det_1(already_a1).action_info_category := 'GB_RTI_FPS_NI_DET';
11769         l_archive_tab_ni_det_1(already_a1).act_info1            := p_ni_a_balance.act_info1;
11770         l_archive_tab_ni_det_1(already_a1).act_info2            := NVL(l_archive_tab_ni_det_1(already_a1).act_info2,0) + p_ni_a_balance.act_info2;
11771         l_archive_tab_ni_det_1(already_a1).act_info3            := p_ni_a_balance.act_info3;
11772         l_archive_tab_ni_det_1(already_a1).act_info4            := p_ni_a_balance.act_info4;
11773         l_archive_tab_ni_det_1(already_a1).act_info5            := p_ni_a_balance.act_info5;
11774         l_archive_tab_ni_det_1(already_a1).act_info6            := p_ni_a_balance.act_info6;
11775         l_archive_tab_ni_det_1(already_a1).act_info7            := p_ni_a_balance.act_info7;
11776         l_archive_tab_ni_det_1(already_a1).act_info8            := p_ni_a_balance.act_info8;
11777         l_archive_tab_ni_det_1(already_a1).act_info9           := NVL(l_archive_tab_ni_det_1(already_a1).act_info9 ,0) + p_ni_a_balance.act_info9;
11778         l_archive_tab_ni_det_1(already_a1).act_info10           := NVL(l_archive_tab_ni_det_1(already_a1).act_info10 ,0) + p_ni_a_balance.act_info10;
11779         l_ni_emp_run                                            := l_ni_emp_run + p_ni_a_balance.act_info10;
11780         l_archive_tab_ni_det_1(already_a1).act_info11           := p_ni_a_balance.act_info11;
11781         l_archive_tab_ni_det_1(already_a1).act_info12           := l_prepay_payroll_action_id||','||l_aggr_max_act_id;
11782 
11783       END IF;
11784       -- For Category B
11785       IF (p_ni_b_balance.act_info1 IS NOT NULL and p_ni_b_balance.assignment_id = l_cur_asg_id) THEN
11786         IF already_b1                =  -1 THEN
11787           i_2                        := i_2 +1;
11788           already_b1                := i_2;
11789         END IF;
11790         l_archive_tab_ni_det_1(already_b1).assignment_id        := l_cur_asg_id;
11791         l_archive_tab_ni_det_1(already_b1).action_info_category := 'GB_RTI_FPS_NI_DET';
11792         l_archive_tab_ni_det_1(already_b1).act_info1            := p_ni_b_balance.act_info1;
11793         l_archive_tab_ni_det_1(already_b1).act_info2            := NVL(l_archive_tab_ni_det_1(already_b1).act_info2,0) + p_ni_b_balance.act_info2;
11794         l_archive_tab_ni_det_1(already_b1).act_info3            := p_ni_b_balance.act_info3;
11795         l_archive_tab_ni_det_1(already_b1).act_info4            := p_ni_b_balance.act_info4;
11796         l_archive_tab_ni_det_1(already_b1).act_info5            := p_ni_b_balance.act_info5;
11797         l_archive_tab_ni_det_1(already_b1).act_info6            := p_ni_b_balance.act_info6;
11798         l_archive_tab_ni_det_1(already_b1).act_info7            := p_ni_b_balance.act_info7;
11799         l_archive_tab_ni_det_1(already_b1).act_info8            := p_ni_b_balance.act_info8;
11800         l_archive_tab_ni_det_1(already_b1).act_info9           := NVL(l_archive_tab_ni_det_1(already_b1).act_info9 ,0) + p_ni_b_balance.act_info9;
11801         l_archive_tab_ni_det_1(already_b1).act_info10           := NVL(l_archive_tab_ni_det_1(already_b1).act_info10 ,0) + p_ni_b_balance.act_info10;
11802         l_ni_emp_run                                            := l_ni_emp_run + p_ni_b_balance.act_info10;
11803         l_archive_tab_ni_det_1(already_b1).act_info11           := p_ni_b_balance.act_info11;
11804         l_archive_tab_ni_det_1(already_b1).act_info12           := l_prepay_payroll_action_id||','||l_aggr_max_act_id;
11805       END IF;
11806       -- For Category C
11807       IF (p_ni_c_balance.act_info1 IS NOT NULL and p_ni_c_balance.assignment_id = l_cur_asg_id) THEN
11808         IF already_c1                =  -1 THEN
11809           i_2                        := i_2 +1;
11810           already_c1                := i_2;
11811         END IF;
11812         l_archive_tab_ni_det_1(already_c1).assignment_id        := l_cur_asg_id;
11813         l_archive_tab_ni_det_1(already_c1).action_info_category := 'GB_RTI_FPS_NI_DET';
11814         l_archive_tab_ni_det_1(already_c1).act_info1            := p_ni_c_balance.act_info1;
11815         l_archive_tab_ni_det_1(already_c1).act_info2            := NVL(l_archive_tab_ni_det_1(already_c1).act_info2,0) + p_ni_c_balance.act_info2;
11816         l_archive_tab_ni_det_1(already_c1).act_info3            := p_ni_c_balance.act_info3;
11817         l_archive_tab_ni_det_1(already_c1).act_info4            := p_ni_c_balance.act_info4;
11818         l_archive_tab_ni_det_1(already_c1).act_info5            := p_ni_c_balance.act_info5;
11819         l_archive_tab_ni_det_1(already_c1).act_info6            := p_ni_c_balance.act_info6;
11820         l_archive_tab_ni_det_1(already_c1).act_info7            := p_ni_c_balance.act_info7;
11821         l_archive_tab_ni_det_1(already_c1).act_info8            := p_ni_c_balance.act_info8;
11822         l_archive_tab_ni_det_1(already_c1).act_info9           := NVL(l_archive_tab_ni_det_1(already_c1).act_info9 ,0) + p_ni_c_balance.act_info9;
11823         l_archive_tab_ni_det_1(already_c1).act_info10           := NVL(l_archive_tab_ni_det_1(already_c1).act_info10 ,0) + p_ni_c_balance.act_info10;
11824         l_ni_emp_run                                            := l_ni_emp_run + p_ni_c_balance.act_info10;
11825         l_archive_tab_ni_det_1(already_c1).act_info11           := p_ni_c_balance.act_info11;
11826         l_archive_tab_ni_det_1(already_c1).act_info12           := l_prepay_payroll_action_id||','||l_aggr_max_act_id;
11827       END IF;
11828       --For Category D
11829 
11830 --      IF (p_ni_d_balance.act_info1 IS NOT NULL) THEN
11831       IF (p_ni_d_balance.act_info1 IS NOT NULL and p_ni_d_balance.assignment_id = l_cur_asg_id) THEN
11832         IF already_d1                =  -1 THEN
11833           i_2                        := i_2 +1;
11834           already_d1                := i_2;
11835         END IF;
11836         l_archive_tab_ni_det_1(already_d1).assignment_id        := l_cur_asg_id;
11837         l_archive_tab_ni_det_1(already_d1).action_info_category := 'GB_RTI_FPS_NI_DET';
11838         l_archive_tab_ni_det_1(already_d1).act_info1            := p_ni_d_balance.act_info1;
11839         l_archive_tab_ni_det_1(already_d1).act_info2            := NVL(l_archive_tab_ni_det_1(already_d1).act_info2,0) + p_ni_d_balance.act_info2;
11840         l_archive_tab_ni_det_1(already_d1).act_info3            := p_ni_d_balance.act_info3;
11841         l_archive_tab_ni_det_1(already_d1).act_info4            := p_ni_d_balance.act_info4;
11842         l_archive_tab_ni_det_1(already_d1).act_info5            := p_ni_d_balance.act_info5;
11843         l_archive_tab_ni_det_1(already_d1).act_info6            := p_ni_d_balance.act_info6;
11844         l_archive_tab_ni_det_1(already_d1).act_info7            := p_ni_d_balance.act_info7;
11845         l_archive_tab_ni_det_1(already_d1).act_info8            := p_ni_d_balance.act_info8;
11846         l_archive_tab_ni_det_1(already_d1).act_info9           := NVL(l_archive_tab_ni_det_1(already_d1).act_info9,0) + p_ni_d_balance.act_info9;
11847         l_archive_tab_ni_det_1(already_d1).act_info10           := NVL(l_archive_tab_ni_det_1(already_d1).act_info10,0) + p_ni_d_balance.act_info10;
11848         l_ni_emp_run                                            := l_ni_emp_run + p_ni_d_balance.act_info10;
11849         l_archive_tab_ni_det_1(already_d1).act_info11           := p_ni_d_balance.act_info11;
11850         l_archive_tab_ni_det_1(already_d1).act_info12           := l_prepay_payroll_action_id||','||l_aggr_max_act_id;
11851       END IF;
11852       -- For Category E
11853       IF (p_ni_e_balance.act_info1 IS NOT NULL and p_ni_e_balance.assignment_id = l_cur_asg_id) THEN
11854         IF already_e1                =  -1 THEN
11855           i_2                        := i_2 +1;
11856           already_e1                := i_2;
11857         END IF;
11858         l_archive_tab_ni_det_1(already_e1).assignment_id        := l_cur_asg_id;
11859         l_archive_tab_ni_det_1(already_e1).action_info_category := 'GB_RTI_FPS_NI_DET';
11860         l_archive_tab_ni_det_1(already_e1).act_info1            := p_ni_e_balance.act_info1;
11861         l_archive_tab_ni_det_1(already_e1).act_info2            := NVL(l_archive_tab_ni_det_1(already_e1).act_info2,0) + p_ni_e_balance.act_info2;
11862         l_archive_tab_ni_det_1(already_e1).act_info3            := p_ni_e_balance.act_info3;
11863         l_archive_tab_ni_det_1(already_e1).act_info4            := p_ni_e_balance.act_info4;
11864         l_archive_tab_ni_det_1(already_e1).act_info5            := p_ni_e_balance.act_info5;
11865         l_archive_tab_ni_det_1(already_e1).act_info6            := p_ni_e_balance.act_info6;
11866         l_archive_tab_ni_det_1(already_e1).act_info7            := p_ni_e_balance.act_info7;
11867         l_archive_tab_ni_det_1(already_e1).act_info8            := p_ni_e_balance.act_info8;
11868         l_archive_tab_ni_det_1(already_e1).act_info9           := NVL(l_archive_tab_ni_det_1(already_e1).act_info9 ,0) + p_ni_e_balance.act_info9;
11869         l_archive_tab_ni_det_1(already_e1).act_info10           := NVL(l_archive_tab_ni_det_1(already_e1).act_info10 ,0) + p_ni_e_balance.act_info10;
11870         l_ni_emp_run                                            := l_ni_emp_run + p_ni_e_balance.act_info10;
11871         l_archive_tab_ni_det_1(already_e1).act_info11           := p_ni_e_balance.act_info11;
11872         l_archive_tab_ni_det_1(already_e1).act_info12           := l_prepay_payroll_action_id||','||l_aggr_max_act_id;
11873       END IF;
11874       -- For Category J
11875       IF (p_ni_j_balance.act_info1 IS NOT NULL and p_ni_j_balance.assignment_id = l_cur_asg_id) THEN
11876         IF already_j1                =  -1 THEN
11877           i_2                        := i_2+1;
11878           already_j1                := i_2;
11879         END IF;
11880         l_archive_tab_ni_det_1(already_j1).assignment_id        := l_cur_asg_id;
11881         l_archive_tab_ni_det_1(already_j1).action_info_category := 'GB_RTI_FPS_NI_DET';
11882         l_archive_tab_ni_det_1(already_j1).act_info1            := p_ni_a_balance.act_info1;
11883         l_archive_tab_ni_det_1(already_j1).act_info2            := NVL(l_archive_tab_ni_det_1(already_j1).act_info2,0) + p_ni_j_balance.act_info2;
11884         l_archive_tab_ni_det_1(already_j1).act_info3            := p_ni_j_balance.act_info3;
11885         l_archive_tab_ni_det_1(already_j1).act_info4            := p_ni_j_balance.act_info4;
11886         l_archive_tab_ni_det_1(already_j1).act_info5            := p_ni_j_balance.act_info5;
11887         l_archive_tab_ni_det_1(already_j1).act_info6            := p_ni_j_balance.act_info6;
11888         l_archive_tab_ni_det_1(already_j1).act_info7            := p_ni_j_balance.act_info7;
11889         l_archive_tab_ni_det_1(already_j1).act_info8            := p_ni_j_balance.act_info8;
11890         l_archive_tab_ni_det_1(already_j1).act_info9           := NVL(l_archive_tab_ni_det_1(already_j1).act_info9 ,0) + p_ni_j_balance.act_info9;
11891         l_archive_tab_ni_det_1(already_j1).act_info10           := NVL(l_archive_tab_ni_det_1(already_j1).act_info10 ,0) + p_ni_j_balance.act_info10;
11892         l_ni_emp_run                                            := l_ni_emp_run + p_ni_j_balance.act_info10;
11893         l_archive_tab_ni_det_1(already_j1).act_info11           := p_ni_j_balance.act_info11;
11894         l_archive_tab_ni_det_1(already_j1).act_info12           := l_prepay_payroll_action_id||','||l_aggr_max_act_id;
11895       END IF;
11896       -- For Category L
11897       IF (p_ni_l_balance.act_info1 IS NOT NULL and p_ni_l_balance.assignment_id = l_cur_asg_id) THEN
11898         IF already_l1                =  -1 THEN
11899           i_2                        := i_2+1;
11900           already_l1                := i_2;
11901         END IF;
11902         l_archive_tab_ni_det_1(already_l1).assignment_id        := l_cur_asg_id;
11903         l_archive_tab_ni_det_1(already_l1).action_info_category := 'GB_RTI_FPS_NI_DET';
11904         l_archive_tab_ni_det_1(already_l1).act_info1            := p_ni_l_balance.act_info1;
11905         l_archive_tab_ni_det_1(already_l1).act_info2            := NVL(l_archive_tab_ni_det_1(already_l1).act_info2,0) + p_ni_l_balance.act_info2;
11906         l_archive_tab_ni_det_1(already_l1).act_info3            := p_ni_l_balance.act_info3;
11907         l_archive_tab_ni_det_1(already_l1).act_info4            := p_ni_l_balance.act_info4;
11908         l_archive_tab_ni_det_1(already_l1).act_info5            := p_ni_l_balance.act_info5;
11909         l_archive_tab_ni_det_1(already_l1).act_info6            := p_ni_l_balance.act_info6;
11910         l_archive_tab_ni_det_1(already_l1).act_info7            := p_ni_l_balance.act_info7;
11911         l_archive_tab_ni_det_1(already_l1).act_info8            := p_ni_l_balance.act_info8;
11912         l_archive_tab_ni_det_1(already_l1).act_info9            :=  NVL(l_archive_tab_ni_det_1(already_l1).act_info9 ,0) + p_ni_l_balance.act_info9;
11913         l_archive_tab_ni_det_1(already_l1).act_info10           := NVL(l_archive_tab_ni_det_1(already_l1).act_info10 ,0) + p_ni_l_balance.act_info10;
11914         l_ni_emp_run                                            := l_ni_emp_run + p_ni_l_balance.act_info10;
11915         l_archive_tab_ni_det_1(already_l1).act_info11           := p_ni_l_balance.act_info11;
11916         l_archive_tab_ni_det_1(already_l1).act_info12           := l_prepay_payroll_action_id||','||l_aggr_max_act_id;
11917       END IF;
11918 --end ni balances
11919  ni_contrib_2 := 0;
11920  ni_contrib_ytd_2 := 0;
11921    FOR k IN 0..i_2
11922     LOOP
11923       hr_utility.trace('k_paye_agg:' || k);
11924       IF l_archive_tab_ni_det_1(k).act_info10 IS NOT NULL THEN
11925         ni_contrib_2  := NVL(ni_contrib_2,0) + l_archive_tab_ni_det_1(k).act_info10;
11926         ni_contrib_ytd_2 := NVL(ni_contrib_ytd_2,0) + l_archive_tab_ni_det_1(k).act_info8;
11927       END IF;
11928     END LOOP;
11929 
11930 
11931 l_archive_tab_det2(l_archive_det2_counter).action_info_category := 'GB_RTI_FPS_ASG_DET2';
11932 l_archive_tab_det2(l_archive_det2_counter).assignment_id := l_cur_asg_id;
11933     hr_utility.trace('l_ni_emp_run' ||l_ni_emp_run);
11934     hr_utility.trace('l_archive_tab_det2(l_archive_det2_counter).act_info8' ||l_archive_tab_det2(l_archive_det2_counter).act_info8);
11935     hr_utility.trace('l_archive_tab_det2(l_archive_det2_counter).act_info16' ||l_archive_tab_det2(l_archive_det2_counter).act_info16);
11936     hr_utility.trace('l_archive_tab_det2(l_archive_det2_counter).act_info17' ||l_archive_tab_det2(l_archive_det2_counter).act_info17);
11937     hr_utility.trace('l_non_bacs_payment' ||l_non_bacs_payment);
11938     -- Derive the fields 58B and 59
11939     -- 58B
11940     l_archive_tab_det2(l_archive_det2_counter).act_info8 := NVL(l_archive_tab_det2(l_archive_det2_counter).act_info8,0) -- Prev holds Total Deductions
11941                                   - NVL(l_archive_tab_det2(l_archive_det2_counter).act_info16,0) -- Student Loan
11942                                   - NVL(l_archive_tab_det2(l_archive_det2_counter).act_info17,0) -- PAYE
11943                                   - NVL(l_ni_emp_run,0) -- NI
11944                                   + l_non_bacs_payment;
11945    -- 59
11946     l_archive_tab_det2(l_archive_det2_counter).act_info9 := NVL(l_archive_tab_det2(l_archive_det2_counter).act_info9,0)
11947                                   - NVL(l_archive_tab_det2(l_archive_det2_counter).act_info16,0) -- Student Loan
11948                                   - NVL(l_archive_tab_det2(l_archive_det2_counter).act_info17,0) -- PAYE
11949                                   - NVL(l_ni_emp_run,0) -- NI
11950                                   + NVL(l_archive_tab_det2(l_archive_det2_counter).act_info10,0); -- sum of all 'Benefits Taxed Through payroll%'
11951     l_archive_tab_det2(l_archive_det2_counter).act_info5  := NVL(ni_contrib_ytd_2,0);
11952     l_archive_tab_det2(l_archive_det2_counter).act_info24 := NVL(ni_contrib_2,0);
11953 
11954 
11955     hr_utility.trace('After Assigning local values to the actual contexts ');
11956     l_archive_det1_counter := l_archive_det1_counter + 1;
11957     l_archive_det2_counter := l_archive_det2_counter + 1;
11958 
11959 end if; --nvl(l_asg_act_processed_earlier,-1) <> 0
11960 
11961 end if;  -- This end if is for if (nvl(l_processed_in_prepayment, 'N') <> 'Y') then
11962 end if; --if (l_fps_action_exists = 'Y') then --Fix for the bug 16409794
11963 
11964 --l_archive_det1_counter_local := l_archive_det1_counter_local + 1;
11965     CLOSE csr_processed_in_prepayment;
11966 --
11967     CLOSE csr_aggr_locking_asg_act_id;
11968     hr_utility.trace('After csr_aggr_locking_asg_act_id');
11969 l_single_payroll_run_exists := l_single_payroll_run_exists + 1;
11970     hr_utility.trace('l_single_payroll_run_exists end point: ' ||l_single_payroll_run_exists);
11971 l_cur_asg_action_id := l_aggr_locking_asg_act_id;
11972 --      EXIT WHEN l_aggr_sequence_id > l_last_asg_action_id;
11973       EXIT WHEN nvl(l_aggr_locking_asg_act_id, l_last_asg_action_id + 1) > l_last_asg_action_id;
11974 
11975 end if; --csr_chk_prepayment_run
11976 END LOOP;
11977   CLOSE csr_aggr_all_payroll_actions;
11978 --
11979     hr_utility.trace('l_single_payroll_run_exists: ' ||l_single_payroll_run_exists);
11980 if (l_single_payroll_run_exists = 1) then
11981 
11982 l_asg_act_processed_earlier := 0;
11983 
11984 --
11985     hr_utility.trace(' l_person_id: ' ||l_person_id);
11986     hr_utility.trace(' l_cur_asg_id: ' ||l_cur_asg_id);
11987     hr_utility.trace(' l_last_asg_action_id: ' ||l_last_asg_action_id);
11988     hr_utility.trace(' l_asg_id: ' ||l_asg_id);
11989 
11990 --    OPEN csr_asg_act_processed_earlier(l_person_id, l_cur_asg_id, l_last_asg_action_id);
11991     OPEN csr_asg_act_processed_earlier(l_person_id, l_asg_id, l_last_asg_action_id);
11992       FETCH csr_asg_act_processed_earlier
11993       INTO l_asg_act_processed_earlier;
11994     CLOSE csr_asg_act_processed_earlier;
11995 
11996     hr_utility.trace('l_asg_act_processed_earlier: ' ||l_asg_act_processed_earlier);
11997 
11998 if (nvl(l_asg_act_processed_earlier,-1) <> 0 and l_retry_req_flag is null) then
11999     hr_utility.trace('Current Assignment is already processed in an earlier FPS run. Hence, not processing now.');
12000     l_archive_flag := 'N';
12001 populate_run_msg(p_assactid, ' Assignment ' || l_assignment_number|| ' is already processed.','W');
12002 fnd_file.put_line (fnd_file.LOG,' Assignment ' || l_assignment_number|| ' is already processed.');
12003 
12004 end if;
12005 
12006 end if;
12007 
12008 
12009 
12010     hr_utility.trace('Aggregated new code ends here');
12011 
12012     hr_utility.trace('l_archive_flag: ' ||l_archive_flag);
12013 
12014     hr_utility.trace('Before l_archive_det1_counter' ||l_archive_det1_counter);
12015     hr_utility.trace('Before l_archive_det2_counter' ||l_archive_det2_counter);
12016 	hr_utility.trace('Before l_archive_det1_counter.count' ||l_archive_tab_det1.count);
12017     hr_utility.trace('Before l_archive_det2_counter.count' ||l_archive_tab_det2.count);
12018 
12019 --if (nvl(l_archive_flag,'Y') <> 'N')  and (l_archive_tab_det1.count > 0 and l_archive_tab_det2.count > 0) then
12020 if (nvl(l_archive_flag,'Y') <> 'N') then
12021 
12022 if ( (l_archive_det1_counter < l_archive_tab_det1.count  and
12023 l_archive_tab_det1(l_archive_det1_counter).act_info3 is not null) or l_retry_req_flag is null) then
12024 null;
12025     hr_utility.set_location('inside if', 10);
12026 else
12027     hr_utility.set_location('inside else', 10);
12028 l_archive_det1_counter := l_archive_det1_counter - 1;
12029 l_archive_det2_counter := l_archive_det2_counter - 1;
12030 end if;
12031 
12032 hr_utility.trace('l_archive_tab_det1(l_archive_det1_counter).assignment_id: ' ||l_archive_tab_det1(l_archive_det1_counter).assignment_id);
12033 hr_utility.trace('l_archive_tab_det2(l_archive_det2_counter).assignment_id: ' ||l_archive_tab_det2(l_archive_det2_counter).assignment_id);
12034 hr_utility.trace('l_archive_tab_det1(l_archive_det1_counter).act_info3: ' ||l_archive_tab_det1(l_archive_det1_counter).act_info3);
12035 
12036 set_address_fields(l_archive_tab(1),l_archive_tab(0),l_archive_tab_det1(l_archive_det1_counter));
12037 
12038     -- Validating fetched Person,Address,Assignment details for FPS
12039     hr_utility.set_location('Calling Person Address validations', 10);
12040 --   pay_gb_rti_fps_validate.person_address_validations(p_assactid, p_effective_date, l_archive_tab,l_per_addr_val_flag);
12041     hr_utility.trace('After l_archive_det1_counter' ||l_archive_det1_counter);
12042     hr_utility.trace('After l_archive_det2_counter' ||l_archive_det2_counter);
12043 
12044    pay_gb_rti_fps_validate_13.person_addr_validations_aggr(p_assactid,
12045                                                         p_effective_date,
12046                                                         l_archive_tab,
12047                                                         l_archive_tab_det1(l_archive_det1_counter),
12048                                                         l_archive_tab_det2(l_archive_det2_counter),
12049                                                         l_per_addr_val_flag);
12050 
12051     hr_utility.trace('person address' ||l_per_addr_val_flag);
12052 
12053 --l_per_addr_val_flag  := 'N'; --for testing
12054 
12055     IF l_per_addr_val_flag  = 'Y' THEN -- If validation fails
12056       l_personaddr_val_err := TRUE;
12057     END IF;
12058 
12059     hr_utility.set_location('Calling FPS validations', 10);
12060 
12061     hr_utility.trace('l_archive_det1_counter' ||l_archive_det1_counter);
12062     hr_utility.trace('l_archive_det2_counter' ||l_archive_det2_counter);
12063 
12064     hr_utility.trace('l_archive_tab_det1(l_archive_det1_counter)' ||l_archive_tab_det1(l_archive_det1_counter).act_info1);
12065     hr_utility.trace('l_archive_tab_det1(l_archive_det1_counter)' ||l_archive_tab_det1(l_archive_det1_counter).act_info2);
12066     hr_utility.trace('l_archive_tab_det1(l_archive_det1_counter)' ||l_archive_tab_det1(l_archive_det1_counter).act_info3);
12067 
12068 
12069 --    pay_gb_rti_fps_validate.assignment_validations(p_assactid, p_effective_date, l_archive_tab,l_fps_etext_asg_flag);
12070     pay_gb_rti_fps_validate_13.assignment_validations_aggr(p_assactid,
12071                                                    p_effective_date,
12072                                                    l_archive_tab,
12073                                                    l_archive_tab_det1(l_archive_det1_counter),
12074                                                    l_archive_tab_det2(l_archive_det2_counter),
12075                                                    l_fps_etext_asg_flag);
12076 
12077 --l_fps_etext_asg_flag := 'N'; --for testing
12078     hr_utility.trace('l_fps_etext_asg_flag' ||l_fps_etext_asg_flag);
12079 
12080     IF l_fps_etext_asg_flag = 'Y' THEN -- If validation fails
12081       l_fps_val_err        := TRUE;
12082     END IF;
12083 
12084     hr_utility.set_location('After Calling FPS validations', 10);
12085     -- LOOP through all NIs
12086  --commented below For Loop whole code for testing
12087     FOR i_count IN 0..i_2
12088     LOOP
12089 
12090       hr_utility.set_location ('Calling FPS NI validations: i_2', 10);
12091 
12092       pay_gb_rti_fps_validate_13.ni_validations(p_assactid, p_effective_date, l_archive_tab_ni_det_1,i_count,l_fps_etext_ni_flag);
12093 
12094 --      l_fps_etext_ni_flag := 'N';  --for testing
12095 
12096       IF l_fps_etext_ni_flag = 'Y' THEN -- If validation fails
12097         l_fps_ni_val_err    := TRUE;
12098       END IF;
12099     END LOOP;
12100 
12101     FOR i_count IN 0..i_1
12102     LOOP
12103 
12104       hr_utility.set_location ('Calling FPS NI validations : i_1', 10);
12105 
12106       pay_gb_rti_fps_validate_13.ni_validations(p_assactid, p_effective_date, l_archive_tab_ni_det,i_count,l_fps_etext_ni_flag);
12107 
12108 --      l_fps_etext_ni_flag := 'N';  --for testing
12109 
12110       IF l_fps_etext_ni_flag = 'Y' THEN -- If validation fails
12111         l_fps_ni_val_err    := TRUE;
12112       END IF;
12113     END LOOP;
12114 
12115    hr_utility.set_location('After Calling FPS validations', 10);
12116 
12117     IF l_archive_person AND l_archive_addr AND l_archive_asg_det1 AND l_archive_asg_det2 THEN
12118 --    IF l_archive_person AND l_archive_addr AND l_archive_asg_det1 THEN   --for testing
12119 --      IF l_personaddr_val_err OR l_fps_val_err OR l_fps_ni_val_err -- If validation fails , that record will not be archived.
12120       IF l_personaddr_val_err OR l_fps_val_err OR l_fps_ni_val_err -- If validation fails , that record will not be archived.
12121         THEN
12122         hr_utility.set_location('Validation failed, raise error.',999);
12123         fnd_file.put_line(fnd_file.LOG,'Not Archiving');
12124         raise error_found;
12125       ELSE
12126 
12127         hr_utility.set_location('Validation successful, archive data.',999);
12128         insert_archive_row(p_assactid, p_effective_date,l_archive_tab);
12129         insert_archive_row_agg(p_assactid, p_effective_date,l_archive_tab_det1);
12130         insert_archive_row_agg(p_assactid, p_effective_date,l_archive_tab_det2);
12131         insert_archive_row_agg(p_assactid, p_effective_date,l_archive_tab_det3);
12132         insert_archive_row_agg(p_assactid, p_effective_date,l_archive_tab_ni_det);
12133         insert_archive_row_agg(p_assactid, p_effective_date,l_archive_tab_ni_det_1);
12134       /*  -- lock the pre payments action id with current fps assignment action id
12135         begin
12136         hr_nonrun_asact.insint(p_assactid, l_prepay_asg_action_id);
12137         exception
12138         when dup_val_on_index then
12139            hr_utility.set_location(sqlcode || '-' || sqlerrm,60);
12140            hr_utility.set_location('Skip locking for retry.Locking action id-'||p_assactid || ' Locked action id-' || l_prepay_asg_action_id,60);
12141         end;
12142 */
12143 
12144 /*select count(*)
12145 into l_rec_count
12146 from PAY_GB_FPS_DETAILS
12147 where ASSIGNMENT_ID = l_asg_id
12148 and PERSON_ID = l_person_id
12149 and PAYROLL_ASG_ACT_ID = l_last_asg_action_id;
12150 
12151 if l_rec_count = 0 then
12152         hr_utility.set_location('2 inserting',999);
12153         hr_utility.set_location('2 l_asg_id: '||l_asg_id,999);
12154         hr_utility.set_location('2 p_assactid: '||p_assactid,999);
12155         hr_utility.set_location('2 l_last_asg_action_id: '||l_last_asg_action_id,999);
12156         hr_utility.set_location('2 inserting',999);
12157       INSERT
12158       INTO PAY_GB_FPS_DETAILS
12159         (
12160           ASSIGNMENT_ID,
12161           PERSON_ID,
12162           FPS_ASG_ACT_ID,
12163           FPS_PAY_ACT_ID,
12164           FPS_EFFECTIVE_DATE,
12165           PREPAY_ASG_ACT_ID,
12166           PREPAY_PAY_ACT_ID,
12167           PREPAY_EFFECTIVE_DATE,
12168           PAYROLL_ASG_ACT_ID,
12169           PAYROLL_PAY_ACT_ID,
12170           PAYROLL_EFFECTIVE_DATE
12171         )
12172         VALUES
12173         (
12174           l_asg_id,
12175           l_person_id,
12176           p_assactid,
12177           g_payroll_action_id,
12178           g_fps_effective_date,
12179           l_prepay_asg_action_id,
12180           l_prepay_payroll_action_id,
12181           l_prepay_effective_date,
12182           l_last_asg_action_id,
12183           l_payroll_pact_id,
12184           l_last_effective_date
12185         );
12186 
12187 end if; */
12188       END IF;
12189     ELSE
12190       hr_utility.set_location('Archiving Error - assignment action id ' || p_assactid ,999);
12191       raise error_found;
12192     END IF;
12193 end if; -- if l_archive_flag check
12194 end if; -- if (l_total_payment <> 0) then --Fix for the bug 16409794
12195 end if; -- if l_asg_action_id =  p_assactid then
12196 --paye aggregation logic ends
12197     hr_utility.trace('Leaving Aggregated Code');
12198 
12199 elsif l_per_ni_agg_flag = 'Y' then
12200     hr_utility.trace('Entered NI Only -Aggregated Code');
12201 
12202   -- skip the NI aggregation logic if the current asg is not processed in this
12203   -- pre payments. This would be processed as part of max asg_act_id for this pre payment.
12204     open csr_rti_rpt_proc_prepay(l_asg_id,g_pre_pact_id);
12205     fetch csr_rti_rpt_proc_prepay into l_rti_ni_proc_flag;
12206     close csr_rti_rpt_proc_prepay;
12207     hr_utility.trace('l_rti_ni_proc_flag: '|| l_rti_ni_proc_flag);
12208  if nvl(l_rti_ni_proc_flag,'N') = 'Y' then
12209     hr_utility.trace('Processing NI Only -Aggregated Code for l_asg_id: ' || l_asg_id);
12210     OPEN csr_last_payroll_action(l_asg_id, g_pre_pact_id, l_asg_eff_start_date, g_start_year,g_end_year);
12211     FETCH csr_last_payroll_action
12212     INTO l_last_asg_action_id,
12213       l_last_effective_date;
12214     CLOSE csr_last_payroll_action;
12215 
12216     OPEN csr_prepay_asg_act_details(l_asg_id, g_pre_pact_id);
12217     FETCH csr_prepay_asg_act_details
12218     INTO l_prepay_asg_action_id,
12219       l_prepay_payroll_action_id,
12220       l_prepay_effective_date;
12221     CLOSE csr_prepay_asg_act_details;
12222 
12223 -- Get the RTI NI Reporting Assignment and effective date.
12224    open csr_ni_rpt_flag(l_asg_id);
12225    fetch csr_ni_rpt_flag into l_ni_rti_flag,l_ni_rti_date;
12226    close csr_ni_rpt_flag;
12227 
12228     hr_utility.trace('l_prepay_asg_action_id: '||l_prepay_asg_action_id);
12229     hr_utility.trace('l_prepay_payroll_action_id: '||l_prepay_payroll_action_id);
12230     hr_utility.trace('l_prepay_effective_date: '||l_prepay_effective_date);
12231 
12232     hr_utility.trace('l_last_asg_action_id: '||l_last_asg_action_id);
12233     hr_utility.trace('l_last_effective_date: '||l_last_effective_date);
12234     hr_utility.trace('l_ni_rti_flag: '||l_ni_rti_flag);
12235     hr_utility.trace('l_ni_rti_date: '||l_ni_rti_date);
12236 
12237     l_start_date  := l_asg_eff_start_date;
12238     l_end_date    := g_effective_date;
12239 
12240 ---
12241 
12242 l_bacs_payment_exists := 'N';
12243 
12244   OPEN csr_bacs_payment_exists (l_prepay_payroll_action_id,l_prepay_asg_action_id);
12245   FETCH csr_bacs_payment_exists INTO l_bacs_payment_exists;
12246   CLOSE csr_bacs_payment_exists;
12247 
12248 begin
12249   if (l_bacs_payment_exists = 'Y') then
12250   l_hash_code := PAY_GB_FPS_NI_AND_OTHERS_13.fetch_HASH_FPS_ASG(g_pre_pact_id, l_asg_id, l_large_bacs_payment);
12251   else
12252   l_hash_code := null;
12253   end if;
12254 exception
12255 when others then
12256 populate_run_msg(p_assactid, 'Hash error '||SQLERRM||' for the assignment ' || l_assignment_number|| '.');
12257 fnd_file.put_line (fnd_file.LOG,'Hash error '||SQLERRM||' for the assignment ' || l_assignment_number|| '.');
12258 raise_application_error(-20001,'Hash error '||SQLERRM||' for the assignment ' || l_assignment_number|| '.');
12259 end;
12260 
12261     hr_utility.trace('l_large_bacs_payment: '||l_large_bacs_payment);
12262     hr_utility.trace('l_hash_code: '||l_hash_code);
12263 
12264 ---
12265 
12266   OPEN csr_total_payment (l_prepay_asg_action_id);
12267   FETCH csr_total_payment INTO l_total_payment;
12268   CLOSE csr_total_payment;
12269 
12270     hr_utility.trace('l_total_payment: '||l_total_payment);
12271 
12272     l_non_bacs_payment := l_total_payment - l_large_bacs_payment;
12273 
12274     hr_utility.trace('l_non_bacs_payment: '||l_non_bacs_payment);
12275 ---
12276     hr_utility.set_location('Fetching person details ',10);
12277     l_archive_person := fetch_person_rec(p_assactid, l_asg_eff_start_date,g_effective_date,l_archive_tab(0));
12278     ---
12279     hr_utility.set_location('Fetching address details ',20);
12280     l_archive_addr := fetch_address_rec(l_archive_tab(0).person_id,
12281                                         l_archive_tab(0).assignment_id,
12282                                         g_effective_date,
12283                                         l_archive_tab(1));
12284     l_person_id    := l_archive_tab(0).person_id;
12285     --Fetching assignments details for FPS
12286     hr_utility.set_location('Fetching Assignment details ',30);
12287     l_archive_asg_det1 := fetch_fps_asg_det1(l_asg_eff_start_date,
12288                                              g_effective_date,
12289                                              p_assactid,
12290                                              l_last_asg_action_id,
12291 					     'Y',
12292                                              l_archive_tab(0),
12293                                              l_archive_tab(2),
12294                                              p_starter_set);
12295 
12296     hr_utility.set_location('Assignment Hash Coode to archive record',30);
12297     l_archive_tab(2).act_info28 := l_hash_code;
12298 
12299     hr_utility.set_location('Ni Agg Fetching Details3',30);
12300     l_archive_asg_det1 := fetch_asg_det3(    l_archive_tab(0).assignment_id,
12301                                              l_cur_asg_action_id,
12302                                              l_archive_tab_det3(0));
12303     hr_utility.set_location('Ni End Agg Fetching Details3',30);
12304 
12305     --****************************
12306     i                              := 3;
12307     l_archive_tab(3).assignment_id := l_asg_id;
12308 
12309     OPEN csr_all_payroll_actions(l_asg_id, g_pre_pact_id, l_asg_eff_start_date, g_start_year,g_end_year);
12310     LOOP
12311       FETCH csr_all_payroll_actions
12312       INTO l_last_asg_action_id,
12313         l_last_effective_date;
12314       EXIT
12315     WHEN csr_all_payroll_actions%NOTFOUND;
12316 
12317 
12318       pay_gb_fps_ni_and_others_13.get_ni_only_agg_bal_for_asg(l_last_asg_action_id,
12319                                                        p_ni_a_balance,
12320                                                        p_ni_b_balance,
12321                                                        p_ni_c_balance,
12322                                                        p_ni_d_balance,
12323                                                        p_ni_e_balance,
12324                                                        p_ni_j_balance,
12325                                                        p_ni_l_balance);
12326 
12327       IF (p_ni_a_balance.act_info1 IS NOT NULL) THEN
12328         IF already_a                =  -1 THEN
12329           i                        := i+1;
12330           already_a                := i;
12331         END IF;
12332 
12333         l_archive_tab(already_a).assignment_id        := l_archive_tab(0).assignment_id;
12334         l_archive_tab(already_a).action_info_category := 'GB_RTI_FPS_NI_DET';
12335         l_archive_tab(already_a).act_info1            := p_ni_a_balance.act_info1;
12336         l_archive_tab(already_a).act_info2            := nvl(l_archive_tab(already_a).act_info2,0) + p_ni_a_balance.act_info2;
12337         l_archive_tab(already_a).act_info3            := p_ni_a_balance.act_info3;
12338         l_archive_tab(already_a).act_info4            := p_ni_a_balance.act_info4;
12339         l_archive_tab(already_a).act_info5            := p_ni_a_balance.act_info5;
12340         l_archive_tab(already_a).act_info6            := p_ni_a_balance.act_info6;
12341         l_archive_tab(already_a).act_info7            := p_ni_a_balance.act_info7;
12342         l_archive_tab(already_a).act_info8            := p_ni_a_balance.act_info8;
12343         l_archive_tab(already_a).act_info9           := NVL(l_archive_tab(already_a).act_info9 ,0) + p_ni_a_balance.act_info9;
12344         l_archive_tab(already_a).act_info10           := NVL(l_archive_tab(already_a).act_info10 ,0) + p_ni_a_balance.act_info10;
12345         l_archive_tab(already_a).act_info11           := p_ni_a_balance.act_info11;
12346 
12347       END IF;
12348       -- For Category B
12349       IF (p_ni_b_balance.act_info1 IS NOT NULL) THEN
12350         IF already_b                =  -1 THEN
12351           i                        := i+1;
12352           already_b                := i;
12353         END IF;
12354         l_archive_tab(already_b).assignment_id        := l_archive_tab(0).assignment_id;
12355         l_archive_tab(already_b).action_info_category := 'GB_RTI_FPS_NI_DET';
12356         l_archive_tab(already_b).act_info1            := p_ni_b_balance.act_info1;
12357         l_archive_tab(already_b).act_info2            := nvl(l_archive_tab(already_b).act_info2,0) + p_ni_b_balance.act_info2;
12358         l_archive_tab(already_b).act_info3            := p_ni_b_balance.act_info3;
12359         l_archive_tab(already_b).act_info4            := p_ni_b_balance.act_info4;
12360         l_archive_tab(already_b).act_info5            := p_ni_b_balance.act_info5;
12361         l_archive_tab(already_b).act_info6            := p_ni_b_balance.act_info6;
12362         l_archive_tab(already_b).act_info7            := p_ni_b_balance.act_info7;
12363         l_archive_tab(already_b).act_info8            := p_ni_b_balance.act_info8;
12364         l_archive_tab(already_b).act_info9           := NVL(l_archive_tab(already_b).act_info9 ,0) + p_ni_b_balance.act_info9;
12365         l_archive_tab(already_b).act_info10           := NVL(l_archive_tab(already_b).act_info10 ,0) + p_ni_b_balance.act_info10;
12366         l_archive_tab(already_b).act_info11           := p_ni_b_balance.act_info11;
12367       END IF;
12368       -- For Category C
12369       IF (p_ni_c_balance.act_info1 IS NOT NULL) THEN
12370         IF already_c                =  -1 THEN
12371           i                        := i+1;
12372           already_c                := i;
12373         END IF;
12374         l_archive_tab(already_c).assignment_id        := l_archive_tab(0).assignment_id;
12375         l_archive_tab(already_c).action_info_category := 'GB_RTI_FPS_NI_DET';
12376         l_archive_tab(already_c).act_info1            := p_ni_c_balance.act_info1;
12377         l_archive_tab(already_c).act_info2            := nvl(l_archive_tab(already_c).act_info2,0) + p_ni_c_balance.act_info2;
12378         l_archive_tab(already_c).act_info3            := p_ni_c_balance.act_info3;
12379         l_archive_tab(already_c).act_info4            := p_ni_c_balance.act_info4;
12380         l_archive_tab(already_c).act_info5            := p_ni_c_balance.act_info5;
12381         l_archive_tab(already_c).act_info6            := p_ni_c_balance.act_info6;
12382         l_archive_tab(already_c).act_info7            := p_ni_c_balance.act_info7;
12383         l_archive_tab(already_c).act_info8            := p_ni_c_balance.act_info8;
12384         l_archive_tab(already_c).act_info9           := NVL(l_archive_tab(already_c).act_info9 ,0) + p_ni_c_balance.act_info9;
12385         l_archive_tab(already_c).act_info10           := NVL(l_archive_tab(already_c).act_info10 ,0) + p_ni_c_balance.act_info10;
12386         l_archive_tab(already_c).act_info11           := p_ni_c_balance.act_info11;
12387 
12388       END IF;
12389       --For Category D
12390       IF (p_ni_d_balance.act_info1 IS NOT NULL) THEN
12391         IF already_d                =  -1 THEN
12392           i                        := i+1;
12393           already_d                := i;
12394         END IF;
12395         l_archive_tab(already_d).assignment_id        := l_archive_tab(0).assignment_id;
12396         l_archive_tab(already_d).action_info_category := 'GB_RTI_FPS_NI_DET';
12397         l_archive_tab(already_d).act_info1            := p_ni_d_balance.act_info1;
12398         l_archive_tab(already_d).act_info2            := nvl(l_archive_tab(already_d).act_info2,0) + p_ni_d_balance.act_info2;
12399         l_archive_tab(already_d).act_info3            := p_ni_d_balance.act_info3;
12400         l_archive_tab(already_d).act_info4            := p_ni_d_balance.act_info4;
12401         l_archive_tab(already_d).act_info5            := p_ni_d_balance.act_info5;
12402         l_archive_tab(already_d).act_info6            := p_ni_d_balance.act_info6;
12403         l_archive_tab(already_d).act_info7            := p_ni_d_balance.act_info7;
12404         l_archive_tab(already_d).act_info8            := p_ni_d_balance.act_info8;
12405         l_archive_tab(already_d).act_info9           := NVL(l_archive_tab(already_d).act_info9,0) + p_ni_d_balance.act_info9;
12406         l_archive_tab(already_d).act_info10           := NVL(l_archive_tab(already_d).act_info10,0) + p_ni_d_balance.act_info10;
12407         l_archive_tab(already_d).act_info11           := p_ni_d_balance.act_info11;
12408       END IF;
12409       -- For Category E
12410       IF (p_ni_e_balance.act_info1 IS NOT NULL) THEN
12411         IF already_e                =  -1 THEN
12412           i                        := i+1;
12413           already_e                := i;
12414         END IF;
12415         l_archive_tab(already_e).assignment_id        := l_archive_tab(0).assignment_id;
12416         l_archive_tab(already_e).action_info_category := 'GB_RTI_FPS_NI_DET';
12417         l_archive_tab(already_e).act_info1            := p_ni_e_balance.act_info1;
12418         l_archive_tab(already_e).act_info2            := nvl(l_archive_tab(already_e).act_info2,0) + p_ni_e_balance.act_info2;
12419         l_archive_tab(already_e).act_info3            := p_ni_e_balance.act_info3;
12420         l_archive_tab(already_e).act_info4            := p_ni_e_balance.act_info4;
12421         l_archive_tab(already_e).act_info5            := p_ni_e_balance.act_info5;
12422         l_archive_tab(already_e).act_info6            := p_ni_e_balance.act_info6;
12423         l_archive_tab(already_e).act_info7            := p_ni_e_balance.act_info7;
12424         l_archive_tab(already_e).act_info8            := p_ni_e_balance.act_info8;
12425         l_archive_tab(already_e).act_info9           := NVL(l_archive_tab(already_e).act_info9 ,0) + p_ni_e_balance.act_info9;
12426         l_archive_tab(already_e).act_info10           := NVL(l_archive_tab(already_e).act_info10 ,0) + p_ni_e_balance.act_info10;
12427         l_archive_tab(already_e).act_info11           := p_ni_e_balance.act_info11;
12428       END IF;
12429       -- For Category J
12430       IF (p_ni_j_balance.act_info1 IS NOT NULL) THEN
12431         IF already_j                =  -1 THEN
12432           i                        := i+1;
12433           already_j                := i;
12434         END IF;
12435         l_archive_tab(already_j).assignment_id        := l_archive_tab(0).assignment_id;
12436         l_archive_tab(already_j).action_info_category := 'GB_RTI_FPS_NI_DET';
12437         l_archive_tab(already_j).act_info1            := p_ni_j_balance.act_info1;
12438         l_archive_tab(already_j).act_info2            := nvl(l_archive_tab(already_j).act_info2,0) + p_ni_j_balance.act_info2;
12439         l_archive_tab(already_j).act_info3            := p_ni_j_balance.act_info3;
12440         l_archive_tab(already_j).act_info4            := p_ni_j_balance.act_info4;
12441         l_archive_tab(already_j).act_info5            := p_ni_j_balance.act_info5;
12442         l_archive_tab(already_j).act_info6            := p_ni_j_balance.act_info6;
12443         l_archive_tab(already_j).act_info7            := p_ni_j_balance.act_info7;
12444         l_archive_tab(already_j).act_info8            := p_ni_j_balance.act_info8;
12445         l_archive_tab(already_j).act_info9           := NVL(l_archive_tab(already_j).act_info9 ,0) + p_ni_j_balance.act_info9;
12446         l_archive_tab(already_j).act_info10           := NVL(l_archive_tab(already_j).act_info10 ,0) + p_ni_j_balance.act_info10;
12447         l_archive_tab(already_j).act_info11           := p_ni_j_balance.act_info11;
12448       END IF;
12449       -- For Category L
12450       IF (p_ni_l_balance.act_info1 IS NOT NULL) THEN
12451         IF already_l                =  -1 THEN
12452           i                        := i+1;
12453           already_l                := i;
12454         END IF;
12455         l_archive_tab(already_l).assignment_id        := l_archive_tab(0).assignment_id;
12456         l_archive_tab(already_l).action_info_category := 'GB_RTI_FPS_NI_DET';
12457         l_archive_tab(already_l).act_info1            := p_ni_l_balance.act_info1;
12458         l_archive_tab(already_l).act_info2            := nvl(l_archive_tab(already_l).act_info2,0) + p_ni_l_balance.act_info2;
12459         l_archive_tab(already_l).act_info3            := p_ni_l_balance.act_info3;
12460         l_archive_tab(already_l).act_info4            := p_ni_l_balance.act_info4;
12461         l_archive_tab(already_l).act_info5            := p_ni_l_balance.act_info5;
12462         l_archive_tab(already_l).act_info6            := p_ni_l_balance.act_info6;
12463         l_archive_tab(already_l).act_info7            := p_ni_l_balance.act_info7;
12464         l_archive_tab(already_l).act_info8            := p_ni_l_balance.act_info8;
12465         l_archive_tab(already_l).act_info9            :=  NVL(l_archive_tab(already_l).act_info9 ,0) + p_ni_l_balance.act_info9;
12466         l_archive_tab(already_l).act_info10           := NVL(l_archive_tab(already_l).act_info10 ,0) + p_ni_l_balance.act_info10;
12467         l_archive_tab(already_l).act_info11           := p_ni_l_balance.act_info11;
12468       END IF;
12469 
12470       l_archive_asg_det2 := fetch_fps_asg_det2(l_last_asg_action_id,l_asg_id,l_archive_tab(3));
12471       hr_utility.trace('after det2');
12472       OPEN csr_pay_act_details(l_last_asg_action_id);
12473       FETCH csr_pay_act_details INTO l_payroll_pact_id;
12474       CLOSE csr_pay_act_details;
12475 
12476       INSERT
12477       INTO PAY_GB_FPS_DETAILS
12478         (
12479           ASSIGNMENT_ID,
12480           PERSON_ID,
12481           FPS_ASG_ACT_ID,
12482           FPS_PAY_ACT_ID,
12483           FPS_EFFECTIVE_DATE,
12484           PREPAY_ASG_ACT_ID,
12485           PREPAY_PAY_ACT_ID,
12486           PREPAY_EFFECTIVE_DATE,
12487           PAYROLL_ASG_ACT_ID,
12488           PAYROLL_PAY_ACT_ID,
12489           PAYROLL_EFFECTIVE_DATE
12490         )
12491         VALUES
12492         (
12493           l_asg_id,
12494           l_person_id,
12495           p_assactid,
12496           g_payroll_action_id,
12497           g_fps_effective_date,
12498           l_prepay_asg_action_id,
12499           l_prepay_payroll_action_id,
12500           l_prepay_effective_date,
12501           l_last_asg_action_id,
12502           l_payroll_pact_id,
12503           l_last_effective_date
12504         );
12505 
12506     END LOOP;
12507 
12508     CLOSE csr_all_payroll_actions;
12509       hr_utility.trace('1');
12510       hr_utility.trace('i' || i);
12511 
12512 
12513 
12514     FOR k IN 4..i
12515     LOOP
12516       hr_utility.trace('k:' || k);
12517       IF l_archive_tab(k).act_info10 IS NOT NULL THEN
12518         ni_contrib  := NVL(ni_contrib,0) + l_archive_tab(k).act_info10;
12519         ni_contrib_ytd := NVL(ni_contrib_ytd,0) + l_archive_tab(k).act_info8;
12520       END IF;
12521       hr_utility.trace('k:before c_asg_act_id' || k);
12522       if l_archive_tab(k).act_info1 is not null then
12523           FOR c_asg_act_id in csr_asg_act_oth_asgs(l_asg_id)
12524           loop
12525                   hr_utility.trace('c_asg_act_id' || c_asg_act_id.asg_act_id);
12526                   hr_utility.trace('act_info2' || l_archive_tab(k).act_info2);
12527                   hr_utility.trace('act_info1' || l_archive_tab(k).act_info1);
12528                   --add_other_asg_ni_ytd(c_asg_act_id.asg_act_id, l_archive_tab(k));
12529           end loop;
12530       end if;
12531     END LOOP;
12532 /*
12533     FOR k IN 4..i
12534     LOOP
12535       IF l_archive_tab(i).act_info1 IS NOT NULL THEN
12536       	l_archive_tab(i).act_info7  := NVL(l_archive_tab(3).act_info23,0);
12537         l_archive_tab(i).act_info8  := NVL(l_archive_tab(3).act_info4,0);
12538 		l_archive_tab(i).act_info9  := NVL(ni_contrib,0);
12539 		l_archive_tab(i).act_info10 := NVL(ni_contrib_ytd,0);
12540       END IF;
12541     END LOOP;
12542 */
12543     hr_utility.trace( 'value of i :' || i);
12544     hr_utility.trace('Assignment id : ' || l_asg_id);
12545     hr_utility.trace('ni_contrib : ' || ni_contrib);
12546     hr_utility.trace('l_archive_tab(3).act_info8 : ' || l_archive_tab(3).act_info8 );
12547     hr_utility.trace('l_archive_tab(3).act_info9 : ' || l_archive_tab(3).act_info9 );
12548 
12549     -- Derive the fields 58B and 59
12550     -- 58B
12551     l_archive_tab(3).act_info8 := NVL(l_archive_tab(3).act_info8,0) -- Prev holds Total Deductions
12552                                   - NVL(l_archive_tab(3).act_info16,0) -- Student Loan
12553                                   - NVL(l_archive_tab(3).act_info17,0) -- PAYE
12554                                   - NVL(ni_contrib,0) -- NI
12555                                   + l_non_bacs_payment;
12556    -- 59
12557     l_archive_tab(3).act_info9 := NVL(l_archive_tab(3).act_info9,0)
12558                                   - NVL(l_archive_tab(3).act_info16,0) -- Student Loan
12559                                   - NVL(l_archive_tab(3).act_info17,0) -- PAYE
12560                                   - NVL(ni_contrib,0) -- NI
12561                                   + NVL(l_archive_tab(3).act_info10,0); -- sum of all 'Benefits Taxed Through payroll%'
12562     l_archive_tab(3).act_info5  := NVL(ni_contrib_ytd,0);
12563     l_archive_tab(3).act_info24 := NVL(ni_contrib,0);
12564        l_archive_tab(3).act_info29 := g_pre_pact_id||','||l_last_asg_action_id;
12565     l_archive_tab(2).act_info29 := g_pre_pact_id||','||l_last_asg_action_id;
12566 -- get the max assingment action id prcessed in this prepayment
12567 -- get the YTD values for that assignment action id
12568 open csr_aggr_max_act_id(l_person_id,g_pre_pact_id,l_last_effective_date);
12569 fetch csr_aggr_max_act_id into l_count_asg,l_max_prepay_act_id;
12570 close csr_aggr_max_act_id;
12571 
12572 pay_gb_fps_ni_and_others_13.get_ni_only_bal_rti_rpt(l_max_prepay_act_id,
12573                                                        p_per_ni_a_balance,
12574                                                        p_per_ni_b_balance,
12575                                                        p_per_ni_c_balance,
12576                                                        p_per_ni_d_balance,
12577                                                        p_per_ni_e_balance,
12578                                                        p_per_ni_j_balance,
12579                                                        p_per_ni_l_balance);
12580 -----
12581 /*FOR l_asg_act_rec in csr_asg_in_prepay(l_person_id)
12582 loop
12583 pay_gb_fps_ni_and_others.get_ni_only_agg_bal_sum_asg(l_asg_act_rec.asg_act_id,
12584                                                        p_per_ni_a_balance,
12585                                                        p_per_ni_b_balance,
12586                                                        p_per_ni_c_balance,
12587                                                        p_per_ni_d_balance,
12588                                                        p_per_ni_e_balance,
12589                                                        p_per_ni_j_balance,
12590                                                        p_per_ni_l_balance);
12591 end loop;
12592 */
12593 -- trace for customer
12594     hr_utility.trace('New Trace messages starts here : ');
12595     hr_utility.trace('p_per_ni_a_balance.assignment_id : ' || p_per_ni_a_balance.assignment_id);
12596     hr_utility.trace('p_per_ni_a_balance.act_info1 : ' || p_per_ni_a_balance.act_info1);
12597     hr_utility.trace('p_per_ni_a_balance.act_info2 : ' || p_per_ni_a_balance.act_info2);
12598     hr_utility.trace('p_per_ni_a_balance.act_info3 : ' || p_per_ni_a_balance.act_info3);
12599     hr_utility.trace('p_per_ni_a_balance.act_info4 : ' || p_per_ni_a_balance.act_info4);
12600     hr_utility.trace('p_per_ni_a_balance.act_info5 : ' || p_per_ni_a_balance.act_info5);
12601     hr_utility.trace('p_per_ni_a_balance.act_info6 : ' || p_per_ni_a_balance.act_info6);
12602     hr_utility.trace('p_per_ni_a_balance.act_info7 : ' || p_per_ni_a_balance.act_info7);
12603     hr_utility.trace('p_per_ni_a_balance.act_info8 : ' || p_per_ni_a_balance.act_info8);
12604     hr_utility.trace('p_per_ni_a_balance.act_info9 : ' || p_per_ni_a_balance.act_info9);
12605     hr_utility.trace('p_per_ni_a_balance.act_info10 : ' || p_per_ni_a_balance.act_info10);
12606 -----
12607     hr_utility.trace('p_per_ni_b_balance.assignment_id : ' || p_per_ni_b_balance.assignment_id);
12608     hr_utility.trace('p_per_ni_b_balance.act_info1 : ' || p_per_ni_b_balance.act_info1);
12609     hr_utility.trace('p_per_ni_b_balance.act_info2 : ' || p_per_ni_b_balance.act_info2);
12610     hr_utility.trace('p_per_ni_b_balance.act_info3 : ' || p_per_ni_b_balance.act_info3);
12611     hr_utility.trace('p_per_ni_b_balance.act_info4 : ' || p_per_ni_b_balance.act_info4);
12612     hr_utility.trace('p_per_ni_b_balance.act_info5 : ' || p_per_ni_b_balance.act_info5);
12613     hr_utility.trace('p_per_ni_b_balance.act_info6 : ' || p_per_ni_b_balance.act_info6);
12614     hr_utility.trace('p_per_ni_b_balance.act_info7 : ' || p_per_ni_b_balance.act_info7);
12615     hr_utility.trace('p_per_ni_b_balance.act_info8 : ' || p_per_ni_b_balance.act_info8);
12616     hr_utility.trace('p_per_ni_b_balance.act_info9 : ' || p_per_ni_b_balance.act_info9);
12617     hr_utility.trace('p_per_ni_b_balance.act_info10 : ' || p_per_ni_b_balance.act_info10);
12618 ---
12619     hr_utility.trace('p_per_ni_c_balance.assignment_id : ' || p_per_ni_c_balance.assignment_id);
12620     hr_utility.trace('p_per_ni_c_balance.act_info1 : ' || p_per_ni_c_balance.act_info1);
12621     hr_utility.trace('p_per_ni_c_balance.act_info2 : ' || p_per_ni_c_balance.act_info2);
12622     hr_utility.trace('p_per_ni_c_balance.act_info3 : ' || p_per_ni_c_balance.act_info3);
12623     hr_utility.trace('p_per_ni_c_balance.act_info4 : ' || p_per_ni_c_balance.act_info4);
12624     hr_utility.trace('p_per_ni_c_balance.act_info5 : ' || p_per_ni_c_balance.act_info5);
12625     hr_utility.trace('p_per_ni_c_balance.act_info6 : ' || p_per_ni_c_balance.act_info6);
12626     hr_utility.trace('p_per_ni_c_balance.act_info7 : ' || p_per_ni_c_balance.act_info7);
12627     hr_utility.trace('p_per_ni_c_balance.act_info8 : ' || p_per_ni_c_balance.act_info8);
12628     hr_utility.trace('p_per_ni_c_balance.act_info9 : ' || p_per_ni_c_balance.act_info9);
12629     hr_utility.trace('p_per_ni_c_balance.act_info10 : ' || p_per_ni_c_balance.act_info10);
12630 ---
12631     hr_utility.trace('p_per_ni_d_balance.assignment_id : ' || p_per_ni_d_balance.assignment_id);
12632     hr_utility.trace('p_per_ni_d_balance.act_info1 : ' || p_per_ni_d_balance.act_info1);
12633     hr_utility.trace('p_per_ni_d_balance.act_info2 : ' || p_per_ni_d_balance.act_info2);
12634     hr_utility.trace('p_per_ni_d_balance.act_info3 : ' || p_per_ni_d_balance.act_info3);
12635     hr_utility.trace('p_per_ni_d_balance.act_info4 : ' || p_per_ni_d_balance.act_info4);
12636     hr_utility.trace('p_per_ni_d_balance.act_info5 : ' || p_per_ni_d_balance.act_info5);
12637     hr_utility.trace('p_per_ni_d_balance.act_info6 : ' || p_per_ni_d_balance.act_info6);
12638     hr_utility.trace('p_per_ni_d_balance.act_info7 : ' || p_per_ni_d_balance.act_info7);
12639     hr_utility.trace('p_per_ni_d_balance.act_info8 : ' || p_per_ni_d_balance.act_info8);
12640     hr_utility.trace('p_per_ni_d_balance.act_info9 : ' || p_per_ni_d_balance.act_info9);
12641     hr_utility.trace('p_per_ni_d_balance.act_info10 : ' || p_per_ni_d_balance.act_info10);
12642 
12643 ---
12644     hr_utility.trace('p_per_ni_e_balance.assignment_id : ' || p_per_ni_e_balance.assignment_id);
12645     hr_utility.trace('p_per_ni_e_balance.act_info1 : ' || p_per_ni_e_balance.act_info1);
12646     hr_utility.trace('p_per_ni_e_balance.act_info2 : ' || p_per_ni_e_balance.act_info2);
12647     hr_utility.trace('p_per_ni_e_balance.act_info3 : ' || p_per_ni_e_balance.act_info3);
12648     hr_utility.trace('p_per_ni_e_balance.act_info4 : ' || p_per_ni_e_balance.act_info4);
12649     hr_utility.trace('p_per_ni_e_balance.act_info5 : ' || p_per_ni_e_balance.act_info5);
12650     hr_utility.trace('p_per_ni_e_balance.act_info6 : ' || p_per_ni_e_balance.act_info6);
12651     hr_utility.trace('p_per_ni_e_balance.act_info7 : ' || p_per_ni_e_balance.act_info7);
12652     hr_utility.trace('p_per_ni_e_balance.act_info8 : ' || p_per_ni_e_balance.act_info8);
12653     hr_utility.trace('p_per_ni_e_balance.act_info9 : ' || p_per_ni_e_balance.act_info9);
12654     hr_utility.trace('p_per_ni_e_balance.act_info10 : ' || p_per_ni_e_balance.act_info10);
12655 
12656 
12657 ---
12658     hr_utility.trace('p_per_ni_j_balance.assignment_id : ' || p_per_ni_j_balance.assignment_id);
12659     hr_utility.trace('p_per_ni_j_balance.act_info1 : ' || p_per_ni_j_balance.act_info1);
12660     hr_utility.trace('p_per_ni_j_balance.act_info2 : ' || p_per_ni_j_balance.act_info2);
12661     hr_utility.trace('p_per_ni_j_balance.act_info3 : ' || p_per_ni_j_balance.act_info3);
12662     hr_utility.trace('p_per_ni_j_balance.act_info4 : ' || p_per_ni_j_balance.act_info4);
12663     hr_utility.trace('p_per_ni_j_balance.act_info5 : ' || p_per_ni_j_balance.act_info5);
12664     hr_utility.trace('p_per_ni_j_balance.act_info6 : ' || p_per_ni_j_balance.act_info6);
12665     hr_utility.trace('p_per_ni_j_balance.act_info7 : ' || p_per_ni_j_balance.act_info7);
12666     hr_utility.trace('p_per_ni_j_balance.act_info8 : ' || p_per_ni_j_balance.act_info8);
12667     hr_utility.trace('p_per_ni_j_balance.act_info9 : ' || p_per_ni_j_balance.act_info9);
12668     hr_utility.trace('p_per_ni_j_balance.act_info10 : ' || p_per_ni_j_balance.act_info10);
12669 
12670 
12671 ---
12672     hr_utility.trace('p_per_ni_l_balance.assignment_id : ' || p_per_ni_l_balance.assignment_id);
12673     hr_utility.trace('p_per_ni_l_balance.act_info1 : ' || p_per_ni_l_balance.act_info1);
12674     hr_utility.trace('p_per_ni_l_balance.act_info2 : ' || p_per_ni_l_balance.act_info2);
12675     hr_utility.trace('p_per_ni_l_balance.act_info3 : ' || p_per_ni_l_balance.act_info3);
12676     hr_utility.trace('p_per_ni_l_balance.act_info4 : ' || p_per_ni_l_balance.act_info4);
12677     hr_utility.trace('p_per_ni_l_balance.act_info5 : ' || p_per_ni_l_balance.act_info5);
12678     hr_utility.trace('p_per_ni_l_balance.act_info6 : ' || p_per_ni_l_balance.act_info6);
12679     hr_utility.trace('p_per_ni_l_balance.act_info7 : ' || p_per_ni_l_balance.act_info7);
12680     hr_utility.trace('p_per_ni_l_balance.act_info8 : ' || p_per_ni_l_balance.act_info8);
12681     hr_utility.trace('p_per_ni_l_balance.act_info9 : ' || p_per_ni_l_balance.act_info9);
12682     hr_utility.trace('p_per_ni_l_balance.act_info10 : ' || p_per_ni_l_balance.act_info10);
12683 
12684 
12685 
12686         set_address_fields(l_archive_tab(1),l_archive_tab(0),l_archive_tab(2));
12687 
12688 		    -- Validating fetched Person,Address,Assignment details for FPS
12689         hr_utility.set_location('Calling Person Address validations', 10);
12690         pay_gb_rti_fps_validate_13.person_address_validations(p_assactid, p_effective_date, l_archive_tab,l_per_addr_val_flag);
12691         hr_utility.trace('person address' ||l_per_addr_val_flag);
12692 
12693          --l_per_addr_val_flag  := 'N'; --for testing
12694 
12695         IF l_per_addr_val_flag  = 'Y' THEN -- If validation fails
12696           l_personaddr_val_err := TRUE;
12697         END IF;
12698 
12699         hr_utility.set_location('Calling FPS validations', 10);
12700         pay_gb_rti_fps_validate_13.assignment_validations(p_assactid, p_effective_date, l_archive_tab,l_fps_etext_asg_flag);
12701 
12702         IF l_fps_etext_asg_flag = 'Y' THEN -- If validation fails
12703           l_fps_val_err        := TRUE;
12704         END IF;
12705 
12706         hr_utility.set_location('After Calling FPS validations', 10);
12707         -- LOOP through all NIs
12708          --commented below For Loop whole code for testing
12709         FOR i_count IN 4..i
12710         LOOP
12711 
12712           hr_utility.set_location ('C7alling FPS NI validations', 10);
12713 
12714           pay_gb_rti_fps_validate_13.ni_validations(p_assactid, p_effective_date, l_archive_tab,i_count,l_fps_etext_ni_flag);
12715 
12716 --          l_fps_etext_ni_flag := 'N';  --for testing
12717 
12718           IF l_fps_etext_ni_flag = 'Y' THEN -- If validation fails
12719             l_fps_ni_val_err    := TRUE;
12720           END IF;
12721         END LOOP;
12722 
12723 
12724    hr_utility.set_location('After Calling FPS validations', 10);
12725 
12726 --        IF l_archive_person AND l_archive_addr AND l_archive_asg_det1 AND l_archive_asg_det2 THEN
12727         IF l_archive_person AND l_archive_addr AND l_archive_asg_det1 THEN   --for testing
12728 --          IF l_personaddr_val_err OR l_fps_val_err OR l_fps_ni_val_err -- If validation fails , that record will not be archived.
12729           IF l_personaddr_val_err OR l_fps_val_err OR l_fps_ni_val_err -- If validation fails , that record will not be archived.
12730             THEN
12731             hr_utility.set_location('Validation failed, raise error.',999);
12732             fnd_file.put_line(fnd_file.LOG,'Not Archiving');
12733             raise error_found;
12734           ELSE
12735             hr_utility.set_location('Validation successful, archive data.',999);
12736            if l_ni_rti_flag = 'Y' then
12737                ni_agg_ytd_sum(l_archive_tab,i,p_per_ni_a_balance,p_per_ni_b_balance,
12738                 p_per_ni_c_balance,p_per_ni_d_balance,p_per_ni_e_balance,p_per_ni_j_balance,p_per_ni_l_balance);
12739                insert_archive_row(p_assactid, p_effective_date,l_archive_tab);
12740 							 insert_archive_row_agg(p_assactid, p_effective_date,l_archive_tab_det3);
12741            /* moved this code to action creation
12742                -- lock the pre payments action id with current fps assignment action id
12743                begin
12744                 hr_nonrun_asact.insint(p_assactid, l_prepay_asg_action_id);
12745                exception
12746                when dup_val_on_index then
12747                    hr_utility.set_location(sqlcode || '-' || sqlerrm,60);
12748                    hr_utility.set_location('Skip locking for retry.Locking action id-'||p_assactid || ' Locked action id-' || l_prepay_asg_action_id,60);
12749                end; */
12750            else
12751                hr_utility.set_location('Non NI Reporting asg: ' || l_asg_id, 999);
12752 
12753 	               hr_utility.set_location('Retrieve the ni reporting assignment for ' || l_asg_id ,1000);
12754 
12755                open csr_get_ni_rpt_asg(l_asg_id);
12756                fetch csr_get_ni_rpt_asg into l_ni_rpt_asg_id,l_ni_rpt_date;
12757                close csr_get_ni_rpt_asg;
12758                hr_utility.set_location('l_ni_rpt_asg_id: ' || l_ni_rpt_asg_id || ' l_ni_rpt_date: ' || l_ni_rpt_date,1000);
12759                hr_utility.set_location('NI reporting assignment for the assignment: ' || l_asg_id || 'is ' ||l_ni_rpt_asg_id ,1000);
12760 
12761                if  l_ni_rpt_asg_id is not null then
12762                   hr_utility.set_location(' l_ni_rpt_asg_id:' || l_ni_rpt_asg_id || ' g_pre_pact_id:' ||g_pre_pact_id ,1000);
12763                   -- check whether the RTI reporting assignment is processed in the current prepayment.
12764                   open csr_rti_rpt_proc_prepay(l_ni_rpt_asg_id,g_pre_pact_id);
12765                   fetch csr_rti_rpt_proc_prepay into l_rti_ni_proc_flag_1;
12766                   close csr_rti_rpt_proc_prepay;
12767                   hr_utility.set_location('l_rti_ni_proc_flag_1: ' || l_rti_ni_proc_flag_1,1000);
12768                   -- check whether the current asg_act_id is the max id
12769                   -- so that RTI asg is archived only ones when multiple non-rti asgs exists.
12770                   OPEN csr_ni_aggr_max_act_id (l_person_id, g_pre_pact_id);
12771                   FETCH csr_ni_aggr_max_act_id INTO l_ni_aggr_max_act_id;
12772                   CLOSE csr_ni_aggr_max_act_id;
12773                hr_utility.set_location('l_ni_aggr_max_act_id: ' || l_ni_aggr_max_act_id ,1000);
12774                hr_utility.set_location('l_last_asg_action_id: ' || l_last_asg_action_id ,1000);
12775                   if l_ni_aggr_max_act_id = l_last_asg_action_id and nvl(l_rti_ni_proc_flag_1,'N') <> 'Y' then
12776                   -- 0. Get the RTI NI Reporting assignment for the period.
12777                   -- 1. Store the NI YTD values of current Assignment in a temp variable.
12778                   -- 2. Make the NI YTD values 0.
12779                   -- 3. Get all the Previously archived values of NI Reporting assignment.
12780                   -- 4. Make the Period balances 0.
12781                   -- 5. Replace the NI YTD with the current processing NI YTD values.
12782                   -- 6. Archive this record.
12783                      hr_utility.set_location('fetching the rti rpt asg values: ',1000);
12784                      open csr_ni_asg_last_archived(l_ni_rpt_asg_id);
12785                      fetch csr_ni_asg_last_archived BULK COLLECT INTO l_archive_tab_ni_rpt;
12786                      close csr_ni_asg_last_archived;
12787                      record_count := l_archive_tab_ni_rpt.count;
12788                hr_utility.set_location('record_count: ' || record_count ,1000);
12789                      if l_archive_tab_ni_rpt.count > 0 then
12790 
12791                      for counter in 1..l_archive_tab_ni_rpt.count
12792                      loop
12793                         if l_archive_tab_ni_rpt(counter).action_info_category = 'GB_RTI_FPS_ASG_DET2' then
12794                          -- set 0 for other Run level balances in details 2 context.
12795                            l_archive_tab_ni_rpt(counter).act_info6 := 0;
12796                            l_archive_tab_ni_rpt(counter).act_info8 := 0;
12797                            l_archive_tab_ni_rpt(counter).act_info9 := 0;
12798                            l_archive_tab_ni_rpt(counter).act_info10 := 0;
12799                            l_archive_tab_ni_rpt(counter).act_info11 := 0;
12800                            l_archive_tab_ni_rpt(counter).act_info12 := 0;
12801                            l_archive_tab_ni_rpt(counter).act_info13 := 0;
12802                            l_archive_tab_ni_rpt(counter).act_info15 := 0;
12803                            l_archive_tab_ni_rpt(counter).act_info16 := 0;
12804                            l_archive_tab_ni_rpt(counter).act_info17 := 0;
12805                            l_archive_tab_ni_rpt(counter).act_info23 := 0;
12806                            l_archive_tab(counter).act_info29 := g_pre_pact_id||','||l_last_asg_action_id;
12807                         end if;
12808                         if l_archive_tab_ni_rpt(counter).action_info_category = 'GB_RTI_FPS_ASG_DET1' then
12809                            l_archive_tab(counter).act_info29 := g_pre_pact_id||','||l_last_asg_action_id;
12810                         end if;
12811                      end loop;
12812                      else --l_archive_tab_ni_rpt.count > 0
12813                           /*open csr_get_latest_asg_action(l_ni_rpt_asg_id);
12814                           fetch csr_get_latest_asg_action into l_ni_max_asg_act_id, l_ni_max_asg_act_date;
12815                           close csr_get_latest_asg_action;
12816                      */
12817                           select paa.assignment_action_id into l_ni_rpt_assact_id from  pay_assignment_actions paa
12818                           where paa.payroll_action_id = g_payroll_action_id
12819                           and paa.assignment_id = l_ni_rpt_asg_id;
12820                           hr_utility.set_location('Calling get_ni_only_asg_details:',1000);
12821                           get_ni_only_asg_details(l_ni_rpt_asg_id,
12822                                                   l_archive_tab_ni_rpt(1),
12823                                                   l_archive_tab_ni_rpt(2),
12824 																									l_archive_tab_det3(0),
12825                                                    l_ni_rpt_assact_id);
12826                           -- after this make record_count := 2 as the next row in the table should store NI Values.
12827                           record_count := 2;
12828                      end if; --l_archive_tab_ni_rpt.count > 0
12829                hr_utility.set_location('p_per_ni_a_balance.act_info1: ' ||p_per_ni_a_balance.act_info1,1000);
12830 -- NI A
12831         				        if p_per_ni_a_balance.act_info1 is not null then
12832                               record_count := record_count +1;
12833                               l_archive_tab_ni_rpt(record_count).action_info_category := 'GB_RTI_FPS_NI_DET';
12834                               l_archive_tab_ni_rpt(record_count).assignment_id := l_ni_rpt_asg_id;
12835                 			        l_archive_tab_ni_rpt(record_count).act_info1 := 'A';
12836                 			        l_archive_tab_ni_rpt(record_count).act_info2 := 0;
12837                 			        l_archive_tab_ni_rpt(record_count).act_info3 := nvl(l_archive_tab_ni_rpt(record_count).act_info3,0) + p_per_ni_a_balance.act_info3;
12838                       			  l_archive_tab_ni_rpt(record_count).act_info4 := nvl(l_archive_tab_ni_rpt(record_count).act_info4,0) + p_per_ni_a_balance.act_info4;
12839 			                        l_archive_tab_ni_rpt(record_count).act_info5 := nvl(l_archive_tab_ni_rpt(record_count).act_info5,0) + p_per_ni_a_balance.act_info5;
12840       			                  l_archive_tab_ni_rpt(record_count).act_info6 := nvl(l_archive_tab_ni_rpt(record_count).act_info6,0) + p_per_ni_a_balance.act_info6;
12841             			            l_archive_tab_ni_rpt(record_count).act_info7 := nvl(l_archive_tab_ni_rpt(record_count).act_info7,0) + p_per_ni_a_balance.act_info7;
12842                   		      	l_archive_tab_ni_rpt(record_count).act_info8 := nvl(l_archive_tab_ni_rpt(record_count).act_info8,0) + p_per_ni_a_balance.act_info8;
12843                 			        l_archive_tab_ni_rpt(record_count).act_info9 := 0;
12844                 			        l_archive_tab_ni_rpt(record_count).act_info10 := 0;
12845 															l_archive_tab_ni_rpt(record_count).act_info11 := nvl(l_archive_tab_ni_rpt(record_count).act_info11,0) + p_per_ni_a_balance.act_info11;
12846 			                  end if;
12847                hr_utility.set_location('record_count: ' || record_count ,1000);
12848 -- NI D
12849                hr_utility.set_location('p_per_ni_d_balance.act_info1: ' || p_per_ni_d_balance.act_info1 ,1000);
12850         				        if p_per_ni_d_balance.act_info1 is not null then
12851                               record_count := record_count + 1;
12852                               l_archive_tab_ni_rpt(record_count).action_info_category := 'GB_RTI_FPS_NI_DET';
12853                 			        l_archive_tab_ni_rpt(record_count).act_info1 := 'D';
12854                               l_archive_tab_ni_rpt(record_count).assignment_id := l_ni_rpt_asg_id;
12855                 			        l_archive_tab_ni_rpt(record_count).act_info2 := 0;
12856                 			        l_archive_tab_ni_rpt(record_count).act_info3 := nvl(l_archive_tab_ni_rpt(record_count).act_info3,0) + p_per_ni_d_balance.act_info3;
12857                       			  l_archive_tab_ni_rpt(record_count).act_info4 := nvl(l_archive_tab_ni_rpt(record_count).act_info4,0) + p_per_ni_d_balance.act_info4;
12858 			                        l_archive_tab_ni_rpt(record_count).act_info5 := nvl(l_archive_tab_ni_rpt(record_count).act_info5,0) + p_per_ni_d_balance.act_info5;
12859       			                  l_archive_tab_ni_rpt(record_count).act_info6 := nvl(l_archive_tab_ni_rpt(record_count).act_info6,0) + p_per_ni_d_balance.act_info6;
12860             			            l_archive_tab_ni_rpt(record_count).act_info7 := nvl(l_archive_tab_ni_rpt(record_count).act_info7,0) + p_per_ni_d_balance.act_info7;
12861                   		      	l_archive_tab_ni_rpt(record_count).act_info8 := nvl(l_archive_tab_ni_rpt(record_count).act_info8,0) + p_per_ni_d_balance.act_info8;
12862                 			        l_archive_tab_ni_rpt(record_count).act_info9 := 0;
12863                 			        l_archive_tab_ni_rpt(record_count).act_info10 := 0;
12864 															l_archive_tab_ni_rpt(record_count).act_info11 := nvl(l_archive_tab_ni_rpt(record_count).act_info11,0) + p_per_ni_d_balance.act_info11;
12865 			                  end if;
12866                hr_utility.set_location('record_count: ' || record_count ,1000);
12867 
12868 -- NI B
12869                hr_utility.set_location('p_per_ni_b_balance.act_info1: ' || p_per_ni_b_balance.act_info1 ,1000);
12870         				        if p_per_ni_b_balance.act_info1 is not null then
12871                               record_count := record_count + 1;
12872                               l_archive_tab_ni_rpt(record_count).action_info_category := 'GB_RTI_FPS_NI_DET';
12873                 			        l_archive_tab_ni_rpt(record_count).act_info1 := 'B';
12874                               l_archive_tab_ni_rpt(record_count).assignment_id := l_ni_rpt_asg_id;
12875                 			        l_archive_tab_ni_rpt(record_count).act_info2 := 0;
12876                 			        l_archive_tab_ni_rpt(record_count).act_info3 := nvl(l_archive_tab_ni_rpt(record_count).act_info3,0) + p_per_ni_b_balance.act_info3;
12877                       			  l_archive_tab_ni_rpt(record_count).act_info4 := nvl(l_archive_tab_ni_rpt(record_count).act_info4,0) + p_per_ni_b_balance.act_info4;
12878 			                        l_archive_tab_ni_rpt(record_count).act_info5 := nvl(l_archive_tab_ni_rpt(record_count).act_info5,0) + p_per_ni_b_balance.act_info5;
12879       			                  l_archive_tab_ni_rpt(record_count).act_info6 := nvl(l_archive_tab_ni_rpt(record_count).act_info6,0) + p_per_ni_b_balance.act_info6;
12880             			            l_archive_tab_ni_rpt(record_count).act_info7 := nvl(l_archive_tab_ni_rpt(record_count).act_info7,0) + p_per_ni_b_balance.act_info7;
12881                   		      	l_archive_tab_ni_rpt(record_count).act_info8 := nvl(l_archive_tab_ni_rpt(record_count).act_info8,0) + p_per_ni_b_balance.act_info8;
12882                 			        l_archive_tab_ni_rpt(record_count).act_info9 := 0;
12883                 			        l_archive_tab_ni_rpt(record_count).act_info10 := 0;
12884 															l_archive_tab_ni_rpt(record_count).act_info11 := nvl(l_archive_tab_ni_rpt(record_count).act_info11,0) + p_per_ni_b_balance.act_info11;
12885 			                  end if;
12886                hr_utility.set_location('record_count: ' || record_count ,1000);
12887 -- NI C
12888                hr_utility.set_location('p_per_ni_c_balance.act_info1: ' || p_per_ni_c_balance.act_info1 ,1000);
12889         				        if p_per_ni_c_balance.act_info1 is not null then
12890                               record_count := record_count + 1;
12891                               l_archive_tab_ni_rpt(record_count).action_info_category := 'GB_RTI_FPS_NI_DET';
12892                 			        l_archive_tab_ni_rpt(record_count).act_info1 := 'C';
12893                               l_archive_tab_ni_rpt(record_count).assignment_id := l_ni_rpt_asg_id;
12894                 			        l_archive_tab_ni_rpt(record_count).act_info2 := 0;
12895                 			        l_archive_tab_ni_rpt(record_count).act_info3 := nvl(l_archive_tab_ni_rpt(record_count).act_info3,0) + p_per_ni_c_balance.act_info3;
12896                       			  l_archive_tab_ni_rpt(record_count).act_info4 := nvl(l_archive_tab_ni_rpt(record_count).act_info4,0) + p_per_ni_c_balance.act_info4;
12897 			                        l_archive_tab_ni_rpt(record_count).act_info5 := nvl(l_archive_tab_ni_rpt(record_count).act_info5,0) + p_per_ni_c_balance.act_info5;
12898       			                  l_archive_tab_ni_rpt(record_count).act_info6 := nvl(l_archive_tab_ni_rpt(record_count).act_info6,0) + p_per_ni_c_balance.act_info6;
12899             			            l_archive_tab_ni_rpt(record_count).act_info7 := nvl(l_archive_tab_ni_rpt(record_count).act_info7,0) + p_per_ni_c_balance.act_info7;
12900                   		      	l_archive_tab_ni_rpt(record_count).act_info8 := nvl(l_archive_tab_ni_rpt(record_count).act_info8,0) + p_per_ni_c_balance.act_info8;
12901                 			        l_archive_tab_ni_rpt(record_count).act_info9 := 0;
12902                 			        l_archive_tab_ni_rpt(record_count).act_info10 := 0;
12903 															l_archive_tab_ni_rpt(record_count).act_info11 := nvl(l_archive_tab_ni_rpt(record_count).act_info11,0) + p_per_ni_c_balance.act_info11;
12904 			                  end if;
12905                hr_utility.set_location('record_count: ' || record_count ,1000);
12906 
12907 -- NI E
12908                hr_utility.set_location('p_per_ni_e_balance.act_info1: ' || p_per_ni_e_balance.act_info1 ,1000);
12909         				        if p_per_ni_e_balance.act_info1 is not null then
12910                               record_count := record_count + 1;
12911                               l_archive_tab_ni_rpt(record_count).action_info_category := 'GB_RTI_FPS_NI_DET';
12912                 			        l_archive_tab_ni_rpt(record_count).act_info1 := 'E';
12913                               l_archive_tab_ni_rpt(record_count).assignment_id := l_ni_rpt_asg_id;
12914                 			        l_archive_tab_ni_rpt(record_count).act_info2 := 0;
12915                 			        l_archive_tab_ni_rpt(record_count).act_info3 := nvl(l_archive_tab_ni_rpt(record_count).act_info3,0) + p_per_ni_e_balance.act_info3;
12916                       			  l_archive_tab_ni_rpt(record_count).act_info4 := nvl(l_archive_tab_ni_rpt(record_count).act_info4,0) + p_per_ni_e_balance.act_info4;
12917 			                        l_archive_tab_ni_rpt(record_count).act_info5 := nvl(l_archive_tab_ni_rpt(record_count).act_info5,0) + p_per_ni_e_balance.act_info5;
12918       			                  l_archive_tab_ni_rpt(record_count).act_info6 := nvl(l_archive_tab_ni_rpt(record_count).act_info6,0) + p_per_ni_e_balance.act_info6;
12919             			            l_archive_tab_ni_rpt(record_count).act_info7 := nvl(l_archive_tab_ni_rpt(record_count).act_info7,0) + p_per_ni_e_balance.act_info7;
12920                   		      	l_archive_tab_ni_rpt(record_count).act_info8 := nvl(l_archive_tab_ni_rpt(record_count).act_info8,0) + p_per_ni_e_balance.act_info8;
12921                 			        l_archive_tab_ni_rpt(record_count).act_info9 := 0;
12922                 			        l_archive_tab_ni_rpt(record_count).act_info10 := 0;
12923 															l_archive_tab_ni_rpt(record_count).act_info11 := nvl(l_archive_tab_ni_rpt(record_count).act_info11,0) + p_per_ni_e_balance.act_info11;
12924 			                  end if;
12925                hr_utility.set_location('record_count: ' || record_count ,1000);
12926 
12927 -- NI J
12928                hr_utility.set_location('p_per_ni_j_balance.act_info1: ' || p_per_ni_j_balance.act_info1 ,1000);
12929         				        if p_per_ni_j_balance.act_info1 is not null then
12930                               record_count := record_count + 1;
12931                               l_archive_tab_ni_rpt(record_count).action_info_category := 'GB_RTI_FPS_NI_DET';
12932                 			        l_archive_tab_ni_rpt(record_count).act_info1 := 'J';
12933                               l_archive_tab_ni_rpt(record_count).assignment_id := l_ni_rpt_asg_id;
12934                 			        l_archive_tab_ni_rpt(record_count).act_info2 := 0;
12935                 			        l_archive_tab_ni_rpt(record_count).act_info3 := nvl(l_archive_tab_ni_rpt(record_count).act_info3,0) + p_per_ni_j_balance.act_info3;
12936                       			  l_archive_tab_ni_rpt(record_count).act_info4 := nvl(l_archive_tab_ni_rpt(record_count).act_info4,0) + p_per_ni_j_balance.act_info4;
12937 			                        l_archive_tab_ni_rpt(record_count).act_info5 := nvl(l_archive_tab_ni_rpt(record_count).act_info5,0) + p_per_ni_j_balance.act_info5;
12938       			                  l_archive_tab_ni_rpt(record_count).act_info6 := nvl(l_archive_tab_ni_rpt(record_count).act_info6,0) + p_per_ni_j_balance.act_info6;
12939             			            l_archive_tab_ni_rpt(record_count).act_info7 := nvl(l_archive_tab_ni_rpt(record_count).act_info7,0) + p_per_ni_j_balance.act_info7;
12940                   		      	l_archive_tab_ni_rpt(record_count).act_info8 := nvl(l_archive_tab_ni_rpt(record_count).act_info8,0) + p_per_ni_j_balance.act_info8;
12941                 			        l_archive_tab_ni_rpt(record_count).act_info9 := 0;
12942                 			        l_archive_tab_ni_rpt(record_count).act_info10 := 0;
12943 															l_archive_tab_ni_rpt(record_count).act_info11 := nvl(l_archive_tab_ni_rpt(record_count).act_info11,0) + p_per_ni_j_balance.act_info11;			                  end if;
12944                hr_utility.set_location('record_count: ' || record_count ,1000);
12945 
12946 -- NI L
12947                hr_utility.set_location('p_per_ni_l_balance.act_info1: ' || p_per_ni_l_balance.act_info1 ,1000);
12948         				        if p_per_ni_l_balance.act_info1 is not null then
12949                               record_count := record_count + 1;
12950                               l_archive_tab_ni_rpt(record_count).action_info_category := 'GB_RTI_FPS_NI_DET';
12951                 			        l_archive_tab_ni_rpt(record_count).act_info1 := 'L';
12952                               l_archive_tab_ni_rpt(record_count).assignment_id := l_ni_rpt_asg_id;
12953                 			        l_archive_tab_ni_rpt(record_count).act_info2 := 0;
12954                 			        l_archive_tab_ni_rpt(record_count).act_info3 := nvl(l_archive_tab_ni_rpt(record_count).act_info3,0) + p_per_ni_l_balance.act_info3;
12955                       			  l_archive_tab_ni_rpt(record_count).act_info4 := nvl(l_archive_tab_ni_rpt(record_count).act_info4,0) + p_per_ni_l_balance.act_info4;
12956 			                        l_archive_tab_ni_rpt(record_count).act_info5 := nvl(l_archive_tab_ni_rpt(record_count).act_info5,0) + p_per_ni_l_balance.act_info5;
12957       			                  l_archive_tab_ni_rpt(record_count).act_info6 := nvl(l_archive_tab_ni_rpt(record_count).act_info6,0) + p_per_ni_l_balance.act_info6;
12958             			            l_archive_tab_ni_rpt(record_count).act_info7 := nvl(l_archive_tab_ni_rpt(record_count).act_info7,0) + p_per_ni_l_balance.act_info7;
12959                   		      	l_archive_tab_ni_rpt(record_count).act_info8 := nvl(l_archive_tab_ni_rpt(record_count).act_info8,0) + p_per_ni_l_balance.act_info8;
12960                 			        l_archive_tab_ni_rpt(record_count).act_info9 := 0;
12961                 			        l_archive_tab_ni_rpt(record_count).act_info10 := 0;
12962 															l_archive_tab_ni_rpt(record_count).act_info11 := nvl(l_archive_tab_ni_rpt(record_count).act_info11,0) + p_per_ni_l_balance.act_info11;
12963 			                  end if;
12964                hr_utility.set_location('record_count: ' || record_count ,1000);
12965                /*  else -- else for l_archive_tab_ni_rpt.count > 0
12966                      -- get the latest prepayment and the payroll details.
12967                       select * from pay_payroll_actions ppa,
12968                       get_ni_only_asg_details(l_ni_rpt_asg_id,l_archive_tab_ni_rpt,
12969                  end if; -- end if for l_archive_tab_ni_rpt.count > 0
12970 */
12971 
12972     select paa.assignment_action_id into l_ni_rpt_assact_id from  pay_assignment_actions paa
12973     where paa.payroll_action_id = g_payroll_action_id
12974     and paa.assignment_id = l_ni_rpt_asg_id;
12975                hr_utility.set_location('l_ni_rpt_assact_id: ' || l_ni_rpt_assact_id ,1000);
12976                --         insert_archive_row(p_assactid, p_effective_date,l_archive_tab);
12977 
12978 
12979                         insert_archive_row_agg(p_assactid, p_effective_date,l_archive_tab_ni_rpt);
12980               	        insert_archive_row_agg(p_assactid, p_effective_date,l_archive_tab_det3);
12981                         INSERT
12982                               INTO PAY_GB_FPS_DETAILS
12983                                 (
12984                                   ASSIGNMENT_ID,
12985                                   PERSON_ID,
12986                                   FPS_ASG_ACT_ID,
12987                                   FPS_PAY_ACT_ID,
12988                                   FPS_EFFECTIVE_DATE,
12989                                   PREPAY_ASG_ACT_ID,
12990                                   PREPAY_PAY_ACT_ID,
12991                                   PREPAY_EFFECTIVE_DATE,
12992                                   PAYROLL_ASG_ACT_ID,
12993                                   PAYROLL_PAY_ACT_ID,
12994                                   PAYROLL_EFFECTIVE_DATE
12995                                 )
12996                                 VALUES
12997                                 (
12998                                   l_ni_rpt_asg_id,
12999                                   l_person_id,
13000                                   l_ni_rpt_assact_id,
13001                                   g_payroll_action_id,
13002                                   g_fps_effective_date,
13003                                   l_prepay_asg_action_id,
13004                                   l_prepay_payroll_action_id,
13005                                   l_prepay_effective_date,
13006                                   l_last_asg_action_id,
13007                                   l_payroll_pact_id,
13008                                   l_last_effective_date
13009                                 );
13010                 end if; --l_ni_aggr_max_act_id = l_last_asg_action_id
13011               else
13012                      hr_utility.set_location('No NI reporting assignment for the assignment: ' || l_asg_id ,1000);
13013                      fnd_file.put_line(fnd_file.LOG,'No NI reporting assignment for the assignment: ' || l_asg_id);
13014 					 populate_run_msg(p_assactid, 'No NI reporting assignment for the assignment: '||l_assignment_number);
13015                      raise error_found;
13016                end if; -- l_ni_rpt_asg_id is not null
13017               -- make the NI YTD to 0.
13018                FOR k IN 4..i
13019                LOOP
13020                      if l_archive_tab(k).act_info1 is not null then
13021                       hr_utility.trace('NON RPT act_info1' || l_archive_tab(k).act_info1);
13022                       l_archive_tab(k).act_info3 := 0;
13023                       l_archive_tab(k).act_info4 := 0;
13024                       l_archive_tab(k).act_info5 := 0;
13025                       l_archive_tab(k).act_info6 := 0;
13026                       l_archive_tab(k).act_info7 := 0;
13027                       l_archive_tab(k).act_info8 := 0;
13028                      end if;
13029                END LOOP;
13030                insert_archive_row(p_assactid, p_effective_date,l_archive_tab);
13031      	         insert_archive_row(p_assactid, p_effective_date,l_archive_tab_det3);
13032            end if;
13033           END IF;
13034         ELSE
13035             hr_utility.set_location('Archiving Error - assignment action id ' || p_assactid ,999);
13036             raise error_found;
13037         END IF;
13038 /*    else   -- this else is for if l_ni_rti_flag = 'Y'
13039      g_ni_values(l_person_id).act_info_1 := l_archive_tab(i_count).act_info1;
13040         g_ni_values(l_person_id).act_info_2 := l_archive_tab(i_count).act_info2;
13041         g_ni_values(l_person_id).act_info_3 := l_archive_tab(i_count).act_info3;
13042         g_ni_values(l_person_id).act_info_4 := l_archive_tab(i_count).act_info4;
13043         g_ni_values(l_person_id).act_info_5 := l_archive_tab(i_count).act_info5;
13044         g_ni_values(l_person_id).act_info_6 := l_archive_tab(i_count).act_info6;
13045         g_ni_values(l_person_id).act_info_7 := l_archive_tab(i_count).act_info7;
13046         g_ni_values(l_person_id).act_info_8 := l_archive_tab(i_count).act_info8;
13047         g_ni_values(l_person_id).act_info_9 := l_archive_tab(i_count).act_info9;
13048         g_ni_values(l_person_id).act_info_10 := l_archive_tab(i_count).act_info10;
13049 
13050     end if;
13051 */
13052 end if; --nvl(l_rti_ni_proc_flag,'N') = 'Y'
13053 end if;   -- NI only Aggregation Logic ends here ; l_per_ni_agg_flag <> 'Y'
13054 
13055 
13056    hr_utility.set_location('Leaving: '||l_proc,999);
13057 end if; -- First Fps and First Fps Prepayment if ends
13058 
13059 EXCEPTION
13060 WHEN error_found THEN
13061   reset_flag('GB_RTI_ASG_DETAILS',g_reset_flag_type, p_assactid);
13062   fnd_file.put_line(fnd_file.LOG,'Errors found while archiving data.');
13063   raise_application_error(-20001,'Errors found while archiving data.');
13064 
13065 WHEN already_processed THEN
13066 	fnd_file.put_line (fnd_file.LOG,'Current Assignment '|| l_assignment_number ||' is already processed in an earlier FPS run. Hence, not processing now.');
13067 
13068 WHEN OTHERS THEN
13069     fnd_file.put_line(fnd_file.LOG,'An error encountered was - '||SQLERRM);
13070   	raise_application_error(-20001,'An error encountered was - '||SQLERRM);
13071 END archive_code;
13072 --
13073 --
13074 PROCEDURE deinitialization_code
13075   (
13076     pactid IN NUMBER
13077   )
13078 IS
13079   l_proc    CONSTANT VARCHAR2(50) := g_package || 'deinitialization_code';
13080   l_counter NUMBER;
13081   l_flag      VARCHAR2(1);
13082   l_exp EXCEPTION;
13083   errbuf varchar2(100);
13084   retcode number;
13085   l_econ varchar2(100);
13086   l_person_count number :=0;
13087   l_error_flag VARCHAR2(1);
13088 date_scheme date;
13089   CURSOR csr_is_etext_report
13090   IS
13091     SELECT report_type
13092     FROM pay_payroll_actions pact
13093     WHERE pact.payroll_action_id = pactid;
13094   l_is_etext_report VARCHAR2(50);
13095   l_request_id fnd_concurrent_requests.request_id%TYPE;
13096   xml_layout BOOLEAN;
13097 
13098   -- Cursor to fetch Employer details
13099   CURSOR csr_payroll_details(pactid NUMBER)
13100   IS
13101     SELECT NVL(UPPER(hoi.org_information11),' ') sender_id,
13102 			hoi.org_information1 paye_ref,
13103 			hoi.organization_id orgid,
13104       DECODE(SUBSTR(pact.legislative_parameters,instr(pact.legislative_parameters,'TEST=') + 5,1) ,'N',' ','Y','1') test_indicator,
13105       fnd_number.number_to_canonical(pact.request_id) request_id,
13106       NVL(upper(SUBSTR(ltrim(hoi.org_information3),1,35)),' ') employer_name,
13107       NVL(upper(SUBSTR(ltrim(SUBSTR(hoi.org_information1,4,11),'/'),1,10)),' ') tax_ref_no,
13108       lpad(SUBSTR(hoi.ORG_INFORMATION1,0,instr(hoi.ORG_INFORMATION1,'/')-1),3,0) tax_office_no,
13109       DECODE(PAY_GB_EOY_MAGTAPE.get_payroll_version, ' ', '0', PAY_GB_EOY_MAGTAPE.get_payroll_version) payroll_ver,
13110       (lpad(SUBSTR(hoi.ORG_INFORMATION6,0,instr(hoi.ORG_INFORMATION6,'P')-1),3,0)
13111       || 'P'
13112       || SUBSTR(hoi.ORG_INFORMATION6,instr(hoi.ORG_INFORMATION6,'P')     +1,1)
13113       || lpad(SUBSTR(hoi.ORG_INFORMATION6,instr(hoi.ORG_INFORMATION6,'P')+2,LENGTH(hoi.ORG_INFORMATION6)-3-(instr(hoi.ORG_INFORMATION6,'P')-1)),7,0)
13114       || SUBSTR(hoi.ORG_INFORMATION6,LENGTH(hoi.ORG_INFORMATION6),1) ) AS acc_ref_no,
13115       hoi.org_information7 econ_number,
13116       pact.business_group_id bus_grp_id,
13117       pact.action_parameter_group_id act_param_grp_id,
13118       org_information19 service_company
13119     FROM pay_payroll_actions pact,
13120       hr_organization_information hoi
13121     WHERE pact.payroll_action_id        =pactid
13122     AND pact.business_group_id          = hoi.organization_id
13123     AND hoi.org_information_context     = 'Tax Details References'
13124     AND NVL(hoi.org_information10,'UK') = 'UK'
13125     AND SUBSTR(pact.legislative_parameters,instr(pact.legislative_parameters,'TAX_REF=') + 8, instr(pact.legislative_parameters
13126       ||' ',' ', instr(pact.legislative_parameters,'TAX_REF=')                           +8) - instr(pact.legislative_parameters, 'TAX_REF=') - 8) = hoi.org_information1;
13127 
13128   cursor csr_payroll_details_2(paye_ref VARCHAR2,orgid number) is
13129             select
13130 										hoi.org_information2 sautr,
13131 										hoi.org_information3 cotaxref
13132              from   hr_organization_information hoi
13133             where   hoi.organization_id = orgid
13134               and   hoi.org_information_context = 'Tax Details References Cont'
13135               and   hoi.org_information1 = paye_ref;
13136 
13137   CURSOR csr_parameter_info
13138   IS
13139     SELECT effective_date,
13140       business_group_id,
13141       SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters, 'TAX_REF'),1,3) tax_dist,
13142       SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'TAX_REF'),1,20) tax_ref,
13143       SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'SPLIT'),1,20) split,
13144       SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'PRE_PAY_ID'),1,20) pre_pay_id,
13145       SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'FIRST_FPS'),1,20) first_fps,
13146       SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'FIN_SUB'),1,20) final_submission,
13147       SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'TAX_PMT_MADE'),1,20) free_tax_payments_made,
13148       SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'THIRD_PARTY'),1,20) pay_to_third_party,
13149       SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'EXP_BEN_OTHER'),1,20) expenses_benefits_others,
13150       SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'OUTSIDE_UK'),1,20) employed_outside_uk,
13151       SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'P11D_DUE'),1,20) p11d_due,
13152       SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'HMRC_ADVAN'),1,20) hmrc_advance_received,
13153       SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'CIS_DEDUCT'),1,20) cis_deductions,
13154 	  substr(legislative_parameters,instr(legislative_parameters,'VERSION=')+8) version,
13155      fnd_date.canonical_to_date(SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'DATE_SCHEME'),1,10)) date_scheme
13156     FROM pay_payroll_actions
13157     WHERE payroll_action_id = pactid;
13158 
13159   l_payroll_rec csr_payroll_details%rowtype;
13160   l_tax_details csr_payroll_details_2%rowtype;
13161 
13162   l_action_info_id          NUMBER(15);
13163   l_ovn                     NUMBER;
13164   l_final_submission_ceased VARCHAR2(1);
13165   l_final_submission_year   VARCHAR2(1);
13166   l_final_submission        VARCHAR2(50);
13167   l_negative_payment        VARCHAR2(10);
13168   l_parameter_info_rec csr_parameter_info%rowtype;
13169   ---------------------
13170   ---------------------
13171 
13172 PROCEDURE write_header(
13173     report_type VARCHAR2)
13174 IS
13175   l_token     VARCHAR2(255);
13176   l_addr1     VARCHAR2(255);
13177   l_addr2     VARCHAR2(255);
13178   l_addr3     VARCHAR2(255);
13179   l_addr4     VARCHAR2(255);
13180   l_form      VARCHAR2(40);
13181   l_tax_ref   VARCHAR2(20);
13182   l_urgent    VARCHAR2(2);
13183   l_test      VARCHAR2(2);
13184   l_temp      NUMBER;
13185   l_form_name VARCHAR2(100);
13186   l_payroll_name VARCHAR2(100);
13187   l_prepay_eff_date date;
13188 
13189   CURSOR csr_leg_param
13190   IS
13191     SELECT legislative_parameters para,
13192       fnd_number.number_to_canonical(request_id) control_id,
13193       report_type,
13194       business_group_id
13195     FROM pay_payroll_actions pact
13196     WHERE payroll_action_id = pactid;
13197 
13198   CURSOR csr_header_det(p_bus_id NUMBER, p_tax_ref VARCHAR2)
13199   IS
13200     SELECT NVL(hoi.org_information11,' ') sender_id,
13201       NVL(upper(hoi.org_information2),' ') hrmc_office,
13202       NVL(upper(hoi.org_information4),' ') er_addr,
13203       NVL(upper(hoi.org_information3),' ') er_name
13204     FROM hr_organization_information hoi
13205     WHERE hoi.organization_id           = p_bus_id
13206     AND hoi.org_information_context     = 'Tax Details References'
13207     AND NVL(hoi.org_information10,'UK') = 'UK'
13208     AND upper(hoi.org_information1)     = upper(p_tax_ref);
13209 
13210 CURSOR csr_payroll_details
13211   IS
13212     SELECT  ppf.PAYROLL_NAME , ppapre.EFFECTIVE_DATE
13213     from pay_payrolls_f ppf,pay_payroll_actions ppapre,pay_payroll_actions ppa
13214     WHERE ppa.payroll_action_id = pactid
13215     and ppf.payroll_id = SUBSTR(pay_gb_eoy_archive.get_parameter(ppa.legislative_parameters,'PAYROLL_ID'),1,20)
13216     and ppapre.payroll_action_id = SUBSTR(pay_gb_eoy_archive.get_parameter(ppa.legislative_parameters,'PRE_PAY_ID'),1,20);
13217 
13218   -- Cursor to fetch  Errored Records
13219   CURSOR get_asg_action_id_error
13220   IS
13221     SELECT DISTINCT paa.assignment_action_id asg_action_id,
13222       assignment_id
13223     FROM pay_payroll_actions ppa,
13224       pay_assignment_actions paa
13225     WHERE ppa.payroll_action_id = pactid -- pact_id
13226     AND paa.payroll_action_id   = ppa.payroll_action_id
13227     AND paa.action_status       = 'E';
13228 
13229 
13230 --CURSOR csr_err_msg(asg_action_id NUMBER)
13231 CURSOR csr_prepay_err_msg(asg_action_id NUMBER)
13232   IS
13233     SELECT DISTINCT line_text
13234     FROM pay_message_lines
13235     WHERE source_id = asg_action_id --9919881 --asg_action_id
13236     AND message_level <> 'W'-- p_message_level
13237     AND line_text like '%Pre payment is not run%'
13238     AND payroll_id  = 100;
13239 
13240   l_param csr_leg_param%rowtype;
13241   l_det csr_header_det%rowtype;
13242   l_start_date DATE;
13243   l_end_date DATE;
13244   l_err_msg varchar2(100);
13245 BEGIN
13246   OPEN csr_leg_param;
13247   FETCH csr_leg_param INTO l_param;
13248   CLOSE csr_leg_param;
13249 
13250   open csr_payroll_details;
13251   fetch csr_payroll_details into l_payroll_name,l_prepay_eff_date;
13252   close csr_payroll_details;
13253 
13254   l_token   := 'TAX_REF';
13255   l_temp    := instr(l_param.para,l_token);
13256   l_tax_ref := SUBSTR(l_param.para, l_temp + LENGTH(l_token) + 1, instr(l_param.para||' ',' ',l_temp)
13257                                                              - (l_temp + LENGTH(l_token) + 1));
13258   l_token   := 'TEST';
13259   l_temp    := instr(l_param.para,l_token);
13260   l_test    := SUBSTR(l_param.para, l_temp + LENGTH(l_token) + 1, instr(l_param.para||' ',' ',l_temp)
13261                                                              - (l_temp + LENGTH(l_token) + 1));
13262 
13263   OPEN csr_header_det(l_param.business_group_id, l_tax_ref);
13264   FETCH csr_header_det INTO l_det;
13265   CLOSE csr_header_det;
13266 
13267   l_addr1           := l_det.er_addr;
13268   IF LENGTH(l_addr1) > 35 THEN
13269     l_temp          := instr(l_addr1, ',', 34 - LENGTH(l_addr1));
13270     IF l_temp        = 0 THEN
13271       l_temp        := 35;
13272     END IF;
13273     l_addr2 := ltrim(SUBSTR(l_addr1, 1 + l_temp),' ,');
13274     l_addr1 := SUBSTR(l_addr1,1,l_temp);
13275   END IF;
13276   IF LENGTH(l_addr2) > 35 THEN
13277     l_temp          := instr(l_addr2, ',', 34 - LENGTH(l_addr2));
13278     IF l_temp        = 0 THEN
13279       l_temp        := 35;
13280     END IF;
13281     l_addr3 := ltrim(SUBSTR(l_addr2, 1 + l_temp),' ,');
13282     l_addr2 := SUBSTR(l_addr2,1,l_temp);
13283   END IF;
13284   IF LENGTH(l_addr3) > 35 THEN
13285     l_temp          := instr(l_addr3, ',', 34 - LENGTH(l_addr3));
13286     IF l_temp        = 0 THEN
13287       l_temp        := 35;
13288     END IF;
13289     l_addr3 := ltrim(SUBSTR(l_addr3, 1 + l_temp),' ,');
13290     l_addr4 := SUBSTR(l_addr3,1,l_temp);
13291   END IF;
13292 
13293   l_form      := 'RTI_FPS_REP';
13294   l_form_name :='Full Payment Submission';
13295 
13296     FOR action_id IN get_asg_action_id_error
13297     LOOP
13298       OPEN csr_prepay_err_msg(action_id.asg_action_id);
13299       FETCH csr_prepay_err_msg INTO l_err_msg;
13300 			exit when csr_prepay_err_msg%notfound;
13301 
13302       fnd_file.put_line(fnd_file.output,'Pre-Payments is not run for few errored employments. Must Rollback this FPS, Complete Pre-Payments and then Re-Submit FPS.');
13303 --			exit when csr_prepay_err_msg%found;
13304       CLOSE csr_prepay_err_msg;
13305     END loop;
13306 
13307   fnd_file.put_line(fnd_file.output,' ');
13308   fnd_file.put_line(fnd_file.output,'EDI Transmission Report:');
13309   fnd_file.put_line(fnd_file.output,' ');
13310   fnd_file.put_line(fnd_file.output,rpad('Form Type : ',32) || l_form_name);
13311   fnd_file.put_line(fnd_file.output,rpad('Sender : ',32) || l_det.sender_id);
13312   fnd_file.put_line(fnd_file.output,rpad('Date : ',32) || TO_CHAR(sysdate, 'DD/MM/YYYY HH24:MI:SS'));
13313   fnd_file.put_line(fnd_file.output,rpad('Interchange Control Reference : ',32) || l_param.control_id);
13314   fnd_file.put_line(fnd_file.output,rpad('Test Transmission : ',32) || l_test);
13315   fnd_file.put_line(fnd_file.output,rpad('-',80,'-'));
13316   fnd_file.put_line(fnd_file.output,rpad('Employers PAYE Reference : ',32) || l_tax_ref);
13317   fnd_file.put_line(fnd_file.output,rpad('HRMC Office : ',32) || l_det.hrmc_office);
13318   fnd_file.put_line(fnd_file.output,rpad('Employer Name : ',32) || l_det.er_name);
13319   fnd_file.put_line(fnd_file.output,rpad('Employer Address : ',32) || l_addr1);
13320 
13321   IF LENGTH(l_addr2) > 0 THEN
13322     fnd_file.put_line(fnd_file.output,rpad(' ',32) || l_addr2);
13323   END IF;
13324   IF LENGTH(l_addr3) > 0 THEN
13325     fnd_file.put_line(fnd_file.output,rpad(' ',32) || l_addr3);
13326   END IF;
13327   IF LENGTH(l_addr4) > 0 THEN
13328     fnd_file.put_line(fnd_file.output,rpad(' ',32) || l_addr4);
13329   END IF;
13330 
13331   fnd_file.put_line(fnd_file.output,rpad('Payroll : ',32) || l_payroll_name);
13332   fnd_file.put_line(fnd_file.output,rpad('Prepayment Effective Date : ',32) || l_prepay_eff_date);
13333 
13334 END write_header;
13335 ---
13336 PROCEDURE write_sub_header(
13337     p_type      VARCHAR2,
13338     report_type VARCHAR2)
13339 IS
13340 BEGIN
13341   fnd_file.put_line(fnd_file.output,NULL);
13342   IF p_type = 'E' THEN
13343     fnd_file.put_line(fnd_file.output,'The following employments have completed with error');
13344   ELSIF p_type = 'W' THEN
13345     fnd_file.put_line(fnd_file.output,'The following employments have completed with warning');
13346   ELSE
13347     fnd_file.put_line(fnd_file.output,'The following employments have completed successfully');
13348   END IF;
13349 
13350   IF p_type = 'W' THEN -- warning records
13351     fnd_file.put_line(fnd_file.output,rpad('Assignment Number',19) || rpad('NI Number',11) || rpad('Employee Name', 51)
13352                       || rpad('Warning Messages',30));
13353   ELSIF p_type <> 'E' THEN --Completed records
13354     fnd_file.put_line(fnd_file.output,rpad('Assignment Number',19) || rpad('NI Number',11) || rpad('Employee Name', 51));
13355   ELSE -- errored records
13356     fnd_file.put_line(fnd_file.output,rpad('Assignment Number',19) || rpad('NI Number',11) || rpad('Employee Name', 51)
13357                       || rpad('Error Messages',30));
13358   END IF;
13359 
13360   IF p_type = 'W' THEN -- warning records
13361     fnd_file.put_line(fnd_file.output,rpad('-',18,'-') || ' ' || rpad('-',10,'-') || ' ' || rpad('-',50,'-') || ' '
13362                      || rpad('-',30,'-'));
13363   ELSIF p_type <> 'E' THEN -- Completed records
13364     fnd_file.put_line(fnd_file.output,rpad('-',18,'-') || ' ' || rpad('-',10,'-') || ' ' || rpad('-',50,'-'));
13365   ELSE -- errored records
13366     fnd_file.put_line(fnd_file.output,rpad('-',18,'-') || ' ' || rpad('-',10,'-') || ' ' || rpad('-',50,'-') || ' '
13367                      || rpad('-',30,'-'));
13368   END IF;
13369 END write_sub_header;
13370 ---
13371 PROCEDURE write_body(
13372     p_type VARCHAR2,
13373     pactid IN NUMBER,
13374     report_type VARCHAR2)
13375 IS
13376   l_count     NUMBER;
13377   i           NUMBER;
13378   l_temp      VARCHAR2(255);
13379   l_emp_count NUMBER;
13380   l_number    VARCHAR2(30);
13381   l_start_date DATE;
13382   l_end_date DATE;
13383   l_count_warns number;
13384   l_effective_date date;
13385 
13386   -- Cursor to fetch Completed records
13387   CURSOR get_asg_action_id
13388   IS
13389     SELECT DISTINCT paa.assignment_action_id asg_action_id,
13390       assignment_id
13391     FROM pay_payroll_actions ppa,
13392       pay_assignment_actions paa
13393     WHERE ppa.payroll_action_id = pactid -- pact_id
13394     AND paa.payroll_action_id   = ppa.payroll_action_id
13395     AND paa.action_status       = 'C';
13396 
13397   -- Cursor to fetch  Errored Records
13398   CURSOR get_asg_action_id_error
13399   IS
13400     SELECT DISTINCT paa.assignment_action_id asg_action_id,
13401       assignment_id
13402     FROM pay_payroll_actions ppa,
13403       pay_assignment_actions paa
13404     WHERE ppa.payroll_action_id = pactid -- pact_id
13405     AND paa.payroll_action_id   = ppa.payroll_action_id
13406     AND paa.action_status       = 'E';
13407 
13408   CURSOR get_person_details(c_assignment_id NUMBER)
13409   IS
13410 			SELECT DISTINCT pap.first_name f_name ,
13411       pap.middle_names m_name,
13412       pap.last_name l_name,
13413       pap.title title,
13414       paa.assignment_number emp_no,
13415       NVL(pap.national_identifier,'        ')ni_no,
13416       NVL(pap.employee_number,'    ') employee_number,
13417       TO_CHAR(paa.EFFECTIVE_START_DATE,'DD-MON-RRRR') start_date,
13418       paa.EFFECTIVE_END_DATE end_date, --to_char(paa.EFFECTIVE_END_DATE,'DD-MON-RRRR') end_date
13419       pap.person_id
13420     FROM per_all_assignments_f paa,
13421       per_assignment_status_types past,
13422       per_all_people_f pap
13423     WHERE paa.person_id                = pap.person_id
13424     AND paa.assignment_id              = c_assignment_id
13425     AND past.ASSIGNMENT_STATUS_TYPE_ID = paa.ASSIGNMENT_STATUS_TYPE_ID
13426     AND past.per_system_status        IN ('ACTIVE_ASSIGN', 'SUSP_ASSIGN') -- Added for Bug#13626488
13427      and    pap.effective_start_date =
13428        ( select max(pap2.effective_start_date) from
13429 				 per_all_people_f pap2
13430          where  pap2.person_id         = pap.person_id
13431          and    pap2.effective_start_date <= l_effective_date
13432        )
13433      and    paa.effective_start_date =
13434        ( select max(asg2.effective_start_date)
13435          from   per_all_assignments_f asg2
13436          where  asg2.assignment_id         = paa.assignment_id
13437          and    asg2.assignment_type       = 'E'
13438          and    ASSIGNMENT_STATUS_TYPE_ID = paa.ASSIGNMENT_STATUS_TYPE_ID
13439          and    asg2.effective_start_date <= l_effective_date
13440        )
13441 
13442     ORDER BY end_date DESC;
13443 
13444   -- Cursor to fetch error Messages from pay_message lines table
13445 --CURSOR csr_err_msg(asg_action_id NUMBER)
13446 CURSOR csr_err_msg(asg_action_id NUMBER)
13447   IS
13448     SELECT DISTINCT line_text
13449     FROM pay_message_lines
13450     WHERE source_id = asg_action_id
13451     AND message_level <> 'W'-- p_message_level
13452     AND payroll_id  = 100;
13453 
13454 --CURSOR csr_warn_msg(asg_action_id NUMBER)
13455 CURSOR csr_warn_msg(asg_action_id NUMBER)
13456   IS
13457     SELECT DISTINCT line_text
13458     FROM pay_message_lines
13459     WHERE source_id = asg_action_id
13460     AND message_level = 'W'
13461     AND payroll_id  = 100;
13462 
13463 cursor csr_get_prepayment_date(p_pre_pact_id number) is
13464 select EFFECTIVE_DATE from pay_payroll_actions where payroll_action_id = p_pre_pact_id;
13465 
13466   err_msg varchar2(255);--csr_err_msg%rowtype;
13467   et_asg_rec get_person_details%rowtype;
13468   asg_rec get_person_details%rowtype;
13469   l_et_temp VARCHAR2(255);
13470 BEGIN
13471   l_count := 0;
13472   l_count_warns := 0;
13473 open csr_get_prepayment_date(g_pre_pact_id);
13474 fetch csr_get_prepayment_date into l_effective_date;
13475 close csr_get_prepayment_date;
13476     fnd_file.put_line(fnd_file.LOG, 'l_effective_date: ' || l_effective_date);
13477   --Completed Records
13478   IF p_type        = 'ET'THEN
13479     FOR action_id IN get_asg_action_id
13480     LOOP
13481       OPEN get_person_details(action_id.assignment_id);
13482       FETCH get_person_details INTO et_asg_rec;
13483       CLOSE get_person_details;
13484       l_et_temp             := et_asg_rec.l_name || ', '|| et_asg_rec.title || ' ' || et_asg_rec.f_name || ' ' || et_asg_rec.m_name;
13485       IF et_asg_rec.end_date = fnd_date.canonical_to_date('4712/12/31 00:00:00') THEN
13486         fnd_file.put_line(fnd_file.output,rpad(et_asg_rec.emp_no, 18) || ' ' || rpad(et_asg_rec.ni_no ,10) || ' '
13487                           || rpad(l_et_temp,50) );
13488       ELSE
13489         fnd_file.put_line(fnd_file.output,rpad(et_asg_rec.emp_no, 18) || ' ' || rpad(et_asg_rec.ni_no ,10) || ' '
13490                           || rpad(l_et_temp,50));
13491       END IF;
13492       l_count := l_count + 1;
13493     END LOOP;
13494   END IF;
13495 
13496   -- Errored Records
13497   IF p_type        = 'E'THEN
13498     FOR action_id IN get_asg_action_id_error
13499     LOOP
13500       err_msg := ' ';
13501       -- Fetching details
13502       OPEN get_person_details(action_id.assignment_id);
13503       FETCH get_person_details INTO asg_rec;
13504       CLOSE get_person_details;
13505 
13506       OPEN csr_err_msg(action_id.asg_action_id);
13507       FETCH csr_err_msg INTO err_msg;
13508 			if csr_err_msg%notfound then
13509          SELECT LINE_TEXT into err_msg FROM pay_message_lines WHERE source_id = action_id.asg_action_id and rownum <=1;
13510       end if;
13511 
13512 	  l_error_flag := 'Y';
13513 
13514       l_temp             := asg_rec.l_name || ', '|| asg_rec.title || ' ' || asg_rec.f_name || ' ' || asg_rec.m_name;
13515       IF asg_rec.end_date = fnd_date.canonical_to_date('4712/12/31 00:00:00') THEN
13516         fnd_file.put_line(fnd_file.output,rpad(asg_rec.emp_no, 18) || ' ' || rpad(asg_rec.ni_no ,10) || ' ' || rpad(l_temp,50)
13517                           || ' ' || rpad(err_msg,120) ); -- error message
13518       ELSE
13519         fnd_file.put_line(fnd_file.output,rpad(asg_rec.emp_no, 18) || ' ' || rpad(asg_rec.ni_no ,10) || ' ' || rpad(l_temp,50)
13520                           || ' ' || rpad(err_msg,120) ); -- error message
13521       END IF;
13522 
13523       -- To print remaining error messgaes if any
13524       LOOP
13525         FETCH csr_err_msg INTO err_msg;
13526         EXIT
13527       WHEN csr_err_msg%notfound;
13528         fnd_file.put_line(fnd_file.output,rpad(' ',81,' ')||rpad(err_msg,120));
13529       END LOOP;
13530 
13531       CLOSE csr_err_msg;
13532       l_count := l_count + 1;
13533     END LOOP;
13534   END IF;
13535   fnd_file.put_line(fnd_file.output,NULL);
13536 
13537   -- Warning Records
13538   IF p_type        = 'W'THEN
13539 
13540     FOR action_id IN get_asg_action_id
13541     LOOP
13542       err_msg := ' ';
13543       -- Fetching details
13544       OPEN get_person_details(action_id.assignment_id);
13545       FETCH get_person_details INTO asg_rec;
13546       CLOSE get_person_details;
13547 
13548 --           fnd_file.put_line(fnd_file.LOG,'action_id.asg_action_id: '||action_id.asg_action_id);
13549 
13550       OPEN csr_warn_msg(action_id.asg_action_id);
13551       FETCH csr_warn_msg INTO err_msg;
13552 
13553 --           fnd_file.put_line(fnd_file.LOG,'action_id.asg_action_id: '||action_id.asg_action_id);
13554 
13555 /*			if csr_err_msg%notfound then
13556          SELECT LINE_TEXT into err_msg FROM pay_message_lines WHERE source_id = action_id.asg_action_id
13557             AND MESSAGE_LEVEL = 'W' and rownum <=1;
13558       end if;
13559 */
13560 
13561 			IF csr_warn_msg%NOTFOUND THEN
13562          NULL;
13563       ELSE
13564       l_temp             := asg_rec.l_name || ', '|| asg_rec.title || ' ' || asg_rec.f_name || ' ' || asg_rec.m_name;
13565       IF asg_rec.end_date = fnd_date.canonical_to_date('4712/12/31 00:00:00') THEN
13566         fnd_file.put_line(fnd_file.output,rpad(asg_rec.emp_no, 18) || ' ' || rpad(asg_rec.ni_no ,10) || ' ' || rpad(l_temp,50)
13567                           || ' ' || rpad(err_msg,100) );
13568       ELSE
13569         fnd_file.put_line(fnd_file.output,rpad(asg_rec.emp_no, 18) || ' ' || rpad(asg_rec.ni_no ,10) || ' ' || rpad(l_temp,50)
13570                           || ' ' || rpad(err_msg,100) );
13571       END IF;
13572       l_count_warns := l_count_warns + 1;
13573       END IF;
13574       CLOSE csr_warn_msg;
13575 
13576     END LOOP;
13577 
13578   END IF;
13579   fnd_file.put_line(fnd_file.output,NULL);
13580 
13581   IF p_type = 'E' THEN
13582     fnd_file.put_line(fnd_file.output,'Total Number of employments completed with error : ' || l_count);
13583   ELSIF p_type = 'W' THEN
13584     fnd_file.put_line(fnd_file.output,'Total Number of employments completed with warning : ' || l_count_warns);
13585   ELSE
13586     fnd_file.put_line(fnd_file.output,'Total Number of employments completed successfully :' || l_count);
13587   END IF;
13588   l_counter := l_counter + l_count;
13589 END write_body;
13590 ---
13591 PROCEDURE write_footer
13592 IS
13593 
13594   CURSOR get_person_count
13595   IS
13596     SELECT COUNT(DISTINCT(paaf.person_id))
13597     FROM pay_payroll_actions ppa,
13598       pay_assignment_actions paa,
13599       per_all_assignments_f paaf
13600     WHERE ppa.payroll_action_id = pactid -- pact_id
13601     AND paa.payroll_action_id   = ppa.payroll_action_id
13602     AND paa.action_status       = 'C'
13603     AND paaf.assignment_id      = paa.assignment_id;
13604 
13605 --l_person_count NUMBER;
13606 
13607 BEGIN
13608   OPEN get_person_count;
13609   FETCH get_person_count INTO l_person_count;
13610   CLOSE get_person_count;
13611 
13612   fnd_file.put_line(fnd_file.output,NULL);
13613   fnd_file.put_line(fnd_file.output,'Total Number of employments : ' || l_counter);
13614   fnd_file.put_line(fnd_file.output,NULL);
13615   fnd_file.put_line(fnd_file.output,'Total Number of employees successfully processed : ' || l_person_count);
13616 END write_footer;
13617 ---------------------
13618 BEGIN
13619   hr_utility.trace('Entering deinit: '||l_proc);
13620 
13621    -- To avoid re-archiving while Retry
13622    delete from pay_action_information pai
13623    where pai.action_context_id = pactid
13624    and pai.action_context_type = 'PA'
13625    and pai.action_information_category in ('RTI PAYROLL INFO');
13626 
13627    delete from pay_action_information pai
13628    where pai.action_context_id = pactid
13629    and pai.action_context_type = 'PA'
13630    and pai.action_information_category in ('GB_RTI_FPS_EXTRA_DET');
13631 
13632   OPEN csr_payroll_details(pactid);
13633   FETCH csr_payroll_details INTO l_payroll_rec;
13634   CLOSE csr_payroll_details;
13635 
13636   open csr_payroll_details_2(l_payroll_rec.paye_ref,l_payroll_rec.orgid);
13637   fetch csr_payroll_details_2 into l_tax_details;
13638   close csr_payroll_details_2;
13639 
13640   OPEN csr_parameter_info;
13641   FETCH csr_parameter_info INTO l_parameter_info_rec;
13642   CLOSE csr_parameter_info;
13643 
13644   l_final_submission_year                    := NULL;
13645   l_final_submission_ceased                  := NULL;
13646 
13647   IF(l_parameter_info_rec.final_submission    = 'YYEAR') THEN
13648     l_final_submission_year                  := 'Y';
13649     l_final_submission                       := 'Yes - Final for the Year';
13650   elsif(l_parameter_info_rec.final_submission = 'YCEAS') THEN
13651     l_final_submission_ceased                := 'Y';
13652     l_final_submission                       := 'Yes - Final for Ceased PAYE Ref';
13653   else l_final_submission := 'NO';
13654   END IF;
13655 
13656   l_econ := l_payroll_rec.econ_number;
13657 
13658   --Footer Validations
13659   pay_gb_rti_fps_validate_13.footer_validations(l_payroll_rec.econ_number,l_final_submission,l_flag);
13660 
13661   pay_balance_pkg.set_context('PAYROLL_ACTION_ID',pactid);
13662   hr_utility.set_location('l_payroll_rec.bus_grp_id   = ' || l_payroll_rec.bus_grp_id,10);
13663   hr_utility.set_location('l_payroll_rec.act_param_grp_id   = ' || l_payroll_rec.act_param_grp_id,20);
13664   hr_utility.set_location('l_sender_id = '||l_payroll_rec.sender_id,30);
13665   hr_utility.set_location('l_test_indicator = '||l_payroll_rec.test_indicator,40);
13666   hr_utility.set_location('l_request_id = '||l_payroll_rec.request_id,50);
13667   hr_utility.set_location('g_start_year = '||g_start_year,60);
13668 
13669   hr_utility.set_location('Archiving RTI PAYROLL INFO',60);
13670 
13671   pay_action_information_api.create_action_information ( p_action_information_id => l_action_info_id ,
13672                                                          p_action_context_id => pactid ,
13673                                                          p_action_context_type => 'PA' ,
13674                                                          p_object_version_number => l_ovn ,
13675                                                          p_source_id => NULL ,
13676                                                          p_source_text => NULL ,
13677                                                          p_action_information_category => 'RTI PAYROLL INFO' ,
13678                                                          p_action_information1 => pactid ,
13679                                                          p_action_information3 => NULL ,
13680                                                          p_action_information4 => l_payroll_rec.employer_name ,
13681                                                          p_action_information6 => l_payroll_rec.tax_office_no ,
13682                                                          p_action_information7 => l_payroll_rec.tax_ref_no ,
13683                                                          p_action_information8 => l_payroll_rec.payroll_ver ,
13684                                                          p_action_information11 => l_payroll_rec.acc_ref_no ,
13685                                                          p_action_information12 => l_payroll_rec.sender_id ,
13686                                                          p_action_information13 => l_payroll_rec.test_indicator ,
13687                                                          p_action_information14 => TO_CHAR(l_payroll_rec.request_id),
13688                                                          p_action_information15 => to_char(g_end_year,'RRRR'),
13689                                                          p_action_information16 => l_tax_details.sautr,
13690                                                          p_action_information17 => l_tax_details.cotaxref);
13691   ---
13692   pay_action_information_api.create_action_information ( p_action_information_id => l_action_info_id ,
13693                                                          p_action_context_id => pactid ,
13694                                                          p_action_context_type => 'PA' ,
13695                                                          p_object_version_number => l_ovn ,
13696                                                          p_source_id => NULL ,
13697                                                          p_source_text => NULL ,
13698                                                          p_action_information_category => 'GB_RTI_FPS_EXTRA_DET' ,
13699                                                          p_action_information1 => l_final_submission_ceased ,
13700                                                          p_action_information2 => l_final_submission_year ,
13701                                                          p_action_information3 => l_econ ,
13702                                                          p_action_information4 => l_parameter_info_rec.free_tax_payments_made ,
13703                                                          p_action_information5 => l_parameter_info_rec.expenses_benefits_others ,
13704                                                          p_action_information6 => l_parameter_info_rec.employed_outside_uk ,
13705                                                          p_action_information7 => l_parameter_info_rec.pay_to_third_party ,
13706                                                          p_action_information8 => l_parameter_info_rec.p11d_due ,
13707                                                          p_action_information9 => l_payroll_rec.service_company,
13708                                                          p_action_information10 => fnd_date.date_to_canonical(l_parameter_info_rec.date_scheme));
13709   ---
13710   OPEN csr_is_etext_report;
13711   FETCH csr_is_etext_report INTO l_is_etext_report;
13712   CLOSE csr_is_etext_report;
13713 
13714   l_counter := 0;
13715   write_header(l_is_etext_report);
13716   write_sub_header('C',l_is_etext_report);
13717   write_body('ET',pactid,l_is_etext_report);
13718   write_sub_header('E',l_is_etext_report);
13719   write_body('E',pactid,l_is_etext_report);
13720   write_sub_header('W',l_is_etext_report);
13721   write_body('W',pactid,l_is_etext_report);
13722   write_footer;
13723 	--Footer Validations
13724 	if l_flag = 'Y' then
13725 	PAY_GB_FPS_NI_AND_OTHERS_13.restored(pactid);
13726 	raise l_exp;
13727 	end if;
13728 
13729   if l_parameter_info_rec.version = 'Pre October' then
13730     l_negative_payment := 'N';
13731   else
13732     l_negative_payment := 'Y';
13733   end if;
13734 
13735   /*if(l_error_flag = 'Y') then
13736 	  	raise_application_error(-20001,'Errored assignments exists while processing FPS Process.');
13737   end if;
13738 */
13739   -- For Spawning the output Concurrent Program
13740   hr_utility.set_location('Spawning RTI FPS output process',1);
13741   xml_layout     := FND_REQUEST.ADD_LAYOUT('PAY','PYGBRTIFPSOP13','en','US','ETEXT');
13742 
13743 
13744   IF xml_layout   = true and g_validation_check = 'Y' and l_person_count <> 0 THEN
13745     l_request_id := fnd_request.submit_request (application => 'PAY'
13746                                                 ,program => 'PYGBRTIFPSOP13'
13747                                                 ,argument1 => pactid     --Process Name
13748 						);
13749     COMMIT;
13750     --check for process submit error
13751     IF l_request_id = 0 THEN
13752       hr_utility.set_location('Error spawning output process',1);
13753     END IF;
13754 
13755   END IF;
13756   hr_utility.set_location('Leaving: '||l_proc,999);
13757 
13758 
13759 
13760   -- For Spawning the Reconciliation Concurrent Program
13761   hr_utility.set_location('Spawning RTI FPS Reconciliation process',1);
13762   xml_layout     := FND_REQUEST.ADD_LAYOUT('PAY','PYGBFPSREC','en','US','PDF');
13763 
13764 
13765   IF xml_layout   = true and g_validation_check = 'Y' and l_person_count <> 0 THEN
13766     l_request_id := fnd_request.submit_request (application => 'PAY'
13767                                                 ,program => 'PYGBFPSREC'
13768                                                 ,argument1 => pactid     --Process Name
13769                                                -- ,argument2 => l_negative_payment
13770 						);
13771     COMMIT;
13772     --check for process submit error
13773     IF l_request_id = 0 THEN
13774       hr_utility.set_location('Error spawning Reconciliation process',1);
13775     END IF;
13776 
13777   END IF;
13778 
13779   hr_utility.set_location('Leaving: '||l_proc,999);
13780 /*if(l_error_flag = 'Y') then
13781 	  	raise_application_error(-20001,'Errored assignments exists while processing FPS Process.');
13782   end if;
13783 */
13784 EXCEPTION
13785 	When l_exp then
13786     fnd_file.put_line(fnd_file.LOG,'Errors found while archiving data.');
13787 		raise_application_error(-20001,'Errors found while archiving data.');
13788 END deinitialization_code;
13789 --
13790 END PAY_GB_RTI_FPS_ARCHIVE;