DBA Data[Home] [Help]

PACKAGE BODY: APPS.PAY_GB_RTI_FPS

Source


1 PACKAGE BODY PAY_GB_RTI_FPS AS
2   /* $Header: pygbrtifps.pkb 120.1.12020000.134 2013/03/29 13:37:12 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
10   Purpose:
11   It fetches the live data and archives it for RTI Processes.
12   This is a UK Specific payroll package.
13   History:
14   4-May-2012  krreddy     115.0  13918120  Created.
15   8-May-2012  krreddy     115.1  13918120  Corrected the GSCC Errors.
16   9-May-2012  krreddy     115.2  13918120  Modified code related to Config Values and Periods Covered.
17   4-Jun-2012  krreddy     115.3  13918120  Modified to implement the below:
18                                                       Multithreading issue
19                                                       BACS changes
20                                                       ASG_RUN logic
21                                                       Negative Payments
22                                                       Passport Number - Document of Reference
23   7-Jun-2012  krreddy     115.4  13918120  Modified to implement the below:
24                                                       First FPS changes
25                                                       Payroll Frequency changes
26   8-Jun-2012  ssarap      115.5  13918120  Modified the changes for advanced pay and some balances.
27   11-Jun-2012 rajganga    115.6  14177802  Modified.
28   13-Jun-2012 rajganga    115.7  14177802  Modified.
29   13-Jun-2012 krreddy     115.8  13918120  Modified to update Starter Declaration field to address
30                                                       new changes in the requirement.
31   14-Jun-2012 krreddy     115.9  13918120  Modified to implement appropriate Effective Date check.
32   15-Jun-2012 rajganga    115.10 14184141  Modified to include rollback when exp occurs in econ val.
33   15-Jun-2012 rajganga    115.10 14184141  Modified rollback to restored procedure.
34   15-Jun-2012 krreddy     115.11 13918120  Modified to update Pensioner values.
35   21-Jun-2012 rajganga    115.12 13918120  Modified Econ reporting and First Fps Balance calc.
36   21-JUN-2012 ssarap      115.13  13918120  Incorporated the hours worked changes of picking from various other sources.
37   25-Jun-2012  rajganga   115.14  14231920  Modified the submit_request date argument.
38   27-Jun-2012  rajganga   115.15  14231920  Modified to get Person Middle name for second forename.
39   06-Jul-2012  ssarap                      Removed the negative value changes.
40  06-Jul-2012   ssarap                                      Fixed the hours worked issue.
41   07-Jul-2012 rajganga    115.16  14231920  Fixed the empty asg no and inappropriate error msg.
42   11-Jul-2012 rajganga    115.17  14231920  XML Generation Architecture changed to XDODTEXE and -ve payment changes.
43   13-Jul-2012 ssarap      115.18            Summed up SPP Adoption Total, SPP Adoption Total
44                                             and ASPP Adoption Total ,ASPP Adoption Total.
45   18-Jul-2012 ssarap                        Fixing balance related bug.
46   18-Jul-2012 rajganga    115.19  14309887  Fixed incorrect validation errors and payroll check.
47   19-Jul-2012 rajganga    115.20  14347577  Fixed Cap and NHS issues.
48   20-Jul-2012 rajganga    115.21  14347577  Increased Error msg length in the EDI output.
49   20-Jul-2012 ssarap      115.21  14347577  Code changes for hours worked, NI balances, Tax code issues.
50   30-Jul-2012 rajganga    115.22  14086377  Fixed issues of number conversion , no data found.
51   30-Jul-2012 rajganga    115.22  14086377  Output cp will not be spawned if emps count is zero and header error occurs.
52   31-Jul-2012 krreddy     115.23  14393796  Implemented the below for PAYE Aggregation and NI Only Aggregation:
53                                             Categorized the Archive Code flow into Non-Aggregated, PAYE Aggregated and NI Only Aggregated sections.
54                                             Implemented the Logic to process PAYE Aggregated employees.
55                                             Modified the First FPS logic so that it processes aggregated employees as well.
56                                             Modified the Output logic to capture and display warning messages.
57 
58               ssarap                        Modified to implement NI Only Aggregation.
59                                             PAYE Aggregation - Balances fetching and reporting in output.
60   5-Aug-2012 krreddy     115.24  14393796  Implemented the below modifications for PAYE Aggregation:
61                                                        Created new validation procedures for Aggregated Scenarios.
62                                                        Created new procedure for Det1 context for Aggregated Scenarios.
63                                                        Modified the warning messages logic.
64                                                        Resolved the XML program spawning issue.
65                                                        Implemented the logic for checking Prepayment and error out the employee.
66   5-Aug-2012 krreddy     115.25  14393796  Arcsed in the correct file.
67   5-Aug-2012 krreddy     115.26  14393796  Removed the additional cursor opening which is incorrect.
68   7-Aug-2012 ssarap      115.37  14393796  Made changes for validation related balances, corrected aggregated balances, merged
69                                            with Raj changes.
70   8-Aug-2012 ssarap      115.38  14461582  Fix for the bug 14461582. Corrected the NI balance related index.
71   9-Aug-2012 ssarap      115.39  14393796  Implemented the code review comments. Added distinct keyword in select into statement
72                                            in archinit procedure.
73  10-Aug-2012  ssarap     115.43            Implemented the bugs reported.
74  10-Aug-2012  ssarap     115.46            Implement Passport number changes similar to hours worked.
75  13-Aug-2012  ssarap     115.43            Implemented the review comment ID#32 reported.
76  17-Aug-2012  ssarap     115.49            Implemented the review comment ID#34,35 reported.
77  22-Aug-2012  ssarap     115.50  14461582  Removed the usage of g_effective_date in write_body.
78                                            Added the counter check to avoid the PLSQL table no data found issue.
79  23-Aug-2012 krreddy     115.51  14531479  Fixed Cap Balances issue by making use of max child action id.
80  26-Aug-2012 krreddy     115.52  14530108  Modified the processing logic to fix incorrect output issue.
81  27-Aug-2012 rajganga    115.53  14503452  Modified csr_ni_info , csr_asg_details and oneoff payment issues.
82  28-Aug-2012 ssarap      115.54  14549289  Fixed NI mismatch issues.
83  31-Aug-2012 rajganga    115.55  14549289  Fixed Payment after leaving indicator, added errors to the LOG file
84 																					 Removed current emp flag check.
85  03-Sep-2012 rajganga    115.56  14577359  Fixed Termination logic and output file.
86  05-Sep-2012 ssarap      115.57  14549289  Fixed the NI Mismatch issue. Removed the swapping logic for archived values of NI context.
87  07-Sep-2012 rajganga    115.58  14576477  Removed unused pay_payrolls_f and added not null check for balances.
88  13-Sep-2012 ssarap      115.41  14365199  Fix for Interlocks, fix for balance doubling, fix for Retry.
89  14-Sep-2012 ssarap      115.42  14365199  Modified to raise an error when First FPS is already ran.
90  17-Sep-2012 rajganga    115.43  14365199  Modified to fix no data found issue.
91  17-Sep-2012 rajganga    115.44  14365199  Modified to fix no data found issue, added one more condition check
92  26-Sep-2012 krreddy     115.46  14313532  Leafproged and fixed the Tax Code Error.
93  27-Sep-2012 rajganga    115.47  14650604  Spawning Reconciliation Process.
94  03-Oct-2012 rajganga    115.48  14650604  New Starter RTI Sent flag check for Starter Declaration.
95  05-Oct-2012 rajganga     115.49  14683498  Fixed Econ issue.
96  05-Oct-2012 rajganga     115.50  14711819  Added the legislation code condition in the cursors get_defined_balance_id,
97                                             get_aggr_defined_balance_id, get_defined_balance_id_ni,get_aggr_defined_balance_id_ni.
98  08-Oct-2012 krreddy      115.51  14704814  Modified to error the program even if one asg error exists.
99  08-Oct-2012 rajganga     115.52  14704814  Modified address archiving ,End date and First FPS RTI sent logics.
100  09-Oct-2012 rajganga     115.53   14733866  Fixed the address issues.
101  10-Oct-2012 krredy       115.54   14709614  Fixed the start date issue for terminated asg.
102  10-Oct-2012 krredy       115.55   14709614  Further refined the fix for start date issue.
103  10-Oct-2012 krredy       115.56   14709614  Added few more conditions to the fix for start date issue.
104  11-Oct-2012 krredy       115.57   14737182  Removed a parameter while Spawning FPS Recon Report.
105  12-Oct-2012 rajganga     115.58   14737182  Fix re archiving during retry.
106  22-Oct-2012 ssarap                          On top of latest issues merged action creation code.
107  25-Oct-2012 krreddy      115.70             Latest code modified to archive two more columns for accomodating
108                                              Aggregation - Action Creation Logic.
109  25-Oct-2012 krreddy      115.71             Updated to accomodate NI Only Aggr changes in output logic.
110  25-Oct-2012 rajganga     115.72   14737182  Fixed No data and buffer small issue.
111  26-Oct-2012 ssarap       115.73   14737182  NI only aggregation and fixed the PAYE agg issues.
112  26-Oct-2012 ssarap       115.75   14737182  Fixed QA logged issues for PAYE aggregation.
113  26-Oct-2012 rajganga     115.76   14737182  Fixed det1 and det2 issue.
114  31-Oct-2012 ssarap       115.77   14827248  NI aggregation issue and interlock changes.
115  31-Oct-2012 krreddy      115.81   14827248  Fixed PAYE Aggregation issues on NI Records.
116  2-NOV -2012 ssarap       115.81   14827248  Fixed NI only aggregation issues from NHS.
117  9-Nov-2012  krreddy      115.87   14827248  This version includes the below changes on top of Action Creation Logic(115.81)
118                                              - PAYE Aggregation Errors occured as a result of new actions created.
119                                              - NI Only Aggregation Errors occured as a result of new actions created.
120                                              - BACS Error - Occuring for PAYE Aggregation scenarios.
121  9-Nov-2012  ssarap       115.88   14827248  NI Only aggregation case customer case fix.
122  12-Nov-2012 ssarap      115.88    14827248  NI Only aggregation case customer case fix.
123  16-Nov-2012 ssarap      115.91    14827248  NI Only aggregation case changes and non aggregation NI balance summed up change.
124  21-Nov-2012 rajganga    115.92    14827248  Added Reversal and Balance Adjustments.
125  22-Nov-2012 rajganga    115.93    14827248  Fixed Bacs no data found issue.
126  22-Nov-2012 krreddy     115.94    14827248  Modified to resolve the issue of incorrect actions getting created.
127  23-Nov-2012 krreddy     115.95    14827248  Modified to resolve further issues related to incorrect actions getting created.
128  28-Nov-2012 rajganga    115.96    15903486  Modified to fetch all details for the RTI reporting asg where no payroll exist.
129  30-Nov-2012 rajganga    115.97    15903486  Modified to fetch RTI Payroll ID for PAYE Aggregation.
130  03-Dec-2012 rajganga    115.99    15903486  Modified to fix Date of Leaving issue and Director check.
131  04-Dec-2012 krreddy     115.100             Leapfroged and modified on top of version 98 for Date of Leaving issue.
132  12-Dec-2012 krreddy     115.101             Leapfroged and modified on top of version 99 to implement
133                                              - additional logic for processing PAYE Aggr in First FPS.
134  14-Dec-2012 rajganga    115.102  15951186   Modified to show error msg if no NI RTI reporting asg is found.
135  14-Dec-2012 krreddy     115.103  15951186   Modified to use correct asg_id in fetch_fps_aggr_asg_det1.
136  14-Dec-2012 rajganga    115.104  15951186   Modified to add additional logic for processing NI Only Aggr in First FPS.
137  24-DEC-2012 achandwa 115.105 16034919   Modified the value of annual pension value to be reported in pens and trimmerd the value
138                                                                           while fetching
139  03-JAN-2013 ssarap     115.106              Hours worked changes for PAYE aggregation case.
140  03-JAN-2013 ssarap     115.107              Corrected the typo for category J.
141  10-JAN-2013 rajganga   115.108              Corrected duplicate actions for same asg.
142  10-JAN-2013 rajganga   115.108              Removed continue statement.
143  31-JAN-2013 krreddy    115.110   16164625   Modified to check if really payment made in current tax year.
144  07-FEB-2013 ssarap     115.111   16276411   Fix for Mckesson reported issues.
145  08-FEB-2013 ssarap     115.113   16276411   Assignment number data type is modified.
146  09-FEB-2013 ssarap     115.114   16276411   NHS issues for validation.
147  12-FEB-2013 sampmand     115.116   16276411   Added logic to delete from pay_gb_fps_details in case of retry.
148  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.
149  14-FEB-2013 sampmand     115.118   16276411   Modified Tax Code Fetch logic to fix  Mckesson issue.
150 			  Included 'TERM_ASSIGN' in get_eff_start_date cursor
151 			  to set first fps starter date correctly.
152   21-FEB-2013 sampmand     115.119   16328672   Modified starter flag checks in fetch_fps_asg_det1.
153   21-FEB-2013 ssarap              115.120   16345058   Initialiazed variable l_flag1 to 'Y' each time  at
154                                                        the start of the loop in action creation code.
155   04-Mar-2013 sampmand     115.121   16386622  Modified Retry Cursor,Ni reporting cursor.
156   11-Mar-2013 krreddy      115.122   16396194  Modified the below two procedures for correcting the balance values if they contain
157                                                Process Separate elements in the run:
158                                                fetch_fps_asg_det2 and fetch_fps_agg_asg_det2.
159   13-Mar-2013 ssarap       115.123   16414987  Hours worked fix for multiple assignments.
160   15-Mar-2013 ssarap       115.124   16469649  Changed the global variable usage in action creation.
161   15-Mar-2013 rajganga     115.125   16386622  Modified for Retry.
162   18-Mar-2013 sampmand     115.127              Modified Partner sur-name fetching logic for SR 3-6903967467.
163   20-Mar-2013 rajganga     115.129   16501443   Added sysdate+30 condition to Termination date.
164   20-Mar-2013 sampmand     115.130   16505555   Modified decode logic of tax_basis in procedure fetch_tax_code_basis.
165   22-Mar-2013 krreddy      115.131   16409794  Resolved the issue of incorrect picking of actions when no payment exists.
166   25-Mar-2013 krreddy      115.132   16542698  Resolved the NI Only and PAYE Aggr issues with No Payment Exist scenarios.
167   26-Mar-2013 krreddy      115.133   16459087  Modified two cursor queries in internal_action_creation to improve performance.
168                                                           16503199  Updated the Starter Declaration validation logic.
169   26-Mar-2013 ssarap       115.128   16306737  Added a third party prepayment check for pay_pre_payments tables. Removed
170 											   the balances Pre Tax Deductions and NIable Deductions Free of Tax from 58B.
171  29-Mar-2013  ssarap         115.35    16555308  Changes to 58B calculation. Used the updated procedure fetch_HASH_FPS_PER.
172                                                                                      Fetched the correct NI Employee values .
173 ============================================================================*/
174   --
175   --
176   g_package             CONSTANT VARCHAR2(20)                         := 'pay_gb_rti_fps.';
177   c_contract_table_name CONSTANT pay_user_tables.user_table_name%TYPE := 'PQP_CONTRACT_TYPES';
178   g_start_year DATE;
179   g_end_year DATE;
180   g_effective_date DATE;
181   g_fps_effective_date DATE;
182   g_fps_start_year DATE;
183   g_fps_end_year DATE;
184   g_business_group_id hr_organization_units.business_group_id%TYPE;
185   g_legislation_code       VARCHAR2(2) := 'GB';
186   g_permit_number          VARCHAR2(12);
187   g_tax_district_reference VARCHAR2(3);
188   g_tax_reference_number   VARCHAR2(10); --4011263: length 10 chars
189   g_split                  VARCHAR2(1);
190   g_pre_pact_id            NUMBER;
191   g_first_fps              VARCHAR2(1);
192   g_paye_element_id        NUMBER:= -1;
193   g_paye_details_id        NUMBER:= -1;
194   g_payroll_action_id      NUMBER;
195   g_date_paid DATE;
196   g_asg_primary_flag VARCHAR2(1);
197   g_per_agg_flag     VARCHAR2(1);
198   g_reset_flag_type  VARCHAR2(30);
199   g_taxable_id pay_defined_balances.defined_balance_id%TYPE;
200   g_paye_id pay_defined_balances.defined_balance_id%TYPE;
201   g_student_loan_id pay_defined_balances.defined_balance_id%TYPE;
202   g_taxable_ptd_id pay_defined_balances.defined_balance_id%TYPE;
203   g_student_loan_ptd_id pay_defined_balances.defined_balance_id%TYPE;
204   g_paye_ptd_id pay_defined_balances.defined_balance_id%TYPE;
205   g_ssp_id pay_defined_balances.defined_balance_id%TYPE;
206   g_smp_id pay_defined_balances.defined_balance_id%TYPE;
207   g_ospp_adopt_id pay_defined_balances.defined_balance_id%TYPE;
208   g_sap_id pay_defined_balances.defined_balance_id%TYPE;
209   g_aspp_adopt_id pay_defined_balances.defined_balance_id%TYPE;
210   g_final_submission         VARCHAR2(100);
211   g_free_tax_payments_made   VARCHAR2(100);
212   g_expenses_benefits_others VARCHAR2(100);
213   g_employed_outside_uk      VARCHAR2(100);
214   g_pay_to_third_party       VARCHAR2(100);
215   g_p11d_due                 VARCHAR2(100);
216   g_hmrc_advance_received    VARCHAR2(100);
217   g_cis_deductions           VARCHAR2(100);
218   g_econ                     VARCHAR2(100);
219   g_service_company          VARCHAR2(100);
220   g_ni_pt_eid                NUMBER:=0;
221   g_ni_pt_ivid               NUMBER:=0;
222   g_fps_bal_det_tab t_fps_bal_det_tab;
223   g_fps_aggr_bal_det_tab t_fps_bal_det_tab;
224   g_defined_balance_lst pay_balance_pkg.t_balance_value_tab;         -- used for batch balance retrieval of normal balances
225   g_aggr_defined_balance_lst pay_balance_pkg.t_balance_value_tab;    -- used for batch balance retrieval of aggregation balances
226   g_aggr_defined_balance_lst_ni pay_balance_pkg.t_balance_value_tab; -- used for batch balance retrieval of ni aggregation balances
227   --
228   g_tax_ref VARCHAR2(20);
229   --
230   g_paye_eid      NUMBER :=0 ;
231   g_ni_eid        NUMBER :=0;
232   g_tax_ivid      NUMBER :=0;
233   g_taxbasis_ivid NUMBER :=0;
234   g_pt_ivid       NUMBER :=0;
235   --
236   --
237   g_ssp_total NUMBER;
238   g_smp_total NUMBER;
239   g_assp_total NUMBER;
240   g_sap_total NUMBER;
241   g_spp_total NUMBER;
242 
243   g_payroll_id NUMBER;
244   g_first_fps_run_date date;
245 
246   first_fps_indicator_error  EXCEPTION;
247   first_fps_ran_already_error EXCEPTION;
248 --
249   g_adv_period_id NUMBER;
250   g_validation_check VARCHAR2(1) := 'Y';
251   g_prepayment_date date;
252 
253   -- Function to fetch address details (CONTEXT - ADDRESS DETAILS)
254 FUNCTION fetch_address_rec(
255     p_person_id      IN NUMBER,
256     p_assignment_id  IN NUMBER,
257     p_effective_date IN DATE,
258     p_addr_rec OUT nocopy act_info_rec)
259   RETURN BOOLEAN
260 IS
261   l_proc CONSTANT VARCHAR2(50):= g_package||'fetch_address_rec';
262   l_arch BOOLEAN;
263   --address details
264   l_address_line1 per_addresses.address_line1%TYPE;
265   l_address_line2 per_addresses.address_line2%TYPE;
266   l_address_line3 per_addresses.address_line3%TYPE;
267   l_address_line4 per_addresses.address_line3%TYPE;
268 
269   CURSOR csr_address
270   IS
271     SELECT upper(SUBSTR(trim(addr.address_line1),1,35)) addr1,
272       upper(SUBSTR(trim(addr.address_line2),1,35)) addr2,
273       upper(SUBSTR(trim(addr.address_line3),1,35)) addr3,
274       SUBSTR(addr.postal_code,1,10) post_code,
275       upper(SUBSTR(trim(addr.town_or_city),1,35)) addr4,
276       upper(SUBSTR(trim(addr.country),1,35)) country
277     FROM per_addresses addr
278     WHERE addr.person_id    = p_person_id
279     AND ( addr.primary_flag = 'Y'
280     OR addr.primary_flag   IS NULL)
281     AND p_effective_date
282     BETWEEN NVL(addr.date_from,fnd_date.canonical_to_date('0001/01/01 00:00:00'))
283     AND NVL(addr.date_to, fnd_date.canonical_to_date('4712/12/31 00:00:00'));
284 
285   l_addr_rec csr_address%rowtype;
286 
287 BEGIN
288   hr_utility.set_location('Entering : '||l_proc,1);
289   l_arch := true;
290 
291   OPEN csr_address;
292   FETCH csr_address INTO l_addr_rec;
293   CLOSE csr_address;
294 
295   l_address_line1 := l_addr_rec.addr1;
296   l_address_line2 := l_addr_rec.addr2;
297   l_address_line3 := l_addr_rec.addr3;
298   l_address_line4 := l_addr_rec.addr4;
299   -- Swapping from Address line4 to line2
300 
301   IF l_address_line3 = ' ' THEN
302     l_address_line3 := l_address_line4;
303     l_address_line4 := ' ';
304   END IF;
305 
306   IF l_address_line2 = ' ' THEN
307     l_address_line2 := l_address_line3;
308     l_address_line3 := l_address_line4;
309     l_address_line4 := ' ';
310   END IF;
311 
312   IF LENGTH(TRIM(l_address_line4)) > 0 THEN
313     l_address_line4               := l_address_line4;
314   ELSE
315     l_address_line4 := ' ';
316   END IF;
317 
318   IF LENGTH(TRIM(l_address_line3)) > 0 THEN
319     l_address_line3               := l_address_line3;
320   ELSE
321     l_address_line3 := l_address_line4;
322     l_address_line4 := ' ';
323   END IF;
324 
325   IF LENGTH(TRIM(l_address_line2)) > 0 THEN
326     l_address_line2               := l_address_line2;
327   ELSE
328     l_address_line2 := l_address_line3;
329     l_address_line3 := l_address_line4;
330     l_address_line4 := ' ';
331   END IF;
332   -- For Foreign Country, postal code will not be reported , where as Country will be reported
333   -- For GB , postal code will be reported
334 
335   IF l_addr_rec.country      = 'GB' THEN
336     IF l_addr_rec.post_code <> ' ' OR l_addr_rec.post_code IS NOT NULL THEN
337       l_addr_rec.country    := ' ';
338     END IF;
339   ELSE
340     l_addr_rec.post_code:= ' ';
341   END IF;
342 
343   hr_utility.trace('line 1'||l_address_line1);
344   hr_utility.trace('line 2'||l_address_line2);
345   hr_utility.trace('line 3'||l_address_line3);
346   hr_utility.trace('line 4'||l_address_line4);
347 
348   p_addr_rec.assignment_id        := p_assignment_id;
349   p_addr_rec.action_info_category := 'ADDRESS DETAILS';
350   p_addr_rec.act_info5            := l_address_line1;
351   p_addr_rec.act_info6            := l_address_line2;
352   p_addr_rec.act_info7            := l_address_line3;
353   p_addr_rec.act_info8            := l_address_line4;
354   p_addr_rec.act_info12           := l_addr_rec.post_code;
355   p_addr_rec.act_info13           := l_addr_rec.country;
356   hr_utility.set_location('Leaving: '||l_proc,999);
357   RETURN l_arch;
358 END fetch_address_rec;
359 
360 --
361 /*
362 Returns the hours worked value for the person from the source configured in Configuration
363 values page for this BG.
364 */
365 FUNCTION get_hours_worked(
366     p_assignment_id NUMBER)
367   RETURN VARCHAR2
368 IS
369   l_config_values PQP_UTILITIES.t_config_values;
370   g_bon_bal_type_id NUMBER;
371   l_source_name     VARCHAR2(100);
372   l_context_name    VARCHAR2(100);
373   l_column_name     VARCHAR2(100);
374   l_function_name   VARCHAR2(100);
375   l_sqlstr          VARCHAR2(1000);
376   l_hours_worked    VARCHAR2(20) := NULL;
377   l_package         VARCHAR2(100);
378   l_frequency       VARCHAR2(20);
379   l_working_hours   VARCHAR2(20);
380   l_effective_date  date;
381   l_paye_agg_flag   varchar2(100);
382   l_hours_worked_asg number;
383   l_asg_eff_date      date;
384   l_irregular       varchar2(2):= 'N';
385 cursor csr_normal_hours is
386   select  AEI_INFORMATION2 from per_assignment_extra_info
387   where assignment_id = p_assignment_id and INFORMATION_TYPE = 'GB_PAY_RTI'
388         and AEI_INFORMATION_CATEGORY = 'GB_PAY_RTI';
389 
390   cursor csr_stnd_cond(c_asg_id number) is
391    select  FREQUENCY , NORMAL_HOURS from per_all_assignments_f where assignment_id = c_asg_id and
392    l_effective_date  between effective_start_date and effective_end_date;
393 
394 cursor csr_asg_start_date(c_asg_id number) is
395 select max(effective_start_date) from per_all_assignments_f
396 where assignment_id = c_asg_id
397 and assignment_type = 'E'
398 and effective_start_date <= g_effective_date;
399 
400 -- to get the agg flag.
401 cursor csr_agg_flag(c_asg_id number) is
402     SELECT trim(nvl(pap.per_information10,'N')) per_agg_flag
403     FROM per_all_people_f pap,
404       per_all_assignments_f asg
405     WHERE asg.assignment_id       = c_asg_id
406     AND pap.person_id             = asg.person_id
407     AND asg.business_group_id     = g_business_group_id
408     AND l_effective_date BETWEEN asg.effective_start_date AND asg.effective_end_date
409     AND l_effective_date BETWEEN pap.effective_start_date AND pap.effective_end_date;
410 
411   cursor csr_asg is
412   select paaf.assignment_id
413 	from per_all_assignments_f paaf,
414     	 pay_payrolls_f pay,
415 	     hr_soft_coding_keyflex sck
416 	where paaf.person_id     =  (select distinct person_id from per_all_assignments_f where ASSIGNMENT_ID =p_assignment_id)
417 	and   pay.payroll_id     = paaf.payroll_id
418 	and   pay.SOFT_CODING_KEYFLEX_ID = sck.SOFT_CODING_KEYFLEX_ID
419 	and   sck.SEGMENT1 = g_tax_ref
420 	and   paaf.EFFECTIVE_START_DATE =
421 				( select max(paaf1.effective_start_date)
422 					from per_all_assignments_f paaf1
423 					where paaf1.assignment_id = paaf.assignment_id
424 					and paaf1.assignment_type       = 'E'
425 					and paaf1.effective_start_date <= l_effective_date
426 				)
427 	and l_effective_date between pay.EFFECTIVE_START_DATE and pay.EFFECTIVE_END_DATE;
428 
429 
430 BEGIN
431   hr_utility.trace('Entering get_hours_worked');
432   hr_utility.trace('g_effective_date in hours worked : ' || g_effective_date);
433   open csr_asg_start_date(p_assignment_id);
434   fetch csr_asg_start_date into l_effective_date;
435   close csr_asg_start_date;
436   hr_utility.trace('l_effective_date in hours worked : ' || l_effective_date);
437 
438     open csr_agg_flag(p_assignment_id);
439     fetch csr_agg_flag into l_paye_agg_flag;
440     close csr_agg_flag;
441     hr_utility.trace('l_paye_agg_flag: ' || l_paye_agg_flag);
442 --  Source 1
443 
444 -- First check the hours worked from normal hours in the assignment form
445 -- Assignment EIT Context='RTI Information' and segment 'Normal Hours Band'
446 
447   open csr_normal_hours;
448   fetch csr_normal_hours into l_hours_worked;
449   close csr_normal_hours;
450 
451 -- Source 2
452 -- Configuration values
453   if l_hours_worked is null then
454   hr_utility.trace('in config ');
455   --  Use below API to get the config values for the given context in the business group
456    PQP_UTILITIES.get_config_type_values( p_configuration_type => 'PAY_GB_FPS_HOURS_WORKED' ,
457                                         p_business_group_id => g_business_group_id ,
458                                         p_legislation_code => g_legislation_code ,
459                                         p_tab_config_values => l_config_values );
460 
461   IF l_config_values.COUNT > 0 THEN -- Source is hours worked.
462     l_source_name         := l_config_values(l_config_values.FIRST).pcv_information1;
463     l_context_name        := l_config_values(l_config_values.FIRST).pcv_information4;
464     l_column_name         := l_config_values(l_config_values.FIRST).pcv_information5;
465     l_function_name       := l_config_values(l_config_values.FIRST).pcv_information6;
466     hr_utility.trace('l_source_name: ' || l_source_name);
467     hr_utility.trace('l_context_name: ' || l_context_name);
468     hr_utility.trace('l_column_name: ' || l_column_name);
469     hr_utility.trace('l_function_name: ' || l_function_name);
470 
471     /**
472     Source for deriving the hours worked can be
473     - Assignment ==> Extra details
474     - Assignment ==> DFF
475     - Formula Function
476     **/
477     IF l_source_name = 'Assignment Developer DF' THEN
478       l_sqlstr      := 'select ' || l_column_name ||
479                        ' from per_assignment_extra_info where assignment_id = :assignment_id and AEI_INFORMATION_CATEGORY = :l_context_name';
480       begin
481 	EXECUTE immediate l_sqlstr INTO l_hours_worked USING p_assignment_id,l_context_name;
482      exception
483       WHEN OTHERS THEN
484 			  hr_utility.trace('Exception in get hours worked.Assignment Developer DFF.');
485 			  hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
486       end;
487     elsif l_source_name = 'PER_ASSIGNMENTS' THEN
488       l_sqlstr         := 'select ' || l_column_name ||
489                           ' from per_all_assignments_f where assignment_id = :assignment_id and ASS_ATTRIBUTE_CATEGORY = :l_context_name'||
490 													' and '||l_effective_date||' between effective_start_date and effective_end_date' ;
491 			begin
492 	      EXECUTE immediate l_sqlstr INTO l_hours_worked USING p_assignment_id,l_context_name;
493 						exception
494       WHEN OTHERS THEN
495 			  hr_utility.trace('Exception in get hours worked.PER_ASSIGNMENTS.');
496 			  hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
497       end;
498     elsif l_source_name = 'Function' THEN
499 			begin
500       SELECT definition
501       INTO l_package
502       FROM ff_functions
503       WHERE name = l_function_name
504       and business_group_id = g_business_group_id;
505 
506       --EXECUTE IMMEDIATE 'CALL ' || l_package || '() INTO :l_hours_worked' USING OUT l_hours_worked;
507 	   hr_utility.trace('l_package'||l_package);
508 
509       if l_paye_agg_flag = 'Y' then
510        --get all asg for PAYE agg
511        hr_utility.trace('Agg Person . Hours worked.');
512        for asg_rec in csr_asg loop
513        open csr_asg_start_date(asg_rec.assignment_id);
514        fetch csr_asg_start_date into l_asg_eff_date;
515        close csr_asg_start_date;
516            l_sqlstr    :=
517                                'SELECT '
518                             || l_package
519                             || ' (:p_assignment_id,:p_eff_date) '
520                             || 'FROM DUAL';
521        EXECUTE IMMEDIATE l_sqlstr into l_hours_worked_asg USING asg_rec.assignment_id,l_asg_eff_date;
522         l_hours_worked := nvl(l_hours_worked,0) + l_hours_worked_asg;
523        end loop;
524       else
525       l_sqlstr    :=
526                                'SELECT '
527                             || l_package
528                             || ' (:p_assignment_id,:p_eff_date) '
529                             || 'FROM DUAL';
530        EXECUTE IMMEDIATE l_sqlstr into l_hours_worked USING p_assignment_id,l_effective_date;
531        end if; -- end paye agg
532        if l_hours_worked = 0 then
533           l_hours_worked := 'D';
534        end if;
535        hr_utility.trace('Function value l_hours_worked '||l_hours_worked);
536 			exception
537       WHEN OTHERS THEN
538 			  hr_utility.trace('Exception in get hours worked.Function.');
539 			  hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
540 			end;
541     END IF;
542 
543   END IF;
544  END IF;--source 2 end
545 
546 -- Source 3
547 --Assignment Standard Conditions
548   if l_hours_worked is null then
549   hr_utility.trace('in standard ');
550 
551     if l_paye_agg_flag = 'Y' then
552        --get all asg for PAYE agg
553        hr_utility.trace('Agg Person . Hours worked.');
554        for asg_rec in csr_asg loop
555           open csr_stnd_cond(asg_rec.assignment_id);
556        fetch csr_stnd_cond into l_frequency, l_working_hours;
557       close csr_stnd_cond;
558       if l_frequency is not null and  l_working_hours is not null then
559 
560  	      if l_frequency = 'W' then
561           l_hours_worked := nvl(l_hours_worked,0) + l_working_hours;
562    	    elsif l_frequency = 'M' then
563           l_hours_worked := nvl(l_hours_worked,0) + round(l_working_hours *12/52,2);
564     	  elsif l_frequency = 'D' then
565           l_hours_worked := nvl(l_hours_worked,0) + round(l_working_hours *5,2);
566       	elsif l_frequency = 'Y' then
567           l_hours_worked := nvl(l_hours_worked,0) + round(l_working_hours/52,2);
568       	elsif l_frequency = 'H' then
569           l_irregular := 'Y';
570         end if;
571       end if;
572        end loop;
573       if l_irregular = 'Y' and l_hours_worked is null then
574           l_hours_worked := 'D';
575         end if;
576 
577    else -- else paye agg
578       open csr_stnd_cond(p_assignment_id);
579       fetch csr_stnd_cond into l_frequency, l_working_hours;
580       close csr_stnd_cond;
581       if l_frequency is not null and  l_working_hours is not null then
582 
583  	      if l_frequency = 'W' then
584           l_hours_worked := l_working_hours;
585    	    elsif l_frequency = 'M' then
586           l_hours_worked := round(l_working_hours *12/52,2);
587     	  elsif l_frequency = 'D' then
588           l_hours_worked := round(l_working_hours *5,2);
589       	elsif l_frequency = 'Y' then
590           l_hours_worked := round(l_working_hours/52,2);
591       	elsif l_frequency = 'H' then
592           l_hours_worked := 'D';
593         end if;
594       end if;
595     end if; -- end for PAYE agg
596   end if; -- Soruce 3 end
597 
598   hr_utility.trace(' l_hours_worked : ' || l_hours_worked);
599 
600   -- Convert hours worked into Grades.
601   IF l_hours_worked IS NOT NULL AND LENGTH(TRIM(TRANSLATE (l_hours_worked, ' +-.0123456789',' '))) IS NULL THEN
602     IF to_number(l_hours_worked) <= 15.99 THEN
603       RETURN 'A';
604     elsif to_number(l_hours_worked) <= 29.99 THEN
605       RETURN 'B';
606     ELSE
607       RETURN 'C';
608     END IF;
609   ELSE
610     RETURN l_hours_worked;
611   END IF;
612   hr_utility.trace('Leaving get_hours_worked');
613 EXCEPTION
614 WHEN OTHERS THEN
615   hr_utility.trace('Exception in get hours worked end of function block.');
616   hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
617   fnd_file.put_line(fnd_file.LOG,'Exception:' || SQLCODE || ' - ' || SQLERRM);
618   return null;
619 END get_hours_worked;
620 
621 /*
622 Returns get_periods_covered value for the person from the source configured in Configuration
623 values page for this BG.
624 */
625 FUNCTION get_periods_covered(
626     p_assignment_id NUMBER)
627   RETURN VARCHAR2
628 IS
629   l_config_values PQP_UTILITIES.t_config_values;
630   g_bon_bal_type_id NUMBER;
631   l_source_name     VARCHAR2(100);
632   l_context_name    VARCHAR2(100);
633   l_column_name     VARCHAR2(100);
634   l_function_name   VARCHAR2(100);
635   l_sqlstr          VARCHAR2(1000);
636   l_periods_covered    VARCHAR2(20) := NULL;
637   l_package         VARCHAR2(100);
638   l_frequency       VARCHAR2(20);
639   l_effective_date date;
640 
641 cursor csr_periods_covered_eit is
642   select  AEI_INFORMATION1 from per_assignment_extra_info
643   where assignment_id = p_assignment_id and INFORMATION_TYPE = 'GB_PAY_RTI'
644         and AEI_INFORMATION_CATEGORY = 'GB_PAY_RTI';
645 
646 cursor csr_asg_start_date is
647 select max(effective_start_date) from per_all_assignments_f
648 where assignment_id = p_assignment_id
649 and assignment_type = 'E'
650 and effective_start_date <= g_effective_date;
651 
652 BEGIN
653 
654   hr_utility.trace('Entering get_periods_covered');
655   hr_utility.trace('g_effective_date in get_periods_covered : ' || g_effective_date);
656   open csr_asg_start_date;
657   fetch csr_asg_start_date into l_effective_date;
658   close csr_asg_start_date;
659   hr_utility.trace('l_effective_date in get_periods_covered : ' || l_effective_date);
660 
661 --  Source 1
662 
663 -- First check in the assignment form
664 -- Assignment EIT Context='RTI Information'
665 
666   open csr_periods_covered_eit;
667   fetch csr_periods_covered_eit into l_periods_covered;
668   close csr_periods_covered_eit;
669 
670 -- Source 2
671 -- Configuration values
672   if l_periods_covered is null then
673   hr_utility.trace('in config ');
674 
675   --  Use below API to get the config values for the given context in the business group
676    PQP_UTILITIES.get_config_type_values( p_configuration_type => 'PAY_GB_FPS_PERIODS_COVERED' ,
677                                         p_business_group_id => g_business_group_id ,
678                                         p_legislation_code => g_legislation_code ,
679                                         p_tab_config_values => l_config_values );
680 
681   IF l_config_values.COUNT > 0 THEN
682     l_source_name         := l_config_values(l_config_values.FIRST).pcv_information1;
683     l_context_name        := l_config_values(l_config_values.FIRST).pcv_information4;
684     l_column_name         := l_config_values(l_config_values.FIRST).pcv_information5;
685     l_function_name       := l_config_values(l_config_values.FIRST).pcv_information6;
686 
687     hr_utility.trace('l_source_name: ' || l_source_name);
688     hr_utility.trace('l_context_name: ' || l_context_name);
689     hr_utility.trace('l_column_name: ' || l_column_name);
690     hr_utility.trace('l_function_name: ' || l_function_name);
691 
692     /**
693 
694     - Assignment ==> Extra details
695     - Assignment ==> DFF
696     - Formula Function
697     **/
698     IF l_source_name = 'Assignment Developer DF' THEN
699       l_sqlstr      := 'select ' || l_column_name ||
700                        ' from per_assignment_extra_info where assignment_id = :assignment_id and AEI_INFORMATION_CATEGORY = :l_context_name';
701       begin
702 
703         hr_utility.trace('string '||l_sqlstr);
704 				EXECUTE immediate l_sqlstr INTO l_periods_covered USING p_assignment_id,l_context_name;
705 
706 		    exception
707 		    WHEN OTHERS THEN
708 					  hr_utility.trace('Exception in get_periods_covered.Assignment Developer DFF.');
709 					  hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
710 		        return null;
711 	    end;
712 
713     elsif l_source_name = 'PER_ASSIGNMENTS' THEN
714 
715 		  l_sqlstr         := 'select ' || l_column_name ||
716                           ' from per_all_assignments_f where assignment_id = :assignment_id and ASS_ATTRIBUTE_CATEGORY = :l_context_name'||
717 													' and '||l_effective_date||' between effective_start_date and effective_end_date' ;
718 			begin
719 	      EXECUTE immediate l_sqlstr INTO l_periods_covered USING p_assignment_id,l_context_name;
720 
721 				exception
722 	      WHEN OTHERS THEN
723 				  hr_utility.trace('Exception in get_periods_covered.PER_ASSIGNMENTS.');
724 				  hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
725 		      return null;
726 	    end;
727 
728     elsif l_source_name = 'Function' THEN
729 
730 			begin
731       SELECT definition
732       INTO l_package
733       FROM ff_functions
734       WHERE name = l_function_name
735       and business_group_id = g_business_group_id;
736 
737       --EXECUTE IMMEDIATE 'CALL ' || l_package || '() INTO :l_periods_covered' USING OUT l_periods_covered;
738       hr_utility.trace('l_package'||l_package);
739 
740       l_sqlstr    :=
741                                'SELECT '
742                             || l_package
743                             || ' (:p_assignment_id,:p_eff_date) '
744                             || 'FROM DUAL';
745        EXECUTE IMMEDIATE l_sqlstr into l_periods_covered USING p_assignment_id,l_effective_date;
746 
747        hr_utility.trace('Function value l_periods_covered '||l_periods_covered);
748 
749       exception
750       WHEN OTHERS THEN
751 			  hr_utility.trace('Exception in get_periods_covered.Function.');
752 			  hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
753         return null;
754 			end;
755 
756     END IF;
757 
758   END IF;
759  END IF;--source 2 end
760 
761   hr_utility.trace(' l_periods_covered : ' || l_periods_covered);
762   hr_utility.trace('Leaving get_periods_covered');
763 
764   return l_periods_covered;
765 
766 EXCEPTION
767 WHEN OTHERS THEN
768   hr_utility.trace('Exception in get_periods_covered end of function block.');
769   hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
770   fnd_file.put_line(fnd_file.LOG,'Exception:' || SQLCODE || ' - ' || SQLERRM);
771   return null;
772 END get_periods_covered;
773 
774 
775 /*
776 Returns get_irregular_payment value for the person from the source configured in Configuration
777 values page for this BG.
778 */
779 FUNCTION get_irregular_payment(
780     p_assignment_id NUMBER)
781   RETURN VARCHAR2
782 IS
783   l_config_values PQP_UTILITIES.t_config_values;
784   g_bon_bal_type_id NUMBER;
785   l_source_name     VARCHAR2(100);
786   l_context_name    VARCHAR2(100);
787   l_column_name     VARCHAR2(100);
788   l_function_name   VARCHAR2(100);
789   l_sqlstr          VARCHAR2(1000);
790   l_irregular_payment    VARCHAR2(20) := NULL;
791   l_package         VARCHAR2(100);
792   l_frequency       VARCHAR2(20);
793   l_effective_date date;
794 
795 cursor csr_irregular_payment_eit is
796   select  AEI_INFORMATION3 from per_assignment_extra_info
797   where assignment_id = p_assignment_id and INFORMATION_TYPE = 'GB_PAY_RTI'
798         and AEI_INFORMATION_CATEGORY = 'GB_PAY_RTI';
799 
800 cursor csr_asg_start_date is
801 select max(effective_start_date) from per_all_assignments_f
802 where assignment_id = p_assignment_id
803 and assignment_type = 'E'
804 and effective_start_date <= g_effective_date;
805 
806 BEGIN
807 
808   hr_utility.trace('Entering get_irregular_payment');
809   hr_utility.trace('g_effective_date in get_irregular_payment : ' || g_effective_date);
810   open csr_asg_start_date;
811   fetch csr_asg_start_date into l_effective_date;
812   close csr_asg_start_date;
813   hr_utility.trace('l_effective_date in get_irregular_payment : ' || l_effective_date);
814 
815 --  Source 1
816 
817 -- First check in the assignment form
818 -- Assignment EIT Context='RTI Information'
819 
820   open csr_irregular_payment_eit;
821   fetch csr_irregular_payment_eit into l_irregular_payment;
822   close csr_irregular_payment_eit;
823 
824 -- Source 2
825 -- Configuration values
826   if l_irregular_payment is null then
827   hr_utility.trace('in config ');
828 
829   --  Use below API to get the config values for the given context in the business group
830    PQP_UTILITIES.get_config_type_values( p_configuration_type => 'PAY_GB_FPS_IRREGULAR_PAYMENT' ,
831                                         p_business_group_id => g_business_group_id ,
832                                         p_legislation_code => g_legislation_code ,
833                                         p_tab_config_values => l_config_values );
834 
835   IF l_config_values.COUNT > 0 THEN
836     l_source_name         := l_config_values(l_config_values.FIRST).pcv_information1;
837     l_context_name        := l_config_values(l_config_values.FIRST).pcv_information4;
838     l_column_name         := l_config_values(l_config_values.FIRST).pcv_information5;
839     l_function_name       := l_config_values(l_config_values.FIRST).pcv_information6;
840 
841     hr_utility.trace('l_source_name: ' || l_source_name);
842     hr_utility.trace('l_context_name: ' || l_context_name);
843     hr_utility.trace('l_column_name: ' || l_column_name);
844     hr_utility.trace('l_function_name: ' || l_function_name);
845 
846     /**
847 
848     - Assignment ==> Extra details
849     - Assignment ==> DFF
850     - Formula Function
851     **/
852     IF l_source_name = 'Assignment Developer DF' THEN
853       l_sqlstr      := 'select ' || l_column_name ||
854                        ' from per_assignment_extra_info where assignment_id = :assignment_id and AEI_INFORMATION_CATEGORY = :l_context_name';
855       begin
856 
857         hr_utility.trace('string '||l_sqlstr);
858 				EXECUTE immediate l_sqlstr INTO l_irregular_payment USING p_assignment_id,l_context_name;
859 
860 		    exception
861 		    WHEN OTHERS THEN
862 					  hr_utility.trace('Exception in get_irregular_payment Assignment Developer DFF.');
863 					  hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
864 		        return null;
865 	    end;
866 
867     elsif l_source_name = 'PER_ASSIGNMENTS' THEN
868 
869 		  l_sqlstr         := 'select ' || l_column_name ||
870                           ' from per_all_assignments_f where assignment_id = :assignment_id and ASS_ATTRIBUTE_CATEGORY = :l_context_name'||
871 													' and '||l_effective_date||' between effective_start_date and effective_end_date' ;
872 			begin
873 	      EXECUTE immediate l_sqlstr INTO l_irregular_payment USING p_assignment_id,l_context_name;
874 
875 				exception
876 	      WHEN OTHERS THEN
877 				  hr_utility.trace('Exception in get_irregular_payment PER_ASSIGNMENTS.');
878 				  hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
879 		      return null;
880 	    end;
881 
882     elsif l_source_name = 'Function' THEN
883 
884 			begin
885       SELECT definition
886       INTO l_package
887       FROM ff_functions
888       WHERE name = l_function_name
889       and business_group_id = g_business_group_id;
890 
891       --EXECUTE IMMEDIATE 'CALL ' || l_package || '() INTO :l_periods_covered' USING OUT l_irregular_payment;
892 
893       hr_utility.trace('l_package'||l_package);
894 
895       l_sqlstr    :=
896                                'SELECT '
897                             || l_package
898                             || ' (:p_assignment_id,:p_eff_date) '
899                             || 'FROM DUAL';
900 
901        EXECUTE IMMEDIATE l_sqlstr into l_irregular_payment USING p_assignment_id,l_effective_date;
902 
903        hr_utility.trace('Function value l_irregular_payment '||l_irregular_payment);
904 
905       exception
906       WHEN OTHERS THEN
907 			  hr_utility.trace('Exception in get_irregular_payment Function.');
908 			  hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
909         return null;
910 			end;
911 
912     END IF;
913 
914   END IF;
915  END IF;--source 2 end
916 
917   hr_utility.trace(' l_irregular_payment : ' || l_irregular_payment);
918   hr_utility.trace('Leaving get_irregular_payment');
919 
920   return l_irregular_payment;
921 
922 EXCEPTION
923 WHEN OTHERS THEN
924   hr_utility.trace('Exception in get_irregular_payment end of function block.');
925   hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
926   fnd_file.put_line(fnd_file.LOG,'Exception:' || SQLCODE || ' - ' || SQLERRM);
927   return null;
928 END get_irregular_payment;
929 
930 
931 /*
932 Returns get_oneoff_payment value for the person from the source configured in Configuration
933 values page for this BG.
934 */
935 FUNCTION get_oneoff_payment(
936     p_assignment_id NUMBER)
937   RETURN VARCHAR2
938 IS
939   l_config_values PQP_UTILITIES.t_config_values;
940   g_bon_bal_type_id NUMBER;
941   l_source_name     VARCHAR2(100);
942   l_context_name    VARCHAR2(100);
943   l_column_name     VARCHAR2(100);
944   l_function_name   VARCHAR2(100);
945   l_sqlstr          VARCHAR2(1000);
946   l_oneoff_payment    VARCHAR2(20) := NULL;
947   l_package         VARCHAR2(100);
948   l_frequency       VARCHAR2(20);
949   l_effective_date date;
950 
951 cursor csr_oneoff_payment_eit is
952   select  AEI_INFORMATION4 from per_assignment_extra_info
953   where assignment_id = p_assignment_id and INFORMATION_TYPE = 'GB_PAY_RTI'
954         and AEI_INFORMATION_CATEGORY = 'GB_PAY_RTI';
955 
956 cursor csr_asg_start_date is
957 select max(effective_start_date) from per_all_assignments_f
958 where assignment_id = p_assignment_id
959 and assignment_type = 'E'
960 and effective_start_date <= g_effective_date;
961 
962 BEGIN
963 
964   hr_utility.trace('Entering get_oneoff_payment');
965   hr_utility.trace('g_effective_date in get_oneoff_payment : ' || g_effective_date);
966   open csr_asg_start_date;
967   fetch csr_asg_start_date into l_effective_date;
968   close csr_asg_start_date;
969   hr_utility.trace('l_effective_date in get_oneoff_payment : ' || l_effective_date);
970 
971 --  Source 1
972 
973 -- First check in the assignment form
974 -- Assignment EIT Context='RTI Information'
975 
976   open csr_oneoff_payment_eit;
977   fetch csr_oneoff_payment_eit into l_oneoff_payment;
978   close csr_oneoff_payment_eit;
979 
980 -- Source 2
981 -- Configuration values
982   if l_oneoff_payment is null then
983   hr_utility.trace('in config ');
984 
985   --  Use below API to get the config values for the given context in the business group
986    PQP_UTILITIES.get_config_type_values( p_configuration_type => 'PAY_GB_FPS_ONEOFF_PAYMENT' ,
987                                         p_business_group_id => g_business_group_id ,
988                                         p_legislation_code => g_legislation_code ,
989                                         p_tab_config_values => l_config_values );
990 
991   IF l_config_values.COUNT > 0 THEN
992     l_source_name         := l_config_values(l_config_values.FIRST).pcv_information1;
993     l_context_name        := l_config_values(l_config_values.FIRST).pcv_information4;
994     l_column_name         := l_config_values(l_config_values.FIRST).pcv_information5;
995     l_function_name       := l_config_values(l_config_values.FIRST).pcv_information6;
996 
997     hr_utility.trace('l_source_name: ' || l_source_name);
998     hr_utility.trace('l_context_name: ' || l_context_name);
999     hr_utility.trace('l_column_name: ' || l_column_name);
1000     hr_utility.trace('l_function_name: ' || l_function_name);
1001 
1002     /**
1003 
1004     - Assignment ==> Extra details
1005     - Assignment ==> DFF
1006     - Formula Function
1007     **/
1008     IF l_source_name = 'Assignment Developer DF' THEN
1009       l_sqlstr      := 'select ' || l_column_name ||
1010                        ' from per_assignment_extra_info where assignment_id = :assignment_id and AEI_INFORMATION_CATEGORY = :l_context_name';
1011       begin
1012 
1013         hr_utility.trace('string '||l_sqlstr);
1014 				EXECUTE immediate l_sqlstr INTO l_oneoff_payment USING p_assignment_id,l_context_name;
1015 
1016 		    exception
1017 		    WHEN OTHERS THEN
1018 					  hr_utility.trace('Exception in get_oneoff_payment Assignment Developer DFF.');
1019 					  hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
1020 		        return null;
1021 	    end;
1022 
1023     elsif l_source_name = 'PER_ASSIGNMENTS' THEN
1024 
1025 		  l_sqlstr         := 'select ' || l_column_name ||
1026                           ' from per_all_assignments_f where assignment_id = :assignment_id and ASS_ATTRIBUTE_CATEGORY = :l_context_name'||
1027 													' and '||l_effective_date||' between effective_start_date and effective_end_date' ;
1028 			begin
1029 	      EXECUTE immediate l_sqlstr INTO l_oneoff_payment USING p_assignment_id,l_context_name;
1030 
1031 				exception
1032 	      WHEN OTHERS THEN
1033 				  hr_utility.trace('Exception in get_oneoff_payment.PER_ASSIGNMENTS.');
1034 				  hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
1035 		      return null;
1036 	    end;
1037 
1038     elsif l_source_name = 'Function' THEN
1039 
1040 			begin
1041       SELECT definition
1042       INTO l_package
1043       FROM ff_functions
1044       WHERE name = l_function_name
1045       and business_group_id = g_business_group_id;
1046 
1047       hr_utility.trace('l_package'||l_package);
1048 
1049       l_sqlstr    :=
1050                                'SELECT '
1051                             || l_package
1052                             || ' (:p_assignment_id,:p_eff_date) '
1053                             || 'FROM DUAL';
1054        EXECUTE IMMEDIATE l_sqlstr into l_oneoff_payment USING p_assignment_id,l_effective_date;
1055 
1056        hr_utility.trace('Function value l_oneoff_payment '||l_oneoff_payment);
1057       --EXECUTE IMMEDIATE 'CALL ' || l_package || '() INTO :l_periods_covered' USING OUT l_oneoff_payment;
1058 
1059       exception
1060       WHEN OTHERS THEN
1061 			  hr_utility.trace('Exception in get_oneoff_payment.Function.');
1062 			  hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
1063         return null;
1064 			end;
1065 
1066     END IF;
1067 
1068   END IF;
1069  END IF;--source 2 end
1070 
1071   hr_utility.trace(' l_oneoff_payment : ' || l_oneoff_payment);
1072   hr_utility.trace('Leaving get_oneoff_payment');
1073 
1074   return l_oneoff_payment;
1075 
1076 EXCEPTION
1077 WHEN OTHERS THEN
1078   hr_utility.trace('Exception in get_oneoff_payment end of function block.');
1079   hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
1080   fnd_file.put_line(fnd_file.LOG,'Exception:' || SQLCODE || ' - ' || SQLERRM);
1081   return null;
1082 END get_oneoff_payment;
1083 /*
1084 Returns the passport number for the person from the source configured in Configuration
1085 values page for this BG.
1086 */
1087 FUNCTION get_passport_number(
1088     p_person_id VARCHAR2)
1089   RETURN VARCHAR2
1090 IS
1091   l_config_values PQP_UTILITIES.t_config_values;
1092   g_bon_bal_type_id NUMBER;
1093   l_source_name     VARCHAR2(100);
1094   l_context_name    VARCHAR2(100);
1095   l_column_name     VARCHAR2(100);
1096   l_function_name   VARCHAR2(100);
1097   l_passport_number VARCHAR2(100) := NULL;
1098   sqlstr            VARCHAR2(1000);
1099   l_proc            CONSTANT VARCHAR2(50):= g_package||'get_passport_number';
1100   l_package         VARCHAR2(100);
1101   l_effective_date date;
1102   cursor csr_doc_of_rec
1103   is
1104    select hdei.document_number from hr_document_types hdt,hr_document_extra_info hdei
1105    where hdt.category_code = 'PPT_INFO'
1106    and hdt.document_type_id = hdei.document_type_id
1107    and hdei.person_id = p_person_id;
1108 
1109 CURSOR csr_per_all_people
1110   IS
1111     SELECT l_column_name
1112     FROM per_all_people_f
1113     WHERE person_id        = p_person_id
1114     AND ATTRIBUTE_CATEGORY = l_context_name
1115     ORDER BY effective_start_date,
1116       effective_end_date;
1117 
1118   CURSOR csr_per_extra_people_info
1119   IS
1120     SELECT l_column_name
1121     FROM per_people_extra_info
1122     WHERE person_id              = p_person_id
1123     AND PEI_INFORMATION_CATEGORY = l_context_name;
1124 
1125 cursor csr_per_start_date is
1126 select max(effective_start_date) from per_all_people_f
1127 where person_id = p_person_id
1128 and effective_start_date <= g_effective_date;
1129 
1130 BEGIN
1131   hr_utility.set_location('Entering: '||l_proc,1);
1132   hr_utility.trace('g_effective_date in get_passport_number : ' || g_effective_date);
1133 
1134   open csr_per_start_date;
1135   fetch csr_per_start_date into l_effective_date;
1136   close csr_per_start_date;
1137 
1138   hr_utility.trace('l_effective_date in get_oneoff_payment : ' || l_effective_date);
1139 	  --  Use below API to get the config values for the given context in the business group
1140   	PQP_UTILITIES.get_config_type_values( p_configuration_type => 'PAY_GB_FPS_PASSPORT_NO' ,
1141                                         p_business_group_id => g_business_group_id ,
1142                                         p_legislation_code => g_legislation_code ,
1143                                         p_tab_config_values => l_config_values );
1144 
1145 	  IF l_config_values.COUNT > 0 THEN
1146       l_source_name         := l_config_values(l_config_values.FIRST).pcv_information1;
1147       l_context_name        := l_config_values(l_config_values.FIRST).pcv_information4;
1148       l_column_name         := l_config_values(l_config_values.FIRST).pcv_information5;
1149       l_function_name       := l_config_values(l_config_values.FIRST).pcv_information6;
1150 	    hr_utility.set_location('l_source_name' || l_source_name,1);
1151 	    hr_utility.set_location('l_context_name' || l_context_name,1);
1152 	    hr_utility.set_location('l_column_name' || l_column_name,1);
1153 	    hr_utility.set_location('l_function_name' || l_function_name,1);
1154 
1155   	  /**  The source can be either from Others--> Extra information of the person
1156 	    or from the descriptive flex field on the person form.
1157 	    **/
1158   	  IF l_source_name = 'Extra Person Info DDF' THEN
1159 	    hr_utility.set_location('into Extra Person Info DDF',1);
1160     	  sqlstr        := 'select ' || l_column_name ||
1161 	                       ' from per_people_extra_info where person_id = :p_person_id and PEI_INFORMATION_CATEGORY = :l_context_name';
1162 	    hr_utility.set_location(sqlstr,1);
1163         begin
1164   	    EXECUTE immediate sqlstr INTO l_passport_number USING p_person_id,l_context_name;
1165         Exception
1166         when others then
1167 	    hr_utility.set_location('Exception in extra info : ' || sqlerrm,1);
1168         end;
1169 
1170 	    elsif l_source_name = 'PER_PEOPLE' THEN
1171    	    hr_utility.set_location('into PER_PEOPLE',1);
1172   	    sqlstr           := 'select ' || l_column_name ||
1173     	                      ' from per_all_people_f where person_id = :p_person_id and ATTRIBUTE_CATEGORY = :l_context_name' ||
1174                             ' and :l_effective_date between effective_start_date and effective_end_date' ;
1175 	    hr_utility.trace(sqlstr);
1176          begin
1177   	     EXECUTE immediate sqlstr INTO l_passport_number USING p_person_id,l_context_name,l_effective_date;
1178         exception
1179         when others then
1180         	    hr_utility.trace('Exception in per_people: ' || sqlerrm);
1181         end;
1182 
1183       elsif l_source_name = 'Function' THEN
1184 
1185 			 begin
1186        SELECT definition
1187        INTO l_package
1188        FROM ff_functions
1189        WHERE name = l_function_name
1190        and business_group_id = g_business_group_id;
1191 
1192        hr_utility.trace('l_package'||l_package);
1193 
1194         sqlstr    :=
1195                                'SELECT '
1196                             || l_package
1197                             || ' (:p_person_id,:p_eff_date) '
1198                             || 'FROM DUAL';
1199   	    hr_utility.set_location(sqlstr,1);
1200         EXECUTE IMMEDIATE sqlstr into  l_passport_number USING p_person_id,l_effective_date;
1201          hr_utility.trace('Function value l_passport_number '||l_passport_number);
1202          exception
1203         WHEN OTHERS THEN
1204 	 		  hr_utility.trace('Exception in get_passport_number.Function.');
1205 			  hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
1206         return null;
1207 	  		end;
1208 
1209     	END IF;
1210 		ELSE
1211 				-- GEt the passport number from Documents of record, if it null then get from config values.
1212 				  open csr_doc_of_rec;
1213 				  fetch csr_doc_of_rec into l_passport_number;
1214 				  close csr_doc_of_rec;
1215 
1216   END IF;
1217   hr_utility.set_location('l_passport_number: '||l_passport_number,1);
1218   hr_utility.set_location('Leaving: '||l_proc,1);
1219 
1220   RETURN l_passport_number;
1221 
1222 EXCEPTION
1223 WHEN OTHERS THEN
1224   RETURN l_passport_number;
1225   return null;
1226 END get_passport_number;
1227 
1228 -- Function to fetch person details (CONTEXT - GB RTI EMPLOYEE DETAILS)
1229 FUNCTION fetch_person_rec(
1230     p_assactid   IN NUMBER,
1231     p_start_date IN DATE,
1232     p_end_date   IN DATE,
1233     p_person_rec OUT nocopy act_info_rec)
1234   RETURN BOOLEAN
1235 IS
1236   l_proc                CONSTANT VARCHAR2(50):= g_package||'fetch_person_rec';
1237   l_arch                BOOLEAN;
1238   l_partner_name        VARCHAR2(50);
1239   l_partner_ni          VARCHAR2(30);
1240   l_partner_surname     VARCHAR2(50);
1241   l_partner_first_name  VARCHAR2(50);
1242   l_partner_second_name VARCHAR2(50);
1243 
1244   CURSOR csr_person_details
1245   IS
1246     SELECT rownum Number_of_employee,
1247       pap.person_id p_person_id,
1248       paa.assignment_id,
1249       SUBSTR(trim(pap.last_name), 1,35) last_name,
1250       SUBSTR(trim(pap.first_name), 1,least(DECODE(instr(trim(pap.first_name),' '),0,35,instr(trim(pap.first_name),' ')),35)) first_name,
1251       SUBSTR(trim(pap.middle_names), 1,least(decode(instr(trim(pap.middle_names),' '),0,35,instr(trim(pap.middle_names),' ')),35)) middle_name,
1252       pap.title title,
1253       SUBSTR(pap.national_identifier,1,9) national_identifier,
1254       pap.date_of_birth date_of_birth,
1255       SUBSTR(pap.sex,1,1) sex ,
1256       DECODE(pap.per_information10,'Y','Y',NULL) agg_paye_flag,
1257       DECODE(pap.per_information9,'Y','Y',NULL) multiple_asg_flag
1258     FROM pay_assignment_actions act,
1259       per_all_assignments_f paa,
1260       per_all_people_f pap
1261     WHERE act.assignment_action_id = p_assactid
1262     AND act.assignment_id          = paa.assignment_id
1263     AND paa.person_id              = pap.person_id
1264 	AND p_end_date between pap.effective_start_date and pap.effective_end_date
1265     AND paa.effective_start_date =
1266        (
1267          SELECT MAX(paa2.effective_start_date)
1268          FROM   per_all_assignments_f paa2
1269          WHERE  paa2.assignment_id         = paa.assignment_id
1270          AND    paa2.assignment_type       = 'E'
1271          AND    paa2.effective_start_date <= p_end_date
1272        );
1273 
1274 
1275   CURSOR csr_partner_details(c_person_id NUMBER)
1276   IS
1277     SELECT NVL(partner_name,''),
1278       partner_ni_number
1279     FROM ssp_medicals
1280     WHERE maternity_id IN
1281       (SELECT MAX(maternity_id)
1282       FROM per_absence_attendances
1283       WHERE person_id                 = c_person_id
1284       AND ABSENCE_ATTENDANCE_TYPE_ID IN
1285         (SELECT ABSENCE_ATTENDANCE_TYPE_ID
1286         FROM per_absence_attendance_types
1287         WHERE ABSENCE_CATEGORY IN ('GB_ADDL_PAT_ADOPT', 'GB_ADDL_PAT_BIRTH')
1288         )
1289       )
1290     AND EVIDENCE_STATUS = 'CURRENT';
1291     l_person_rec csr_person_details%rowtype;
1292 
1293   BEGIN
1294     hr_utility.set_location('Entering: '||l_proc,1);
1295     l_arch := true;
1296     hr_utility.trace('p_assactid: '||p_assactid);
1297     hr_utility.trace('p_start_date: '||TO_CHAR(p_start_date));
1298     hr_utility.trace('p_end_date: '||TO_CHAR(p_end_date));
1299 
1300     OPEN csr_person_details;
1301     FETCH csr_person_details INTO l_person_rec;
1302     CLOSE csr_person_details;
1303 
1304     p_person_rec.person_id            := l_person_rec.p_person_id;
1305     p_person_rec.assignment_id        := l_person_rec.assignment_id;
1306     p_person_rec.action_info_category := 'GB RTI EMPLOYEE DETAILS';
1307     p_person_rec.act_info3            := l_person_rec.last_name;
1308     p_person_rec.act_info4            := l_person_rec.first_name;
1309     p_person_rec.act_info5            := l_person_rec.middle_name;
1310     p_person_rec.act_info6            := l_person_rec.title;
1311     p_person_rec.act_info7            := l_person_rec.national_identifier;
1312     p_person_rec.act_info8            := TO_CHAR(l_person_rec.date_of_birth,'YYYY-MM-DD');
1313     p_person_rec.act_info9            := l_person_rec.sex;
1314     p_person_rec.act_info10           := l_person_rec.agg_paye_flag;
1315     p_person_rec.act_info11           := l_person_rec.multiple_asg_flag;
1316     p_person_rec.act_info16           := get_passport_number(l_person_rec.p_person_id);
1317 
1318     OPEN csr_partner_details(l_person_rec.p_person_id);
1319     FETCH csr_partner_details INTO l_partner_name, l_partner_ni;
1320     CLOSE csr_partner_details;
1321 
1322     if instr(l_partner_name,' ') <> 0 then
1323     l_partner_surname       := trim(SUBSTR(l_partner_name,1,instr(l_partner_name,' ')));
1324     else
1325       l_partner_surname       := l_partner_name;
1326     end if;
1327     l_partner_first_name    := trim(SUBSTR(l_partner_name,LENGTH(l_partner_surname) +1,instr(l_partner_name,' ',LENGTH(l_partner_surname))));
1328     l_partner_second_name   := trim(SUBSTR(l_partner_name,LENGTH(l_partner_surname||l_partner_first_name)+2,(instr(l_partner_name,' ',
1329                                LENGTH(l_partner_surname||l_partner_first_name)+3)) - (LENGTH(l_partner_surname||l_partner_first_name)+2) ));
1330     p_person_rec.act_info12 := l_partner_surname;
1331     p_person_rec.act_info13 := l_partner_first_name;
1332     p_person_rec.act_info14 := l_partner_second_name;
1333     p_person_rec.act_info15 := l_partner_ni;
1334     hr_utility.set_location('Leaving: '||l_proc,999);
1335     RETURN l_arch;
1336   END fetch_person_rec;
1337   --
1338 
1339   -- Function to fetch Assignment details (CONTEXT - GB_RTI_FPS_ASG_DET1)
1340 FUNCTION fetch_fps_asg_det1(
1341     p_start_date         IN DATE,
1342     p_end_date           IN DATE,
1343     p_assactid           IN NUMBER,
1344     p_last_asg_action_id IN NUMBER,
1345 	  p_fps                IN varchar2,
1346     p_person_rec         IN act_info_rec,
1347     p_fps_rec1 OUT nocopy act_info_rec,
1348     p_starter_set  out nocopy varchar2)
1349   RETURN BOOLEAN
1350 IS
1351   l_proc CONSTANT VARCHAR2(50):= g_package||'fetch_fps_asg_det1';
1352   l_arch BOOLEAN;
1353 
1354   --Below cursor fetches the asg extra details of the current assignment
1355   CURSOR csr_fetch_other_fields
1356   IS
1357     SELECT AEI_INFORMATION1 periods_worked,
1358       AEI_INFORMATION3 irr_payment ,
1359       AEI_INFORMATION4 "One-Off Payment",
1360       ASSIGNMENT_EXTRA_INFO_ID,
1361       object_version_number
1362     FROM PER_ASSIGNMENT_EXTRA_INFO
1363     WHERE INFORMATION_TYPE       = 'GB_PAY_RTI'
1364     AND AEI_INFORMATION_CATEGORY = 'GB_PAY_RTI'
1365     AND assignment_id            = p_person_rec.assignment_id;
1366 
1367   --Below cursor fetches the starter details of the current assignment
1368   CURSOR csr_get_starter_details(p_asg_id NUMBER)
1369   IS
1370     SELECT assignment_extra_info_id,
1371       aei_information1 starter_decl,
1372       aei_information2 prev_emp_paye_ref,
1373       aei_information3 prev_tax_code,
1374       aei_information4 date_left_prev_employer,
1375       aei_information5 prev_tax_basis,
1376       aei_information6 last_payment_period_type,
1377       aei_information7 last_payment_period,
1378       aei_information8 starter_flag,
1379       aei_information10 continue_with_student_loan,
1380       aei_information8 not_paid_between,
1381       object_version_number object_version_number
1382     FROM per_assignment_extra_info
1383     WHERE assignment_id  = p_asg_id
1384     AND information_type = 'GB_RTI_ASG_DETAILS';
1385 
1386   --Below cursor fetches the pension details of the current assignment
1387   CURSOR csr_get_pensioner_details(p_asg_id NUMBER)
1388   IS
1389     SELECT assignment_extra_info_id,
1390       aei_information9 pensioner_flag,
1391       aei_information12 date_pension_started,
1392       trim(aei_information13) annual_pension,
1393       aei_information14 recently_bereaved,
1394       object_version_number object_version_number
1395     FROM per_assignment_extra_info
1396     WHERE assignment_id  = p_asg_id
1397     AND information_type = 'GB_RTI_ASG_DETAILS';
1398 
1399   --Below cursor fetches the expat details of the current assignment
1400   CURSOR csr_get_expat_details(p_asg_id NUMBER)
1401   IS
1402     SELECT assignment_extra_info_id,
1403       aei_information15 expat_statement,
1404       aei_information16 date_emp_start_uk,
1405       aei_information17 eea_cw_citizen,
1406       aei_information18 epm6_scheme,
1407       aei_information19 expat_flag,
1408       object_version_number object_version_number
1409     FROM per_assignment_extra_info
1410     WHERE assignment_id  = p_asg_id
1411     AND information_type = 'GB_RTI_ASG_DETAILS';
1412 
1413   --Below cursor fetches the assignment numbers of the current assignment
1414   CURSOR csr_get_asg_numbers
1415   IS
1416     SELECT paaf.assignment_number assignment_number,
1417       paaf_old.assignment_number old_assignment_number
1418     FROM per_all_assignments_f paaf,
1419       per_all_assignments_f paaf_old
1420     WHERE paaf.assignment_id          = p_person_rec.assignment_id
1421     AND ((paaf_old.assignment_id      = paaf.assignment_id
1422     AND paaf_old.effective_start_date < paaf.effective_start_date
1423     AND paaf.effective_start_date     > g_start_year
1424     AND paaf_old.effective_end_date   > g_start_year)
1425     OR (paaf.assignment_number        = paaf_old.assignment_number));
1426 
1427   --Below cursor fetches further payment details of the current assignment
1428   CURSOR csr_get_more_payment_details
1429   IS
1430     SELECT ptp.regular_payment_date,
1431       ptp.period_num,
1432       ptp.period_type
1433     FROM pay_payroll_actions ppa,
1434       pay_assignment_actions paa,
1435       per_time_periods ptp
1436     WHERE assignment_action_id = p_last_asg_action_id
1437     AND ppa.time_period_id     = ptp.time_period_id
1438     AND ppa.payroll_id         = ptp.payroll_id
1439     AND paa.payroll_action_id  = ppa.payroll_action_id;
1440 
1441   --Below cursor fetches further period type details of the current assignment
1442   CURSOR csr_period_type_info(p_period_type VARCHAR2)
1443   IS
1444     SELECT ptpt.number_per_fiscal_year
1445     FROM per_time_period_types ptpt
1446     WHERE p_period_type = ptpt.period_type;
1447 
1448   --Below cursor fetches basic ni details of the current assignment
1449   CURSOR csr_ni_info(c_asg_id NUMBER, c_asg_eff_start_date DATE)
1450   IS
1451     SELECT peevf.screen_entry_value screen_value
1452     FROM
1453       pay_element_entries_f peef,
1454       pay_element_entry_values_f peevf
1455     WHERE peef.assignment_id        = c_asg_id
1456     AND peef.element_entry_id       = peevf.element_entry_id
1457     AND peevf.input_value_id        = g_ni_pt_ivid
1458     AND peef.element_type_id        = g_ni_pt_eid
1459     AND c_asg_eff_start_date between peef.effective_start_date and peef.effective_end_date
1460     AND c_asg_eff_start_date between peevf.effective_start_date and peevf.effective_end_date;
1461 /*
1462     AND peef.effective_start_date  <= g_effective_date
1463     AND peef.effective_end_date    >= c_asg_eff_start_date
1464     AND peevf.effective_start_date <= g_effective_date
1465     AND peevf.effective_end_date   >= c_asg_eff_start_date;
1466 */
1467 
1468   --Below cursor fetches further ni details of the current assignment
1469   CURSOR csr_cat_NI_Details
1470   IS
1471     SELECT MAX(DECODE(name,'Periods',result_value,NULL))
1472     FROM pay_assignment_actions paa ,
1473       pay_run_results prr,
1474       pay_run_result_values prrv,
1475       pay_element_types_f petf ,
1476       pay_input_values_f pivf
1477     WHERE paa.source_action_id   = p_last_asg_action_id
1478     AND paa.assignment_action_id = prr.assignment_action_id
1479     AND prr.element_type_id      = petf.element_type_id
1480     AND petf.element_name        = 'NI DETAILS'
1481     AND prr.run_result_id        = prrv.run_result_id
1482     AND prrv.input_value_id      = pivf.input_value_id
1483     AND p_start_date between petf.effective_start_date and petf.effective_end_date
1484     AND p_start_date between pivf.effective_start_date and pivf.effective_end_date;
1485 
1486   --Below cursor fetches further ni details of the current assignment
1487   CURSOR csr_cat_NI
1488   IS
1489     SELECT MAX(DECODE(name,'Periods',result_value,NULL))
1490     FROM pay_assignment_actions paa ,
1491       pay_run_results prr,
1492       pay_run_result_values prrv,
1493       pay_element_types_f petf ,
1494       pay_input_values_f pivf
1495     WHERE paa.source_action_id   = p_last_asg_action_id
1496     AND paa.assignment_action_id = prr.assignment_action_id
1497     AND prr.element_type_id      = petf.element_type_id
1498     AND petf.element_name        = 'NI'
1499     AND prr.run_result_id        = prrv.run_result_id
1500     AND prrv.input_value_id      = pivf.input_value_id
1501     AND p_start_date between petf.effective_start_date and petf.effective_end_date
1502     AND p_start_date between pivf.effective_start_date and pivf.effective_end_date;
1503 
1504   --Below cursor fetches asg details of the current assignment
1505   CURSOR csr_asg(c_asg_act_id NUMBER, c_effective_date DATE)
1506   IS
1507     SELECT trim(NVL(pap.per_information9,'N')) per_ni_agg_flag,
1508       trim(NVL(pap.per_information10,'N')) per_agg_flag,
1509                asg.assignment_number assignment_number
1510     FROM per_all_people_f pap,
1511       per_all_assignments_f asg,
1512       pay_assignment_actions paa
1513     WHERE paa.assignment_action_id = c_asg_act_id
1514     AND paa.assignment_id          = asg.assignment_id
1515     AND pap.person_id              = asg.person_id
1516     AND c_effective_date BETWEEN asg.effective_start_date AND asg.effective_end_date
1517     AND c_effective_date BETWEEN pap.effective_start_date AND pap.effective_end_date
1518     AND pap.per_information_category = 'GB';
1519     /*AND asg.EFFECTIVE_START_DATE     =
1520       (SELECT MAX(EFFECTIVE_START_DATE)
1521       FROM per_all_assignments_f paaf
1522       WHERE paaf.assignment_id = asg.assignment_id
1523       );*/
1524 
1525   --Below cursor fetches the period start and end dates of payrolls processed in the current prepayment
1526   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)
1527   IS
1528     SELECT
1529       /*+ USE_NL(paa, pact, ptp) */
1530       MIN(ptp.start_date) payroll_period_start_date,
1531       MAX(ptp.end_date) payroll_period_end_date
1532     FROM pay_assignment_actions paa,
1533       pay_payroll_actions pact,
1534       per_time_periods ptp,
1535       pay_assignment_actions paa1,    --Prepayments
1536       pay_payroll_actions ppa1,       --Prepayments
1537       pay_action_interlocks pai       --Prepayments
1538     WHERE paa.assignment_id   = p_asgid
1539     AND paa.payroll_action_id = pact.payroll_action_id
1540     AND pact.time_period_id   = ptp.time_period_id
1541     AND pact.action_type     IN ('Q','R','B','I','V')
1542     AND paa.action_status    IN ('C','S')
1543     AND ptp.regular_payment_date BETWEEN p_start_year AND p_end_year
1544     AND ppa1.payroll_action_id    = p_pre_pay_id
1545     AND ppa1.action_type         IN ('P','U')
1546     AND paa1.payroll_action_id    = ppa1.payroll_action_id
1547     AND paa1.assignment_action_id = pai.locking_action_id
1548     AND paa.assignment_action_id  = pai.locked_action_id;
1549 
1550 -- Cursor to fetch Termination date
1551 cursor csr_terminated_date is
1552      select serv.actual_termination_date actual_termination_date
1553      from
1554             per_all_assignments_f asg,
1555             per_periods_of_service serv
1556      where  asg.assignment_id = p_person_rec.assignment_id
1557      and    asg.period_of_service_id = serv.period_of_service_id
1558      and    p_end_date between asg.effective_start_date and asg.effective_end_date
1559      and    actual_termination_date <= g_effective_date
1560 	 and    actual_termination_date <= sysdate + 30 ;
1561 
1562   --Below cursor fetches the termination date of the current assignment
1563   CURSOR csr_get_term_asg_info (p_asg_id NUMBER)
1564   IS
1565     SELECT min(paaf.effective_start_date) min_active_start_date
1566     FROM per_all_assignments_f paaf,
1567          per_assignment_status_types past,
1568          pay_all_payrolls_f pay,
1569          hr_soft_coding_keyflex sck
1570     WHERE paaf.assignment_id           = p_asg_id
1571     AND paaf.assignment_status_type_id = past.assignment_status_type_id
1572     AND past.per_system_status        IN ('ACTIVE_ASSIGN', 'SUSP_ASSIGN')
1573     AND paaf.payroll_id = pay.payroll_id
1574     AND pay.soft_coding_keyflex_id = sck.soft_coding_keyflex_id
1575     AND upper(g_tax_ref) = upper(sck.segment1);   --Modified for the bug 16503199
1576 
1577   --Below cursor fetches the Last Pre-Payment id
1578   CURSOR csr_last_pre_pay_id (c_asg_id NUMBER)
1579   IS
1580   select ppa_prev.payroll_action_id
1581   from pay_payroll_actions ppa_prev,
1582      pay_payroll_actions ppa_current
1583   where ppa_prev.action_type IN ('P','U')
1584   and ppa_prev.payroll_id = ppa_current.payroll_id
1585   and ppa_prev.payroll_action_id < ppa_current.payroll_action_id
1586   and ppa_current.payroll_action_id = g_pre_pact_id
1587   and ppa_prev.payroll_action_id =
1588       (select max(ppa_max.payroll_action_id)
1589        from pay_payroll_actions ppa_max,
1590             pay_assignment_actions paa_max
1591        where ppa_max.payroll_id = ppa_current.payroll_id
1592        and ppa_max.payroll_action_id < ppa_current.payroll_action_id
1593        and ppa_max.action_type IN ('P','U')
1594        and ppa_max.payroll_action_id = paa_max.payroll_action_id
1595        and paa_max.assignment_id = c_asg_id );
1596 
1597   --Below cursor fetches the Previous run FPS assignment_action_id
1598   CURSOR csr_last_fps_asg_act_id (c_last_pre_pay_id NUMBER, c_asg_id NUMBER)
1599   IS
1600   select paa_fps.assignment_action_id
1601   from pay_assignment_actions paa_prepay,
1602        pay_payroll_actions ppa_prepay,
1603        pay_assignment_actions paa_fps,
1604        pay_payroll_actions ppa_fps,
1605        pay_action_interlocks pai
1606   where ppa_prepay.payroll_action_id = c_last_pre_pay_id
1607   and ppa_prepay.payroll_action_id = paa_prepay.payroll_action_id
1608   and paa_prepay.assignment_action_id = pai.locked_action_id
1609   and paa_fps.assignment_action_id = pai.locking_action_id
1610   and paa_fps.payroll_action_id = ppa_fps.payroll_action_id
1611   and ppa_fps.action_type = 'X'
1612   and paa_fps.assignment_id = c_asg_id;
1613 
1614   --Below cursor fetches the New Asg Number reported in Last FPS
1615   CURSOR csr_last_asg_num_submitted(c_last_fps_asg_act_id NUMBER, c_asg_id NUMBER)
1616   IS
1617   select ACTION_INFORMATION13
1618   from pay_action_information
1619   where action_context_id = c_last_fps_asg_act_id
1620   and action_information_category = 'GB_RTI_FPS_ASG_DET1'
1621   and assignment_id = c_asg_id;
1622 
1623 
1624   cursor csr_advance_pay_dates
1625   is
1626   select  fnd_date.canonical_to_date(max(decode(pivf.name,'Start Date',peevf.screen_entry_value,null))) start_date,
1627   fnd_date.canonical_to_date(max(decode(pivf.name,'End Date',peevf.screen_entry_value,null))) end_date
1628   from pay_element_entries_f peef,
1629 	  pay_element_entry_values_f peevf ,
1630 		pay_input_values_f pivf
1631   where
1632   peef.assignment_id = p_person_rec.assignment_id
1633   and peef.ELEMENT_TYPE_ID = g_adv_period_id
1634   and peef.element_entry_id = peevf.element_entry_id
1635   and peevf.input_value_id = pivf.input_value_id
1636   and pivf.element_type_id = peef.ELEMENT_TYPE_ID
1637   and g_effective_date between peevf.effective_start_date and peevf.effective_end_date
1638   and g_effective_date between pivf.effective_start_date and pivf.effective_end_date
1639   and g_effective_date between peef.effective_start_date and peef.effective_end_date;
1640 
1641 -- Cursor to fetch Director details for the person
1642 	cursor csr_director is
1643 	select PER_INFORMATION2 from per_all_people_f papf
1644 	where person_id = p_person_rec.person_id
1645 	and effective_start_date =
1646 	(select max(effective_start_date)
1647 	from per_all_people_f where person_id = papf.person_id and effective_start_date <= g_effective_date);
1648 
1649 
1650   l_starter_rec csr_get_starter_details%rowtype;
1651   l_pensioner_rec csr_get_pensioner_details%rowtype;
1652   l_expat_rec csr_get_expat_details%rowtype;
1653   l_stay_over_6_months           VARCHAR2(1);
1654   l_stay_less_6_months           VARCHAR2(1);
1655   l_working_in_out_UK            VARCHAR2(1);
1656   l_asg_number                   VARCHAR2(30);
1657   l_asg_number_old               VARCHAR2(30);
1658   l_irr_payment_ind              VARCHAR2(10);
1659   l_periods_covered              VARCHAR2(10);
1660   l_one_off_pay                  VARCHAR2(10);
1661   l_payroll_id_changed_indicator VARCHAR2(1) := 'N';
1662   l_payment_date               DATE;
1663   l_period_num                 NUMBER;
1664   l_period_type                VARCHAR2(30);
1665   l_number_per_fiscal_yr       NUMBER;
1666   l_payment_month_number       NUMBER;
1667   l_payment_week_number        NUMBER;
1668   l_ni_process_type            VARCHAR2(10);
1669   l_dir_nic_calc_method        VARCHAR2(30);
1670   l_dir_tax_week_num           NUMBER;
1671   l_per_ni_agg_flag            VARCHAR2(1);
1672   l_per_agg_flag               VARCHAR2(1);
1673   l_aggr_earnings              VARCHAR2(1);
1674   l_starter_decl               VARCHAR2(30);
1675   l_continue_with_student_loan VARCHAR2(30);
1676   l_ovn                        NUMBER;
1677   l_starter_flag               VARCHAR2(1);
1678   l_pensioner_flag             VARCHAR2(1);
1679   l_expat_flag                 VARCHAR2(1);
1680   l_recently_bereaved          VARCHAR2(30);
1681   l_annual_pension             VARCHAR2(30);
1682   l_eea_cw_citizen             VARCHAR2(30);
1683   l_epm6_scheme                VARCHAR2(30);
1684   l_asg_eff_start_date         DATE;
1685   l_frequency                  VARCHAR2(30);
1686   l_payroll_period_start_date  DATE;
1687   l_payroll_period_end_date    DATE;
1688   l_person_actual_term_date  DATE;
1689   l_asg_effective_end_date     DATE;
1690   l_payment_after_leaving      VARCHAR2(1);
1691   l_date_of_leaving            DATE;
1692   l_ovn_extra_info             NUMBER;
1693   l_asg_info_id                NUMBER;
1694   l_start_date DATE;
1695   l_end_date DATE;
1696   l_last_pre_pay_id            NUMBER;
1697   l_last_fps_asg_act_id        NUMBER;
1698   l_last_asg_num_submitted     VARCHAR2(30);
1699   l_person_id   number;
1700   l_min_active_start_date      DATE;
1701   l_director                   VARCHAR2(1);
1702 
1703 BEGIN
1704   hr_utility.set_location('Entering: '||l_proc,1);
1705   l_arch := true;
1706   p_starter_set := 'N';
1707   hr_utility.trace('Start Year: '||TO_CHAR(g_start_year));
1708   hr_utility.trace('End Year: '||TO_CHAR(g_end_year));
1709   hr_utility.trace('Calling csr_get_starter_details');
1710   hr_utility.trace('p_person_rec.assignment_id: '||p_person_rec.assignment_id);
1711 
1712   OPEN csr_get_starter_details(p_person_rec.assignment_id);
1713   FETCH csr_get_starter_details INTO l_starter_rec;
1714   CLOSE csr_get_starter_details;
1715 
1716   l_starter_decl               := NULL;
1717   l_continue_with_student_loan := NULL;
1718   l_starter_flag               := l_starter_rec.starter_flag;
1719   g_reset_flag_type            := NULL;
1720   hr_utility.trace('Calling csr_get_starter_details1');
1721   hr_utility.trace('l_starter_flag: '||l_starter_flag);
1722   hr_utility.trace('l_starter_rec.starter_decl: '||l_starter_rec.starter_decl);
1723   hr_utility.trace(' l_starter_rec.continue_with_student_loan: '|| l_starter_rec.continue_with_student_loan);
1724 
1725   IF (l_starter_flag = 'N'
1726       AND (l_starter_rec.starter_decl IS NOT NULL
1727 	   OR NVL(l_starter_rec.continue_with_student_loan ,'N') = 'Y' )) THEN
1728     hr_utility.trace('Calling csr_get_starter_details2');
1729     l_starter_decl               := l_starter_rec.starter_decl;
1730     l_continue_with_student_loan := l_starter_rec.continue_with_student_loan;
1731     l_ovn                        := l_starter_rec.object_version_number;
1732     hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false,
1733                                                                p_object_version_number => l_ovn,
1734                                                                p_assignment_extra_info_id => l_starter_rec.assignment_extra_info_id,
1735                                                                p_aei_information_category => 'GB_RTI_ASG_DETAILS',
1736                                                                p_aei_information8 => 'Y');
1737     p_starter_set := 'Y';
1738     g_reset_flag_type := 'STARTER';
1739     hr_utility.trace('Calling csr_get_starter_details3');
1740   END IF;
1741   ---
1742   hr_utility.trace('Calling csr_get_pensioner_details');
1743 
1744   OPEN csr_get_pensioner_details(p_person_rec.assignment_id);
1745   FETCH csr_get_pensioner_details INTO l_pensioner_rec;
1746   CLOSE csr_get_pensioner_details;
1747 
1748   l_recently_bereaved   := NULL;
1749   l_pensioner_flag      := l_pensioner_rec.pensioner_flag;
1750   l_annual_pension      := NULL;
1751   g_reset_flag_type     := NULL;
1752 
1753   hr_utility.trace('l_pensioner_flag: '||l_pensioner_flag);
1754   hr_utility.trace('l_pensioner_rec.pensioner_flag: '||l_pensioner_rec.pensioner_flag);
1755   hr_utility.trace('l_pensioner_rec.recently_bereaved: '||l_pensioner_rec.recently_bereaved);
1756   hr_utility.trace('l_pensioner_rec.annual_pension: '||l_pensioner_rec.annual_pension);
1757 
1758   IF (l_pensioner_flag   = 'N'
1759       AND (NVL(l_pensioner_rec.recently_bereaved,'N') = 'Y'
1760        OR l_pensioner_rec.annual_pension IS NOT NULL)) THEN
1761     l_starter_decl      := 'B';
1762     l_recently_bereaved := l_pensioner_rec.recently_bereaved;
1763     if l_pensioner_rec.annual_pension is not null then
1764        l_annual_pension    := (l_pensioner_rec.annual_pension)*100;
1765    end if;
1766     l_ovn               := l_pensioner_rec.object_version_number;
1767     hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false,
1768                                                                p_object_version_number => l_ovn,
1769                                                                p_assignment_extra_info_id => l_pensioner_rec.assignment_extra_info_id,
1770                                                                p_aei_information_category => 'GB_RTI_ASG_DETAILS',
1771                                                                p_aei_information9 => 'Y');
1772     g_reset_flag_type := 'PENSIONER';
1773   END IF;
1774   ---
1775   hr_utility.trace('Calling csr_get_expat_details');
1776 
1777   OPEN csr_get_expat_details(p_person_rec.assignment_id);
1778   FETCH csr_get_expat_details INTO l_expat_rec;
1779   CLOSE csr_get_expat_details;
1780 
1781   l_eea_cw_citizen     := NULL;
1782   l_epm6_scheme        := NULL;
1783   l_stay_over_6_months := NULL;
1784   l_stay_less_6_months := NULL;
1785   l_working_in_out_UK  := NULL;
1786   l_expat_flag      := l_expat_rec.expat_flag;
1787 
1788   hr_utility.trace('Calling csr_get_expat_details1');
1789   hr_utility.trace('l_expat_flag: '||l_expat_flag);
1790   hr_utility.trace('l_expat_rec.eea_cw_citizen: '||l_expat_rec.eea_cw_citizen);
1791   hr_utility.trace(' l_expat_rec.epm6_scheme: '|| l_expat_rec.epm6_scheme);
1792   hr_utility.trace(' l_expat_rec.expat_statement: '|| l_expat_rec.expat_statement);
1793 
1794   g_reset_flag_type := NULL;
1795 
1796   IF (l_expat_flag   = 'N'
1797       AND (NVL(l_expat_rec.eea_cw_citizen,'N') = 'Y'
1798            OR NVL(l_expat_rec.epm6_scheme,'N') = 'Y'
1799            OR l_expat_rec.expat_statement IS NOT NULL)) THEN
1800     hr_utility.trace('Calling csr_get_expat_details2');
1801     IF l_expat_rec.expat_statement    = 'A' THEN
1802       l_stay_over_6_months           := 'Y';
1803     elsif l_expat_rec.expat_statement = 'B' THEN
1804       l_stay_less_6_months           := 'Y';
1805     elsif l_expat_rec.expat_statement = 'C' THEN
1806       l_working_in_out_UK            := 'Y';
1807     END IF;
1808 
1809     hr_utility.trace('Calling csr_get_expat_details3');
1810     l_starter_decl   := l_expat_rec.expat_statement;
1811     l_eea_cw_citizen := l_expat_rec.eea_cw_citizen;
1812     l_epm6_scheme    := l_expat_rec.epm6_scheme;
1813     l_ovn            := l_expat_rec.object_version_number;
1814     hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false,
1815                                                                p_object_version_number => l_ovn,
1816                                                                p_assignment_extra_info_id => l_expat_rec.assignment_extra_info_id,
1817                                                                p_aei_information_category => 'GB_RTI_ASG_DETAILS',
1818                                                                p_aei_information19 => 'Y');
1819     g_reset_flag_type := 'EXPAT';
1820   END IF;
1821 
1822   hr_utility.trace('g_tax_ref: '||g_tax_ref);
1823   OPEN csr_get_term_asg_info (p_person_rec.assignment_id );
1824   FETCH csr_get_term_asg_info INTO l_min_active_start_date;
1825   CLOSE csr_get_term_asg_info;
1826 
1827 
1828   ---
1829 IF (l_starter_rec.starter_flag = 'N') THEN
1830   IF((l_starter_rec.starter_decl IS NOT NULL
1831       OR NVL(l_starter_rec.continue_with_student_loan,'N') = 'Y')
1832       AND l_starter_rec.starter_flag = 'N')
1833 
1834   OR ((l_pensioner_rec.date_pension_started IS NOT NULL
1835        OR l_pensioner_rec.annual_pension IS NOT NULL
1836        OR NVL(l_pensioner_rec.recently_bereaved,'N') = 'Y')
1837        AND l_pensioner_rec.pensioner_flag = 'N')
1838 
1839   OR ((l_expat_rec.expat_statement IS NOT NULL
1840        OR l_expat_rec.date_emp_start_uk IS NOT NULL
1841        OR NVL(l_expat_rec.eea_cw_citizen,'N') = 'Y'
1842        OR NVL(l_expat_rec.epm6_scheme,'N') = 'Y')
1843        AND l_expat_rec.expat_flag = 'N') THEN
1844 --       l_asg_eff_start_date         := p_start_date;
1845        if(l_min_active_start_date >= g_start_year) then
1846           l_asg_eff_start_date := l_min_active_start_date;
1847           hr_utility.trace('l_asg_eff_start_date assigned: '||l_asg_eff_start_date);
1848        end if;
1849 
1850   ELSE
1851        l_asg_eff_start_date := NULL;
1852        hr_utility.trace('l_asg_eff_start_date'||l_asg_eff_start_date);
1853   END IF;
1854 END IF;
1855   ---
1856 
1857 --Fix for the bug 16503199 starts here
1858 IF ((nvl(l_starter_rec.starter_flag,'N') = 'N') AND
1859     (nvl(l_pensioner_rec.pensioner_flag,'N') = 'N') AND
1860     (nvl(l_expat_rec.expat_flag,'N') = 'N') AND
1861     (l_min_active_start_date >= g_start_year)) THEN
1862           l_asg_eff_start_date := l_min_active_start_date;
1863           hr_utility.trace('New Starter l_asg_eff_start_date: '||l_asg_eff_start_date);
1864 END IF;
1865 --Fix for the bug 16503199 ends here
1866 
1867   OPEN csr_get_more_payment_details;
1868   FETCH csr_get_more_payment_details
1869   INTO l_payment_date,
1870     l_period_num,
1871     l_period_type;
1872   CLOSE csr_get_more_payment_details;
1873 
1874   hr_utility.trace('l_payment_date :'||l_payment_date);
1875   hr_utility.trace('l_period_num :'||l_period_num);
1876   hr_utility.trace('l_period_type :'||l_period_type);
1877   g_date_paid:= l_payment_date;
1878 
1879 ---
1880 if (l_period_type = 'Week') then
1881        l_frequency := 'W1';
1882 elsif (l_period_type = 'Bi-Month' or l_period_type = 'Bi-Week') then
1883        l_frequency := 'W2';
1884 elsif (l_period_type = 'Lunar Month') then
1885        l_frequency := 'W4';
1886 elsif (l_period_type = 'Calendar Month' or l_period_type = 'Semi-Month') then
1887        l_frequency := 'M1';
1888 elsif (l_period_type = 'Quarter') then
1889        l_frequency := 'M3';
1890 elsif (l_period_type = 'Semi-Year') then
1891        l_frequency := 'M6';
1892 elsif (l_period_type = 'Year') then
1893        l_frequency := 'MA';
1894 end if;
1895 ---
1896 
1897 --  OPEN csr_asg(p_assactid, g_date_paid);
1898   OPEN csr_asg(p_last_asg_action_id, g_date_paid);
1899   FETCH csr_asg INTO l_per_ni_agg_flag, l_per_agg_flag, l_asg_number;
1900   CLOSE csr_asg;
1901 
1902   hr_utility.trace('l_per_ni_agg_flag :'||l_per_ni_agg_flag);
1903   hr_utility.trace('l_per_agg_flag :'||l_per_agg_flag);
1904   hr_utility.trace('l_frequency :'||l_frequency);
1905 
1906   IF l_per_ni_agg_flag = 'Y' OR l_per_agg_flag = 'Y' THEN
1907     l_aggr_earnings   := 'Y';
1908   ELSE
1909     l_aggr_earnings:= 'N';
1910   END IF;
1911 
1912   OPEN csr_period_type_info(l_period_type);
1913   FETCH csr_period_type_info INTO l_number_per_fiscal_yr;
1914   CLOSE csr_period_type_info;
1915 
1916   hr_utility.trace('l_number_per_fiscal_yr :'||l_number_per_fiscal_yr);
1917   l_payment_month_number    := NULL;
1918   l_payment_week_number     := NULL;
1919 
1920   IF l_number_per_fiscal_yr IN (1,2,4,6,12,24) THEN
1921     l_payment_month_number  := l_period_num;
1922   ELSE
1923     l_payment_week_number := l_period_num;
1924   END IF;
1925 
1926   hr_utility.trace('l_payment_month_number :'||l_payment_month_number);
1927   hr_utility.trace('l_payment_week_number :'||l_payment_week_number);
1928   ---
1929 --New Asg Number and Old Asg Number logic starts below
1930   hr_utility.trace('p_person_rec.assignment_id :'||p_person_rec.assignment_id);
1931 
1932   OPEN csr_last_pre_pay_id(p_person_rec.assignment_id);
1933   FETCH csr_last_pre_pay_id INTO l_last_pre_pay_id;
1934   CLOSE csr_last_pre_pay_id;
1935   hr_utility.trace('l_last_pre_pay_id :'||l_last_pre_pay_id);
1936 
1937   OPEN csr_last_fps_asg_act_id(l_last_pre_pay_id, p_person_rec.assignment_id);
1938   FETCH csr_last_fps_asg_act_id INTO l_last_fps_asg_act_id;
1939   CLOSE csr_last_fps_asg_act_id;
1940   hr_utility.trace('l_last_fps_asg_act_id :'||l_last_fps_asg_act_id);
1941 
1942   OPEN csr_last_asg_num_submitted(l_last_fps_asg_act_id, p_person_rec.assignment_id);
1943   FETCH csr_last_asg_num_submitted INTO l_last_asg_num_submitted;
1944   CLOSE csr_last_asg_num_submitted;
1945   hr_utility.trace('l_last_asg_num_submitted :'||l_last_asg_num_submitted);
1946   hr_utility.trace('l_asg_number :'||l_asg_number);
1947 
1948   if (l_asg_number <> l_last_asg_num_submitted)
1949   then
1950   hr_utility.trace('Inside if asg number is changed');
1951     l_asg_number_old := l_last_asg_num_submitted;
1952     l_payroll_id_changed_indicator := 'Y';
1953   else
1954   hr_utility.trace('Inside else asg number is not changed');
1955     l_asg_number_old               := NULL;
1956     l_payroll_id_changed_indicator := NULL;
1957   end if;
1958 --New Asg Number and Old Asg Number logic ends below
1959   ---
1960   OPEN csr_ni_info(p_person_rec.assignment_id, p_start_date);
1961   FETCH csr_ni_info INTO l_ni_process_type;
1962   CLOSE csr_ni_info;
1963 
1964   hr_utility.trace('l_ni_process_type: '||l_ni_process_type);
1965 
1966   IF (l_ni_process_type     = 'DY') THEN --Director
1967     l_dir_nic_calc_method  := 'AN';
1968   elsif ((l_ni_process_type = 'DN')       --Director Normal
1969     OR (l_ni_process_type   = 'DP')       --Director Pro Rate
1970     OR (l_ni_process_type   = 'DR')       --Director Pro Rate Normal
1971     OR (l_ni_process_type   = 'PY')) THEN --Pensioner Director
1972     l_dir_nic_calc_method  := 'AL';
1973   END IF;
1974   ---
1975 open csr_director;
1976 fetch csr_director into l_director;
1977 close csr_director;
1978 
1979 if l_director = 'Y' then
1980   OPEN csr_cat_NI_Details;
1981   FETCH csr_cat_NI_Details INTO l_dir_tax_week_num;
1982   CLOSE csr_cat_NI_Details;
1983 
1984   IF l_dir_tax_week_num IS NULL THEN
1985     OPEN csr_cat_NI;
1986     FETCH csr_cat_NI INTO l_dir_tax_week_num;
1987     CLOSE csr_cat_NI;
1988   END IF;
1989 
1990 end if;
1991 
1992   -- Get the Irregular payment indicator, periods covered and one-off payment.
1993   OPEN csr_fetch_other_fields;
1994   FETCH csr_fetch_other_fields
1995   INTO l_periods_covered,
1996     l_irr_payment_ind,
1997     l_one_off_pay,
1998     l_asg_info_id,
1999     l_ovn_extra_info;
2000   CLOSE csr_fetch_other_fields;
2001 
2002 hr_utility.trace('l_periods_covered '||l_periods_covered);
2003 hr_utility.trace('l_irr_payment_ind '||l_irr_payment_ind);
2004 hr_utility.trace('l_one_off_pay '||l_one_off_pay);
2005 hr_utility.trace('l_asg_info_id '||l_asg_info_id);
2006 hr_utility.trace('l_ovn_extra_info '||l_ovn_extra_info);
2007 
2008 if l_periods_covered is null then
2009 l_periods_covered := get_periods_covered(p_person_rec.assignment_id);
2010 end if;
2011 
2012 if l_irr_payment_ind is null then
2013 l_irr_payment_ind := get_irregular_payment(p_person_rec.assignment_id);
2014 end if;
2015 
2016 if l_one_off_pay is null then
2017 l_one_off_pay := get_oneoff_payment(p_person_rec.assignment_id);
2018 end if;
2019 
2020 hr_utility.trace('l_periods_covered '||l_periods_covered);
2021 hr_utility.trace('l_irr_payment_ind '||l_irr_payment_ind);
2022 hr_utility.trace('l_one_off_pay '||l_one_off_pay);
2023 
2024   open csr_advance_pay_dates;
2025   fetch csr_advance_pay_dates into l_start_date, l_end_date;
2026   close csr_advance_pay_dates;
2027   hr_utility.trace('l_start_date : ' || l_start_date);
2028   hr_utility.trace('l_end_date : ' || l_end_date);
2029 
2030   if l_start_date is not null and  l_end_date is not null then
2031   hr_utility.trace('test3');
2032     select
2033     pay_advance_pay_pkg.advanced_periods(
2034     p_person_rec.assignment_id,
2035     l_start_date,
2036     l_end_date
2037     ) into l_periods_covered from dual;
2038   hr_utility.trace('test4');
2039   -- reset the periods covered value to 1
2040   elsif l_periods_covered IS NOT NULL AND l_periods_covered <> 1 THEN
2041     hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false,
2042                                                                p_object_version_number => l_ovn_extra_info,
2043                                                                p_assignment_extra_info_id => l_asg_info_id,
2044                                                                p_aei_information_category => 'GB_PAY_RTI',
2045                                                                p_aei_information1 => 1);
2046 	else
2047      l_periods_covered := 1;
2048   end if;
2049   hr_utility.trace('l_periods_covered : ' || l_periods_covered);
2050   hr_utility.trace('l_dir_tax_week_num : '|| l_dir_tax_week_num);
2051   ---
2052 
2053   IF (l_irr_payment_ind = 'Y') THEN
2054     l_frequency        := 'IR';
2055   elsif (l_one_off_pay  = 'Y') THEN
2056     l_frequency        := 'IO';
2057   END IF;
2058 
2059   OPEN csr_all_payroll_actions(p_person_rec.assignment_id, g_pre_pact_id, p_start_date, g_start_year,g_end_year);
2060   FETCH csr_all_payroll_actions
2061   INTO l_payroll_period_start_date,
2062     l_payroll_period_end_date;
2063   CLOSE csr_all_payroll_actions;
2064 
2065   open csr_terminated_date;
2066   fetch csr_terminated_date into l_person_actual_term_date;
2067   close csr_terminated_date;
2068   ---
2069   hr_utility.trace('p_end_date  : '|| p_end_date);
2070   hr_utility.trace('l_person_actual_term_date  : '|| l_person_actual_term_date);
2071 
2072   IF p_fps = 'Y' and l_person_actual_term_date is not null THEN
2073    IF l_person_actual_term_date >= l_payroll_period_start_date and l_person_actual_term_date <= l_payroll_period_end_date THEN
2074     l_payment_after_leaving := 'N';
2075    ELSE
2076     l_payment_after_leaving := 'Y';
2077    END IF;
2078   ELSE
2079     l_payment_after_leaving := 'N';
2080   END IF;
2081 
2082 /*
2083   IF (l_asg_effective_end_date > l_payroll_period_start_date
2084       AND l_asg_effective_end_date < l_payroll_period_end_date ) THEN
2085     l_date_of_leaving := l_asg_effective_end_date;
2086   ELSE
2087     l_date_of_leaving := NULL;
2088   END IF;*/
2089 
2090 /*
2091   IF l_payment_after_leaving = 'Y' THEN
2092     l_date_of_leaving := l_person_actual_term_date;
2093   ELSE
2094     l_date_of_leaving := NULL;
2095   END IF;
2096 */
2097 
2098     l_date_of_leaving := l_person_actual_term_date;
2099 
2100 
2101 -- If Date of Leaving is less then Start of the Previous Tax Year
2102 -- Updating it to Payment Date as Validation rule will fail
2103 if l_date_of_leaving is not null and l_date_of_leaving < (add_months(g_end_year,-24)+1) then
2104 	l_date_of_leaving := l_payment_date;
2105 end if;
2106 
2107 
2108   hr_utility.trace('l_date_of_leaving : '|| l_date_of_leaving);
2109   hr_utility.trace('l_starter_decl : '|| l_starter_decl);
2110   hr_utility.trace('l_asg_eff_start_date : '|| l_asg_eff_start_date);
2111   ---
2112   hr_utility.trace('Assigning values to p_fps_rec1');
2113 
2114   p_fps_rec1.assignment_id        := p_person_rec.assignment_id;
2115   p_fps_rec1.action_info_category := 'GB_RTI_FPS_ASG_DET1';
2116   p_fps_rec1.act_info1            := to_char(l_asg_eff_start_date,'YYYY-MM-DD');
2117   p_fps_rec1.act_info2            := to_char(l_date_of_leaving,'YYYY-MM-DD');
2118   p_fps_rec1.act_info3            := to_char(l_payment_date,'YYYY-MM-DD');
2119   p_fps_rec1.act_info4            := l_starter_decl;
2120   p_fps_rec1.act_info5            := l_continue_with_student_loan;
2121   p_fps_rec1.act_info6            := l_stay_over_6_months;
2122   p_fps_rec1.act_info7            := l_stay_less_6_months;
2123   p_fps_rec1.act_info8            := l_working_in_out_UK;
2124   p_fps_rec1.act_info9            := l_eea_cw_citizen;
2125   p_fps_rec1.act_info10           := l_epm6_scheme;
2126   p_fps_rec1.act_info11           := NULL; -- Recently Bereaved spouse / Civil Partner (State Pension) Not applicable
2127   p_fps_rec1.act_info12           := l_recently_bereaved;
2128   p_fps_rec1.act_info13           := l_asg_number;
2129   p_fps_rec1.act_info14           := l_payroll_id_changed_indicator;
2130   p_fps_rec1.act_info15           := l_asg_number_old;
2131   p_fps_rec1.act_info16           := l_irr_payment_ind;
2132   p_fps_rec1.act_info17           := l_frequency;
2133   p_fps_rec1.act_info18           := l_payment_week_number;
2134   p_fps_rec1.act_info19           := l_payment_month_number;
2135   p_fps_rec1.act_info20           := l_periods_covered;
2136   p_fps_rec1.act_info21           := l_aggr_earnings;
2137   p_fps_rec1.act_info22           := l_payment_after_leaving;
2138   p_fps_rec1.act_info23           := get_hours_worked(p_person_rec.assignment_id);
2139   p_fps_rec1.act_info24           := l_dir_nic_calc_method;
2140   p_fps_rec1.act_info25           := l_dir_tax_week_num;
2141   p_fps_rec1.act_info26           := l_annual_pension;
2142   p_fps_rec1.act_info27           := NULL; -- State Pension Not applicable
2143 
2144   hr_utility.set_location('Leaving: '||l_proc,999);
2145   RETURN l_arch;
2146 
2147 EXCEPTION
2148 WHEN OTHERS THEN
2149   hr_utility.set_location('Error in function fetch_fps_asg_det1 ', 15);
2150   hr_utility.trace('Exception:' || SQLCODE || ' - ' || SQLERRM );
2151   fnd_file.put_line(fnd_file.LOG,'Exception:' || SQLCODE || ' - ' || SQLERRM);
2152   RAISE;
2153 END fetch_fps_asg_det1;
2154 --
2155 
2156 -- Function to fetch Assignment details (CONTEXT - GB_RTI_FPS_ASG_DET1)
2157 -- When there are no payments for the assignment this function will be called for Ni only Agg asgs
2158 FUNCTION fetch_fps_nopay_asg_det1(
2159     p_start_date         IN DATE,
2160     p_end_date           IN DATE,
2161     p_assactid           IN NUMBER,
2162     p_last_asg_action_id IN NUMBER,
2163 	  p_fps                IN varchar2,
2164     p_person_rec         IN act_info_rec,
2165     p_fps_rec1 OUT nocopy act_info_rec,
2166     p_starter_set  out nocopy varchar2)
2167   RETURN BOOLEAN
2168 IS
2169   l_proc CONSTANT VARCHAR2(50):= g_package||'fetch_fps_asg_det1';
2170   l_arch BOOLEAN;
2171 
2172   --Below cursor fetches the asg extra details of the current assignment
2173   CURSOR csr_fetch_other_fields
2174   IS
2175     SELECT AEI_INFORMATION1 periods_worked,
2176       AEI_INFORMATION3 irr_payment ,
2177       AEI_INFORMATION4 "One-Off Payment",
2178       ASSIGNMENT_EXTRA_INFO_ID,
2179       object_version_number
2180     FROM PER_ASSIGNMENT_EXTRA_INFO
2181     WHERE INFORMATION_TYPE       = 'GB_PAY_RTI'
2182     AND AEI_INFORMATION_CATEGORY = 'GB_PAY_RTI'
2183     AND assignment_id            = p_person_rec.assignment_id;
2184 
2185   --Below cursor fetches the starter details of the current assignment
2186   CURSOR csr_get_starter_details(p_asg_id NUMBER)
2187   IS
2188     SELECT assignment_extra_info_id,
2189       aei_information1 starter_decl,
2190       aei_information2 prev_emp_paye_ref,
2191       aei_information3 prev_tax_code,
2192       aei_information4 date_left_prev_employer,
2193       aei_information5 prev_tax_basis,
2194       aei_information6 last_payment_period_type,
2195       aei_information7 last_payment_period,
2196       aei_information8 starter_flag,
2197       aei_information10 continue_with_student_loan,
2198       aei_information8 not_paid_between,
2199       object_version_number object_version_number
2200     FROM per_assignment_extra_info
2201     WHERE assignment_id  = p_asg_id
2202     AND information_type = 'GB_RTI_ASG_DETAILS';
2203 
2204   --Below cursor fetches the pension details of the current assignment
2205   CURSOR csr_get_pensioner_details(p_asg_id NUMBER)
2206   IS
2207     SELECT assignment_extra_info_id,
2208       aei_information9 pensioner_flag,
2209       aei_information12 date_pension_started,
2210       trim(aei_information13) annual_pension,
2211       aei_information14 recently_bereaved,
2212       object_version_number object_version_number
2213     FROM per_assignment_extra_info
2214     WHERE assignment_id  = p_asg_id
2215     AND information_type = 'GB_RTI_ASG_DETAILS';
2216 
2217   --Below cursor fetches the expat details of the current assignment
2218   CURSOR csr_get_expat_details(p_asg_id NUMBER)
2219   IS
2220     SELECT assignment_extra_info_id,
2221       aei_information15 expat_statement,
2222       aei_information16 date_emp_start_uk,
2223       aei_information17 eea_cw_citizen,
2224       aei_information18 epm6_scheme,
2225       aei_information19 expat_flag,
2226       object_version_number object_version_number
2227     FROM per_assignment_extra_info
2228     WHERE assignment_id  = p_asg_id
2229     AND information_type = 'GB_RTI_ASG_DETAILS';
2230 
2231   --Below cursor fetches the assignment numbers of the current assignment
2232   CURSOR csr_get_asg_numbers
2233   IS
2234     SELECT paaf.assignment_number assignment_number,
2235       paaf_old.assignment_number old_assignment_number
2236     FROM per_all_assignments_f paaf,
2237       per_all_assignments_f paaf_old
2238     WHERE paaf.assignment_id          = p_person_rec.assignment_id
2239     AND ((paaf_old.assignment_id      = paaf.assignment_id
2240     AND paaf_old.effective_start_date < paaf.effective_start_date
2241     AND paaf.effective_start_date     > g_start_year
2242     AND paaf_old.effective_end_date   > g_start_year)
2243     OR (paaf.assignment_number        = paaf_old.assignment_number));
2244 
2245   --Below cursor fetches further payment details of the current assignment
2246   CURSOR csr_get_more_payment_details(l_last_asg_action_id number)
2247   IS
2248     SELECT ptp.regular_payment_date,
2249       ptp.period_num,
2250       ptp.period_type
2251     FROM pay_payroll_actions ppa,
2252       pay_assignment_actions paa,
2253       per_time_periods ptp
2254     WHERE assignment_action_id = l_last_asg_action_id
2255     AND ppa.time_period_id     = ptp.time_period_id
2256     AND ppa.payroll_id         = ptp.payroll_id
2257     AND paa.payroll_action_id  = ppa.payroll_action_id;
2258 
2259   --Below cursor fetches further period type details of the current assignment
2260   CURSOR csr_period_type_info(p_period_type VARCHAR2)
2261   IS
2262     SELECT ptpt.number_per_fiscal_year
2263     FROM per_time_period_types ptpt
2264     WHERE p_period_type = ptpt.period_type;
2265 
2266   --Below cursor fetches basic ni details of the current assignment
2267   CURSOR csr_ni_info(c_asg_id NUMBER, c_asg_eff_start_date DATE)
2268   IS
2269     SELECT peevf.screen_entry_value screen_value
2270     FROM
2271       pay_element_entries_f peef,
2272       pay_element_entry_values_f peevf
2273     WHERE peef.assignment_id        = c_asg_id
2274     AND peef.element_entry_id       = peevf.element_entry_id
2275     AND peevf.input_value_id        = g_ni_pt_ivid
2276     AND peef.element_type_id        = g_ni_pt_eid
2277     AND c_asg_eff_start_date between peef.effective_start_date and peef.effective_end_date
2278     AND c_asg_eff_start_date between peevf.effective_start_date and peevf.effective_end_date;
2279 
2280 
2281   --Below cursor fetches further ni details of the current assignment
2282   CURSOR csr_cat_NI_Details
2283   IS
2284     SELECT MAX(DECODE(name,'Periods',result_value,NULL))
2285     FROM pay_assignment_actions paa ,
2286       pay_run_results prr,
2287       pay_run_result_values prrv,
2288       pay_element_types_f petf ,
2289       pay_input_values_f pivf
2290     WHERE paa.source_action_id   = p_last_asg_action_id
2291     AND paa.assignment_action_id = prr.assignment_action_id
2292     AND prr.element_type_id      = petf.element_type_id
2293     AND petf.element_name        = 'NI DETAILS'
2294     AND prr.run_result_id        = prrv.run_result_id
2295     AND prrv.input_value_id      = pivf.input_value_id
2296     AND p_start_date between petf.effective_start_date and petf.effective_end_date
2297     AND p_start_date between pivf.effective_start_date and pivf.effective_end_date;
2298 
2299   --Below cursor fetches further ni details of the current assignment
2300   CURSOR csr_cat_NI
2301   IS
2302     SELECT MAX(DECODE(name,'Periods',result_value,NULL))
2303     FROM pay_assignment_actions paa ,
2304       pay_run_results prr,
2305       pay_run_result_values prrv,
2306       pay_element_types_f petf ,
2307       pay_input_values_f pivf
2308     WHERE paa.source_action_id   = p_last_asg_action_id
2309     AND paa.assignment_action_id = prr.assignment_action_id
2310     AND prr.element_type_id      = petf.element_type_id
2311     AND petf.element_name        = 'NI'
2312     AND prr.run_result_id        = prrv.run_result_id
2313     AND prrv.input_value_id      = pivf.input_value_id
2314     AND p_start_date between petf.effective_start_date and petf.effective_end_date
2315     AND p_start_date between pivf.effective_start_date and pivf.effective_end_date;
2316 
2317 
2318  --Below cursor fetches asg details of the current assignment
2319   CURSOR csr_asg(c_asg_act_id NUMBER, c_effective_date DATE)
2320   IS
2321     SELECT trim(NVL(pap.per_information9,'N')) per_ni_agg_flag,
2322       trim(NVL(pap.per_information10,'N')) per_agg_flag,
2323                asg.assignment_number assignment_number
2324     FROM per_all_people_f pap,
2325       per_all_assignments_f asg
2326     WHERE asg.assignment_id = c_asg_act_id
2327     AND pap.person_id              = asg.person_id
2328     AND c_effective_date BETWEEN asg.effective_start_date AND asg.effective_end_date
2329     AND c_effective_date BETWEEN pap.effective_start_date AND pap.effective_end_date
2330     AND pap.per_information_category = 'GB';
2331 
2332 
2333   --Below cursor fetches the period start and end dates of payrolls processed in the current prepayment
2334   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)
2335   IS
2336     SELECT
2337       /*+ USE_NL(paa, pact, ptp) */
2338       MIN(ptp.start_date) payroll_period_start_date,
2339       MAX(ptp.end_date) payroll_period_end_date
2340     FROM pay_assignment_actions paa,
2341       pay_payroll_actions pact,
2342       per_time_periods ptp,
2343       pay_assignment_actions paa1,    --Prepayments
2344       pay_payroll_actions ppa1,       --Prepayments
2345       pay_action_interlocks pai       --Prepayments
2346     WHERE paa.assignment_id   = p_asgid
2347     AND paa.payroll_action_id = pact.payroll_action_id
2348     AND pact.time_period_id   = ptp.time_period_id
2349     AND pact.action_type     IN ('Q','R','B','I','V')
2350     AND paa.action_status    IN ('C','S')
2351     AND ptp.regular_payment_date BETWEEN p_start_year AND p_end_year
2352     AND ppa1.payroll_action_id    = p_pre_pay_id
2353     AND ppa1.action_type         IN ('P','U')
2354     AND paa1.payroll_action_id    = ppa1.payroll_action_id
2355     AND paa1.assignment_action_id = pai.locking_action_id
2356     AND paa.assignment_action_id  = pai.locked_action_id;
2357 
2358 -- Cursor to fetch Termination date
2359 cursor csr_terminated_date is
2360      select serv.actual_termination_date actual_termination_date
2361      from
2362             per_all_assignments_f asg,
2363             per_periods_of_service serv
2364      where  asg.assignment_id = p_person_rec.assignment_id
2365      and    asg.period_of_service_id = serv.period_of_service_id
2366      and    p_end_date between asg.effective_start_date and asg.effective_end_date
2367      and    actual_termination_date <= g_effective_date
2368      and    actual_termination_date <= sysdate + 30 ;
2369 
2370   --Below cursor fetches the termination date of the current assignment
2371   CURSOR csr_get_term_asg_info (p_asg_id NUMBER)
2372   IS
2373     SELECT min(paaf.effective_start_date) min_active_start_date
2374     FROM per_all_assignments_f paaf,
2375          per_assignment_status_types past,
2376          pay_all_payrolls_f pay,
2377          hr_soft_coding_keyflex sck
2378     WHERE paaf.assignment_id           = p_asg_id
2379     AND paaf.assignment_status_type_id = past.assignment_status_type_id
2380     AND past.per_system_status        IN ('ACTIVE_ASSIGN', 'SUSP_ASSIGN')
2381     AND paaf.payroll_id = pay.payroll_id
2382     AND pay.soft_coding_keyflex_id = sck.soft_coding_keyflex_id
2383     AND upper(g_tax_ref) = upper(sck.segment1);   --Modified for the bug 16503199
2384 
2385   --Below cursor fetches the Last Pre-Payment id
2386   CURSOR csr_last_pre_pay_id (c_asg_id NUMBER)
2387   IS
2388   select ppa_prev.payroll_action_id
2389   from pay_payroll_actions ppa_prev,
2390      pay_payroll_actions ppa_current
2391   where ppa_prev.action_type IN ('P','U')
2392   and ppa_prev.payroll_id = ppa_current.payroll_id
2393   and ppa_prev.payroll_action_id < ppa_current.payroll_action_id
2394   and ppa_current.payroll_action_id = g_pre_pact_id
2395   and ppa_prev.payroll_action_id =
2396       (select max(ppa_max.payroll_action_id)
2397        from pay_payroll_actions ppa_max,
2398             pay_assignment_actions paa_max
2399        where ppa_max.payroll_id = ppa_current.payroll_id
2400        and ppa_max.payroll_action_id < ppa_current.payroll_action_id
2401        and ppa_max.action_type IN ('P','U')
2402        and ppa_max.payroll_action_id = paa_max.payroll_action_id
2403        and paa_max.assignment_id = c_asg_id );
2404 
2405   --Below cursor fetches the Previous run FPS assignment_action_id
2406   CURSOR csr_last_fps_asg_act_id (c_last_pre_pay_id NUMBER, c_asg_id NUMBER)
2407   IS
2408   select paa_fps.assignment_action_id
2409   from pay_assignment_actions paa_prepay,
2410        pay_payroll_actions ppa_prepay,
2411        pay_assignment_actions paa_fps,
2412        pay_payroll_actions ppa_fps,
2413        pay_action_interlocks pai
2414   where ppa_prepay.payroll_action_id = c_last_pre_pay_id
2415   and ppa_prepay.payroll_action_id = paa_prepay.payroll_action_id
2416   and paa_prepay.assignment_action_id = pai.locked_action_id
2417   and paa_fps.assignment_action_id = pai.locking_action_id
2418   and paa_fps.payroll_action_id = ppa_fps.payroll_action_id
2419   and ppa_fps.action_type = 'X'
2420   and paa_fps.assignment_id = c_asg_id;
2421 
2422   --Below cursor fetches the New Asg Number reported in Last FPS
2423   CURSOR csr_last_asg_num_submitted(c_last_fps_asg_act_id NUMBER, c_asg_id NUMBER)
2424   IS
2425   select ACTION_INFORMATION13
2426   from pay_action_information
2427   where action_context_id = c_last_fps_asg_act_id
2428   and action_information_category = 'GB_RTI_FPS_ASG_DET1'
2429   and assignment_id = c_asg_id;
2430 
2431 
2432   cursor csr_advance_pay_dates
2433   is
2434   select  fnd_date.canonical_to_date(max(decode(pivf.name,'Start Date',peevf.screen_entry_value,null))) start_date,
2435   fnd_date.canonical_to_date(max(decode(pivf.name,'End Date',peevf.screen_entry_value,null))) end_date
2436   from pay_element_entries_f peef,
2437 	  pay_element_entry_values_f peevf ,
2438 		pay_input_values_f pivf
2439   where
2440   peef.assignment_id = p_person_rec.assignment_id
2441   and peef.ELEMENT_TYPE_ID = g_adv_period_id
2442   and peef.element_entry_id = peevf.element_entry_id
2443   and peevf.input_value_id = pivf.input_value_id
2444   and pivf.element_type_id = peef.ELEMENT_TYPE_ID
2445   and g_effective_date between peevf.effective_start_date and peevf.effective_end_date
2446   and g_effective_date between pivf.effective_start_date and pivf.effective_end_date
2447   and g_effective_date between peef.effective_start_date and peef.effective_end_date;
2448 
2449 cursor csr_asg_act_id is
2450     SELECT
2451       /*+ USE_NL(paa, pact, ptp) */
2452       to_number(SUBSTR(MAX(lpad(paa.action_sequence,15,'0')
2453       || paa.assignment_action_id),16)) max_asg_act_id,
2454       MAX(pact.effective_date) effective_date
2455     FROM per_all_assignments_f paaf,
2456       pay_assignment_actions paa,
2457       pay_payroll_actions pact,
2458       per_time_periods ptp,
2459       pay_assignment_actions paa1, --Prepayments
2460       pay_payroll_actions ppa1,    --Prepayments
2461       pay_action_interlocks pai    --Prepayments
2462     WHERE paaf.person_id = p_person_rec.person_id--59437
2463 		AND sysdate between paaf.effective_start_date and paaf.effective_end_date
2464     AND paa.assignment_id   = paaf.assignment_id
2465     AND paa.payroll_action_id = pact.payroll_action_id
2466     AND pact.time_period_id   = ptp.time_period_id
2467     AND pact.action_type     IN ('Q','R','I','V','B')
2468     AND paa.action_status    IN ('C','S')
2469     AND ptp.regular_payment_date BETWEEN  g_start_year AND g_end_year--p_start_year AND p_end_year
2470     AND ppa1.payroll_action_id    = g_pre_pact_id --1160712
2471     AND ppa1.action_type         IN ('P','U')
2472     AND paa1.payroll_action_id    = ppa1.payroll_action_id
2473     AND paa1.assignment_action_id = pai.locking_action_id
2474     AND paa.assignment_action_id  = pai.locked_action_id;
2475 
2476 
2477   l_starter_rec csr_get_starter_details%rowtype;
2478   l_pensioner_rec csr_get_pensioner_details%rowtype;
2479   l_expat_rec csr_get_expat_details%rowtype;
2480   l_stay_over_6_months           VARCHAR2(1);
2481   l_stay_less_6_months           VARCHAR2(1);
2482   l_working_in_out_UK            VARCHAR2(1);
2483   l_asg_number                   VARCHAR2(30);
2484   l_asg_number_old               VARCHAR2(30);
2485   l_irr_payment_ind              VARCHAR2(10);
2486   l_periods_covered              VARCHAR2(10);
2487   l_one_off_pay                  VARCHAR2(10);
2488   l_payroll_id_changed_indicator VARCHAR2(1) := 'N';
2489   l_payment_date               DATE;
2490   l_period_num                 NUMBER;
2491   l_period_type                VARCHAR2(30);
2492   l_number_per_fiscal_yr       NUMBER;
2493   l_payment_month_number       NUMBER;
2494   l_payment_week_number        NUMBER;
2495   l_ni_process_type            VARCHAR2(10);
2496   l_dir_nic_calc_method        VARCHAR2(30);
2497   l_dir_tax_week_num           NUMBER;
2498   l_per_ni_agg_flag            VARCHAR2(1);
2499   l_per_agg_flag               VARCHAR2(1);
2500   l_aggr_earnings              VARCHAR2(1);
2501   l_starter_decl               VARCHAR2(30);
2502   l_continue_with_student_loan VARCHAR2(30);
2503   l_ovn                        NUMBER;
2504   l_starter_flag               VARCHAR2(1);
2505   l_pensioner_flag             VARCHAR2(1);
2506   l_expat_flag                 VARCHAR2(1);
2507   l_recently_bereaved          VARCHAR2(30);
2508   l_annual_pension             VARCHAR2(30);
2509   l_eea_cw_citizen             VARCHAR2(30);
2510   l_epm6_scheme                VARCHAR2(30);
2511   l_asg_eff_start_date         DATE;
2512   l_frequency                  VARCHAR2(30);
2513   l_payroll_period_start_date  DATE;
2514   l_payroll_period_end_date    DATE;
2515   l_person_actual_term_date  DATE;
2516   l_asg_effective_end_date     DATE;
2517   l_payment_after_leaving      VARCHAR2(1);
2518   l_date_of_leaving            DATE;
2519   l_ovn_extra_info             NUMBER;
2520   l_asg_info_id                NUMBER;
2521   l_start_date DATE;
2522   l_end_date DATE;
2523   l_last_pre_pay_id            NUMBER;
2524   l_last_fps_asg_act_id        NUMBER;
2525   l_last_asg_num_submitted     VARCHAR2(30);
2526   l_person_id   number;
2527   l_min_active_start_date      DATE;
2528   l_last_asg_action_id         NUMBER;
2529   l_last_effective_date             DATE;
2530 
2531 BEGIN
2532   hr_utility.set_location('Entering: '||l_proc,1);
2533   l_arch := true;
2534   p_starter_set := 'N';
2535   hr_utility.trace('Start Year: '||TO_CHAR(g_start_year));
2536   hr_utility.trace('End Year: '||TO_CHAR(g_end_year));
2537 	  hr_utility.trace('Calling csr_get_starter_details');
2538   hr_utility.trace('p_person_rec.assignment_id: '||p_person_rec.assignment_id);
2539 
2540   OPEN csr_get_starter_details(p_person_rec.assignment_id);
2541   FETCH csr_get_starter_details INTO l_starter_rec;
2542   CLOSE csr_get_starter_details;
2543 
2544   l_starter_decl               := NULL;
2545   l_continue_with_student_loan := NULL;
2546   l_starter_flag               := l_starter_rec.starter_flag;
2547   g_reset_flag_type            := NULL;
2548   hr_utility.trace('Calling csr_get_starter_details1');
2549   hr_utility.trace('l_starter_flag: '||l_starter_flag);
2550   hr_utility.trace('l_starter_rec.starter_decl: '||l_starter_rec.starter_decl);
2551   hr_utility.trace(' l_starter_rec.continue_with_student_loan: '|| l_starter_rec.continue_with_student_loan);
2552 
2553   IF (l_starter_flag = 'N'
2554       AND (l_starter_rec.starter_decl IS NOT NULL
2555 	   OR l_starter_rec.continue_with_student_loan IS NOT NULL )) THEN
2556     hr_utility.trace('Calling csr_get_starter_details2');
2557     l_starter_decl               := l_starter_rec.starter_decl;
2558     l_continue_with_student_loan := l_starter_rec.continue_with_student_loan;
2559     l_ovn                        := l_starter_rec.object_version_number;
2560     hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false,
2561                                                                p_object_version_number => l_ovn,
2562                                                                p_assignment_extra_info_id => l_starter_rec.assignment_extra_info_id,
2563                                                                p_aei_information_category => 'GB_RTI_ASG_DETAILS',
2564                                                                p_aei_information8 => 'Y');
2565     p_starter_set := 'Y';
2566     g_reset_flag_type := 'STARTER';
2567     hr_utility.trace('Calling csr_get_starter_details3');
2568   END IF;
2569   ---
2570   hr_utility.trace('Calling csr_get_pensioner_details');
2571 
2572   OPEN csr_get_pensioner_details(p_person_rec.assignment_id);
2573   FETCH csr_get_pensioner_details INTO l_pensioner_rec;
2574   CLOSE csr_get_pensioner_details;
2575 
2576   l_recently_bereaved   := NULL;
2577   l_pensioner_flag      := l_pensioner_rec.pensioner_flag;
2578   l_annual_pension      := NULL;
2579   g_reset_flag_type     := NULL;
2580 
2581   hr_utility.trace('l_pensioner_flag: '||l_pensioner_flag);
2582   hr_utility.trace('l_pensioner_rec.pensioner_flag: '||l_pensioner_rec.pensioner_flag);
2583   hr_utility.trace('l_pensioner_rec.recently_bereaved: '||l_pensioner_rec.recently_bereaved);
2584   hr_utility.trace('l_pensioner_rec.annual_pension: '||l_pensioner_rec.annual_pension);
2585 
2586   IF (l_pensioner_flag   = 'N'
2587       AND (l_pensioner_rec.recently_bereaved IS NOT NULL
2588        OR l_pensioner_rec.annual_pension IS NOT NULL)) THEN
2589     l_starter_decl      := 'B';
2590     l_recently_bereaved := l_pensioner_rec.recently_bereaved;
2591     if l_pensioner_rec.annual_pension is not null then
2592       l_annual_pension    := (l_pensioner_rec.annual_pension)*100;
2593     end if;
2594     l_ovn               := l_pensioner_rec.object_version_number;
2595     hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false,
2596                                                                p_object_version_number => l_ovn,
2597                                                                p_assignment_extra_info_id => l_pensioner_rec.assignment_extra_info_id,
2598                                                                p_aei_information_category => 'GB_RTI_ASG_DETAILS',
2599                                                                p_aei_information9 => 'Y');
2600     g_reset_flag_type := 'PENSIONER';
2601   END IF;
2602   ---
2603   hr_utility.trace('Calling csr_get_expat_details');
2604 
2605   OPEN csr_get_expat_details(p_person_rec.assignment_id);
2606   FETCH csr_get_expat_details INTO l_expat_rec;
2607   CLOSE csr_get_expat_details;
2608 
2609   l_eea_cw_citizen     := NULL;
2610   l_epm6_scheme        := NULL;
2611   l_stay_over_6_months := NULL;
2612   l_stay_less_6_months := NULL;
2613   l_working_in_out_UK  := NULL;
2614   l_expat_flag      := l_expat_rec.expat_flag;
2615 
2616   hr_utility.trace('Calling csr_get_expat_details1');
2617   hr_utility.trace('l_expat_flag: '||l_expat_flag);
2618   hr_utility.trace('l_expat_rec.eea_cw_citizen: '||l_expat_rec.eea_cw_citizen);
2619   hr_utility.trace(' l_expat_rec.epm6_scheme: '|| l_expat_rec.epm6_scheme);
2620   hr_utility.trace(' l_expat_rec.expat_statement: '|| l_expat_rec.expat_statement);
2621 
2622   g_reset_flag_type := NULL;
2623 
2624   IF (l_expat_flag   = 'N'
2625       AND (l_expat_rec.eea_cw_citizen IS NOT NULL
2626            OR l_expat_rec.epm6_scheme IS NOT NULL
2627            OR l_expat_rec.expat_statement IS NOT NULL)) THEN
2628     hr_utility.trace('Calling csr_get_expat_details2');
2629     IF l_expat_rec.expat_statement    = 'A' THEN
2630       l_stay_over_6_months           := 'Y';
2631     elsif l_expat_rec.expat_statement = 'B' THEN
2632       l_stay_less_6_months           := 'Y';
2633     elsif l_expat_rec.expat_statement = 'C' THEN
2634       l_working_in_out_UK            := 'Y';
2635     END IF;
2636 
2637     hr_utility.trace('Calling csr_get_expat_details3');
2638     l_starter_decl   := l_expat_rec.expat_statement;
2639     l_eea_cw_citizen := l_expat_rec.eea_cw_citizen;
2640     l_epm6_scheme    := l_expat_rec.epm6_scheme;
2641     l_ovn            := l_expat_rec.object_version_number;
2642     hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false,
2643                                                                p_object_version_number => l_ovn,
2644                                                                p_assignment_extra_info_id => l_expat_rec.assignment_extra_info_id,
2645                                                                p_aei_information_category => 'GB_RTI_ASG_DETAILS',
2646                                                                p_aei_information19 => 'Y');
2647     g_reset_flag_type := 'EXPAT';
2648   END IF;
2649 
2650   OPEN csr_get_term_asg_info (p_person_rec.assignment_id );
2651   FETCH csr_get_term_asg_info INTO l_min_active_start_date;
2652   CLOSE csr_get_term_asg_info;
2653 
2654   ---
2655 IF (l_starter_rec.starter_flag = 'N') THEN
2656   IF((l_starter_rec.starter_decl IS NOT NULL
2657       OR l_starter_rec.continue_with_student_loan IS NOT NULL)
2658       AND l_starter_rec.starter_flag = 'N')
2659 
2660   OR ((l_pensioner_rec.date_pension_started IS NOT NULL
2661        OR l_pensioner_rec.annual_pension IS NOT NULL
2662        OR l_pensioner_rec.recently_bereaved IS NOT NULL)
2663        AND l_pensioner_rec.pensioner_flag = 'N')
2664 
2665   OR ((l_expat_rec.expat_statement IS NOT NULL
2666        OR l_expat_rec.date_emp_start_uk IS NOT NULL
2667        OR l_expat_rec.eea_cw_citizen IS NOT NULL
2668        OR l_expat_rec.epm6_scheme IS NOT NULL)
2669        AND l_expat_rec.expat_flag = 'N') THEN
2670 --       l_asg_eff_start_date         := p_start_date;
2671        if(l_min_active_start_date >= g_start_year) then
2672           l_asg_eff_start_date := l_min_active_start_date;
2673           hr_utility.trace('l_asg_eff_start_date assigned: '||l_asg_eff_start_date);
2674        end if;
2675 
2676   ELSE
2677        l_asg_eff_start_date := NULL;
2678        hr_utility.trace('l_asg_eff_start_date'||l_asg_eff_start_date);
2679   END IF;
2680 END IF;
2681   ---
2682 
2683 --Fix for the bug 16503199 starts here
2684 IF ((nvl(l_starter_rec.starter_flag,'N') = 'N') AND
2685     (nvl(l_pensioner_rec.pensioner_flag,'N') = 'N') AND
2686     (nvl(l_expat_rec.expat_flag,'N') = 'N') AND
2687     (l_min_active_start_date >= g_start_year)) THEN
2688           l_asg_eff_start_date := l_min_active_start_date;
2689           hr_utility.trace('New Starter l_asg_eff_start_date: '||l_asg_eff_start_date);
2690 END IF;
2691 --Fix for the bug 16503199 ends here
2692 
2693   OPEN csr_get_more_payment_details(p_last_asg_action_id);
2694   FETCH csr_get_more_payment_details
2695   INTO l_payment_date,
2696     l_period_num,
2697     l_period_type;
2698   CLOSE csr_get_more_payment_details;
2699 
2700 -- If there is no payment fetch details from the other assignments of the person
2701 -- Latest assignment action which is locked by the prepayment
2702 if l_payment_date is null then
2703 	open csr_asg_act_id;
2704 	fetch csr_asg_act_id into l_last_asg_action_id, l_last_effective_date;
2705 	close csr_asg_act_id;
2706 
2707   OPEN csr_get_more_payment_details(l_last_asg_action_id);
2708   FETCH csr_get_more_payment_details
2709   INTO l_payment_date,
2710     l_period_num,
2711     l_period_type;
2712   CLOSE csr_get_more_payment_details;
2713 
2714 end if;
2715 
2716   hr_utility.trace('l_payment_date :'||l_payment_date);
2717   hr_utility.trace('l_period_num :'||l_period_num);
2718   hr_utility.trace('l_period_type :'||l_period_type);
2719   g_date_paid:= l_payment_date;
2720 
2721 ---
2722 if (l_period_type = 'Week') then
2723        l_frequency := 'W1';
2724 elsif (l_period_type = 'Bi-Month' or l_period_type = 'Bi-Week') then
2725        l_frequency := 'W2';
2726 elsif (l_period_type = 'Lunar Month') then
2727        l_frequency := 'W4';
2728 elsif (l_period_type = 'Calendar Month' or l_period_type = 'Semi-Month') then
2729        l_frequency := 'M1';
2730 elsif (l_period_type = 'Quarter') then
2731        l_frequency := 'M3';
2732 elsif (l_period_type = 'Semi-Year') then
2733        l_frequency := 'M6';
2734 elsif (l_period_type = 'Year') then
2735        l_frequency := 'MA';
2736 end if;
2737 ---
2738 
2739 	hr_utility.trace('p_person_rec.assignment_id :'||p_person_rec.assignment_id);
2740   hr_utility.trace('g_date_paid :'||g_date_paid);
2741   hr_utility.trace('g_effective_date :'||g_effective_date);
2742 
2743   OPEN csr_asg(p_person_rec.assignment_id, g_effective_date);
2744   FETCH csr_asg INTO l_per_ni_agg_flag, l_per_agg_flag, l_asg_number;
2745   CLOSE csr_asg;
2746 
2747   hr_utility.trace('l_per_ni_agg_flag :'||l_per_ni_agg_flag);
2748   hr_utility.trace('l_per_agg_flag :'||l_per_agg_flag);
2749   hr_utility.trace('l_frequency :'||l_frequency);
2750 
2751   IF l_per_ni_agg_flag = 'Y' OR l_per_agg_flag = 'Y' THEN
2752     l_aggr_earnings   := 'Y';
2753   ELSE
2754     l_aggr_earnings:= 'N';
2755   END IF;
2756 
2757   OPEN csr_period_type_info(l_period_type);
2758   FETCH csr_period_type_info INTO l_number_per_fiscal_yr;
2759   CLOSE csr_period_type_info;
2760 
2761   hr_utility.trace('l_number_per_fiscal_yr :'||l_number_per_fiscal_yr);
2762   l_payment_month_number    := NULL;
2763   l_payment_week_number     := NULL;
2764 
2765   IF l_number_per_fiscal_yr IN (1,2,4,6,12,24) THEN
2766     l_payment_month_number  := l_period_num;
2767   ELSE
2768     l_payment_week_number := l_period_num;
2769   END IF;
2770 
2771   hr_utility.trace('l_payment_month_number :'||l_payment_month_number);
2772   hr_utility.trace('l_payment_week_number :'||l_payment_week_number);
2773   ---
2774 --New Asg Number and Old Asg Number logic starts below
2775   hr_utility.trace('p_person_rec.assignment_id :'||p_person_rec.assignment_id);
2776 
2777   OPEN csr_last_pre_pay_id(p_person_rec.assignment_id);
2778   FETCH csr_last_pre_pay_id INTO l_last_pre_pay_id;
2779   CLOSE csr_last_pre_pay_id;
2780   hr_utility.trace('l_last_pre_pay_id :'||l_last_pre_pay_id);
2781 
2782   OPEN csr_last_fps_asg_act_id(l_last_pre_pay_id, p_person_rec.assignment_id);
2783   FETCH csr_last_fps_asg_act_id INTO l_last_fps_asg_act_id;
2784   CLOSE csr_last_fps_asg_act_id;
2785   hr_utility.trace('l_last_fps_asg_act_id :'||l_last_fps_asg_act_id);
2786 
2787   OPEN csr_last_asg_num_submitted(l_last_fps_asg_act_id, p_person_rec.assignment_id);
2788   FETCH csr_last_asg_num_submitted INTO l_last_asg_num_submitted;
2789   CLOSE csr_last_asg_num_submitted;
2790   hr_utility.trace('l_last_asg_num_submitted :'||l_last_asg_num_submitted);
2791   hr_utility.trace('l_asg_number :'||l_asg_number);
2792 
2793   if (l_asg_number <> l_last_asg_num_submitted)
2794   then
2795   hr_utility.trace('Inside if asg number is changed');
2796     l_asg_number_old := l_last_asg_num_submitted;
2797     l_payroll_id_changed_indicator := 'Y';
2798   else
2799   hr_utility.trace('Inside else asg number is not changed');
2800     l_asg_number_old               := NULL;
2801     l_payroll_id_changed_indicator := NULL;
2802   end if;
2803 --New Asg Number and Old Asg Number logic ends below
2804   ---
2805   OPEN csr_ni_info(p_person_rec.assignment_id, p_start_date);
2806   FETCH csr_ni_info INTO l_ni_process_type;
2807   CLOSE csr_ni_info;
2808 
2809   hr_utility.trace('l_ni_process_type: '||l_ni_process_type);
2810 
2811   IF (l_ni_process_type     = 'DY') THEN --Director
2812     l_dir_nic_calc_method  := 'AN';
2813   elsif ((l_ni_process_type = 'DN')       --Director Normal
2814     OR (l_ni_process_type   = 'DP')       --Director Pro Rate
2815     OR (l_ni_process_type   = 'DR')       --Director Pro Rate Normal
2816     OR (l_ni_process_type   = 'PY')) THEN --Pensioner Director
2817     l_dir_nic_calc_method  := 'AL';
2818   END IF;
2819   ---
2820   OPEN csr_cat_NI_Details;
2821   FETCH csr_cat_NI_Details INTO l_dir_tax_week_num;
2822   CLOSE csr_cat_NI_Details;
2823 
2824   IF l_dir_tax_week_num IS NULL THEN
2825     OPEN csr_cat_NI;
2826     FETCH csr_cat_NI INTO l_dir_tax_week_num;
2827     CLOSE csr_cat_NI;
2828   END IF;
2829   -- Get the Irregular payment indicator, periods covered and one-off payment.
2830   OPEN csr_fetch_other_fields;
2831   FETCH csr_fetch_other_fields
2832   INTO l_periods_covered,
2833     l_irr_payment_ind,
2834     l_one_off_pay,
2835     l_asg_info_id,
2836     l_ovn_extra_info;
2837   CLOSE csr_fetch_other_fields;
2838 
2839 hr_utility.trace('l_periods_covered '||l_periods_covered);
2840 hr_utility.trace('l_irr_payment_ind '||l_irr_payment_ind);
2841 hr_utility.trace('l_one_off_pay '||l_one_off_pay);
2842 hr_utility.trace('l_asg_info_id '||l_asg_info_id);
2843 hr_utility.trace('l_ovn_extra_info '||l_ovn_extra_info);
2844 
2845 if l_periods_covered is null then
2846 l_periods_covered := get_periods_covered(p_person_rec.assignment_id);
2847 end if;
2848 
2849 if l_irr_payment_ind is null then
2850 l_irr_payment_ind := get_irregular_payment(p_person_rec.assignment_id);
2851 end if;
2852 
2853 if l_one_off_pay is null then
2854 l_one_off_pay := get_oneoff_payment(p_person_rec.assignment_id);
2855 end if;
2856 
2857 hr_utility.trace('l_periods_covered '||l_periods_covered);
2858 hr_utility.trace('l_irr_payment_ind '||l_irr_payment_ind);
2859 hr_utility.trace('l_one_off_pay '||l_one_off_pay);
2860 
2861   open csr_advance_pay_dates;
2862   fetch csr_advance_pay_dates into l_start_date, l_end_date;
2863   close csr_advance_pay_dates;
2864   hr_utility.trace('l_start_date : ' || l_start_date);
2865   hr_utility.trace('l_end_date : ' || l_end_date);
2866 
2867   if l_start_date is not null and  l_end_date is not null then
2868   hr_utility.trace('test3');
2869     select
2870     pay_advance_pay_pkg.advanced_periods(
2871     p_person_rec.assignment_id,
2872     l_start_date,
2873     l_end_date
2874     ) into l_periods_covered from dual;
2875   hr_utility.trace('test4');
2876   -- reset the periods covered value to 1
2877   elsif l_periods_covered IS NOT NULL AND l_periods_covered <> 1 THEN
2878     hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false,
2879                                                                p_object_version_number => l_ovn_extra_info,
2880                                                                p_assignment_extra_info_id => l_asg_info_id,
2881                                                                p_aei_information_category => 'GB_PAY_RTI',
2882                                                                p_aei_information1 => 1);
2883 	else
2884      l_periods_covered := 1;
2885   end if;
2886   hr_utility.trace('l_periods_covered : ' || l_periods_covered);
2887   hr_utility.trace('l_dir_tax_week_num : '|| l_dir_tax_week_num);
2888   ---
2889 
2890   IF (l_irr_payment_ind = 'Y') THEN
2891     l_frequency        := 'IR';
2892   elsif (l_one_off_pay  = 'Y') THEN
2893     l_frequency        := 'IO';
2894   END IF;
2895 
2896   OPEN csr_all_payroll_actions(p_person_rec.assignment_id, g_pre_pact_id, p_start_date, g_start_year,g_end_year);
2897   FETCH csr_all_payroll_actions
2898   INTO l_payroll_period_start_date,
2899     l_payroll_period_end_date;
2900   CLOSE csr_all_payroll_actions;
2901 
2902   open csr_terminated_date;
2903   fetch csr_terminated_date into l_person_actual_term_date;
2904   close csr_terminated_date;
2905   ---
2906   hr_utility.trace('p_end_date  : '|| p_end_date);
2907   hr_utility.trace('l_person_actual_term_date  : '|| l_person_actual_term_date);
2908 
2909   IF p_fps = 'Y' and l_person_actual_term_date is not null THEN
2910    IF l_person_actual_term_date >= l_payroll_period_start_date and l_person_actual_term_date <= l_payroll_period_end_date THEN
2911     l_payment_after_leaving := 'N';
2912    ELSE
2913     l_payment_after_leaving := 'Y';
2914    END IF;
2915   ELSE
2916     l_payment_after_leaving := 'N';
2917   END IF;
2918 
2919     l_date_of_leaving := l_person_actual_term_date;
2920 
2921 
2922 
2923   hr_utility.trace('l_date_of_leaving : '|| l_date_of_leaving);
2924   hr_utility.trace('l_starter_decl : '|| l_starter_decl);
2925   hr_utility.trace('l_asg_eff_start_date : '|| l_asg_eff_start_date);
2926   ---
2927   hr_utility.trace('Assigning values to p_fps_rec1');
2928 
2929   p_fps_rec1.assignment_id        := p_person_rec.assignment_id;
2930   p_fps_rec1.action_info_category := 'GB_RTI_FPS_ASG_DET1';
2931   p_fps_rec1.act_info1            := to_char(l_asg_eff_start_date,'YYYY-MM-DD');
2932   p_fps_rec1.act_info2            := to_char(l_date_of_leaving,'YYYY-MM-DD');
2933   p_fps_rec1.act_info3            := to_char(l_payment_date,'YYYY-MM-DD');
2934   p_fps_rec1.act_info4            := l_starter_decl;
2935   p_fps_rec1.act_info5            := l_continue_with_student_loan;
2936   p_fps_rec1.act_info6            := l_stay_over_6_months;
2937   p_fps_rec1.act_info7            := l_stay_less_6_months;
2938   p_fps_rec1.act_info8            := l_working_in_out_UK;
2939   p_fps_rec1.act_info9            := l_eea_cw_citizen;
2940   p_fps_rec1.act_info10           := l_epm6_scheme;
2941   p_fps_rec1.act_info11           := NULL; -- Recently Bereaved spouse / Civil Partner (State Pension) Not applicable
2942   p_fps_rec1.act_info12           := l_recently_bereaved;
2943   p_fps_rec1.act_info13           := l_asg_number;
2944   p_fps_rec1.act_info14           := l_payroll_id_changed_indicator;
2945   p_fps_rec1.act_info15           := l_asg_number_old;
2946   p_fps_rec1.act_info16           := l_irr_payment_ind;
2947   p_fps_rec1.act_info17           := l_frequency;
2948   p_fps_rec1.act_info18           := l_payment_week_number;
2949   p_fps_rec1.act_info19           := l_payment_month_number;
2950   p_fps_rec1.act_info20           := l_periods_covered;
2951   p_fps_rec1.act_info21           := l_aggr_earnings;
2952   p_fps_rec1.act_info22           := l_payment_after_leaving;
2953   p_fps_rec1.act_info23           := get_hours_worked(p_person_rec.assignment_id);
2954   p_fps_rec1.act_info24           := l_dir_nic_calc_method;
2955   p_fps_rec1.act_info25           := l_dir_tax_week_num;
2956   p_fps_rec1.act_info26           := l_annual_pension;
2957   p_fps_rec1.act_info27           := NULL; -- State Pension Not applicable
2958 
2959   hr_utility.set_location('Leaving: '||l_proc,999);
2960   RETURN l_arch;
2961 
2962 EXCEPTION
2963 WHEN OTHERS THEN
2964   hr_utility.set_location('Error in function fetch_fps_asg_det1 ', 15);
2965   hr_utility.trace('Exception:' || SQLCODE || ' - ' || SQLERRM );
2966   fnd_file.put_line(fnd_file.LOG,'Exception:' || SQLCODE || ' - ' || SQLERRM);
2967   RAISE;
2968 END fetch_fps_nopay_asg_det1;
2969 
2970  -- Function to fetch Assignment details for Aggregated employees (CONTEXT - GB_RTI_FPS_ASG_DET1)
2971 FUNCTION fetch_fps_aggr_asg_det1(
2972     p_start_date         IN DATE,
2973     p_end_date           IN DATE,
2974     p_assactid           IN NUMBER,
2975     p_last_asg_action_id IN NUMBER,
2976 	  p_fps                IN varchar2,
2977     p_person_rec         IN act_info_rec,
2978     p_fps_rec1 OUT nocopy act_info_rec)
2979   RETURN BOOLEAN
2980 IS
2981   l_proc CONSTANT VARCHAR2(50):= g_package||'fetch_fps_aggr_asg_det1';
2982   l_arch BOOLEAN;
2983   l_asg_id                     NUMBER;
2984 
2985   --Below cursor fetches the asg extra details of the current assignment
2986   CURSOR csr_fetch_other_fields
2987   IS
2988     SELECT AEI_INFORMATION1 periods_worked,
2989       AEI_INFORMATION3 irr_payment ,
2990       AEI_INFORMATION4 "One-Off Payment",
2991       ASSIGNMENT_EXTRA_INFO_ID,
2992       object_version_number
2993     FROM PER_ASSIGNMENT_EXTRA_INFO
2994     WHERE INFORMATION_TYPE       = 'GB_PAY_RTI'
2995     AND AEI_INFORMATION_CATEGORY = 'GB_PAY_RTI'
2996     AND assignment_id            = l_asg_id;
2997 
2998   --Below cursor fetches the starter details of the current assignment
2999   CURSOR csr_get_starter_details(p_asg_id NUMBER)
3000   IS
3001     SELECT assignment_extra_info_id,
3002       aei_information1 starter_decl,
3003       aei_information2 prev_emp_paye_ref,
3004       aei_information3 prev_tax_code,
3005       aei_information4 date_left_prev_employer,
3006       aei_information5 prev_tax_basis,
3007       aei_information6 last_payment_period_type,
3008       aei_information7 last_payment_period,
3009       aei_information8 starter_flag,
3010       aei_information10 continue_with_student_loan,
3011       aei_information8 not_paid_between,
3012       object_version_number object_version_number
3013     FROM per_assignment_extra_info
3014     WHERE assignment_id  = p_asg_id
3015     AND information_type = 'GB_RTI_ASG_DETAILS';
3016 
3017   --Below cursor fetches the pension details of the current assignment
3018   CURSOR csr_get_pensioner_details(p_asg_id NUMBER)
3019   IS
3020     SELECT assignment_extra_info_id,
3021       aei_information9 pensioner_flag,
3022       aei_information12 date_pension_started,
3023       trim(aei_information13) annual_pension,
3024       aei_information14 recently_bereaved,
3025       object_version_number object_version_number
3026     FROM per_assignment_extra_info
3027     WHERE assignment_id  = p_asg_id
3028     AND information_type = 'GB_RTI_ASG_DETAILS';
3029 
3030   --Below cursor fetches the expat details of the current assignment
3031   CURSOR csr_get_expat_details(p_asg_id NUMBER)
3032   IS
3033     SELECT assignment_extra_info_id,
3034       aei_information15 expat_statement,
3035       aei_information16 date_emp_start_uk,
3036       aei_information17 eea_cw_citizen,
3037       aei_information18 epm6_scheme,
3038       aei_information19 expat_flag,
3039       object_version_number object_version_number
3040     FROM per_assignment_extra_info
3041     WHERE assignment_id  = p_asg_id
3042     AND information_type = 'GB_RTI_ASG_DETAILS';
3043 
3044   --Below cursor fetches the assignment numbers of the current assignment
3045   CURSOR csr_get_asg_numbers
3046   IS
3047     SELECT paaf.assignment_number assignment_number,
3048       paaf_old.assignment_number old_assignment_number
3049     FROM per_all_assignments_f paaf,
3050       per_all_assignments_f paaf_old
3051     WHERE paaf.assignment_id          = l_asg_id
3052     AND ((paaf_old.assignment_id      = paaf.assignment_id
3053     AND paaf_old.effective_start_date < paaf.effective_start_date
3054     AND paaf.effective_start_date     > g_start_year
3055     AND paaf_old.effective_end_date   > g_start_year)
3056     OR (paaf.assignment_number        = paaf_old.assignment_number));
3057 
3058   --Below cursor fetches further payment details of the current assignment
3059   CURSOR csr_get_more_payment_details
3060   IS
3061     SELECT ptp.regular_payment_date,
3062       ptp.period_num,
3063       ptp.period_type
3064     FROM pay_payroll_actions ppa,
3065       pay_assignment_actions paa,
3066       per_time_periods ptp
3067     WHERE assignment_action_id = p_last_asg_action_id
3068     AND ppa.time_period_id     = ptp.time_period_id
3069     AND ppa.payroll_id         = ptp.payroll_id
3070     AND paa.payroll_action_id  = ppa.payroll_action_id;
3071 
3072   --Below cursor fetches further period type details of the current assignment
3073   CURSOR csr_period_type_info(p_period_type VARCHAR2)
3074   IS
3075     SELECT ptpt.number_per_fiscal_year
3076     FROM per_time_period_types ptpt
3077     WHERE p_period_type = ptpt.period_type;
3078 
3079   --Below cursor fetches basic ni details of the current assignment
3080   CURSOR csr_ni_info(c_asg_id NUMBER, c_asg_eff_start_date DATE)
3081   IS
3082     SELECT peevf.screen_entry_value screen_value
3083     FROM
3084       pay_element_entries_f peef,
3085       pay_element_entry_values_f peevf
3086     WHERE peef.assignment_id        = c_asg_id
3087     AND peef.element_entry_id       = peevf.element_entry_id
3088     AND peevf.input_value_id        = g_ni_pt_ivid
3089     AND peef.element_type_id        = g_ni_pt_eid
3090     AND c_asg_eff_start_date between peef.effective_start_date and peef.effective_end_date
3091     AND c_asg_eff_start_date between peevf.effective_start_date and peevf.effective_end_date;
3092 
3093   --Below cursor fetches further ni details of the current assignment
3094   CURSOR csr_cat_NI_Details
3095   IS
3096     SELECT MAX(DECODE(name,'Periods',result_value,NULL))
3097     FROM pay_assignment_actions paa ,
3098       pay_run_results prr,
3099       pay_run_result_values prrv,
3100       pay_element_types_f petf ,
3101       pay_input_values_f pivf
3102     WHERE paa.source_action_id   = p_last_asg_action_id
3103     AND paa.assignment_action_id = prr.assignment_action_id
3104     AND prr.element_type_id      = petf.element_type_id
3105     AND petf.element_name        = 'NI DETAILS'
3106     AND prr.run_result_id        = prrv.run_result_id
3107     AND prrv.input_value_id      = pivf.input_value_id;
3108 
3109   --Below cursor fetches further ni details of the current assignment
3110   CURSOR csr_cat_NI
3111   IS
3112     SELECT MAX(DECODE(name,'Periods',result_value,NULL))
3113     FROM pay_assignment_actions paa ,
3114       pay_run_results prr,
3115       pay_run_result_values prrv,
3116       pay_element_types_f petf ,
3117       pay_input_values_f pivf
3118     WHERE paa.source_action_id   = p_last_asg_action_id
3119     AND paa.assignment_action_id = prr.assignment_action_id
3120     AND prr.element_type_id      = petf.element_type_id
3121     AND petf.element_name        = 'NI'
3122     AND prr.run_result_id        = prrv.run_result_id
3123     AND prrv.input_value_id      = pivf.input_value_id;
3124 
3125   --Below cursor fetches asg details of the current assignment
3126   CURSOR csr_asg(c_asg_act_id NUMBER, c_effective_date DATE)
3127   IS
3128     SELECT trim(NVL(pap.per_information9,'N')) per_ni_agg_flag,
3129            trim(NVL(pap.per_information10,'N')) per_agg_flag,
3130            asg.assignment_number assignment_number,
3131            asg.assignment_id assignment_id
3132     FROM per_all_people_f pap,
3133          per_all_assignments_f asg,
3134          pay_assignment_actions paa
3135     WHERE paa.assignment_action_id = c_asg_act_id
3136     AND paa.assignment_id          = asg.assignment_id
3137     AND pap.person_id              = asg.person_id
3138     AND c_effective_date BETWEEN asg.effective_start_date AND asg.effective_end_date
3139     AND c_effective_date BETWEEN pap.effective_start_date AND pap.effective_end_date
3140     AND pap.per_information_category = 'GB';
3141     /*AND asg.EFFECTIVE_START_DATE     =
3142       (SELECT MAX(EFFECTIVE_START_DATE)
3143       FROM per_all_assignments_f paaf
3144       WHERE paaf.assignment_id = asg.assignment_id
3145       );*/
3146 
3147   --Below cursor fetches the period start and end dates of payrolls processed in the current prepayment
3148   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)
3149   IS
3150     SELECT
3151       /*+ USE_NL(paa, pact, ptp) */
3152       MIN(ptp.start_date) payroll_period_start_date,
3153       MAX(ptp.end_date) payroll_period_end_date
3154     FROM pay_assignment_actions paa,
3155       pay_payroll_actions pact,
3156       per_time_periods ptp,
3157       pay_assignment_actions paa1,    --Prepayments
3158       pay_payroll_actions ppa1,       --Prepayments
3159       pay_action_interlocks pai       --Prepayments
3160     WHERE paa.assignment_id   = p_asgid
3161     AND paa.payroll_action_id = pact.payroll_action_id
3162     AND pact.time_period_id   = ptp.time_period_id
3163     AND pact.action_type     IN ('Q','R','B','I','V')
3164     AND paa.action_status    IN ('C','S')
3165     AND ptp.regular_payment_date BETWEEN p_start_year AND p_end_year
3166     AND ppa1.payroll_action_id    = p_pre_pay_id
3167     AND ppa1.action_type         IN ('P','U')
3168     AND paa1.payroll_action_id    = ppa1.payroll_action_id
3169     AND paa1.assignment_action_id = pai.locking_action_id
3170     AND paa.assignment_action_id  = pai.locked_action_id;
3171 
3172 -- Cursor to fetch Termination date
3173 cursor csr_terminated_date is
3174      select serv.actual_termination_date actual_termination_date
3175      from
3176             per_all_assignments_f asg,
3177             per_periods_of_service serv
3178      where  asg.assignment_id = l_asg_id
3179      and    asg.period_of_service_id = serv.period_of_service_id
3180      and    p_end_date between asg.effective_start_date and asg.effective_end_date
3181      and    actual_termination_date <= g_effective_date
3182      and    actual_termination_date <= sysdate + 30 ;
3183 
3184   --Below cursor fetches the termination date of the current assignment
3185   CURSOR csr_get_term_asg_info (p_asg_id NUMBER)
3186   IS
3187     SELECT min(paaf.effective_start_date) min_active_start_date
3188     FROM per_all_assignments_f paaf,
3189       per_assignment_status_types past,
3190       pay_all_payrolls_f pay,
3191       hr_soft_coding_keyflex sck
3192     WHERE paaf.assignment_id           = p_asg_id
3193     AND paaf.assignment_status_type_id = past.assignment_status_type_id
3194     AND past.per_system_status        IN ('ACTIVE_ASSIGN', 'SUSP_ASSIGN')
3195     AND paaf.payroll_id = pay.payroll_id
3196     AND pay.soft_coding_keyflex_id = sck.soft_coding_keyflex_id
3197     AND upper(g_tax_ref) = upper(sck.segment1);  --Modified for the bug 16503199
3198 
3199   --Below cursor fetches the Last Pre-Payment id
3200   CURSOR csr_last_pre_pay_id (c_asg_id NUMBER)
3201   IS
3202   select ppa_prev.payroll_action_id
3203   from pay_payroll_actions ppa_prev,
3204      pay_payroll_actions ppa_current
3205   where ppa_prev.action_type IN ('P','U')
3206   and ppa_prev.payroll_id = ppa_current.payroll_id
3207   and ppa_prev.payroll_action_id < ppa_current.payroll_action_id
3208   and ppa_current.payroll_action_id = g_pre_pact_id
3209   and ppa_prev.payroll_action_id =
3210       (select max(ppa_max.payroll_action_id)
3211        from pay_payroll_actions ppa_max,
3212             pay_assignment_actions paa_max
3213        where ppa_max.payroll_id = ppa_current.payroll_id
3214        and ppa_max.payroll_action_id < ppa_current.payroll_action_id
3215        and ppa_max.action_type IN ('P','U')
3216        and ppa_max.payroll_action_id = paa_max.payroll_action_id
3217        and paa_max.assignment_id = c_asg_id );
3218 
3219   --Below cursor fetches the Previous run FPS assignment_action_id
3220   CURSOR csr_last_fps_asg_act_id (c_last_pre_pay_id NUMBER, c_asg_id NUMBER)
3221   IS
3222   select paa_fps.assignment_action_id
3223   from pay_assignment_actions paa_prepay,
3224        pay_payroll_actions ppa_prepay,
3225        pay_assignment_actions paa_fps,
3226        pay_payroll_actions ppa_fps,
3227        pay_action_interlocks pai
3228   where ppa_prepay.payroll_action_id = c_last_pre_pay_id
3229   and ppa_prepay.payroll_action_id = paa_prepay.payroll_action_id
3230   and paa_prepay.assignment_action_id = pai.locked_action_id
3231   and paa_fps.assignment_action_id = pai.locking_action_id
3232   and paa_fps.payroll_action_id = ppa_fps.payroll_action_id
3233   and ppa_fps.action_type = 'X'
3234   and paa_fps.assignment_id = c_asg_id;
3235 
3236   --Below cursor fetches the New Asg Number reported in Last FPS
3237   CURSOR csr_last_asg_num_submitted(c_last_fps_asg_act_id NUMBER, c_asg_id NUMBER)
3238   IS
3239   select ACTION_INFORMATION13
3240   from pay_action_information
3241   where action_context_id = c_last_fps_asg_act_id
3242   and action_information_category = 'GB_RTI_FPS_ASG_DET1'
3243   and assignment_id = c_asg_id;
3244 
3245 
3246   cursor csr_advance_pay_dates
3247   is
3248   select  fnd_date.canonical_to_date(max(decode(pivf.name,'Start Date',peevf.screen_entry_value,null))) start_date,
3249   fnd_date.canonical_to_date(max(decode(pivf.name,'End Date',peevf.screen_entry_value,null))) end_date
3250   from pay_element_entries_f peef,
3251 	  pay_element_entry_values_f peevf ,
3252 		pay_input_values_f pivf
3253   where
3254   peef.assignment_id = l_asg_id
3255   and peef.ELEMENT_TYPE_ID = g_adv_period_id
3256   and peef.element_entry_id = peevf.element_entry_id
3257   and peevf.input_value_id = pivf.input_value_id
3258   and pivf.element_type_id = peef.ELEMENT_TYPE_ID;
3259 
3260 --Cursor to fetch RTI Payroll ID for the assignment
3261   CURSOR csr_rti_payroll_id(cp_assignment_id  NUMBER)
3262   IS
3263   SELECT aei_information3 rti_payroll_id
3264   FROM   per_assignment_extra_info
3265   WHERE  assignment_id            = cp_assignment_id
3266   AND    aei_information_category = 'GB_RTI_AGGREGATION';
3267 
3268   -- Cursor to fetch Director details for the person
3269 	cursor csr_director is
3270 	select PER_INFORMATION2 from per_all_people_f papf
3271 	where person_id = p_person_rec.person_id
3272 	and effective_start_date =
3273 	(select max(effective_start_date)
3274 	from per_all_people_f where person_id = papf.person_id and effective_start_date <= g_effective_date);
3275 
3276   l_starter_rec csr_get_starter_details%rowtype;
3277   l_pensioner_rec csr_get_pensioner_details%rowtype;
3278   l_expat_rec csr_get_expat_details%rowtype;
3279   l_stay_over_6_months           VARCHAR2(1);
3280   l_stay_less_6_months           VARCHAR2(1);
3281   l_working_in_out_UK            VARCHAR2(1);
3282   l_asg_number                   VARCHAR2(30);
3283   l_asg_number_old               VARCHAR2(30);
3284   l_irr_payment_ind              VARCHAR2(10);
3285   l_periods_covered              VARCHAR2(10);
3286   l_one_off_pay                  VARCHAR2(10);
3287   l_payroll_id_changed_indicator VARCHAR2(1) := 'N';
3288   l_payment_date               DATE;
3289   l_period_num                 NUMBER;
3290   l_period_type                VARCHAR2(30);
3291   l_number_per_fiscal_yr       NUMBER;
3292   l_payment_month_number       NUMBER;
3293   l_payment_week_number        NUMBER;
3294   l_ni_process_type            VARCHAR2(10);
3295   l_dir_nic_calc_method        VARCHAR2(30);
3296   l_dir_tax_week_num           NUMBER;
3297   l_per_ni_agg_flag            VARCHAR2(1);
3298   l_per_agg_flag               VARCHAR2(1);
3299   l_aggr_earnings              VARCHAR2(1);
3300   l_starter_decl               VARCHAR2(30);
3301   l_continue_with_student_loan VARCHAR2(30);
3302   l_ovn                        NUMBER;
3303   l_starter_flag               VARCHAR2(1);
3304   l_pensioner_flag             VARCHAR2(1);
3305   l_expat_flag                 VARCHAR2(1);
3306   l_recently_bereaved          VARCHAR2(30);
3307   l_annual_pension             VARCHAR2(30);
3308   l_eea_cw_citizen             VARCHAR2(30);
3309   l_epm6_scheme                VARCHAR2(30);
3310   l_asg_eff_start_date         DATE;
3311   l_frequency                  VARCHAR2(30);
3312   l_payroll_period_start_date  DATE;
3313   l_payroll_period_end_date    DATE;
3314   l_person_actual_term_date  DATE;
3315   l_asg_effective_end_date     DATE;
3316   l_payment_after_leaving      VARCHAR2(1);
3317   l_date_of_leaving            DATE;
3318   l_ovn_extra_info             NUMBER;
3319   l_asg_info_id                NUMBER;
3320   l_start_date DATE;
3321   l_end_date DATE;
3322   l_last_pre_pay_id            NUMBER;
3323   l_last_fps_asg_act_id        NUMBER;
3324   l_last_asg_num_submitted     VARCHAR2(30);
3325   l_person_id                  NUMBER;
3326   l_min_active_start_date      DATE;
3327   l_rti_payroll_id             VARCHAR2(30);
3328   l_director                   VARCHAR2(1);
3329 
3330 BEGIN
3331   hr_utility.set_location('Entering: '||l_proc,1);
3332   l_arch := true;
3333 --  p_starter_set := 'N';
3334   hr_utility.trace('Start Year: '||TO_CHAR(g_start_year));
3335   hr_utility.trace('End Year: '||TO_CHAR(g_end_year));
3336   hr_utility.trace('Calling csr_get_starter_details');
3337   hr_utility.trace('p_person_rec.assignment_id: '||p_person_rec.assignment_id);
3338 --
3339 
3340   OPEN csr_get_more_payment_details;
3341   FETCH csr_get_more_payment_details
3342   INTO l_payment_date,
3343        l_period_num,
3344        l_period_type;
3345   CLOSE csr_get_more_payment_details;
3346 
3347   hr_utility.trace('l_payment_date :'||l_payment_date);
3348   hr_utility.trace('l_period_num :'||l_period_num);
3349   hr_utility.trace('l_period_type :'||l_period_type);
3350   g_date_paid:= l_payment_date;
3351 
3352   OPEN csr_asg(p_last_asg_action_id, g_date_paid);
3353   FETCH csr_asg INTO l_per_ni_agg_flag, l_per_agg_flag, l_asg_number, l_asg_id;
3354   CLOSE csr_asg;
3355 
3356   hr_utility.trace('l_per_ni_agg_flag :'||l_per_ni_agg_flag);
3357   hr_utility.trace('l_per_agg_flag :'||l_per_agg_flag);
3358   hr_utility.trace('l_asg_number :'||l_asg_number);
3359   hr_utility.trace('l_asg_id :'||l_asg_id);
3360 
3361 --
3362 
3363   OPEN csr_get_starter_details(l_asg_id);
3364   FETCH csr_get_starter_details INTO l_starter_rec;
3365   CLOSE csr_get_starter_details;
3366 
3367   l_starter_decl               := NULL;
3368   l_continue_with_student_loan := NULL;
3369   l_starter_flag               := l_starter_rec.starter_flag;
3370   g_reset_flag_type            := NULL;
3371   hr_utility.trace('Calling csr_get_starter_details1');
3372   hr_utility.trace('l_starter_flag: '||l_starter_flag);
3373   hr_utility.trace('l_starter_rec.starter_decl: '||l_starter_rec.starter_decl);
3374   hr_utility.trace(' l_starter_rec.continue_with_student_loan: '|| l_starter_rec.continue_with_student_loan);
3375 
3376   IF (l_starter_flag = 'N'
3377       AND (l_starter_rec.starter_decl IS NOT NULL
3378 	   OR l_starter_rec.continue_with_student_loan IS NOT NULL )) THEN
3379     hr_utility.trace('Calling csr_get_starter_details2');
3380     l_starter_decl               := l_starter_rec.starter_decl;
3381     l_continue_with_student_loan := l_starter_rec.continue_with_student_loan;
3382     l_ovn                        := l_starter_rec.object_version_number;
3383     hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false,
3384                                                                p_object_version_number => l_ovn,
3385                                                                p_assignment_extra_info_id => l_starter_rec.assignment_extra_info_id,
3386                                                                p_aei_information_category => 'GB_RTI_ASG_DETAILS',
3387                                                                p_aei_information8 => 'Y');
3388     g_reset_flag_type := 'STARTER';
3389     hr_utility.trace('Calling csr_get_starter_details3');
3390   END IF;
3391   ---
3392   hr_utility.trace('Calling csr_get_pensioner_details');
3393 
3394   OPEN csr_get_pensioner_details(l_asg_id);
3395   FETCH csr_get_pensioner_details INTO l_pensioner_rec;
3396   CLOSE csr_get_pensioner_details;
3397 
3398   l_recently_bereaved   := NULL;
3399   l_pensioner_flag      := l_pensioner_rec.pensioner_flag;
3400   l_annual_pension      := NULL;
3401   g_reset_flag_type     := NULL;
3402 
3403   hr_utility.trace('l_pensioner_flag: '||l_pensioner_flag);
3404   hr_utility.trace('l_pensioner_rec.pensioner_flag: '||l_pensioner_rec.pensioner_flag);
3405   hr_utility.trace('l_pensioner_rec.recently_bereaved: '||l_pensioner_rec.recently_bereaved);
3406   hr_utility.trace('l_pensioner_rec.annual_pension: '||l_pensioner_rec.annual_pension);
3407 
3408   IF (l_pensioner_flag   = 'N'
3409       AND (l_pensioner_rec.recently_bereaved IS NOT NULL
3410        OR l_pensioner_rec.annual_pension IS NOT NULL)) THEN
3411     l_starter_decl      := 'B';
3412     l_recently_bereaved := l_pensioner_rec.recently_bereaved;
3413     if  l_pensioner_rec.annual_pension is not null then
3414        l_annual_pension    := (l_pensioner_rec.annual_pension)*100;
3415     end if;
3416     l_ovn               := l_pensioner_rec.object_version_number;
3417     hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false,
3418                                                                p_object_version_number => l_ovn,
3419                                                                p_assignment_extra_info_id => l_pensioner_rec.assignment_extra_info_id,
3420                                                                p_aei_information_category => 'GB_RTI_ASG_DETAILS',
3421                                                                p_aei_information9 => 'Y');
3422     g_reset_flag_type := 'PENSIONER';
3423   END IF;
3424   ---
3425   hr_utility.trace('Calling csr_get_expat_details');
3426 
3427   OPEN csr_get_expat_details(l_asg_id);
3428   FETCH csr_get_expat_details INTO l_expat_rec;
3429   CLOSE csr_get_expat_details;
3430 
3431   l_eea_cw_citizen     := NULL;
3432   l_epm6_scheme        := NULL;
3433   l_stay_over_6_months := NULL;
3434   l_stay_less_6_months := NULL;
3435   l_working_in_out_UK  := NULL;
3436   l_expat_flag      := l_expat_rec.expat_flag;
3437 
3438   hr_utility.trace('Calling csr_get_expat_details1');
3439   hr_utility.trace('l_expat_flag: '||l_expat_flag);
3440   hr_utility.trace('l_expat_rec.eea_cw_citizen: '||l_expat_rec.eea_cw_citizen);
3441   hr_utility.trace(' l_expat_rec.epm6_scheme: '|| l_expat_rec.epm6_scheme);
3442   hr_utility.trace(' l_expat_rec.expat_statement: '|| l_expat_rec.expat_statement);
3443 
3444   g_reset_flag_type := NULL;
3445 
3446   IF (l_expat_flag   = 'N'
3447       AND (l_expat_rec.eea_cw_citizen IS NOT NULL
3448            OR l_expat_rec.epm6_scheme IS NOT NULL
3449            OR l_expat_rec.expat_statement IS NOT NULL)) THEN
3450     hr_utility.trace('Calling csr_get_expat_details2');
3451     IF l_expat_rec.expat_statement    = 'A' THEN
3452       l_stay_over_6_months           := 'Y';
3453     elsif l_expat_rec.expat_statement = 'B' THEN
3454       l_stay_less_6_months           := 'Y';
3455     elsif l_expat_rec.expat_statement = 'C' THEN
3456       l_working_in_out_UK            := 'Y';
3457     END IF;
3458 
3459     hr_utility.trace('Calling csr_get_expat_details3');
3460     l_starter_decl   := l_expat_rec.expat_statement;
3461     l_eea_cw_citizen := l_expat_rec.eea_cw_citizen;
3462     l_epm6_scheme    := l_expat_rec.epm6_scheme;
3463     l_ovn            := l_expat_rec.object_version_number;
3464     hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false,
3465                                                                p_object_version_number => l_ovn,
3466                                                                p_assignment_extra_info_id => l_expat_rec.assignment_extra_info_id,
3467                                                                p_aei_information_category => 'GB_RTI_ASG_DETAILS',
3468                                                                p_aei_information19 => 'Y');
3469     g_reset_flag_type := 'EXPAT';
3470   END IF;
3471 
3472   OPEN csr_get_term_asg_info (l_asg_id);
3473   FETCH csr_get_term_asg_info INTO l_min_active_start_date;
3474   CLOSE csr_get_term_asg_info;
3475 
3476   ---
3477 IF (l_starter_rec.starter_flag = 'N') THEN
3478   IF((l_starter_rec.starter_decl IS NOT NULL
3479       OR l_starter_rec.continue_with_student_loan IS NOT NULL)
3480       AND l_starter_rec.starter_flag = 'N')
3481 
3482   OR ((l_pensioner_rec.date_pension_started IS NOT NULL
3483        OR l_pensioner_rec.annual_pension IS NOT NULL
3484        OR l_pensioner_rec.recently_bereaved IS NOT NULL)
3485        AND l_pensioner_rec.pensioner_flag = 'N')
3486 
3487   OR ((l_expat_rec.expat_statement IS NOT NULL
3488        OR l_expat_rec.date_emp_start_uk IS NOT NULL
3489        OR l_expat_rec.eea_cw_citizen IS NOT NULL
3490        OR l_expat_rec.epm6_scheme IS NOT NULL)
3491        AND l_expat_rec.expat_flag = 'N') THEN
3492        --l_asg_eff_start_date         := p_start_date;
3493        if(l_min_active_start_date >= g_start_year) then
3494           l_asg_eff_start_date := l_min_active_start_date;
3495           hr_utility.trace('l_asg_eff_start_date assigned: '||l_asg_eff_start_date);
3496        end if;
3497   ELSE
3498        l_asg_eff_start_date := NULL;
3499        hr_utility.trace('l_asg_eff_start_date'||l_asg_eff_start_date);
3500   END IF;
3501 END IF;
3502   ---
3503 
3504 --Fix for the bug 16503199 starts here
3505 IF ((nvl(l_starter_rec.starter_flag,'N') = 'N') AND
3506     (nvl(l_pensioner_rec.pensioner_flag,'N') = 'N') AND
3507     (nvl(l_expat_rec.expat_flag,'N') = 'N') AND
3508     (l_min_active_start_date >= g_start_year)) THEN
3509           l_asg_eff_start_date := l_min_active_start_date;
3510           hr_utility.trace('New Starter l_asg_eff_start_date: '||l_asg_eff_start_date);
3511 END IF;
3512 --Fix for the bug 16503199 ends here
3513 
3514 if (l_period_type = 'Week') then
3515        l_frequency := 'W1';
3516 elsif (l_period_type = 'Bi-Month' or l_period_type = 'Bi-Week') then
3517        l_frequency := 'W2';
3518 elsif (l_period_type = 'Lunar Month') then
3519        l_frequency := 'W4';
3520 elsif (l_period_type = 'Calendar Month' or l_period_type = 'Semi-Month') then
3521        l_frequency := 'M1';
3522 elsif (l_period_type = 'Quarter') then
3523        l_frequency := 'M3';
3524 elsif (l_period_type = 'Semi-Year') then
3525        l_frequency := 'M6';
3526 elsif (l_period_type = 'Year') then
3527        l_frequency := 'MA';
3528 end if;
3529 ---
3530 
3531   hr_utility.trace('l_frequency :'||l_frequency);
3532 
3533 
3534   -- PAYE aggregation should be reported on rti payroll id which should be the primary assignment
3535   IF l_per_agg_flag = 'Y'
3536   THEN
3537      hr_utility.trace('Fetching RTI Payroll ID for the assignment : '||l_asg_id);
3538      hr_utility.trace('Assignment Number : ' || l_asg_number);
3539      OPEN csr_rti_payroll_id(l_asg_id);
3540      FETCH csr_rti_payroll_id INTO l_rti_payroll_id;
3541      IF csr_rti_payroll_id%FOUND
3542      THEN
3543        l_asg_number := l_rti_payroll_id;
3544        hr_utility.trace('RTI Payroll ID : ' || l_asg_number);
3545      ELSE
3546        hr_utility.trace('Unable to fetch the rti payroll id for assignment number ' || l_asg_number);
3547      END IF;
3548      CLOSE csr_rti_payroll_id;
3549   END IF;
3550 
3551   IF l_per_ni_agg_flag = 'Y' OR l_per_agg_flag = 'Y' THEN
3552     l_aggr_earnings   := 'Y';
3553   ELSE
3554     l_aggr_earnings:= 'N';
3555   END IF;
3556 
3557   OPEN csr_period_type_info(l_period_type);
3558   FETCH csr_period_type_info INTO l_number_per_fiscal_yr;
3559   CLOSE csr_period_type_info;
3560 
3561   hr_utility.trace('l_number_per_fiscal_yr :'||l_number_per_fiscal_yr);
3562   l_payment_month_number    := NULL;
3563   l_payment_week_number     := NULL;
3564 
3565   IF l_number_per_fiscal_yr IN (1,2,4,6,12,24) THEN
3566     l_payment_month_number  := l_period_num;
3567   ELSE
3568     l_payment_week_number := l_period_num;
3569   END IF;
3570 
3571   hr_utility.trace('l_payment_month_number :'||l_payment_month_number);
3572   hr_utility.trace('l_payment_week_number :'||l_payment_week_number);
3573   ---
3574 --New Asg Number and Old Asg Number logic starts below
3575   hr_utility.trace('l_asg_id :'||l_asg_id);
3576 
3577   OPEN csr_last_pre_pay_id(l_asg_id);
3578   FETCH csr_last_pre_pay_id INTO l_last_pre_pay_id;
3579   CLOSE csr_last_pre_pay_id;
3580   hr_utility.trace('l_last_pre_pay_id :'||l_last_pre_pay_id);
3581 
3582   OPEN csr_last_fps_asg_act_id(l_last_pre_pay_id, l_asg_id);
3583   FETCH csr_last_fps_asg_act_id INTO l_last_fps_asg_act_id;
3584   CLOSE csr_last_fps_asg_act_id;
3585   hr_utility.trace('l_last_fps_asg_act_id :'||l_last_fps_asg_act_id);
3586 
3587   OPEN csr_last_asg_num_submitted(l_last_fps_asg_act_id, l_asg_id);
3588   FETCH csr_last_asg_num_submitted INTO l_last_asg_num_submitted;
3589   CLOSE csr_last_asg_num_submitted;
3590   hr_utility.trace('l_last_asg_num_submitted :'||l_last_asg_num_submitted);
3591   hr_utility.trace('l_asg_number :'||l_asg_number);
3592 
3593   if (l_asg_number <> l_last_asg_num_submitted)
3594   then
3595   hr_utility.trace('Inside if asg number is changed');
3596     l_asg_number_old := l_last_asg_num_submitted;
3597     l_payroll_id_changed_indicator := 'Y';
3598   else
3599   hr_utility.trace('Inside else asg number is not changed');
3600     l_asg_number_old               := NULL;
3601     l_payroll_id_changed_indicator := NULL;
3602   end if;
3603 --New Asg Number and Old Asg Number logic ends below
3604   ---
3605   OPEN csr_ni_info(l_asg_id, p_start_date);
3606   FETCH csr_ni_info INTO l_ni_process_type;
3607   CLOSE csr_ni_info;
3608 
3609   hr_utility.trace('l_ni_process_type: '||l_ni_process_type);
3610 
3611   IF (l_ni_process_type     = 'DY') THEN --Director
3612     l_dir_nic_calc_method  := 'AN';
3613   elsif ((l_ni_process_type = 'DN')       --Director Normal
3614     OR (l_ni_process_type   = 'DP')       --Director Pro Rate
3615     OR (l_ni_process_type   = 'DR')       --Director Pro Rate Normal
3616     OR (l_ni_process_type   = 'PY')) THEN --Pensioner Director
3617     l_dir_nic_calc_method  := 'AL';
3618   END IF;
3619 
3620 open csr_director;
3621 fetch csr_director into l_director;
3622 close csr_director;
3623 
3624 if l_director = 'Y' then
3625   OPEN csr_cat_NI_Details;
3626   FETCH csr_cat_NI_Details INTO l_dir_tax_week_num;
3627   CLOSE csr_cat_NI_Details;
3628 
3629   IF l_dir_tax_week_num IS NULL THEN
3630     OPEN csr_cat_NI;
3631     FETCH csr_cat_NI INTO l_dir_tax_week_num;
3632     CLOSE csr_cat_NI;
3633   END IF;
3634 
3635 end if;
3636 
3637 
3638   -- Get the Irregular payment indicator, periods covered and one-off payment.
3639   OPEN csr_fetch_other_fields;
3640   FETCH csr_fetch_other_fields
3641   INTO l_periods_covered,
3642     l_irr_payment_ind,
3643     l_one_off_pay,
3644     l_asg_info_id,
3645     l_ovn_extra_info;
3646   CLOSE csr_fetch_other_fields;
3647 
3648   open csr_advance_pay_dates;
3649   fetch csr_advance_pay_dates into l_start_date, l_end_date;
3650   close csr_advance_pay_dates;
3651   hr_utility.trace('l_start_date : ' || l_start_date);
3652   hr_utility.trace('l_end_date : ' || l_end_date);
3653 
3654   if l_start_date is not null and  l_end_date is not null then
3655   hr_utility.trace('test3');
3656     select
3657     pay_advance_pay_pkg.advanced_periods(
3658     l_asg_id,
3659     l_start_date,
3660     l_end_date
3661     ) into l_periods_covered from dual;
3662   hr_utility.trace('test4');
3663   -- reset the periods covered value to 1
3664   elsif l_periods_covered IS NOT NULL AND l_periods_covered <> 1 THEN
3665     hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false,
3666                                                                p_object_version_number => l_ovn_extra_info,
3667                                                                p_assignment_extra_info_id => l_asg_info_id,
3668                                                                p_aei_information_category => 'GB_PAY_RTI',
3669                                                                p_aei_information1 => 1);
3670 	else
3671      l_periods_covered := 1;
3672   end if;
3673   hr_utility.trace('l_periods_covered : ' || l_periods_covered);
3674   hr_utility.trace('l_dir_tax_week_num : '|| l_dir_tax_week_num);
3675   ---
3676 
3677   IF (l_irr_payment_ind = 'Y') THEN
3678     l_frequency        := 'IR';
3679   elsif (l_one_off_pay  = 'Y') THEN
3680     l_frequency        := 'IO';
3681   END IF;
3682 
3683   OPEN csr_all_payroll_actions(l_asg_id, g_pre_pact_id, p_start_date, g_start_year,g_end_year);
3684   FETCH csr_all_payroll_actions
3685   INTO l_payroll_period_start_date,
3686     l_payroll_period_end_date;
3687   CLOSE csr_all_payroll_actions;
3688 
3689   OPEN csr_terminated_date;
3690   FETCH csr_terminated_date INTO l_person_actual_term_date;
3691   CLOSE csr_terminated_date;
3692   ---
3693 
3694   IF p_fps = 'Y' and l_person_actual_term_date is not null THEN
3695    IF l_person_actual_term_date >= l_payroll_period_start_date and l_person_actual_term_date <= l_payroll_period_end_date THEN
3696     l_payment_after_leaving := 'N';
3697    ELSE
3698     l_payment_after_leaving := 'Y';
3699    END IF;
3700   ELSE
3701     l_payment_after_leaving := 'N';
3702   END IF;
3703 
3704 /*
3705   IF (l_asg_effective_end_date > l_payroll_period_start_date
3706       AND l_asg_effective_end_date < l_payroll_period_end_date ) THEN
3707     l_date_of_leaving := l_asg_effective_end_date;
3708   ELSE
3709     l_date_of_leaving := NULL;
3710   END IF;
3711 */
3712 /*
3713   IF l_payment_after_leaving = 'Y' THEN
3714     l_date_of_leaving := l_person_actual_term_date;
3715   ELSE
3716     l_date_of_leaving := NULL;
3717   END IF;
3718 */
3719 
3720   l_date_of_leaving := l_person_actual_term_date;
3721 
3722 
3723 -- If Date of Leaving is less then Start of the Previous Tax Year
3724 -- Updating it to Payment Date as Validation rule will fail
3725 if l_date_of_leaving is not null and l_date_of_leaving < (add_months(g_end_year,-24)+1) then
3726 	l_date_of_leaving := l_payment_date;
3727 end if;
3728 
3729 
3730   hr_utility.trace('l_date_of_leaving : '|| l_date_of_leaving);
3731   hr_utility.trace('l_starter_decl : '|| l_starter_decl);
3732   hr_utility.trace('l_asg_eff_start_date : '|| l_asg_eff_start_date);
3733   ---
3734   hr_utility.trace('Assigning values to p_fps_rec1');
3735 
3736   p_fps_rec1.assignment_id        := l_asg_id;
3737   p_fps_rec1.action_info_category := 'GB_RTI_FPS_ASG_DET1';
3738   p_fps_rec1.act_info1            := to_char(l_asg_eff_start_date,'YYYY-MM-DD');
3739   p_fps_rec1.act_info2            := to_char(l_date_of_leaving,'YYYY-MM-DD');
3740   p_fps_rec1.act_info3            := to_char(l_payment_date,'YYYY-MM-DD');
3741   p_fps_rec1.act_info4            := l_starter_decl;
3742   p_fps_rec1.act_info5            := l_continue_with_student_loan;
3743   p_fps_rec1.act_info6            := l_stay_over_6_months;
3744   p_fps_rec1.act_info7            := l_stay_less_6_months;
3745   p_fps_rec1.act_info8            := l_working_in_out_UK;
3746   p_fps_rec1.act_info9            := l_eea_cw_citizen;
3747   p_fps_rec1.act_info10           := l_epm6_scheme;
3748   p_fps_rec1.act_info11           := NULL; -- Recently Bereaved spouse / Civil Partner (State Pension) Not applicable
3749   p_fps_rec1.act_info12           := l_recently_bereaved;
3750   p_fps_rec1.act_info13           := l_asg_number;
3751   p_fps_rec1.act_info14           := l_payroll_id_changed_indicator;
3752   p_fps_rec1.act_info15           := l_asg_number_old;
3753   p_fps_rec1.act_info16           := l_irr_payment_ind;
3754   p_fps_rec1.act_info17           := l_frequency;
3755   p_fps_rec1.act_info18           := l_payment_week_number;
3756   p_fps_rec1.act_info19           := l_payment_month_number;
3757   p_fps_rec1.act_info20           := l_periods_covered;
3758   p_fps_rec1.act_info21           := l_aggr_earnings;
3759   p_fps_rec1.act_info22           := l_payment_after_leaving;
3760   p_fps_rec1.act_info23           := get_hours_worked(l_asg_id);
3761   p_fps_rec1.act_info24           := l_dir_nic_calc_method;
3762   p_fps_rec1.act_info25           := l_dir_tax_week_num;
3763   p_fps_rec1.act_info26           := l_annual_pension;
3764   p_fps_rec1.act_info27           := NULL; -- State Pension Not applicable
3765 
3766   hr_utility.set_location('Leaving: '||l_proc,999);
3767   RETURN l_arch;
3768 
3769 EXCEPTION
3770 WHEN OTHERS THEN
3771   hr_utility.set_location('Error in function fetch_fps_aggr_asg_det1 ', 15);
3772   hr_utility.trace('Exception:' || SQLCODE || ' - ' || SQLERRM );
3773   fnd_file.put_line(fnd_file.LOG,'Exception:' || SQLCODE || ' - ' || SQLERRM);
3774   RAISE;
3775 END fetch_fps_aggr_asg_det1;
3776 --
3777 
3778 function get_eff_start_date (asg_id number,eff_date date,l_tax_ref varchar2)
3779 return date is
3780 l_eff_date date;
3781 cursor csr_get_start_date is
3782 select paaf.effective_start_date from
3783 per_all_assignments_f paaf,
3784 pay_all_payrolls_f papf ,
3785 hr_soft_coding_keyflex flex,
3786 per_assignment_status_types past
3787 where paaf.assignment_id = asg_id and paaf.effective_end_date = eff_date - 1
3788 and papf.payroll_id = paaf.payroll_id
3789 and flex.SOFT_CODING_KEYFLEX_ID = papf.SOFT_CODING_KEYFLEX_ID
3790 and upper(l_tax_ref) = upper(flex.segment1)
3791 and paaf.assignment_status_type_id = past.assignment_status_type_id
3792                     and past.per_system_status in ('ACTIVE_ASSIGN', 'SUSP_ASSIGN', 'TERM_ASSIGN'); --Bug: 16276411
3793 begin
3794   open csr_get_start_date;
3795   fetch csr_get_start_date into l_eff_date;
3796   if csr_get_start_date%notfound then
3797 		close csr_get_start_date;
3798 		return eff_date;
3799   else
3800     close csr_get_start_date;
3801     l_eff_date := get_eff_start_date(asg_id,l_eff_date,l_tax_ref);
3802     return l_eff_date;
3803   end if;
3804 end;
3805 
3806 procedure fetch_tax_code_basis(
3807     p_last_asg_action_id IN NUMBER,
3808     p_tax_code  OUT nocopy varchar2,
3809     p_tax_basis  OUT nocopy varchar2)
3810 
3811 IS
3812 
3813   l_proc              CONSTANT VARCHAR2(50):= g_package||'fetch_tax_code_basis';
3814   l_paye_rr_id   number;
3815   l_paye_details_rr_id number;
3816 
3817 
3818   CURSOR csr_max_run_result(p_assignment_action_id number,p_element_id number) IS
3819   SELECT max(prr.RUN_RESULT_ID)
3820   FROM pay_run_results prr
3821   WHERE prr.ASSIGNMENT_ACTION_ID = p_assignment_action_id
3822   AND prr.ELEMENT_TYPE_ID = p_element_id
3823   AND prr.status in ('P','PA');
3824 
3825 
3826   CURSOR csr_run_result(p_run_result_id number,p_element_type_id number) IS
3827   SELECT  max(decode(name,'Tax Code',result_value,NULL)) tax_code,
3828           MAX(DECODE(name,'Tax Basis',DECODE(result_value,'N','Y',NULL),NULL)) tax_basis
3829   FROM pay_input_values_f v,
3830        pay_run_result_values rrv
3831   WHERE rrv.run_result_id = p_run_result_id
3832     AND v.input_value_id = rrv.input_value_id
3833     AND v.element_type_id = p_element_type_id;
3834 
3835 
3836 BEGIN
3837 
3838   hr_utility.set_location('Entering: '||l_proc,1);
3839   hr_utility.set_location('Assignment_action_id :' || p_last_asg_action_id,15);
3840 
3841   ---
3842 
3843 	open csr_max_run_result(p_last_asg_action_id,g_paye_element_id);
3844     fetch csr_max_run_result into l_paye_rr_id;
3845     close csr_max_run_result;
3846 
3847     open csr_max_run_result(p_last_asg_action_id,g_paye_details_id);
3848     fetch csr_max_run_result into l_paye_details_rr_id;
3849     close csr_max_run_result;
3850 
3851     hr_utility.trace('Fetching run result 1');
3852     -- 1. First we try to fetch it from the latest PAYE run results
3853     open csr_run_result(l_paye_rr_id, g_paye_element_id);
3854     fetch csr_run_result into p_tax_code,p_tax_basis;
3855     close csr_run_result;
3856     -- 2. Tax code is not found, fetch from the latest PAYE Details run results
3857     if p_tax_code is null then
3858        hr_utility.trace('Fetching run result 2');
3859        open csr_run_result(l_paye_details_rr_id, g_paye_details_id);
3860        fetch csr_run_result into p_tax_code,p_tax_basis;
3861        close csr_run_result;
3862 
3863     end if;
3864 
3865    hr_utility.trace('Tax Code '||p_tax_code||' Tax Basis '||p_tax_basis);
3866 
3867 exception
3868 when others then
3869 	hr_utility.trace(SQLCODE || ' - ' || sqlerrm );
3870 end fetch_tax_code_basis;
3871 
3872 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)
3873 return boolean
3874 is
3875 
3876 cursor csr_terminated_emp is
3877      select serv.actual_termination_date actual_termination_date
3878      from
3879             per_all_assignments_f asg,
3880             per_periods_of_service serv
3881      where  asg.assignment_id = p_asg_id
3882 	   and    serv.actual_termination_date is not null
3883      and    asg.period_of_service_id = serv.period_of_service_id
3884      and    p_payment_date between asg.effective_start_date and asg.effective_end_date;
3885 
3886 cursor csr_get_start_date is
3887 		select paaf.effective_start_date,paaf.effective_end_date
3888 		from per_all_assignments_f paaf
3889 		where paaf.assignment_id = p_asg_id
3890 		and p_payment_date between paaf.effective_start_date and paaf.effective_end_date;
3891 
3892 cursor csr_get_starter is
3893     SELECT aei_information8 starter_flag , aei_information1 starter_decl
3894     FROM per_assignment_extra_info
3895     WHERE assignment_id  = p_asg_id
3896     AND information_type = 'GB_RTI_ASG_DETAILS';
3897 
3898 l_eff_start_date date;
3899 l_eff_end_date date;
3900 l_termination_date date;
3901 l_starter_flag varchar2(1);
3902 l_starter_declaration varchar2(1);
3903 
3904 begin
3905 hr_utility.trace('Fetching First FPS Details');
3906 
3907 open csr_get_starter;
3908 fetch csr_get_starter into l_starter_flag,l_starter_declaration;
3909 hr_utility.trace('Fetching First FPS Details l_starter_flag: '||l_starter_flag);
3910 hr_utility.trace('Fetching First FPS Details l_starter_declaration: '||l_starter_declaration);
3911 close csr_get_starter;
3912 
3913 if l_starter_flag = 'Y' and p_starter_set = 'N' then
3914   hr_utility.trace('RTI Sent flag is already set.');
3915 	p_fps_rec1.act_info1 := NULL;
3916 	p_fps_rec1.act_info4 := NULL;
3917 
3918 else
3919 
3920 open csr_get_start_date;
3921 fetch csr_get_start_date into l_eff_start_date,l_eff_end_date;
3922 close csr_get_start_date;
3923 
3924 l_eff_start_date  := get_eff_start_date(p_asg_id,l_eff_start_date,p_tax_ref);
3925 
3926 if l_eff_start_date >= p_tax_year_start and l_eff_start_date <= p_effective_date then
3927 p_fps_rec1.act_info1 := to_char(l_eff_start_date,'YYYY-MM-DD');
3928 p_fps_rec1.act_info4 := l_starter_declaration;
3929 else p_fps_rec1.act_info1 := NULL;
3930 end if;
3931 
3932 end if; --Starter_flag check ends
3933 
3934 open csr_terminated_emp;
3935 fetch csr_terminated_emp into l_termination_date;
3936 close csr_terminated_emp;
3937 
3938 if l_termination_date is not null then
3939 if l_termination_date >= p_tax_year_start and l_termination_date <= p_effective_date then
3940 p_fps_rec1.act_info2 := to_char(l_termination_date,'YYYY-MM-DD');
3941 else
3942 p_fps_rec1.act_info2 := to_char(p_payment_date,'YYYY-MM-DD');
3943 end if;
3944 end if;
3945 
3946 hr_utility.trace('l_eff_start_date = '||l_eff_start_date);
3947 hr_utility.trace('l_eff_end_date = '||l_eff_end_date);
3948 hr_utility.trace('p_fps_rec1.act_info1 = '||p_fps_rec1.act_info1);
3949 hr_utility.trace('p_fps_rec1.act_info2 = '||p_fps_rec1.act_info2);
3950 return true;
3951 end;
3952 
3953 -- Function to fetch Assignment details (CONTEXT - GB_RTI_FPS_ASG_DET2)
3954 FUNCTION fetch_first_fps_asg_det2(
3955     p_last_asg_action_id IN NUMBER,
3956     p_asg_id             IN NUMBER,
3957     p_effective_date     in date,
3958     p_fps_bal_context_2  OUT nocopy act_info_rec )
3959   RETURN BOOLEAN
3960 IS
3961 
3962   l_context_lst pay_balance_pkg.t_context_tab;           -- used for batch balance retrieval
3963   l_output_table pay_balance_pkg.t_detailed_bal_out_tab; -- output of batch balance retrieval
3964   l_proc              CONSTANT VARCHAR2(50):= g_package||'fetch_first_fps_asg_det2';
3965   l_asg_primary_flag  VARCHAR2(1);
3966   l_per_agg_flag      VARCHAR2(1);
3967   l_aggr_archive_flag VARCHAR2(1);
3968   l_last_chld_act_id  NUMBER;
3969   l_arch BOOLEAN;
3970 
3971   CURSOR csr_asg(c_asg_id NUMBER)
3972   IS
3973     SELECT trim(asg.primary_flag) asg_primary_flag,
3974       trim(pap.per_information10) per_agg_flag
3975     FROM per_all_people_f pap,
3976       per_all_assignments_f asg
3977     WHERE asg.assignment_id       = c_asg_id
3978     AND pap.person_id             = asg.person_id
3979     AND p_effective_date BETWEEN asg.effective_start_date AND asg.effective_end_date
3980     AND p_effective_date BETWEEN pap.effective_start_date AND pap.effective_end_date;
3981 
3982 	cursor csr_tax_code_basis is
3983   SELECT  max(decode(iv.name,'Tax Code',screen_entry_value)),
3984           decode(max(decode(iv.name,'Tax Basis',screen_entry_value)),'N','Y',NULL)
3985   FROM  pay_element_entries_f e,
3986         pay_element_entry_values_f v,
3987         pay_input_values_f iv,
3988         pay_element_links_f link
3989   WHERE e.assignment_id = p_asg_id
3990   AND   link.element_type_id = g_paye_details_id
3991   AND   e.element_link_id = link.element_link_id
3992   AND   e.element_entry_id = v.element_entry_id
3993   AND   iv.input_value_id = v.input_value_id
3994   AND   e.effective_end_date BETWEEN link.effective_start_date AND link.effective_end_date
3995   AND   e.effective_end_date BETWEEN iv.effective_start_date AND iv.effective_end_date
3996   AND   e.effective_end_date BETWEEN v.effective_start_date AND v.effective_end_date
3997   AND   e.effective_end_date = (select max(e1.effective_end_date)
3998                                 from   pay_element_entries_f  e1,
3999                                        pay_element_links_f    link1
4000                                 where  link1.element_type_id = g_paye_details_id
4001                                 and    e1.assignment_id = p_asg_id
4002                                 and    e1.element_link_id = link1.element_link_id);
4003 
4004 CURSOR csr_child_act_id(c_lst_act_id NUMBER)     --   kvinayku
4005   IS
4006     SELECT NVL(MAX(ASSIGNMENT_ACTION_ID),c_lst_act_id)
4007     FROM pay_assignment_actions
4008     WHERE SOURCE_ACTION_ID = c_lst_act_id;
4009 
4010  CURSOR csr_tax_paye_result(p_action_id NUMBER)   --  kvinayku
4011   IS
4012    SELECT MAX(DECODE(name,'Tax Code',prrv.result_value,NULL)),
4013       MAX(DECODE(name,'Tax Basis',DECODE(prrv.result_value,'N','Y',NULL),NULL))
4014     FROM pay_run_results prr ,
4015       pay_run_result_values prrv ,
4016       pay_input_values_f pivf
4017     WHERE prr.assignment_action_id = p_action_id
4018     AND prr.ELEMENT_TYPE_ID        = g_paye_element_id
4019     AND prrv.run_result_id         = prr.run_result_id
4020     AND pivf.INPUT_VALUE_ID        = prrv.INPUT_VALUE_ID;
4021 
4022 l_tax_code varchar2(10);
4023 l_tax_basis varchar2(1);
4024 
4025 BEGIN
4026   l_arch := true;
4027 
4028   hr_utility.set_location('Entering: '||l_proc,1);
4029   l_context_lst(1).tax_unit_id       :=NULL;
4030   l_context_lst(1).jurisdiction_code :=NULL;
4031   l_context_lst(1).source_id         :=NULL;
4032   l_context_lst(1).source_text       :=NULL;
4033   l_context_lst(1).source_number     :=NULL;
4034   l_context_lst(1).source_text2      :=NULL;
4035   l_context_lst(1).time_def_id       :=NULL;
4036   l_context_lst(1).balance_date      :=NULL;
4037   l_context_lst(1).local_unit_id     :=NULL;
4038   l_context_lst(1).source_number2    :=NULL;
4039   l_context_lst(1).organization_id   :=NULL;
4040 
4041   hr_utility.set_location('Assignment_id :' || p_asg_id,15);
4042   l_asg_primary_flag  := 'N';
4043   l_per_agg_flag      := 'N';
4044   l_aggr_archive_flag := 'N';
4045 
4046   OPEN csr_asg(p_asg_id);
4047   FETCH csr_asg INTO l_asg_primary_flag, l_per_agg_flag;
4048   CLOSE csr_asg;
4049 
4050   hr_utility.set_location('l_asg_primary_flag :' || l_asg_primary_flag,15);
4051   hr_utility.set_location('l_per_agg_flag     :' || l_per_agg_flag,15);
4052 /*
4053   IF NVL(l_per_agg_flag,'N')       = 'Y' THEN
4054     IF NVL(l_asg_primary_flag,'N') = 'Y' THEN
4055       hr_utility.trace('Aggregation Found.');
4056       l_aggr_archive_flag := 'Y';
4057     END IF;
4058   END IF;
4059 */
4060   hr_utility.set_location('l_aggr_archive_flag :' || l_aggr_archive_flag,15);
4061   ---
4062 
4063 --  IF (l_aggr_archive_flag = 'N' AND NVL(l_per_agg_flag,'N') = 'N') THEN
4064     hr_utility.trace('l_aggr_archive_flag = N');
4065     -- Get the child assignment action id to Archive Tax code and Tax basis.
4066     -- As the run results are generated with child assignment action id.
4067 
4068 -- added by kvinayku   start
4069 OPEN csr_child_act_id(p_last_asg_action_id);
4070     FETCH csr_child_act_id INTO l_last_chld_act_id;
4071     CLOSE csr_child_act_id;
4072 
4073 --Tax code fix start
4074   /*  OPEN csr_tax_paye_result(l_last_chld_act_id);
4075     FETCH csr_tax_paye_result
4076     INTO p_fps_bal_context_2.act_info25,
4077          p_fps_bal_context_2.act_info27;
4078     CLOSE csr_tax_paye_result;
4079 
4080 if p_fps_bal_context_2.act_info27 is null then
4081 open csr_tax_code_basis;
4082 fetch csr_tax_code_basis into p_fps_bal_context_2.act_info25,
4083          p_fps_bal_context_2.act_info27;
4084 close csr_tax_code_basis;
4085 end if; */
4086 
4087 fetch_tax_code_basis(l_last_chld_act_id,
4088 	p_fps_bal_context_2.act_info25,p_fps_bal_context_2.act_info27);
4089 
4090 	if p_fps_bal_context_2.act_info25 is null then
4091 	open csr_tax_code_basis;
4092 	fetch csr_tax_code_basis into p_fps_bal_context_2.act_info25,
4093          p_fps_bal_context_2.act_info27;
4094 	close csr_tax_code_basis;
4095 	end if;
4096 
4097 --Tax code fix end
4098 
4099 hr_utility.trace('Tax Code '||p_fps_bal_context_2.act_info25||' Tax Basis '||p_fps_bal_context_2.act_info27);
4100 
4101 --p_fps_bal_context_2.act_info25 := l_tax_code;
4102 --p_fps_bal_context_2.act_info27 := l_tax_basis;
4103 
4104 --  added by kvinayku end
4105 
4106     pay_balance_pkg.get_value(p_assignment_action_id => p_last_asg_action_id ,
4107                               p_defined_balance_lst => g_defined_balance_lst ,
4108                               p_context_lst => l_context_lst ,
4109                               p_output_table => l_output_table );
4110     hr_utility.trace('After invoking get_value');
4111     p_fps_bal_context_2.assignment_id        := p_asg_id;
4112     p_fps_bal_context_2.action_info_category := 'GB_RTI_FPS_ASG_DET2';
4113     hr_utility.trace('Before entering for i in 1..g_fps_bal_det_tab.last loop');
4114 
4115     FOR outer_rec IN 1..l_output_table.count
4116     LOOP
4117 
4118 	 IF l_output_table(outer_rec).balance_value is not null then -- Null Check
4119 
4120       FOR inner_rec IN 1..g_fps_bal_det_tab.last
4121       LOOP
4122         IF (g_fps_bal_det_tab(inner_rec).defined_balance_id         = l_output_table(outer_rec).defined_balance_id) THEN
4123           IF g_fps_bal_det_tab(inner_rec).balance_name              = 'Taxable Pay' THEN
4124             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_TD_YTD' ) THEN
4125               g_fps_bal_det_tab(inner_rec).balance_value           := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4126               p_fps_bal_context_2.act_info1                        := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4127             END IF;
4128           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'PAYE' THEN
4129             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_TD_YTD') THEN
4130               g_fps_bal_det_tab(inner_rec).balance_value           := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4131               p_fps_bal_context_2.act_info2                        := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4132             END IF;
4133           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'Student Loan' THEN
4134             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_TD_YTD') THEN
4135               g_fps_bal_det_tab(inner_rec).balance_value           := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4136               p_fps_bal_context_2.act_info3                        := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4137             END IF;
4138           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'NI Employer' THEN
4139             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_TD_YTD') THEN
4140               g_fps_bal_det_tab(inner_rec).balance_value           := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4141               p_fps_bal_context_2.act_info4                        := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4142             END IF;
4143             --  This is for newly created balances
4144           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'Earnings Free of Tax' THEN
4145             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
4146               g_fps_bal_det_tab(inner_rec).balance_value         := 100                                  * NVL(l_output_table(outer_rec).balance_value,0);
4147               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);
4148             END IF;
4149           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'Earnings Free of NI' THEN
4150             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_TD_YTD') THEN
4151               g_fps_bal_det_tab(inner_rec).balance_value           := 100                                  * NVL(l_output_table(outer_rec).balance_value,0);
4152               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);
4153             END IF;
4154           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SSP Total' THEN
4155             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
4156               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4157               p_fps_bal_context_2.act_info18                     := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4158             END IF;
4159           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SMP Total' THEN
4160             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
4161               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4162               p_fps_bal_context_2.act_info19                     := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4163             END IF;
4164           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SPP Adoption Total' THEN
4165             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
4166               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4167               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);
4168             END IF;
4169           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SPP Birth Total' THEN
4170             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
4171               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4172               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);
4173             END IF;
4174 
4175           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SAP Total' THEN
4176             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
4177               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4178               p_fps_bal_context_2.act_info21                     := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4179             END IF;
4180           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'ASPP Adoption Total' THEN
4181             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
4182               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4183               p_fps_bal_context_2.act_info22                     := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4184             END IF;
4185          elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'ASPP Birth Total' THEN
4186             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
4187               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4188               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);
4189             END IF;
4190 
4191           END IF;
4192         END IF;
4193       END LOOP;
4194       hr_utility.trace('After for i in 1..g_fps_bal_det_tab.last loop');
4195 	 END IF; --Not null check ends
4196     END LOOP;
4197  p_fps_bal_context_2.act_info17    := 0; -- Tax Deducted refunded
4198 --  END IF;
4199 
4200  hr_utility.trace(p_asg_id||'Leaving  asg2 details function ');
4201 
4202   RETURN l_arch;
4203 
4204 EXCEPTION
4205 WHEN OTHERS THEN
4206   hr_utility.set_location('Error in function fetch_fps_asg_det2 ', 15);
4207   hr_utility.trace('Exception:' || SQLCODE || ' - ' || SQLERRM );
4208   fnd_file.put_line(fnd_file.LOG,'Exception:' || SQLCODE || ' - ' || SQLERRM);
4209   RAISE;
4210 
4211 END fetch_first_fps_asg_det2;
4212 
4213 -- Below function is to fetch Assignment details (CONTEXT - GB_RTI_FPS_ASG_DET2).
4214 -- This function is used for PAYE Aggregated scenarios processed as part of First FPS.
4215 
4216 FUNCTION fetch_first_fps_agg_asg_det2(
4217     p_last_asg_action_id IN NUMBER,
4218     p_asg_id             IN NUMBER,
4219     p_effective_date     in date,
4220     p_fps_bal_context_2  OUT nocopy act_info_rec )
4221   RETURN BOOLEAN
4222 IS
4223 
4224   l_context_lst pay_balance_pkg.t_context_tab;           -- used for batch balance retrieval
4225   l_output_table pay_balance_pkg.t_detailed_bal_out_tab; -- output of batch balance retrieval
4226   l_proc              CONSTANT VARCHAR2(50):= g_package||'fetch_first_fps_agg_asg_det2';
4227   l_asg_primary_flag  VARCHAR2(1);
4228   l_per_agg_flag      VARCHAR2(1);
4229   l_aggr_archive_flag VARCHAR2(1);
4230   l_last_chld_act_id  NUMBER;
4231   l_arch BOOLEAN;
4232 
4233   CURSOR csr_asg(c_asg_id NUMBER)
4234   IS
4235     SELECT trim(asg.primary_flag) asg_primary_flag,
4236       trim(pap.per_information10) per_agg_flag
4237     FROM per_all_people_f pap,
4238       per_all_assignments_f asg
4239     WHERE asg.assignment_id       = c_asg_id
4240     AND pap.person_id             = asg.person_id
4241     AND p_effective_date BETWEEN asg.effective_start_date AND asg.effective_end_date
4242     AND p_effective_date BETWEEN pap.effective_start_date AND pap.effective_end_date;
4243 
4244 	cursor csr_tax_code_basis is
4245   SELECT  max(decode(iv.name,'Tax Code',screen_entry_value)),
4246           decode(max(decode(iv.name,'Tax Basis',screen_entry_value)),'N','Y',NULL)
4247   FROM  pay_element_entries_f e,
4248         pay_element_entry_values_f v,
4249         pay_input_values_f iv,
4250         pay_element_links_f link
4251   WHERE e.assignment_id = p_asg_id
4252   AND   link.element_type_id = g_paye_details_id
4253   AND   e.element_link_id = link.element_link_id
4254   AND   e.element_entry_id = v.element_entry_id
4255   AND   iv.input_value_id = v.input_value_id
4256   AND   e.effective_end_date BETWEEN link.effective_start_date AND link.effective_end_date
4257   AND   e.effective_end_date BETWEEN iv.effective_start_date AND iv.effective_end_date
4258   AND   e.effective_end_date BETWEEN v.effective_start_date AND v.effective_end_date
4259   AND   e.effective_end_date = (select max(e1.effective_end_date)
4260                                 from   pay_element_entries_f  e1,
4261                                        pay_element_links_f    link1
4262                                 where  link1.element_type_id = g_paye_details_id
4263                                 and    e1.assignment_id = p_asg_id
4264                                 and    e1.element_link_id = link1.element_link_id);
4265 
4266 CURSOR csr_child_act_id(c_lst_act_id NUMBER)     --   kvinayku
4267   IS
4268     SELECT NVL(MAX(ASSIGNMENT_ACTION_ID),c_lst_act_id)
4269     FROM pay_assignment_actions
4270     WHERE SOURCE_ACTION_ID = c_lst_act_id;
4271 
4272  CURSOR csr_tax_paye_result(p_action_id NUMBER)   --  kvinayku
4273   IS
4274    SELECT MAX(DECODE(name,'Tax Code',prrv.result_value,NULL)),
4275       MAX(DECODE(name,'Tax Basis',DECODE(prrv.result_value,'N','Y',NULL),NULL))
4276     FROM pay_run_results prr ,
4277       pay_run_result_values prrv ,
4278       pay_input_values_f pivf
4279     WHERE prr.assignment_action_id = p_action_id
4280     AND prr.ELEMENT_TYPE_ID        = g_paye_element_id
4281     AND prrv.run_result_id         = prr.run_result_id
4282     AND pivf.INPUT_VALUE_ID        = prrv.INPUT_VALUE_ID;
4283 
4284 l_tax_code varchar2(10);
4285 l_tax_basis varchar2(1);
4286 
4287 BEGIN
4288   l_arch := true;
4289 
4290   hr_utility.set_location('Entering: '||l_proc,1);
4291   l_context_lst(1).tax_unit_id       :=NULL;
4292   l_context_lst(1).jurisdiction_code :=NULL;
4293   l_context_lst(1).source_id         :=NULL;
4294   l_context_lst(1).source_text       :=NULL;
4295   l_context_lst(1).source_number     :=NULL;
4296   l_context_lst(1).source_text2      :=NULL;
4297   l_context_lst(1).time_def_id       :=NULL;
4298   l_context_lst(1).balance_date      :=NULL;
4299   l_context_lst(1).local_unit_id     :=NULL;
4300   l_context_lst(1).source_number2    :=NULL;
4301   l_context_lst(1).organization_id   :=NULL;
4302 
4303   hr_utility.set_location('Assignment_id :' || p_asg_id,15);
4304   l_asg_primary_flag  := 'N';
4305   l_per_agg_flag      := 'N';
4306   l_aggr_archive_flag := 'N';
4307 
4308   OPEN csr_asg(p_asg_id);
4309   FETCH csr_asg INTO l_asg_primary_flag, l_per_agg_flag;
4310   CLOSE csr_asg;
4311 
4312   hr_utility.set_location('l_asg_primary_flag :' || l_asg_primary_flag,15);
4313   hr_utility.set_location('l_per_agg_flag     :' || l_per_agg_flag,15);
4314 
4315 OPEN csr_child_act_id(p_last_asg_action_id);
4316     FETCH csr_child_act_id INTO l_last_chld_act_id;
4317     CLOSE csr_child_act_id;
4318 
4319 --Tax code fix start
4320   /*  OPEN csr_tax_paye_result(l_last_chld_act_id);
4321     FETCH csr_tax_paye_result
4322     INTO p_fps_bal_context_2.act_info25,
4323          p_fps_bal_context_2.act_info27;
4324     CLOSE csr_tax_paye_result;
4325 
4326 if p_fps_bal_context_2.act_info27 is null then
4327 open csr_tax_code_basis;
4328 fetch csr_tax_code_basis into p_fps_bal_context_2.act_info25,
4329          p_fps_bal_context_2.act_info27;
4330 close csr_tax_code_basis;
4331 end if; */
4332 
4333 fetch_tax_code_basis(l_last_chld_act_id,
4334 	p_fps_bal_context_2.act_info25,p_fps_bal_context_2.act_info27);
4335 
4336 	if p_fps_bal_context_2.act_info25 is null then
4337 		open csr_tax_code_basis;
4338 		fetch csr_tax_code_basis into p_fps_bal_context_2.act_info25,
4339          p_fps_bal_context_2.act_info27;
4340 		close csr_tax_code_basis;
4341 	end if;
4342 --Tax code fix end
4343 
4344 hr_utility.trace('Tax Code '||p_fps_bal_context_2.act_info25||' Tax Basis '||p_fps_bal_context_2.act_info27);
4345 
4346     pay_balance_pkg.get_value(p_assignment_action_id => p_last_asg_action_id ,
4347                               p_defined_balance_lst => g_defined_balance_lst ,
4348                               p_context_lst => l_context_lst ,
4349                               p_output_table => l_output_table );
4350     hr_utility.trace('After invoking get_value');
4351     p_fps_bal_context_2.assignment_id        := p_asg_id;
4352     p_fps_bal_context_2.action_info_category := 'GB_RTI_FPS_ASG_DET2';
4353     hr_utility.trace('Before entering for i in 1..g_fps_bal_det_tab.last loop');
4354 
4355     FOR outer_rec IN 1..l_output_table.count
4356     LOOP
4357 
4358 	 IF l_output_table(outer_rec).balance_value is not null then -- Null Check
4359 
4360       FOR inner_rec IN 1..g_fps_bal_det_tab.last
4361       LOOP
4362         IF (g_fps_bal_det_tab(inner_rec).defined_balance_id         = l_output_table(outer_rec).defined_balance_id) THEN
4363           IF g_fps_bal_det_tab(inner_rec).balance_name              = 'Taxable Pay' THEN
4364             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_PER_TD_YTD' ) THEN
4365               g_fps_bal_det_tab(inner_rec).balance_value           := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4366               p_fps_bal_context_2.act_info1                        := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4367             END IF;
4368           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'PAYE' THEN
4369             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_PER_TD_CPE_YTD') THEN
4370               g_fps_bal_det_tab(inner_rec).balance_value           := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4371               p_fps_bal_context_2.act_info2                        := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4372             END IF;
4373           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'Student Loan' THEN
4374             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_PER_TD_YTD') THEN
4375               g_fps_bal_det_tab(inner_rec).balance_value           := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4376               p_fps_bal_context_2.act_info3                        := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4377             END IF;
4378           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'NI Employer' THEN
4379             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_PER_TD_YTD') THEN
4380               g_fps_bal_det_tab(inner_rec).balance_value           := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4381               p_fps_bal_context_2.act_info4                        := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4382             END IF;
4383             --  This is for newly created balances
4384           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'Earnings Free of Tax' THEN
4385             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
4386               g_fps_bal_det_tab(inner_rec).balance_value         := 100                                  * NVL(l_output_table(outer_rec).balance_value,0);
4387               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);
4388             END IF;
4389           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'Earnings Free of NI' THEN
4390             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_PER_TD_YTD') THEN
4391               g_fps_bal_det_tab(inner_rec).balance_value           := 100                                  * NVL(l_output_table(outer_rec).balance_value,0);
4392               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);
4393             END IF;
4394           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SSP Total' THEN
4395             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
4396               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4397               p_fps_bal_context_2.act_info18                     := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4398             END IF;
4399           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SMP Total' THEN
4400             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
4401               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4402               p_fps_bal_context_2.act_info19                     := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4403             END IF;
4404           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SPP Adoption Total' THEN
4405             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
4406               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4407               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);
4408             END IF;
4409           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SPP Birth Total' THEN
4410             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
4411               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4412               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);
4413             END IF;
4414 
4415           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SAP Total' THEN
4416             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
4417               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4418               p_fps_bal_context_2.act_info21                     := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4419             END IF;
4420           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'ASPP Adoption Total' THEN
4421             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
4422               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4423               p_fps_bal_context_2.act_info22                     := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4424             END IF;
4425          elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'ASPP Birth Total' THEN
4426             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
4427               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4428               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);
4429             END IF;
4430 
4431           END IF;
4432         END IF;
4433       END LOOP;
4434       hr_utility.trace('After for i in 1..g_fps_bal_det_tab.last loop');
4435 	 END IF; --Not null check ends
4436     END LOOP;
4437  p_fps_bal_context_2.act_info17    := 0; -- Tax Deducted refunded
4438 
4439  hr_utility.trace(p_asg_id||'Leaving fetch_first_fps_agg_asg_det2 details function');
4440 
4441   RETURN l_arch;
4442 
4443 EXCEPTION
4444 WHEN OTHERS THEN
4445   hr_utility.set_location('Error in function fetch_first_fps_agg_asg_det2 ', 15);
4446   hr_utility.trace('Exception:' || SQLCODE || ' - ' || SQLERRM );
4447   fnd_file.put_line(fnd_file.LOG,'Exception:' || SQLCODE || ' - ' || SQLERRM);
4448   RAISE;
4449 
4450 END fetch_first_fps_agg_asg_det2;
4451 
4452 -- Function to fetch Assignment details (CONTEXT - GB_RTI_FPS_ASG_DET2)
4453 FUNCTION fetch_fps_asg_det2(
4454     p_last_asg_action_id IN NUMBER,
4455     p_asg_id             IN NUMBER,
4456     p_fps_bal_context_2  IN OUT nocopy act_info_rec )
4457   RETURN BOOLEAN
4458 IS
4459   l_context_lst pay_balance_pkg.t_context_tab;           -- used for batch balance retrieval
4460   l_output_table pay_balance_pkg.t_detailed_bal_out_tab; -- output of batch balance retrieval
4461   l_proc              CONSTANT VARCHAR2(50):= g_package||'fetch_fps_asg_det2';
4462   l_asg_primary_flag  VARCHAR2(1);
4463   l_per_agg_flag      VARCHAR2(1);
4464   l_aggr_archive_flag VARCHAR2(1);
4465   l_last_chld_act_id  NUMBER;
4466   l_tax_pay_val number;
4467   l_tax_pay_def_bal_id number;
4468   l_child_exists VARCHAR2(1);
4469   l_chld_act_id NUMBER;
4470   l_max_chld_act_id NUMBER;
4471 
4472   CURSOR csr_asg(c_asg_id NUMBER, c_effective_date DATE)
4473   IS
4474     SELECT trim(asg.primary_flag) asg_primary_flag,
4475       trim(pap.per_information10) per_agg_flag
4476     FROM per_all_people_f pap,
4477       per_all_assignments_f asg
4478     WHERE asg.assignment_id       = c_asg_id
4479     AND pap.person_id             = asg.person_id
4480     AND c_effective_date BETWEEN asg.effective_start_date AND asg.effective_end_date
4481     AND c_effective_date BETWEEN pap.effective_start_date AND pap.effective_end_date;
4482 
4483   CURSOR csr_child_act_id(c_lst_act_id NUMBER)
4484   IS
4485     SELECT assignment_action_id
4486     FROM pay_assignment_actions
4487     WHERE source_action_id = c_lst_act_id;
4488 
4489   CURSOR csr_tax_paye_result(p_action_id NUMBER)
4490   IS
4491     SELECT MAX(DECODE(name,'Tax Code',prrv.result_value,NULL)),
4492       MAX(DECODE(name,'Tax Basis',DECODE(prrv.result_value,'N','Y',NULL),NULL))
4493     FROM pay_run_results prr ,
4494       pay_run_result_values prrv ,
4495       pay_input_values_f pivf
4496     WHERE prr.assignment_action_id = p_action_id
4497     AND prr.ELEMENT_TYPE_ID        = g_paye_element_id
4498     AND prrv.run_result_id         = prr.run_result_id
4499     AND pivf.INPUT_VALUE_ID        = prrv.INPUT_VALUE_ID;
4500 
4501 CURSOR  csr_paye_details(p_assignment_id  NUMBER) IS
4502   SELECT  max(decode(iv.name,'Tax Code',screen_entry_value))     tax_code,
4503           max(decode(iv.name,'Tax Basis',DECODE(screen_entry_value,'N','Y',NULL),NULL))    tax_basis   --  kvinayku  bug no 14774165
4504   FROM  pay_element_entries_f e,
4505         pay_element_entry_values_f v,
4506         pay_input_values_f iv,
4507         pay_element_links_f link
4508   WHERE e.assignment_id = p_asg_id
4509   AND   link.element_type_id = g_paye_details_id
4510   AND   e.element_link_id = link.element_link_id
4511   AND   e.element_entry_id = v.element_entry_id
4512   AND   iv.input_value_id = v.input_value_id
4513   AND   e.effective_end_date BETWEEN link.effective_start_date AND link.effective_end_date
4514   AND   e.effective_end_date BETWEEN iv.effective_start_date AND iv.effective_end_date
4515   AND   e.effective_end_date BETWEEN v.effective_start_date AND v.effective_end_date
4516   AND   e.effective_end_date = (select max(e1.effective_end_date)
4517                                 from   pay_element_entries_f  e1,
4518                                        pay_element_links_f    link1
4519                                 where  link1.element_type_id = g_paye_details_id
4520                                 and    e1.assignment_id = p_asg_id
4521                                 and    e1.element_link_id = link1.element_link_id);
4522 
4523 cursor csr_get_taxable_pay(c_balance_name varchar2, c_dim_name varchar2) is
4524 select pdb.defined_balance_id from pay_defined_balances pdb,
4525 pay_balance_dimensions pbd,
4526 pay_balance_types pbt
4527 where pbt.balance_name = c_balance_name
4528 and pbd.database_item_suffix = c_dim_name
4529 and pbt.balance_type_id= pdb.balance_type_id
4530 and pbd.balance_dimension_id = pdb.balance_dimension_id and
4531 pbt.legislation_code = 'GB';
4532 
4533    cursor csr_tax_pay_value(p_last_asg_action_id number,l_tax_pay_def_bal_id number)
4534    is
4535 		select hr_dirbal.get_balance(p_last_asg_action_id,l_tax_pay_def_bal_id) from dual;
4536 
4537   CURSOR csr_max_child_act_id(c_lst_act_id NUMBER)
4538   IS
4539     SELECT max(assignment_action_id)
4540     FROM pay_assignment_actions
4541     WHERE source_action_id = c_lst_act_id;
4542 
4543 BEGIN
4544   hr_utility.set_location('Entering: '||l_proc,1);
4545   l_context_lst(1).tax_unit_id       :=NULL;
4546   l_context_lst(1).jurisdiction_code :=NULL;
4547   l_context_lst(1).source_id         :=NULL;
4548   l_context_lst(1).source_text       :=NULL;
4549   l_context_lst(1).source_number     :=NULL;
4550   l_context_lst(1).source_text2      :=NULL;
4551   l_context_lst(1).time_def_id       :=NULL;
4552   l_context_lst(1).balance_date      :=NULL;
4553   l_context_lst(1).local_unit_id     :=NULL;
4554   l_context_lst(1).source_number2    :=NULL;
4555   l_context_lst(1).organization_id   :=NULL;
4556   hr_utility.set_location('assignment_id :' || p_asg_id,15);
4557   l_asg_primary_flag  := 'N';
4558   l_per_agg_flag      := 'N';
4559   l_aggr_archive_flag := 'N';
4560 
4561   OPEN csr_asg(p_asg_id, g_effective_date);
4562   FETCH csr_asg INTO l_asg_primary_flag, l_per_agg_flag;
4563   CLOSE csr_asg;
4564 
4565   hr_utility.set_location('l_asg_primary_flag :' || l_asg_primary_flag,15);
4566   hr_utility.set_location('l_per_agg_flag :' || l_per_agg_flag,15);
4567 
4568   IF NVL(l_per_agg_flag,'N')       = 'Y' THEN
4569     IF NVL(l_asg_primary_flag,'N') = 'Y' THEN
4570       hr_utility.trace('Aggregation Found.');
4571       l_aggr_archive_flag := 'Y';
4572     END IF;
4573   END IF;
4574   hr_utility.set_location('l_aggr_archive_flag :' || l_aggr_archive_flag,15);
4575   ---
4576 
4577   IF (l_aggr_archive_flag = 'N' AND NVL(l_per_agg_flag,'N') = 'N') THEN
4578     hr_utility.trace('l_aggr_archive_flag = N');
4579     -- Get the child assignment action id to Archive Tax code and Tax basis.
4580     -- As the run results are generated with child assignment action id.
4581 
4582    open csr_get_taxable_pay('Taxable Pay', '_ASG_RUN');
4583    fetch csr_get_taxable_pay into l_tax_pay_def_bal_id;
4584    close csr_get_taxable_pay;
4585 
4586    open csr_tax_pay_value(p_last_asg_action_id,l_tax_pay_def_bal_id);
4587    fetch csr_tax_pay_value into l_tax_pay_val;
4588    close csr_tax_pay_value;
4589    hr_utility.set_location('l_tax_pay_val :' ||l_tax_pay_val ,15);
4590 
4591    IF l_tax_pay_val = 0 THEN
4592     OPEN csr_child_act_id(p_last_asg_action_id);
4593     FETCH csr_child_act_id INTO l_chld_act_id;
4594     CLOSE csr_child_act_id;
4595     l_child_exists := 'Y';
4596    ELSE
4597     l_chld_act_id := p_last_asg_action_id;
4598     l_child_exists := 'N';
4599    END IF;
4600 
4601    IF l_chld_act_id IS NULL THEN
4602     l_chld_act_id := p_last_asg_action_id;
4603     l_child_exists := 'N';
4604    END IF;
4605 
4606     OPEN csr_max_child_act_id(p_last_asg_action_id);
4607     FETCH csr_max_child_act_id INTO l_max_chld_act_id;
4608     CLOSE csr_max_child_act_id;
4609 
4610      hr_utility.trace('l_max_chld_act_id : '||l_max_chld_act_id);
4611 
4612    fetch_tax_code_basis(l_max_chld_act_id,
4613    p_fps_bal_context_2.act_info25,p_fps_bal_context_2.act_info27);
4614 
4615    if p_fps_bal_context_2.act_info25 is null then
4616       open csr_paye_details(p_asg_id);
4617 	    fetch csr_paye_details
4618       into p_fps_bal_context_2.act_info25,
4619  			     p_fps_bal_context_2.act_info27;
4620 	    close csr_paye_details;
4621 	 end if;
4622 
4623    hr_utility.trace('Tax Code '||p_fps_bal_context_2.act_info25||' Tax Basis '||p_fps_bal_context_2.act_info27);
4624 
4625 --Check whether we need to get balances with master asg action id or child asg action id
4626 if l_child_exists = 'N' then
4627 --We need to get balances with master asg action id
4628    hr_utility.trace('Processing with Master Action ID:'||p_last_asg_action_id);
4629 
4630    pay_balance_pkg.get_value(p_assignment_action_id => p_last_asg_action_id ,
4631                               p_defined_balance_lst => g_defined_balance_lst ,
4632                               p_context_lst => l_context_lst ,
4633                               p_output_table => l_output_table );
4634 
4635     hr_utility.trace('After invoking get_value');
4636     p_fps_bal_context_2.assignment_id        := p_asg_id;
4637     p_fps_bal_context_2.action_info_category := 'GB_RTI_FPS_ASG_DET2';
4638     hr_utility.trace('Before entering for i in 1..g_fps_bal_det_tab.last loop');
4639 
4640 --Get all balances with master asg action id
4641     FOR outer_rec IN 1..l_output_table.count
4642     LOOP
4643 
4644 	  IF l_output_table(outer_rec).balance_value is not null then -- Null Check
4645 
4646       FOR inner_rec IN 1..g_fps_bal_det_tab.last
4647       LOOP
4648         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
4649           IF g_fps_bal_det_tab(inner_rec).balance_name              = 'Taxable Pay' THEN
4650             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_TD_YTD' ) THEN
4651               g_fps_bal_det_tab(inner_rec).balance_value           := 100 *  l_output_table(outer_rec).balance_value;
4652               p_fps_bal_context_2.act_info1                        := 100 * l_output_table(outer_rec).balance_value;
4653           elsif g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
4654               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;
4655               p_fps_bal_context_2.act_info6                        := NVL(p_fps_bal_context_2.act_info6,0)              + 100 * l_output_table(outer_rec).balance_value;
4656             END IF;
4657           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'PAYE' THEN
4658             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_TD_YTD') THEN
4659               g_fps_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
4660               p_fps_bal_context_2.act_info2                        := 100 * l_output_table(outer_rec).balance_value;
4661           elsif g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
4662               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;
4663               p_fps_bal_context_2.act_info17                       := NVL(p_fps_bal_context_2.act_info17,0)             + 100 * l_output_table(outer_rec).balance_value;
4664             END IF;
4665           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'Student Loan' THEN
4666             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_TD_YTD') THEN
4667               g_fps_bal_det_tab(inner_rec).balance_value           := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4668               p_fps_bal_context_2.act_info3                        := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4669           elsif g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
4670               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;
4671               p_fps_bal_context_2.act_info16                       := NVL(p_fps_bal_context_2.act_info16,0)             + 100 * l_output_table(outer_rec).balance_value;
4672             END IF;
4673           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'NI Employer' THEN
4674             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_TD_YTD') THEN
4675               g_fps_bal_det_tab(inner_rec).balance_value           := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4676               p_fps_bal_context_2.act_info4                        := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4677           elsif g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
4678               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;
4679               p_fps_bal_context_2.act_info23                       := NVL(p_fps_bal_context_2.act_info23,0)             + 100 * l_output_table(outer_rec).balance_value;
4680             END IF;
4681             --  This is for newly created balances
4682           elsif g_fps_bal_det_tab(inner_rec).balance_name         =  'Total Direct Payments' THEN
4683             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN') THEN
4684               g_fps_bal_det_tab(inner_rec).balance_value         := 100  * l_output_table(outer_rec).balance_value;
4685               p_fps_bal_context_2.act_info7                      := NVL(p_fps_bal_context_2.act_info7,0) + 100 * l_output_table(outer_rec).balance_value;
4686             END IF;
4687           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'Earnings Free of Tax and NI' THEN
4688             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_RUN') THEN
4689               g_fps_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
4690               p_fps_bal_context_2.act_info7                        := NVL(p_fps_bal_context_2.act_info7,0) + 100 * l_output_table(outer_rec).balance_value;
4691           elsif g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
4692               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;
4693               p_fps_bal_context_2.act_info9                       := NVL(p_fps_bal_context_2.act_info9,0)             - 100 * l_output_table(outer_rec).balance_value;
4694             end if;
4695           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'Earnings Free of Tax' THEN
4696             if g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
4697               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;
4698               p_fps_bal_context_2.act_info14                       := NVL(p_fps_bal_context_2.act_info14,0)             + 100 * l_output_table(outer_rec).balance_value;
4699             end if;
4700           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Total Deductions' THEN
4701             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
4702               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;
4703               p_fps_bal_context_2.act_info8                     := NVL( p_fps_bal_context_2.act_info8,0)             + 100 * l_output_table(outer_rec).balance_value;
4704             END IF;
4705           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Pre Tax Deductions' THEN
4706             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
4707               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;
4708               p_fps_bal_context_2.act_info8                     := NVL( p_fps_bal_context_2.act_info8,0)             - 100 * l_output_table(outer_rec).balance_value;
4709             END IF;
4710 	        elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'NIable Deductions Free of Tax' THEN
4711             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
4712               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;
4713               p_fps_bal_context_2.act_info8                     := NVL( p_fps_bal_context_2.act_info8,0)             - 100 * l_output_table(outer_rec).balance_value;
4714             END IF;
4715           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Gross Pay' THEN
4716             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
4717               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;
4718               p_fps_bal_context_2.act_info9                     := NVL(p_fps_bal_context_2.act_info9,0)              + 100 * l_output_table(outer_rec).balance_value;
4719             END IF;
4720           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll Subject to NIC Earnings' THEN
4721             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
4722               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;
4723               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
4724               p_fps_bal_context_2.act_info11                    := NVL(p_fps_bal_context_2.act_info11,0)             + 100 * l_output_table(outer_rec).balance_value;
4725             END IF;
4726           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll Subject to NIC Information' THEN
4727             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
4728               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;
4729               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
4730               p_fps_bal_context_2.act_info11                    := NVL(p_fps_bal_context_2.act_info11,0)             + 100 * l_output_table(outer_rec).balance_value;
4731             END IF;
4732           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll NOT Subject to NIC Earnings' THEN
4733             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
4734               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;
4735               p_fps_bal_context_2.act_info12                    := NVL(p_fps_bal_context_2.act_info12,0)             + 100 * l_output_table(outer_rec).balance_value;
4736               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
4737             END IF;
4738           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll NOT Subject to NIC Information' THEN
4739             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
4740               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;
4741               p_fps_bal_context_2.act_info12                    := NVL(p_fps_bal_context_2.act_info12,0)             + 100 * l_output_table(outer_rec).balance_value;
4742               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
4743             END IF;
4744           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Pre Tax Pension Contributions' THEN
4745             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
4746               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;
4747               p_fps_bal_context_2.act_info13                    := NVL(p_fps_bal_context_2.act_info13,0)             + 100 * l_output_table(outer_rec).balance_value;
4748             END IF;
4749           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Post Tax Pension Contributions' THEN
4750             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
4751               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;
4752               p_fps_bal_context_2.act_info15                    := NVL(p_fps_bal_context_2.act_info15,0)             + 100 * l_output_table(outer_rec).balance_value;
4753             END IF;
4754           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SSP Total' THEN
4755             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
4756               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
4757               p_fps_bal_context_2.act_info18                     := 100 * l_output_table(outer_rec).balance_value;
4758           elsif g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
4759               g_ssp_total                                        := NVL(g_ssp_total,0) + 100 * l_output_table(outer_rec).balance_value;
4760             END IF;
4761           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SMP 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_info19                     := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4765           elsif g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
4766               g_smp_total                                        := NVL(g_smp_total,0) + 100 * l_output_table(outer_rec).balance_value;
4767             END IF;
4768           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SPP Adoption Total' THEN
4769             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
4770               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
4771               p_fps_bal_context_2.act_info20                     := nvl(p_fps_bal_context_2.act_info20,0) + 100 * l_output_table(outer_rec).balance_value;
4772             END IF;
4773           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SPP Birth Total' 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 * l_output_table(outer_rec).balance_value;
4776               --g_spp_total                                        := 100 * l_output_table(outer_rec).balance_value;
4777               p_fps_bal_context_2.act_info20                     := nvl(p_fps_bal_context_2.act_info20,0) + 100 * l_output_table(outer_rec).balance_value;
4778             END IF;
4779           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SAP Total' THEN
4780             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
4781               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
4782               p_fps_bal_context_2.act_info21                     := 100 * l_output_table(outer_rec).balance_value;
4783           elsif g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
4784               g_sap_total                                        := NVL(g_sap_total,0) + 100 * l_output_table(outer_rec).balance_value;
4785             END IF;
4786           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'ASPP Adoption Total' THEN
4787             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
4788               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
4789               p_fps_bal_context_2.act_info22                     := nvl(p_fps_bal_context_2.act_info22,0) + 100 * l_output_table(outer_rec).balance_value;
4790             END IF;
4791           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'ASPP Birth Total' THEN
4792             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
4793               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
4794               --g_assp_total                                       := 100 * l_output_table(outer_rec).balance_value;
4795               p_fps_bal_context_2.act_info22                     := nvl(p_fps_bal_context_2.act_info22,0) + 100 * l_output_table(outer_rec).balance_value;
4796             END IF;
4797         END IF;
4798 	    END IF;
4799       END LOOP;
4800       hr_utility.trace('After for i in 1..g_fps_bal_det_tab.last loop');
4801 	  END IF;
4802     END LOOP;
4803 
4804 ELSE               -- for if l_child_exists = 'N' then
4805 --We need to get balances with child asg action id
4806    hr_utility.trace('Processing with Child Action IDs of:'||p_last_asg_action_id);
4807 
4808 FOR rec IN csr_child_act_id(p_last_asg_action_id)
4809 LOOP
4810 --Loop for getting the balances for all child asg action id's
4811    l_chld_act_id := rec.assignment_action_id;
4812    hr_utility.trace('l_chld_act_id:'||l_chld_act_id);
4813    pay_balance_pkg.get_value(p_assignment_action_id => l_chld_act_id ,
4814                               p_defined_balance_lst => g_defined_balance_lst ,
4815                               p_context_lst => l_context_lst ,
4816                               p_output_table => l_output_table );
4817 
4818     hr_utility.trace('After invoking get_value');
4819     p_fps_bal_context_2.assignment_id        := p_asg_id;
4820     p_fps_bal_context_2.action_info_category := 'GB_RTI_FPS_ASG_DET2';
4821     hr_utility.trace('Before entering for i in 1..g_fps_bal_det_tab.last loop');
4822 --Check whether this is the latest child asg action id
4823     IF (l_chld_act_id = l_max_chld_act_id) then
4824 --It is the latest child asg action id
4825 --Get all the balances with this latest child asg action id
4826     hr_utility.trace('in side if l_chld_act_id = l_max_chld_act_id');
4827     FOR outer_rec IN 1..l_output_table.count
4828     LOOP
4829 	  IF l_output_table(outer_rec).balance_value is not null then -- Null Check
4830 
4831       FOR inner_rec IN 1..g_fps_bal_det_tab.last
4832       LOOP
4833         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
4834           IF g_fps_bal_det_tab(inner_rec).balance_name              = 'Taxable Pay' THEN
4835             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_TD_YTD' ) THEN
4836               g_fps_bal_det_tab(inner_rec).balance_value           := 100 *  l_output_table(outer_rec).balance_value;
4837               p_fps_bal_context_2.act_info1                        := 100 * l_output_table(outer_rec).balance_value;
4838           elsif g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
4839               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;
4840               p_fps_bal_context_2.act_info6                        := NVL(p_fps_bal_context_2.act_info6,0)              + 100 * l_output_table(outer_rec).balance_value;
4841             END IF;
4842           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'PAYE' THEN
4843             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_TD_YTD') THEN
4844               g_fps_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
4845               p_fps_bal_context_2.act_info2                        := 100 * l_output_table(outer_rec).balance_value;
4846           elsif g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
4847               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;
4848               p_fps_bal_context_2.act_info17                       := NVL(p_fps_bal_context_2.act_info17,0)             + 100 * l_output_table(outer_rec).balance_value;
4849             END IF;
4850           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'Student Loan' THEN
4851             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_TD_YTD') THEN
4852               g_fps_bal_det_tab(inner_rec).balance_value           := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4853               p_fps_bal_context_2.act_info3                        := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4854           elsif g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
4855               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;
4856               p_fps_bal_context_2.act_info16                       := NVL(p_fps_bal_context_2.act_info16,0)             + 100 * l_output_table(outer_rec).balance_value;
4857             END IF;
4858           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'NI Employer' THEN
4859             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_TD_YTD') THEN
4860               g_fps_bal_det_tab(inner_rec).balance_value           := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4861               p_fps_bal_context_2.act_info4                        := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4862           elsif g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
4863               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;
4864               p_fps_bal_context_2.act_info23                       := NVL(p_fps_bal_context_2.act_info23,0)             + 100 * l_output_table(outer_rec).balance_value;
4865             END IF;
4866           elsif g_fps_bal_det_tab(inner_rec).balance_name         =  'Total Direct Payments' THEN
4867             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN') THEN
4868               g_fps_bal_det_tab(inner_rec).balance_value         := 100  * l_output_table(outer_rec).balance_value;
4869               p_fps_bal_context_2.act_info7                      := NVL(p_fps_bal_context_2.act_info7,0) + 100 * l_output_table(outer_rec).balance_value;
4870             END IF;
4871           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'Earnings Free of Tax and NI' THEN
4872             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_RUN') THEN
4873               g_fps_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
4874               p_fps_bal_context_2.act_info7                        := NVL(p_fps_bal_context_2.act_info7,0) + 100 * l_output_table(outer_rec).balance_value;
4875             elsif g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
4876               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;
4877               p_fps_bal_context_2.act_info9                       := NVL(p_fps_bal_context_2.act_info9,0)             - 100 * l_output_table(outer_rec).balance_value;
4878             end if;
4879           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'Earnings Free of Tax' THEN
4880             if g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
4881               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;
4882               p_fps_bal_context_2.act_info14                       := NVL(p_fps_bal_context_2.act_info14,0)             + 100 * l_output_table(outer_rec).balance_value;
4883             end if;
4884           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Total Deductions' THEN
4885             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
4886               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;
4887               p_fps_bal_context_2.act_info8                     := NVL( p_fps_bal_context_2.act_info8,0)             + 100 * l_output_table(outer_rec).balance_value;
4888             END IF;
4889           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Pre Tax Deductions' THEN
4890             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
4891               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;
4892               p_fps_bal_context_2.act_info8                     := NVL( p_fps_bal_context_2.act_info8,0)             - 100 * l_output_table(outer_rec).balance_value;
4893             END IF;
4894  	        elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'NIable Deductions Free of Tax' THEN
4895             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
4896               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;
4897               p_fps_bal_context_2.act_info8                     := NVL( p_fps_bal_context_2.act_info8,0)             - 100 * l_output_table(outer_rec).balance_value;
4898             END IF;
4899           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Gross Pay' THEN
4900             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
4901               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;
4902               p_fps_bal_context_2.act_info9                     := NVL(p_fps_bal_context_2.act_info9,0)              + 100 * l_output_table(outer_rec).balance_value;
4903             END IF;
4904           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll Subject to NIC Earnings' THEN
4905             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
4906               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;
4907               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
4908               p_fps_bal_context_2.act_info11                    := NVL(p_fps_bal_context_2.act_info11,0)             + 100 * l_output_table(outer_rec).balance_value;
4909             END IF;
4910           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll Subject to NIC Information' THEN
4911             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
4912               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;
4913               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
4914               p_fps_bal_context_2.act_info11                    := NVL(p_fps_bal_context_2.act_info11,0)             + 100 * l_output_table(outer_rec).balance_value;
4915             END IF;
4916           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll NOT Subject to NIC Earnings' THEN
4917             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
4918               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;
4919               p_fps_bal_context_2.act_info12                    := NVL(p_fps_bal_context_2.act_info12,0)             + 100 * l_output_table(outer_rec).balance_value;
4920               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
4921             END IF;
4922           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll NOT Subject to NIC Information' THEN
4923             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
4924               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;
4925               p_fps_bal_context_2.act_info12                    := NVL(p_fps_bal_context_2.act_info12,0)             + 100 * l_output_table(outer_rec).balance_value;
4926               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
4927             END IF;
4928           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Pre Tax Pension Contributions' THEN
4929             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
4930               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;
4931               p_fps_bal_context_2.act_info13                    := NVL(p_fps_bal_context_2.act_info13,0)             + 100 * l_output_table(outer_rec).balance_value;
4932             END IF;
4933           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Post Tax Pension Contributions' THEN
4934             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
4935               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;
4936               p_fps_bal_context_2.act_info15                    := NVL(p_fps_bal_context_2.act_info15,0)             + 100 * l_output_table(outer_rec).balance_value;
4937             END IF;
4938           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SSP Total' THEN
4939             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
4940               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
4941               p_fps_bal_context_2.act_info18                     := 100 * l_output_table(outer_rec).balance_value;
4942           elsif g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
4943               g_ssp_total                                        := NVL(g_ssp_total,0) + 100 * l_output_table(outer_rec).balance_value;
4944             END IF;
4945           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SMP Total' THEN
4946             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
4947               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4948               p_fps_bal_context_2.act_info19                     := 100 * NVL(l_output_table(outer_rec).balance_value,0);
4949           elsif g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
4950               g_smp_total                                        := NVL(g_smp_total,0) + 100 * l_output_table(outer_rec).balance_value;
4951 
4952             END IF;
4953           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SPP Adoption Total' THEN
4954             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
4955               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
4956               p_fps_bal_context_2.act_info20                     := nvl(p_fps_bal_context_2.act_info20,0) + 100 * l_output_table(outer_rec).balance_value;
4957             END IF;
4958           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SPP Birth Total' THEN
4959             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
4960               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
4961               --g_spp_total                                        := 100 * l_output_table(outer_rec).balance_value;
4962               p_fps_bal_context_2.act_info20                     := nvl(p_fps_bal_context_2.act_info20,0) + 100 * l_output_table(outer_rec).balance_value;
4963             END IF;
4964           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SAP Total' THEN
4965             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
4966               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
4967               p_fps_bal_context_2.act_info21                     := 100 * l_output_table(outer_rec).balance_value;
4968           elsif g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
4969               g_sap_total                                        := NVL(g_sap_total,0) + 100 * l_output_table(outer_rec).balance_value;
4970             END IF;
4971           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'ASPP Adoption Total' THEN
4972             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
4973               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
4974               p_fps_bal_context_2.act_info22                     := nvl(p_fps_bal_context_2.act_info22,0) + 100 * l_output_table(outer_rec).balance_value;
4975             END IF;
4976           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'ASPP Birth Total' THEN
4977             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_TD_YTD') THEN
4978               g_fps_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
4979               --g_assp_total                                       := 100 * l_output_table(outer_rec).balance_value;
4980               p_fps_bal_context_2.act_info22                     := nvl(p_fps_bal_context_2.act_info22,0) + 100 * l_output_table(outer_rec).balance_value;
4981             END IF;
4982         END IF;
4983 	    END IF;
4984       END LOOP;
4985       hr_utility.trace('After for i in 1..g_fps_bal_det_tab.last loop');
4986 	  END IF;
4987     END LOOP;
4988 
4989 ELSE  --for IF (l_chld_act_id = l_max_chld_act_id) then
4990 --It is not the latest child asg action id
4991 --Get only the RUN balances with this child asg action id
4992     hr_utility.trace('in side else l_chld_act_id = l_max_chld_act_id');
4993     FOR outer_rec IN 1..l_output_table.count
4994     LOOP
4995 	  IF l_output_table(outer_rec).balance_value is not null then -- Null Check
4996 
4997       FOR inner_rec IN 1..g_fps_bal_det_tab.last
4998       LOOP
4999         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
5000           IF g_fps_bal_det_tab(inner_rec).balance_name              = 'Taxable Pay' THEN
5001             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5002               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;
5003               p_fps_bal_context_2.act_info6                        := NVL(p_fps_bal_context_2.act_info6,0)              + 100 * l_output_table(outer_rec).balance_value;
5004             END IF;
5005           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'PAYE' THEN
5006             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5007               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;
5008               p_fps_bal_context_2.act_info17                       := NVL(p_fps_bal_context_2.act_info17,0)             + 100 * l_output_table(outer_rec).balance_value;
5009             END IF;
5010           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'Student Loan' THEN
5011             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5012               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;
5013               p_fps_bal_context_2.act_info16                       := NVL(p_fps_bal_context_2.act_info16,0)             + 100 * l_output_table(outer_rec).balance_value;
5014             END IF;
5015           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'NI Employer' THEN
5016             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5017               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;
5018               p_fps_bal_context_2.act_info23                       := NVL(p_fps_bal_context_2.act_info23,0)             + 100 * l_output_table(outer_rec).balance_value;
5019             END IF;
5020           elsif g_fps_bal_det_tab(inner_rec).balance_name         =  'Total Direct Payments' THEN
5021             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN') THEN
5022               g_fps_bal_det_tab(inner_rec).balance_value         := 100  * l_output_table(outer_rec).balance_value;
5023               p_fps_bal_context_2.act_info7                      := NVL(p_fps_bal_context_2.act_info7,0) + 100 * l_output_table(outer_rec).balance_value;
5024             END IF;
5025           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'Earnings Free of Tax and NI' THEN
5026             IF (g_fps_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_RUN') THEN
5027               g_fps_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
5028               p_fps_bal_context_2.act_info7                        := NVL(p_fps_bal_context_2.act_info7,0) + 100 * l_output_table(outer_rec).balance_value;
5029             elsif g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5030               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;
5031               p_fps_bal_context_2.act_info9                       := NVL(p_fps_bal_context_2.act_info9,0)             - 100 * l_output_table(outer_rec).balance_value;
5032             end if;
5033           elsif g_fps_bal_det_tab(inner_rec).balance_name           = 'Earnings Free of Tax' THEN
5034             if g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5035               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;
5036               p_fps_bal_context_2.act_info14                       := NVL(p_fps_bal_context_2.act_info14,0)             + 100 * l_output_table(outer_rec).balance_value;
5037             end if;
5038           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Total Deductions' THEN
5039             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5040               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;
5041               p_fps_bal_context_2.act_info8                     := NVL( p_fps_bal_context_2.act_info8,0)             + 100 * l_output_table(outer_rec).balance_value;
5042             END IF;
5043           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Gross Pay' THEN
5044             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5045               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;
5046               p_fps_bal_context_2.act_info9                     := NVL(p_fps_bal_context_2.act_info9,0)              + 100 * l_output_table(outer_rec).balance_value;
5047             END IF;
5048           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll Subject to NIC Earnings' THEN
5049             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5050               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;
5051               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
5052               p_fps_bal_context_2.act_info11                    := NVL(p_fps_bal_context_2.act_info11,0)             + 100 * l_output_table(outer_rec).balance_value;
5053             END IF;
5054           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll Subject to NIC Information' THEN
5055             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5056               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;
5057               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
5058               p_fps_bal_context_2.act_info11                    := NVL(p_fps_bal_context_2.act_info11,0)             + 100 * l_output_table(outer_rec).balance_value;
5059             END IF;
5060           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll NOT Subject to NIC Earnings' THEN
5061             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5062               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;
5063               p_fps_bal_context_2.act_info12                    := NVL(p_fps_bal_context_2.act_info12,0)             + 100 * l_output_table(outer_rec).balance_value;
5064               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
5065             END IF;
5066           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll NOT Subject to NIC Information' THEN
5067             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5068               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;
5069               p_fps_bal_context_2.act_info12                    := NVL(p_fps_bal_context_2.act_info12,0)             + 100 * l_output_table(outer_rec).balance_value;
5070               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
5071             END IF;
5072           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Pre Tax Pension Contributions' THEN
5073             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5074               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;
5075               p_fps_bal_context_2.act_info13                    := NVL(p_fps_bal_context_2.act_info13,0)             + 100 * l_output_table(outer_rec).balance_value;
5076             END IF;
5077           elsif g_fps_bal_det_tab(inner_rec).balance_name        = 'Post Tax Pension Contributions' THEN
5078             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5079               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;
5080               p_fps_bal_context_2.act_info15                    := NVL(p_fps_bal_context_2.act_info15,0)             + 100 * l_output_table(outer_rec).balance_value;
5081             END IF;
5082           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SSP Total' THEN
5083             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5084               g_ssp_total                                        := NVL(g_ssp_total,0) + 100 * l_output_table(outer_rec).balance_value;
5085             END IF;
5086           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SMP Total' THEN
5087             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5088               g_smp_total                                        := NVL(g_smp_total,0) + 100 * l_output_table(outer_rec).balance_value;
5089             END IF;
5090           elsif g_fps_bal_det_tab(inner_rec).balance_name         = 'SAP Total' THEN
5091             IF g_fps_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5092               g_sap_total                                        := NVL(g_sap_total,0) + 100 * l_output_table(outer_rec).balance_value;
5093             END IF;
5094         END IF;
5095 	    END IF;
5096       END LOOP;
5097       hr_utility.trace('After for i in 1..g_fps_bal_det_tab.last loop');
5098 	  END IF;
5099     END LOOP;
5100 
5101 END IF;
5102 
5103 END LOOP;
5104 END IF; --for if l_child_exists = 'N' then
5105   END IF;
5106   RETURN true;
5107 
5108 EXCEPTION
5109 WHEN OTHERS THEN
5110   hr_utility.set_location('Error in function fetch_fps_asg_det2 ', 15);
5111   hr_utility.trace('Exception:' || SQLCODE || ' - ' || SQLERRM );
5112   fnd_file.put_line(fnd_file.LOG,'Exception:' || SQLCODE || ' - ' || SQLERRM);
5113   RAISE;
5114 END fetch_fps_asg_det2;
5115 --
5116 --
5117 --
5118 -- Function to fetch Assignment details (CONTEXT - GB_RTI_FPS_ASG_DET2) for PAYE aggregated cases
5119 FUNCTION fetch_fps_agg_asg_det2(
5120     p_last_asg_action_id IN NUMBER,
5121     p_asg_id             IN NUMBER,
5122     p_fps_bal_context_2  IN OUT nocopy act_info_rec )
5123   RETURN BOOLEAN
5124 IS
5125   l_context_lst pay_balance_pkg.t_context_tab;           -- used for batch balance retrieval
5126   l_output_table pay_balance_pkg.t_detailed_bal_out_tab; -- output of batch balance retrieval
5127   l_proc              CONSTANT VARCHAR2(50):= g_package||'fetch_fps_agg_asg_det2';
5128   l_asg_primary_flag  VARCHAR2(1);
5129   l_per_agg_flag      VARCHAR2(1);
5130   l_aggr_archive_flag VARCHAR2(1);
5131   l_last_chld_act_id  NUMBER;
5132   l_tax_pay_val number;
5133   l_tax_pay_def_bal_id number;
5134   l_child_exists VARCHAR2(1);
5135   l_chld_act_id NUMBER;
5136   l_max_chld_act_id NUMBER;
5137 
5138   CURSOR csr_asg(c_asg_id NUMBER, c_effective_date DATE)
5139   IS
5140     SELECT trim(asg.primary_flag) asg_primary_flag,
5141       trim(pap.per_information10) per_agg_flag
5142     FROM per_all_people_f pap,
5143       per_all_assignments_f asg
5144     WHERE asg.assignment_id       = c_asg_id
5145     AND pap.person_id             = asg.person_id
5146     AND c_effective_date BETWEEN asg.effective_start_date AND asg.effective_end_date
5147     AND c_effective_date BETWEEN pap.effective_start_date AND pap.effective_end_date;
5148 
5149   CURSOR csr_child_act_id(c_lst_act_id NUMBER)
5150   IS
5151     SELECT ASSIGNMENT_ACTION_ID
5152     FROM pay_assignment_actions
5153     WHERE SOURCE_ACTION_ID = c_lst_act_id;
5154 
5155   CURSOR csr_tax_paye_result(p_action_id NUMBER)
5156   IS
5157     SELECT MAX(DECODE(name,'Tax Code',prrv.result_value,NULL)),
5158       MAX(DECODE(name,'Tax Basis',DECODE(prrv.result_value,'N','Y',NULL),NULL))
5159     FROM pay_run_results prr ,
5160       pay_run_result_values prrv ,
5161       pay_input_values_f pivf
5162     WHERE prr.assignment_action_id = p_action_id
5163     AND prr.ELEMENT_TYPE_ID        = g_paye_element_id
5164     AND prrv.run_result_id         = prr.run_result_id
5165     AND pivf.INPUT_VALUE_ID        = prrv.INPUT_VALUE_ID;
5166 
5167 CURSOR  csr_paye_details(p_assignment_id  NUMBER) IS
5168   SELECT  max(decode(iv.name,'Tax Code',screen_entry_value))     tax_code,
5169           max(decode(iv.name,'Tax Basis',decode(screen_entry_value,'N','Y',NULL),NULL))    tax_basis  --  added by kvinayku  14774165
5170   FROM  pay_element_entries_f e,
5171         pay_element_entry_values_f v,
5172         pay_input_values_f iv,
5173         pay_element_links_f link
5174   WHERE e.assignment_id = p_asg_id
5175   AND   link.element_type_id = g_paye_details_id
5176   AND   e.element_link_id = link.element_link_id
5177   AND   e.element_entry_id = v.element_entry_id
5178   AND   iv.input_value_id = v.input_value_id
5179   AND   e.effective_end_date BETWEEN link.effective_start_date AND link.effective_end_date
5180   AND   e.effective_end_date BETWEEN iv.effective_start_date AND iv.effective_end_date
5181   AND   e.effective_end_date BETWEEN v.effective_start_date AND v.effective_end_date
5182   AND   e.effective_end_date = (select max(e1.effective_end_date)
5183                                 from   pay_element_entries_f  e1,
5184                                        pay_element_links_f    link1
5185                                 where  link1.element_type_id = g_paye_details_id
5186                                 and    e1.assignment_id = p_asg_id
5187                                 and    e1.element_link_id = link1.element_link_id);
5188 
5189 
5190 cursor csr_get_taxable_pay(c_balance_name varchar2, c_dim_name varchar2) is
5191 select pdb.defined_balance_id from pay_defined_balances pdb,
5192 pay_balance_dimensions pbd,
5193 pay_balance_types pbt
5194 where pbt.balance_name = c_balance_name
5195 and pbd.database_item_suffix = c_dim_name
5196 and pbt.balance_type_id= pdb.balance_type_id
5197 and pbd.balance_dimension_id = pdb.balance_dimension_id and
5198 pbt.legislation_code = 'GB';
5199 
5200    cursor csr_tax_pay_value(p_last_asg_action_id number,l_tax_pay_def_bal_id number)
5201    is
5202 		select hr_dirbal.get_balance(p_last_asg_action_id,l_tax_pay_def_bal_id) from dual;
5203 
5204   CURSOR csr_max_child_act_id(c_lst_act_id NUMBER)
5205   IS
5206     SELECT max(assignment_action_id)
5207     FROM pay_assignment_actions
5208     WHERE source_action_id = c_lst_act_id;
5209 
5210 BEGIN
5211   hr_utility.set_location('Entering: '||l_proc,1);
5212   l_context_lst(1).tax_unit_id       :=NULL;
5213   l_context_lst(1).jurisdiction_code :=NULL;
5214   l_context_lst(1).source_id         :=NULL;
5215   l_context_lst(1).source_text       :=NULL;
5216   l_context_lst(1).source_number     :=NULL;
5217   l_context_lst(1).source_text2      :=NULL;
5218   l_context_lst(1).time_def_id       :=NULL;
5219   l_context_lst(1).balance_date      :=NULL;
5220   l_context_lst(1).local_unit_id     :=NULL;
5221   l_context_lst(1).source_number2    :=NULL;
5222   l_context_lst(1).organization_id   :=NULL;
5223   hr_utility.set_location('assignment_id :' || p_asg_id,15);
5224   l_asg_primary_flag  := 'N';
5225   l_per_agg_flag      := 'N';
5226   l_aggr_archive_flag := 'N';
5227 
5228   OPEN csr_asg(p_asg_id, g_effective_date);
5229   FETCH csr_asg INTO l_asg_primary_flag, l_per_agg_flag;
5230   CLOSE csr_asg;
5231 
5232   hr_utility.set_location('l_asg_primary_flag :' || l_asg_primary_flag,15);
5233   hr_utility.set_location('l_per_agg_flag :' || l_per_agg_flag,15);
5234   hr_utility.set_location('l_aggr_archive_flag :' || l_aggr_archive_flag,15);
5235   ---
5236 
5237    open csr_get_taxable_pay('Taxable Pay', '_ASG_RUN');
5238    fetch csr_get_taxable_pay into l_tax_pay_def_bal_id;
5239    close csr_get_taxable_pay;
5240 
5241    open csr_tax_pay_value(p_last_asg_action_id,l_tax_pay_def_bal_id);
5242    fetch csr_tax_pay_value into l_tax_pay_val;
5243    close csr_tax_pay_value;
5244   hr_utility.set_location('l_tax_pay_val :' ||l_tax_pay_val ,15);
5245 -- Test whether we can get run level value with parent action id.
5246 -- If not pass the child assignment action id.
5247 
5248     if l_tax_pay_val = 0 then
5249 
5250     OPEN csr_child_act_id(p_last_asg_action_id);
5251     FETCH csr_child_act_id INTO l_chld_act_id;
5252     CLOSE csr_child_act_id;
5253 
5254    l_child_exists := 'Y';
5255    ELSE
5256     l_chld_act_id := p_last_asg_action_id;
5257     l_child_exists := 'N';
5258    END IF;
5259 
5260    IF l_chld_act_id IS NULL THEN
5261     l_chld_act_id := p_last_asg_action_id;
5262     l_child_exists := 'N';
5263    END IF;
5264 
5265     OPEN csr_max_child_act_id(p_last_asg_action_id);
5266     FETCH csr_max_child_act_id INTO l_max_chld_act_id;
5267     CLOSE csr_max_child_act_id;
5268 
5269      hr_utility.trace('l_max_chld_act_id : '||l_max_chld_act_id);
5270 
5271 fetch_tax_code_basis(l_max_chld_act_id, p_fps_bal_context_2.act_info25,p_fps_bal_context_2.act_info27);
5272 
5273 if p_fps_bal_context_2.act_info25 is null then
5274 	open csr_paye_details(p_asg_id);
5275 	fetch csr_paye_details
5276 		INTO p_fps_bal_context_2.act_info25,
5277 			 p_fps_bal_context_2.act_info27;
5278 	close csr_paye_details;
5279 	end if;
5280 hr_utility.trace('Tax Code '||p_fps_bal_context_2.act_info25||' Tax Basis '||p_fps_bal_context_2.act_info27);
5281 
5282 --Check whether we need to get balances with master asg action id or child asg action id
5283 if l_child_exists = 'N' then
5284 --We need to get balances with master asg action id
5285    hr_utility.trace('Processing with Master Action ID:'||p_last_asg_action_id);
5286 --
5287    pay_balance_pkg.get_value(p_assignment_action_id => p_last_asg_action_id ,
5288                               p_defined_balance_lst => g_aggr_defined_balance_lst ,
5289                               p_context_lst => l_context_lst ,
5290                               p_output_table => l_output_table );
5291 
5292     hr_utility.trace('After invoking get_value');
5293     p_fps_bal_context_2.assignment_id        := p_asg_id;
5294     p_fps_bal_context_2.action_info_category := 'GB_RTI_FPS_ASG_DET2';
5295     hr_utility.trace('Before entering for i in 1..g_fps_bal_det_tab.last loop');
5296 
5297 --Get all the balances with master asg action id
5298     FOR outer_rec IN 1..l_output_table.count
5299     LOOP
5300 
5301 	IF l_output_table(outer_rec).balance_value is not null then -- Null Check
5302 
5303       FOR inner_rec IN 1..g_fps_aggr_bal_det_tab.last
5304       LOOP
5305         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
5306           IF g_fps_aggr_bal_det_tab(inner_rec).balance_name              = 'Taxable Pay' THEN
5307             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix   = '_PER_TD_YTD' ) THEN
5308               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := 100 *  l_output_table(outer_rec).balance_value;
5309               p_fps_bal_context_2.act_info1                        := 100 * l_output_table(outer_rec).balance_value;
5310             elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5311               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;
5312               p_fps_bal_context_2.act_info6                        := NVL(p_fps_bal_context_2.act_info6,0)              + 100 * l_output_table(outer_rec).balance_value;
5313             END IF;
5314           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name           = 'PAYE' THEN
5315             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix   = '_PER_TD_CPE_YTD') THEN
5316               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
5317               p_fps_bal_context_2.act_info2                        := 100 * l_output_table(outer_rec).balance_value;
5318             elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5319               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;
5320               p_fps_bal_context_2.act_info17                       := NVL(p_fps_bal_context_2.act_info17,0)             + 100 * l_output_table(outer_rec).balance_value;
5321             END IF;
5322           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name           = 'Student Loan' THEN
5323             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix   = '_PER_TD_YTD') THEN
5324               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := 100 * NVL(l_output_table(outer_rec).balance_value,0);
5325               p_fps_bal_context_2.act_info3                        := 100 * NVL(l_output_table(outer_rec).balance_value,0);
5326             elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5327               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;
5328               p_fps_bal_context_2.act_info16                       := NVL(p_fps_bal_context_2.act_info16,0)             + 100 * l_output_table(outer_rec).balance_value;
5329             END IF;
5330           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name           = 'NI Employer' THEN
5331             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix   = '_PER_TD_YTD') THEN
5332               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := 100 * NVL(l_output_table(outer_rec).balance_value,0);
5333               p_fps_bal_context_2.act_info4                        := 100 * NVL(l_output_table(outer_rec).balance_value,0);
5334             elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5335               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;
5336               p_fps_bal_context_2.act_info23                       := NVL(p_fps_bal_context_2.act_info23,0)             + 100 * l_output_table(outer_rec).balance_value;
5337             END IF;
5338             --  This is for newly created balances
5339           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         =  'Total Direct Payments' THEN
5340             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN') THEN
5341               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100  * l_output_table(outer_rec).balance_value;
5342               p_fps_bal_context_2.act_info7                      := NVL(p_fps_bal_context_2.act_info7,0) + 100 * l_output_table(outer_rec).balance_value;
5343             END IF;
5344           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name           = 'Earnings Free of Tax and NI' THEN
5345             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_RUN') THEN
5346               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
5347               p_fps_bal_context_2.act_info7                        := NVL(p_fps_bal_context_2.act_info7,0) + 100 * l_output_table(outer_rec).balance_value;
5348             elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5349               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;
5350               p_fps_bal_context_2.act_info9                       := NVL(p_fps_bal_context_2.act_info9,0)             - 100 * l_output_table(outer_rec).balance_value;
5351             end if;
5352          elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name           = 'Earnings Free of Tax' THEN
5353             if g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5354               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;
5355               p_fps_bal_context_2.act_info14                       := NVL(p_fps_bal_context_2.act_info14,0)             + 100 * l_output_table(outer_rec).balance_value;
5356             end if;
5357         elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Total Deductions' THEN
5358             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5359               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;
5360               p_fps_bal_context_2.act_info8                     := NVL( p_fps_bal_context_2.act_info8,0)             + 100 * l_output_table(outer_rec).balance_value;
5361             END IF;
5362         elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'NIable Deductions Free of Tax' THEN
5363             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5364               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;
5365               p_fps_bal_context_2.act_info8                     := NVL( p_fps_bal_context_2.act_info8,0)             - 100 * l_output_table(outer_rec).balance_value;
5366             END IF;
5367         elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Pre Tax Deductions' THEN
5368             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5369               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;
5370               p_fps_bal_context_2.act_info8                     := NVL( p_fps_bal_context_2.act_info8,0)             - 100 * l_output_table(outer_rec).balance_value;
5371             END IF;
5372           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Gross Pay' THEN
5373             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5374               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;
5375               p_fps_bal_context_2.act_info9                     := NVL(p_fps_bal_context_2.act_info9,0)              + 100 * l_output_table(outer_rec).balance_value;
5376             END IF;
5377           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll Subject to NIC Earnings' THEN
5378             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5379               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;
5380               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
5381               p_fps_bal_context_2.act_info11                    := NVL(p_fps_bal_context_2.act_info11,0)             + 100 * l_output_table(outer_rec).balance_value;
5382             END IF;
5383           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll Subject to NIC Information' THEN
5384             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5385               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;
5386               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
5387               p_fps_bal_context_2.act_info11                    := NVL(p_fps_bal_context_2.act_info11,0)             + 100 * l_output_table(outer_rec).balance_value;
5388             END IF;
5389           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll NOT Subject to NIC Earnings' THEN
5390             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5391               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;
5392               p_fps_bal_context_2.act_info12                    := NVL(p_fps_bal_context_2.act_info12,0)             + 100 * l_output_table(outer_rec).balance_value;
5393               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
5394             END IF;
5395           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll NOT Subject to NIC Information' THEN
5396             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5397               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;
5398               p_fps_bal_context_2.act_info12                    := NVL(p_fps_bal_context_2.act_info12,0)             + 100 * l_output_table(outer_rec).balance_value;
5399               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
5400             END IF;
5401           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Pre Tax Pension Contributions' THEN
5402             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5403               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;
5404               p_fps_bal_context_2.act_info13                    := NVL(p_fps_bal_context_2.act_info13,0)             + 100 * l_output_table(outer_rec).balance_value;
5405             END IF;
5406           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Post Tax Pension Contributions' THEN
5407             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5408               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;
5409               p_fps_bal_context_2.act_info15                    := NVL(p_fps_bal_context_2.act_info15,0)             + 100 * l_output_table(outer_rec).balance_value;
5410             END IF;
5411           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'SSP Total' THEN
5412             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
5413               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
5414               p_fps_bal_context_2.act_info18                     := 100 * l_output_table(outer_rec).balance_value;
5415           elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5416               g_ssp_total                                        := NVL(g_ssp_total,0) + 100 * l_output_table(outer_rec).balance_value;
5417             END IF;
5418           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'SMP Total' THEN
5419             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
5420               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
5421               p_fps_bal_context_2.act_info19                     := 100 * NVL(l_output_table(outer_rec).balance_value,0);
5422           elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5423               g_smp_total                                        := NVL(g_smp_total,0) + 100 * l_output_table(outer_rec).balance_value;
5424 
5425             END IF;
5426           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'SPP Adoption Total' THEN
5427             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
5428               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
5429               p_fps_bal_context_2.act_info20                     := nvl(p_fps_bal_context_2.act_info20,0) + 100 * l_output_table(outer_rec).balance_value;
5430             elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5431               g_spp_total                                        := NVL(g_spp_total,0) + 100 * l_output_table(outer_rec).balance_value;
5432             END IF;
5433           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'SPP Birth Total' THEN
5434             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
5435               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
5436               p_fps_bal_context_2.act_info20                     := nvl(p_fps_bal_context_2.act_info20,0) + 100 * l_output_table(outer_rec).balance_value;
5437             END IF;
5438           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'SAP Total' THEN
5439             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
5440               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
5441               p_fps_bal_context_2.act_info21                     := 100 * l_output_table(outer_rec).balance_value;
5442           elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5443               g_sap_total                                        := NVL(g_sap_total,0) + 100 * l_output_table(outer_rec).balance_value;
5444 
5445             END IF;
5446           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'ASPP Adoption Total' THEN
5447             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
5448               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
5449               p_fps_bal_context_2.act_info22                     := nvl(p_fps_bal_context_2.act_info22,0) + 100 * l_output_table(outer_rec).balance_value;
5450            elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5451               g_assp_total                                        := NVL(g_assp_total,0) + 100 * l_output_table(outer_rec).balance_value;
5452             END IF;
5453           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'ASPP Birth Total' THEN
5454             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
5455               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
5456               p_fps_bal_context_2.act_info22                     := nvl(p_fps_bal_context_2.act_info22,0) + 100 * l_output_table(outer_rec).balance_value;
5457             END IF;
5458           END IF;
5459         END IF;
5460       END LOOP;
5461       hr_utility.trace('After for i in 1..g_fps_bal_det_tab.last loop');
5462 	  END IF; --Not null check ends
5463     END LOOP;
5464 
5465 ELSE --For if l_child_exists = 'N' then
5466 --We need to get balances with child asg action id
5467 hr_utility.trace('Processing with Child Action IDs of:'||p_last_asg_action_id);
5468 
5469 FOR rec IN csr_child_act_id(p_last_asg_action_id)
5470 LOOP
5471 
5472 --Loop for getting the balances for all child asg action id's
5473 l_chld_act_id := rec.assignment_action_id;
5474    hr_utility.trace('l_chld_act_id:'||l_chld_act_id);
5475 
5476   pay_balance_pkg.get_value(p_assignment_action_id => l_chld_act_id,
5477                               p_defined_balance_lst => g_aggr_defined_balance_lst ,
5478                               p_context_lst => l_context_lst ,
5479                               p_output_table => l_output_table );
5480 
5481     hr_utility.trace('After invoking get_value');
5482     p_fps_bal_context_2.assignment_id        := p_asg_id;
5483     p_fps_bal_context_2.action_info_category := 'GB_RTI_FPS_ASG_DET2';
5484     hr_utility.trace('Before entering for i in 1..g_fps_bal_det_tab.last loop');
5485 
5486 --Check whether this is the latest child asg action id
5487 IF (l_chld_act_id = l_max_chld_act_id) then
5488 --It is the latest child asg action id
5489 --Get all the balances with this latest child asg action id
5490     FOR outer_rec IN 1..l_output_table.count
5491     LOOP
5492 
5493     IF l_output_table(outer_rec).balance_value is not null then -- Null Check
5494 
5495       FOR inner_rec IN 1..g_fps_aggr_bal_det_tab.last
5496       LOOP
5497         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
5498           IF g_fps_aggr_bal_det_tab(inner_rec).balance_name              = 'Taxable Pay' THEN
5499             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix   = '_PER_TD_YTD' ) THEN
5500               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := 100 *  l_output_table(outer_rec).balance_value;
5501               p_fps_bal_context_2.act_info1                        := 100 * l_output_table(outer_rec).balance_value;
5502             elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5503               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;
5504               p_fps_bal_context_2.act_info6                        := NVL(p_fps_bal_context_2.act_info6,0)              + 100 * l_output_table(outer_rec).balance_value;
5505             END IF;
5506           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name           = 'PAYE' THEN
5507             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix   = '_PER_TD_CPE_YTD') THEN
5508               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
5509               p_fps_bal_context_2.act_info2                        := 100 * l_output_table(outer_rec).balance_value;
5510             elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5511               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;
5512               p_fps_bal_context_2.act_info17                       := NVL(p_fps_bal_context_2.act_info17,0)             + 100 * l_output_table(outer_rec).balance_value;
5513             END IF;
5514           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name           = 'Student Loan' THEN
5515             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix   = '_PER_TD_YTD') THEN
5516               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := 100 * NVL(l_output_table(outer_rec).balance_value,0);
5517               p_fps_bal_context_2.act_info3                        := 100 * NVL(l_output_table(outer_rec).balance_value,0);
5518             elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5519               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;
5520               p_fps_bal_context_2.act_info16                       := NVL(p_fps_bal_context_2.act_info16,0)             + 100 * l_output_table(outer_rec).balance_value;
5521             END IF;
5522           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name           = 'NI Employer' THEN
5523             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix   = '_PER_TD_YTD') THEN
5524               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := 100 * NVL(l_output_table(outer_rec).balance_value,0);
5525               p_fps_bal_context_2.act_info4                        := 100 * NVL(l_output_table(outer_rec).balance_value,0);
5526             elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5527               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;
5528               p_fps_bal_context_2.act_info23                       := NVL(p_fps_bal_context_2.act_info23,0)             + 100 * l_output_table(outer_rec).balance_value;
5529             END IF;
5530             --  This is for newly created balances
5531           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         =  'Total Direct Payments' THEN
5532             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN') THEN
5533               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100  * l_output_table(outer_rec).balance_value;
5534               p_fps_bal_context_2.act_info7                      := NVL(p_fps_bal_context_2.act_info7,0) + 100 * l_output_table(outer_rec).balance_value;
5535             END IF;
5536           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name           = 'Earnings Free of Tax and NI' THEN
5537             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_RUN') THEN
5538               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
5539               p_fps_bal_context_2.act_info7                        := NVL(p_fps_bal_context_2.act_info7,0) + 100 * l_output_table(outer_rec).balance_value;
5540             elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5541               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;
5542               p_fps_bal_context_2.act_info9                       := NVL(p_fps_bal_context_2.act_info9,0)             - 100 * l_output_table(outer_rec).balance_value;
5543             end if;
5544          elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name           = 'Earnings Free of Tax' THEN
5545             if g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5546               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;
5547               p_fps_bal_context_2.act_info14                       := NVL(p_fps_bal_context_2.act_info14,0)             + 100 * l_output_table(outer_rec).balance_value;
5548             end if;
5549         elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Total Deductions' THEN
5550             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5551               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;
5552               p_fps_bal_context_2.act_info8                     := NVL( p_fps_bal_context_2.act_info8,0)             + 100 * l_output_table(outer_rec).balance_value;
5553             END IF;
5554         elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'NIable Deductions Free of Tax' THEN
5555             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5556               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;
5557               p_fps_bal_context_2.act_info8                     := NVL( p_fps_bal_context_2.act_info8,0)             - 100 * l_output_table(outer_rec).balance_value;
5558             END IF;
5559         elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Pre Tax Deductions' THEN
5560             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5561               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;
5562               p_fps_bal_context_2.act_info8                     := NVL( p_fps_bal_context_2.act_info8,0)             - 100 * l_output_table(outer_rec).balance_value;
5563             END IF;
5564           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Gross Pay' THEN
5565             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5566               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;
5567               p_fps_bal_context_2.act_info9                     := NVL(p_fps_bal_context_2.act_info9,0)              + 100 * l_output_table(outer_rec).balance_value;
5568             END IF;
5569           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll Subject to NIC Earnings' THEN
5570             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5571               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;
5572               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
5573               p_fps_bal_context_2.act_info11                    := NVL(p_fps_bal_context_2.act_info11,0)             + 100 * l_output_table(outer_rec).balance_value;
5574             END IF;
5575           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll Subject to NIC Information' THEN
5576             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5577               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;
5578               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
5579               p_fps_bal_context_2.act_info11                    := NVL(p_fps_bal_context_2.act_info11,0)             + 100 * l_output_table(outer_rec).balance_value;
5580             END IF;
5581           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll NOT Subject to NIC Earnings' THEN
5582             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5583               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;
5584               p_fps_bal_context_2.act_info12                    := NVL(p_fps_bal_context_2.act_info12,0)             + 100 * l_output_table(outer_rec).balance_value;
5585               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
5586             END IF;
5587           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll NOT Subject to NIC Information' THEN
5588             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5589               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;
5590               p_fps_bal_context_2.act_info12                    := NVL(p_fps_bal_context_2.act_info12,0)             + 100 * l_output_table(outer_rec).balance_value;
5591               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
5592             END IF;
5593           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Pre Tax Pension Contributions' THEN
5594             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5595               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;
5596               p_fps_bal_context_2.act_info13                    := NVL(p_fps_bal_context_2.act_info13,0)             + 100 * l_output_table(outer_rec).balance_value;
5597             END IF;
5598           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Post Tax Pension Contributions' THEN
5599             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5600               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;
5601               p_fps_bal_context_2.act_info15                    := NVL(p_fps_bal_context_2.act_info15,0)             + 100 * l_output_table(outer_rec).balance_value;
5602             END IF;
5603           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'SSP Total' THEN
5604             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
5605               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
5606               p_fps_bal_context_2.act_info18                     := 100 * l_output_table(outer_rec).balance_value;
5607           elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5608               g_ssp_total                                        := NVL(g_ssp_total,0) + 100 * l_output_table(outer_rec).balance_value;
5609             END IF;
5610           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'SMP Total' THEN
5611             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
5612               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100 * NVL(l_output_table(outer_rec).balance_value,0);
5613               p_fps_bal_context_2.act_info19                     := 100 * NVL(l_output_table(outer_rec).balance_value,0);
5614           elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5615               g_smp_total                                        := NVL(g_smp_total,0) + 100 * l_output_table(outer_rec).balance_value;
5616 
5617             END IF;
5618           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'SPP Adoption Total' THEN
5619             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
5620               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
5621               p_fps_bal_context_2.act_info20                     := nvl(p_fps_bal_context_2.act_info20,0) + 100 * l_output_table(outer_rec).balance_value;
5622             elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5623               g_spp_total                                        := NVL(g_spp_total,0) + 100 * l_output_table(outer_rec).balance_value;
5624             END IF;
5625           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'SPP Birth Total' THEN
5626             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
5627               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
5628               p_fps_bal_context_2.act_info20                     := nvl(p_fps_bal_context_2.act_info20,0) + 100 * l_output_table(outer_rec).balance_value;
5629             END IF;
5630           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'SAP Total' THEN
5631             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
5632               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
5633               p_fps_bal_context_2.act_info21                     := 100 * l_output_table(outer_rec).balance_value;
5634           elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5635               g_sap_total                                        := NVL(g_sap_total,0) + 100 * l_output_table(outer_rec).balance_value;
5636 
5637             END IF;
5638           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'ASPP Adoption Total' THEN
5639             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
5640               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
5641               p_fps_bal_context_2.act_info22                     := nvl(p_fps_bal_context_2.act_info22,0) + 100 * l_output_table(outer_rec).balance_value;
5642            elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5643               g_assp_total                                        := NVL(g_assp_total,0) + 100 * l_output_table(outer_rec).balance_value;
5644             END IF;
5645           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'ASPP Birth Total' THEN
5646             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_PER_TD_YTD') THEN
5647               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100 * l_output_table(outer_rec).balance_value;
5648               p_fps_bal_context_2.act_info22                     := nvl(p_fps_bal_context_2.act_info22,0) + 100 * l_output_table(outer_rec).balance_value;
5649             END IF;
5650           END IF;
5651         END IF;
5652       END LOOP;
5653       hr_utility.trace('After for i in 1..g_fps_bal_det_tab.last loop');
5654 	  END IF; --Not null check ends
5655     END LOOP;
5656 
5657 ELSE  --IF (l_chld_act_id = l_max_chld_act_id) then
5658 --It is not the latest child asg action id
5659 --Get only the RUN balances with this child asg action id
5660 
5661     FOR outer_rec IN 1..l_output_table.count
5662     LOOP
5663 
5664     IF l_output_table(outer_rec).balance_value is not null then -- Null Check
5665 
5666       FOR inner_rec IN 1..g_fps_aggr_bal_det_tab.last
5667       LOOP
5668         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
5669           IF g_fps_aggr_bal_det_tab(inner_rec).balance_name              = 'Taxable Pay' THEN
5670             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5671               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;
5672               p_fps_bal_context_2.act_info6                        := NVL(p_fps_bal_context_2.act_info6,0)              + 100 * l_output_table(outer_rec).balance_value;
5673             END IF;
5674           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name           = 'PAYE' THEN
5675             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5676               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;
5677               p_fps_bal_context_2.act_info17                       := NVL(p_fps_bal_context_2.act_info17,0)             + 100 * l_output_table(outer_rec).balance_value;
5678             END IF;
5679           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name           = 'Student Loan' THEN
5680             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5681               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;
5682               p_fps_bal_context_2.act_info16                       := NVL(p_fps_bal_context_2.act_info16,0)             + 100 * l_output_table(outer_rec).balance_value;
5683             END IF;
5684           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name           = 'NI Employer' THEN
5685             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5686               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;
5687               p_fps_bal_context_2.act_info23                       := NVL(p_fps_bal_context_2.act_info23,0)             + 100 * l_output_table(outer_rec).balance_value;
5688             END IF;
5689             --  This is for newly created balances
5690           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         =  'Total Direct Payments' THEN
5691             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN') THEN
5692               g_fps_aggr_bal_det_tab(inner_rec).balance_value         := 100  * l_output_table(outer_rec).balance_value;
5693               p_fps_bal_context_2.act_info7                      := NVL(p_fps_bal_context_2.act_info7,0) + 100 * l_output_table(outer_rec).balance_value;
5694             END IF;
5695           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name           = 'Earnings Free of Tax and NI' THEN
5696             IF (g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix   = '_ASG_RUN') THEN
5697               g_fps_aggr_bal_det_tab(inner_rec).balance_value           := 100 * l_output_table(outer_rec).balance_value;
5698               p_fps_bal_context_2.act_info7                        := NVL(p_fps_bal_context_2.act_info7,0) + 100 * l_output_table(outer_rec).balance_value;
5699             elsif g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5700               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;
5701               p_fps_bal_context_2.act_info9                       := NVL(p_fps_bal_context_2.act_info9,0)             - 100 * l_output_table(outer_rec).balance_value;
5702             end if;
5703          elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name           = 'Earnings Free of Tax' THEN
5704             if g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5705               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;
5706               p_fps_bal_context_2.act_info14                       := NVL(p_fps_bal_context_2.act_info14,0)             + 100 * l_output_table(outer_rec).balance_value;
5707             end if;
5708         elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Total Deductions' THEN
5709             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5710               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;
5711               p_fps_bal_context_2.act_info8                     := NVL( p_fps_bal_context_2.act_info8,0)             + 100 * l_output_table(outer_rec).balance_value;
5712             END IF;
5713           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Gross Pay' THEN
5714             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5715               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;
5716               p_fps_bal_context_2.act_info9                     := NVL(p_fps_bal_context_2.act_info9,0)              + 100 * l_output_table(outer_rec).balance_value;
5717             END IF;
5718           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll Subject to NIC Earnings' THEN
5719             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5720               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;
5721               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
5722               p_fps_bal_context_2.act_info11                    := NVL(p_fps_bal_context_2.act_info11,0)             + 100 * l_output_table(outer_rec).balance_value;
5723             END IF;
5724           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll Subject to NIC Information' THEN
5725             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5726               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;
5727               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
5728               p_fps_bal_context_2.act_info11                    := NVL(p_fps_bal_context_2.act_info11,0)             + 100 * l_output_table(outer_rec).balance_value;
5729             END IF;
5730           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll NOT Subject to NIC Earnings' THEN
5731             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5732               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;
5733               p_fps_bal_context_2.act_info12                    := NVL(p_fps_bal_context_2.act_info12,0)             + 100 * l_output_table(outer_rec).balance_value;
5734               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
5735             END IF;
5736           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Benefits Taxed Through Payroll NOT Subject to NIC Information' THEN
5737             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5738               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;
5739               p_fps_bal_context_2.act_info12                    := NVL(p_fps_bal_context_2.act_info12,0)             + 100 * l_output_table(outer_rec).balance_value;
5740               p_fps_bal_context_2.act_info10                    := NVL( p_fps_bal_context_2.act_info10,0)            + 100 * l_output_table(outer_rec).balance_value;
5741             END IF;
5742           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Pre Tax Pension Contributions' THEN
5743             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5744               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;
5745               p_fps_bal_context_2.act_info13                    := NVL(p_fps_bal_context_2.act_info13,0)             + 100 * l_output_table(outer_rec).balance_value;
5746             END IF;
5747           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name        = 'Post Tax Pension Contributions' THEN
5748             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5749               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;
5750               p_fps_bal_context_2.act_info15                    := NVL(p_fps_bal_context_2.act_info15,0)             + 100 * l_output_table(outer_rec).balance_value;
5751             END IF;
5752           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'SSP Total' THEN
5753           IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5754               g_ssp_total                                        := NVL(g_ssp_total,0) + 100 * l_output_table(outer_rec).balance_value;
5755             END IF;
5756           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'SMP Total' THEN
5757             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5758               g_smp_total                                        := NVL(g_smp_total,0) + 100 * l_output_table(outer_rec).balance_value;
5759 
5760             END IF;
5761           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'SPP Adoption Total' THEN
5762             IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5763               g_spp_total                                        := NVL(g_spp_total,0) + 100 * l_output_table(outer_rec).balance_value;
5764             END IF;
5765           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'SAP Total' THEN
5766            IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5767               g_sap_total                                        := NVL(g_sap_total,0) + 100 * l_output_table(outer_rec).balance_value;
5768 
5769             END IF;
5770           elsif g_fps_aggr_bal_det_tab(inner_rec).balance_name         = 'ASPP Adoption Total' THEN
5771            IF g_fps_aggr_bal_det_tab(inner_rec).database_item_suffix = '_ASG_RUN' THEN
5772               g_assp_total                                        := NVL(g_assp_total,0) + 100 * l_output_table(outer_rec).balance_value;
5773             END IF;
5774           END IF;
5775         END IF;
5776       END LOOP;
5777       hr_utility.trace('After for i in 1..g_fps_bal_det_tab.last loop');
5778 	  END IF; --Not null check ends
5779     END LOOP;
5780 END IF; --IF (l_chld_act_id = l_max_chld_act_id) then
5781 
5782 END LOOP;
5783 END IF; --For if l_child_exists = 'N' then
5784 
5785 
5786   RETURN true;
5787 
5788 EXCEPTION
5789 WHEN OTHERS THEN
5790   hr_utility.set_location('Error in function fetch_fps_agg_asg_det2 ', 15);
5791   hr_utility.trace('Exception:' || SQLCODE || ' - ' || SQLERRM );
5792   fnd_file.put_line(fnd_file.LOG,'Exception:' || SQLCODE || ' - ' || SQLERRM);
5793   RAISE;
5794 END fetch_fps_agg_asg_det2;
5795 
5796 PROCEDURE populate_run_msg(
5797     p_assignment_action_id IN NUMBER ,
5798     p_message_text         IN VARCHAR2,
5799     p_message_level        IN VARCHAR2 DEFAULT 'F')
5800 IS
5801   PRAGMA AUTONOMOUS_TRANSACTION;
5802 BEGIN
5803   hr_utility.set_location(' Entering: populate_run_msg',111);
5804 
5805   INSERT
5806   INTO pay_message_lines
5807     (
5808       line_sequence,
5809       payroll_id,
5810       message_level,
5811       source_id,
5812       source_type,
5813       line_text
5814     )
5815     VALUES
5816     (
5817       pay_message_lines_s.nextval ,
5818       100 ,
5819       p_message_level, --'F' ,
5820       p_assignment_action_id ,
5821       'A' ,
5822       SUBSTR(p_message_text,1,240)
5823     );
5824   hr_utility.set_location(' Leaving: populate_run_msg',999);
5825   COMMIT;
5826 
5827 EXCEPTION
5828 WHEN OTHERS THEN
5829   hr_utility.trace('Error occured in populate_run_msg');
5830   RAISE;
5831 END populate_run_msg;
5832 
5833 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 )
5834 is
5835 begin
5836 hr_utility.trace('Entering set_address_fields');
5837 
5838 --Address Fields are mandatory when nino is not known or on starter
5839 if p_asg_det.act_info1 is null then
5840 	if p_person_rec.act_info7 is not null then
5841 			p_addr_rec.act_info5  := NULL;
5842 			p_addr_rec.act_info6  := NULL;
5843 			p_addr_rec.act_info7  := NULL;
5844 			p_addr_rec.act_info8  := NULL;
5845 			p_addr_rec.act_info12 := NULL;
5846 			p_addr_rec.act_info13 := NULL;
5847 			hr_utility.trace('Address details will not be reported.');
5848 	end if;
5849 end if;
5850 
5851 hr_utility.trace('Leaving set_address_fields');
5852 end set_address_fields;
5853 
5854 -- Procedure to insert data to the archive table pay_action_information
5855 PROCEDURE insert_archive_row
5856   (
5857     p_assactid       IN NUMBER,
5858     p_effective_date IN DATE,
5859     p_tab_rec_data   IN action_info_table
5860   )
5861 IS
5862   l_proc      CONSTANT VARCHAR2(50):= g_package||'insert_archive_row';
5863   l_ovn       NUMBER;
5864   l_action_id NUMBER;
5865 BEGIN
5866   hr_utility.set_location('Entering: '||l_proc,1);
5867 
5868   IF p_tab_rec_data.count > 0 THEN
5869     FOR i                IN p_tab_rec_data.first .. p_tab_rec_data.last
5870     LOOP
5871       hr_utility.trace
5872       (
5873         'Defining category '|| p_tab_rec_data(i).action_info_category
5874       )
5875       ;
5876       hr_utility.trace('action_context_id = '|| p_assactid);
5877       IF p_tab_rec_data(i).action_info_category IS NOT NULL THEN
5878         pay_action_information_api.create_action_information( p_action_information_id => l_action_id,
5879                                                               p_object_version_number => l_ovn,
5880                                                               p_action_information_category => p_tab_rec_data(i).action_info_category,
5881                                                               p_action_context_id => p_assactid,
5882                                                               p_action_context_type => 'AAP',
5883                                                               p_assignment_id => p_tab_rec_data(i).assignment_id,
5884                                                               p_effective_date => p_effective_date,
5885                                                               p_action_information1 => p_tab_rec_data(i).act_info1,
5886                                                               p_action_information2 => p_tab_rec_data(i).act_info2,
5887                                                               p_action_information3 => p_tab_rec_data(i).act_info3,
5888                                                               p_action_information4 => p_tab_rec_data(i).act_info4,
5889                                                               p_action_information5 => p_tab_rec_data(i).act_info5,
5890                                                               p_action_information6 => p_tab_rec_data(i).act_info6,
5891                                                               p_action_information7 => p_tab_rec_data(i).act_info7,
5892                                                               p_action_information8 => p_tab_rec_data(i).act_info8,
5893                                                               p_action_information9 => p_tab_rec_data(i).act_info9,
5894                                                               p_action_information10 => p_tab_rec_data(i).act_info10,
5895                                                               p_action_information11 => p_tab_rec_data(i).act_info11,
5896                                                               p_action_information12 => p_tab_rec_data(i).act_info12,
5897                                                               p_action_information13 => p_tab_rec_data(i).act_info13,
5898                                                               p_action_information14 => p_tab_rec_data(i).act_info14,
5899                                                               p_action_information15 => p_tab_rec_data(i).act_info15,
5900                                                               p_action_information16 => p_tab_rec_data(i).act_info16,
5901                                                               p_action_information17 => p_tab_rec_data(i).act_info17,
5902                                                               p_action_information18 => p_tab_rec_data(i).act_info18,
5903                                                               p_action_information19 => p_tab_rec_data(i).act_info19,
5904                                                               p_action_information20 => p_tab_rec_data(i).act_info20,
5905                                                               p_action_information21 => p_tab_rec_data(i).act_info21,
5906                                                               p_action_information22 => p_tab_rec_data(i).act_info22,
5907                                                               p_action_information23 => p_tab_rec_data(i).act_info23,
5908                                                               p_action_information24 => p_tab_rec_data(i).act_info24,
5909                                                               p_action_information25 => p_tab_rec_data(i).act_info25,
5910                                                               p_action_information26 => p_tab_rec_data(i).act_info26,
5911                                                               p_action_information27 => p_tab_rec_data(i).act_info27,
5912                                                               p_action_information28 => p_tab_rec_data(i).act_info28,
5913                                                               p_action_information29 => p_tab_rec_data(i).act_info29,
5914                                                               p_action_information30 => p_tab_rec_data(i).act_info30 );
5915       END IF;
5916     END LOOP;
5917   END IF;
5918   hr_utility.set_location('Leaving: '||l_proc,999);
5919 END insert_archive_row;
5920 -- Procedure to insert data to the archive table pay_action_information.
5921 -- This is used in PAYE aggregation case inaddition to the procedure insert_archive_row
5922 PROCEDURE insert_archive_row_agg
5923   (
5924     p_assactid       IN NUMBER,
5925     p_effective_date IN DATE,
5926     p_tab_rec_data   IN action_info_table
5927   )
5928 IS
5929   l_proc      CONSTANT VARCHAR2(50):= g_package||'insert_archive_row_agg';
5930   l_ovn       NUMBER;
5931   l_action_id NUMBER;
5932   l_assact_id number;
5933 BEGIN
5934   hr_utility.set_location('Entering: '||l_proc,1);
5935 
5936   IF p_tab_rec_data.count > 0 THEN
5937     FOR i                IN p_tab_rec_data.first .. p_tab_rec_data.last
5938     LOOP
5939       hr_utility.trace
5940       (
5941         'Defining category '|| p_tab_rec_data(i).action_info_category
5942       )
5943       ;
5944       hr_utility.trace('action_context_id = '|| p_assactid);
5945       IF p_tab_rec_data(i).action_info_category IS NOT NULL THEN
5946 --       get the assignment action id for the each assignment which are created in action creation
5947   select paa.assignment_action_id into l_assact_id from  pay_assignment_actions paa
5948   where paa.payroll_action_id = g_payroll_action_id
5949   and paa.assignment_id = p_tab_rec_data(i).assignment_id;
5950 
5951         pay_action_information_api.create_action_information( p_action_information_id => l_action_id,
5952                                                               p_object_version_number => l_ovn,
5953                                                               p_action_information_category => p_tab_rec_data(i).action_info_category,
5954                                                               p_action_context_id => l_assact_id,
5955                                                               p_action_context_type => 'AAP',
5956                                                               p_assignment_id => p_tab_rec_data(i).assignment_id,
5957                                                               p_effective_date => p_effective_date,
5958                                                               p_action_information1 => p_tab_rec_data(i).act_info1,
5959                                                               p_action_information2 => p_tab_rec_data(i).act_info2,
5960                                                               p_action_information3 => p_tab_rec_data(i).act_info3,
5961                                                               p_action_information4 => p_tab_rec_data(i).act_info4,
5962                                                               p_action_information5 => p_tab_rec_data(i).act_info5,
5963                                                               p_action_information6 => p_tab_rec_data(i).act_info6,
5964                                                               p_action_information7 => p_tab_rec_data(i).act_info7,
5965                                                               p_action_information8 => p_tab_rec_data(i).act_info8,
5966                                                               p_action_information9 => p_tab_rec_data(i).act_info9,
5967                                                               p_action_information10 => p_tab_rec_data(i).act_info10,
5968                                                               p_action_information11 => p_tab_rec_data(i).act_info11,
5969                                                               p_action_information12 => p_tab_rec_data(i).act_info12,
5970                                                               p_action_information13 => p_tab_rec_data(i).act_info13,
5971                                                               p_action_information14 => p_tab_rec_data(i).act_info14,
5972                                                               p_action_information15 => p_tab_rec_data(i).act_info15,
5973                                                               p_action_information16 => p_tab_rec_data(i).act_info16,
5974                                                               p_action_information17 => p_tab_rec_data(i).act_info17,
5975                                                               p_action_information18 => p_tab_rec_data(i).act_info18,
5976                                                               p_action_information19 => p_tab_rec_data(i).act_info19,
5977                                                               p_action_information20 => p_tab_rec_data(i).act_info20,
5978                                                               p_action_information21 => p_tab_rec_data(i).act_info21,
5979                                                               p_action_information22 => p_tab_rec_data(i).act_info22,
5980                                                               p_action_information23 => p_tab_rec_data(i).act_info23,
5981                                                               p_action_information24 => p_tab_rec_data(i).act_info24,
5982                                                               p_action_information25 => p_tab_rec_data(i).act_info25,
5983                                                               p_action_information26 => p_tab_rec_data(i).act_info26,
5984                                                               p_action_information27 => p_tab_rec_data(i).act_info27,
5985                                                               p_action_information28 => p_tab_rec_data(i).act_info28,
5986                                                               p_action_information29 => p_tab_rec_data(i).act_info29,
5987                                                               p_action_information30 => p_tab_rec_data(i).act_info30 );
5988       END IF;
5989     END LOOP;
5990   END IF;
5991   hr_utility.set_location('Leaving: '||l_proc,999);
5992 END insert_archive_row_agg;
5993 
5994 --
5995 --
5996 /*------------ PUBLIC PROCEDURES --------------*/
5997 /*--------------------------------------------------------------------------
5998 Name      : range_cursor
5999 Purpose   : This returns the select statement that is used to create the
6000 range rows.
6001 Arguments :
6002 Notes     : The range cursor determines which people should be processed.
6003 The normal practice is to include everyone, and then limit
6004 the list during the assignment action creation.
6005 --------------------------------------------------------------------------*/
6006 PROCEDURE range_cursor
6007   (
6008     pactid IN NUMBER,
6009     sqlstr OUT NOCOPY VARCHAR2
6010   )
6011 IS
6012 
6013   CURSOR csr_parameter_info
6014   IS
6015     SELECT SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'PRE_PAY_ID'),1,20) pre_pay_id,
6016            SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'FIRST_FPS'),1,20) first_fps,
6017            SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'TAX_REF'),1,20) tax_ref,
6018            fnd_date.canonical_to_date(SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'FIRST_FPS_DATE'),1,10)) first_fps_date
6019     FROM pay_payroll_actions
6020     WHERE payroll_action_id = pactid;
6021 
6022   CURSOR csr_get_payroll_id(c_pre_pact_id NUMBER)
6023   IS
6024     SELECT payroll_id
6025     FROM pay_payroll_actions
6026     WHERE payroll_action_id = c_pre_pact_id;
6027 
6028    -- cursor to check whether first fps is run for this payroll or not
6029   cursor c_first_fps_ran(c_payroll_id number) is
6030   select 'Y' from pay_payroll_actions ppa
6031   where c_payroll_id = pay_gb_eoy_archive.get_parameter(legislative_parameters,'PAYROLL_ID')
6032   and   pay_gb_eoy_archive.get_parameter(legislative_parameters,'FIRST_FPS') = 'Y'
6033   and ACTION_STATUS = 'C'
6034   and exists (select 1 from pay_gb_fps_details where PAYROLL_ACTION_ID = ppa.payroll_action_id);
6035 
6036   cursor csr_other_prepay_pactid(c_tax_ref varchar2) is
6037   select distinct ppa.payroll_action_id
6038   from pay_payroll_actions ppa
6039   where ppa.effective_date >= sysdate - 30
6040   and ppa.action_type in ('P','U')
6041   and ppa.action_status ='C'
6042   and ppa.payroll_id in (select distinct payroll_id
6043                            from pay_all_payrolls_f papf,
6044                                 hr_soft_coding_keyflex flex
6045                            where upper(flex.segment1) = c_tax_ref
6046                              and flex.SOFT_CODING_KEYFLEX_ID = papf.SOFT_CODING_KEYFLEX_ID)
6047   minus
6048   select distinct pre_payment_payroll_action_id from pay_gb_bacs_fps;
6049 
6050   l_report_type VARCHAR2(15);
6051   l_payroll_id  NUMBER;
6052   l_proc        CONSTANT VARCHAR2(35):= g_package||'range_cursor';
6053   l_first_fps_ind varchar2(10);
6054   l_first_fps_date date;
6055   l_frst_fps_ran char;
6056   l_dummy number;
6057   l_other_prepay_pactid number;
6058   l_tax_ref varchar2(30);
6059 
6060 BEGIN
6061   hr_utility.set_location('Entering: '||l_proc,1);
6062 
6063   OPEN  csr_parameter_info;
6064   FETCH csr_parameter_info INTO g_pre_pact_id,l_first_fps_ind,l_tax_ref,l_first_fps_date;
6065   CLOSE csr_parameter_info;
6066   hr_utility.trace('g_pre_pact_id: '||g_pre_pact_id);
6067   hr_utility.trace('l_tax_ref: '||l_tax_ref);
6068   hr_utility.trace('Before calling PAY_GB_FPS_NI_AND_OTHERS.FPS_BACS_PREPROCESS: ');
6069   l_dummy := PAY_GB_FPS_NI_AND_OTHERS.FPS_BACS_PREPROCESS(g_pre_pact_id, 'FPS');
6070 
6071 /*Below code generates the HASH CODE for All Prepayments ran within 30 days.
6072 This will avoid generating duplicate records when it is called from Archive Code*/
6073 
6074   OPEN csr_other_prepay_pactid(l_tax_ref);
6075   LOOP
6076   FETCH csr_other_prepay_pactid INTO l_other_prepay_pactid;
6077   EXIT WHEN csr_other_prepay_pactid%notfound;
6078   hr_utility.trace('Before calling PAY_GB_FPS_NI_AND_OTHERS.FPS_BACS_PREPROCESS for: '||l_other_prepay_pactid);
6079   l_dummy := PAY_GB_FPS_NI_AND_OTHERS.FPS_BACS_PREPROCESS(l_other_prepay_pactid, 'FPS');
6080   hr_utility.trace('After calling PAY_GB_FPS_NI_AND_OTHERS.FPS_BACS_PREPROCESS for: '||l_other_prepay_pactid);
6081   END LOOP;
6082   CLOSE csr_other_prepay_pactid;
6083 
6084   OPEN csr_get_payroll_id(g_pre_pact_id);
6085   FETCH csr_get_payroll_id INTO l_payroll_id;
6086   CLOSE csr_get_payroll_id;
6087 
6088   hr_utility.trace(' Payroll  : '||l_payroll_id);
6089   hr_utility.trace(' l_first_fps_ind  : '||l_first_fps_ind);
6090   hr_utility.trace(' l_first_fps_date  : '||l_first_fps_date);
6091 
6092   -- This blocks checks whether First FPS is already ran for this payroll.
6093   if l_first_fps_ind is not null and l_first_fps_ind = 'Y' then
6094      open c_first_fps_ran(l_payroll_id);
6095      fetch c_first_fps_ran into l_frst_fps_ran;
6096      close c_first_fps_ran;
6097 
6098      if l_frst_fps_ran = 'Y' then
6099         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.');
6100         raise first_fps_ran_already_error;
6101      end if;
6102   end if;
6103 
6104   if l_first_fps_ind is not null and l_first_fps_ind <> 'Y'
6105          and l_first_fps_date is not null then
6106         fnd_file.put_line (fnd_file.LOG,'Error : First FPS date should not be entered when First FPS Indicator is not Yes.');
6107         RAISE first_fps_indicator_error;
6108   end if;
6109 
6110   if l_first_fps_ind = 'Y' and l_first_fps_date is null then
6111         fnd_file.put_line (fnd_file.LOG,'Error : Enter the First FPS date when First FPS Indicator is Yes.');
6112         RAISE first_fps_indicator_error;
6113   end if;
6114 
6115   sqlstr := 'select distinct PERSON_ID '|| 'from per_all_assignments_f paaf, '
6116              || 'pay_payroll_actions ppa '|| 'where ppa.payroll_action_id = :payroll_action_id '
6117 	     || 'and ppa.business_group_id = paaf.business_group_id '|| ' and paaf.payroll_id = '
6118 	     ||''''||l_payroll_id||''''|| ' order by person_id';
6119 
6120   hr_utility.trace(' Range Cursor Statement : '||sqlstr);
6121   -- Header validations
6122   pay_gb_rti_fps_validate.header_validations(pactid,g_validation_check);
6123 
6124   hr_utility.set_location(' Leaving: '||l_proc,100);
6125 
6126 EXCEPTION
6127 when first_fps_indicator_error then
6128 hr_utility.raise_error;
6129 when first_fps_ran_already_error then
6130 hr_utility.set_location('First FPS already ran for the payroll id  '||l_payroll_id,1);
6131 hr_utility.raise_error;
6132 WHEN OTHERS THEN
6133   hr_utility.raise_error;
6134 END range_cursor;
6135 --
6136 --
6137 --
6138 PROCEDURE internal_action_creation_fps(
6139     pactid      IN NUMBER,
6140     stperson    IN NUMBER,
6141     endperson   IN NUMBER,
6142     chunk       IN NUMBER,
6143     p_info_type IN VARCHAR2,
6144     p_rep_type  IN VARCHAR2)
6145 IS
6146   l_proc              CONSTANT VARCHAR2(90):= g_package||'internal_action_creation_fps';
6147   l_payroll_id        NUMBER;
6148   l_tax_ref           VARCHAR2(20);
6149   l_business_group_id NUMBER;
6150   l_end_date DATE;
6151   l_start_date DATE;
6152   l_ass_act_id       NUMBER;
6153   l_assignment_id    NUMBER;
6154   l_arch             BOOLEAN;
6155   lockingactid       NUMBER;
6156   l_locked_action_id NUMBER;
6157   l_exist            NUMBER;
6158   l_first_fps        VARCHAR2(1);
6159   l_first_fps_run_date date;
6160   l_first_fps_eff_date date;
6161   l_asg_number        per_all_assignments_f.assignment_number%type;
6162   CURSOR csr_parameter_info
6163   IS
6164     SELECT to_number(pay_gb_eoy_archive.get_parameter(legislative_parameters, 'PAYROLL_ID')) payroll_id,
6165       SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'TAX_REF'),1,20) tax_ref,
6166       SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'FIRST_FPS'),1,1) first_fps,
6167       effective_date,
6168       business_group_id,
6169       fnd_date.canonical_to_date(SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'FIRST_FPS_DATE'),1,10)) first_fps_date
6170     FROM pay_payroll_actions pact
6171     WHERE payroll_action_id = pactid;
6172 
6173   CURSOR csr_asg(c_asg_id NUMBER, c_effective_date DATE)
6174   IS
6175     SELECT asg.person_id person_id,
6176       trim(asg.primary_flag) asg_primary_flag,
6177       trim(nvl(pap.per_information10,'N')) per_agg_flag,
6178       trim(nvl(pap.per_information9,'N')) ni_agg_flag,
6179       asg.assignment_number
6180     FROM per_all_people_f pap,
6181       per_all_assignments_f asg
6182     WHERE asg.assignment_id       = c_asg_id
6183     AND pap.person_id             = asg.person_id
6184     AND asg.business_group_id     = l_business_group_id
6185     AND c_effective_date BETWEEN asg.effective_start_date AND asg.effective_end_date
6186     AND c_effective_date BETWEEN pap.effective_start_date AND pap.effective_end_date;
6187 
6188   CURSOR csr_get_assignments( pactid NUMBER,
6189                               stperson NUMBER,
6190                               endperson NUMBER,
6191                               p_payroll_id NUMBER,
6192                               p_pre_pact_id NUMBER,
6193                               c_effective_date DATE)
6194   IS
6195     SELECT DISTINCT act.assignment_id assignment_id,
6196           act.assignment_action_id asg_act_id
6197     FROM --pay_payroll_actions ppa,  --Current pactid
6198       pay_payroll_actions appa,    --Payroll Run
6199       pay_payroll_actions appa2,   --Prepayments
6200       pay_assignment_actions act,  --Payroll Run
6201       pay_assignment_actions act1, --Prepayments
6202       pay_action_interlocks pai,   --Prepayments
6203       per_all_assignments_f as1
6204     WHERE --ppa.payroll_action_id = pactid
6205     as1.person_id BETWEEN stperson AND endperson
6206     AND appa.action_type     IN ('R','Q','V','B') -- Payroll Run or Quickpay Run
6207     AND act.payroll_action_id = appa.payroll_action_id
6208     AND act.source_action_id IS NULL
6209     AND as1.assignment_id     = act.assignment_id
6210     AND appa.effective_date BETWEEN as1.effective_start_date AND as1.effective_end_date
6211     AND act.action_status         = 'C'
6212     AND act.assignment_action_id  = pai.locked_action_id
6213     AND act1.assignment_action_id = pai.locking_action_id
6214     AND act1.action_status        = 'C'
6215     AND act1.payroll_action_id    = appa2.payroll_action_id
6216     AND appa2.action_type        IN ('P','U') -- Prepayments or Quickpay Prepayments
6217     AND as1.payroll_id           = p_payroll_id
6218     --OR p_payroll_id              IS NULL)
6219     AND appa2.payroll_action_id   = p_pre_pact_id
6220     AND exists( select 1
6221                   from pay_pre_payments ppp
6222                  where ASSIGNMENT_ACTION_ID = act1.assignment_action_id
6223                    and ppp.value <> 0)
6224     ORDER BY act.assignment_id;
6225 
6226   l_flag        VARCHAR2(1) :='Y';
6227   l_prev_person NUMBER      :=0;
6228   --
6229   l_effective_date DATE;
6230   l_asg_primary_flag VARCHAR2(1);
6231   l_per_agg_flag     VARCHAR2(1);
6232   l_ni_agg_flag     VARCHAR2(1);
6233   l_pre_pact_id      NUMBER;
6234 
6235 
6236 -- First FPS Cursors
6237 cursor csr_get_prepayment_date(p_pre_pact_id number) is
6238 select effective_date, payroll_id, business_group_id
6239  from pay_payroll_actions
6240 where payroll_action_id = p_pre_pact_id;
6241 
6242 cursor csr_asg_details(p_prepay_id number,p_prepayment_date date, l_prl_id number, l_bus_grp_id number) is
6243 select distinct paaf.assignment_id assignment_id,
6244 		  trim(paaf.primary_flag)      asg_primary_flag,
6245       trim(pap.per_information10) per_agg_flag,
6246       pap.person_id
6247      from   per_all_people_f pap,
6248             per_all_assignments_f paaf,
6249 			per_assignment_status_types past --,
6250 			--pay_payroll_actions paa
6251      where  pap.person_id between stperson and endperson
6252 	--	 and    paa.payroll_Action_id = p_prepay_id
6253      and    pap.person_id = paaf.person_id
6254 		 and    paaf.assignment_type = 'E'
6255 		 and    paaf.assignment_status_type_id = past.assignment_status_type_id
6256      and    past.per_system_status in ('ACTIVE_ASSIGN', 'SUSP_ASSIGN','TERM_ASSIGN')
6257      and    paaf.business_group_id = l_bus_grp_id --paa.business_group_id
6258      and    paaf.payroll_id = l_prl_id --paa.payroll_id
6259      and    pap.effective_start_date =
6260        ( select max(pap2.effective_start_date) from
6261 				 per_all_people_f pap2
6262          where  pap2.person_id         = pap.person_id
6263          and    pap2.effective_start_date <= p_prepayment_date
6264        )
6265      and    paaf.effective_start_date =
6266        ( select max(asg2.effective_start_date)
6267          from   per_all_assignments_f asg2
6268          where  asg2.assignment_id         = paaf.assignment_id
6269          and    asg2.assignment_type       = 'E'
6270          and    asg2.effective_start_date <= p_prepayment_date
6271        )
6272 order by pap.person_id;
6273 
6274 -- cursor to check whether this assignment processed in prepayment or not
6275 cursor csr_prepayment_made(pre_pay_id number,p_asg_id number) is
6276 SELECT  paa_pre.assignment_id
6277 FROM    pay_assignment_actions paa_pre
6278       , pay_assignment_actions paa_arcv
6279 WHERE   paa_arcv.assignment_id = p_asg_id
6280 AND     paa_pre.payroll_action_id = pre_pay_id
6281 AND     paa_pre.assignment_id = paa_arcv.assignment_id;
6282 
6283 -- get the defined balance id for specified balance and dimension
6284 cursor get_defined_balance_id
6285     (p_balance_name VARCHAR2, p_dimension_name VARCHAR2) IS
6286 SELECT  defined_balance_id
6287 FROM    pay_defined_balances db
6288       , pay_balance_types b
6289       , pay_balance_dimensions d
6290 WHERE   b.balance_name = p_balance_name
6291 AND     d.dimension_name = p_dimension_name
6292 AND     db.balance_type_id = b.balance_type_id
6293 AND     db.balance_dimension_id = d.balance_dimension_id
6294 AND     b.legislation_code = 'GB'
6295 AND     d.legislation_code = 'GB';
6296 
6297 -- to fetch last assignment action id for the given assignment
6298 cursor csr_last_action(p_asgid NUMBER, p_start_year DATE,p_end_year DATE) IS
6299 SELECT
6300         to_number (substr (max (lpad (paa.action_sequence, 15
6301                                     , '0')
6302                                 || paa.assignment_action_id), 16))
6303       , max (pact.effective_date) effective_date
6304 FROM    pay_assignment_actions paa
6305       , pay_payroll_actions pact
6306       , per_time_periods ptp
6307 WHERE   paa.assignment_id = p_asgid
6308 AND     paa.payroll_action_id = pact.payroll_action_id
6309 AND     pact.payroll_id = l_payroll_id
6310 AND     pact.time_period_id = ptp.time_period_id
6311 AND     pact.action_type IN ('Q', 'R', 'B'
6312                            , 'I', 'V')
6313 AND     paa.action_status IN ('C', 'S')
6314 AND     ptp.regular_payment_date
6315         BETWEEN p_start_year
6316         AND     p_end_year;
6317 
6318   CURSOR csr_aggr_min_act_id( p_person_id NUMBER,
6319                               p_payroll_id NUMBER,
6320                               p_pre_pact_id NUMBER,
6321                               c_effective_date DATE)
6322   IS
6323 
6324     SELECT max (act.assignment_action_id) assignment_id
6325 --    SELECT min (act.assignment_action_id) assignment_id
6326 --    SELECT max (act.assignment_id) assignment_id
6327     FROM pay_payroll_actions ppa,  --Current pactid
6328       pay_payroll_actions appa,    --Payroll Run
6329       pay_payroll_actions appa2,   --Prepayments
6330       pay_assignment_actions act,  --Payroll Run
6331       pay_assignment_actions act1, --Prepayments
6332       pay_action_interlocks pai,   --Prepayments
6333       per_all_assignments_f as1
6334     WHERE as1.person_id = p_person_id --45885
6335     AND appa.action_type     IN ('R','Q','V','B') -- Payroll Run or Quickpay Run
6336     AND act.payroll_action_id = appa.payroll_action_id
6337     AND act.source_action_id IS NULL
6338     AND as1.assignment_id     = act.assignment_id
6339     AND ppa.effective_date BETWEEN as1.effective_start_date AND as1.effective_end_date
6340     AND act.action_status         = 'C'
6341     AND act.assignment_action_id  = pai.locked_action_id
6342     AND act1.assignment_action_id = pai.locking_action_id
6343     AND act1.action_status        = 'C'
6344     AND act1.payroll_action_id    = appa2.payroll_action_id
6345     AND appa2.action_type        IN ('P','U') -- Prepayments or Quickpay Prepayments
6346     AND (as1.payroll_id           = p_payroll_id
6347     OR p_payroll_id              IS NULL)
6348     AND appa2.payroll_action_id   = p_pre_pact_id
6349     AND exists( select 1
6350                   from pay_pre_payments ppp
6351                  where ASSIGNMENT_ACTION_ID = act1.assignment_action_id
6352                    and ppp.value <> 0); --For the bug 16542698
6353 
6354 
6355  CURSOR csr_ni_aggr_max_act_id( p_person_id NUMBER,
6356                               p_payroll_id NUMBER,
6357                               p_pre_pact_id NUMBER,
6358                               c_effective_date DATE)
6359   IS
6360 
6361     SELECT max (act.assignment_action_id) assignment_id
6362 --    SELECT max (act.assignment_id) assignment_id
6363     FROM pay_payroll_actions ppa,  --Current pactid
6364       pay_payroll_actions appa,    --Payroll Run
6365       pay_payroll_actions appa2,   --Prepayments
6366       pay_assignment_actions act,  --Payroll Run
6367       pay_assignment_actions act1, --Prepayments
6368       pay_action_interlocks pai,   --Prepayments
6369       per_all_assignments_f as1
6370     WHERE as1.person_id = p_person_id --45885
6371     AND appa.action_type     IN ('R','Q') -- Payroll Run or Quickpay Run
6372     AND act.payroll_action_id = appa.payroll_action_id
6373     AND act.source_action_id IS NULL
6374     AND as1.assignment_id     = act.assignment_id
6375     AND ppa.effective_date BETWEEN as1.effective_start_date AND as1.effective_end_date
6376     AND act.action_status         = 'C'
6377     AND act.assignment_action_id  = pai.locked_action_id
6378     AND act1.assignment_action_id = pai.locking_action_id
6379     AND act1.action_status        = 'C'
6380     AND act1.payroll_action_id    = appa2.payroll_action_id
6381     AND appa2.action_type        IN ('P','U') -- Prepayments or Quickpay Prepayments
6382     AND (as1.payroll_id           = p_payroll_id
6383     OR p_payroll_id              IS NULL)
6384     AND appa2.payroll_action_id   = p_pre_pact_id;
6385 
6386 l_person_id number;
6387 cursor csr_get_other_asg(c_asg_id number) is
6388   select paaf.assignment_id asg_id from per_all_assignments_f paaf where
6389   paaf.person_id = l_person_id
6390   and paaf.assignment_id <> c_asg_id
6391   and l_effective_date between paaf.effective_start_date and paaf.effective_end_date;
6392 
6393 
6394 -- new agg changes
6395 cursor csr_agg_all_asg_act_creat(p_person_id NUMBER,
6396                                 p_asg_id NUMBER,
6397                                 p_asg_act_id NUMBER,
6398                                 p_start_year DATE,
6399                                 p_end_year DATE) is
6400 SELECT
6401         /*    to_number (substr (max (lpad (paa.action_sequence ,15,'0')
6402                                     || paa.assignment_action_id),16)) max_asg_act_id*/
6403            distinct paa.assignment_id
6404 /*           ,max (pact.effective_date) effective_date
6405            ,max(paa1.assignment_action_id)*/
6406     FROM    pay_assignment_actions paa
6407            ,pay_assignment_actions paa1
6408            ,per_all_assignments_f paaf
6409            ,pay_payroll_actions pact
6410            ,pay_payroll_actions pact1
6411            ,per_time_periods ptp
6412            ,pay_action_interlocks pai
6413     WHERE   paa.assignment_id = paaf.assignment_id
6414     AND     paa.assignment_id <> p_asg_id
6415     AND     paaf.person_id = p_person_id
6416     AND     paa.payroll_action_id = pact.payroll_action_id
6417     AND     paa1.payroll_action_id = pact1.payroll_action_id
6418     AND     pai.locked_action_id = paa.assignment_action_id
6419     and     pai.locking_action_id = paa1.assignment_action_id
6420     AND     pact1.action_type IN ('P','U')
6421     AND     pact.time_period_id = ptp.time_period_id
6422     AND     pact.action_type IN ('Q','R','B','I','V')
6423     AND     paa.action_status IN ('C','S')
6424     AND     paa1.action_status IN ('C','S')
6425     AND     ptp.regular_payment_date BETWEEN p_start_year
6426                                      AND     p_end_year
6427     AND     (
6428                     (
6429                             paa.assignment_action_id >
6430                             (
6431                             SELECT  nvl (max (payroll_asg_act_id),paa.assignment_action_id)
6432                             FROM    pay_gb_fps_details pgfd
6433                             WHERE   pgfd.person_id = p_person_id
6434                             )
6435                     AND     paa.source_action_id IS NULL
6436                     )
6437             OR      (
6438                             (
6439                             SELECT  count (*)
6440                             FROM    pay_gb_fps_details pgfd
6441                             WHERE   pgfd.person_id = p_person_id
6442                             ) = 0
6443                     )
6444             )
6445     AND     ptp.regular_payment_date >= nvl (l_first_fps_run_date, l_first_fps_eff_date)
6446     AND     paa.assignment_action_id < p_asg_act_id
6447     AND exists( select 1
6448                   from pay_pre_payments ppp
6449                  where ASSIGNMENT_ACTION_ID = paa1.assignment_action_id
6450                    and ppp.value <> 0)
6451     GROUP BY paa.payroll_action_id,paa.assignment_id ;
6452 --    ORDER BY max_asg_act_id;
6453 
6454 cursor csr_agg_all_actions_lock(p_person_id NUMBER,
6455                                 p_asg_id NUMBER,
6456                                 p_start_year DATE,
6457                                 p_end_year DATE)is
6458 SELECT  /*+ USE_NL(paa, pact, ptp) */
6459          /*   to_number (substr (max (lpad (paa.action_sequence ,15,'0')
6460                                     || paa.assignment_action_id),16)) max_asg_act_id
6461            ,max(paa.assignment_id)
6462            ,max (pact.effective_date) effective_date*/
6463            distinct max(paa1.assignment_action_id) max_pre_act_id
6464     FROM    pay_assignment_actions paa
6465            ,pay_assignment_actions paa1
6466            ,per_all_assignments_f paaf
6467            ,pay_payroll_actions pact
6468            ,pay_payroll_actions pact1
6469            ,per_time_periods ptp
6470            ,pay_action_interlocks pai
6471     WHERE   paa.assignment_id = paaf.assignment_id
6472     AND     paa.assignment_id = p_asg_id
6473     AND     paaf.person_id = p_person_id
6474     AND     paa.payroll_action_id = pact.payroll_action_id
6475     AND     paa1.payroll_action_id = pact1.payroll_action_id
6476     AND     pai.locked_action_id = paa.assignment_action_id
6477     and     pai.locking_action_id = paa1.assignment_action_id
6478     AND     pact1.action_type IN ('P','U')
6479     AND     pact.time_period_id = ptp.time_period_id
6480     AND     pact.action_type IN ('Q','R','B','I','V')
6481     AND     paa.action_status IN ('C','S')
6482     AND     paa1.action_status IN ('C','S')
6483     AND     ptp.regular_payment_date BETWEEN p_start_year
6484                                      AND     p_end_year
6485     AND     (
6486                     (
6487                             paa.assignment_action_id >
6488                             (
6489                             SELECT  nvl (max (payroll_asg_act_id),paa.assignment_action_id)
6490                             FROM    pay_gb_fps_details pgfd
6491                             WHERE   pgfd.person_id = p_person_id
6492 --                            AND pgfd.assignment_id = p_asg_id
6493                             )
6494                     AND     paa.source_action_id IS NULL
6495                     )
6496             OR      (
6497                             (
6498                             SELECT  count (*)
6499                             FROM    pay_gb_fps_details pgfd
6500                             WHERE   pgfd.person_id = p_person_id
6501                             AND pgfd.assignment_id = p_asg_id
6502                             ) = 0
6503                     )
6504             )
6505     AND     ptp.regular_payment_date >= nvl (l_first_fps_run_date, l_first_fps_eff_date)
6506     GROUP BY paa.payroll_action_id
6507     ORDER BY max_pre_act_id;
6508 
6509 cursor chk_processed_in_prepay(c_cur_asg_action_id number) is
6510 select pai.locking_action_id
6511 from
6512 pay_action_interlocks pai,
6513 pay_payroll_actions ppa,
6514 pay_assignment_actions paa
6515 where pai.locked_action_id = c_cur_asg_action_id
6516 and ppa.action_type in ('P','U')
6517 and paa.payroll_action_id = ppa.payroll_action_id
6518 and paa.assignment_action_id = pai.locking_action_id;
6519 
6520 CURSOR csr_prepay_asg_act_details(p_asgid NUMBER, p_pre_pay_id NUMBER)
6521   IS
6522     SELECT paa.assignment_action_id,
6523       ppa.payroll_action_id,
6524       ppa.effective_date
6525     FROM pay_assignment_actions paa,
6526       pay_payroll_actions ppa
6527     WHERE paa.assignment_id   = p_asgid
6528     AND ppa.payroll_action_id = p_pre_pay_id
6529     AND paa.payroll_action_id = ppa.payroll_action_id;
6530 
6531   CURSOR get_first_fps_date(c_payroll_id number)
6532   IS
6533   SELECT max (ppa2.effective_date)
6534                   FROM    pay_payroll_actions ppa2
6535                   WHERE   ppa2.report_qualifier = 'GB'
6536                   AND     ppa2.report_type = 'RTI_FPS_REP'
6537                   AND     ppa2.action_status = 'C'
6538                   AND     substr (pay_gb_eoy_archive.get_parameter (ppa2.legislative_parameters,'FIRST_FPS'),1,20) = 'Y'
6539                   AND     substr (pay_gb_eoy_archive.get_parameter (ppa2.legislative_parameters,'PAYROLL_ID'),1,20) = c_payroll_id;
6540 
6541     -- Curosr to fetch the RTI Reporting flag and effective date of the assignment
6542    cursor csr_ni_rpt_flag(c_asg_id number) is
6543    select AEI_INFORMATION1, AEI_INFORMATION2 from per_assignment_extra_info where assignment_id = c_asg_id
6544    and AEI_INFORMATION_CATEGORY = 'GB_RTI_AGGREGATION';
6545 
6546    -- Cursor to fetch the RTI NI Reporting assignment for this person.
6547    cursor csr_get_ni_rpt_asg(c_asg_id number) is
6548    select
6549    paei.assignment_id , fnd_date.canonical_to_date(paei.AEI_INFORMATION2)
6550    from per_all_assignments_f paaf1, per_all_assignments_f paaf2 ,per_assignment_extra_info paei
6551    where paaf1.assignment_id = c_asg_id
6552    and paaf1.person_id = paaf2.person_id
6553    and paaf2.ASSIGNMENT_TYPE = 'E'
6554    and paei.assignment_id = paaf2.assignment_id
6555    and paei.AEI_INFORMATION_CATEGORY = 'GB_RTI_AGGREGATION'
6556    and paei. AEI_INFORMATION1 = 'Y'
6557    and l_effective_date between paaf1.effective_start_date and paaf1.effective_end_date
6558    and l_effective_date between paaf2.effective_start_date and paaf2.effective_end_date
6559    order by 2 desc;
6560 
6561 -- cursor to fetch the prepayment asg_action id for the given payroll asg_action id
6562 cursor csr_ni_prepay_asg_act_details(c_payroll_asg_act_id number) is
6563       select pai.locking_action_id prepay_asg_act_id from
6564 pay_action_interlocks pai,
6565 pay_assignment_actions paa,
6566 pay_payroll_actions ppa
6567 where pai.locked_action_id = c_payroll_asg_act_id
6568 and pai.locking_action_id = paa.assignment_action_id
6569 and paa.action_status in ('C','S')
6570 and ppa.action_type in ('P','U')
6571 and paa.payroll_action_id = ppa.payroll_action_id;
6572 
6573 -- to check whether the given assignment is processed in given prepay payroll_action id
6574 cursor csr_rti_rpt_proc_prepay(c_ni_rpt_asg_id number,c_pre_pay_action_id number) is
6575   select 'Y' from pay_assignment_actions paa,
6576   pay_payroll_actions ppa
6577   where
6578   ppa.payroll_action_id = c_pre_pay_action_id
6579   and ppa.payroll_action_id = paa.payroll_action_id
6580   and paa.assignment_id = c_ni_rpt_asg_id
6581   and ppa.action_type    IN ('P','U')
6582   and paa.action_status  IN ('C','S')
6583     AND exists( select 1
6584                   from pay_pre_payments ppp
6585                  where ASSIGNMENT_ACTION_ID = paa.assignment_action_id
6586                    and ppp.value <> 0); --For the bug 16542698
6587 
6588 CURSOR csr_chk_earlier_processed (c_person_id number, c_cur_asg_action_id number) is
6589  SELECT  count (*)
6590  FROM  pay_gb_fps_details pgfd
6591  WHERE  pgfd.person_id = c_person_id
6592  AND  pgfd.payroll_asg_act_id = c_cur_asg_action_id;
6593 
6594   --Below cursor fetches the latest payroll run details of the current assignment
6595   CURSOR csr_aggr_asgs_processed(p_person_id NUMBER, p_pre_pay_id NUMBER, p_start_year DATE, p_end_year DATE)
6596   IS
6597     SELECT count(distinct paa1.assignment_id)
6598     FROM pay_assignment_actions paa,
6599       per_all_assignments_f paaf,
6600       pay_payroll_actions pact,
6601       per_time_periods ptp,
6602       pay_assignment_actions paa1, --Prepayments
6603       pay_payroll_actions ppa1,    --Prepayments
6604       pay_action_interlocks pai    --Prepayments
6605     WHERE paa.assignment_id = paaf.assignment_id
6606     AND paaf.person_id = p_person_id
6607     AND paa.payroll_action_id = pact.payroll_action_id
6608     AND pact.time_period_id   = ptp.time_period_id
6609     AND pact.action_type     IN ('Q','R','B','I','V')
6610     AND paa.action_status    IN ('C','S')
6611     AND ptp.regular_payment_date BETWEEN p_start_year AND p_end_year
6612     AND ppa1.payroll_action_id    = p_pre_pay_id
6613     AND ppa1.action_type         IN ('P','U')
6614     AND paa1.payroll_action_id    = ppa1.payroll_action_id
6615     AND paa1.assignment_action_id = pai.locking_action_id
6616     AND paa.assignment_action_id  = pai.locked_action_id;
6617 
6618   CURSOR csr_aggr_max_act_id( p_person_id NUMBER)
6619   IS
6620     SELECT max(act.assignment_action_id) assignment_action_id
6621     FROM pay_payroll_actions appa,    --Payroll Run
6622       pay_payroll_actions appa2,   --Prepayments
6623       pay_assignment_actions act,  --Payroll Run
6624       pay_assignment_actions act1, --Prepayments
6625       pay_action_interlocks pai,   --Prepayments
6626       per_all_assignments_f as1,
6627       pay_all_payrolls_f papf ,
6628       hr_soft_coding_keyflex flex
6629     WHERE as1.person_id = p_person_id --58105
6630     AND appa.action_type     IN ('R','Q','V','B') -- Payroll Run or Quickpay Run
6631     AND act.payroll_action_id = appa.payroll_action_id
6632     AND act.source_action_id IS NULL
6633     AND as1.assignment_id     = act.assignment_id
6634     AND act.action_status         = 'C'
6635     AND act.assignment_action_id  = pai.locked_action_id
6636     AND act1.assignment_action_id = pai.locking_action_id
6637     AND act1.action_status        = 'C'
6638     AND act1.payroll_action_id    = appa2.payroll_action_id
6639     AND appa2.action_type        IN ('P','U') -- Prepayments or Quickpay Prepayments
6640     AND appa2.effective_date between g_start_year and l_first_fps_eff_date
6641     AND appa2.effective_date BETWEEN as1.effective_start_date AND as1.effective_end_date
6642     AND papf.payroll_id = as1.payroll_id
6643     AND flex.SOFT_CODING_KEYFLEX_ID = papf.SOFT_CODING_KEYFLEX_ID
6644     AND upper(flex.segment1) = upper(l_tax_ref);
6645 
6646   CURSOR csr_asg_id(c_aggr_max_act_id number)
6647   IS
6648     SELECT assignment_id
6649     FROM pay_assignment_actions
6650     WHERE assignment_action_id = c_aggr_max_act_id;
6651 
6652 -- Declarations for First FPS
6653 l_last_asg_action_id number;
6654 
6655 l_gross number;
6656 l_taxable number;
6657 l_niable number;
6658 l_gross_id number;
6659 l_taxable_id number;
6660 l_niable_id number;
6661 
6662 l_first_fps_prepay_asg varchar2(10);
6663 l_temp_asg_id number;
6664 l_date_soy date;
6665 l_date_eoy date;
6666 l_pre_id number;
6667 l_prepayment_date date;
6668 
6669 l_asg_action_id number;
6670 l_asg_id number;
6671 l_pre_pay_asg_action_id number;
6672 l_last_effective_date date;
6673 l_aggr_max_asg_id number;
6674 l_aggr_min_act_id number;
6675 l_prepay_asg_action_id number;
6676 l_prepay_payroll_action_id number;
6677 l_prepay_effective_date date;
6678 l_cur_asg_pre_pay_act_id number;
6679 l_ni_rpt_asg_id number;
6680 l_ni_rti_flag varchar2(1);
6681 l_ni_rpt_date date;
6682 l_ni_rti_date varchar2(30);
6683 l_ni_prepay_asg_action_id number;
6684 l_rti_ni_proc_flag varchar2(1);
6685 l_ni_aggr_max_act_id number;
6686 l_earlier_processed number;
6687 l_aggr_asgs_processed number;
6688 l_aggr_max_act_id number;
6689 l_latest_first_fps_asg_id number;
6690 l_prev_asg_id number := 0;
6691 l_flag1        VARCHAR2(1) :='Y';
6692 l_prl_id number;
6693 l_bus_grp_id number;
6694 
6695 BEGIN
6696   hr_utility.set_location('Entering: '||l_proc,1);
6697 
6698   OPEN csr_parameter_info;
6699   FETCH csr_parameter_info
6700   INTO l_payroll_id,
6701        l_tax_ref,
6702        l_first_fps,
6703        l_effective_date,
6704        l_business_group_id,
6705        l_first_fps_eff_date;
6706   CLOSE csr_parameter_info;
6707 
6708 
6709   OPEN get_first_fps_date(l_payroll_id);
6710   FETCH get_first_fps_date
6711    INTO l_first_fps_run_date;
6712   CLOSE get_first_fps_date;
6713 
6714   hr_utility.set_location('process start date'||l_start_date,20);
6715   hr_utility.set_location('process end date'||l_end_date,20);
6716   hr_utility.set_location('pactid: '||pactid,20);
6717   hr_utility.set_location('stperson: '||stperson,20);
6718   hr_utility.set_location('endperson: '||endperson,20);
6719   hr_utility.set_location('l_payroll_id: '||l_payroll_id,20);
6720   hr_utility.set_location('l_tax_ref: '||l_tax_ref,20);
6721   hr_utility.set_location('l_effective_date: '||l_effective_date,20);
6722   hr_utility.set_location('l_business_group_id: '||l_business_group_id,20);
6723   hr_utility.set_location('g_start_year: '||g_start_year,20);
6724   hr_utility.set_location('l_first_fps_run_date: '||l_first_fps_run_date,20);
6725   hr_utility.set_location('l_first_fps_eff_date: '||l_first_fps_eff_date,20);
6726 
6727   PAY_GB_P11D_ARCHIVE_SS.get_parameters( p_payroll_action_id => pactid,
6728                                          p_token_name => 'PRE_PAY_ID',
6729                                          p_token_value => l_pre_pact_id);
6730 
6731   hr_utility.trace(' Payroll  : '||l_payroll_id);
6732   hr_utility.trace(' Pre Payment Payroll_Action_ID Entered : '||to_number(l_pre_pact_id));
6733 
6734   IF l_effective_date >= to_date('06-04-'||SUBSTR(TO_CHAR(l_effective_date,'YYYY/MON/DD'),1,4),'DD-MM-YYYY' ) THEN
6735     g_start_year      := to_date('06-04-'||SUBSTR(TO_CHAR(l_effective_date,'YYYY/MON/DD'),1,4),'DD-MM-YYYY' ) ;
6736     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') ;
6737   ELSE
6738     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') ;
6739     g_end_year   := to_date('05-04-'||SUBSTR(TO_CHAR(l_effective_date,'YYYY/MON/DD'),1,4),'DD-MM-YYYY') ;
6740   END IF;
6741 
6742 --  hr_utility.set_location('Before csr_get_assignments cursor',10);
6743   hr_utility.set_location('pactid :' || pactid,15);
6744   hr_utility.set_location('stperson :' || stperson,15);
6745   hr_utility.set_location('endperson :' || endperson,15);
6746   hr_utility.set_location('l_payroll_id :' || l_payroll_id,15);
6747   hr_utility.set_location('l_pre_pact_id :' || l_pre_pact_id,15);
6748   hr_utility.set_location('l_effective_date :' || l_effective_date,15);
6749 
6750 l_pre_id := to_number(l_pre_pact_id);
6751 
6752   hr_utility.set_location('l_first_fps    : '||l_first_fps,20);
6753 if l_first_fps = 'Y' then
6754 
6755 open csr_get_prepayment_date(l_pre_id);
6756 fetch csr_get_prepayment_date into l_prepayment_date, l_prl_id, l_bus_grp_id;
6757 close csr_get_prepayment_date;
6758 
6759 FOR asg_record IN csr_asg_details(l_pre_pact_id,l_prepayment_date, l_prl_id, l_bus_grp_id)
6760 LOOP
6761 l_flag := 'Y';
6762 
6763 --PAYE Aggr logic starts here
6764 /* Below code is to filter out PAYE Aggregated employees as part of First FPS processing logic
6765 if they have any of the assignments processed in current prepayment request id.
6766 That means this employee would be processed in main PAYE Aggregated code itself.
6767 Hence, skip the action creation in First FPS logic. */
6768 
6769 l_aggr_asgs_processed := 0;
6770 IF asg_record.per_agg_flag  = 'Y' THEN
6771         hr_utility.trace('PAYE Aggregated Assignment');
6772 
6773         OPEN csr_aggr_asgs_processed(asg_record.person_id, l_pre_pact_id, g_start_year, g_end_year);
6774         FETCH csr_aggr_asgs_processed
6775         INTO l_aggr_asgs_processed;
6776 
6777         hr_utility.trace('l_aggr_asgs_processed:' ||l_aggr_asgs_processed);
6778 
6779         CLOSE csr_aggr_asgs_processed;
6780 
6781         IF l_aggr_asgs_processed > 0 THEN
6782                 l_flag:= 'N';
6783                 hr_utility.trace('There is a payment made for one of his asgs in current prepayment request');
6784 
6785         ELSIF l_aggr_asgs_processed = 0 THEN  --l_aggr_asgs_processed > 0 THEN
6786 
6787                 OPEN csr_aggr_max_act_id(asg_record.person_id);
6788                 FETCH csr_aggr_max_act_id
6789                 INTO l_aggr_max_act_id;
6790                 CLOSE csr_aggr_max_act_id;
6791 
6792                 hr_utility.set_location('l_aggr_max_act_id    : '||l_aggr_max_act_id,20);
6793 
6794                 OPEN csr_asg_id(l_aggr_max_act_id);
6795                 FETCH csr_asg_id
6796                 INTO l_latest_first_fps_asg_id;
6797                 CLOSE csr_asg_id;
6798 
6799                 hr_utility.set_location('l_latest_first_fps_asg_id    : '||l_latest_first_fps_asg_id,20);
6800                 hr_utility.set_location('asg_record.assignment_id    : '||asg_record.assignment_id,20);
6801 
6802                 IF (nvl(l_latest_first_fps_asg_id,-999) <> asg_record.assignment_id) THEN
6803                 l_flag:= 'N';
6804                 END IF;
6805 
6806         END IF;  --l_aggr_asgs_processed > 0 THEN
6807 
6808 END IF;  --IF asg_record.per_agg_flag  = 'Y' THEN
6809 hr_utility.set_location('l_flag: '||l_flag,20);
6810 --PAYE Aggr logic ends here
6811 
6812 if (l_flag = 'Y') then
6813 
6814 -- Added to check YTD balances
6815 open csr_prepayment_made(l_pre_pact_id,asg_record.assignment_id);
6816 fetch csr_prepayment_made into l_temp_asg_id;
6817 if csr_prepayment_made%found then
6818 	l_first_fps_prepay_asg := 'Y';
6819 else
6820   l_first_fps_prepay_asg := 'N';
6821 end if;
6822 close csr_prepayment_made;
6823 
6824 	hr_utility.trace(asg_record.assignment_id||' First FPS Pre Pay Asg : '||l_first_fps_prepay_asg );
6825 
6826 if l_first_fps_prepay_asg = 'N' then
6827 
6828 hr_utility.trace(asg_record.assignment_id||'Entering First FPS Logic');
6829 
6830     OPEN get_defined_balance_id('Gross Pay','_ASG_TD_YTD');
6831     FETCH get_defined_balance_id INTO l_gross_id;
6832     CLOSE get_defined_balance_id;
6833 
6834     OPEN get_defined_balance_id('Taxable Pay','_ASG_TD_YTD');
6835     FETCH get_defined_balance_id INTO l_taxable_id;
6836     CLOSE get_defined_balance_id;
6837 
6838     OPEN get_defined_balance_id('NIable Pay','_ASG_TD_YTD');
6839     FETCH get_defined_balance_id INTO l_niable_id;
6840     CLOSE get_defined_balance_id;
6841 
6842 l_effective_date := l_prepayment_date;
6843 
6844 -- Tax Year Start and End
6845       If l_effective_date >= to_date('06-04-'||substr(to_char(l_effective_date,'YYYY/MON/DD'),1,4),'DD-MM-YYYY' ) Then
6846          l_date_soy := to_date('06-04-'||substr(to_char(l_effective_date,'YYYY/MON/DD'),1,4),'DD-MM-YYYY' ) ;
6847          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')  ;
6848       Else
6849          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')  ;
6850          l_date_eoy := to_date('05-04-'||substr(to_char(l_effective_date,'YYYY/MON/DD'),1,4),'DD-MM-YYYY') ;
6851       End If;
6852 
6853 -- To get latest assignment action id for the assignment
6854 OPEN csr_last_action(asg_record.assignment_id,l_date_soy,l_prepayment_date);
6855 FETCH csr_last_action INTO  l_last_asg_action_id,l_last_effective_date;
6856 
6857 -- If there are no assignment action ids, no payment has been made for the assignment
6858 -- This assignment will not be archived.
6859 IF l_last_asg_action_id is null then
6860    fnd_file.put_line (fnd_file.LOG,'No Payment has been made for assignment ' || asg_record.assignment_id|| '.');
6861    l_flag:= 'N';
6862 end if;
6863 CLOSE csr_last_action;
6864 
6865 -- Fetching balances
6866   IF l_last_asg_action_id IS NOT NULL THEN
6867       l_gross   := pay_balance_pkg.get_value(l_gross_id,l_last_asg_action_id);
6868       IF l_gross <= 0 THEN
6869 			l_taxable   := pay_balance_pkg.get_value(l_taxable_id,l_last_asg_action_id);
6870       END IF;
6871 
6872 			IF l_taxable <= 0 THEN
6873 			l_niable   := pay_balance_pkg.get_value(l_niable_id,l_last_asg_action_id);
6874       end if;
6875   END IF;
6876 
6877  IF l_gross > 0 or l_taxable > 0 or l_niable > 0 THEN
6878     hr_utility.trace('Assignment '||asg_record.assignment_id||' has YTD values');
6879  ELSE
6880     hr_utility.trace('Assignment '||asg_record.assignment_id||' has No YTD values.');
6881     l_flag:= 'N';
6882  END IF;
6883 
6884 end if;
6885 end if; --if (l_flag = 'Y') then
6886 
6887 if l_flag = 'Y' and l_first_fps_prepay_asg = 'N' Then
6888      SELECT pay_assignment_actions_s.nextval INTO lockingactid FROM dual;
6889       -- Insert assignment into pay_assignment_actions
6890       hr_nonrun_asact.insact ( lockingactid, asg_record.assignment_id, pactid, chunk, NULL );
6891 End if;
6892 
6893 END LOOP;
6894 end if; -- First FPS logic ends
6895 --else
6896   hr_utility.set_location('Before csr_get_assignments cursor',10);
6897   FOR asg_rec IN csr_get_assignments (pactid, stperson, endperson, l_payroll_id, l_pre_pact_id, l_effective_date)
6898   LOOP
6899     l_flag1 := 'Y';
6900     hr_utility.set_location('Assignment ID :' || asg_rec.assignment_id,15);
6901     hr_utility.set_location('asg_rec.asg_act_id:' || asg_rec.asg_act_id,15);
6902 
6903 --Modifications for the bug 16164625 starts here
6904 
6905   IF asg_rec.asg_act_id IS NOT NULL THEN
6906       OPEN get_defined_balance_id('Gross Pay','_ASG_TD_YTD');
6907       FETCH get_defined_balance_id INTO l_gross_id;
6908       CLOSE get_defined_balance_id;
6909 
6910       OPEN get_defined_balance_id('Taxable Pay','_ASG_TD_YTD');
6911       FETCH get_defined_balance_id INTO l_taxable_id;
6912       CLOSE get_defined_balance_id;
6913 
6914       OPEN get_defined_balance_id('NIable Pay','_ASG_TD_YTD');
6915       FETCH get_defined_balance_id INTO l_niable_id;
6916       CLOSE get_defined_balance_id;
6917 
6918       l_gross   := pay_balance_pkg.get_value(l_gross_id,asg_rec.asg_act_id);
6919       IF l_gross <= 0 THEN
6920              l_taxable   := pay_balance_pkg.get_value(l_taxable_id,asg_rec.asg_act_id);
6921       END IF;
6922       IF l_taxable <= 0 THEN
6923              l_niable   := pay_balance_pkg.get_value(l_niable_id,asg_rec.asg_act_id);
6924       END IF;
6925   END IF;
6926 
6927   IF l_gross > 0 or l_taxable > 0 or l_niable > 0 THEN
6928       hr_utility.trace('Assignment '||asg_rec.assignment_id||' has YTD values');
6929   ELSE
6930       hr_utility.trace('Assignment '||asg_rec.assignment_id||' has No YTD values.');
6931       l_flag1:= 'N';
6932   END IF;
6933 
6934 --Modifications for the bug 16164625 ends here
6935 
6936 --Ignore the same assignment ids (Prepayment would have processed same assignment's payroll, Quickpay)
6937     if l_prev_asg_id = asg_rec.assignment_id then
6938 			l_flag1 := 'N';
6939     else
6940 			l_prev_asg_id := asg_rec.assignment_id;
6941     end if;
6942 
6943     l_arch := false;
6944     --     hr_utility.set_location('Before CSR_ASG cursor l_effective_date '|| to_char(l_effective_date),10);
6945     hr_utility.set_location('Before CSR_ASG cursor',10);
6946 
6947     OPEN csr_asg(asg_rec.assignment_id, l_effective_date);
6948     FETCH csr_asg INTO l_person_id, l_asg_primary_flag, l_per_agg_flag,l_ni_agg_flag,l_asg_number;
6949     CLOSE csr_asg;
6950 
6951     hr_utility.set_location('l_person_id :' || l_person_id,20);
6952     hr_utility.set_location('l_asg_primary_flag :' || l_asg_primary_flag,20);
6953     hr_utility.set_location('l_per_agg_flag :' || l_per_agg_flag,20);
6954     hr_utility.set_location('l_ni_agg_flag :' || l_ni_agg_flag,20);
6955     hr_utility.set_location('l_payroll_id :' || l_payroll_id,20);
6956     hr_utility.set_location('l_pre_pact_id :' || l_pre_pact_id,20);
6957     hr_utility.set_location('l_effective_date :' || l_effective_date,20);
6958 
6959     hr_utility.set_location('Assignment ID :' || asg_rec.assignment_id,20);
6960     l_arch := false;
6961     -- If Aggregate flag is set then ignore non primary assignments
6962 IF l_per_agg_flag        = 'Y' and l_flag1 = 'Y' THEN
6963 
6964     OPEN csr_aggr_min_act_id (l_person_id, l_payroll_id, l_pre_pact_id, l_effective_date);
6965     FETCH csr_aggr_min_act_id INTO l_aggr_min_act_id;
6966     CLOSE csr_aggr_min_act_id;
6967 
6968     l_earlier_processed := 0;
6969     OPEN csr_chk_earlier_processed(l_person_id, asg_rec.asg_act_id);
6970     FETCH csr_chk_earlier_processed
6971     INTO l_earlier_processed;
6972     CLOSE csr_chk_earlier_processed;
6973 
6974     hr_utility.set_location('asg_rec.asg_act_id: '||asg_rec.asg_act_id, 50);
6975     hr_utility.set_location('l_earlier_processed :' || l_earlier_processed,20);
6976     hr_utility.set_location('l_aggr_min_act_id :' || l_aggr_min_act_id,20);
6977 
6978 if ((asg_rec.asg_act_id = l_aggr_min_act_id) and (l_earlier_processed = 0)) then
6979       hr_utility.set_location('Creating Assignment Action for assignment_id '||asg_rec.assignment_id, 50);
6980 
6981       SELECT pay_assignment_actions_s.nextval INTO lockingactid FROM dual;
6982       hr_nonrun_asact.insact ( lockingactid, asg_rec.assignment_id, pactid, chunk, NULL );
6983  -- get the assigment action id of the prepayment payroll action id for the current assignment.
6984     OPEN csr_prepay_asg_act_details(asg_rec.assignment_id, l_pre_pact_id);
6985     FETCH csr_prepay_asg_act_details
6986     INTO l_prepay_asg_action_id,
6987       l_prepay_payroll_action_id,
6988       l_prepay_effective_date;
6989     CLOSE csr_prepay_asg_act_details;
6990 
6991 -- apply lock
6992         hr_nonrun_asact.insint(lockingactid, l_prepay_asg_action_id);
6993 
6994      hr_utility.set_location('Creating other Assignment Action ids for assignment_id '||asg_rec.assignment_id, 50);
6995 
6996 /*for c_asg in csr_get_other_asg(asg_rec.assignment_id)
6997 loop*/
6998   /*    SELECT pay_assignment_actions_s.nextval INTO lockingactid FROM dual;
6999      hr_utility.set_location('Creating action for asg '||c_asg.asg_id, 50);
7000       hr_nonrun_asact.insact(lockingactid, c_asg.asg_id, pactid, chunk, NULL );
7001      hr_utility.set_location('Created action for asg '||c_asg.asg_id, 50);*/
7002 
7003    hr_utility.set_location('l_person_id:'||l_person_id || ' asg_rec.assignment_id:' ||
7004    asg_rec.assignment_id ||  ' g_start_year: ' || g_start_year ,50);
7005    hr_utility.set_location(' g_end_year: ' || g_end_year || ' g_first_fps_run_date: '||l_first_fps_run_date, 50);
7006    hr_utility.set_location('asg_rec.assignment_id '||asg_rec.assignment_id, 50);
7007 --     OPEN csr_agg_all_asg_act_creat(l_person_id, asg_rec.assignment_id, g_start_year, g_end_year);
7008      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);
7009      loop
7010       FETCH csr_agg_all_asg_act_creat
7011       INTO l_asg_id;
7012 
7013        EXIT WHEN csr_agg_all_asg_act_creat%NOTFOUND;
7014        SELECT pay_assignment_actions_s.nextval INTO lockingactid FROM dual;
7015        hr_utility.set_location('Creating action for asg '||l_asg_id, 50);
7016        hr_nonrun_asact.insact(lockingactid, l_asg_id, pactid, chunk, NULL );
7017        hr_utility.set_location('Created action for asg '||l_asg_id, 50);
7018 
7019         -- new changes
7020        open csr_agg_all_actions_lock(l_person_id, l_asg_id, g_start_year, g_end_year);
7021 
7022           loop
7023 
7024 		       FETCH csr_agg_all_actions_lock
7025 --      INTO l_asg_action_id,
7026 --           l_asg_id,
7027 --           l_last_effective_date,
7028 INTO           l_pre_pay_asg_action_id;
7029            EXIT WHEN csr_agg_all_actions_lock%NOTFOUND;
7030         -- Apply lock
7031 
7032        hr_utility.set_location('lockingactid '||lockingactid, 50);
7033        hr_utility.set_location('l_pre_pay_asg_action_id '||l_pre_pay_asg_action_id, 50);
7034        hr_nonrun_asact.insint(lockingactid, l_pre_pay_asg_action_id);
7035 
7036          end loop;
7037         close csr_agg_all_actions_lock;
7038      end loop;
7039      close csr_agg_all_asg_act_creat;
7040 
7041         /*open chk_processed_in_prepay(l_cur_asg_action_id);
7042         fetch chk_processed_in_prepay into l_cur_asg_pre_pay_act_id;
7043         close chk_processed_in_prepay;*/
7044 -- lock
7045        -- hr_nonrun_asact.insint(lockingactid, l_cur_asg_pre_pay_act_id);
7046 
7047 /*end loop;*/
7048 
7049 -- end get the other assigment ids for this person.
7050 
7051 else
7052       hr_utility.set_location('Another higher assignment for current employee exists.', 50);
7053       hr_utility.set_location('Hence, not creating assignment action for the current assignment: '||asg_rec.assignment_id, 50);
7054 end if;
7055 
7056 ELSIF l_flag1 = 'Y' THEN
7057       -- Create one assignment action for every assignment
7058       hr_utility.set_location('Archiving for assignment_id '||asg_rec.assignment_id, 50);
7059       SELECT pay_assignment_actions_s.nextval INTO lockingactid FROM dual;
7060 
7061       -- Insert assignment into pay_assignment_actions
7062       hr_nonrun_asact.insact ( lockingactid, asg_rec.assignment_id, pactid, chunk, NULL );
7063  -- get the assigment action id of the prepayment payroll action id for the current assignment.
7064     OPEN csr_prepay_asg_act_details(asg_rec.assignment_id, l_pre_pact_id);
7065     FETCH csr_prepay_asg_act_details
7066     INTO l_prepay_asg_action_id,
7067       l_prepay_payroll_action_id,
7068       l_prepay_effective_date;
7069   --apply the lock
7070       hr_nonrun_asact.insint(lockingactid, l_prepay_asg_action_id);
7071     CLOSE csr_prepay_asg_act_details;
7072       if l_ni_agg_flag = 'Y' then
7073          hr_utility.set_location('This is NI aggregation case ', 50);
7074          -- Get the RTI NI Reporting asg and effective date.
7075          open csr_ni_rpt_flag(asg_rec.assignment_id);
7076          fetch csr_ni_rpt_flag into l_ni_rti_flag,l_ni_rti_date;
7077          close csr_ni_rpt_flag;
7078          hr_utility.set_location('l_ni_rti_flag: ' || l_ni_rti_flag, 50);
7079          hr_utility.set_location('l_ni_rti_date: ' || l_ni_rti_date, 50);
7080          if nvl(l_ni_rti_flag,'N') <> 'Y' then
7081                  hr_utility.set_location('non RTI reporting assigment' || l_ni_rti_date, 50);
7082                  open csr_get_ni_rpt_asg(asg_rec.assignment_id);
7083                  fetch csr_get_ni_rpt_asg into l_ni_rpt_asg_id,l_ni_rpt_date;
7084                  close csr_get_ni_rpt_asg;
7085                  hr_utility.set_location('l_ni_rpt_asg_id: ' || l_ni_rpt_asg_id, 50);
7086                  hr_utility.set_location('l_ni_rpt_date: ' || l_ni_rpt_date, 50);
7087 
7088                  if l_ni_rpt_asg_id is null then
7089 
7090                       	hr_utility.set_location('NO RTI Reporting asg for :'|| l_asg_number, 50);
7091             						fnd_file.put_line (fnd_file.LOG,'NO RTI Reporting asg for :'|| l_asg_number);
7092                       --raise_application_error(-20001,'NO RTI Reporting asg for :'|| asg_rec.assignment_id);
7093                  else
7094                        -- check whether the RTI reporting is being processed in the current assignment.
7095                          open csr_rti_rpt_proc_prepay(l_ni_rpt_asg_id,l_pre_pact_id);
7096                          fetch csr_rti_rpt_proc_prepay into l_rti_ni_proc_flag;
7097                          close csr_rti_rpt_proc_prepay;
7098                             hr_utility.set_location('l_rti_ni_proc_flag:'|| l_rti_ni_proc_flag, 50);
7099                          OPEN csr_ni_aggr_max_act_id (l_person_id, l_payroll_id, l_pre_pact_id, l_effective_date);
7100                          FETCH csr_ni_aggr_max_act_id INTO l_ni_aggr_max_act_id;
7101                          CLOSE csr_ni_aggr_max_act_id;
7102                             hr_utility.set_location('l_ni_aggr_max_act_id:'|| l_ni_aggr_max_act_id , 50);
7103                             hr_utility.set_location('asg_rec.asg_act_id:'|| asg_rec.asg_act_id , 50);
7104                          if nvl(l_rti_ni_proc_flag,'N') <> 'Y' and asg_rec.asg_act_id = l_ni_aggr_max_act_id then
7105                             hr_utility.set_location('Creating action for rti rpt asg:'|| l_ni_rpt_asg_id, 50);
7106                             SELECT pay_assignment_actions_s.nextval INTO lockingactid FROM dual;
7107                            -- Insert assignment into pay_assignment_actions
7108                              hr_nonrun_asact.insact ( lockingactid, l_ni_rpt_asg_id, pactid, chunk, NULL );
7109 /*                            -- get the assigment action id of the prepayment payroll action id for the current assignment.
7110                              OPEN csr_ni_prepay_asg_act_details(asg_rec.asg_act_id);
7111                              FETCH csr_ni_prepay_asg_act_details
7112                              INTO l_ni_prepay_asg_action_id;
7113                              CLOSE csr_ni_prepay_asg_act_details;
7114                             hr_utility.trace('l_ni_prepay_asg_action_id: '|| l_ni_prepay_asg_action_id);
7115                             --apply the lock
7116                              if l_ni_prepay_asg_action_id is not null then
7117                                  hr_utility.trace('lockingactid: '||lockingactid);
7118                                  hr_utility.trace('l_ni_prepay_asg_action_id: '|| l_ni_prepay_asg_action_id);
7119                                  hr_nonrun_asact.insint(lockingactid, l_ni_prepay_asg_action_id);
7120                              else
7121                                  hr_utility.trace('No prepayment for asg_id : '|| );
7122 */
7123                          end if;
7124 
7125                  end if;
7126          else
7127               hr_utility.set_location('Current assignment - ' || asg_rec.assignment_id || ' is RTI NI Reporting assignment.',50);
7128               -- proceed with next assignment
7129          end if;
7130       end if;
7131 
7132 END IF; -- IF l_per_agg_flag        = 'Y' THEN
7133 
7134   END LOOP;
7135 --end if;
7136   hr_utility.set_location('Leaving: '||l_proc,999);
7137 END internal_action_creation_fps;
7138 --
7139 --
7140 --
7141 /*--------------------------------------------------------------------------
7142 Name      : action_creation
7143 Purpose   : This creates the assignment actions for a specific chunk.
7144 Arguments :
7145 Notes     :
7146 --------------------------------------------------------------------------*/
7147 PROCEDURE rti_fps_action_creation(
7148     pactid    IN NUMBER,
7149     stperson  IN NUMBER,
7150     endperson IN NUMBER,
7151     chunk     IN NUMBER)
7152 IS
7153 BEGIN
7154   internal_action_creation_fps(pactid, stperson, endperson, chunk,'GB_RTI_FPS', 'RTI_FPS_REP');
7155 END rti_fps_action_creation;
7156 ---
7157 ---
7158 PROCEDURE reset_flag(
7159     p_type            VARCHAR2,
7160     p_reset_flag_type VARCHAR2,
7161     p_assact          NUMBER)
7162 IS
7163   l_proc CONSTANT VARCHAR2(50):= g_package||'reset_flag';
7164 
7165   CURSOR csr_aei_starter_details
7166   IS
7167     SELECT aei.assignment_extra_info_id,
7168       aei.object_version_number,
7169       aei.aei_information8
7170     FROM pay_assignment_actions paa,
7171       per_assignment_extra_info aei
7172     WHERE paa.assignment_action_id = p_assact
7173     AND aei.assignment_id          = paa.assignment_id
7174     AND aei.information_type       = p_type;
7175 
7176   CURSOR csr_aei_pensioner_details
7177   IS
7178     SELECT aei.assignment_extra_info_id,
7179       aei.object_version_number,
7180       aei.aei_information9
7181     FROM pay_assignment_actions paa,
7182       per_assignment_extra_info aei
7183     WHERE paa.assignment_action_id = p_assact
7184     AND aei.assignment_id          = paa.assignment_id
7185     AND aei.information_type       = p_type;
7186 
7187   CURSOR csr_aei_expat_details
7188   IS
7189     SELECT aei.assignment_extra_info_id,
7190       aei.object_version_number,
7191       aei.aei_information19
7192     FROM pay_assignment_actions paa,
7193       per_assignment_extra_info aei
7194     WHERE paa.assignment_action_id = p_assact
7195     AND aei.assignment_id          = paa.assignment_id
7196     AND aei.information_type       = p_type;
7197 
7198   l_aei_starter_rec csr_aei_starter_details%rowtype;
7199   l_aei_pensioner_rec csr_aei_pensioner_details%rowtype;
7200   l_aei_expat_rec csr_aei_expat_details%rowtype;
7201   l_ovn        NUMBER;
7202   l_reset_flag VARCHAR2(30);
7203 
7204 BEGIN
7205   IF p_reset_flag_type = 'STARTER' THEN
7206 
7207     OPEN csr_aei_starter_details;
7208     FETCH csr_aei_starter_details INTO l_aei_starter_rec;
7209     CLOSE csr_aei_starter_details;
7210 
7211     IF l_aei_starter_rec.aei_information8 = 'Y' THEN
7212       hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false,
7213                                                                  p_object_version_number => l_ovn,
7214                                                                  p_assignment_extra_info_id => l_aei_starter_rec.assignment_extra_info_id,
7215                                                                  p_aei_information_category => p_type,
7216                                                                  p_aei_information8 => 'N');
7217     END IF;
7218   END IF;
7219 
7220   IF p_reset_flag_type = 'PENSIONER' THEN
7221 
7222     OPEN csr_aei_pensioner_details;
7223     FETCH csr_aei_pensioner_details INTO l_aei_pensioner_rec;
7224     CLOSE csr_aei_pensioner_details;
7225 
7226     IF l_aei_pensioner_rec.aei_information9 = 'Y' THEN
7227       hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false,
7228                                                                  p_object_version_number => l_ovn,
7229                                                                  p_assignment_extra_info_id => l_aei_pensioner_rec.assignment_extra_info_id,
7230                                                                  p_aei_information_category => p_type,
7231                                                                  p_aei_information9 => 'N');
7232     END IF;
7233   END IF;
7234 
7235   IF p_reset_flag_type = 'EXPAT' THEN
7236 
7237     OPEN csr_aei_expat_details;
7238     FETCH csr_aei_expat_details INTO l_aei_expat_rec;
7239     CLOSE csr_aei_expat_details;
7240 
7241     IF l_aei_expat_rec.aei_information19 = 'Y' THEN
7242       hr_assignment_extra_info_api.update_assignment_extra_info (p_validate => false,
7243                                                                  p_object_version_number => l_ovn,
7244                                                                  p_assignment_extra_info_id => l_aei_expat_rec.assignment_extra_info_id,
7245                                                                  p_aei_information_category => p_type,
7246                                                                  p_aei_information19 => 'N');
7247     END IF;
7248   END IF;
7249 END;
7250 
7251 /*--------------------------------------------------------------------------
7252 Name      : archinit
7253 Purpose   : This procedure can be used to perform an initialisation
7254 section and validation of Employer details
7255 Arguments :
7256 Notes     :
7257 --------------------------------------------------------------------------*/
7258 PROCEDURE archinit(
7259     p_payroll_action_id IN NUMBER)
7260 IS
7261   error_found EXCEPTION;
7262   l_proc CONSTANT VARCHAR2(50) := g_package || ' archinit';
7263   l_sender_id hr_organization_information.org_information11%TYPE;
7264   l_tax_ref hr_organization_information.org_information1%TYPE;
7265   l_tax_dist hr_organization_information.org_information2%TYPE;
7266   l_employer_addr VARCHAR2(255);
7267   l_employer_name VARCHAR2(150);
7268   l_err           BOOLEAN;
7269   l_exp           EXCEPTION;
7270   l_rep_typ       VARCHAR2(100);
7271   l_effective_date DATE;
7272 
7273 
7274   CURSOR csr_parameter_info(p_payroll_action_id NUMBER)
7275   IS
7276     SELECT effective_date,
7277            business_group_id,
7278            SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'PRE_PAY_ID'),1,20) pre_pay_id,
7279            SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'PAYROLL_ID'),1,20) payroll_id,
7280            SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'TAX_REF'),1,20) tax_ref,
7281            SUBSTR(pay_gb_eoy_archive.get_parameter (legislative_parameters, 'FIRST_FPS'), 1,1) first_fps
7282 
7283     FROM pay_payroll_actions
7284     WHERE payroll_action_id = p_payroll_action_id;
7285 
7286   cursor csr_prepayment_date(pre_pay_id number)
7287   is
7288     SELECT
7289       ppa.effective_date
7290     FROM
7291       pay_payroll_actions ppa
7292     WHERE
7293      ppa.payroll_action_id = pre_pay_id;
7294 
7295   CURSOR csr_pre_pact_eff_date(p_payroll_action_id NUMBER)
7296   IS
7297     SELECT effective_date
7298     FROM pay_payroll_actions
7299     WHERE payroll_action_id = p_payroll_action_id;
7300 
7301   CURSOR csr_payroll_details(pactid NUMBER)
7302   IS
7303     SELECT NVL(UPPER(hoi.org_information11),' ') sender_id,
7304       DECODE(SUBSTR(pact.legislative_parameters,instr(pact.legislative_parameters,'TEST=') + 5,1) ,'N',' ','Y','1') test_indicator,
7305       fnd_number.number_to_canonical(pact.request_id) request_id,
7306       NVL(upper(SUBSTR(ltrim(hoi.org_information3),1,35)),' ') employer_name,
7307       NVL(upper(SUBSTR(ltrim(SUBSTR(hoi.org_information1,4,11),'/'),1,10)),' ') tax_ref_no,
7308       lpad(NVL(SUBSTR(hoi.org_information1,1,3),' '),3,0) tax_office_no,
7309       DECODE(PAY_GB_EOY_MAGTAPE.get_payroll_version, ' ', '0', PAY_GB_EOY_MAGTAPE.get_payroll_version) payroll_ver,
7310       NVL(upper(SUBSTR(hoi.org_information6,1,13)),' ') acc_ref_no,
7311       report_type
7312     FROM pay_payroll_actions pact,
7313       hr_organization_information hoi
7314     WHERE pact.payroll_action_id        =pactid
7315     AND pact.business_group_id          = hoi.organization_id
7316     AND hoi.org_information_context     = 'Tax Details References'
7317     AND NVL(hoi.org_information10,'UK') = 'UK'
7318     AND SUBSTR(pact.legislative_parameters,instr(pact.legislative_parameters,'TAX_REF=') + 8, instr(pact.legislative_parameters
7319       ||' ',' ', instr(pact.legislative_parameters,'TAX_REF=')                           +8) - instr(pact.legislative_parameters, 'TAX_REF=') - 8) = hoi.org_information1;
7320 
7321   CURSOR csr_ni_details
7322   IS
7323     SELECT petf.element_type_id,
7324       input_value_id
7325     FROM pay_element_types_f petf,
7326       pay_input_values_f pivf
7327     WHERE petf.element_name   = 'NI'
7328     AND petf.element_type_id  = pivf.element_type_id
7329     AND pivf.name             = 'Process Type'
7330     AND petf.legislation_code = 'GB'
7331     AND pivf.legislation_code = 'GB'
7332     AND l_effective_date BETWEEN petf.effective_start_date AND petf.effective_end_date
7333     AND l_effective_date BETWEEN pivf.effective_start_date AND pivf.effective_end_date;
7334 
7335   CURSOR get_defined_balance_id
7336   IS
7337     SELECT b.balance_name balance_name,
7338       b.balance_type_id balance_type_id,
7339       d.database_item_suffix database_item_suffix,
7340       d.balance_dimension_id balance_dimension_id,
7341       db.defined_balance_id defined_balance_id
7342     FROM pay_defined_balances db,
7343       pay_balance_types b,
7344       pay_balance_dimensions d
7345     WHERE db.balance_type_id     = b.balance_type_id
7346     AND db.balance_dimension_id  = d.balance_dimension_id
7347     AND ((d.database_item_suffix = '_ASG_TD_YTD'
7348     AND b.balance_name          IN ('Taxable Pay','PAYE','Student Loan','SSP Total',
7349                                     'SMP Total','SPP Adoption Total', 'SPP Birth Total','SAP Total',
7350                                     'ASPP Adoption Total','ASPP Birth Total','Pre Tax Pension Contributions',
7351                                     'Post Tax Pension Contributions',
7352                    	                 'Earnings Free of Tax','Earnings Free of NI','Earnings Free of Tax and NI',
7353                                     'Benefits Taxed Through Payroll Subject to NIC Earnings',
7354                                     'Benefits Taxed Through Payroll NOT Subject to NIC Earnings',
7355                                     'Benefits Taxed Through Payroll Subject to NIC Information',
7356                                     'Benefits Taxed Through Payroll NOT Subject to NIC Information', 'NI Employer',
7357                                      'Total Direct Payments'))
7358     OR(d.database_item_suffix    = '_ASG_RUN'
7359     AND b.balance_name          IN ('Taxable Pay', 'Student Loan', 'PAYE', 'Pre Tax Pension Contributions',
7360                                     'Post Tax Pension Contributions','NIC able Benefits',
7361                                     'Earnings Free of Tax','Earnings Free of NI','Earnings Free of Tax and NI',
7362                                     'Benefits Taxed Through Payroll Subject to NIC Earnings',
7363                                     'Benefits Taxed Through Payroll NOT Subject to NIC Earnings',
7364                                     'Benefits Taxed Through Payroll Subject to NIC Information',
7365                                     'Benefits Taxed Through Payroll NOT Subject to NIC Information',
7366                                     'Gross Pay', 'Total Deductions', 'NI Employer',
7367                                      'Total Direct Payments','SSP Total',
7368                                     'SMP Total','SPP Adoption Total', 'SAP Total',
7369                                     'ASPP Adoption Total','ASPP Birth Total','Pre Tax Deductions'
7370                                      ,'NIable Deductions Free of Tax'))
7371 /*
7372       OR(d.database_item_suffix    = '_ASG_PROC_PTD'
7373     AND b.balance_name          IN ('Court Order','Court Order Non Priority'))
7374 */
7375       OR(d.database_item_suffix    = '_PER_TD_YTD'
7376     AND b.balance_name          IN ('Taxable Pay', 'Student Loan', 'NI Employer', 'Earnings Free of Tax',
7377                                     'Earnings Free of NI', 'SSP Total', 'SMP Total', 'SPP Adoption Total',
7378                                     'SPP Birth Total', 'SAP Total', 'ASPP Adoption Total', 'ASPP Birth Total'))
7379 
7380       OR(d.database_item_suffix    = '_PER_TD_CPE_YTD'
7381     AND b.balance_name          IN ('PAYE')))
7382     AND b.legislation_code = 'GB'
7383     AND d.legislation_code = 'GB'
7384     AND db.legislation_code = 'GB';
7385 
7386   CURSOR get_aggr_defined_balance_id
7387   IS
7388     SELECT b.balance_name balance_name,
7389       b.balance_type_id balance_type_id,
7390       d.database_item_suffix database_item_suffix,
7391       d.balance_dimension_id balance_dimension_id,
7392       db.defined_balance_id defined_balance_id
7393     FROM pay_defined_balances db,
7394       pay_balance_types b,
7395       pay_balance_dimensions d
7396     WHERE db.balance_type_id     = b.balance_type_id
7397     AND db.balance_dimension_id  = d.balance_dimension_id
7398     AND ((d.database_item_suffix = '_PER_TD_YTD'
7399     AND b.balance_name          IN ('Taxable Pay','PAYE','Student Loan','SSP Total','SMP Total',
7400                                     'SPP Adoption Total', 'SAP Total','ASPP Adoption Total',
7401                                     'Pre Tax Pension Contributions','Post Tax Pension Contributions',
7402                                     'Earnings Free of Tax','Earnings Free of NI','Earnings Free of Tax and NI',
7403                                     'Benefits Taxed Through Payroll Subject to NIC Earnings',
7404                                     'Benefits Taxed Through Payroll NOT Subject to NIC Earnings',
7405                                     'Benefits Taxed Through Payroll Subject to NIC Information',
7406                                     'Benefits Taxed Through Payroll NOT Subject to NIC Information','Total Direct Payments',
7407                                     'SPP Birth Total','ASPP Birth Total'))
7408     OR(d.database_item_suffix    = '_ASG_RUN'
7409     AND b.balance_name          IN ('Taxable Pay', 'NIC able Benefits','Student Loan', 'PAYE',
7410                                     'Pre Tax Pension Contributions','Post Tax Pension Contributions',
7411                                     'Earnings Free of Tax','Earnings Free of NI','Earnings Free of Tax and NI',
7412                                     'Benefits Taxed Through Payroll Subject to NIC Earnings',
7413                                     'Benefits Taxed Through Payroll NOT Subject to NIC Earnings',
7414                                     'Benefits Taxed Through Payroll Subject to NIC Information',
7415                                     'Benefits Taxed Through Payroll NOT Subject to NIC Information',
7416                                     'Gross Pay', 'Total Deductions','Total Direct Payments','Pre Tax Deductions'
7417                                      ,'NIable Deductions Free of Tax'))
7418 /*      OR(d.database_item_suffix    = '_ASG_PROC_PTD'
7419     AND b.balance_name          IN ('Court Order','Court Order Non Priority'))
7420 */
7421     OR(d.database_item_suffix    = '_PER_TD_CPE_YTD'
7422      AND b.balance_name          IN ('PAYE'))
7423     )
7424    and b.legislation_code = 'GB'
7425    and d.legislation_code = 'GB'
7426    and db.legislation_code = 'GB';
7427 
7428   CURSOR get_first_fps_date(c_payroll_id number)
7429   IS
7430   SELECT max (ppa2.effective_date)
7431                   FROM    pay_payroll_actions ppa2
7432                   WHERE   ppa2.report_qualifier = 'GB'
7433                   AND     ppa2.report_type = 'RTI_FPS_REP'
7434                   AND     ppa2.action_status = 'C'
7435                   AND     substr (pay_gb_eoy_archive.get_parameter (ppa2.legislative_parameters,'FIRST_FPS'),1,20) = 'Y'
7436                   AND     substr (pay_gb_eoy_archive.get_parameter (ppa2.legislative_parameters,'PAYROLL_ID'),1,20) = c_payroll_id; --'4064' --'4065' --ppa1.payroll_id
7437 
7438 
7439   l_count              NUMBER                := 1;
7440   l_fps_effective_date VARCHAR2(30);
7441   l_balance_counter    NUMBER;
7442   taxable_id           NUMBER :=1;
7443   paye_id              NUMBER :=2;
7444   student_loan_id      NUMBER :=3;
7445   taxable_ptd_id       NUMBER :=4;
7446   student_loan_ptd_id  NUMBER :=5;
7447   paye_ptd_id          NUMBER :=6;
7448   ssp_id               NUMBER :=7;
7449   smp_id               NUMBER :=8;
7450   ospp_adopt_id        NUMBER :=9;
7451   sap_id               NUMBER :=10;
7452   aspp_adopt_id        NUMBER :=11;
7453   l_dummy              NUMBER;
7454   l_pre_pact_effective_date DATE;
7455   l_first_fps_run_date date;
7456 
7457 BEGIN
7458   hr_utility.set_location('Entering '|| l_proc, 10);
7459   l_err := FALSE;
7460 
7461   OPEN csr_parameter_info(p_payroll_action_id);
7462   FETCH csr_parameter_info
7463    INTO l_effective_date,
7464         g_business_group_id,
7465         g_pre_pact_id,
7466         g_payroll_id,
7467         g_tax_ref,
7468         g_first_fps;
7469   CLOSE csr_parameter_info;
7470 
7471  open csr_prepayment_date(g_pre_pact_id);
7472  fetch csr_prepayment_date into g_prepayment_date;
7473  close csr_prepayment_date;
7474 
7475   g_fps_effective_date := l_effective_date;
7476   g_payroll_action_id := p_payroll_action_id;
7477 
7478   hr_utility.trace('l_effective_date: '||l_effective_date);
7479   hr_utility.trace('g_fps_effective_date: '||g_fps_effective_date);
7480   hr_utility.trace('g_business_group_id: '||g_business_group_id);
7481   hr_utility.trace('g_pre_pact_id: '||g_pre_pact_id);
7482   hr_utility.trace('g_payroll_id: '||g_payroll_id);
7483 
7484   OPEN csr_pre_pact_eff_date(g_pre_pact_id);
7485   FETCH csr_pre_pact_eff_date
7486    INTO l_pre_pact_effective_date;
7487   CLOSE csr_pre_pact_eff_date;
7488 
7489   OPEN get_first_fps_date(g_payroll_id);
7490   FETCH get_first_fps_date
7491    INTO l_first_fps_run_date;
7492   CLOSE get_first_fps_date;
7493 
7494   hr_utility.trace('l_first_fps_run_date: '||l_first_fps_run_date);
7495 
7496   g_first_fps_run_date := l_first_fps_run_date;
7497 
7498   hr_utility.trace('g_first_fps_run_date: '||g_first_fps_run_date);
7499 
7500   SELECT distinct element_type_id
7501   INTO g_paye_element_id
7502   FROM pay_element_types_f
7503   WHERE element_name = 'PAYE'
7504   AND legislation_code = 'GB';
7505 
7506 SELECT distinct element_type_id
7507   INTO g_paye_details_id
7508   FROM pay_element_types_f
7509   WHERE element_name = 'PAYE Details'
7510   AND legislation_code = 'GB';
7511 
7512   SELECT distinct element_type_id
7513   INTO g_adv_period_id
7514   FROM pay_element_types_f
7515   WHERE element_name = 'Advance Period'
7516   AND legislation_code = 'GB';
7517 
7518   hr_utility.trace('g_paye_element_id: '||TO_CHAR(g_paye_element_id));
7519 
7520   IF l_effective_date >= to_date('06-04-'||SUBSTR(TO_CHAR(l_effective_date,'YYYY/MON/DD'),1,4),'DD-MM-YYYY' ) THEN
7521     g_start_year      := to_date('06-04-'||SUBSTR(TO_CHAR(l_effective_date,'YYYY/MON/DD'),1,4),'DD-MM-YYYY' ) ;
7522     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') ;
7523   ELSE
7524     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') ;
7525     g_end_year   := to_date('05-04-'||SUBSTR(TO_CHAR(l_effective_date,'YYYY/MON/DD'),1,4),'DD-MM-YYYY') ;
7526   END IF;
7527 
7528   hr_utility.trace('g_start_year: '||g_start_year);
7529   hr_utility.trace('g_end_year: '||g_end_year);
7530   hr_utility.trace('l_pre_pact_effective_date: '||l_pre_pact_effective_date);
7531 
7532 if (g_start_year <= l_pre_pact_effective_date and g_end_year >= l_pre_pact_effective_date) then
7533   hr_utility.trace('Valid Effective Date for FPS Concurrent Program');
7534 else
7535   hr_utility.trace('Invalid Effective Date for FPS Concurrent Program');
7536   fnd_file.put_line(fnd_file.LOG,'FPS Program Effective date must be within the tax year of corresponding Pre-Payment Process Effective Date.');
7537   fnd_file.put_line(fnd_file.output,'FPS Program Effective date must be within the tax year of corresponding Pre-Payment Process Effective Date.');
7538   raise_application_error(-20001,'FPS Program Effective date must be within the tax year of corresponding Pre-Payment Process Effective Date.');
7539 end if;
7540 
7541 /*
7542   hr_utility.trace('Before calling PAY_GB_FPS_NI_AND_OTHERS.FPS_BACS_PREPROCESS: ');
7543   l_dummy := PAY_GB_FPS_NI_AND_OTHERS.FPS_BACS_PREPROCESS(g_pre_pact_id, 'FPS');
7544 */
7545 
7546   OPEN csr_ni_details;
7547   FETCH csr_ni_details INTO g_ni_pt_eid, g_ni_pt_ivid;
7548   CLOSE csr_ni_details;
7549 
7550   --******************************
7551   l_balance_counter := 1;
7552   FOR rec IN get_defined_balance_id
7553   LOOP
7554     g_fps_bal_det_tab(l_balance_counter).balance_name := rec.balance_name;
7555     hr_utility.trace('balance_name: '||g_fps_bal_det_tab(l_balance_counter).balance_name);
7556     g_fps_bal_det_tab(l_balance_counter).balance_type_id := rec.balance_type_id;
7557     hr_utility.trace('balance_type_id: '||g_fps_bal_det_tab(l_balance_counter).balance_type_id);
7558     g_fps_bal_det_tab(l_balance_counter).database_item_suffix := rec.database_item_suffix;
7559     hr_utility.trace('database_item_suffix: '||g_fps_bal_det_tab(l_balance_counter).database_item_suffix);
7560     g_fps_bal_det_tab(l_balance_counter).balance_dimension_id := rec.balance_dimension_id;
7561     hr_utility.trace('balance_dimension_id: '||g_fps_bal_det_tab(l_balance_counter).balance_dimension_id);
7562     g_fps_bal_det_tab(l_balance_counter).defined_balance_id := rec.defined_balance_id;
7563     hr_utility.trace('defined_balance_id: '||g_fps_bal_det_tab(l_balance_counter).defined_balance_id);
7564     l_balance_counter := l_balance_counter + 1;
7565     hr_utility.trace('Balance Counter: '||l_balance_counter);
7566   END LOOP;
7567 
7568   FOR i IN 1..g_fps_bal_det_tab.last
7569   LOOP
7570     g_defined_balance_lst(i).defined_balance_id := g_fps_bal_det_tab(i).defined_balance_id;
7571   END LOOP;
7572 
7573   --Aggregation balances starts here
7574   l_balance_counter := 1;
7575   FOR rec IN get_aggr_defined_balance_id
7576   LOOP
7577     g_fps_aggr_bal_det_tab(l_balance_counter).balance_name := rec.balance_name;
7578     hr_utility.trace('balance name: '||g_fps_aggr_bal_det_tab(l_balance_counter).balance_name);
7579     g_fps_aggr_bal_det_tab(l_balance_counter).balance_type_id := rec.balance_type_id;
7580     hr_utility.trace('balance_type_id: '||g_fps_aggr_bal_det_tab(l_balance_counter).balance_type_id);
7581     g_fps_aggr_bal_det_tab(l_balance_counter).database_item_suffix := rec.database_item_suffix;
7582     hr_utility.trace('database_item_suffix: '||g_fps_aggr_bal_det_tab(l_balance_counter).database_item_suffix);
7583     g_fps_aggr_bal_det_tab(l_balance_counter).balance_dimension_id := rec.balance_dimension_id;
7584     hr_utility.trace('balance_dimension_id: '||g_fps_aggr_bal_det_tab(l_balance_counter).balance_dimension_id);
7585     g_fps_aggr_bal_det_tab(l_balance_counter).defined_balance_id := rec.defined_balance_id;
7586     hr_utility.trace('defined_balance_id: '||g_fps_aggr_bal_det_tab(l_balance_counter).defined_balance_id);
7587     l_balance_counter := l_balance_counter + 1;
7588     hr_utility.trace('Balance Counter: '||l_balance_counter);
7589   END LOOP;
7590 
7591   FOR i IN 1..g_fps_aggr_bal_det_tab.last
7592   LOOP
7593     g_aggr_defined_balance_lst(i).defined_balance_id := g_fps_aggr_bal_det_tab(i).defined_balance_id;
7594   END LOOP;
7595 
7596   --Aggregation balances ends here
7597   hr_utility.set_location('Leaving '|| l_proc, 10);
7598 
7599 EXCEPTION
7600 WHEN OTHERS THEN
7601   fnd_file.put_line(fnd_file.LOG,'Exception:' || SQLCODE || ' - ' || SQLERRM);
7602   hr_utility.raise_error;
7603 END archinit;
7604 --
7605 procedure add_other_asg_ni_ytd(c_asg_act_id in number , p_archive_tab in out nocopy act_info_rec) is
7606 
7607 cursor csr_def_bal_id(c_bal_name varchar2, c_dim_name varchar2) is
7608 select pdb.defined_balance_id from pay_balance_types pbt, pay_balance_dimensions pbd,
7609 pay_defined_balances pdb where
7610 pbt.balance_name = c_bal_name
7611 and pbd.database_item_suffix = c_dim_name
7612 and pdb.balance_type_id = pbt.balance_type_id
7613 and pdb.balance_dimension_id = pbd.balance_dimension_id
7614 and pbd.LEGISLATION_CODE = 'GB'
7615 and pbt.LEGISLATION_CODE = 'GB';
7616 l_def_bal_id number;
7617 begin
7618                hr_utility.trace('Entering : add_other_asg_ni_ytd');
7619                hr_utility.trace('c_asg_act_id: ' || c_asg_act_id);
7620 
7621                open csr_def_bal_id('NI ' || p_archive_tab.act_info1 || ' Able', '_ASG_TD_YTD');
7622                fetch csr_def_bal_id into l_def_bal_id;
7623                hr_utility.trace('l_def_bal_id1: ' || l_def_bal_id);
7624                close csr_def_bal_id;
7625                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);
7626 
7627                open csr_def_bal_id('NI ' || p_archive_tab.act_info1 || ' Able LEL', '_ASG_TD_YTD');
7628                fetch csr_def_bal_id into l_def_bal_id;
7629                hr_utility.trace('l_def_bal_id2: ' || l_def_bal_id);
7630                close csr_def_bal_id;
7631                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);
7632 
7633                open csr_def_bal_id('NI ' || p_archive_tab.act_info1 || ' Able ET', '_ASG_TD_YTD');
7634                fetch csr_def_bal_id into l_def_bal_id;
7635                hr_utility.trace('l_def_bal_id3: ' || l_def_bal_id);
7636                close csr_def_bal_id;
7637                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);
7638 
7639                open csr_def_bal_id('NI ' || p_archive_tab.act_info1 || ' Able UAP', '_ASG_TD_YTD');
7640                fetch csr_def_bal_id into l_def_bal_id;
7641                hr_utility.trace('l_def_bal_id4: ' || l_def_bal_id);
7642                close csr_def_bal_id;
7643                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);
7644 
7645                open csr_def_bal_id('NI ' || p_archive_tab.act_info1 || ' Able UEL', '_ASG_TD_YTD');
7646                fetch csr_def_bal_id into l_def_bal_id;
7647                hr_utility.trace('l_def_bal_id5: ' || l_def_bal_id);
7648                close csr_def_bal_id;
7649                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);
7650 
7651                open csr_def_bal_id('NI ' || p_archive_tab.act_info1 || ' Employer', '_ASG_TD_YTD');
7652                fetch csr_def_bal_id into l_def_bal_id;
7653                hr_utility.trace('l_def_bal_id6: ' || l_def_bal_id);
7654                close csr_def_bal_id;
7655                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);
7656 
7657                open csr_def_bal_id('NI ' || p_archive_tab.act_info1 || ' Employee', '_ASG_TD_YTD');
7658                fetch csr_def_bal_id into l_def_bal_id;
7659                hr_utility.trace('l_def_bal_id7: ' || l_def_bal_id);
7660                close csr_def_bal_id;
7661                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);
7662 
7663                hr_utility.trace('Leaving : add_other_asg_ni_ytd');
7664 end add_other_asg_ni_ytd;
7665 
7666 ---
7667 procedure ni_agg_ytd_sum(l_archive_tab in out nocopy action_info_table,
7668                          i in out nocopy number,
7669                          p_per_ni_a_balance act_info_rec,
7670                          p_per_ni_b_balance act_info_rec,
7671                          p_per_ni_c_balance act_info_rec,
7672                          p_per_ni_d_balance act_info_rec,
7673                          p_per_ni_e_balance act_info_rec,
7674                          p_per_ni_j_balance act_info_rec,
7675                          p_per_ni_l_balance act_info_rec
7676                          ) is
7677   l_ni_rpt_asg_id     NUMBER;
7678   l_cat number := null;
7679 
7680 begin
7681               l_ni_rpt_asg_id := l_archive_tab(3).assignment_id;
7682 --A
7683               if p_per_ni_a_balance.act_info1 is not null then
7684                 for k in 4..i
7685                 loop
7686                     if l_archive_tab(k).act_info1 = p_per_ni_a_balance.act_info1 then
7687                         l_archive_tab(k).action_info_category := 'GB_RTI_FPS_NI_DET';
7688                         l_archive_tab(k).assignment_id := l_ni_rpt_asg_id;
7689                         l_archive_tab(k).act_info3 := p_per_ni_a_balance.act_info3;
7690                         l_archive_tab(k).act_info4 := p_per_ni_a_balance.act_info4;
7691                         l_archive_tab(k).act_info5 := p_per_ni_a_balance.act_info5;
7692                         l_archive_tab(k).act_info6 := p_per_ni_a_balance.act_info6;
7693                         l_archive_tab(k).act_info7 := p_per_ni_a_balance.act_info7;
7694                         l_archive_tab(k).act_info8 := p_per_ni_a_balance.act_info8;
7695                         l_cat := 1;
7696                     end if;
7697                 end loop;
7698                     if l_cat is null then
7699                         i := i+1;
7700                         l_archive_tab(i).action_info_category := 'GB_RTI_FPS_NI_DET';
7701                         l_archive_tab(i).assignment_id := l_ni_rpt_asg_id;
7702                         l_archive_tab(i).act_info1 := 'A';
7703                         l_archive_tab(i).act_info2 := 0;
7704                         l_archive_tab(i).act_info3 := p_per_ni_a_balance.act_info3;
7705                         l_archive_tab(i).act_info4 := p_per_ni_a_balance.act_info4;
7706                         l_archive_tab(i).act_info5 := p_per_ni_a_balance.act_info5;
7707                         l_archive_tab(i).act_info6 := p_per_ni_a_balance.act_info6;
7708                         l_archive_tab(i).act_info7 := p_per_ni_a_balance.act_info7;
7709                         l_archive_tab(i).act_info8 := p_per_ni_a_balance.act_info8;
7710                         l_archive_tab(i).act_info9 := 0;
7711                         l_archive_tab(i).act_info10 := 0;
7712                     end if;
7713 
7714               end if;
7715             l_cat := null;
7716 --B
7717  if p_per_ni_b_balance.act_info1 is not null then
7718                 for k in 4..i
7719                 loop
7720                     if l_archive_tab(k).act_info1 = p_per_ni_b_balance.act_info1 then
7721                         l_archive_tab(k).action_info_category := 'GB_RTI_FPS_NI_DET';
7722                         l_archive_tab(k).assignment_id := l_ni_rpt_asg_id;
7723                         l_archive_tab(k).act_info3 := p_per_ni_b_balance.act_info3;
7724                         l_archive_tab(k).act_info4 := p_per_ni_b_balance.act_info4;
7725                         l_archive_tab(k).act_info5 := p_per_ni_b_balance.act_info5;
7726                         l_archive_tab(k).act_info6 := p_per_ni_b_balance.act_info6;
7727                         l_archive_tab(k).act_info7 := p_per_ni_b_balance.act_info7;
7728                         l_archive_tab(k).act_info8 := p_per_ni_b_balance.act_info8;
7729                         l_cat := 1;
7730                     end if;
7731                 end loop;
7732                     if l_cat is null then
7733                         i := i+1;
7734                         l_archive_tab(i).action_info_category := 'GB_RTI_FPS_NI_DET';
7735                         l_archive_tab(i).assignment_id := l_ni_rpt_asg_id;
7736                         l_archive_tab(i).act_info1 := 'B';
7737                         l_archive_tab(i).act_info2 := 0;
7738                         l_archive_tab(i).act_info3 := p_per_ni_b_balance.act_info3;
7739                         l_archive_tab(i).act_info4 := p_per_ni_b_balance.act_info4;
7740                         l_archive_tab(i).act_info5 := p_per_ni_b_balance.act_info5;
7741                         l_archive_tab(i).act_info6 := p_per_ni_b_balance.act_info6;
7742                         l_archive_tab(i).act_info7 := p_per_ni_b_balance.act_info7;
7743                         l_archive_tab(i).act_info8 := p_per_ni_b_balance.act_info8;
7744                         l_archive_tab(i).act_info9 := 0;
7745                         l_archive_tab(i).act_info10 := 0;
7746                     end if;
7747               end if;
7748 l_cat := null;
7749 -- D
7750             if p_per_ni_d_balance.act_info1 is not null then
7751                 for k in 4..i
7752                 loop
7753                     if l_archive_tab(k).act_info1 = p_per_ni_d_balance.act_info1 then
7754                         l_archive_tab(k).action_info_category := 'GB_RTI_FPS_NI_DET';
7755                         l_archive_tab(k).assignment_id := l_ni_rpt_asg_id;
7756                         l_archive_tab(k).act_info3 := p_per_ni_d_balance.act_info3;
7757                         l_archive_tab(k).act_info4 := p_per_ni_d_balance.act_info4;
7758                         l_archive_tab(k).act_info5 := p_per_ni_d_balance.act_info5;
7759                         l_archive_tab(k).act_info6 := p_per_ni_d_balance.act_info6;
7760                         l_archive_tab(k).act_info7 := p_per_ni_d_balance.act_info7;
7761                         l_archive_tab(k).act_info8 := p_per_ni_d_balance.act_info8;
7762                         l_cat := 1;
7763                     end if;
7764                   end loop;
7765                      if l_cat is null then
7766                         i := i + 1;
7767                         l_archive_tab(i).action_info_category := 'GB_RTI_FPS_NI_DET';
7768                         l_archive_tab(i).assignment_id := l_ni_rpt_asg_id;
7769                         l_archive_tab(i).act_info1 := 'D';
7770                         l_archive_tab(i).act_info2 := 0;
7771                         l_archive_tab(i).act_info3 := p_per_ni_d_balance.act_info3;
7772                         l_archive_tab(i).act_info4 := p_per_ni_d_balance.act_info4;
7773                         l_archive_tab(i).act_info5 := p_per_ni_d_balance.act_info5;
7774                         l_archive_tab(i).act_info6 := p_per_ni_d_balance.act_info6;
7775                         l_archive_tab(i).act_info7 := p_per_ni_d_balance.act_info7;
7776                         l_archive_tab(i).act_info8 := p_per_ni_d_balance.act_info8;
7777                         l_archive_tab(i).act_info9 := 0;
7778                         l_archive_tab(i).act_info10 := 0;
7779                     end if;
7780             end if;
7781             l_cat := null;
7782 --C
7783               if p_per_ni_c_balance.act_info1 is not null then
7784                 for k in 4..i
7785                 loop
7786                     if l_archive_tab(k).act_info1 = p_per_ni_c_balance.act_info1 then
7787                         l_archive_tab(k).action_info_category := 'GB_RTI_FPS_NI_DET';
7788                         l_archive_tab(k).assignment_id := l_ni_rpt_asg_id;
7789                         l_archive_tab(k).act_info3 := p_per_ni_c_balance.act_info3;
7790                         l_archive_tab(k).act_info4 := p_per_ni_c_balance.act_info4;
7791                         l_archive_tab(k).act_info5 := p_per_ni_c_balance.act_info5;
7792                         l_archive_tab(k).act_info6 := p_per_ni_c_balance.act_info6;
7793                         l_archive_tab(k).act_info7 := p_per_ni_c_balance.act_info7;
7794                         l_archive_tab(k).act_info8 := p_per_ni_c_balance.act_info8;
7795                         l_cat := 1;
7796                     end if;
7797                  end loop;
7798                      if l_cat is null then
7799                         i := i+1;
7800                         l_archive_tab(i).action_info_category := 'GB_RTI_FPS_NI_DET';
7801                         l_archive_tab(i).assignment_id := l_ni_rpt_asg_id;
7802                         l_archive_tab(i).act_info1 := 'C';
7803                         l_archive_tab(i).act_info2 := 0;
7804                         l_archive_tab(i).act_info3 := p_per_ni_c_balance.act_info3;
7805                         l_archive_tab(i).act_info4 := p_per_ni_c_balance.act_info4;
7806                         l_archive_tab(i).act_info5 := p_per_ni_c_balance.act_info5;
7807                         l_archive_tab(i).act_info6 := p_per_ni_c_balance.act_info6;
7808                         l_archive_tab(i).act_info7 := p_per_ni_c_balance.act_info7;
7809                         l_archive_tab(i).act_info8 := p_per_ni_c_balance.act_info8;
7810                         l_archive_tab(i).act_info9 := 0;
7811                         l_archive_tab(i).act_info10 := 0;
7812                     end if;
7813               end if;
7814             l_cat := null;
7815 --E
7816               if p_per_ni_e_balance.act_info1 is not null then
7817                 for k in 4..i
7818                 loop
7819                     if l_archive_tab(k).act_info1 = p_per_ni_e_balance.act_info1 then
7820                         l_archive_tab(k).action_info_category := 'GB_RTI_FPS_NI_DET';
7821                         l_archive_tab(k).assignment_id := l_ni_rpt_asg_id;
7822                         l_archive_tab(k).act_info3 := p_per_ni_e_balance.act_info3;
7823                         l_archive_tab(k).act_info4 := p_per_ni_e_balance.act_info4;
7824                         l_archive_tab(k).act_info5 := p_per_ni_e_balance.act_info5;
7825                         l_archive_tab(k).act_info6 := p_per_ni_e_balance.act_info6;
7826                         l_archive_tab(k).act_info7 := p_per_ni_e_balance.act_info7;
7827                         l_archive_tab(k).act_info8 := p_per_ni_e_balance.act_info8;
7828                         l_cat := 1;
7829                     end if;
7830                  end loop;
7831                      if l_cat is null then
7832                         i := i+1;
7833                         l_archive_tab(i).action_info_category := 'GB_RTI_FPS_NI_DET';
7834                         l_archive_tab(i).assignment_id := l_ni_rpt_asg_id;
7835                         l_archive_tab(i).act_info1 := 'E';
7836                         l_archive_tab(i).act_info2 := 0;
7837                         l_archive_tab(i).act_info3 := p_per_ni_e_balance.act_info3;
7838                         l_archive_tab(i).act_info4 := p_per_ni_e_balance.act_info4;
7839                         l_archive_tab(i).act_info5 := p_per_ni_e_balance.act_info5;
7840                         l_archive_tab(i).act_info6 := p_per_ni_e_balance.act_info6;
7841                         l_archive_tab(i).act_info7 := p_per_ni_e_balance.act_info7;
7842                         l_archive_tab(i).act_info8 := p_per_ni_e_balance.act_info8;
7843                         l_archive_tab(i).act_info9 := 0;
7844                         l_archive_tab(i).act_info10 := 0;
7845                     end if;
7846               end if;
7847             l_cat := null;
7848 --j
7849               if p_per_ni_j_balance.act_info1 is not null then
7850                 for k in 4..i
7851                 loop
7852                     if l_archive_tab(k).act_info1 = p_per_ni_j_balance.act_info1 then
7853                         l_archive_tab(k).action_info_category := 'GB_RTI_FPS_NI_DET';
7854                         l_archive_tab(k).assignment_id := l_ni_rpt_asg_id;
7855                         l_archive_tab(k).act_info3 := p_per_ni_j_balance.act_info3;
7856                         l_archive_tab(k).act_info4 := p_per_ni_j_balance.act_info4;
7857                         l_archive_tab(k).act_info5 := p_per_ni_j_balance.act_info5;
7858                         l_archive_tab(k).act_info6 := p_per_ni_j_balance.act_info6;
7859                         l_archive_tab(k).act_info7 := p_per_ni_j_balance.act_info7;
7860                         l_archive_tab(k).act_info8 := p_per_ni_j_balance.act_info8;
7861                         l_cat := 1;
7862                     end if;
7863                  end loop;
7864                      if l_cat is null then
7865                         i := i+1;
7866                         l_archive_tab(i).action_info_category := 'GB_RTI_FPS_NI_DET';
7867                         l_archive_tab(i).assignment_id := l_ni_rpt_asg_id;
7868                         l_archive_tab(i).act_info1 := 'J';
7869                         l_archive_tab(i).act_info2 := 0;
7870                         l_archive_tab(i).act_info3 := p_per_ni_j_balance.act_info3;
7871                         l_archive_tab(i).act_info4 := p_per_ni_j_balance.act_info4;
7872                         l_archive_tab(i).act_info5 := p_per_ni_j_balance.act_info5;
7873                         l_archive_tab(i).act_info6 := p_per_ni_j_balance.act_info6;
7874                         l_archive_tab(i).act_info7 := p_per_ni_j_balance.act_info7;
7875                         l_archive_tab(i).act_info8 := p_per_ni_j_balance.act_info8;
7876                         l_archive_tab(i).act_info9 := 0;
7877                         l_archive_tab(i).act_info10 := 0;
7878                     end if;
7879               end if;
7880             l_cat := null;
7881 --l
7882               if p_per_ni_l_balance.act_info1 is not null then
7883                 for k in 4..i
7884                 loop
7885                     if l_archive_tab(k).act_info1 = p_per_ni_l_balance.act_info1 then
7886                         l_archive_tab(k).action_info_category := 'GB_RTI_FPS_NI_DET';
7887                         l_archive_tab(k).assignment_id := l_ni_rpt_asg_id;
7888                         l_archive_tab(k).act_info3 := p_per_ni_l_balance.act_info3;
7889                         l_archive_tab(k).act_info4 := p_per_ni_l_balance.act_info4;
7890                         l_archive_tab(k).act_info5 := p_per_ni_l_balance.act_info5;
7891                         l_archive_tab(k).act_info6 := p_per_ni_l_balance.act_info6;
7892                         l_archive_tab(k).act_info7 := p_per_ni_l_balance.act_info7;
7893                         l_archive_tab(k).act_info8 := p_per_ni_l_balance.act_info8;
7894                         l_cat := 1;
7895                     end if;
7896                 end loop;
7897                      if l_cat is null then
7898                         i := i+1;
7899                         l_archive_tab(i).action_info_category := 'GB_RTI_FPS_NI_DET';
7900                         l_archive_tab(i).assignment_id := l_ni_rpt_asg_id;
7901                         l_archive_tab(i).act_info1 := 'L';
7902                         l_archive_tab(i).act_info2 := 0;
7903                         l_archive_tab(i).act_info3 := p_per_ni_l_balance.act_info3;
7904                         l_archive_tab(i).act_info4 := p_per_ni_l_balance.act_info4;
7905                         l_archive_tab(i).act_info5 := p_per_ni_l_balance.act_info5;
7906                         l_archive_tab(i).act_info6 := p_per_ni_l_balance.act_info6;
7907                         l_archive_tab(i).act_info7 := p_per_ni_l_balance.act_info7;
7908                         l_archive_tab(i).act_info8 := p_per_ni_l_balance.act_info8;
7909                         l_archive_tab(i).act_info9 := 0;
7910                         l_archive_tab(i).act_info10 := 0;
7911                     end if;
7912               end if;
7913 
7914 end ni_agg_ytd_sum;
7915 ---
7916 
7917 --added for ni only aggregated case
7918 procedure get_ni_only_asg_details(l_asg_id number,
7919  l_archive_tab_det1 OUT nocopy act_info_rec,
7920 l_archive_tab_det2 OUT nocopy act_info_rec, p_assactid number) is
7921 l_last_asg_action_id number;
7922 l_last_effective_date date;
7923 l_last_asg_action_id_1 number;
7924 l_last_effective_date_1 date;
7925 l_archive_tab_per act_info_rec;
7926 l_asg_eff_start_date date;
7927 l_person_id number;
7928 l_archive_tab_add act_info_rec;
7929 p_starter_set varchar2(1) := 'N';
7930 l_archive_asg_det1 BOOLEAN;
7931 l_archive_asg_det2 BOOLEAN;
7932 l_archive_addr  BOOLEAN;
7933 l_archive_person BOOLEAN;
7934 
7935   CURSOR csr_asg_basic_details(c_asg_id NUMBER)
7936   IS
7937        SELECT asg.EFFECTIVE_START_DATE asg_eff_start_date,
7938            asg.person_id
7939     FROM per_all_assignments_f asg
7940     WHERE asg.assignment_id          = c_asg_id
7941     AND g_effective_date BETWEEN asg.effective_start_date AND asg.effective_end_date;
7942 
7943 -- for ni only aggregation
7944 -- to get the latest payroll run assignment action id for the given assignment.
7945 cursor csr_get_latest_asg_action (c_asg_id number)
7946 is
7947 SELECT
7948             to_number (substr (max (lpad (paa.action_sequence ,15,'0')
7949                                     || paa.assignment_action_id),16)) max_asg_act_id
7950            , max(pact.effective_date) effective_date
7951 
7952     FROM    pay_assignment_actions paa
7953            ,pay_payroll_actions pact
7954            ,per_time_periods ptp
7955     WHERE   paa.assignment_id = c_asg_id
7956     AND     paa.payroll_action_id = pact.payroll_action_id
7957     AND     pact.time_period_id = ptp.time_period_id
7958     AND     pact.action_type IN ('Q','R','B','I','V')
7959     AND     paa.action_status IN ('C','S')
7960     AND     ptp.regular_payment_date BETWEEN g_start_year
7961                                      AND     g_end_year
7962 AND     ptp.regular_payment_date <= g_effective_date;
7963 
7964 cursor csr_get_latest_asg_action_1 (c_asg_id number)
7965 is
7966 SELECT
7967             to_number (substr (max (lpad (paa.action_sequence ,15,'0')
7968                                     || paa.assignment_action_id),16)) max_asg_act_id
7969            , max(pact.effective_date) effective_date
7970 
7971     FROM    pay_assignment_actions paa
7972            ,pay_payroll_actions pact
7973            ,per_time_periods ptp
7974     WHERE   paa.assignment_id = c_asg_id
7975     AND     paa.payroll_action_id = pact.payroll_action_id
7976     AND     pact.time_period_id = ptp.time_period_id
7977     AND     pact.action_type IN ('Q','R','B','I','V')
7978     AND     paa.action_status IN ('C','S')
7979     AND     ptp.regular_payment_date BETWEEN g_start_year
7980                                      AND     g_end_year;
7981 
7982 begin
7983 
7984   hr_utility.trace('Entering get_ni_only_asg_details for asg_id: ' || l_asg_id);
7985 
7986   open csr_get_latest_asg_action(l_asg_id);
7987   fetch csr_get_latest_asg_action into l_last_asg_action_id, l_last_effective_date;
7988   close csr_get_latest_asg_action;
7989   if l_last_asg_action_id is null then
7990      open csr_get_latest_asg_action_1(l_asg_id);
7991      fetch csr_get_latest_asg_action_1 into l_last_asg_action_id_1, l_last_effective_date_1;
7992      close csr_get_latest_asg_action_1;
7993   end if;
7994 
7995 
7996   hr_utility.trace('l_last_asg_action_id: '||l_last_asg_action_id);
7997   hr_utility.trace('l_last_effective_date: '||l_last_effective_date);
7998   OPEN csr_asg_basic_details(l_asg_id);
7999   hr_utility.trace('l_last_asg_action_id_1: '||l_last_asg_action_id_1);
8000   hr_utility.trace('l_last_effective_date_1: '||l_last_effective_date_1);
8001 
8002   FETCH csr_asg_basic_details INTO  l_asg_eff_start_date, l_person_id;
8003   CLOSE csr_asg_basic_details;
8004 
8005     hr_utility.set_location('Fetching person details ',10);
8006     l_archive_person := fetch_person_rec(p_assactid, l_asg_eff_start_date,g_effective_date,l_archive_tab_per);
8007     ---
8008     hr_utility.set_location('Fetching address details ',20);
8009     l_archive_addr := fetch_address_rec(l_archive_tab_per.person_id,
8010                                         l_archive_tab_per.assignment_id,
8011                                         g_effective_date,
8012                                         l_archive_tab_add);
8013     l_person_id    := l_archive_tab_per.person_id;
8014     --Fetching assignments details for FPS
8015     hr_utility.set_location('Fetching Assignment details ',30);
8016     if l_last_asg_action_id is not null then
8017        l_archive_asg_det1 := fetch_fps_asg_det1(l_asg_eff_start_date,
8018                                              g_effective_date,
8019                                              p_assactid,
8020                                              l_last_asg_action_id,
8021 					     'Y',
8022                                              l_archive_tab_per,
8023                                              l_archive_tab_det1,
8024                                              p_starter_set);
8025     else
8026 
8027 --fetch_fps_nopay_asg_det1 procedure will be called when there are no payments for the assignment.
8028               l_archive_asg_det1 := fetch_fps_nopay_asg_det1(l_asg_eff_start_date,
8029                                              g_effective_date,
8030                                              p_assactid,
8031                                              l_last_asg_action_id_1,
8032 					     'Y',
8033                                              l_archive_tab_per,
8034                                              l_archive_tab_det1,
8035                                              p_starter_set);
8036     end if;
8037 
8038     l_archive_tab_det2.assignment_id := l_asg_id;
8039 
8040     l_archive_tab_det2.action_info_category := 'GB_RTI_FPS_ASG_DET2';
8041     l_archive_tab_det2.act_info1 := 0;
8042 	  l_archive_tab_det2.act_info2 := 0;
8043 	  l_archive_tab_det2.act_info3 := 0;
8044 	  l_archive_tab_det2.act_info4 := 0;
8045 	  l_archive_tab_det2.act_info5 := 0;
8046 	  l_archive_tab_det2.act_info6 := 0;
8047 	  l_archive_tab_det2.act_info7 := 0;
8048 	  l_archive_tab_det2.act_info8 := 0;
8049 	  l_archive_tab_det2.act_info9 := 0;
8050 	  l_archive_tab_det2.act_info10 := 0;
8051 	  l_archive_tab_det2.act_info11 := 0;
8052 	  l_archive_tab_det2.act_info12 := 0;
8053 	  l_archive_tab_det2.act_info13 := 0;
8054 	  l_archive_tab_det2.act_info14 := 0;
8055 	  l_archive_tab_det2.act_info15 := 0;
8056 	  l_archive_tab_det2.act_info16 := 0;
8057 	  l_archive_tab_det2.act_info17 := 0;
8058 	  l_archive_tab_det2.act_info18 := 0;
8059 	  l_archive_tab_det2.act_info19 := 0;
8060 	  l_archive_tab_det2.act_info20 := 0;
8061 	  l_archive_tab_det2.act_info21 := 0;
8062 	  l_archive_tab_det2.act_info22 := 0;
8063 	  l_archive_tab_det2.act_info23 := 0;
8064 	  l_archive_tab_det2.act_info24 := 0;
8065 	  if l_last_asg_action_id is not null then
8066        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);
8067     end if;
8068       hr_utility.trace('after det2');
8069 
8070 
8071 
8072     l_archive_tab_det2.act_info29 := g_pre_pact_id||','||l_last_asg_action_id;
8073     l_archive_tab_det1.act_info29 := g_pre_pact_id||','||l_last_asg_action_id;
8074 
8075 end get_ni_only_asg_details;
8076 --
8077 
8078 --
8079 --
8080 /*--------------------------------------------------------------------------
8081 Name      : archive_data
8082 Purpose   : This sets up the contexts needed for the live (non-archive)
8083 database items
8084 Arguments :
8085 Notes     : Every possible context for a specific assignment action has to
8086 be added to the PL/SQL table
8087 --------------------------------------------------------------------------*/
8088 --
8089 --
8090 PROCEDURE archive_code(
8091     p_assactid       IN NUMBER,
8092     p_effective_date IN DATE)
8093 IS
8094   l_proc      CONSTANT VARCHAR2(35):= g_package||'archive_code';
8095   error_found EXCEPTION;
8096   already_processed EXCEPTION;
8097   l_archive_tab action_info_table;
8098   l_archive_tab_det1 action_info_table;
8099   l_archive_tab_det2 action_info_table;
8100   l_archive_tab_ni_det action_info_table;
8101   l_archive_tab_ni_det_1 action_info_table;
8102   l_archive_tab_det1_local action_info_table;
8103   l_archive_tab_det2_local action_info_table;
8104   l_ni_rti_flag varchar(10);
8105   l_ni_rti_date varchar2(30);
8106   l_ni_rpt_asg_id     NUMBER;
8107   l_ni_rpt_date   DATE;
8108   l_archive_tab_ni_rpt action_info_table;
8109   record_count         NUMBER;
8110   l_archive_person     BOOLEAN;
8111   l_archive_addr       BOOLEAN;
8112   l_archive_asg        BOOLEAN;
8113   l_per_addr_val_flag  VARCHAR2(1);
8114   l_fps_etext_asg_flag VARCHAR2(1);
8115   l_fps_etext_ni_flag  VARCHAR2(1);
8116   l_personaddr_val_err BOOLEAN := False;
8117   l_fps_val_err        BOOLEAN := False;
8118   l_fps_ni_val_err     BOOLEAN := False;
8119   l_err_log            NUMBER;
8120   l_start_date DATE;
8121   l_end_date DATE;
8122   l_archive_asg_det1   BOOLEAN;
8123   l_archive_asg_det2   BOOLEAN;
8124   l_archive_asg_ni_det BOOLEAN;
8125   l_rec_count number;
8126   l_cur_asg_pre_pay_act_id NUMBER;
8127   l_asg_action_id number;
8128   l_assact_id  number;
8129   l_oth_min_pre_pay_id number;
8130   l_bacs_large_asg_id number;
8131   l_ni_emp_run number;
8132   --Below cursor fetches the payment date for the payroll run of the current assignment
8133   CURSOR csr_get_payment_date(p_last_asg_action_id NUMBER)
8134   IS
8135     SELECT ptp.regular_payment_date payment_date
8136     FROM pay_payroll_actions ppa,
8137       pay_assignment_actions paa,
8138       per_time_periods ptp
8139     WHERE assignment_action_id = p_last_asg_action_id
8140     AND ppa.time_period_id     = ptp.time_period_id
8141     AND ppa.payroll_id         = ptp.payroll_id
8142     AND paa.payroll_action_id  = ppa.payroll_action_id;
8143   ---
8144    --Below cursor fetches the minimum assignment_action_id for aggregation case
8145   cursor get_min_asg_actid(p_person_id IN Number,p_assactid IN number)
8146   is
8147     select min(paa2.assignment_action_id) asgactid
8148     from
8149     pay_assignment_actions paa1,
8150     pay_assignment_actions paa2,
8151     per_all_assignments_f asg
8152     where
8153     paa1.assignment_action_id = p_assactid
8154     and paa1.payroll_action_id = paa2.payroll_action_id
8155     and paa2.assignment_id = asg.assignment_id
8156     and asg.person_id = p_person_id ;
8157 
8158   --Below cursor fetches the basic details of the current assignment
8159   CURSOR csr_asg_basic_details(c_asg_act_id NUMBER)
8160   IS
8161     SELECT asg.assignment_id,
8162       asg.EFFECTIVE_START_DATE asg_eff_start_date,
8163            asg.person_id,
8164            asg.assignment_number
8165     FROM per_all_assignments_f asg,
8166       pay_assignment_actions paa,
8167       pay_payroll_actions ppa
8168     WHERE paa.assignment_action_id = c_asg_act_id
8169     AND paa.assignment_id          = asg.assignment_id
8170     AND ppa.payroll_action_id      = g_pre_pact_id
8171     AND ppa.effective_date BETWEEN asg.effective_start_date AND asg.effective_end_date;
8172 
8173   ---
8174 
8175   --Below cursor fetches the further details of the current assignment
8176   CURSOR csr_asg(c_asg_act_id NUMBER, c_effective_date DATE)
8177   IS
8178     SELECT trim(NVL(asg.primary_flag,'N')) asg_primary_flag,
8179       trim(NVL(pap.per_information9,'N')) per_ni_agg_flag,
8180       trim(NVL(pap.per_information10,'N')) per_paye_agg_flag,
8181       asg.payroll_id payroll_id
8182     FROM per_all_people_f pap,
8183       per_all_assignments_f asg,
8184       pay_assignment_actions paa
8185     WHERE paa.assignment_action_id = c_asg_act_id
8186     AND paa.assignment_id          = asg.assignment_id
8187     AND pap.person_id              = asg.person_id
8188       --     and    asg.business_group_id = l_business_group_id
8189     AND c_effective_date BETWEEN asg.effective_start_date AND asg.effective_end_date
8190     AND c_effective_date BETWEEN pap.effective_start_date AND pap.effective_end_date
8191     AND pap.per_information_category = 'GB';
8192 
8193   --
8194   --Below cursor fetches the latest payroll run details of the current assignment
8195   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)
8196   IS
8197     SELECT
8198       /*+ USE_NL(paa, pact, ptp) */
8199       to_number(SUBSTR(MAX(lpad(paa.action_sequence,15,'0')
8200       || paa.assignment_action_id),16)) max_asg_act_id,
8201       MAX(pact.effective_date) effective_date
8202     FROM pay_assignment_actions paa,
8203       pay_payroll_actions pact,
8204       per_time_periods ptp,
8205       pay_assignment_actions paa1, --Prepayments
8206       pay_payroll_actions ppa1,    --Prepayments
8207       pay_action_interlocks pai    --Prepayments
8208     WHERE paa.assignment_id   = p_asgid
8209     AND paa.payroll_action_id = pact.payroll_action_id
8210     AND pact.time_period_id   = ptp.time_period_id
8211     AND pact.action_type     IN ('Q','R','I','V','B')
8212     AND paa.action_status    IN ('C','S')
8213     AND ptp.regular_payment_date BETWEEN  p_start_year AND p_end_year
8214     AND ppa1.payroll_action_id    = p_pre_pay_id --1160712
8215     AND ppa1.action_type         IN ('P','U')
8216     AND paa1.payroll_action_id    = ppa1.payroll_action_id
8217     AND paa1.assignment_action_id = pai.locking_action_id
8218     AND paa.assignment_action_id  = pai.locked_action_id;
8219 
8220   --Below cursor fetches all the payroll runs details of the current assignment processed in the current prepayment
8221   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)
8222   IS
8223     SELECT
8224       /*+ USE_NL(paa, pact, ptp) */
8225       to_number(SUBSTR(MAX(lpad(paa.action_sequence,15,'0')
8226       || paa.assignment_action_id),16)) max_asg_act_id,
8227       MAX(pact.effective_date) effective_date
8228     FROM pay_assignment_actions paa,
8229       pay_payroll_actions pact,
8230       per_time_periods ptp,
8231       pay_assignment_actions paa1,    --Prepayments
8232       pay_payroll_actions ppa1,       --Prepayments
8233       pay_action_interlocks pai       --Prepayments
8234     WHERE paa.assignment_id   = p_asgid --46959
8235     AND paa.payroll_action_id = pact.payroll_action_id
8236     AND pact.time_period_id   = ptp.time_period_id
8237     AND pact.action_type     IN ('Q','R','I','V','B')
8238     AND paa.action_status    IN ('C','S')
8239     AND ptp.regular_payment_date BETWEEN  p_start_year AND p_end_year
8240     AND ppa1.payroll_action_id    = p_pre_pay_id --1160712
8241     AND ppa1.action_type         IN ('P','U')
8242     AND paa1.payroll_action_id    = ppa1.payroll_action_id
8243     AND paa1.assignment_action_id = pai.locking_action_id
8244     AND paa.assignment_action_id  = pai.locked_action_id
8245     GROUP BY paa.payroll_action_id
8246     ORDER BY max_asg_act_id;
8247 
8248   --Below cursor fetches further details of the current prepayment
8249   CURSOR csr_prepay_asg_act_details(p_asgid NUMBER, p_pre_pay_id NUMBER)
8250   IS
8251     SELECT paa.assignment_action_id,
8252       ppa.payroll_action_id,
8253       ppa.effective_date
8254     FROM pay_assignment_actions paa,
8255       pay_payroll_actions ppa
8256     WHERE paa.assignment_id   = p_asgid
8257     AND ppa.payroll_action_id = p_pre_pay_id
8258     AND paa.payroll_action_id = ppa.payroll_action_id;
8259 ---
8260   CURSOR csr_pay_act_details(p_asg_actid NUMBER)
8261   IS
8262     SELECT paa.payroll_action_id
8263     FROM pay_assignment_actions paa
8264     WHERE paa.assignment_action_id = p_asg_actid;
8265 
8266   --Below cursor verifies whether current payment for this assignment is already archived
8267   CURSOR csr_earlier_archived(p_last_asg_action_id NUMBER)
8268   IS
8269     SELECT DISTINCT fps_asg_act_id
8270     FROM pay_gb_fps_details
8271     WHERE payroll_asg_act_id = p_last_asg_action_id;
8272 
8273   --Below cursor fetches the already archived record for this assignment
8274   CURSOR csr_get_archived_record(p_assignment_action_id NUMBER, p_act_info_cat VARCHAR2)
8275   IS
8276     SELECT action_context_id,
8277       action_context_type,
8278       action_information_category,
8279       action_information1,
8280       action_information2,
8281       action_information3,
8282       action_information4,
8283       action_information5,
8284       action_information6,
8285       action_information7,
8286       action_information8,
8287       action_information9,
8288       action_information10,
8289       action_information11,
8290       action_information12,
8291       action_information13,
8292       action_information14,
8293       action_information15,
8294       action_information16,
8295       action_information17,
8296       action_information18,
8297       action_information19,
8298       action_information20,
8299       action_information21,
8300       action_information22,
8301       action_information23,
8302       action_information24,
8303       action_information25,
8304       action_information26,
8305       action_information27,
8306       action_information28,
8307       action_information29,
8308       action_information30,
8309       effective_date,
8310       assignment_id
8311     FROM pay_action_information pai
8312     WHERE pai.action_context_id         = p_assignment_action_id
8313     AND pai.action_context_type         = 'AAP'
8314     AND pai.action_information_category = p_act_info_cat;
8315 
8316   --Below cursor fetches archived records count
8317   CURSOR csr_archived_records_count(p_assignment_action_id NUMBER)
8318   IS
8319     SELECT COUNT(*)
8320     FROM pay_action_information pai
8321     WHERE pai.action_context_id = p_assignment_action_id;
8322 
8323   CURSOR csr_bacs_payment_exists (c_prepay_payroll_action_id NUMBER,
8324                                   c_prepay_asg_action_id NUMBER)
8325   IS
8326   SELECT 'Y'
8327    FROM pay_pre_payments ppp,
8328             pay_payment_types ppt,
8329             pay_org_payment_methods_f popf,
8330             pay_personal_payment_methods_f pppf,
8331             pay_external_accounts Orgkey,
8332             pay_external_accounts deskey,
8333             PAY_ASSIGNMENT_ACTIONS PAA,
8334             pay_payroll_actions ppa
8335           WHERE popf.ORG_PAYMENT_METHOD_ID    = ppp.ORG_PAYMENT_METHOD_ID
8336           AND pppf.personal_payment_method_ID = ppp.personal_payment_method_ID
8337           AND popf.PAYMENT_TYPE_ID            = ppt.PAYMENT_TYPE_ID
8338           AND ppt.PAYMENT_TYPE_NAME           = 'BACS Tape'
8339           AND popf.defined_balance_id is not null
8340           AND orgkey.external_account_id      = popf.external_account_id
8341           AND deskey.external_account_id      = pppf.external_account_id
8342           AND ppa.effective_date BETWEEN popf.effective_start_date AND popf.effective_end_date
8343           AND ppa.effective_date BETWEEN pppf.effective_start_date AND pppf.effective_end_date
8344           AND ppp.ASSIGNMENT_ACTION_ID = PAA.ASSIGNMENT_ACTION_ID
8345           AND ppa.PAYROLL_ACTION_ID = PAA.PAYROLL_ACTION_ID
8346           AND PAA.PAYROLL_ACTION_ID    = c_prepay_payroll_action_id --1129781
8347           AND PAA.ASSIGNMENT_ACTION_ID = c_prepay_asg_action_id;  --9849423
8348 
8349   CURSOR csr_total_payment (c_prepay_asg_action_id NUMBER)
8350   IS
8351   select (sum(ppp.value) * 100) amount
8352    from pay_pre_payments ppp,
8353         pay_org_payment_methods_f popmf,
8354         pay_assignment_actions paa,
8355         pay_payroll_actions ppa
8356    where ppp.ASSIGNMENT_ACTION_ID = c_prepay_asg_action_id
8357       and popmf.ORG_PAYMENT_METHOD_ID = ppp.ORG_PAYMENT_METHOD_ID
8358       and popmf.defined_balance_id is not null
8359       and ppa.payroll_action_id = paa.payroll_action_id
8360       and paa.assignment_action_id = ppp.assignment_action_id;
8361 
8362    CURSOR csr_total_payment_new(c_prepay_asg_action_id NUMBER)
8363   IS
8364   select (sum(ppp.value) * 100) amount
8365    from pay_pre_payments ppp
8366    where ASSIGNMENT_ACTION_ID = c_prepay_asg_action_id;
8367 
8368   --Below cursor fetches the latest payroll run details of the current assignment
8369   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)
8370   IS
8371     SELECT
8372       /*+ USE_NL(paa, pact, ptp) */
8373       to_number(SUBSTR(MAX(lpad(paa.action_sequence,15,'0')
8374       || paa.assignment_action_id),16)) max_asg_act_id,
8375       MAX(pact.effective_date) effective_date
8376     FROM pay_assignment_actions paa,
8377       per_all_assignments_f paaf,
8378       pay_payroll_actions pact,
8379       per_time_periods ptp,
8380       pay_assignment_actions paa1, --Prepayments
8381       pay_payroll_actions ppa1,    --Prepayments
8382       pay_action_interlocks pai    --Prepayments
8383     WHERE paa.assignment_id = paaf.assignment_id
8384     AND paaf.person_id = p_person_id
8385     AND paa.payroll_action_id = pact.payroll_action_id
8386     AND pact.time_period_id   = ptp.time_period_id
8387     AND pact.action_type     IN ('Q','R','B','I','V')
8388     AND paa.action_status    IN ('C','S')
8389     AND ptp.regular_payment_date BETWEEN NVL(p_asg_start, p_start_year) AND p_end_year
8390     AND ppa1.payroll_action_id    = p_pre_pay_id --1160712
8391     AND ppa1.action_type         IN ('P','U')
8392     AND paa1.payroll_action_id    = ppa1.payroll_action_id
8393     AND paa1.assignment_action_id = pai.locking_action_id
8394     AND paa.assignment_action_id  = pai.locked_action_id
8395     AND exists( select 1
8396                   from pay_pre_payments ppp
8397                  where ASSIGNMENT_ACTION_ID = paa1.assignment_action_id
8398                    and ppp.value <> 0);  --For the bug 16542698
8399 
8400 /**********************************************************************************************
8401      Below cursor fetches the details of the payroll runs processed for an aggregated employee.
8402      It fetches all the Payroll runs processed for a person provided if
8403                                 it ran after First FPS run date
8404                                 and not processed in any earlier FPS.
8405 *********************************************************************************************/
8406   CURSOR csr_aggr_all_payroll_actions(p_person_id NUMBER,
8407                                       p_asg_id NUMBER,
8408                                       p_last_asgact_id NUMBER,
8409                                       p_start_year DATE,
8410                                       p_end_year DATE,
8411                                       c_first_fps_eff_date DATE)
8412   IS
8413     SELECT  /*+ USE_NL(paa, pact, ptp) */
8414             to_number (substr (max (lpad (paa.action_sequence ,15,'0')
8415                                     || paa.assignment_action_id),16)) max_asg_act_id
8416            ,max (pact.effective_date) effective_date
8417     FROM    pay_assignment_actions paa
8418            ,per_all_assignments_f paaf
8419            ,pay_payroll_actions pact
8420            ,per_time_periods ptp
8421     WHERE   paa.assignment_id = paaf.assignment_id
8422     AND     paaf.person_id = p_person_id
8423     AND     paa.payroll_action_id = pact.payroll_action_id
8424     AND     pact.time_period_id = ptp.time_period_id
8425     AND     pact.action_type IN ('Q','R','B','I','V')
8426     AND     paa.action_status IN ('C','S')
8427     AND     ptp.regular_payment_date BETWEEN p_start_year
8428                                      AND     p_end_year
8429     AND     (
8430                     (
8431                             paa.assignment_action_id >
8432                             (
8433                             SELECT  nvl (max (payroll_asg_act_id),paa.assignment_action_id)
8434                             FROM    pay_gb_fps_details pgfd
8435                             WHERE   pgfd.person_id = p_person_id
8436                             )
8437                     AND     source_action_id IS NULL
8438                     )
8439             OR      (
8440                             (
8441                             SELECT  count (*)
8442                             FROM    pay_gb_fps_details pgfd
8443                             WHERE   pgfd.person_id = p_person_id
8444                             ) = 0
8445                     )
8446             )
8447     AND     ptp.regular_payment_date >= nvl (g_first_fps_run_date, c_first_fps_eff_date)
8448     AND     paa.assignment_action_id <= p_last_asgact_id
8449     GROUP BY paa.payroll_action_id
8450     ORDER BY max_asg_act_id;
8451 
8452   CURSOR csr_aggr_sequence_id(c_asg_act_id NUMBER)
8453   IS
8454   SELECT action_sequence
8455   FROM pay_assignment_actions
8456   WHERE assignment_action_id = c_asg_act_id;
8457 
8458   CURSOR csr_aggr_locking_asg_act_id(p_person_id NUMBER, p_action_sequence NUMBER)
8459   IS
8460 /*
8461                select null into dummy
8462                from   dual
8463                where  not exists
8464                   (select null
8465 */
8466 	SELECT  min (act.assignment_action_id)
8467 	FROM    pay_action_classifications class
8468 	       ,pay_payroll_actions pact
8469 	       ,pay_assignment_actions act
8470 	       ,per_all_assignments_f ass
8471 	       ,per_periods_of_service pos
8472 	WHERE   pos.person_id = p_person_id
8473 	AND     ass.period_of_service_id = pos.period_of_service_id
8474 	AND     act.assignment_id = ass.assignment_id
8475 	AND     act.action_sequence > p_action_sequence
8476 	AND     act.action_status IN ('C','S','M')
8477 	AND     act.payroll_action_id = pact.payroll_action_id
8478 	AND     pact.action_type = class.action_type
8479 	AND     class.classification_name = 'SEQUENCED';
8480 
8481 --  CURSOR csr_processed_in_prepayment(c_prepay_asgactid NUMBER, c_payroll_asgactid NUMBER)
8482   CURSOR csr_processed_in_prepayment(c_prepay_asgactid NUMBER, c_payroll_asgactid NUMBER, c_payroll_master_asgactid number)
8483   IS
8484 	SELECT  'Y' this_prepayment
8485         FROM pay_action_interlocks pai,
8486              pay_assignment_actions paa,
8487              pay_payroll_actions ppa
8488         WHERE paa.payroll_action_id = ppa.payroll_action_id
8489         AND paa.assignment_action_id = pai.locking_action_id
8490         AND ppa.action_type in ('P','U')
8491         AND ppa.payroll_action_id = g_pre_pact_id
8492         AND (pai.locked_action_id = c_payroll_asgactid
8493              OR  pai.locked_action_id = c_payroll_master_asgactid );
8494 
8495 /*
8496 	SELECT  'Y' this_prepayment
8497 	FROM    pay_action_interlocks pai
8498 	WHERE   locking_action_id = c_prepay_asgactid
8499 	AND     (locked_action_id = c_payroll_asgactid
8500   OR      locked_action_id = c_payroll_master_asgactid );
8501 */
8502 
8503 cursor csr_get_asg_id(c_asgactid number) is
8504 select distinct assignment_id
8505 from pay_assignment_actions
8506 where assignment_action_id = c_asgactid;
8507  -- Curosr to fetch the RTI Reporting flag and effective date of the assignment
8508    cursor csr_ni_rpt_flag(c_asg_id number) is
8509    select AEI_INFORMATION1, AEI_INFORMATION2 from per_assignment_extra_info where assignment_id = c_asg_id
8510    and AEI_INFORMATION_CATEGORY = 'GB_RTI_AGGREGATION';
8511 
8512 -- Cursor to fetch the RTI NI Reporting assignment for this person.
8513    cursor csr_get_ni_rpt_asg(c_asg_id number) is
8514    select
8515      paei.assignment_id , fnd_date.canonical_to_date(paei.AEI_INFORMATION2)
8516    from per_all_assignments_f paaf1, per_all_assignments_f paaf2 ,per_assignment_extra_info paei
8517    where paaf1.assignment_id = c_asg_id
8518    and paaf1.person_id = paaf2.person_id
8519    and paaf2.ASSIGNMENT_TYPE = 'E'
8520    and paei.assignment_id = paaf2.assignment_id
8521    and paei.AEI_INFORMATION_CATEGORY = 'GB_RTI_AGGREGATION'
8522    and paei. AEI_INFORMATION1 = 'Y'
8523    and p_effective_date between paaf1.effective_start_date and paaf1.effective_end_date
8524    and p_effective_date between paaf2.effective_start_date and paaf2.effective_end_date
8525    order by 2 desc;
8526 
8527 -- Cursor to fetch the previously archived details for the NI Reporting assignment.
8528    cursor csr_ni_asg_last_archived(c_asg_id number) is
8529    select
8530   assignment_id
8531  ,null
8532  ,null
8533  ,ACTION_INFORMATION_CATEGORY
8534  ,ACTION_INFORMATION1
8535  ,ACTION_INFORMATION2
8536  ,ACTION_INFORMATION3
8537  ,ACTION_INFORMATION4
8538  ,ACTION_INFORMATION5
8539  ,ACTION_INFORMATION6
8540  ,ACTION_INFORMATION7
8541  ,ACTION_INFORMATION8
8542  ,ACTION_INFORMATION9
8543  ,ACTION_INFORMATION10
8544  ,ACTION_INFORMATION11
8545  ,ACTION_INFORMATION12
8546  ,ACTION_INFORMATION13
8547  ,ACTION_INFORMATION14
8548  ,ACTION_INFORMATION15
8549  ,ACTION_INFORMATION16
8550  ,ACTION_INFORMATION17
8551  ,ACTION_INFORMATION18
8552  ,ACTION_INFORMATION19
8553  ,ACTION_INFORMATION20
8554  ,ACTION_INFORMATION21
8555  ,ACTION_INFORMATION22
8556  ,ACTION_INFORMATION23
8557  ,ACTION_INFORMATION24
8558  ,ACTION_INFORMATION25
8559  ,ACTION_INFORMATION26
8560  ,ACTION_INFORMATION27
8561  ,ACTION_INFORMATION28
8562  ,ACTION_INFORMATION29
8563  ,ACTION_INFORMATION30
8564  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
8565    and FPS_PAY_ACT_ID <> g_payroll_action_id) --= 9789749
8566 and ACTION_CONTEXT_TYPE = 'AAP' and
8567 ACTION_INFORMATION_CATEGORY in( 'GB_RTI_FPS_ASG_DET1', 'GB_RTI_FPS_ASG_DET2');
8568 
8569 
8570    /***  Get the latest assignment_action ids for all the other assignments for this employer
8571          and get the YTD balance value for these action ids.
8572          Sum this with the current assignment NI YTD and then archive.
8573    ***/
8574        cursor csr_asg_act_oth_asgs(c_asg_id number) is
8575        select max(paa.assignment_action_id) asg_act_id from per_all_assignments_f paaf,
8576                    per_all_assignments_f paaf1,
8577                    pay_assignment_actions paa,
8578                    pay_payroll_actions ppa
8579        where paaf.assignment_id = c_asg_id
8580        and   paaf1.person_id = paaf.person_id
8581        and paaf1.assignment_id <> c_asg_id
8582        and paaf1.assignment_id = paa.assignment_id
8583        and paa.payroll_action_id = ppa.payroll_action_id
8584        and ppa.effective_date >= g_start_year
8585        and ppa.action_type     IN ('Q','R')
8586        and paa.action_status    IN ('C','S')
8587        group by paa.assignment_id;
8588 
8589 -- First FPS Cursors
8590 -- cursor to check whether this assignment processed in prepayment or not
8591 cursor csr_prepayment_made(pre_pay_id number) is
8592 SELECT  paa_pre.assignment_id
8593 FROM    pay_assignment_actions paa_pre
8594       , pay_assignment_actions paa_arcv
8595 WHERE   paa_arcv.assignment_action_id = p_assactid
8596 AND     paa_pre.payroll_action_id = pre_pay_id
8597 AND     paa_pre.assignment_id = paa_arcv.assignment_id;
8598 
8599 -- cursor to get assignment id using assignment action id parameter
8600 CURSOR csr_asg_id(c_asg_act_id NUMBER) IS
8601 SELECT  paa.assignment_id
8602 FROM    pay_assignment_actions paa
8603 WHERE   paa.assignment_action_id = c_asg_act_id;
8604 
8605 -- To fetch First FPS parameter
8606 /*CURSOR csr_parameter_info IS
8607 SELECT  substr (pay_gb_eoy_archive.get_parameter (legislative_parameters, 'FIRST_FPS'), 1,1) first_fps,
8608         SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'TAX_REF'),1,20) tax_ref
8609 FROM    pay_payroll_actions pact
8610       , pay_assignment_actions paa
8611 WHERE   paa.assignment_action_id = p_assactid
8612 AND     pact.payroll_action_id = paa.payroll_action_id;
8613 */
8614 -- get the defined balance id for specified balance and dimension
8615 cursor get_defined_balance_id
8616     (p_balance_name VARCHAR2, p_dimension_name VARCHAR2) IS
8617 SELECT  defined_balance_id
8618 FROM    pay_defined_balances db
8619       , pay_balance_types b
8620       , pay_balance_dimensions d
8621 WHERE   b.balance_name = p_balance_name
8622 AND     d.dimension_name = p_dimension_name
8623 AND     db.balance_type_id = b.balance_type_id
8624 AND     db.balance_dimension_id = d.balance_dimension_id
8625 AND     b.legislation_code = 'GB'
8626 AND     d.legislation_code = 'GB';
8627 
8628 -- to fetch last assignment action id for the given assignment
8629 cursor csr_last_action_firstfps(p_asgid NUMBER, p_asg_start DATE,
8630                          p_asg_end DATE, p_start_year DATE,
8631                          p_end_year DATE, l_payroll number) IS--, p_tax_ref_xfer VARCHAR2) IS
8632 SELECT  /*+ USE_NL(paa, pact, ptp) */
8633         to_number (substr (max (lpad (paa.action_sequence, 15
8634                                     , '0')
8635                                 || paa.assignment_action_id), 16))
8636       , max (pact.effective_date) effective_date
8637 FROM    pay_assignment_actions paa
8638       , pay_payroll_actions pact
8639       , per_time_periods ptp
8640 WHERE   paa.assignment_id = p_asgid
8641 AND     paa.payroll_action_id = pact.payroll_action_id
8642 AND     pact.payroll_id = l_payroll
8643 AND     pact.time_period_id = ptp.time_period_id
8644 AND     pact.action_type IN ('Q', 'R', 'B'
8645                            , 'I', 'V')
8646 AND     paa.action_status IN ('C', 'S')
8647 AND     ptp.regular_payment_date
8648         BETWEEN g_start_year
8649         AND     g_end_year;
8650 
8651 -- to fetch last assignment action id for the given assignment
8652 cursor csr_last_action(p_asgid NUMBER, p_asg_start DATE,
8653                          p_asg_end DATE, p_start_year DATE,
8654                          p_end_year DATE) IS--, p_tax_ref_xfer VARCHAR2) IS
8655 SELECT  /*+ USE_NL(paa, pact, ptp) */
8656         to_number (substr (max (lpad (paa.action_sequence, 15
8657                                     , '0')
8658                                 || paa.assignment_action_id), 16))
8659       , max (pact.effective_date) effective_date
8660 FROM    pay_assignment_actions paa
8661       , pay_payroll_actions pact
8662       , per_time_periods ptp
8663 WHERE   paa.assignment_id = p_asgid
8664 AND     paa.payroll_action_id = pact.payroll_action_id
8665 AND     pact.time_period_id = ptp.time_period_id
8666 AND     pact.action_type IN ('Q', 'R', 'B'
8667                            , 'I', 'V')
8668 AND     paa.action_status IN ('C', 'S')
8669 AND     ptp.regular_payment_date
8670         BETWEEN g_start_year
8671         AND     g_end_year;
8672 
8673 
8674 cursor csr_get_asg_no(p_asg_id number,p_effective_date date) is
8675 SELECT  assignment_number
8676 FROM    per_all_assignments_f
8677 WHERE   assignment_id = p_asg_id
8678 AND     p_effective_date BETWEEN effective_start_date
8679                          AND     effective_end_date
8680 ORDER BY effective_start_date;
8681 
8682 cursor csr_get_latest_asg_no(p_asg_id number,p_effective_date date) is
8683 SELECT  assignment_number
8684 FROM    per_all_assignments_f
8685 WHERE   assignment_id = p_asg_id
8686 ORDER BY effective_start_date;
8687 
8688 cursor csr_asg_act_processed_earlier(c_person_id number,
8689 c_asg_id number,
8690 c_cur_asg_action_id number) is
8691 select count(*)
8692 --into l_asg_act_processed_earlier
8693 from PAY_GB_FPS_DETAILS
8694 where PERSON_ID = c_person_id
8695 and ASSIGNMENT_ID = c_asg_id
8696 and PAYROLL_ASG_ACT_ID = c_cur_asg_action_id;
8697 
8698 cursor csr_chk_prepayment_run(c_assignment_action_id number) is
8699 select count(*) from pay_assignment_actions paa, --run
8700       pay_assignment_actions paa1, --Prepayments
8701       pay_payroll_actions ppa1,    --Prepayments
8702       pay_action_interlocks pai    --Prepayments
8703     where paa.assignment_action_id = c_assignment_action_id --9917796
8704     AND paa.assignment_action_id  = pai.locked_action_id
8705     AND paa1.assignment_action_id = pai.locking_action_id
8706     AND paa1.payroll_action_id    = ppa1.payroll_action_id
8707     AND ppa1.action_type         IN ('P','U');
8708 
8709   CURSOR csr_aggr_min_act_id( p_person_id NUMBER,
8710                               p_pre_pact_id NUMBER,
8711                               c_effective_date DATE)
8712   IS
8713 
8714     SELECT count(distinct act.assignment_action_id),
8715              min(act.assignment_action_id) assignment_action_id
8716     FROM pay_payroll_actions ppa,  --Current pactid
8717       pay_payroll_actions appa,    --Payroll Run
8718       pay_payroll_actions appa2,   --Prepayments
8719       pay_assignment_actions act,  --Payroll Run
8720       pay_assignment_actions act1, --Prepayments
8721       pay_action_interlocks pai,   --Prepayments
8722       per_all_assignments_f as1
8723     WHERE as1.person_id = p_person_id --45885
8724     AND appa.action_type     IN ('R','Q') -- Payroll Run or Quickpay Run
8725     AND act.payroll_action_id = appa.payroll_action_id
8726     AND act.source_action_id IS NULL
8727     AND as1.assignment_id     = act.assignment_id
8728     AND ppa.effective_date BETWEEN as1.effective_start_date AND as1.effective_end_date
8729     AND act.action_status         = 'C'
8730     AND act.assignment_action_id  = pai.locked_action_id
8731     AND act1.assignment_action_id = pai.locking_action_id
8732     AND act1.action_status        = 'C'
8733     AND act1.payroll_action_id    = appa2.payroll_action_id
8734     AND appa2.action_type        IN ('P','U') -- Prepayments or Quickpay Prepayments
8735     AND appa2.payroll_action_id   = p_pre_pact_id;
8736 
8737 -- source is the above cursor:csr_aggr_min_act_id
8738   CURSOR csr_ni_aggr_max_act_id( p_person_id NUMBER,
8739                                p_pre_pact_id NUMBER)
8740   IS
8741 
8742     SELECT  max(act.assignment_action_id) assignment_action_id
8743     FROM pay_payroll_actions ppa,  --Current pactid
8744       pay_payroll_actions appa,    --Payroll Run
8745       pay_payroll_actions appa2,   --Prepayments
8746       pay_assignment_actions act,  --Payroll Run
8747       pay_assignment_actions act1, --Prepayments
8748       pay_action_interlocks pai,   --Prepayments
8749       per_all_assignments_f as1
8750     WHERE as1.person_id = p_person_id --45885
8751     AND appa.action_type     IN ('R','Q') -- Payroll Run or Quickpay Run
8752     AND act.payroll_action_id = appa.payroll_action_id
8753     AND act.source_action_id IS NULL
8754     AND as1.assignment_id     = act.assignment_id
8755     AND ppa.effective_date BETWEEN as1.effective_start_date AND as1.effective_end_date
8756     AND act.action_status         = 'C'
8757     AND act.assignment_action_id  = pai.locked_action_id
8758     AND act1.assignment_action_id = pai.locking_action_id
8759     AND act1.action_status        = 'C'
8760     AND act1.payroll_action_id    = appa2.payroll_action_id
8761     AND appa2.action_type        IN ('P','U') -- Prepayments or Quickpay Prepayments
8762     AND appa2.payroll_action_id   = p_pre_pact_id;
8763 
8764 cursor csr_asg_in_prepay(c_person_id number)
8765 IS
8766 SELECT act.assignment_id assignment_id,
8767           max(act.assignment_action_id) asg_act_id
8768     FROM
8769       pay_payroll_actions ppa,  --Current pactid
8770       pay_payroll_actions appa,    --Payroll Run
8771       pay_payroll_actions appa2,   --Prepayments
8772       pay_assignment_actions act,  --Payroll Run
8773       pay_assignment_actions act1, --Prepayments
8774       pay_action_interlocks pai,   --Prepayments
8775       per_all_assignments_f as1
8776     WHERE
8777       ppa.payroll_action_id = g_payroll_action_id
8778     AND as1.person_id  = c_person_id --BETWEEN stperson AND endperson
8779     AND appa.action_type     IN ('R','Q') -- Payroll Run or Quickpay Run
8780     AND act.payroll_action_id = appa.payroll_action_id
8781     AND act.source_action_id IS NULL
8782     AND as1.assignment_id     = act.assignment_id
8783     AND ppa.effective_date BETWEEN as1.effective_start_date AND as1.effective_end_date
8784     AND act.action_status         = 'C'
8785     AND act.assignment_action_id  = pai.locked_action_id
8786     AND act1.assignment_action_id = pai.locking_action_id
8787     AND act1.action_status        = 'C'
8788     AND act1.payroll_action_id    = appa2.payroll_action_id
8789     AND appa2.action_type        IN ('P','U') -- Prepayments or Quickpay Prepayments
8790     AND appa2.payroll_action_id   = g_pre_pact_id
8791     group by act.assignment_id
8792     ORDER BY act.assignment_id;
8793 
8794 
8795   CURSOR csr_aggr_master_id(c_child_asg_act_id NUMBER)
8796   IS
8797   SELECT assignment_action_id
8798   FROM pay_assignment_actions
8799   WHERE source_action_id = c_child_asg_act_id;
8800 
8801   CURSOR csr_aggr_max_act_id( p_person_id NUMBER,
8802                               p_pre_pact_id NUMBER,
8803                               c_effective_date DATE)
8804   IS
8805 
8806     SELECT count(distinct act.assignment_action_id),
8807              max(act.assignment_action_id) assignment_action_id
8808     FROM pay_payroll_actions ppa,  --Current pactid
8809       pay_payroll_actions appa,    --Payroll Run
8810       pay_payroll_actions appa2,   --Prepayments
8811       pay_assignment_actions act,  --Payroll Run
8812       pay_assignment_actions act1, --Prepayments
8813       pay_action_interlocks pai,   --Prepayments
8814       per_all_assignments_f as1
8815     WHERE as1.person_id = p_person_id --45885
8816     AND appa.action_type     IN ('R','Q') -- Payroll Run or Quickpay Run
8817     AND act.payroll_action_id = appa.payroll_action_id
8818     AND act.source_action_id IS NULL
8819     AND as1.assignment_id     = act.assignment_id
8820     AND ppa.effective_date BETWEEN as1.effective_start_date AND as1.effective_end_date
8821     AND act.action_status         = 'C'
8822     AND act.assignment_action_id  = pai.locked_action_id
8823     AND act1.assignment_action_id = pai.locking_action_id
8824     AND act1.action_status        = 'C'
8825     AND act1.payroll_action_id    = appa2.payroll_action_id
8826     AND appa2.action_type        IN ('P','U') -- Prepayments or Quickpay Prepayments
8827     AND appa2.payroll_action_id   = p_pre_pact_id
8828     AND exists( select 1
8829                   from pay_pre_payments ppp
8830                  where ASSIGNMENT_ACTION_ID = act1.assignment_action_id
8831                    and ppp.value <> 0); --For the bug 16542698
8832 
8833   l_asg_primary_flag  VARCHAR2(1);
8834   l_per_agg_flag      VARCHAR2(1);
8835   l_aggr_archive_flag VARCHAR2(1);
8836   l_asg_id            NUMBER;
8837   l_effective_start_date DATE;
8838   l_effective_end_date DATE;
8839   l_last_asg_action_id NUMBER;
8840   l_last_effective_date DATE;
8841   l_asg_eff_start_date DATE;
8842   l_payroll_id               NUMBER;
8843   l_ni_process_type          VARCHAR2(50);
8844   l_dir_nic_calc_method      VARCHAR2(30);
8845   l_prepay_asg_action_id     NUMBER;
8846   l_prepay_payroll_action_id NUMBER;
8847   l_prepay_effective_date DATE;
8848   l_payroll_pact_id        NUMBER;
8849   l_person_id              NUMBER;
8850   l_earlier_archived_flag  VARCHAR2(1);
8851   l_earlier_fps_asg_act_id NUMBER;
8852   l_action_info_id         NUMBER(15);
8853   l_ovn                    NUMBER;
8854   l_archived_rec_count     NUMBER;
8855   l_counter                NUMBER;
8856   l_archived_context       VARCHAR2(30);
8857   l_payment_date DATE;
8858   l_ni_rpt_assact_id number;
8859   l_get_archived_rec csr_get_archived_record%rowtype;
8860   p_ni_a_balance act_info_rec;
8861   p_ni_b_balance act_info_rec;
8862   p_ni_c_balance act_info_rec;
8863   p_ni_d_balance act_info_rec;
8864   p_ni_e_balance act_info_rec;
8865   p_ni_j_balance act_info_rec;
8866   p_ni_l_balance act_info_rec;
8867 
8868   p_per_ni_a_balance act_info_rec;
8869   p_per_ni_b_balance act_info_rec;
8870   p_per_ni_c_balance act_info_rec;
8871   p_per_ni_d_balance act_info_rec;
8872   p_per_ni_e_balance act_info_rec;
8873   p_per_ni_j_balance act_info_rec;
8874   p_per_ni_l_balance act_info_rec;
8875 
8876   already_a      NUMBER := -1;
8877   already_b      NUMBER := -1;
8878   already_c      NUMBER := -1;
8879   already_d      NUMBER := -1;
8880   already_e      NUMBER := -1;
8881   already_j      NUMBER := -1;
8882   already_l      NUMBER := -1;
8883   already_a1      NUMBER := -1;
8884   already_b1      NUMBER := -1;
8885   already_c1      NUMBER := -1;
8886   already_d1      NUMBER := -1;
8887   already_e1      NUMBER := -1;
8888   already_j1      NUMBER := -1;
8889   already_l1      NUMBER := -1;
8890 
8891   l_asact_count_prepayed number;
8892   l_aggr_max_act_id number;
8893   l_report_det1_det2_flag varchar2(1);
8894 
8895     i              NUMBER;
8896   i_1              NUMBER;
8897   i_2              NUMBER;
8898   ni_contrib     NUMBER := 0;
8899   ni_contrib_ytd NUMBER := 0;
8900   ni_contrib_1     NUMBER := 0;
8901   ni_contrib_ytd_1 NUMBER := 0;
8902   ni_contrib_2     NUMBER := 0;
8903   ni_contrib_ytd_2 NUMBER := 0;
8904   l_bacs_payment_exists varchar2(1);
8905   l_hash_code varchar2(100);
8906   l_large_bacs_payment NUMBER := 0;
8907   l_total_payment NUMBER := 0;
8908   l_non_bacs_payment NUMBER := 0;
8909   l_max_prepay_act_id number;
8910   l_count_asg number;
8911 -- Declarations for First FPS
8912 
8913 l_assignment_id number;
8914 p_starter_set varchar2(1):= 'N';
8915 
8916 l_asg_f_id number;
8917 l_first_fps varchar2(10);
8918 l_first_fps_prepay_asg varchar2(10);
8919 l_temp_asg_id number;
8920 l_asg_val_flag varchar2(1);
8921 l_date_soy date;
8922 l_date_eoy date;
8923 l_tax_ref varchar2(30);
8924 l_effective_date date; -- cp Parameter
8925 l_date_flag boolean;
8926 l_prepayment_date date;
8927 l_assignment_number per_assignments_f.assignment_number%TYPE;
8928 l_per_ni_agg_flag varchar2(1);
8929 l_per_paye_agg_flag varchar2(1);
8930 l_cur_asg_action_id number;
8931 l_cur_last_effective_date date;
8932 l_aggr_sequence_id number;
8933 l_aggr_locking_asg_act_id number;
8934 l_tab_counter number;
8935 l_tab_proc_counter number;
8936 l_tab_not_proc_counter number;
8937 l_processed_in_prepayment varchar2(1);
8938 
8939 l_archive_det1_counter number;
8940 l_archive_det2_counter number;
8941 l_archive_ni_det_counter number;
8942 /*l_archive_det1_counter_local number;
8943 l_archive_det2_counter_local number;*/
8944 l_cur_asg_id number;
8945 l_single_payroll_run_exists number;
8946 l_asg_act_processed_earlier number;
8947 l_archive_flag varchar2(1);
8948 l_chk_prepayment_run number;
8949 l_fps_etext_asg_temp_flag VARCHAR2(1);
8950 
8951 l_asg_act_count number;
8952 l_aggr_min_act_id number;
8953 l_payroll_master_asgactid number;
8954 l_prepay_master_counter number;
8955 l_retry_req_flag varchar2(1) := 'N';
8956 l_cur_prepay_payroll_action_id number;
8957 l_rti_ni_proc_flag varchar2(1);
8958 l_rti_ni_proc_flag_1 varchar2(1);
8959 l_ni_aggr_max_act_id number;
8960 l_dummy              NUMBER;
8961 l_ni_max_asg_act_id number;
8962 l_ni_max_asg_act_date date;
8963 l_asg_primary_flag1   VARCHAR2(1);
8964 l_per_ni_agg_flag1    VARCHAR2(1);
8965 l_per_paye_agg_flag1  VARCHAR2(1);
8966 l_payroll_id1         NUMBER;
8967 l_rti_ni_proc_flag1 varchar2(1);
8968 l_last_asg_id NUMBER;
8969 l_last_asgact_id NUMBER;
8970 l_last_eff_date DATE;
8971 
8972    TYPE l_typ_payroll_asg_acts IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
8973         l_payroll_asg_acts l_typ_payroll_asg_acts;
8974    TYPE l_typ_proc_in_prepay IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
8975         l_proc_in_prepay l_typ_proc_in_prepay;
8976    TYPE l_typ_not_proc_in_prepay IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
8977         l_not_proc_in_prepay l_typ_not_proc_in_prepay;
8978 
8979 cursor chk_processed_in_prepay(c_cur_asg_action_id number) is
8980 select pai.locking_action_id
8981 from
8982 pay_action_interlocks pai,
8983 pay_payroll_actions ppa,
8984 pay_assignment_actions paa
8985 where pai.locked_action_id = c_cur_asg_action_id
8986 and ppa.action_type in ('P','U')
8987 and paa.payroll_action_id = ppa.payroll_action_id
8988 and paa.assignment_action_id = pai.locking_action_id;
8989 
8990 /* cursor csr_is_retry_request is
8991 select 'Y' from fnd_concurrent_programs fcp,
8992 fnd_concurrent_requests fcr,
8993 pay_payroll_actions ppa,
8994 pay_assignment_actions paa
8995 where paa.assignment_action_id = p_assactid
8996 and ppa.payroll_action_id = paa.payroll_action_id
8997 and ppa.request_id = fcr.request_id
8998 and fcr.CONCURRENT_PROGRAM_ID = fcp.CONCURRENT_PROGRAM_ID
8999 and CONCURRENT_PROGRAM_NAME =  'RETRY'; */
9000 
9001 -- Modified retry cursor
9002 cursor csr_is_retry_request is
9003 select 'Y' from
9004 pay_assignment_actions
9005 where assignment_action_id = p_assactid
9006 AND ACTION_STATUS = 'M';
9007 
9008 /* To get the payroll action id given assignment action id
9009 */
9010 cursor csr_prepay_payrol_act(c_asg_act_id number)
9011 is
9012   select paa.payroll_action_id
9013   from
9014    pay_assignment_actions paa
9015   where paa.assignment_action_id = c_asg_act_id;
9016 
9017 -- to check whether the given assignment is processed in given prepay payroll_action id
9018 cursor csr_rti_rpt_proc_prepay(c_ni_rpt_asg_id number,c_pre_pay_action_id number) is
9019   select 'Y' from pay_assignment_actions paa,
9020   pay_payroll_actions ppa
9021   where
9022   ppa.payroll_action_id = c_pre_pay_action_id
9023   and ppa.payroll_action_id = paa.payroll_action_id
9024   and paa.assignment_id = c_ni_rpt_asg_id
9025   and ppa.action_type    IN ('P','U')
9026   and paa.action_status  IN ('C','S');
9027 -- for ni only aggregation
9028 -- to get the latest payroll run assignment action id for the given assignment.
9029 cursor csr_get_latest_asg_action (c_asg_id number)
9030 is
9031 SELECT
9032             to_number (substr (max (lpad (paa.action_sequence ,15,'0')
9033                                     || paa.assignment_action_id),16)) max_asg_act_id
9034            , max(pact.effective_date) effective_date
9035 
9036     FROM    pay_assignment_actions paa
9037            ,pay_payroll_actions pact
9038            ,per_time_periods ptp
9039     WHERE   paa.assignment_id = c_asg_id
9040     AND     paa.payroll_action_id = pact.payroll_action_id
9041     AND     pact.time_period_id = ptp.time_period_id
9042     AND     pact.action_type IN ('Q','R','B','I','V')
9043     AND     paa.action_status IN ('C','S')
9044     AND     ptp.regular_payment_date BETWEEN g_start_year
9045                                      AND     g_end_year
9046 AND     ptp.regular_payment_date <= g_effective_date;
9047 
9048   CURSOR csr_last_aggr_asg(c_last_asgact_id number) is
9049   select distinct assignment_id
9050   from pay_assignment_actions
9051   where assignment_action_id = c_last_asgact_id;
9052 
9053   --Below cursor fetches the number of assignments processed in current prepayment request
9054   CURSOR csr_aggr_asgs_processed(p_person_id NUMBER, p_pre_pay_id NUMBER, p_start_year DATE, p_end_year DATE)
9055   IS
9056     SELECT count(distinct paa1.assignment_id)
9057     FROM pay_assignment_actions paa,
9058       per_all_assignments_f paaf,
9059       pay_payroll_actions pact,
9060       per_time_periods ptp,
9061       pay_assignment_actions paa1, --Prepayments
9062       pay_payroll_actions ppa1,    --Prepayments
9063       pay_action_interlocks pai    --Prepayments
9064     WHERE paa.assignment_id = paaf.assignment_id
9065     AND paaf.person_id = p_person_id
9066     AND paa.payroll_action_id = pact.payroll_action_id
9067     AND pact.time_period_id   = ptp.time_period_id
9068     AND pact.action_type     IN ('Q','R','B','I','V')
9069     AND paa.action_status    IN ('C','S')
9070     AND ptp.regular_payment_date BETWEEN p_start_year AND p_end_year
9071     AND ppa1.payroll_action_id    = p_pre_pay_id
9072     AND ppa1.action_type         IN ('P','U')
9073     AND paa1.payroll_action_id    = ppa1.payroll_action_id
9074     AND paa1.assignment_action_id = pai.locking_action_id
9075     AND paa.assignment_action_id  = pai.locked_action_id;
9076 
9077 -- To fetch First FPS parameter
9078 CURSOR csr_parameter_info IS
9079 SELECT fnd_date.canonical_to_date(SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'FIRST_FPS_DATE'),1,10)) first_fps_date,
9080        to_number(pay_gb_eoy_archive.get_parameter(legislative_parameters, 'PAYROLL_ID')) payroll_id
9081 FROM    pay_payroll_actions pact,
9082         pay_assignment_actions paa
9083 WHERE   paa.assignment_action_id = p_assactid
9084 AND     pact.payroll_action_id = paa.payroll_action_id;
9085 
9086 -- To get maximum assignment action id for the person
9087 cursor csr_get_max_asg_actid_person(person_id number,l_first_fps_eff_date date) is
9088 SELECT  /*+ USE_NL(paa, pact, ptp) */
9089         to_number (substr (max (lpad (paa.action_sequence, 15
9090                                     , '0')
9091                                 || paa.assignment_action_id), 16))
9092       , max (pact.effective_date) effective_date
9093 
9094 FROM   per_all_assignments_f paaf,
9095        pay_assignment_actions paa
9096       , pay_payroll_actions pact
9097       , per_time_periods ptp
9098 WHERE   paa.assignment_id = paaf.assignment_id
9099 and paaf.person_id = person_id
9100 AND     paa.payroll_action_id = pact.payroll_action_id
9101 AND     pact.time_period_id = ptp.time_period_id
9102 AND     pact.action_type IN ('Q', 'R', 'B'
9103                            , 'I', 'V')
9104 AND     paa.action_status IN ('C', 'S')
9105 AND     ptp.regular_payment_date
9106         BETWEEN g_start_year
9107         AND     l_first_fps_eff_date
9108 AND paaf.effective_start_date =
9109        ( select max(asg2.effective_start_date)
9110          from   per_all_assignments_f asg2
9111          where  asg2.assignment_id         = paaf.assignment_id
9112          and    asg2.assignment_type       = 'E'
9113          and    asg2.effective_start_date <= l_prepayment_date
9114        );
9115 
9116   --Below cursor fetches the basic details of the current assignment
9117   CURSOR csr_asg_num(c_asg_act_id NUMBER, c_cur_last_effective_date date)
9118   IS
9119     SELECT asg.assignment_number
9120     FROM per_all_assignments_f asg,
9121       pay_assignment_actions paa
9122     WHERE paa.assignment_action_id = c_asg_act_id
9123     AND paa.assignment_id          = asg.assignment_id
9124     AND c_cur_last_effective_date BETWEEN asg.effective_start_date AND asg.effective_end_date;
9125 
9126   CURSOR csr_get_starter_details(p_asg_id NUMBER)
9127   IS
9128     SELECT assignment_extra_info_id l_aei_id,
9129       aei_information8 starter_flag,
9130       aei_information9 pensioner_flag,
9131       aei_information19 expat_flag,
9132       object_version_number l_ovn
9133     FROM per_assignment_extra_info
9134     WHERE assignment_id  = p_asg_id
9135     AND information_type = 'GB_RTI_ASG_DETAILS';
9136 
9137 cursor csr_fps_check(p_asg_id number) is
9138 select count(*)
9139 from pay_assignment_actions paa,
9140 pay_payroll_actions ppa
9141 where paa.assignment_id = p_asg_id
9142 and paa.action_status ='C'
9143 and paa.assignment_action_id <> p_assactid
9144 and ppa.payroll_action_id = paa.payroll_action_id
9145 and ppa.report_type in ( 'RTI_FPS_REP' , 'RTI_FPS_REP_13');
9146 
9147   cursor csr_fps_action_exists(c_cur_asg_id number, c_payroll_action_id number) is
9148   select 'Y'
9149   from  pay_assignment_actions paa
9150   where paa.payroll_action_id = c_payroll_action_id
9151   and paa.assignment_id = c_cur_asg_id;
9152 
9153   l_aggr_asgs_processed number;
9154   l_first_fps_eff_date date;
9155 	l_payroll              NUMBER;
9156 	l_flag        VARCHAR2(1) :='Y';
9157 	l_gross number;
9158 	l_taxable number;
9159 	l_niable number;
9160 	l_gross_id number;
9161 	l_taxable_id number;
9162 	l_niable_id number;
9163 	min_asgactid number;
9164 	l_pact_id number;
9165 	l_new_starter csr_get_starter_details%rowtype;
9166 	l_aei_id        NUMBER;
9167 	l_fps_check NUMBER;
9168   l_fps_action_exists VARCHAR2(1) :='N';
9169 BEGIN
9170 --archive_code begins here
9171   hr_utility.set_location('Entering the debug: '||l_proc,1);
9172   hr_utility.trace('p_assactid: '||p_assactid);
9173   hr_utility.trace('p_effective_date: '||p_effective_date);
9174 
9175 -- get the parameter values present in globals to local variables.
9176   l_first_fps := g_first_fps;
9177   l_tax_ref := g_tax_ref;
9178 
9179   OPEN csr_parameter_info;
9180   FETCH csr_parameter_info
9181   INTO l_first_fps_eff_date,l_payroll;
9182   CLOSE csr_parameter_info;
9183 
9184   hr_utility.trace('l_first_fps_eff_date: '||l_first_fps_eff_date);
9185 
9186   OPEN csr_asg_basic_details(p_assactid);
9187   FETCH csr_asg_basic_details INTO l_asg_id, l_asg_eff_start_date, l_person_id, l_assignment_number;
9188   CLOSE csr_asg_basic_details;
9189 
9190   hr_utility.trace('l_asg_id: '||l_asg_id);
9191   hr_utility.trace('l_asg_eff_start_date: '||l_asg_eff_start_date);
9192   hr_utility.trace('l_person_id: '||l_person_id);
9193 
9194     open csr_is_retry_request;
9195    fetch csr_is_retry_request into l_retry_req_flag;
9196    close csr_is_retry_request;
9197 
9198 --RETRY LOGIC
9199 if l_retry_req_flag = 'Y' then
9200 
9201 hr_utility.trace('RETRY : l_retry_req_flag: '|| l_retry_req_flag);
9202 open csr_get_starter_details(l_asg_id);
9203 fetch csr_get_starter_details into l_new_starter;
9204 close csr_get_starter_details;
9205 
9206 hr_utility.trace('RETRY : l_new_starter.l_aei_id       : '|| l_new_starter.l_aei_id);
9207 hr_utility.trace('RETRY : l_new_starter.l_ovn          : '|| l_new_starter.l_ovn);
9208 hr_utility.trace('RETRY : l_new_starter.starter_flag   : '|| l_new_starter.starter_flag);
9209 hr_utility.trace('RETRY : l_new_starter.pensioner_flag : '|| l_new_starter.pensioner_flag);
9210 hr_utility.trace('RETRY : l_new_starter.expat_flag     : '|| l_new_starter.expat_flag);
9211 
9212 if l_new_starter.starter_flag = 'Y'  OR l_new_starter.pensioner_flag = 'Y' OR l_new_starter.expat_flag = 'Y'  THEN
9213 
9214 hr_utility.trace('RTI Sent checked.');
9215 
9216 open csr_fps_check(l_asg_id);
9217 fetch csr_fps_check into l_fps_check;
9218 close csr_fps_check;
9219 
9220 if l_fps_check = 0 then
9221 
9222 			hr_utility.trace('RETRY : Reset is required.');
9223 
9224 	--EXPAT Flag
9225     IF l_new_starter.starter_flag = 'Y' THEN
9226       IF l_new_starter.l_ovn             IS NOT NULL THEN
9227         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',
9228         p_aei_information8 => 'N');
9229       END IF;
9230     END IF;
9231     --PENSIONER Flag
9232     IF l_new_starter.pensioner_flag = 'Y' THEN
9233       IF l_new_starter.l_ovn             IS NOT NULL THEN
9234         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',
9235         p_aei_information9 => 'N');
9236       END IF;
9237     END IF;
9238     --STARTER Flag
9239     IF l_new_starter.expat_flag = 'Y' THEN
9240       IF  l_new_starter.l_ovn            IS NOT NULL THEN
9241         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',
9242         p_aei_information19 => 'N');
9243       END IF;
9244     END IF;
9245 
9246 end if; --l_fps_check
9247 
9248 end if;
9249 
9250 end if; --l_retry_req_flag
9251 
9252 --RETRY Logic ends here
9253 
9254   --delete from pay_gb_fps_details in case of retry
9255 		if l_retry_req_flag = 'Y' then
9256 			hr_utility.trace('RETRY : l_retry_req_flag: '|| l_retry_req_flag);
9257 			select payroll_action_id into l_pact_id
9258 			from pay_assignment_actions where assignment_action_id = p_assactid;
9259 			open get_min_asg_actid(l_person_id,p_assactid);
9260 			fetch get_min_asg_actid into min_asgactid;
9261 			close get_min_asg_actid;
9262 
9263 			if min_asgactid = p_assactid then
9264 			hr_utility.trace('deleting form pay_gb_fps_details in case of retry ');
9265 			delete from pay_gb_fps_details
9266  			where person_ID = l_person_id
9267 			and FPS_PAY_ACT_ID = l_pact_id;
9268 			end if;
9269 		end if;
9270 
9271 
9272    OPEN csr_asg(p_assactid, p_effective_date);
9273    FETCH csr_asg INTO l_asg_primary_flag1, l_per_ni_agg_flag1, l_per_paye_agg_flag1, l_payroll_id1;
9274    CLOSE csr_asg;
9275       hr_utility.trace('l_per_ni_agg_flag1: '|| l_per_ni_agg_flag1);
9276       hr_utility.trace('l_per_paye_agg_flag1: '|| l_per_paye_agg_flag1);
9277 
9278 --------------------------------------------------------------------------------------------------------------------
9279 
9280 -- First FPS Changes
9281 if l_first_fps = 'Y' then
9282 
9283 hr_utility.trace(l_asg_f_id||' First FPS Flag : '||l_first_fps);
9284 
9285 -- To get Assignment ID
9286 open csr_asg_id(p_assactid);
9287 fetch csr_asg_id into l_asg_f_id;
9288 close csr_asg_id;
9289 
9290 open csr_prepayment_made(g_pre_pact_id);
9291 fetch csr_prepayment_made into l_temp_asg_id;
9292 if csr_prepayment_made%found then
9293 	l_first_fps_prepay_asg := 'Y';
9294 else
9295   l_first_fps_prepay_asg := 'N';
9296 end if;
9297 close csr_prepayment_made;
9298 
9299 hr_utility.trace(l_asg_f_id||' First FPS Pre Pay Asg : '||l_first_fps_prepay_asg );
9300 
9301 -- PAYE Aggr logic starts
9302 /* Below code is to filter out PAYE Aggregated employees as part of First FPS processing logic
9303 if they have any of the assignments processed in current prepayment request id.
9304 That means this employee would be processed in main PAYE Aggregated code itself. */
9305 
9306 l_aggr_asgs_processed := 0;
9307 IF l_per_paye_agg_flag1  = 'Y' THEN
9308         hr_utility.trace('PAYE Aggregated Assignment');
9309         hr_utility.trace('l_person_id:'||l_person_id);
9310         hr_utility.trace('g_pre_pact_id:'||g_pre_pact_id);
9311         hr_utility.trace('g_start_year:'||g_start_year);
9312         hr_utility.trace('g_end_year:'||g_end_year);
9313 
9314         OPEN csr_aggr_asgs_processed(l_person_id, g_pre_pact_id, g_start_year, g_end_year);
9315         FETCH csr_aggr_asgs_processed
9316         INTO l_aggr_asgs_processed;
9317         hr_utility.trace('l_aggr_asgs_processed:' ||l_aggr_asgs_processed);
9318         CLOSE csr_aggr_asgs_processed;
9319 
9320         IF l_aggr_asgs_processed > 0 THEN
9321                 l_first_fps_prepay_asg := 'Y';
9322                 hr_utility.trace('There is a payment made for one of his asgs in current prepayment request');
9323         END IF;
9324 END IF;
9325 
9326 -- PAYE Aggr logic ends
9327 
9328 end if; -- First FPS if ends
9329 
9330 --for NI only aggregation
9331    l_rti_ni_proc_flag1 := 'Y';
9332 
9333 if nvl(l_per_ni_agg_flag1,'N') = 'Y' and nvl(l_per_paye_agg_flag1,'N') <> 'Y' then
9334       hr_utility.trace('l_asg_f_id1: '|| l_asg_f_id);
9335       hr_utility.trace('g_pre_pact_id: '|| g_pre_pact_id);
9336 
9337 --Check whether the assignment is first fps assignment or not
9338 --If yes process the assignment else skip the assignment
9339 
9340     OPEN get_defined_balance_id('Gross Pay','_ASG_TD_YTD');
9341     FETCH get_defined_balance_id INTO l_gross_id;
9342     CLOSE get_defined_balance_id;
9343 
9344     OPEN get_defined_balance_id('Taxable Pay','_ASG_TD_YTD');
9345     FETCH get_defined_balance_id INTO l_taxable_id;
9346     CLOSE get_defined_balance_id;
9347 
9348     OPEN get_defined_balance_id('NIable Pay','_ASG_TD_YTD');
9349     FETCH get_defined_balance_id INTO l_niable_id;
9350     CLOSE get_defined_balance_id;
9351 
9352 		-- To get latest assignment action id for the assignment
9353 		OPEN csr_last_action_firstfps(l_asg_f_id, l_effective_start_date,
9354 		                       l_effective_end_date, l_date_soy,
9355 		                       l_prepayment_date,l_payroll);
9356 		FETCH csr_last_action_firstfps INTO  l_last_asg_action_id,
9357 		                              l_last_effective_date;
9358 
9359 		CLOSE csr_last_action_firstfps;
9360 
9361       hr_utility.trace('l_last_asg_action_id: '|| l_last_asg_action_id);
9362       hr_utility.trace('l_last_effective_date: '|| l_last_effective_date);
9363 
9364 -- Fetching balances
9365   IF l_last_asg_action_id IS NOT NULL THEN
9366       l_gross   := pay_balance_pkg.get_value(l_gross_id,l_last_asg_action_id);
9367       IF l_gross <= 0 THEN
9368 			l_taxable   := pay_balance_pkg.get_value(l_taxable_id,l_last_asg_action_id);
9369       END IF;
9370 
9371 			IF l_taxable <= 0 THEN
9372 			l_niable   := pay_balance_pkg.get_value(l_niable_id,l_last_asg_action_id);
9373       end if;
9374   END IF;
9375 
9376  IF l_gross > 0 or l_taxable > 0 or l_niable > 0 THEN
9377     hr_utility.trace('Assignment '||l_asg_f_id||' has YTD values');
9378  ELSE
9379     hr_utility.trace('Assignment '||l_asg_f_id||' has No YTD values.');
9380     l_flag:= 'N';
9381  END IF;
9382 
9383 -- Assignment is not First FPS Assignment
9384 if l_flag = 'N' then
9385   -- skip the NI aggregation logic if the current asg is not processed in this
9386   -- pre payments. This would be processed as part of max asg_act_id for this pre payment.
9387      open csr_rti_rpt_proc_prepay(l_asg_f_id,g_pre_pact_id);
9388      fetch csr_rti_rpt_proc_prepay into l_rti_ni_proc_flag1;
9389      if csr_rti_rpt_proc_prepay%NOTFOUND then
9390          hr_utility.trace('Not processed in this prepayment.');
9391          l_rti_ni_proc_flag1 := 'N';
9392      end if;
9393      close csr_rti_rpt_proc_prepay;
9394      hr_utility.trace('l_rti_ni_proc_flag1: '|| l_rti_ni_proc_flag1);
9395 end if;
9396 
9397 end if;  --nvl(l_per_ni_agg_flag1,'N') = 'Y' and nvl(l_per_paye_agg_flag1,'N') <> 'Y
9398 
9399 
9400 if l_first_fps = 'Y' and l_first_fps_prepay_asg = 'N' and nvl(l_rti_ni_proc_flag1,'N') = 'Y' then
9401 l_prepayment_date := g_prepayment_date;
9402 
9403 hr_utility.trace(l_asg_f_id||'Entering First FPS Logic');
9404 
9405 l_effective_date := l_prepayment_date;
9406 g_effective_date := l_prepayment_date;
9407 
9408 -- Tax Year Start and End
9409       If l_effective_date >= to_date('06-04-'||substr(to_char(l_effective_date,'YYYY/MON/DD'),1,4),'DD-MM-YYYY' ) Then
9410          l_date_soy := to_date('06-04-'||substr(to_char(l_effective_date,'YYYY/MON/DD'),1,4),'DD-MM-YYYY' ) ;
9411          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')  ;
9412       Else
9413          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')  ;
9414          l_date_eoy := to_date('05-04-'||substr(to_char(l_effective_date,'YYYY/MON/DD'),1,4),'DD-MM-YYYY') ;
9415       End If;
9416 
9417 hr_utility.trace(l_date_soy||'start tax');
9418 hr_utility.trace(l_date_eoy||'end tax');
9419 
9420 -- To get latest assignment action id for the assignment
9421 OPEN csr_last_action(l_asg_f_id, l_effective_start_date,
9422                        l_effective_end_date, l_date_soy,
9423                        l_prepayment_date);
9424 FETCH csr_last_action INTO  l_last_asg_action_id,
9425                               l_last_effective_date;
9426 
9427 CLOSE csr_last_action;
9428 
9429 
9430   hr_utility.trace('After csr_last_action, l_last_asg_action_id='||l_last_asg_action_id);
9431   hr_utility.trace('l_last_effective_date='||fnd_date.date_to_displaydate(l_last_effective_date));
9432   --
9433 
9434     hr_utility.set_location('Fetching person details ',10);
9435     l_archive_person := fetch_person_rec(p_assactid, l_last_effective_date,l_last_effective_date,l_archive_tab(0));
9436 
9437     hr_utility.set_location('Fetching address details ',20);
9438     l_archive_addr := fetch_address_rec(l_archive_tab(0).person_id,
9439                                         l_archive_tab(0).assignment_id,
9440                                         l_last_effective_date,
9441                                         l_archive_tab(1));
9442 
9443     hr_utility.set_location('Fetching Assignment details ',30);
9444     l_archive_asg_det1 := fetch_fps_asg_det1(l_asg_eff_start_date,
9445                                              l_last_effective_date,
9446                                              p_assactid,
9447                                              l_last_asg_action_id,
9448                                              'N',
9449                                              l_archive_tab(0),
9450                                              l_archive_tab(2), p_starter_set);
9451 
9452     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));
9453 
9454 IF l_per_paye_agg_flag1  = 'Y' THEN
9455     hr_utility.set_location('Calling fetch_first_fps_agg_asg_det2',30);
9456     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));
9457 ELSE
9458     hr_utility.set_location('Calling fetch_first_fps_asg_det2',30);
9459     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));
9460 END IF;
9461 	i                              := 3;
9462 
9463    -- OPEN csr_all_payroll_actions(l_asg_id, g_pre_pact_id, l_asg_eff_start_date, g_start_year,g_end_year);
9464 OPEN csr_last_action(l_asg_f_id, l_effective_start_date,
9465                        l_effective_end_date, l_date_soy,
9466                        l_prepayment_date);
9467       FETCH csr_last_action
9468       INTO l_last_asg_action_id,
9469         l_last_effective_date;
9470 
9471      hr_utility.trace(l_asg_f_id||' FIRST FPS ASG Inside NI calculation.');
9472 
9473 IF l_per_paye_agg_flag1  = 'Y' THEN
9474     hr_utility.set_location('Calling get_ni_bal_paye_aggr_for_asg',30);
9475       pay_gb_fps_ni_and_others.get_ni_bal_paye_aggr_for_asg(l_asg_f_id,
9476                                                        l_last_asg_action_id,
9477                                                        p_ni_a_balance,
9478                                                        p_ni_b_balance,
9479                                                        p_ni_c_balance,
9480                                                        p_ni_d_balance,
9481                                                        p_ni_e_balance,
9482                                                        p_ni_j_balance,
9483                                                        p_ni_l_balance);
9484 
9485 --NI only Aggregation
9486 ELSIF nvl(l_per_ni_agg_flag1,'N') = 'Y' and nvl(l_per_paye_agg_flag1,'N') <> 'Y' then
9487 
9488 	 --Get NI RTI reporting  assignment
9489    open csr_get_ni_rpt_asg(l_asg_f_id);
9490    fetch csr_get_ni_rpt_asg into l_ni_rpt_asg_id,l_ni_rpt_date;
9491    close csr_get_ni_rpt_asg;
9492    hr_utility.set_location('l_ni_rpt_asg_id: ' || l_ni_rpt_asg_id || ' l_ni_rpt_date: ' || l_ni_rpt_date,1000);
9493    hr_utility.set_location('NI reporting assignment for the assignment: ' || l_asg_f_id || 'is ' ||l_ni_rpt_asg_id ,1000);
9494 
9495  if  l_ni_rpt_asg_id <> l_asg_f_id then
9496  -- Non RTI reporting assignment
9497     hr_utility.set_location('Calling get_ni_balances_for_asg for non Ni RTI reporting assignment',30);
9498       pay_gb_fps_ni_and_others.get_ni_balances_for_asg(l_last_asg_action_id,
9499                                                        p_ni_a_balance,
9500                                                        p_ni_b_balance,
9501                                                        p_ni_c_balance,
9502                                                        p_ni_d_balance,
9503                                                        p_ni_e_balance,
9504                                                        p_ni_j_balance,
9505                                                        p_ni_l_balance);
9506 else
9507 --RTI Reporting Assignment
9508     hr_utility.set_location('Calling get_ni_balances_for_asg for Ni RTI reporting assignment',30);
9509 -- get the max assingment action id prcessed in this prepayment
9510 -- get the YTD values for that assignment action id
9511 open csr_get_max_asg_actid_person(l_archive_tab(0).person_id,l_first_fps_eff_date);
9512 fetch csr_get_max_asg_actid_person   INTO l_last_asg_action_id,l_last_effective_date;
9513 close csr_get_max_asg_actid_person;
9514 
9515 -- Fetching Person Level YTDs
9516 pay_gb_fps_ni_and_others.get_ni_only_bal_rti_rpt(l_last_asg_action_id,
9517                                                        p_ni_a_balance,
9518                                                        p_ni_b_balance,
9519                                                        p_ni_c_balance,
9520                                                        p_ni_d_balance,
9521                                                        p_ni_e_balance,
9522                                                        p_ni_j_balance,
9523                                                        p_ni_l_balance);
9524 
9525 END IF;
9526 
9527 ELSE
9528 -- Non Aggregation
9529 hr_utility.set_location('Calling get_ni_balances_for_asg',30);
9530       pay_gb_fps_ni_and_others.get_ni_balances_for_asg(l_last_asg_action_id,
9531                                                        p_ni_a_balance,
9532                                                        p_ni_b_balance,
9533                                                        p_ni_c_balance,
9534                                                        p_ni_d_balance,
9535                                                        p_ni_e_balance,
9536                                                        p_ni_j_balance,
9537                                                        p_ni_l_balance);
9538 
9539 END IF;
9540 
9541       IF (p_ni_a_balance.act_info1 IS NOT NULL) THEN
9542         IF already_a                =  -1 THEN
9543           i                        := i+1;
9544           already_a                := i;
9545         END IF;
9546 
9547         l_archive_tab(already_a).assignment_id        := l_archive_tab(0).assignment_id;
9548         l_archive_tab(already_a).action_info_category := 'GB_RTI_FPS_NI_DET';
9549         l_archive_tab(already_a).act_info1            := p_ni_a_balance.act_info1;
9550         l_archive_tab(already_a).act_info2            := 0;
9551         l_archive_tab(already_a).act_info3            := p_ni_a_balance.act_info3;
9552         l_archive_tab(already_a).act_info4            := p_ni_a_balance.act_info4;
9553         l_archive_tab(already_a).act_info5            := p_ni_a_balance.act_info5;
9554         l_archive_tab(already_a).act_info6            := p_ni_a_balance.act_info6;
9555         l_archive_tab(already_a).act_info7            := p_ni_a_balance.act_info7;
9556         l_archive_tab(already_a).act_info8            := p_ni_a_balance.act_info8;
9557         l_archive_tab(already_a).act_info9            := 0;
9558         l_archive_tab(already_a).act_info10           := 0;
9559 
9560       END IF;
9561       -- For Category B
9562       IF (p_ni_b_balance.act_info1 IS NOT NULL) THEN
9563         IF already_b                =  -1 THEN
9564           i                        := i+1;
9565           already_b                := i;
9566         END IF;
9567         l_archive_tab(already_b).assignment_id        := l_archive_tab(0).assignment_id;
9568         l_archive_tab(already_b).action_info_category := 'GB_RTI_FPS_NI_DET';
9569         l_archive_tab(already_b).act_info1            := p_ni_b_balance.act_info1;
9570         l_archive_tab(already_b).act_info2            := 0;
9571         l_archive_tab(already_b).act_info3            := p_ni_b_balance.act_info3;
9572         l_archive_tab(already_b).act_info4            := p_ni_b_balance.act_info4;
9573         l_archive_tab(already_b).act_info5            := p_ni_b_balance.act_info5;
9574         l_archive_tab(already_b).act_info6            := p_ni_b_balance.act_info6;
9575         l_archive_tab(already_b).act_info7            := p_ni_b_balance.act_info7;
9576         l_archive_tab(already_b).act_info8            := p_ni_b_balance.act_info8;
9577         l_archive_tab(already_b).act_info9            := 0;
9578         l_archive_tab(already_b).act_info10           := 0;
9579       END IF;
9580       -- For Category C
9581       IF (p_ni_c_balance.act_info1 IS NOT NULL) THEN
9582         IF already_c                =  -1 THEN
9583           i                        := i+1;
9584           already_c                := i;
9585         END IF;
9586         l_archive_tab(already_c).assignment_id        := l_archive_tab(0).assignment_id;
9587         l_archive_tab(already_c).action_info_category := 'GB_RTI_FPS_NI_DET';
9588         l_archive_tab(already_c).act_info1            := p_ni_c_balance.act_info1;
9589         l_archive_tab(already_c).act_info2            := 0;
9590         l_archive_tab(already_c).act_info3            := p_ni_c_balance.act_info3;
9591         l_archive_tab(already_c).act_info4            := p_ni_c_balance.act_info4;
9592         l_archive_tab(already_c).act_info5            := p_ni_c_balance.act_info5;
9593         l_archive_tab(already_c).act_info6            := p_ni_c_balance.act_info6;
9594         l_archive_tab(already_c).act_info7            := p_ni_c_balance.act_info7;
9595         l_archive_tab(already_c).act_info8            := p_ni_c_balance.act_info8;
9596         l_archive_tab(already_c).act_info9            := 0;
9597         l_archive_tab(already_c).act_info10           := 0;
9598       END IF;
9599       --For Category D
9600       IF (p_ni_d_balance.act_info1 IS NOT NULL) THEN
9601         IF already_d                =  -1 THEN
9602           i                        := i+1;
9603           already_d                := i;
9604         END IF;
9605         l_archive_tab(already_d).assignment_id        := l_archive_tab(0).assignment_id;
9606         l_archive_tab(already_d).action_info_category := 'GB_RTI_FPS_NI_DET';
9607         l_archive_tab(already_d).act_info1            := p_ni_d_balance.act_info1;
9608         l_archive_tab(already_d).act_info2            := 0;
9609         l_archive_tab(already_d).act_info3            := p_ni_d_balance.act_info3;
9610         l_archive_tab(already_d).act_info4            := p_ni_d_balance.act_info4;
9611         l_archive_tab(already_d).act_info5            := p_ni_d_balance.act_info5;
9612         l_archive_tab(already_d).act_info6            := p_ni_d_balance.act_info6;
9613         l_archive_tab(already_d).act_info7            := p_ni_d_balance.act_info7;
9614         l_archive_tab(already_d).act_info8            := p_ni_d_balance.act_info8;
9615         l_archive_tab(already_d).act_info9            := 0;
9616         l_archive_tab(already_d).act_info10           := 0;
9617       END IF;
9618       -- For Category E
9619       IF (p_ni_e_balance.act_info1 IS NOT NULL) THEN
9620         IF already_e                =  -1 THEN
9621           i                        := i+1;
9622           already_e                := i;
9623         END IF;
9624         l_archive_tab(already_e).assignment_id        := l_archive_tab(0).assignment_id;
9625         l_archive_tab(already_e).action_info_category := 'GB_RTI_FPS_NI_DET';
9626         l_archive_tab(already_e).act_info1            := p_ni_e_balance.act_info1;
9627         l_archive_tab(already_e).act_info2            := 0;
9628         l_archive_tab(already_e).act_info3            := p_ni_e_balance.act_info3;
9629         l_archive_tab(already_e).act_info4            := p_ni_e_balance.act_info4;
9630         l_archive_tab(already_e).act_info5            := p_ni_e_balance.act_info5;
9631         l_archive_tab(already_e).act_info6            := p_ni_e_balance.act_info6;
9632         l_archive_tab(already_e).act_info7            := p_ni_e_balance.act_info7;
9633         l_archive_tab(already_e).act_info8            := p_ni_e_balance.act_info8;
9634         l_archive_tab(already_e).act_info9            := 0;
9635         l_archive_tab(already_e).act_info10           := 0;
9636       END IF;
9637       -- For Category J
9638       IF (p_ni_j_balance.act_info1 IS NOT NULL) THEN
9639         IF already_j                =  -1 THEN
9640           i                        := i+1;
9641           already_j                := i;
9642         END IF;
9643         l_archive_tab(already_j).assignment_id        := l_archive_tab(0).assignment_id;
9644         l_archive_tab(already_j).action_info_category := 'GB_RTI_FPS_NI_DET';
9645         l_archive_tab(already_j).act_info1            := p_ni_a_balance.act_info1;
9646         l_archive_tab(already_j).act_info2            := 0;
9647         l_archive_tab(already_j).act_info3            := p_ni_a_balance.act_info3;
9648         l_archive_tab(already_j).act_info4            := p_ni_a_balance.act_info4;
9649         l_archive_tab(already_j).act_info5            := p_ni_a_balance.act_info5;
9650         l_archive_tab(already_j).act_info6            := p_ni_a_balance.act_info6;
9651         l_archive_tab(already_j).act_info7            := p_ni_a_balance.act_info7;
9652         l_archive_tab(already_j).act_info8            := p_ni_a_balance.act_info8;
9653         l_archive_tab(already_j).act_info9            := 0;
9654         l_archive_tab(already_j).act_info10           := 0;
9655       END IF;
9656       -- For Category L
9657       IF (p_ni_l_balance.act_info1 IS NOT NULL) THEN
9658         IF already_l                =  -1 THEN
9659           i                        := i+1;
9660           already_l                := i;
9661         END IF;
9662         l_archive_tab(already_l).assignment_id        := l_archive_tab(0).assignment_id;
9663         l_archive_tab(already_l).action_info_category := 'GB_RTI_FPS_NI_DET';
9664         l_archive_tab(already_l).act_info1            := p_ni_l_balance.act_info1;
9665         l_archive_tab(already_l).act_info2            := 0;
9666         l_archive_tab(already_l).act_info3            := p_ni_l_balance.act_info3;
9667         l_archive_tab(already_l).act_info4            := p_ni_l_balance.act_info4;
9668         l_archive_tab(already_l).act_info5            := p_ni_l_balance.act_info5;
9669         l_archive_tab(already_l).act_info6            := p_ni_l_balance.act_info6;
9670         l_archive_tab(already_l).act_info7            := p_ni_l_balance.act_info7;
9671         l_archive_tab(already_l).act_info8            := p_ni_l_balance.act_info8;
9672         l_archive_tab(already_l).act_info9            := 0;
9673         l_archive_tab(already_l).act_info10           := 0;
9674       END IF;
9675 
9676     FOR k IN 4..i
9677     LOOP
9678       IF l_archive_tab(k).act_info10 IS NOT NULL THEN
9679         ni_contrib_ytd := NVL(ni_contrib_ytd,0) + l_archive_tab(k).act_info8;
9680       END IF;
9681     END LOOP;
9682 
9683     l_archive_tab(3).act_info5  := NVL(ni_contrib_ytd,0);
9684     l_archive_tab(3).act_info24 := 0;--NVL(ni_contrib,0);
9685 
9686 -- In NI only aggregation, non RTI Reporting assignment set the NI YTDs to 0
9687 IF nvl(l_per_ni_agg_flag1,'N') = 'Y' and nvl(l_per_paye_agg_flag1,'N') <> 'Y' then
9688  if  l_ni_rpt_asg_id <> l_asg_f_id then
9689                FOR k IN 4..i
9690                LOOP
9691                      if l_archive_tab(k).act_info1 is not null then
9692                       hr_utility.trace('NON RPT act_info1' || l_archive_tab(k).act_info1);
9693                       l_archive_tab(k).act_info3 := 0;
9694                       l_archive_tab(k).act_info4 := 0;
9695                       l_archive_tab(k).act_info5 := 0;
9696                       l_archive_tab(k).act_info6 := 0;
9697                       l_archive_tab(k).act_info7 := 0;
9698                       l_archive_tab(k).act_info8 := 0;
9699                      end if;
9700                END LOOP;
9701 end if;
9702 END IF;
9703 
9704 set_address_fields(l_archive_tab(1),l_archive_tab(0),l_archive_tab(2));
9705 pay_gb_rti_fps_validate.person_address_validations(p_assactid, sysdate, l_archive_tab,l_per_addr_val_flag);
9706 pay_gb_rti_fps_validate.assignment_validations(p_assactid, sysdate, l_archive_tab,l_asg_val_flag);
9707 
9708 l_fps_ni_val_err := FALSE;
9709 l_fps_etext_ni_flag := 'Y';
9710 
9711  FOR i_count IN 4..i
9712     LOOP
9713       hr_utility.set_location ('Calling FPS NI validations', 10);
9714       pay_gb_rti_fps_validate.ni_validations(p_assactid, p_effective_date, l_archive_tab,i_count,l_fps_etext_ni_flag);
9715       IF l_fps_etext_ni_flag = 'Y'
9716       THEN
9717         l_fps_ni_val_err := TRUE;
9718       END IF;
9719 
9720 END LOOP;
9721 
9722 IF l_archive_person AND l_archive_addr AND l_archive_asg_det1 AND l_archive_asg_det2 THEN
9723       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.
9724         THEN
9725         hr_utility.set_location('Validation failed, raise error.',999);
9726         raise error_found;
9727       ELSE
9728         hr_utility.set_location('Validation successful, archive data.',999);
9729         insert_archive_row(p_assactid, p_effective_date,l_archive_tab);
9730       END IF;
9731     ELSE
9732       hr_utility.set_location('Archiving Error - assignment action id ' || p_assactid ,999);
9733       raise error_found;
9734     END IF;
9735 
9736  hr_utility.trace(l_asg_f_id||'Leaving First FPS Logic');
9737 
9738 else  -- First Fps and First Fps Prepayment else starts
9739  hr_utility.trace(l_asg_f_id||'Entering FPS Logic');
9740 -- FIRST FPS changes ends
9741 
9742   --*****************************************************************************************************
9743   -- Below code is to verify whether current payment for this assignment is already archived while
9744   -- processing any other future payments as part of running some other FPS Archive Process.
9745   -- In that case, fetch those records only and archive the same again.
9746   -- This is to make sure that always we submit the maximum amounts payed in that period.
9747   -- This ensures the correct values at HMRC even if the previous values gets overridden at HMRC.
9748   --*****************************************************************************************************
9749 
9750   OPEN csr_last_payroll_action(l_asg_id, g_pre_pact_id, l_asg_eff_start_date, g_start_year,g_end_year);
9751   FETCH csr_last_payroll_action
9752   INTO l_last_asg_action_id,
9753     l_last_effective_date;
9754   CLOSE csr_last_payroll_action;
9755 
9756   hr_utility.trace('l_last_asg_action_id: '||l_last_asg_action_id);
9757   hr_utility.trace('l_last_effective_date: '||l_last_effective_date);
9758   ---
9759 
9760   OPEN csr_get_payment_date(l_last_asg_action_id);
9761   FETCH csr_get_payment_date INTO l_payment_date;
9762   CLOSE csr_get_payment_date;
9763 
9764   hr_utility.trace('l_payment_date: '||l_payment_date);
9765   g_effective_date := l_payment_date;
9766 
9767   OPEN csr_asg(p_assactid, g_effective_date);
9768   FETCH csr_asg INTO l_asg_primary_flag, l_per_ni_agg_flag, l_per_paye_agg_flag, l_payroll_id;
9769   CLOSE csr_asg;
9770 
9771   hr_utility.trace('l_asg_primary_flag: '||l_asg_primary_flag);
9772   hr_utility.trace('l_per_paye_agg_flag: '||l_per_paye_agg_flag);
9773     hr_utility.trace('l_per_ni_agg_flag: '||l_per_ni_agg_flag);
9774   hr_utility.trace('l_payroll_id: '||l_payroll_id);
9775 
9776     hr_utility.trace('l_asg_id: '||l_asg_id);
9777     hr_utility.trace('l_asg_eff_start_date: '||l_asg_eff_start_date);
9778     hr_utility.trace('l_asg_primary_flag: '||l_asg_primary_flag);
9779     hr_utility.trace('l_per_agg_flag: '||l_per_agg_flag);
9780     hr_utility.trace('l_payroll_id: '||l_payroll_id);
9781     hr_utility.trace('g_start_year: '||g_start_year);
9782     hr_utility.trace('g_end_year: '||g_end_year);
9783     hr_utility.trace('g_pre_pact_id: '||g_pre_pact_id);
9784 
9785   --*****************************************************************************************************
9786   -- Below code processes all non-aggregated assignments
9787   --*****************************************************************************************************
9788 
9789     IF (l_per_paye_agg_flag <> 'Y' and l_per_ni_agg_flag <> 'Y') THEN
9790 
9791     hr_utility.trace('Entered Non-Aggregated Code');
9792 
9793     OPEN csr_last_payroll_action(l_asg_id, g_pre_pact_id, l_asg_eff_start_date, g_start_year,g_end_year);
9794     FETCH csr_last_payroll_action
9795     INTO l_last_asg_action_id,
9796       l_last_effective_date;
9797     CLOSE csr_last_payroll_action;
9798 
9799     OPEN csr_prepay_asg_act_details(l_asg_id, g_pre_pact_id);
9800     FETCH csr_prepay_asg_act_details
9801     INTO l_prepay_asg_action_id,
9802       l_prepay_payroll_action_id,
9803       l_prepay_effective_date;
9804     CLOSE csr_prepay_asg_act_details;
9805 
9806     hr_utility.trace('l_prepay_asg_action_id: '||l_prepay_asg_action_id);
9807     hr_utility.trace('l_prepay_payroll_action_id: '||l_prepay_payroll_action_id);
9808     hr_utility.trace('l_prepay_effective_date: '||l_prepay_effective_date);
9809 
9810     hr_utility.trace('l_last_asg_action_id: '||l_last_asg_action_id);
9811     hr_utility.trace('l_last_effective_date: '||l_last_effective_date);
9812     l_start_date  := l_asg_eff_start_date;
9813     l_end_date    := g_effective_date;
9814 
9815 ---
9816 
9817 l_bacs_payment_exists := 'N';
9818 
9819   OPEN csr_bacs_payment_exists (l_prepay_payroll_action_id,l_prepay_asg_action_id);
9820   FETCH csr_bacs_payment_exists INTO l_bacs_payment_exists;
9821   CLOSE csr_bacs_payment_exists;
9822 
9823 begin
9824   if (l_bacs_payment_exists = 'Y') then
9825   l_hash_code := PAY_GB_FPS_NI_AND_OTHERS.fetch_HASH_FPS_ASG(g_pre_pact_id, l_asg_id, l_large_bacs_payment);
9826   else
9827   l_hash_code := null;
9828   end if;
9829 exception
9830 when others then
9831 populate_run_msg(p_assactid, 'Hash error '||SQLERRM||' for the assignment ' || l_assignment_number|| '.');
9832 fnd_file.put_line (fnd_file.LOG,'Hash error '||SQLERRM||' for the assignment ' || l_assignment_number|| '.');
9833 raise_application_error(-20001,'Hash error '||SQLERRM||' for the assignment ' || l_assignment_number|| '.');
9834 end;
9835 
9836     hr_utility.trace('l_large_bacs_payment: '||l_large_bacs_payment);
9837     hr_utility.trace('l_hash_code: '||l_hash_code);
9838 
9839 ---
9840 
9841   OPEN csr_total_payment (l_prepay_asg_action_id);
9842   FETCH csr_total_payment INTO l_total_payment;
9843   CLOSE csr_total_payment;
9844 
9845     hr_utility.trace('l_total_payment: '||l_total_payment);
9846 
9847     l_non_bacs_payment := l_total_payment - l_large_bacs_payment;
9848 
9849     hr_utility.trace('l_non_bacs_payment: '||l_non_bacs_payment);
9850 ---
9851 
9852     hr_utility.set_location('Fetching person details ',10);
9853     l_archive_person := fetch_person_rec(p_assactid, l_asg_eff_start_date,g_effective_date,l_archive_tab(0));
9854     ---
9855     hr_utility.set_location('Fetching address details ',20);
9856     l_archive_addr := fetch_address_rec(l_archive_tab(0).person_id,
9857                                         l_archive_tab(0).assignment_id,
9858                                         g_effective_date,
9859                                         l_archive_tab(1));
9860     l_person_id    := l_archive_tab(0).person_id;
9861     --Fetching assignments details for FPS
9862     hr_utility.set_location('Fetching Assignment details ',30);
9863     l_archive_asg_det1 := fetch_fps_asg_det1(l_asg_eff_start_date,
9864                                              g_effective_date,
9865                                              p_assactid,
9866                                              l_last_asg_action_id,
9867                                              'Y',
9868                                              l_archive_tab(0),
9869                                              l_archive_tab(2),
9870                                              p_starter_set);
9871 
9872     hr_utility.set_location('Assignment Hash Code to archive record4',30);
9873     l_archive_tab(2).act_info28 := l_hash_code;
9874     --****************************
9875     i                              := 3;
9876     l_archive_tab(3).assignment_id := l_asg_id;
9877 
9878     OPEN csr_all_payroll_actions(l_asg_id, g_pre_pact_id, l_asg_eff_start_date, g_start_year,g_end_year);
9879     LOOP
9880       FETCH csr_all_payroll_actions
9881       INTO l_last_asg_action_id,
9882         l_last_effective_date;
9883       EXIT
9884     WHEN csr_all_payroll_actions%NOTFOUND;
9885 
9886       pay_gb_fps_ni_and_others.get_ni_balances_for_asg(l_last_asg_action_id,
9887                                                        p_ni_a_balance,
9888                                                        p_ni_b_balance,
9889                                                        p_ni_c_balance,
9890                                                        p_ni_d_balance,
9891                                                        p_ni_e_balance,
9892                                                        p_ni_j_balance,
9893                                                        p_ni_l_balance);
9894       IF (p_ni_a_balance.act_info1 IS NOT NULL) THEN
9895         IF already_a                =  -1 THEN
9896           i                        := i+1;
9897           already_a                := i;
9898         END IF;
9899 
9900         l_archive_tab(already_a).assignment_id        := l_archive_tab(0).assignment_id;
9901         l_archive_tab(already_a).action_info_category := 'GB_RTI_FPS_NI_DET';
9902         l_archive_tab(already_a).act_info1            := p_ni_a_balance.act_info1;
9903         l_archive_tab(already_a).act_info2            := NVL(l_archive_tab(already_a).act_info2,0) + nvl(p_ni_a_balance.act_info2,0);
9904         l_archive_tab(already_a).act_info3            := p_ni_a_balance.act_info3;
9905         l_archive_tab(already_a).act_info4            := p_ni_a_balance.act_info4;
9906         l_archive_tab(already_a).act_info5            := p_ni_a_balance.act_info5;
9907         l_archive_tab(already_a).act_info6            := p_ni_a_balance.act_info6;
9908         l_archive_tab(already_a).act_info7            := p_ni_a_balance.act_info7;
9909         l_archive_tab(already_a).act_info8            := p_ni_a_balance.act_info8;
9910         l_archive_tab(already_a).act_info9            := NVL(l_archive_tab(already_a).act_info9 ,0) + nvl(p_ni_a_balance.act_info9,0);
9911         l_archive_tab(already_a).act_info10           := NVL(l_archive_tab(already_a).act_info10 ,0) + nvl(p_ni_a_balance.act_info10,0);
9912 
9913       END IF;
9914       -- For Category B
9915       IF (p_ni_b_balance.act_info1 IS NOT NULL) THEN
9916         IF already_b                =  -1 THEN
9917           i                        := i+1;
9918           already_b                := i;
9919         END IF;
9920         l_archive_tab(already_b).assignment_id        := l_archive_tab(0).assignment_id;
9921         l_archive_tab(already_b).action_info_category := 'GB_RTI_FPS_NI_DET';
9922         l_archive_tab(already_b).act_info1            := p_ni_b_balance.act_info1;
9923         l_archive_tab(already_b).act_info2            := NVL(l_archive_tab(already_b).act_info2,0) + nvl(p_ni_b_balance.act_info2,0);
9924         l_archive_tab(already_b).act_info3            := p_ni_b_balance.act_info3;
9925         l_archive_tab(already_b).act_info4            := p_ni_b_balance.act_info4;
9926         l_archive_tab(already_b).act_info5            := p_ni_b_balance.act_info5;
9927         l_archive_tab(already_b).act_info6            := p_ni_b_balance.act_info6;
9928         l_archive_tab(already_b).act_info7            := p_ni_b_balance.act_info7;
9929         l_archive_tab(already_b).act_info8            := p_ni_b_balance.act_info8;
9930         l_archive_tab(already_b).act_info9           := NVL(l_archive_tab(already_b).act_info9 ,0) +nvl( p_ni_b_balance.act_info9,0);
9931         l_archive_tab(already_b).act_info10           := NVL(l_archive_tab(already_b).act_info10 ,0) + nvl(p_ni_b_balance.act_info10,0);
9932       END IF;
9933       -- For Category C
9934       IF (p_ni_c_balance.act_info1 IS NOT NULL) THEN
9935         IF already_c                =  -1 THEN
9936           i                        := i+1;
9937           already_c                := i;
9938         END IF;
9939         l_archive_tab(already_c).assignment_id        := l_archive_tab(0).assignment_id;
9940         l_archive_tab(already_c).action_info_category := 'GB_RTI_FPS_NI_DET';
9941         l_archive_tab(already_c).act_info1            := p_ni_c_balance.act_info1;
9942         l_archive_tab(already_c).act_info2            := NVL(l_archive_tab(already_c).act_info2,0) + nvl(p_ni_c_balance.act_info2,0);
9943         l_archive_tab(already_c).act_info3            := p_ni_c_balance.act_info3;
9944         l_archive_tab(already_c).act_info4            := p_ni_c_balance.act_info4;
9945         l_archive_tab(already_c).act_info5            := p_ni_c_balance.act_info5;
9946         l_archive_tab(already_c).act_info6            := p_ni_c_balance.act_info6;
9947         l_archive_tab(already_c).act_info7            := p_ni_c_balance.act_info7;
9948         l_archive_tab(already_c).act_info8            := p_ni_c_balance.act_info8;
9949         l_archive_tab(already_c).act_info9           := NVL(l_archive_tab(already_c).act_info9 ,0) + nvl(p_ni_c_balance.act_info9,0);
9950         l_archive_tab(already_c).act_info10           := NVL(l_archive_tab(already_c).act_info10 ,0) + nvl(p_ni_c_balance.act_info10,0);
9951       END IF;
9952       --For Category D
9953       IF (p_ni_d_balance.act_info1 IS NOT NULL) THEN
9954         IF already_d                =  -1 THEN
9955           i                        := i+1;
9956           already_d                := i;
9957         END IF;
9958         l_archive_tab(already_d).assignment_id        := l_archive_tab(0).assignment_id;
9959         l_archive_tab(already_d).action_info_category := 'GB_RTI_FPS_NI_DET';
9960         l_archive_tab(already_d).act_info1            := p_ni_d_balance.act_info1;
9961         l_archive_tab(already_d).act_info2            := NVL(l_archive_tab(already_d).act_info2,0) + nvl(p_ni_d_balance.act_info2,0);
9962         l_archive_tab(already_d).act_info3            := p_ni_d_balance.act_info3;
9963         l_archive_tab(already_d).act_info4            := p_ni_d_balance.act_info4;
9964         l_archive_tab(already_d).act_info5            := p_ni_d_balance.act_info5;
9965         l_archive_tab(already_d).act_info6            := p_ni_d_balance.act_info6;
9966         l_archive_tab(already_d).act_info7            := p_ni_d_balance.act_info7;
9967         l_archive_tab(already_d).act_info8            := p_ni_d_balance.act_info8;
9968         l_archive_tab(already_d).act_info9           := NVL(l_archive_tab(already_d).act_info9,0) + nvl(p_ni_d_balance.act_info9,0);
9969         l_archive_tab(already_d).act_info10           := NVL(l_archive_tab(already_d).act_info10,0) + nvl(p_ni_d_balance.act_info10,0);
9970       END IF;
9971       -- For Category E
9972       IF (p_ni_e_balance.act_info1 IS NOT NULL) THEN
9973         IF already_e                =  -1 THEN
9974           i                        := i+1;
9975           already_e                := i;
9976         END IF;
9977         l_archive_tab(already_e).assignment_id        := l_archive_tab(0).assignment_id;
9978         l_archive_tab(already_e).action_info_category := 'GB_RTI_FPS_NI_DET';
9979         l_archive_tab(already_e).act_info1            := p_ni_e_balance.act_info1;
9980         l_archive_tab(already_e).act_info2            := NVL(l_archive_tab(already_e).act_info2,0) + nvl(p_ni_e_balance.act_info2,0);
9981         l_archive_tab(already_e).act_info3            := p_ni_e_balance.act_info3;
9982         l_archive_tab(already_e).act_info4            := p_ni_e_balance.act_info4;
9983         l_archive_tab(already_e).act_info5            := p_ni_e_balance.act_info5;
9984         l_archive_tab(already_e).act_info6            := p_ni_e_balance.act_info6;
9985         l_archive_tab(already_e).act_info7            := p_ni_e_balance.act_info7;
9986         l_archive_tab(already_e).act_info8            := p_ni_e_balance.act_info8;
9987         l_archive_tab(already_e).act_info9           := NVL(l_archive_tab(already_e).act_info9 ,0) + nvl(p_ni_e_balance.act_info9,0);
9988         l_archive_tab(already_e).act_info10           := NVL(l_archive_tab(already_e).act_info10 ,0) + nvl(p_ni_e_balance.act_info10,0);
9989       END IF;
9990       -- For Category J
9991       IF (p_ni_j_balance.act_info1 IS NOT NULL) THEN
9992         IF already_j                =  -1 THEN
9993           i                        := i+1;
9994           already_j                := i;
9995         END IF;
9996         l_archive_tab(already_j).assignment_id        := l_archive_tab(0).assignment_id;
9997         l_archive_tab(already_j).action_info_category := 'GB_RTI_FPS_NI_DET';
9998         l_archive_tab(already_j).act_info1            := p_ni_j_balance.act_info1;
9999         l_archive_tab(already_j).act_info2            := NVL(l_archive_tab(already_j).act_info2,0) + nvl(p_ni_j_balance.act_info2,0);
10000         l_archive_tab(already_j).act_info3            := p_ni_j_balance.act_info3;
10001         l_archive_tab(already_j).act_info4            := p_ni_j_balance.act_info4;
10002         l_archive_tab(already_j).act_info5            := p_ni_j_balance.act_info5;
10003         l_archive_tab(already_j).act_info6            := p_ni_j_balance.act_info6;
10004         l_archive_tab(already_j).act_info7            := p_ni_j_balance.act_info7;
10005         l_archive_tab(already_j).act_info8            := p_ni_j_balance.act_info8;
10006         l_archive_tab(already_j).act_info9           := NVL(l_archive_tab(already_j).act_info9 ,0) + nvl(p_ni_j_balance.act_info9,0);
10007         l_archive_tab(already_j).act_info10           := NVL(l_archive_tab(already_j).act_info10 ,0) + nvl(p_ni_j_balance.act_info10,0);
10008       END IF;
10009       -- For Category L
10010       IF (p_ni_l_balance.act_info1 IS NOT NULL) THEN
10011         IF already_l                =  -1 THEN
10012           i                        := i+1;
10013           already_l                := i;
10014         END IF;
10015         l_archive_tab(already_l).assignment_id        := l_archive_tab(0).assignment_id;
10016         l_archive_tab(already_l).action_info_category := 'GB_RTI_FPS_NI_DET';
10017         l_archive_tab(already_l).act_info1            := p_ni_l_balance.act_info1;
10018         l_archive_tab(already_l).act_info2            := NVL(l_archive_tab(already_l).act_info2,0) + nvl(p_ni_l_balance.act_info2,0);
10019         l_archive_tab(already_l).act_info3            := p_ni_l_balance.act_info3;
10020         l_archive_tab(already_l).act_info4            := p_ni_l_balance.act_info4;
10021         l_archive_tab(already_l).act_info5            := p_ni_l_balance.act_info5;
10022         l_archive_tab(already_l).act_info6            := p_ni_l_balance.act_info6;
10023         l_archive_tab(already_l).act_info7            := p_ni_l_balance.act_info7;
10024         l_archive_tab(already_l).act_info8            := p_ni_l_balance.act_info8;
10025         l_archive_tab(already_l).act_info9           := NVL(l_archive_tab(already_l).act_info9 ,0) + nvl(p_ni_l_balance.act_info9,0);
10026         l_archive_tab(already_l).act_info10           := NVL(l_archive_tab(already_l).act_info10 ,0) + nvl(p_ni_l_balance.act_info10,0);
10027       END IF;
10028 
10029       l_archive_asg_det2 := fetch_fps_asg_det2(l_last_asg_action_id,l_asg_id,l_archive_tab(3));
10030 
10031       OPEN csr_pay_act_details(l_last_asg_action_id);
10032       FETCH csr_pay_act_details INTO l_payroll_pact_id;
10033       CLOSE csr_pay_act_details;
10034 
10035       INSERT
10036       INTO PAY_GB_FPS_DETAILS
10037         (
10038           ASSIGNMENT_ID,
10039           PERSON_ID,
10040           FPS_ASG_ACT_ID,
10041           FPS_PAY_ACT_ID,
10042           FPS_EFFECTIVE_DATE,
10043           PREPAY_ASG_ACT_ID,
10044           PREPAY_PAY_ACT_ID,
10045           PREPAY_EFFECTIVE_DATE,
10046           PAYROLL_ASG_ACT_ID,
10047           PAYROLL_PAY_ACT_ID,
10048           PAYROLL_EFFECTIVE_DATE
10049         )
10050         VALUES
10051         (
10052           l_asg_id,
10053           l_person_id,
10054           p_assactid,
10055           g_payroll_action_id,
10056           g_fps_effective_date,
10057           l_prepay_asg_action_id,
10058           l_prepay_payroll_action_id,
10059           l_prepay_effective_date,
10060           l_last_asg_action_id,
10061           l_payroll_pact_id,
10062           l_last_effective_date
10063         );
10064 
10065     END LOOP;
10066 
10067     CLOSE csr_all_payroll_actions;
10068 
10069     FOR k IN 4..i
10070     LOOP
10071       IF l_archive_tab(k).act_info10 IS NOT NULL THEN
10072         ni_contrib  := NVL(ni_contrib,0) + l_archive_tab(k).act_info10;
10073         ni_contrib_ytd := NVL(ni_contrib_ytd,0) + l_archive_tab(k).act_info8;
10074       END IF;
10075     END LOOP;
10076 
10077     hr_utility.trace( 'value of i :' || i);
10078     hr_utility.trace('Assignment id : ' || l_asg_id);
10079     hr_utility.trace('ni_contrib : ' || ni_contrib);
10080     hr_utility.trace('l_archive_tab(3).act_info8 : ' || l_archive_tab(3).act_info8 );
10081     hr_utility.trace('l_archive_tab(3).act_info9 : ' || l_archive_tab(3).act_info9 );
10082 
10083     -- Derive the fields 58B and 59
10084     -- 58B
10085     l_archive_tab(3).act_info8 := NVL(l_archive_tab(3).act_info8,0) -- Prev holds Total Deductions
10086                                   - NVL(l_archive_tab(3).act_info16,0) -- Student Loan
10087                                   - NVL(l_archive_tab(3).act_info17,0) -- PAYE
10088                                   - NVL(ni_contrib,0) -- NI
10089                                   + l_non_bacs_payment;
10090    -- 59
10091     l_archive_tab(3).act_info9 := NVL(l_archive_tab(3).act_info9,0)
10092                                   - NVL(l_archive_tab(3).act_info16,0) -- Student Loan
10093                                   - NVL(l_archive_tab(3).act_info17,0) -- PAYE
10094                                   - NVL(ni_contrib,0) -- NI
10095                                   + NVL(l_archive_tab(3).act_info10,0); -- sum of all 'Benefits Taxed Through payroll%'
10096     l_archive_tab(3).act_info5  := NVL(ni_contrib_ytd,0);
10097     l_archive_tab(3).act_info24 := NVL(ni_contrib,0);
10098 --    l_archive_tab(3).act_info22 := nvl(l_archive_tab(3).act_info22,0) + nvl(g_assp_total,0);
10099 --    l_archive_tab(3).act_info20 := nvl(l_archive_tab(3).act_info20,0) + nvl(g_spp_total,0);
10100 
10101 /*  g_ssp_total := 0;
10102   g_sap_total := 0;
10103   g_spp_total := 0;
10104   g_assp_total := 0;
10105   g_smp_total := 0;
10106 */
10107     set_address_fields(l_archive_tab(1),l_archive_tab(0),l_archive_tab(2));
10108 
10109     -- Validating fetched Person,Address,Assignment details for FPS
10110     hr_utility.set_location('Calling Person Address validations', 10);
10111    pay_gb_rti_fps_validate.person_address_validations(p_assactid, p_effective_date, l_archive_tab,l_per_addr_val_flag);
10112     hr_utility.trace('person address' ||l_per_addr_val_flag);
10113 
10114     IF l_per_addr_val_flag  = 'Y' THEN -- If validation fails
10115       l_personaddr_val_err := TRUE;
10116     END IF;
10117 
10118     hr_utility.set_location('Calling FPS validations', 10);
10119     pay_gb_rti_fps_validate.assignment_validations(p_assactid, p_effective_date, l_archive_tab,l_fps_etext_asg_flag);
10120 
10121     IF l_fps_etext_asg_flag = 'Y' THEN -- If validation fails
10122       l_fps_val_err        := TRUE;
10123     END IF;
10124 
10125     hr_utility.set_location('After Calling FPS validations', 10);
10126     -- LOOP through all NIs
10127     FOR i_count IN 4..i
10128     LOOP
10129 
10130       hr_utility.set_location ('Calling FPS NI validations', 10);
10131 
10132       pay_gb_rti_fps_validate.ni_validations(p_assactid, p_effective_date, l_archive_tab,i_count,l_fps_etext_ni_flag);
10133 
10134       IF l_fps_etext_ni_flag = 'Y' THEN -- If validation fails
10135         l_fps_ni_val_err    := TRUE;
10136       END IF;
10137 
10138     END LOOP;
10139 
10140     IF l_archive_person AND l_archive_addr AND l_archive_asg_det1 AND l_archive_asg_det2 THEN
10141       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.
10142         THEN
10143         hr_utility.set_location('Validation failed, raise error.',999);
10144         fnd_file.put_line(fnd_file.LOG,'Not Archiving');
10145         raise error_found;
10146       ELSE
10147         hr_utility.set_location('Validation successful, archive data.',999);
10148         insert_archive_row(p_assactid, p_effective_date,l_archive_tab);
10149 
10150 /* Moved this code to Action creation
10151         -- lock the pre payments action id with current fps assignment action id
10152          begin
10153         hr_nonrun_asact.insint(p_assactid, l_prepay_asg_action_id);
10154          exception
10155          when dup_val_on_index then
10156            hr_utility.set_location(sqlcode || '-' || sqlerrm,60);
10157            hr_utility.set_location('Skip locking for retry.Locking action id-'||p_assactid || ' Locked action id-' || l_prepay_asg_action_id,60);
10158          end;*/
10159       END IF;
10160     ELSE
10161 	  hr_utility.set_location('Archiving Error - assignment action id ' || p_assactid ,999);
10162       raise error_found;
10163     END IF;
10164 
10165 --
10166 
10167 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
10168 
10169      hr_utility.trace('PAYE Agg code g_payroll_action_id ' || g_payroll_action_id);
10170   --*****************************************************************************************************
10171   -- Below code processes all aggregated assignments
10172   --*****************************************************************************************************
10173 
10174      OPEN csr_aggr_last_payroll_action(l_person_id, g_pre_pact_id, l_asg_eff_start_date, g_start_year,g_end_year);
10175      FETCH csr_aggr_last_payroll_action
10176      INTO l_last_asgact_id,
10177          l_last_eff_date;
10178      CLOSE csr_aggr_last_payroll_action;
10179 
10180      hr_utility.trace('l_last_asgact_id:' || l_last_asgact_id);
10181      hr_utility.trace('l_last_eff_date:' || l_last_eff_date);
10182 
10183      OPEN csr_last_aggr_asg(l_last_asgact_id);
10184      FETCH csr_last_aggr_asg
10185      INTO l_last_asg_id;
10186      CLOSE csr_last_aggr_asg;
10187 
10188      hr_utility.trace('l_last_asg_id:' || l_last_asg_id);
10189 
10190 -- should skip the aggregation logic for other assignments
10191 select  max(paa.assignment_action_id) into l_asg_action_id
10192 from
10193     pay_assignment_actions paa,
10194     per_all_assignments_f paaf
10195 where
10196  paaf.person_id = l_person_id
10197 and paaf.assignment_id = paa.assignment_id
10198 and paa.payroll_action_id = g_payroll_action_id
10199 and paa.assignment_id = l_last_asg_id;
10200       hr_utility.trace('l_asg_action_id:' || l_asg_action_id || '  p_assactid: '|| p_assactid );
10201 
10202  if l_asg_action_id =  p_assactid then
10203 
10204     hr_utility.trace('Entered Aggregated Code');
10205     l_prepay_master_counter := 1;
10206 
10207     OPEN csr_aggr_last_payroll_action(l_person_id, g_pre_pact_id, l_asg_eff_start_date, g_start_year,g_end_year);
10208     FETCH csr_aggr_last_payroll_action
10209     INTO l_last_asg_action_id,
10210          l_last_effective_date;
10211 -- get the flag to check whether the current request is retry.
10212 open csr_is_retry_request;
10213 fetch csr_is_retry_request into l_retry_req_flag;
10214 close csr_is_retry_request;
10215 
10216     hr_utility.trace('l_last_asg_action_id: ' ||l_last_asg_action_id);
10217     hr_utility.trace('l_last_effective_date: ' ||l_last_effective_date);
10218     CLOSE csr_aggr_last_payroll_action;
10219 
10220   OPEN csr_get_payment_date(l_last_asg_action_id);
10221   FETCH csr_get_payment_date INTO l_payment_date;
10222   CLOSE csr_get_payment_date;
10223 
10224   hr_utility.trace('l_payment_date: '||l_payment_date);
10225   g_effective_date := l_payment_date;
10226 
10227     OPEN csr_prepay_asg_act_details(l_asg_id, g_pre_pact_id);
10228     FETCH csr_prepay_asg_act_details
10229     INTO l_prepay_asg_action_id,
10230       l_prepay_payroll_action_id,
10231       l_prepay_effective_date;
10232     CLOSE csr_prepay_asg_act_details;
10233 
10234     hr_utility.trace('l_prepay_asg_action_id: '||l_prepay_asg_action_id);
10235     hr_utility.trace('l_prepay_payroll_action_id: '||l_prepay_payroll_action_id);
10236     hr_utility.trace('l_prepay_effective_date: '||l_prepay_effective_date);
10237 
10238     hr_utility.trace('l_last_asg_action_id: '||l_last_asg_action_id);
10239     hr_utility.trace('l_last_effective_date: '||l_last_effective_date);
10240 
10241 --Fix for the bug 16409794 starts here
10242         OPEN csr_total_payment_new(l_prepay_asg_action_id);
10243         FETCH csr_total_payment_new INTO l_total_payment;
10244         CLOSE csr_total_payment_new;
10245         hr_utility.trace('l_total_payment: '||l_total_payment);
10246 
10247 if (l_total_payment <> 0) then
10248 --Fix for the bug 16409794 ends here
10249 
10250     l_start_date  := l_asg_eff_start_date;
10251     l_end_date    := g_effective_date;
10252 
10253     hr_utility.set_location('Fetching person details ',10);
10254     l_archive_person := fetch_person_rec(p_assactid, l_asg_eff_start_date,g_effective_date,l_archive_tab(0));
10255     ---
10256     hr_utility.set_location('Fetching address details ',20);
10257     l_archive_addr := fetch_address_rec(l_archive_tab(0).person_id,
10258                                         l_archive_tab(0).assignment_id,
10259                                         g_effective_date,
10260                                         l_archive_tab(1));
10261     l_person_id    := l_archive_tab(0).person_id;
10262 
10263 
10264     --****************************
10265       OPEN csr_pay_act_details(l_last_asg_action_id);
10266       FETCH csr_pay_act_details INTO l_payroll_pact_id;
10267       CLOSE csr_pay_act_details;
10268 
10269 
10270 
10271     hr_utility.trace('l_asg_id: ' ||l_asg_id);
10272     hr_utility.trace('l_person_id: ' ||l_person_id);
10273     hr_utility.trace('g_pre_pact_id: ' ||g_pre_pact_id);
10274     hr_utility.trace('l_asg_eff_start_date: ' ||l_asg_eff_start_date);
10275     hr_utility.trace('g_start_year: ' ||g_start_year);
10276     hr_utility.trace('g_end_year: ' ||g_end_year);
10277 
10278     l_tab_counter := 0;
10279     l_tab_proc_counter := 0;
10280     l_tab_not_proc_counter := 0;
10281     l_archive_det1_counter := 0;
10282     l_archive_det2_counter := 0;
10283     /*l_archive_det1_counter_local := 0;
10284     l_archive_det2_counter_local := 0;*/
10285 --    l_single_payroll_run_exists := 'N';
10286 
10287   i_1 := -1;
10288   i_2 := -1;
10289     hr_utility.trace('g_first_fps_run_date: ' ||g_first_fps_run_date);
10290     hr_utility.trace('l_first_fps_eff_date: ' ||l_first_fps_eff_date);
10291 
10292 l_single_payroll_run_exists := 1;
10293     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);
10294       FETCH csr_aggr_all_payroll_actions
10295       INTO l_cur_asg_action_id,
10296            l_cur_last_effective_date;
10297 
10298 --Raising Exception for the current assignment
10299 if (csr_aggr_all_payroll_actions%NOTFOUND) then
10300 	hr_utility.trace('Current Assignment is already processed in an earlier FPS run. Hence, not processing now.');
10301 	populate_run_msg(p_assactid, 'Current Assignment '|| l_assignment_number ||' is already processed in an earlier FPS run. Hence, not processing now.','W');
10302 	fnd_file.put_line (fnd_file.LOG,'Current Assignment '|| l_assignment_number ||' is already processed in an earlier FPS run. Hence, not processing now.');
10303     raise already_processed;
10304 end if;
10305 --
10306     hr_utility.trace('l_single_payroll_run_exists start point: ' ||l_single_payroll_run_exists);
10307     hr_utility.trace('l_cur_asg_action_id ' ||l_cur_asg_action_id);
10308 
10309     l_payroll_asg_acts(l_tab_counter) := l_cur_asg_action_id;
10310   begin
10311    select ppa.payroll_action_id   into l_oth_min_pre_pay_id from
10312   pay_action_interlocks pai,
10313   pay_payroll_actions ppa,
10314  pay_assignment_actions paa
10315  where
10316    pai.locked_action_id = l_cur_asg_action_id
10317    and pai.locking_action_id = paa.assignment_action_id
10318    and ppa.payroll_action_id = paa.payroll_action_id
10319    and ppa.action_type in ('P','U');
10320 exception
10321 when others then
10322     hr_utility.trace('error : ' || sqlerrm);
10323     hr_utility.trace('Pre pay is not run for the l_cur_asg_action_id :-' ||l_cur_asg_action_id);
10324     l_oth_min_pre_pay_id := g_pre_pact_id;
10325 end;
10326     hr_utility.trace('l_oth_min_pre_pay_id: ' ||l_oth_min_pre_pay_id);
10327 
10328     hr_utility.trace('l_tab_counter: ' ||l_tab_counter);
10329     hr_utility.trace('l_payroll_asg_acts(l_tab_counter): ' ||l_payroll_asg_acts(l_tab_counter));
10330     l_tab_counter := l_tab_counter + 1;
10331 
10332     l_proc_in_prepay(l_tab_proc_counter) := l_cur_asg_action_id;
10333     hr_utility.trace('l_tab_proc_counter: ' ||l_tab_proc_counter);
10334     hr_utility.trace('l_proc_in_prepay(l_tab_proc_counter): ' ||l_proc_in_prepay(l_tab_proc_counter));
10335     l_tab_proc_counter := l_tab_proc_counter + 1;
10336 
10337     OPEN csr_aggr_min_act_id(l_person_id, l_oth_min_pre_pay_id,g_effective_date);
10338       FETCH csr_aggr_min_act_id
10339       INTO l_asg_act_count,
10340            l_aggr_min_act_id;
10341     CLOSE csr_aggr_min_act_id;
10342 
10343     hr_utility.trace('l_asg_act_count: ' ||l_asg_act_count);
10344     hr_utility.trace('l_aggr_min_act_id: ' ||l_aggr_min_act_id);
10345 
10346 --if (l_asg_act_count > 1) then
10347 if (l_asg_act_count > 1) and (l_cur_asg_action_id > l_aggr_min_act_id) then
10348 l_cur_asg_action_id := l_aggr_min_act_id;
10349     hr_utility.trace('l_cur_asg_action_id: ' ||l_cur_asg_action_id);
10350 end if;
10351 
10352     hr_utility.trace('l_cur_asg_action_id: ' ||l_cur_asg_action_id);
10353     hr_utility.trace('l_cur_last_effective_date: ' ||l_cur_last_effective_date);
10354 loop
10355     hr_utility.trace('Entered Main Loop ');
10356       EXIT WHEN csr_aggr_all_payroll_actions%NOTFOUND;
10357 --prepayment run check starts here
10358     hr_utility.trace('Before csr_aggr_sequence_id');
10359     OPEN csr_chk_prepayment_run(l_cur_asg_action_id);
10360       FETCH csr_chk_prepayment_run
10361       INTO l_chk_prepayment_run;
10362     hr_utility.trace('l_chk_prepayment_run: ' ||l_chk_prepayment_run);
10363     CLOSE csr_chk_prepayment_run;
10364 
10365 if(l_chk_prepayment_run is null or l_chk_prepayment_run = 0)then
10366 --raise prepayment error
10367 
10368   OPEN csr_asg_num(l_cur_asg_action_id, l_cur_last_effective_date);
10369   FETCH csr_asg_num INTO l_assignment_number;
10370   CLOSE csr_asg_num;
10371 
10372 hr_utility.set_location('Pre payment is not run for asg action id: '|| l_cur_asg_action_id,999);
10373 populate_run_msg(p_assactid, ' Pre payment is not run for the assignment '||l_assignment_number||' (asg action id: '|| l_cur_asg_action_id||')');
10374 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||')');
10375         raise error_found;
10376 
10377 --prepayment run check ends here
10378 else
10379 
10380     hr_utility.trace('Before csr_aggr_sequence_id');
10381     OPEN csr_aggr_sequence_id(l_cur_asg_action_id);
10382       FETCH csr_aggr_sequence_id
10383       INTO l_aggr_sequence_id;
10384 
10385     hr_utility.trace('l_aggr_sequence_id: ' ||l_aggr_sequence_id);
10386     CLOSE csr_aggr_sequence_id;
10387 
10388 if (l_asg_act_count > 1) then
10389 if (l_prepay_master_counter = 1) then
10390     OPEN csr_aggr_master_id(l_cur_asg_action_id);
10391       FETCH csr_aggr_master_id
10392       INTO l_payroll_master_asgactid;
10393     CLOSE csr_aggr_master_id;
10394 else
10395     l_payroll_master_asgactid := l_payroll_master_asgactid;
10396 end if;
10397     l_prepay_master_counter := l_prepay_master_counter + 1;
10398 end if;
10399 
10400     hr_utility.trace('Before csr_aggr_locking_asg_act_id');
10401 
10402     OPEN csr_aggr_locking_asg_act_id(l_person_id, l_aggr_sequence_id);
10403       FETCH csr_aggr_locking_asg_act_id
10404       INTO l_aggr_locking_asg_act_id;
10405     hr_utility.trace('l_aggr_locking_asg_act_id: ' ||l_aggr_locking_asg_act_id);
10406 
10407     l_payroll_asg_acts(l_tab_counter) := l_cur_asg_action_id;
10408     hr_utility.trace('l_tab_counter: ' ||l_tab_counter);
10409     hr_utility.trace('l_payroll_asg_acts(l_tab_counter): ' ||l_payroll_asg_acts(l_tab_counter));
10410     l_tab_counter := l_tab_counter + 1;
10411 
10412     hr_utility.trace('l_prepay_asg_action_id: ' ||l_prepay_asg_action_id);
10413     hr_utility.trace('l_cur_asg_action_id: ' ||l_cur_asg_action_id);
10414 
10415     OPEN csr_get_asg_id(l_cur_asg_action_id);
10416       FETCH csr_get_asg_id
10417       INTO l_cur_asg_id;
10418     CLOSE csr_get_asg_id;
10419 
10420 l_processed_in_prepayment := 'N';
10421     hr_utility.trace('l_processed_in_prepayment: ' ||l_processed_in_prepayment);
10422     hr_utility.trace('l_prepay_asg_action_id: ' ||l_prepay_asg_action_id);
10423     hr_utility.trace('l_cur_asg_action_id: ' ||l_cur_asg_action_id);
10424     hr_utility.trace('l_payroll_master_asgactid: ' ||l_payroll_master_asgactid);
10425 
10426     OPEN csr_processed_in_prepayment(l_prepay_asg_action_id, l_cur_asg_action_id, l_payroll_master_asgactid);
10427       FETCH csr_processed_in_prepayment
10428       INTO l_processed_in_prepayment;
10429 
10430     hr_utility.trace('l_processed_in_prepayment: ' ||l_processed_in_prepayment);
10431 
10432 --Fix for the bug 16409794 starts here
10433   l_fps_action_exists := 'N';
10434    OPEN csr_fps_action_exists(l_cur_asg_id,g_payroll_action_id);
10435       FETCH csr_fps_action_exists
10436       INTO l_fps_action_exists;
10437     CLOSE csr_fps_action_exists;
10438 
10439 if (l_fps_action_exists = 'Y') then
10440 --Fix for the bug 16409794 ends here
10441 
10442   -- get the assignment action id for the current assginment id.
10443   select paa.assignment_action_id into l_assact_id from  pay_assignment_actions paa
10444   where paa.payroll_action_id = g_payroll_action_id
10445   and paa.assignment_id = l_cur_asg_id;
10446 
10447 if (nvl(l_processed_in_prepayment, 'N') <> 'Y') then
10448 
10449     hr_utility.trace('l_processed_in_prepayment: ' ||l_processed_in_prepayment);
10450     l_not_proc_in_prepay(l_tab_not_proc_counter) := l_cur_asg_action_id;
10451     hr_utility.trace('l_tab_not_proc_counter: ' ||l_tab_not_proc_counter);
10452     hr_utility.trace('l_not_proc_in_prepay(l_tab_not_proc_counter): ' ||l_not_proc_in_prepay(l_tab_not_proc_counter));
10453     l_tab_not_proc_counter := l_tab_not_proc_counter + 1;
10454 
10455     --Fetching assignments details for FPS
10456     hr_utility.set_location('Fetching Assignment details ',30);
10457     hr_utility.trace('l_asg_eff_start_date: ' ||l_asg_eff_start_date);
10458     hr_utility.trace('g_effective_date: ' ||g_effective_date);
10459     hr_utility.trace('p_assactid: ' ||p_assactid);
10460     hr_utility.trace('l_last_asg_action_id: ' ||l_last_asg_action_id);
10461     --l_archive_det1_counter := l_archive_det1_counter + 1;
10462     --l_archive_det2_counter := l_archive_det2_counter + 1;
10463 
10464         open chk_processed_in_prepay(l_cur_asg_action_id);
10465         fetch chk_processed_in_prepay into l_cur_asg_pre_pay_act_id;
10466         close chk_processed_in_prepay;
10467 
10468         open csr_prepay_payrol_act(l_cur_asg_pre_pay_act_id);
10469         fetch csr_prepay_payrol_act into l_cur_prepay_payroll_action_id;
10470         close csr_prepay_payrol_act;
10471 
10472         hr_utility.set_location('l_cur_asg_action_id: '||l_cur_asg_action_id,999);
10473         hr_utility.set_location('l_cur_asg_pre_pay_act_id: '||l_cur_asg_pre_pay_act_id,999);
10474         hr_utility.set_location('l_cur_prepay_payroll_action_id: '||l_cur_prepay_payroll_action_id,999);
10475         hr_utility.set_location('l_person_id: '||l_person_id,999);
10476         hr_utility.set_location('g_effective_date: '||g_effective_date,999);
10477 
10478         l_bacs_payment_exists := 'N';
10479 
10480         OPEN csr_bacs_payment_exists (l_cur_prepay_payroll_action_id,l_cur_asg_pre_pay_act_id);
10481         FETCH csr_bacs_payment_exists INTO l_bacs_payment_exists;
10482         CLOSE csr_bacs_payment_exists;
10483 
10484         hr_utility.set_location('l_bacs_payment_exists: '||l_bacs_payment_exists,999);
10485         hr_utility.trace('Fetching HASH Code Inside if');
10486         l_hash_code := NULL;
10487 
10488 /*
10489 Below we are calling PAY_GB_FPS_NI_AND_OTHERS.FPS_BACS_PREPROCESS for any other prepayment.
10490 This may be needed incase if the Prepayment is run prior to 30 days from sysdate.
10491 All Prepayments ran within 30 days are already processed in Range_Cursor to generate the HASH CODE.
10492 */
10493 
10494         BEGIN
10495              IF (l_bacs_payment_exists = 'Y') THEN
10496                    hr_utility.trace('Before calling PAY_GB_FPS_NI_AND_OTHERS.FPS_BACS_PREPROCESS from Archive');
10497                    l_dummy := PAY_GB_FPS_NI_AND_OTHERS.FPS_BACS_PREPROCESS(l_cur_prepay_payroll_action_id, 'FPS');
10498                    hr_utility.trace('After calling PAY_GB_FPS_NI_AND_OTHERS.FPS_BACS_PREPROCESS from Archive');
10499                    --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);
10500                    l_hash_code := pay_gb_fps_ni_and_others.fetch_hash_fps_per (l_cur_prepay_payroll_action_id, l_person_id,l_large_bacs_payment,l_bacs_large_asg_id);
10501              ELSE
10502                    l_hash_code := NULL;
10503              END IF;
10504         EXCEPTION
10505         WHEN others THEN
10506              populate_run_msg (p_assactid,'Hash error1 '|| sqlerrm|| ' for the assignment '|| l_assignment_number|| '.');
10507              fnd_file.put_line (fnd_file.log,'Hash error1 '|| sqlerrm|| ' for the assignment '|| l_assignment_number|| '.');
10508              raise_application_error(-20001,'Hash error1 '||SQLERRM||' for the assignment ' || l_assignment_number|| '.');
10509         END;
10510 
10511              hr_utility.trace('l_large_bacs_payment: '||l_large_bacs_payment);
10512              hr_utility.trace('l_hash_code: '||l_hash_code);
10513 ---
10514 
10515         OPEN csr_total_payment (l_cur_asg_pre_pay_act_id);
10516         FETCH csr_total_payment INTO l_total_payment;
10517         CLOSE csr_total_payment;
10518 
10519              hr_utility.trace('l_total_payment: '||l_total_payment);
10520              hr_utility.trace('l_bacs_large_asg_id: '||l_bacs_large_asg_id);
10521              hr_utility.trace('l_cur_asg_id: '||l_cur_asg_id);
10522 
10523              if l_bacs_large_asg_id <> l_cur_asg_id then
10524                     l_large_bacs_payment := 0;
10525              end if;
10526              l_non_bacs_payment := l_total_payment - l_large_bacs_payment;
10527              hr_utility.trace('l_non_bacs_payment: '||l_non_bacs_payment);
10528 
10529     l_archive_asg_det1 := fetch_fps_aggr_asg_det1(l_asg_eff_start_date,
10530                                              g_effective_date,
10531                                              p_assactid,
10532                                              l_cur_asg_action_id,
10533 					                                   'Y',
10534                                              l_archive_tab(0),
10535                                              l_archive_tab_det1(l_archive_det1_counter));
10536 
10537     l_archive_tab_det1(l_archive_det1_counter).assignment_id := l_cur_asg_id;
10538     l_archive_tab_det1(l_archive_det1_counter).action_info_category := 'GB_RTI_FPS_ASG_DET1';
10539     hr_utility.trace('l_archive_det1_counter: ' ||l_archive_det1_counter);
10540     hr_utility.trace('l_archive_det2_counter: ' ||l_archive_det2_counter);
10541 
10542     hr_utility.set_location('Assignment Hash Code to archive record5',30);
10543     l_archive_tab_det1(l_archive_det1_counter).act_info28 := l_hash_code;
10544     -- fetch assignment details 2 related to balances.
10545     l_archive_tab_det2(l_archive_det2_counter).assignment_id        := l_cur_asg_id;
10546     l_archive_tab_det2(l_archive_det2_counter).action_info_category := 'GB_RTI_FPS_ASG_DET2';
10547     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));
10548 
10549 if (l_archive_asg_det1 and l_archive_asg_det2) then
10550 
10551 select count(*)
10552 into l_rec_count
10553 from PAY_GB_FPS_DETAILS
10554 where ASSIGNMENT_ID = l_asg_id
10555 and PERSON_ID = l_person_id
10556 and PAYROLL_ASG_ACT_ID = l_cur_asg_action_id;
10557 
10558 if l_rec_count = 0 then
10559         hr_utility.set_location('1 inserting',999);
10560         hr_utility.set_location('1 l_cur_asg_id: '||l_cur_asg_id,999);
10561         hr_utility.set_location('1 p_assactid: '||p_assactid,999);
10562         hr_utility.set_location('1 l_cur_asg_action_id: '||l_cur_asg_action_id,999);
10563         hr_utility.set_location('1 inserting',999);
10564 
10565         OPEN csr_aggr_max_act_id(l_person_id, l_cur_prepay_payroll_action_id,g_effective_date);
10566              FETCH csr_aggr_max_act_id
10567              INTO l_asact_count_prepayed,
10568                   l_aggr_max_act_id;
10569         CLOSE csr_aggr_max_act_id;
10570 
10571         hr_utility.trace('l_asact_count_prepayed: ' ||l_asact_count_prepayed);
10572         hr_utility.trace('l_aggr_max_act_id: ' ||l_aggr_max_act_id);
10573 
10574         l_report_det1_det2_flag := 'N';
10575 
10576         if (l_cur_asg_action_id = l_aggr_max_act_id) then
10577             l_report_det1_det2_flag := 'Y';
10578             hr_utility.trace('l_report_det1_det2_flag: ' ||l_report_det1_det2_flag);
10579         end if;
10580 
10581 -- archive the pre pay asg act id
10582     l_archive_tab_det1(l_archive_det1_counter).act_info27 := 'Y';
10583     l_archive_tab_det1(l_archive_det1_counter).act_info29 := l_cur_prepay_payroll_action_id||','||l_cur_asg_action_id;
10584     l_archive_tab_det2(l_archive_det2_counter).act_info29 := l_cur_prepay_payroll_action_id||','||l_cur_asg_action_id;
10585     l_archive_tab_det1(l_archive_det1_counter).act_info30 := l_report_det1_det2_flag;
10586     l_archive_tab_det2(l_archive_det2_counter).act_info30 := l_report_det1_det2_flag;
10587 
10588 /* -- lock the pre payments action id with current fps assignment action id
10589         begin
10590         hr_nonrun_asact.insint(p_assactid, l_cur_asg_pre_pay_act_id);
10591         exception
10592         when dup_val_on_index then
10593            hr_utility.set_location(sqlcode || '-' || sqlerrm,60);
10594            hr_utility.set_location('Skip locking for retry.Locking action id-'||p_assactid || ' Locked action id-' || l_cur_asg_pre_pay_act_id,60);
10595         end;
10596 */
10597       INSERT
10598       INTO PAY_GB_FPS_DETAILS
10599         (
10600           ASSIGNMENT_ID,
10601           PERSON_ID,
10602           FPS_ASG_ACT_ID,
10603           FPS_PAY_ACT_ID,
10604           FPS_EFFECTIVE_DATE,
10605           PREPAY_ASG_ACT_ID,
10606           PREPAY_PAY_ACT_ID,
10607           PREPAY_EFFECTIVE_DATE,
10608           PAYROLL_ASG_ACT_ID,
10609           PAYROLL_PAY_ACT_ID,
10610           PAYROLL_EFFECTIVE_DATE
10611         )
10612         VALUES
10613         (
10614           l_cur_asg_id,
10615           l_person_id,
10616           l_assact_id,
10617           g_payroll_action_id,
10618           g_fps_effective_date,
10619           l_cur_asg_pre_pay_act_id,
10620           l_cur_prepay_payroll_action_id,
10621           l_prepay_effective_date,
10622           l_cur_asg_action_id,
10623           l_payroll_pact_id,
10624           l_last_effective_date
10625         );
10626 
10627 end if;
10628 end if;
10629         l_ni_emp_run := 0;
10630 -- for ni balances
10631  pay_gb_fps_ni_and_others.get_ni_bal_paye_aggr_for_asg(l_cur_asg_id,
10632                                                        l_cur_asg_action_id,
10633                                                        p_ni_a_balance,
10634                                                        p_ni_b_balance,
10635                                                        p_ni_c_balance,
10636                                                        p_ni_d_balance,
10637                                                        p_ni_e_balance,
10638                                                        p_ni_j_balance,
10639                                                        p_ni_l_balance);
10640       IF (p_ni_a_balance.act_info1 IS NOT NULL and p_ni_a_balance.assignment_id = l_cur_asg_id) THEN
10641         IF already_a                =  -1 THEN
10642           i_1                        := i_1 +1;
10643           already_a                := i_1;
10644         END IF;
10645 
10646         l_archive_tab_ni_det(already_a).assignment_id        := l_cur_asg_id;
10647         l_archive_tab_ni_det(already_a).action_info_category := 'GB_RTI_FPS_NI_DET';
10648         l_archive_tab_ni_det(already_a).act_info1            := p_ni_a_balance.act_info1;
10649         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;
10650         l_archive_tab_ni_det(already_a).act_info3            := p_ni_a_balance.act_info3;
10651         l_archive_tab_ni_det(already_a).act_info4            := p_ni_a_balance.act_info4;
10652         l_archive_tab_ni_det(already_a).act_info5            := p_ni_a_balance.act_info5;
10653         l_archive_tab_ni_det(already_a).act_info6            := p_ni_a_balance.act_info6;
10654         l_archive_tab_ni_det(already_a).act_info7            := p_ni_a_balance.act_info7;
10655         l_archive_tab_ni_det(already_a).act_info8            := p_ni_a_balance.act_info8;
10656         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;
10657         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;
10658         l_ni_emp_run                                            := l_ni_emp_run + p_ni_a_balance.act_info10;
10659         l_archive_tab_ni_det(already_a).act_info11           := l_cur_prepay_payroll_action_id||','||l_aggr_max_act_id;
10660 
10661       END IF;
10662       -- For Category B
10663       IF (p_ni_b_balance.act_info1 IS NOT NULL and p_ni_b_balance.assignment_id = l_cur_asg_id) THEN
10664         IF already_b                =  -1 THEN
10665           i_1                        := i_1 +1;
10666           already_b                := i_1;
10667         END IF;
10668         l_archive_tab_ni_det(already_b).assignment_id        := l_cur_asg_id;
10669         l_archive_tab_ni_det(already_b).action_info_category := 'GB_RTI_FPS_NI_DET';
10670         l_archive_tab_ni_det(already_b).act_info1            := p_ni_b_balance.act_info1;
10671         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;
10672         l_archive_tab_ni_det(already_b).act_info3            := p_ni_b_balance.act_info3;
10673         l_archive_tab_ni_det(already_b).act_info4            := p_ni_b_balance.act_info4;
10674         l_archive_tab_ni_det(already_b).act_info5            := p_ni_b_balance.act_info5;
10675         l_archive_tab_ni_det(already_b).act_info6            := p_ni_b_balance.act_info6;
10676         l_archive_tab_ni_det(already_b).act_info7            := p_ni_b_balance.act_info7;
10677         l_archive_tab_ni_det(already_b).act_info8            := p_ni_b_balance.act_info8;
10678         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;
10679         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;
10680 		l_ni_emp_run                                            := l_ni_emp_run + p_ni_b_balance.act_info10;
10681         l_archive_tab_ni_det(already_b).act_info11           := l_cur_prepay_payroll_action_id||','||l_aggr_max_act_id;
10682       END IF;
10683       -- For Category C
10684       IF (p_ni_c_balance.act_info1 IS NOT NULL and p_ni_c_balance.assignment_id = l_cur_asg_id) THEN
10685         IF already_c                =  -1 THEN
10686           i_1                        := i_1 +1;
10687           already_c                := i_1;
10688         END IF;
10689         l_archive_tab_ni_det(already_c).assignment_id        := l_cur_asg_id;
10690         l_archive_tab_ni_det(already_c).action_info_category := 'GB_RTI_FPS_NI_DET';
10691         l_archive_tab_ni_det(already_c).act_info1            := p_ni_c_balance.act_info1;
10692         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;
10693         l_archive_tab_ni_det(already_c).act_info3            := p_ni_c_balance.act_info3;
10694         l_archive_tab_ni_det(already_c).act_info4            := p_ni_c_balance.act_info4;
10695         l_archive_tab_ni_det(already_c).act_info5            := p_ni_c_balance.act_info5;
10696         l_archive_tab_ni_det(already_c).act_info6            := p_ni_c_balance.act_info6;
10697         l_archive_tab_ni_det(already_c).act_info7            := p_ni_c_balance.act_info7;
10698         l_archive_tab_ni_det(already_c).act_info8            := p_ni_c_balance.act_info8;
10699         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;
10700         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;
10701 		l_ni_emp_run                                            := l_ni_emp_run + p_ni_c_balance.act_info10;
10702         l_archive_tab_ni_det(already_c).act_info11           := l_cur_prepay_payroll_action_id||','||l_aggr_max_act_id;
10703       END IF;
10704       --For Category D
10705       IF (p_ni_d_balance.act_info1 IS NOT NULL and p_ni_d_balance.assignment_id = l_cur_asg_id) THEN
10706         IF already_d                =  -1 THEN
10707           i_1                        := i_1 +1;
10708           already_d                := i_1;
10709         END IF;
10710         l_archive_tab_ni_det(already_d).assignment_id        := l_cur_asg_id;
10711         l_archive_tab_ni_det(already_d).action_info_category := 'GB_RTI_FPS_NI_DET';
10712         l_archive_tab_ni_det(already_d).act_info1            := p_ni_d_balance.act_info1;
10713         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;
10714         l_archive_tab_ni_det(already_d).act_info3            := p_ni_d_balance.act_info3;
10715         l_archive_tab_ni_det(already_d).act_info4            := p_ni_d_balance.act_info4;
10716         l_archive_tab_ni_det(already_d).act_info5            := p_ni_d_balance.act_info5;
10717         l_archive_tab_ni_det(already_d).act_info6            := p_ni_d_balance.act_info6;
10718         l_archive_tab_ni_det(already_d).act_info7            := p_ni_d_balance.act_info7;
10719         l_archive_tab_ni_det(already_d).act_info8            := p_ni_d_balance.act_info8;
10720         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;
10721         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;
10722 		l_ni_emp_run                                            := l_ni_emp_run + p_ni_d_balance.act_info10;
10723         l_archive_tab_ni_det(already_d).act_info11           := l_cur_prepay_payroll_action_id||','||l_aggr_max_act_id;
10724       END IF;
10725       -- For Category E
10726       IF (p_ni_e_balance.act_info1 IS NOT NULL and p_ni_e_balance.assignment_id = l_cur_asg_id) THEN
10727         IF already_e                =  -1 THEN
10728           i_1                        := i_1 +1;
10729           already_e                := i_1;
10730         END IF;
10731         l_archive_tab_ni_det(already_e).assignment_id        := l_cur_asg_id;
10732         l_archive_tab_ni_det(already_e).action_info_category := 'GB_RTI_FPS_NI_DET';
10733         l_archive_tab_ni_det(already_e).act_info1            := p_ni_e_balance.act_info1;
10734         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;
10735         l_archive_tab_ni_det(already_e).act_info3            := p_ni_e_balance.act_info3;
10736         l_archive_tab_ni_det(already_e).act_info4            := p_ni_e_balance.act_info4;
10737         l_archive_tab_ni_det(already_e).act_info5            := p_ni_e_balance.act_info5;
10738         l_archive_tab_ni_det(already_e).act_info6            := p_ni_e_balance.act_info6;
10739         l_archive_tab_ni_det(already_e).act_info7            := p_ni_e_balance.act_info7;
10740         l_archive_tab_ni_det(already_e).act_info8            := p_ni_e_balance.act_info8;
10741         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;
10742         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;
10743 		l_ni_emp_run                                            := l_ni_emp_run + p_ni_e_balance.act_info10;
10744         l_archive_tab_ni_det(already_e).act_info11           := l_cur_prepay_payroll_action_id||','||l_aggr_max_act_id;
10745       END IF;
10746       -- For Category J
10747       IF (p_ni_j_balance.act_info1 IS NOT NULL and p_ni_j_balance.assignment_id = l_cur_asg_id) THEN
10748         IF already_j                =  -1 THEN
10749           i_1                        := i_1+1;
10750           already_j                := i_1;
10751         END IF;
10752         l_archive_tab_ni_det(already_j).assignment_id        := l_cur_asg_id;
10753         l_archive_tab_ni_det(already_j).action_info_category := 'GB_RTI_FPS_NI_DET';
10754         l_archive_tab_ni_det(already_j).act_info1            := p_ni_j_balance.act_info1;
10755         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;
10756         l_archive_tab_ni_det(already_j).act_info3            := p_ni_j_balance.act_info3;
10757         l_archive_tab_ni_det(already_j).act_info4            := p_ni_j_balance.act_info4;
10758         l_archive_tab_ni_det(already_j).act_info5            := p_ni_j_balance.act_info5;
10759         l_archive_tab_ni_det(already_j).act_info6            := p_ni_j_balance.act_info6;
10760         l_archive_tab_ni_det(already_j).act_info7            := p_ni_j_balance.act_info7;
10761         l_archive_tab_ni_det(already_j).act_info8            := p_ni_j_balance.act_info8;
10762         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;
10763         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;
10764 		l_ni_emp_run                                            := l_ni_emp_run + p_ni_j_balance.act_info10;
10765         l_archive_tab_ni_det(already_j).act_info11           := l_cur_prepay_payroll_action_id||','||l_aggr_max_act_id;
10766       END IF;
10767       -- For Category L
10768       IF (p_ni_l_balance.act_info1 IS NOT NULL and p_ni_l_balance.assignment_id = l_cur_asg_id) THEN
10769         IF already_l                =  -1 THEN
10770           i_1                        := i_1+1;
10771           already_l                := i_1;
10772         END IF;
10773         l_archive_tab_ni_det(already_l).assignment_id        := l_cur_asg_id;
10774         l_archive_tab_ni_det(already_l).action_info_category := 'GB_RTI_FPS_NI_DET';
10775         l_archive_tab_ni_det(already_l).act_info1            := p_ni_l_balance.act_info1;
10776         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;
10777         l_archive_tab_ni_det(already_l).act_info3            := p_ni_l_balance.act_info3;
10778         l_archive_tab_ni_det(already_l).act_info4            := p_ni_l_balance.act_info4;
10779         l_archive_tab_ni_det(already_l).act_info5            := p_ni_l_balance.act_info5;
10780         l_archive_tab_ni_det(already_l).act_info6            := p_ni_l_balance.act_info6;
10781         l_archive_tab_ni_det(already_l).act_info7            := p_ni_l_balance.act_info7;
10782         l_archive_tab_ni_det(already_l).act_info8            := p_ni_l_balance.act_info8;
10783         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;
10784         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;
10785 		l_ni_emp_run                                            := l_ni_emp_run + p_ni_l_balance.act_info10;
10786         l_archive_tab_ni_det(already_l).act_info11           := l_cur_prepay_payroll_action_id||','||l_aggr_max_act_id;
10787       END IF;
10788 --end ni balances
10789      ni_contrib_1 := 0;
10790      ni_contrib_ytd_1 := 0;
10791      FOR k IN 0..i_1
10792      LOOP
10793        hr_utility.trace('k_paye_agg:' || k);
10794        IF l_archive_tab_ni_det(k).act_info10 IS NOT NULL THEN
10795          ni_contrib_1  := NVL(ni_contrib_1,0) + l_archive_tab_ni_det(k).act_info10;
10796          ni_contrib_ytd_1 := NVL(ni_contrib_ytd_1,0) + l_archive_tab_ni_det(k).act_info8;
10797        END IF;
10798      END LOOP;
10799 
10800     hr_utility.trace('l_ni_emp_run' ||l_ni_emp_run);
10801     hr_utility.trace('l_archive_tab_det2(l_archive_det2_counter).act_info8' ||l_archive_tab_det2(l_archive_det2_counter).act_info8);
10802     hr_utility.trace('l_archive_tab_det2(l_archive_det2_counter).act_info16' ||l_archive_tab_det2(l_archive_det2_counter).act_info16);
10803     hr_utility.trace('l_archive_tab_det2(l_archive_det2_counter).act_info17' ||l_archive_tab_det2(l_archive_det2_counter).act_info17);
10804     hr_utility.trace('l_non_bacs_payment' ||l_non_bacs_payment);
10805 
10806     -- Derive the fields 58B and 59
10807     -- 58B
10808     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
10809                                   - NVL(l_archive_tab_det2(l_archive_det2_counter).act_info16,0) -- Student Loan
10810                                   - NVL(l_archive_tab_det2(l_archive_det2_counter).act_info17,0) -- PAYE
10811                                   - NVL(l_ni_emp_run,0) -- NI
10812                                   + l_non_bacs_payment;
10813    -- 59
10814     l_archive_tab_det2(l_archive_det2_counter).act_info9 := NVL(l_archive_tab_det2(l_archive_det2_counter).act_info9,0)
10815                                   - NVL(l_archive_tab_det2(l_archive_det2_counter).act_info16,0) -- Student Loan
10816                                   - NVL(l_archive_tab_det2(l_archive_det2_counter).act_info17,0) -- PAYE
10817                                   - NVL(l_ni_emp_run,0) -- NI
10818                                   + NVL(l_archive_tab_det2(l_archive_det2_counter).act_info10,0); -- sum of all 'Benefits Taxed Through payroll%'
10819     l_archive_tab_det2(l_archive_det2_counter).act_info5  := NVL(ni_contrib_ytd_1,0);
10820     l_archive_tab_det2(l_archive_det2_counter).act_info24 := NVL(ni_contrib_1,0);
10821 
10822 
10823 --
10824 --Validations needs to be performed for each of the assignments separately
10825     hr_utility.set_location('In PAYE Aggr if Before Calling FPS validations', 10);
10826     pay_gb_rti_fps_validate.assignment_validations_aggr(p_assactid,
10827                                                    p_effective_date,
10828                                                    l_archive_tab,
10829                                                    l_archive_tab_det1(l_archive_det1_counter),
10830                                                    l_archive_tab_det2(l_archive_det2_counter),
10831                                                    l_fps_etext_asg_temp_flag);
10832 
10833     hr_utility.trace('l_fps_etext_asg_temp_flag' ||l_fps_etext_asg_temp_flag);
10834 
10835     IF (l_fps_etext_asg_temp_flag = 'Y' or l_fps_val_err = TRUE) THEN -- If validation fails
10836       l_fps_val_err        := TRUE;
10837     END IF;
10838 
10839     hr_utility.set_location('In PAYE Aggr if After Calling FPS validations', 10);
10840 
10841    --
10842     l_archive_det1_counter := l_archive_det1_counter +1;
10843     l_archive_det2_counter := l_archive_det2_counter + 1;
10844 
10845 --
10846 else -- this else is for if (nvl(l_processed_in_prepayment, 'N') <> 'Y') then
10847 
10848     hr_utility.trace('Entered Else part of l_processed_in_prepayment: ' ||l_processed_in_prepayment);
10849 
10850 l_asg_act_processed_earlier := 0;
10851 
10852     hr_utility.trace('l_person_id: ' ||l_person_id);
10853     hr_utility.trace('l_cur_asg_id: ' ||l_cur_asg_id);
10854     hr_utility.trace('l_cur_asg_action_id: ' ||l_cur_asg_action_id);
10855     hr_utility.trace('l_asg_id: ' ||l_asg_id);
10856 
10857     OPEN csr_asg_act_processed_earlier(l_person_id, l_cur_asg_id, l_cur_asg_action_id);
10858       FETCH csr_asg_act_processed_earlier
10859       INTO l_asg_act_processed_earlier;
10860     CLOSE csr_asg_act_processed_earlier;
10861 
10862     hr_utility.trace('l_asg_act_processed_earlier: ' ||l_asg_act_processed_earlier);
10863 
10864 if (nvl(l_asg_act_processed_earlier,-1) <> 0 and l_retry_req_flag is not null ) then
10865     hr_utility.trace('Current Assignment is already processed in an earlier FPS run. Hence, not processing now.');
10866     l_archive_flag := 'N';
10867 populate_run_msg(p_assactid, ' Assignment ' || l_assignment_number|| ' is already processed.','W');
10868 fnd_file.put_line (fnd_file.LOG,' Assignment ' || l_assignment_number|| ' is already processed.');
10869 
10870 else --this else is for nvl(l_asg_act_processed_earlier,-1) <> 0
10871 
10872     hr_utility.trace('l_processed_in_prepayment: ' ||l_processed_in_prepayment);
10873     l_proc_in_prepay(l_tab_proc_counter) := l_cur_asg_action_id;
10874     hr_utility.trace('l_tab_proc_counter: ' ||l_tab_proc_counter);
10875     hr_utility.trace('l_proc_in_prepay(l_tab_proc_counter): ' ||l_proc_in_prepay(l_tab_proc_counter));
10876     l_tab_proc_counter := l_tab_proc_counter + 1;
10877 
10878 --
10879     --Fetching assignments details for FPS
10880     hr_utility.set_location('Fetching Assignment details ',30);
10881 
10882         open chk_processed_in_prepay(l_cur_asg_action_id);
10883         fetch chk_processed_in_prepay into l_cur_asg_pre_pay_act_id;
10884         close chk_processed_in_prepay;
10885 
10886         hr_utility.trace('l_cur_asg_action_id: ' ||l_cur_asg_action_id);
10887         hr_utility.trace('l_cur_asg_pre_pay_act_id: ' ||l_cur_asg_pre_pay_act_id);
10888 
10889         l_bacs_payment_exists := 'N';
10890 
10891         OPEN csr_bacs_payment_exists (l_prepay_payroll_action_id,l_cur_asg_pre_pay_act_id);
10892         FETCH csr_bacs_payment_exists INTO l_bacs_payment_exists;
10893         CLOSE csr_bacs_payment_exists;
10894         hr_utility.trace('l_bacs_payment_exists: ' ||l_bacs_payment_exists);
10895         hr_utility.trace('Fetching HASH Code Inside else');
10896         l_hash_code := NULL;
10897         BEGIN
10898         IF (l_bacs_payment_exists = 'Y') THEN
10899         --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);
10900 	      l_hash_code := pay_gb_fps_ni_and_others.fetch_hash_fps_per (g_pre_pact_id, l_person_id,l_large_bacs_payment,l_bacs_large_asg_id);
10901         ELSE
10902         l_hash_code := NULL;
10903         END IF;
10904         EXCEPTION
10905         WHEN others THEN
10906         populate_run_msg (p_assactid,'Hash error '|| sqlerrm|| ' for the assignment '|| l_assignment_number|| '.');
10907         fnd_file.put_line (fnd_file.log,'Hash error '|| sqlerrm|| ' for the assignment '|| l_assignment_number|| '.');
10908         raise_application_error(-20001,'Hash error '||SQLERRM||' for the assignment ' || l_assignment_number|| '.');
10909         END;
10910 
10911         hr_utility.trace('l_large_bacs_payment: '||l_large_bacs_payment);
10912         hr_utility.trace('l_hash_code: '||l_hash_code);
10913 ---
10914         OPEN csr_total_payment (l_cur_asg_pre_pay_act_id);
10915         FETCH csr_total_payment INTO l_total_payment;
10916         CLOSE csr_total_payment;
10917 
10918         hr_utility.trace('l_total_payment: '||l_total_payment);
10919         hr_utility.trace('l_bacs_large_asg_id: '||l_bacs_large_asg_id);
10920         hr_utility.trace('l_cur_asg_id: '||l_cur_asg_id);
10921 
10922              if l_bacs_large_asg_id <> l_cur_asg_id then
10923                     l_large_bacs_payment := 0;
10924              end if;
10925         l_non_bacs_payment := l_total_payment - l_large_bacs_payment;
10926         hr_utility.trace('l_non_bacs_payment: '||l_non_bacs_payment);
10927 
10928     hr_utility.trace('l_asg_eff_start_date: ' ||l_asg_eff_start_date);
10929     hr_utility.trace('g_effective_date: ' ||g_effective_date);
10930     hr_utility.trace('p_assactid: ' ||p_assactid);
10931     hr_utility.trace('l_last_asg_action_id: ' ||l_last_asg_action_id);
10932 	--l_archive_det1_counter := l_archive_det1_counter + 1;
10933     --l_archive_det2_counter := l_archive_det2_counter + 1;
10934     l_archive_asg_det1 := fetch_fps_aggr_asg_det1(l_asg_eff_start_date,
10935                                              g_effective_date,
10936                                              p_assactid,
10937                                              l_cur_asg_action_id,
10938 					                                   'Y',
10939                                              l_archive_tab(0),
10940                                              l_archive_tab_det1(l_archive_det1_counter));
10941     l_archive_tab_det1(l_archive_det1_counter).assignment_id := l_cur_asg_id;
10942 
10943     hr_utility.trace('l_archive_det1_counter: ' ||l_archive_det1_counter);
10944     hr_utility.set_location('Assignment Hash Coode to archive record1',30);
10945     l_archive_tab_det1(l_archive_det1_counter).act_info28 := l_hash_code;
10946     l_archive_tab_det2(l_archive_det2_counter).action_info_category := 'GB_RTI_FPS_ASG_DET2';
10947     l_archive_tab_det2(l_archive_det2_counter).assignment_id := l_cur_asg_id;
10948 
10949     hr_utility.trace('test l_archive_det2_counter: ' ||l_archive_det2_counter);
10950 
10951  --   l_archive_asg_det2 := fetch_fps_asg_det2(p_assactid,l_asg_id,l_archive_tab_det2_local(l_archive_det2_counter_local));
10952     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));
10953     hr_utility.trace('2test l_archive_det2_counter: ' ||l_archive_det2_counter);
10954 
10955 if (l_archive_asg_det1 and l_archive_asg_det2) then
10956 
10957 select count(*)
10958 into l_rec_count
10959 from PAY_GB_FPS_DETAILS
10960 where ASSIGNMENT_ID = l_cur_asg_id
10961 and PERSON_ID = l_person_id
10962 and PAYROLL_ASG_ACT_ID = l_cur_asg_action_id;
10963 
10964 if l_rec_count = 0 then
10965         hr_utility.set_location('1 inserting',999);
10966         hr_utility.set_location('1 l_cur_asg_id: '||l_cur_asg_id,999);
10967         hr_utility.set_location('1 p_assactid: '||p_assactid,999);
10968         hr_utility.set_location('1 l_cur_asg_action_id: '||l_cur_asg_action_id,999);
10969         hr_utility.set_location('1 inserting',999);
10970 
10971 -- archive the pre pay asg act id
10972 --    l_archive_tab_det1(l_archive_det1_counter).act_info29 := l_prepay_payroll_action_id;
10973 --    l_archive_tab_det2(l_archive_det2_counter).act_info29 := l_prepay_payroll_action_id;
10974 
10975     l_archive_tab_det1(l_archive_det1_counter).act_info29 := l_prepay_payroll_action_id||','||l_cur_asg_action_id;
10976     l_archive_tab_det2(l_archive_det2_counter).act_info29 := l_prepay_payroll_action_id||','||l_cur_asg_action_id;
10977 
10978         hr_utility.set_location('l_person_id: '||l_person_id,999);
10979         hr_utility.set_location('l_prepay_payroll_action_id: '||l_prepay_payroll_action_id,999);
10980         hr_utility.set_location('g_effective_date: '||g_effective_date,999);
10981 
10982         OPEN csr_aggr_max_act_id(l_person_id, l_prepay_payroll_action_id,g_effective_date);
10983         FETCH csr_aggr_max_act_id
10984         INTO l_asact_count_prepayed,
10985               l_aggr_max_act_id;
10986 	CLOSE csr_aggr_max_act_id;
10987 
10988         hr_utility.trace('l_asact_count_prepayed: ' ||l_asact_count_prepayed);
10989         hr_utility.trace('l_aggr_max_act_id: ' ||l_aggr_max_act_id);
10990 
10991         l_report_det1_det2_flag := 'N';
10992 
10993         if (l_cur_asg_action_id = l_aggr_max_act_id) then
10994             l_report_det1_det2_flag := 'Y';
10995             hr_utility.trace('l_report_det1_det2_flag: ' ||l_report_det1_det2_flag);
10996         end if;
10997 
10998 	l_archive_tab_det1(l_archive_det1_counter).act_info27 := 'Y';
10999         l_archive_tab_det1(l_archive_det1_counter).act_info30 := l_report_det1_det2_flag;
11000         l_archive_tab_det2(l_archive_det2_counter).act_info30 := l_report_det1_det2_flag;
11001 
11002 /* -- lock the pre payments action id with current fps assignment action id
11003         begin
11004         hr_nonrun_asact.insint(p_assactid, l_cur_asg_pre_pay_act_id);
11005         exception
11006         when dup_val_on_index then
11007            hr_utility.set_location(sqlcode || '-' || sqlerrm,60);
11008            hr_utility.set_location('Skip locking for retry.Locking action id-'||p_assactid || ' Locked action id-' || l_cur_asg_pre_pay_act_id,60);
11009         end;
11010 */
11011       INSERT
11012       INTO PAY_GB_FPS_DETAILS
11013         (
11014           ASSIGNMENT_ID,
11015           PERSON_ID,
11016           FPS_ASG_ACT_ID,
11017           FPS_PAY_ACT_ID,
11018           FPS_EFFECTIVE_DATE,
11019           PREPAY_ASG_ACT_ID,
11020           PREPAY_PAY_ACT_ID,
11021           PREPAY_EFFECTIVE_DATE,
11022           PAYROLL_ASG_ACT_ID,
11023           PAYROLL_PAY_ACT_ID,
11024           PAYROLL_EFFECTIVE_DATE
11025         )
11026         VALUES
11027         (
11028           l_cur_asg_id,
11029           l_person_id,
11030           l_assact_id,
11031           g_payroll_action_id,
11032           g_fps_effective_date,
11033           l_cur_asg_pre_pay_act_id,
11034           l_prepay_payroll_action_id,
11035           l_prepay_effective_date,
11036           l_cur_asg_action_id,
11037           l_payroll_pact_id,
11038           l_last_effective_date
11039         );
11040 
11041 end if;
11042 end if;
11043 l_ni_emp_run := 0;
11044 -- for ni balances
11045  pay_gb_fps_ni_and_others.get_ni_bal_paye_aggr_for_asg(l_cur_asg_id,
11046                                                        l_cur_asg_action_id,
11047                                                        p_ni_a_balance,
11048                                                        p_ni_b_balance,
11049                                                        p_ni_c_balance,
11050                                                        p_ni_d_balance,
11051                                                        p_ni_e_balance,
11052                                                        p_ni_j_balance,
11053                                                        p_ni_l_balance);
11054       IF (p_ni_a_balance.act_info1 IS NOT NULL and p_ni_a_balance.assignment_id = l_cur_asg_id) THEN
11055         IF already_a1                =  -1 THEN
11056           i_2                        := i_2 +1;
11057           already_a1                := i_2;
11058         END IF;
11059 
11060         l_archive_tab_ni_det_1(already_a1).assignment_id        := l_cur_asg_id;
11061         l_archive_tab_ni_det_1(already_a1).action_info_category := 'GB_RTI_FPS_NI_DET';
11062         l_archive_tab_ni_det_1(already_a1).act_info1            := p_ni_a_balance.act_info1;
11063         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;
11064         l_archive_tab_ni_det_1(already_a1).act_info3            := p_ni_a_balance.act_info3;
11065         l_archive_tab_ni_det_1(already_a1).act_info4            := p_ni_a_balance.act_info4;
11066         l_archive_tab_ni_det_1(already_a1).act_info5            := p_ni_a_balance.act_info5;
11067         l_archive_tab_ni_det_1(already_a1).act_info6            := p_ni_a_balance.act_info6;
11068         l_archive_tab_ni_det_1(already_a1).act_info7            := p_ni_a_balance.act_info7;
11069         l_archive_tab_ni_det_1(already_a1).act_info8            := p_ni_a_balance.act_info8;
11070         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;
11071         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;
11072 		l_ni_emp_run                                            := l_ni_emp_run + p_ni_a_balance.act_info10;
11073         l_archive_tab_ni_det_1(already_a1).act_info11           := l_prepay_payroll_action_id||','||l_aggr_max_act_id;
11074 
11075       END IF;
11076       -- For Category B
11077       IF (p_ni_b_balance.act_info1 IS NOT NULL and p_ni_b_balance.assignment_id = l_cur_asg_id) THEN
11078         IF already_b1                =  -1 THEN
11079           i_2                        := i_2 +1;
11080           already_b1                := i_2;
11081         END IF;
11082         l_archive_tab_ni_det_1(already_b1).assignment_id        := l_cur_asg_id;
11083         l_archive_tab_ni_det_1(already_b1).action_info_category := 'GB_RTI_FPS_NI_DET';
11084         l_archive_tab_ni_det_1(already_b1).act_info1            := p_ni_b_balance.act_info1;
11085         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;
11086         l_archive_tab_ni_det_1(already_b1).act_info3            := p_ni_b_balance.act_info3;
11087         l_archive_tab_ni_det_1(already_b1).act_info4            := p_ni_b_balance.act_info4;
11088         l_archive_tab_ni_det_1(already_b1).act_info5            := p_ni_b_balance.act_info5;
11089         l_archive_tab_ni_det_1(already_b1).act_info6            := p_ni_b_balance.act_info6;
11090         l_archive_tab_ni_det_1(already_b1).act_info7            := p_ni_b_balance.act_info7;
11091         l_archive_tab_ni_det_1(already_b1).act_info8            := p_ni_b_balance.act_info8;
11092         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;
11093         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;
11094 		l_ni_emp_run                                            := l_ni_emp_run + p_ni_b_balance.act_info10;
11095         l_archive_tab_ni_det_1(already_b1).act_info11           := l_prepay_payroll_action_id||','||l_aggr_max_act_id;
11096       END IF;
11097       -- For Category C
11098       IF (p_ni_c_balance.act_info1 IS NOT NULL and p_ni_c_balance.assignment_id = l_cur_asg_id) THEN
11099         IF already_c1                =  -1 THEN
11100           i_2                        := i_2 +1;
11101           already_c1                := i_2;
11102         END IF;
11103         l_archive_tab_ni_det_1(already_c1).assignment_id        := l_cur_asg_id;
11104         l_archive_tab_ni_det_1(already_c1).action_info_category := 'GB_RTI_FPS_NI_DET';
11105         l_archive_tab_ni_det_1(already_c1).act_info1            := p_ni_c_balance.act_info1;
11106         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;
11107         l_archive_tab_ni_det_1(already_c1).act_info3            := p_ni_c_balance.act_info3;
11108         l_archive_tab_ni_det_1(already_c1).act_info4            := p_ni_c_balance.act_info4;
11109         l_archive_tab_ni_det_1(already_c1).act_info5            := p_ni_c_balance.act_info5;
11110         l_archive_tab_ni_det_1(already_c1).act_info6            := p_ni_c_balance.act_info6;
11111         l_archive_tab_ni_det_1(already_c1).act_info7            := p_ni_c_balance.act_info7;
11112         l_archive_tab_ni_det_1(already_c1).act_info8            := p_ni_c_balance.act_info8;
11113         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;
11114         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;
11115 		l_ni_emp_run                                            := l_ni_emp_run + p_ni_c_balance.act_info10;
11116         l_archive_tab_ni_det_1(already_c1).act_info11           := l_prepay_payroll_action_id||','||l_aggr_max_act_id;
11117       END IF;
11118       --For Category D
11119 
11120 --      IF (p_ni_d_balance.act_info1 IS NOT NULL) THEN
11121       IF (p_ni_d_balance.act_info1 IS NOT NULL and p_ni_d_balance.assignment_id = l_cur_asg_id) THEN
11122         IF already_d1                =  -1 THEN
11123           i_2                        := i_2 +1;
11124           already_d1                := i_2;
11125         END IF;
11126         l_archive_tab_ni_det_1(already_d1).assignment_id        := l_cur_asg_id;
11127         l_archive_tab_ni_det_1(already_d1).action_info_category := 'GB_RTI_FPS_NI_DET';
11128         l_archive_tab_ni_det_1(already_d1).act_info1            := p_ni_d_balance.act_info1;
11129         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;
11130         l_archive_tab_ni_det_1(already_d1).act_info3            := p_ni_d_balance.act_info3;
11131         l_archive_tab_ni_det_1(already_d1).act_info4            := p_ni_d_balance.act_info4;
11132         l_archive_tab_ni_det_1(already_d1).act_info5            := p_ni_d_balance.act_info5;
11133         l_archive_tab_ni_det_1(already_d1).act_info6            := p_ni_d_balance.act_info6;
11134         l_archive_tab_ni_det_1(already_d1).act_info7            := p_ni_d_balance.act_info7;
11135         l_archive_tab_ni_det_1(already_d1).act_info8            := p_ni_d_balance.act_info8;
11136         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;
11137         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;
11138 		l_ni_emp_run                                            := l_ni_emp_run + p_ni_d_balance.act_info10;
11139         l_archive_tab_ni_det_1(already_d1).act_info11           := l_prepay_payroll_action_id||','||l_aggr_max_act_id;
11140       END IF;
11141       -- For Category E
11142       IF (p_ni_e_balance.act_info1 IS NOT NULL and p_ni_e_balance.assignment_id = l_cur_asg_id) THEN
11143         IF already_e1                =  -1 THEN
11144           i_2                        := i_2 +1;
11145           already_e1                := i_2;
11146         END IF;
11147         l_archive_tab_ni_det_1(already_e1).assignment_id        := l_cur_asg_id;
11148         l_archive_tab_ni_det_1(already_e1).action_info_category := 'GB_RTI_FPS_NI_DET';
11149         l_archive_tab_ni_det_1(already_e1).act_info1            := p_ni_e_balance.act_info1;
11150         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;
11151         l_archive_tab_ni_det_1(already_e1).act_info3            := p_ni_e_balance.act_info3;
11152         l_archive_tab_ni_det_1(already_e1).act_info4            := p_ni_e_balance.act_info4;
11153         l_archive_tab_ni_det_1(already_e1).act_info5            := p_ni_e_balance.act_info5;
11154         l_archive_tab_ni_det_1(already_e1).act_info6            := p_ni_e_balance.act_info6;
11155         l_archive_tab_ni_det_1(already_e1).act_info7            := p_ni_e_balance.act_info7;
11156         l_archive_tab_ni_det_1(already_e1).act_info8            := p_ni_e_balance.act_info8;
11157         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;
11158         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;
11159 		l_ni_emp_run                                            := l_ni_emp_run + p_ni_e_balance.act_info10;
11160         l_archive_tab_ni_det_1(already_e1).act_info11           := l_prepay_payroll_action_id||','||l_aggr_max_act_id;
11161       END IF;
11162       -- For Category J
11163       IF (p_ni_j_balance.act_info1 IS NOT NULL and p_ni_j_balance.assignment_id = l_cur_asg_id) THEN
11164         IF already_j1                =  -1 THEN
11165           i_2                        := i_2+1;
11166           already_j1                := i_2;
11167         END IF;
11168         l_archive_tab_ni_det_1(already_j1).assignment_id        := l_cur_asg_id;
11169         l_archive_tab_ni_det_1(already_j1).action_info_category := 'GB_RTI_FPS_NI_DET';
11170         l_archive_tab_ni_det_1(already_j1).act_info1            := p_ni_j_balance.act_info1;
11171         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;
11172         l_archive_tab_ni_det_1(already_j1).act_info3            := p_ni_j_balance.act_info3;
11173         l_archive_tab_ni_det_1(already_j1).act_info4            := p_ni_j_balance.act_info4;
11174         l_archive_tab_ni_det_1(already_j1).act_info5            := p_ni_j_balance.act_info5;
11175         l_archive_tab_ni_det_1(already_j1).act_info6            := p_ni_j_balance.act_info6;
11176         l_archive_tab_ni_det_1(already_j1).act_info7            := p_ni_j_balance.act_info7;
11177         l_archive_tab_ni_det_1(already_j1).act_info8            := p_ni_j_balance.act_info8;
11178         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;
11179         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;
11180 		l_ni_emp_run                                            := l_ni_emp_run + p_ni_j_balance.act_info10;
11181         l_archive_tab_ni_det_1(already_j1).act_info11           := l_prepay_payroll_action_id||','||l_aggr_max_act_id;
11182       END IF;
11183       -- For Category L
11184       IF (p_ni_l_balance.act_info1 IS NOT NULL and p_ni_l_balance.assignment_id = l_cur_asg_id) THEN
11185         IF already_l1                =  -1 THEN
11186           i_2                        := i_2+1;
11187           already_l1                := i_2;
11188         END IF;
11189         l_archive_tab_ni_det_1(already_l1).assignment_id        := l_cur_asg_id;
11190         l_archive_tab_ni_det_1(already_l1).action_info_category := 'GB_RTI_FPS_NI_DET';
11191         l_archive_tab_ni_det_1(already_l1).act_info1            := p_ni_l_balance.act_info1;
11192         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;
11193         l_archive_tab_ni_det_1(already_l1).act_info3            := p_ni_l_balance.act_info3;
11194         l_archive_tab_ni_det_1(already_l1).act_info4            := p_ni_l_balance.act_info4;
11195         l_archive_tab_ni_det_1(already_l1).act_info5            := p_ni_l_balance.act_info5;
11196         l_archive_tab_ni_det_1(already_l1).act_info6            := p_ni_l_balance.act_info6;
11197         l_archive_tab_ni_det_1(already_l1).act_info7            := p_ni_l_balance.act_info7;
11198         l_archive_tab_ni_det_1(already_l1).act_info8            := p_ni_l_balance.act_info8;
11199         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;
11200         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;
11201         l_ni_emp_run                                            := l_ni_emp_run + p_ni_l_balance.act_info10;
11202         l_archive_tab_ni_det_1(already_l1).act_info11           := l_prepay_payroll_action_id||','||l_aggr_max_act_id;
11203       END IF;
11204 --end ni balances
11205  ni_contrib_2 := 0;
11206  ni_contrib_ytd_2 := 0;
11207    FOR k IN 0..i_2
11208     LOOP
11209       hr_utility.trace('k_paye_agg:' || k);
11210       IF l_archive_tab_ni_det_1(k).act_info10 IS NOT NULL THEN
11211         ni_contrib_2  := NVL(ni_contrib_2,0) + l_archive_tab_ni_det_1(k).act_info10;
11212         ni_contrib_ytd_2 := NVL(ni_contrib_ytd_2,0) + l_archive_tab_ni_det_1(k).act_info8;
11213       END IF;
11214     END LOOP;
11215 
11216 
11217 l_archive_tab_det2(l_archive_det2_counter).action_info_category := 'GB_RTI_FPS_ASG_DET2';
11218 l_archive_tab_det2(l_archive_det2_counter).assignment_id := l_cur_asg_id;
11219     hr_utility.trace('l_ni_emp_run' ||l_ni_emp_run);
11220     hr_utility.trace('l_archive_tab_det2(l_archive_det2_counter).act_info8' ||l_archive_tab_det2(l_archive_det2_counter).act_info8);
11221     hr_utility.trace('l_archive_tab_det2(l_archive_det2_counter).act_info16' ||l_archive_tab_det2(l_archive_det2_counter).act_info16);
11222     hr_utility.trace('l_archive_tab_det2(l_archive_det2_counter).act_info17' ||l_archive_tab_det2(l_archive_det2_counter).act_info17);
11223     hr_utility.trace('l_non_bacs_payment' ||l_non_bacs_payment);
11224     -- Derive the fields 58B and 59
11225     -- 58B
11226     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
11227                                   - NVL(l_archive_tab_det2(l_archive_det2_counter).act_info16,0) -- Student Loan
11228                                   - NVL(l_archive_tab_det2(l_archive_det2_counter).act_info17,0) -- PAYE
11229                                   - NVL(l_ni_emp_run,0) -- NI
11230                                   + l_non_bacs_payment;
11231    -- 59
11232     l_archive_tab_det2(l_archive_det2_counter).act_info9 := NVL(l_archive_tab_det2(l_archive_det2_counter).act_info9,0)
11233                                   - NVL(l_archive_tab_det2(l_archive_det2_counter).act_info16,0) -- Student Loan
11234                                   - NVL(l_archive_tab_det2(l_archive_det2_counter).act_info17,0) -- PAYE
11235                                   - NVL(l_ni_emp_run,0) -- NI
11236                                   + NVL(l_archive_tab_det2(l_archive_det2_counter).act_info10,0); -- sum of all 'Benefits Taxed Through payroll%'
11237     l_archive_tab_det2(l_archive_det2_counter).act_info5  := NVL(ni_contrib_ytd_2,0);
11238     l_archive_tab_det2(l_archive_det2_counter).act_info24 := NVL(ni_contrib_2,0);
11239 
11240 
11241     hr_utility.trace('After Assigning local values to the actual contexts ');
11242     l_archive_det1_counter := l_archive_det1_counter + 1;
11243     l_archive_det2_counter := l_archive_det2_counter + 1;
11244 
11245 end if; --nvl(l_asg_act_processed_earlier,-1) <> 0
11246 
11247 end if;  -- This end if is for if (nvl(l_processed_in_prepayment, 'N') <> 'Y') then
11248 end if; --if (l_fps_action_exists = 'Y') then --Fix for the bug 16409794
11249 
11250 --l_archive_det1_counter_local := l_archive_det1_counter_local + 1;
11251     CLOSE csr_processed_in_prepayment;
11252 --
11253     CLOSE csr_aggr_locking_asg_act_id;
11254     hr_utility.trace('After csr_aggr_locking_asg_act_id');
11255 l_single_payroll_run_exists := l_single_payroll_run_exists + 1;
11256     hr_utility.trace('l_single_payroll_run_exists end point: ' ||l_single_payroll_run_exists);
11257 l_cur_asg_action_id := l_aggr_locking_asg_act_id;
11258 --      EXIT WHEN l_aggr_sequence_id > l_last_asg_action_id;
11259       EXIT WHEN nvl(l_aggr_locking_asg_act_id, l_last_asg_action_id + 1) > l_last_asg_action_id;
11260 
11261 end if; --csr_chk_prepayment_run
11262 END LOOP;
11263   CLOSE csr_aggr_all_payroll_actions;
11264 --
11265     hr_utility.trace('l_single_payroll_run_exists: ' ||l_single_payroll_run_exists);
11266 if (l_single_payroll_run_exists = 1) then
11267 
11268 l_asg_act_processed_earlier := 0;
11269 
11270 --
11271     hr_utility.trace(' l_person_id: ' ||l_person_id);
11272     hr_utility.trace(' l_cur_asg_id: ' ||l_cur_asg_id);
11273     hr_utility.trace(' l_last_asg_action_id: ' ||l_last_asg_action_id);
11274     hr_utility.trace(' l_asg_id: ' ||l_asg_id);
11275 
11276 --    OPEN csr_asg_act_processed_earlier(l_person_id, l_cur_asg_id, l_last_asg_action_id);
11277     OPEN csr_asg_act_processed_earlier(l_person_id, l_asg_id, l_last_asg_action_id);
11278       FETCH csr_asg_act_processed_earlier
11279       INTO l_asg_act_processed_earlier;
11280     CLOSE csr_asg_act_processed_earlier;
11281 
11282     hr_utility.trace('l_asg_act_processed_earlier: ' ||l_asg_act_processed_earlier);
11283 
11284 if (nvl(l_asg_act_processed_earlier,-1) <> 0 and l_retry_req_flag is null) then
11285     hr_utility.trace('Current Assignment is already processed in an earlier FPS run. Hence, not processing now.');
11286     l_archive_flag := 'N';
11287 populate_run_msg(p_assactid, ' Assignment ' || l_assignment_number|| ' is already processed.','W');
11288 fnd_file.put_line (fnd_file.LOG,' Assignment ' || l_assignment_number|| ' is already processed.');
11289 
11290 end if;
11291 
11292 end if;
11293 
11294 
11295 
11296     hr_utility.trace('Aggregated new code ends here');
11297 
11298     hr_utility.trace('l_archive_flag: ' ||l_archive_flag);
11299 
11300     hr_utility.trace('Before l_archive_det1_counter' ||l_archive_det1_counter);
11301     hr_utility.trace('Before l_archive_det2_counter' ||l_archive_det2_counter);
11302 	hr_utility.trace('Before l_archive_det1_counter.count' ||l_archive_tab_det1.count);
11303     hr_utility.trace('Before l_archive_det2_counter.count' ||l_archive_tab_det2.count);
11304 
11305 --if (nvl(l_archive_flag,'Y') <> 'N')  and (l_archive_tab_det1.count > 0 and l_archive_tab_det2.count > 0) then
11306 if (nvl(l_archive_flag,'Y') <> 'N') then
11307 
11308 if ( (l_archive_det1_counter < l_archive_tab_det1.count  and
11309 l_archive_tab_det1(l_archive_det1_counter).act_info3 is not null) or l_retry_req_flag is null) then
11310 null;
11311     hr_utility.set_location('inside if', 10);
11312 else
11313     hr_utility.set_location('inside else', 10);
11314 l_archive_det1_counter := l_archive_det1_counter - 1;
11315 l_archive_det2_counter := l_archive_det2_counter - 1;
11316 end if;
11317 
11318 hr_utility.trace('l_archive_tab_det1(l_archive_det1_counter).assignment_id: ' ||l_archive_tab_det1(l_archive_det1_counter).assignment_id);
11319 hr_utility.trace('l_archive_tab_det2(l_archive_det2_counter).assignment_id: ' ||l_archive_tab_det2(l_archive_det2_counter).assignment_id);
11320 hr_utility.trace('l_archive_tab_det1(l_archive_det1_counter).act_info3: ' ||l_archive_tab_det1(l_archive_det1_counter).act_info3);
11321 
11322 set_address_fields(l_archive_tab(1),l_archive_tab(0),l_archive_tab_det1(l_archive_det1_counter));
11323 
11324     -- Validating fetched Person,Address,Assignment details for FPS
11325     hr_utility.set_location('Calling Person Address validations', 10);
11326 --   pay_gb_rti_fps_validate.person_address_validations(p_assactid, p_effective_date, l_archive_tab,l_per_addr_val_flag);
11327     hr_utility.trace('After l_archive_det1_counter' ||l_archive_det1_counter);
11328     hr_utility.trace('After l_archive_det2_counter' ||l_archive_det2_counter);
11329 
11330    pay_gb_rti_fps_validate.person_addr_validations_aggr(p_assactid,
11331                                                         p_effective_date,
11332                                                         l_archive_tab,
11333                                                         l_archive_tab_det1(l_archive_det1_counter),
11334                                                         l_archive_tab_det2(l_archive_det2_counter),
11335                                                         l_per_addr_val_flag);
11336 
11337     hr_utility.trace('person address' ||l_per_addr_val_flag);
11338 
11339 --l_per_addr_val_flag  := 'N'; --for testing
11340 
11341     IF l_per_addr_val_flag  = 'Y' THEN -- If validation fails
11342       l_personaddr_val_err := TRUE;
11343     END IF;
11344 
11345     hr_utility.set_location('Calling FPS validations', 10);
11346 
11347     hr_utility.trace('l_archive_det1_counter' ||l_archive_det1_counter);
11348     hr_utility.trace('l_archive_det2_counter' ||l_archive_det2_counter);
11349 
11350     hr_utility.trace('l_archive_tab_det1(l_archive_det1_counter)' ||l_archive_tab_det1(l_archive_det1_counter).act_info1);
11351     hr_utility.trace('l_archive_tab_det1(l_archive_det1_counter)' ||l_archive_tab_det1(l_archive_det1_counter).act_info2);
11352     hr_utility.trace('l_archive_tab_det1(l_archive_det1_counter)' ||l_archive_tab_det1(l_archive_det1_counter).act_info3);
11353 
11354 
11355 --    pay_gb_rti_fps_validate.assignment_validations(p_assactid, p_effective_date, l_archive_tab,l_fps_etext_asg_flag);
11356     pay_gb_rti_fps_validate.assignment_validations_aggr(p_assactid,
11357                                                    p_effective_date,
11358                                                    l_archive_tab,
11359                                                    l_archive_tab_det1(l_archive_det1_counter),
11360                                                    l_archive_tab_det2(l_archive_det2_counter),
11361                                                    l_fps_etext_asg_flag);
11362 
11363 --l_fps_etext_asg_flag := 'N'; --for testing
11364     hr_utility.trace('l_fps_etext_asg_flag' ||l_fps_etext_asg_flag);
11365 
11366     IF l_fps_etext_asg_flag = 'Y' THEN -- If validation fails
11367       l_fps_val_err        := TRUE;
11368     END IF;
11369 
11370     hr_utility.set_location('After Calling FPS validations', 10);
11371     -- LOOP through all NIs
11372  --commented below For Loop whole code for testing
11373     FOR i_count IN 0..i_2
11374     LOOP
11375 
11376       hr_utility.set_location ('Calling FPS NI validations: i_2', 10);
11377 
11378       pay_gb_rti_fps_validate.ni_validations(p_assactid, p_effective_date, l_archive_tab_ni_det_1,i_count,l_fps_etext_ni_flag);
11379 
11380 --      l_fps_etext_ni_flag := 'N';  --for testing
11381 
11382       IF l_fps_etext_ni_flag = 'Y' THEN -- If validation fails
11383         l_fps_ni_val_err    := TRUE;
11384       END IF;
11385     END LOOP;
11386 
11387     FOR i_count IN 0..i_1
11388     LOOP
11389 
11390       hr_utility.set_location ('Calling FPS NI validations : i_1', 10);
11391 
11392       pay_gb_rti_fps_validate.ni_validations(p_assactid, p_effective_date, l_archive_tab_ni_det,i_count,l_fps_etext_ni_flag);
11393 
11394 --      l_fps_etext_ni_flag := 'N';  --for testing
11395 
11396       IF l_fps_etext_ni_flag = 'Y' THEN -- If validation fails
11397         l_fps_ni_val_err    := TRUE;
11398       END IF;
11399     END LOOP;
11400 
11401    hr_utility.set_location('After Calling FPS validations', 10);
11402 
11403     IF l_archive_person AND l_archive_addr AND l_archive_asg_det1 AND l_archive_asg_det2 THEN
11404 --    IF l_archive_person AND l_archive_addr AND l_archive_asg_det1 THEN   --for testing
11405 --      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.
11406       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.
11407         THEN
11408         hr_utility.set_location('Validation failed, raise error.',999);
11409         fnd_file.put_line(fnd_file.LOG,'Not Archiving');
11410         raise error_found;
11411       ELSE
11412         hr_utility.set_location('Validation successful, archive data.',999);
11413         insert_archive_row(p_assactid, p_effective_date,l_archive_tab);
11414         insert_archive_row_agg(p_assactid, p_effective_date,l_archive_tab_det1);
11415         insert_archive_row_agg(p_assactid, p_effective_date,l_archive_tab_det2);
11416         insert_archive_row_agg(p_assactid, p_effective_date,l_archive_tab_ni_det);
11417         insert_archive_row_agg(p_assactid, p_effective_date,l_archive_tab_ni_det_1);
11418       /*  -- lock the pre payments action id with current fps assignment action id
11419         begin
11420         hr_nonrun_asact.insint(p_assactid, l_prepay_asg_action_id);
11421         exception
11422         when dup_val_on_index then
11423            hr_utility.set_location(sqlcode || '-' || sqlerrm,60);
11424            hr_utility.set_location('Skip locking for retry.Locking action id-'||p_assactid || ' Locked action id-' || l_prepay_asg_action_id,60);
11425         end;
11426 */
11427 
11428 /*select count(*)
11429 into l_rec_count
11430 from PAY_GB_FPS_DETAILS
11431 where ASSIGNMENT_ID = l_asg_id
11432 and PERSON_ID = l_person_id
11433 and PAYROLL_ASG_ACT_ID = l_last_asg_action_id;
11434 
11435 if l_rec_count = 0 then
11436         hr_utility.set_location('2 inserting',999);
11437         hr_utility.set_location('2 l_asg_id: '||l_asg_id,999);
11438         hr_utility.set_location('2 p_assactid: '||p_assactid,999);
11439         hr_utility.set_location('2 l_last_asg_action_id: '||l_last_asg_action_id,999);
11440         hr_utility.set_location('2 inserting',999);
11441       INSERT
11442       INTO PAY_GB_FPS_DETAILS
11443         (
11444           ASSIGNMENT_ID,
11445           PERSON_ID,
11446           FPS_ASG_ACT_ID,
11447           FPS_PAY_ACT_ID,
11448           FPS_EFFECTIVE_DATE,
11449           PREPAY_ASG_ACT_ID,
11450           PREPAY_PAY_ACT_ID,
11451           PREPAY_EFFECTIVE_DATE,
11452           PAYROLL_ASG_ACT_ID,
11453           PAYROLL_PAY_ACT_ID,
11454           PAYROLL_EFFECTIVE_DATE
11455         )
11456         VALUES
11457         (
11458           l_asg_id,
11459           l_person_id,
11460           p_assactid,
11461           g_payroll_action_id,
11462           g_fps_effective_date,
11463           l_prepay_asg_action_id,
11464           l_prepay_payroll_action_id,
11465           l_prepay_effective_date,
11466           l_last_asg_action_id,
11467           l_payroll_pact_id,
11468           l_last_effective_date
11469         );
11470 
11471 end if; */
11472       END IF;
11473     ELSE
11474       hr_utility.set_location('Archiving Error - assignment action id ' || p_assactid ,999);
11475       raise error_found;
11476     END IF;
11477 end if; -- if l_archive_flag check
11478 end if; -- if (l_total_payment <> 0) then --Fix for the bug 16409794
11479 end if; -- if l_asg_action_id =  p_assactid then
11480 --paye aggregation logic ends
11481     hr_utility.trace('Leaving Aggregated Code');
11482 
11483 elsif l_per_ni_agg_flag = 'Y' then
11484     hr_utility.trace('Entered NI Only -Aggregated Code');
11485 
11486   -- skip the NI aggregation logic if the current asg is not processed in this
11487   -- pre payments. This would be processed as part of max asg_act_id for this pre payment.
11488     open csr_rti_rpt_proc_prepay(l_asg_id,g_pre_pact_id);
11489     fetch csr_rti_rpt_proc_prepay into l_rti_ni_proc_flag;
11490     close csr_rti_rpt_proc_prepay;
11491     hr_utility.trace('l_rti_ni_proc_flag: '|| l_rti_ni_proc_flag);
11492  if nvl(l_rti_ni_proc_flag,'N') = 'Y' then
11493     hr_utility.trace('Processing NI Only -Aggregated Code for l_asg_id: ' || l_asg_id);
11494     OPEN csr_last_payroll_action(l_asg_id, g_pre_pact_id, l_asg_eff_start_date, g_start_year,g_end_year);
11495     FETCH csr_last_payroll_action
11496     INTO l_last_asg_action_id,
11497       l_last_effective_date;
11498     CLOSE csr_last_payroll_action;
11499 
11500     OPEN csr_prepay_asg_act_details(l_asg_id, g_pre_pact_id);
11501     FETCH csr_prepay_asg_act_details
11502     INTO l_prepay_asg_action_id,
11503       l_prepay_payroll_action_id,
11504       l_prepay_effective_date;
11505     CLOSE csr_prepay_asg_act_details;
11506 
11507 -- Get the RTI NI Reporting Assignment and effective date.
11508    open csr_ni_rpt_flag(l_asg_id);
11509    fetch csr_ni_rpt_flag into l_ni_rti_flag,l_ni_rti_date;
11510    close csr_ni_rpt_flag;
11511 
11512     hr_utility.trace('l_prepay_asg_action_id: '||l_prepay_asg_action_id);
11513     hr_utility.trace('l_prepay_payroll_action_id: '||l_prepay_payroll_action_id);
11514     hr_utility.trace('l_prepay_effective_date: '||l_prepay_effective_date);
11515 
11516     hr_utility.trace('l_last_asg_action_id: '||l_last_asg_action_id);
11517     hr_utility.trace('l_last_effective_date: '||l_last_effective_date);
11518     hr_utility.trace('l_ni_rti_flag: '||l_ni_rti_flag);
11519     hr_utility.trace('l_ni_rti_date: '||l_ni_rti_date);
11520 
11521     l_start_date  := l_asg_eff_start_date;
11522     l_end_date    := g_effective_date;
11523 
11524 ---
11525 
11526 l_bacs_payment_exists := 'N';
11527 
11528   OPEN csr_bacs_payment_exists (l_prepay_payroll_action_id,l_prepay_asg_action_id);
11529   FETCH csr_bacs_payment_exists INTO l_bacs_payment_exists;
11530   CLOSE csr_bacs_payment_exists;
11531 
11532 begin
11533   if (l_bacs_payment_exists = 'Y') then
11534   l_hash_code := PAY_GB_FPS_NI_AND_OTHERS.fetch_HASH_FPS_ASG(g_pre_pact_id, l_asg_id, l_large_bacs_payment);
11535   else
11536   l_hash_code := null;
11537   end if;
11538 exception
11539 when others then
11540 populate_run_msg(p_assactid, 'Hash error '||SQLERRM||' for the assignment ' || l_assignment_number|| '.');
11541 fnd_file.put_line (fnd_file.LOG,'Hash error '||SQLERRM||' for the assignment ' || l_assignment_number|| '.');
11542 raise_application_error(-20001,'Hash error '||SQLERRM||' for the assignment ' || l_assignment_number|| '.');
11543 end;
11544 
11545     hr_utility.trace('l_large_bacs_payment: '||l_large_bacs_payment);
11546     hr_utility.trace('l_hash_code: '||l_hash_code);
11547 
11548 ---
11549 
11550   OPEN csr_total_payment (l_prepay_asg_action_id);
11551   FETCH csr_total_payment INTO l_total_payment;
11552   CLOSE csr_total_payment;
11553 
11554     hr_utility.trace('l_total_payment: '||l_total_payment);
11555 
11556     l_non_bacs_payment := l_total_payment - l_large_bacs_payment;
11557 
11558     hr_utility.trace('l_non_bacs_payment: '||l_non_bacs_payment);
11559 ---
11560     hr_utility.set_location('Fetching person details ',10);
11561     l_archive_person := fetch_person_rec(p_assactid, l_asg_eff_start_date,g_effective_date,l_archive_tab(0));
11562     ---
11563     hr_utility.set_location('Fetching address details ',20);
11564     l_archive_addr := fetch_address_rec(l_archive_tab(0).person_id,
11565                                         l_archive_tab(0).assignment_id,
11566                                         g_effective_date,
11567                                         l_archive_tab(1));
11568     l_person_id    := l_archive_tab(0).person_id;
11569     --Fetching assignments details for FPS
11570     hr_utility.set_location('Fetching Assignment details ',30);
11571     l_archive_asg_det1 := fetch_fps_asg_det1(l_asg_eff_start_date,
11572                                              g_effective_date,
11573                                              p_assactid,
11574                                              l_last_asg_action_id,
11575 					     'Y',
11576                                              l_archive_tab(0),
11577                                              l_archive_tab(2),
11578                                              p_starter_set);
11579 
11580     hr_utility.set_location('Assignment Hash Coode to archive record',30);
11581     l_archive_tab(2).act_info28 := l_hash_code;
11582 
11583     --****************************
11584     i                              := 3;
11585     l_archive_tab(3).assignment_id := l_asg_id;
11586 
11587     OPEN csr_all_payroll_actions(l_asg_id, g_pre_pact_id, l_asg_eff_start_date, g_start_year,g_end_year);
11588     LOOP
11589       FETCH csr_all_payroll_actions
11590       INTO l_last_asg_action_id,
11591         l_last_effective_date;
11592       EXIT
11593     WHEN csr_all_payroll_actions%NOTFOUND;
11594 
11595 
11596       pay_gb_fps_ni_and_others.get_ni_only_agg_bal_for_asg(l_last_asg_action_id,
11597                                                        p_ni_a_balance,
11598                                                        p_ni_b_balance,
11599                                                        p_ni_c_balance,
11600                                                        p_ni_d_balance,
11601                                                        p_ni_e_balance,
11602                                                        p_ni_j_balance,
11603                                                        p_ni_l_balance);
11604 
11605       IF (p_ni_a_balance.act_info1 IS NOT NULL) THEN
11606         IF already_a                =  -1 THEN
11607           i                        := i+1;
11608           already_a                := i;
11609         END IF;
11610 
11611         l_archive_tab(already_a).assignment_id        := l_archive_tab(0).assignment_id;
11612         l_archive_tab(already_a).action_info_category := 'GB_RTI_FPS_NI_DET';
11613         l_archive_tab(already_a).act_info1            := p_ni_a_balance.act_info1;
11614         l_archive_tab(already_a).act_info2            := nvl(l_archive_tab(already_a).act_info2,0) + p_ni_a_balance.act_info2;
11615         l_archive_tab(already_a).act_info3            := p_ni_a_balance.act_info3;
11616         l_archive_tab(already_a).act_info4            := p_ni_a_balance.act_info4;
11617         l_archive_tab(already_a).act_info5            := p_ni_a_balance.act_info5;
11618         l_archive_tab(already_a).act_info6            := p_ni_a_balance.act_info6;
11619         l_archive_tab(already_a).act_info7            := p_ni_a_balance.act_info7;
11620         l_archive_tab(already_a).act_info8            := p_ni_a_balance.act_info8;
11621         l_archive_tab(already_a).act_info9           := NVL(l_archive_tab(already_a).act_info9 ,0) + p_ni_a_balance.act_info9;
11622         l_archive_tab(already_a).act_info10           := NVL(l_archive_tab(already_a).act_info10 ,0) + p_ni_a_balance.act_info10;
11623 
11624       END IF;
11625       -- For Category B
11626       IF (p_ni_b_balance.act_info1 IS NOT NULL) THEN
11627         IF already_b                =  -1 THEN
11628           i                        := i+1;
11629           already_b                := i;
11630         END IF;
11631         l_archive_tab(already_b).assignment_id        := l_archive_tab(0).assignment_id;
11632         l_archive_tab(already_b).action_info_category := 'GB_RTI_FPS_NI_DET';
11633         l_archive_tab(already_b).act_info1            := p_ni_b_balance.act_info1;
11634         l_archive_tab(already_b).act_info2            := nvl(l_archive_tab(already_b).act_info2,0) + p_ni_b_balance.act_info2;
11635         l_archive_tab(already_b).act_info3            := p_ni_b_balance.act_info3;
11636         l_archive_tab(already_b).act_info4            := p_ni_b_balance.act_info4;
11637         l_archive_tab(already_b).act_info5            := p_ni_b_balance.act_info5;
11638         l_archive_tab(already_b).act_info6            := p_ni_b_balance.act_info6;
11639         l_archive_tab(already_b).act_info7            := p_ni_b_balance.act_info7;
11640         l_archive_tab(already_b).act_info8            := p_ni_b_balance.act_info8;
11641         l_archive_tab(already_b).act_info9           := NVL(l_archive_tab(already_b).act_info9 ,0) + p_ni_b_balance.act_info9;
11642         l_archive_tab(already_b).act_info10           := NVL(l_archive_tab(already_b).act_info10 ,0) + p_ni_b_balance.act_info10;
11643       END IF;
11644       -- For Category C
11645       IF (p_ni_c_balance.act_info1 IS NOT NULL) THEN
11646         IF already_c                =  -1 THEN
11647           i                        := i+1;
11648           already_c                := i;
11649         END IF;
11650         l_archive_tab(already_c).assignment_id        := l_archive_tab(0).assignment_id;
11651         l_archive_tab(already_c).action_info_category := 'GB_RTI_FPS_NI_DET';
11652         l_archive_tab(already_c).act_info1            := p_ni_c_balance.act_info1;
11653         l_archive_tab(already_c).act_info2            := nvl(l_archive_tab(already_c).act_info2,0) + p_ni_c_balance.act_info2;
11654         l_archive_tab(already_c).act_info3            := p_ni_c_balance.act_info3;
11655         l_archive_tab(already_c).act_info4            := p_ni_c_balance.act_info4;
11656         l_archive_tab(already_c).act_info5            := p_ni_c_balance.act_info5;
11657         l_archive_tab(already_c).act_info6            := p_ni_c_balance.act_info6;
11658         l_archive_tab(already_c).act_info7            := p_ni_c_balance.act_info7;
11659         l_archive_tab(already_c).act_info8            := p_ni_c_balance.act_info8;
11660         l_archive_tab(already_c).act_info9           := NVL(l_archive_tab(already_c).act_info9 ,0) + p_ni_c_balance.act_info9;
11661         l_archive_tab(already_c).act_info10           := NVL(l_archive_tab(already_c).act_info10 ,0) + p_ni_c_balance.act_info10;
11662       END IF;
11663       --For Category D
11664       IF (p_ni_d_balance.act_info1 IS NOT NULL) THEN
11665         IF already_d                =  -1 THEN
11666           i                        := i+1;
11667           already_d                := i;
11668         END IF;
11669         l_archive_tab(already_d).assignment_id        := l_archive_tab(0).assignment_id;
11670         l_archive_tab(already_d).action_info_category := 'GB_RTI_FPS_NI_DET';
11671         l_archive_tab(already_d).act_info1            := p_ni_d_balance.act_info1;
11672         l_archive_tab(already_d).act_info2            := nvl(l_archive_tab(already_d).act_info2,0) + p_ni_d_balance.act_info2;
11673         l_archive_tab(already_d).act_info3            := p_ni_d_balance.act_info3;
11674         l_archive_tab(already_d).act_info4            := p_ni_d_balance.act_info4;
11675         l_archive_tab(already_d).act_info5            := p_ni_d_balance.act_info5;
11676         l_archive_tab(already_d).act_info6            := p_ni_d_balance.act_info6;
11677         l_archive_tab(already_d).act_info7            := p_ni_d_balance.act_info7;
11678         l_archive_tab(already_d).act_info8            := p_ni_d_balance.act_info8;
11679         l_archive_tab(already_d).act_info9           := NVL(l_archive_tab(already_d).act_info9,0) + p_ni_d_balance.act_info9;
11680         l_archive_tab(already_d).act_info10           := NVL(l_archive_tab(already_d).act_info10,0) + p_ni_d_balance.act_info10;
11681       END IF;
11682       -- For Category E
11683       IF (p_ni_e_balance.act_info1 IS NOT NULL) THEN
11684         IF already_e                =  -1 THEN
11685           i                        := i+1;
11686           already_e                := i;
11687         END IF;
11688         l_archive_tab(already_e).assignment_id        := l_archive_tab(0).assignment_id;
11689         l_archive_tab(already_e).action_info_category := 'GB_RTI_FPS_NI_DET';
11690         l_archive_tab(already_e).act_info1            := p_ni_e_balance.act_info1;
11691         l_archive_tab(already_e).act_info2            := nvl(l_archive_tab(already_e).act_info2,0) + p_ni_e_balance.act_info2;
11692         l_archive_tab(already_e).act_info3            := p_ni_e_balance.act_info3;
11693         l_archive_tab(already_e).act_info4            := p_ni_e_balance.act_info4;
11694         l_archive_tab(already_e).act_info5            := p_ni_e_balance.act_info5;
11695         l_archive_tab(already_e).act_info6            := p_ni_e_balance.act_info6;
11696         l_archive_tab(already_e).act_info7            := p_ni_e_balance.act_info7;
11697         l_archive_tab(already_e).act_info8            := p_ni_e_balance.act_info8;
11698         l_archive_tab(already_e).act_info9           := NVL(l_archive_tab(already_e).act_info9 ,0) + p_ni_e_balance.act_info9;
11699         l_archive_tab(already_e).act_info10           := NVL(l_archive_tab(already_e).act_info10 ,0) + p_ni_e_balance.act_info10;
11700       END IF;
11701       -- For Category J
11702       IF (p_ni_j_balance.act_info1 IS NOT NULL) THEN
11703         IF already_j                =  -1 THEN
11704           i                        := i+1;
11705           already_j                := i;
11706         END IF;
11707         l_archive_tab(already_j).assignment_id        := l_archive_tab(0).assignment_id;
11708         l_archive_tab(already_j).action_info_category := 'GB_RTI_FPS_NI_DET';
11709         l_archive_tab(already_j).act_info1            := p_ni_j_balance.act_info1;
11710         l_archive_tab(already_j).act_info2            := nvl(l_archive_tab(already_j).act_info2,0) + p_ni_j_balance.act_info2;
11711         l_archive_tab(already_j).act_info3            := p_ni_j_balance.act_info3;
11712         l_archive_tab(already_j).act_info4            := p_ni_j_balance.act_info4;
11713         l_archive_tab(already_j).act_info5            := p_ni_j_balance.act_info5;
11714         l_archive_tab(already_j).act_info6            := p_ni_j_balance.act_info6;
11715         l_archive_tab(already_j).act_info7            := p_ni_j_balance.act_info7;
11716         l_archive_tab(already_j).act_info8            := p_ni_j_balance.act_info8;
11717         l_archive_tab(already_j).act_info9           := NVL(l_archive_tab(already_j).act_info9 ,0) + p_ni_j_balance.act_info9;
11718         l_archive_tab(already_j).act_info10           := NVL(l_archive_tab(already_j).act_info10 ,0) + p_ni_j_balance.act_info10;
11719       END IF;
11720       -- For Category L
11721       IF (p_ni_l_balance.act_info1 IS NOT NULL) THEN
11722         IF already_l                =  -1 THEN
11723           i                        := i+1;
11724           already_l                := i;
11725         END IF;
11726         l_archive_tab(already_l).assignment_id        := l_archive_tab(0).assignment_id;
11727         l_archive_tab(already_l).action_info_category := 'GB_RTI_FPS_NI_DET';
11728         l_archive_tab(already_l).act_info1            := p_ni_l_balance.act_info1;
11729         l_archive_tab(already_l).act_info2            := nvl(l_archive_tab(already_l).act_info2,0) + p_ni_l_balance.act_info2;
11730         l_archive_tab(already_l).act_info3            := p_ni_l_balance.act_info3;
11731         l_archive_tab(already_l).act_info4            := p_ni_l_balance.act_info4;
11732         l_archive_tab(already_l).act_info5            := p_ni_l_balance.act_info5;
11733         l_archive_tab(already_l).act_info6            := p_ni_l_balance.act_info6;
11734         l_archive_tab(already_l).act_info7            := p_ni_l_balance.act_info7;
11735         l_archive_tab(already_l).act_info8            := p_ni_l_balance.act_info8;
11736         l_archive_tab(already_l).act_info9            :=  NVL(l_archive_tab(already_l).act_info9 ,0) + p_ni_l_balance.act_info9;
11737         l_archive_tab(already_l).act_info10           := NVL(l_archive_tab(already_l).act_info10 ,0) + p_ni_l_balance.act_info10;
11738       END IF;
11739 
11740       l_archive_asg_det2 := fetch_fps_asg_det2(l_last_asg_action_id,l_asg_id,l_archive_tab(3));
11741       hr_utility.trace('after det2');
11742       OPEN csr_pay_act_details(l_last_asg_action_id);
11743       FETCH csr_pay_act_details INTO l_payroll_pact_id;
11744       CLOSE csr_pay_act_details;
11745 
11746       INSERT
11747       INTO PAY_GB_FPS_DETAILS
11748         (
11749           ASSIGNMENT_ID,
11750           PERSON_ID,
11751           FPS_ASG_ACT_ID,
11752           FPS_PAY_ACT_ID,
11753           FPS_EFFECTIVE_DATE,
11754           PREPAY_ASG_ACT_ID,
11755           PREPAY_PAY_ACT_ID,
11756           PREPAY_EFFECTIVE_DATE,
11757           PAYROLL_ASG_ACT_ID,
11758           PAYROLL_PAY_ACT_ID,
11759           PAYROLL_EFFECTIVE_DATE
11760         )
11761         VALUES
11762         (
11763           l_asg_id,
11764           l_person_id,
11765           p_assactid,
11766           g_payroll_action_id,
11767           g_fps_effective_date,
11768           l_prepay_asg_action_id,
11769           l_prepay_payroll_action_id,
11770           l_prepay_effective_date,
11771           l_last_asg_action_id,
11772           l_payroll_pact_id,
11773           l_last_effective_date
11774         );
11775 
11776     END LOOP;
11777 
11778     CLOSE csr_all_payroll_actions;
11779       hr_utility.trace('1');
11780       hr_utility.trace('i' || i);
11781 
11782 
11783 
11784     FOR k IN 4..i
11785     LOOP
11786       hr_utility.trace('k:' || k);
11787       IF l_archive_tab(k).act_info10 IS NOT NULL THEN
11788         ni_contrib  := NVL(ni_contrib,0) + l_archive_tab(k).act_info10;
11789         ni_contrib_ytd := NVL(ni_contrib_ytd,0) + l_archive_tab(k).act_info8;
11790       END IF;
11791       hr_utility.trace('k:before c_asg_act_id' || k);
11792       if l_archive_tab(k).act_info1 is not null then
11793           FOR c_asg_act_id in csr_asg_act_oth_asgs(l_asg_id)
11794           loop
11795                   hr_utility.trace('c_asg_act_id' || c_asg_act_id.asg_act_id);
11796                   hr_utility.trace('act_info2' || l_archive_tab(k).act_info2);
11797                   hr_utility.trace('act_info1' || l_archive_tab(k).act_info1);
11798                   --add_other_asg_ni_ytd(c_asg_act_id.asg_act_id, l_archive_tab(k));
11799           end loop;
11800       end if;
11801     END LOOP;
11802 /*
11803     FOR k IN 4..i
11804     LOOP
11805       IF l_archive_tab(i).act_info1 IS NOT NULL THEN
11806       	l_archive_tab(i).act_info7  := NVL(l_archive_tab(3).act_info23,0);
11807         l_archive_tab(i).act_info8  := NVL(l_archive_tab(3).act_info4,0);
11808 		l_archive_tab(i).act_info9  := NVL(ni_contrib,0);
11809 		l_archive_tab(i).act_info10 := NVL(ni_contrib_ytd,0);
11810       END IF;
11811     END LOOP;
11812 */
11813     hr_utility.trace( 'value of i :' || i);
11814     hr_utility.trace('Assignment id : ' || l_asg_id);
11815     hr_utility.trace('ni_contrib : ' || ni_contrib);
11816     hr_utility.trace('l_archive_tab(3).act_info8 : ' || l_archive_tab(3).act_info8 );
11817     hr_utility.trace('l_archive_tab(3).act_info9 : ' || l_archive_tab(3).act_info9 );
11818 
11819     -- Derive the fields 58B and 59
11820     -- 58B
11821     l_archive_tab(3).act_info8 := NVL(l_archive_tab(3).act_info8,0) -- Prev holds Total Deductions
11822                                   - NVL(l_archive_tab(3).act_info16,0) -- Student Loan
11823                                   - NVL(l_archive_tab(3).act_info17,0) -- PAYE
11824                                   - NVL(ni_contrib,0) -- NI
11825                                   + l_non_bacs_payment;
11826    -- 59
11827     l_archive_tab(3).act_info9 := NVL(l_archive_tab(3).act_info9,0)
11828                                   - NVL(l_archive_tab(3).act_info16,0) -- Student Loan
11829                                   - NVL(l_archive_tab(3).act_info17,0) -- PAYE
11830                                   - NVL(ni_contrib,0) -- NI
11831                                   + NVL(l_archive_tab(3).act_info10,0); -- sum of all 'Benefits Taxed Through payroll%'
11832     l_archive_tab(3).act_info5  := NVL(ni_contrib_ytd,0);
11833     l_archive_tab(3).act_info24 := NVL(ni_contrib,0);
11834        l_archive_tab(3).act_info29 := g_pre_pact_id||','||l_last_asg_action_id;
11835     l_archive_tab(2).act_info29 := g_pre_pact_id||','||l_last_asg_action_id;
11836 -- get the max assingment action id prcessed in this prepayment
11837 -- get the YTD values for that assignment action id
11838 open csr_aggr_max_act_id(l_person_id,g_pre_pact_id,l_last_effective_date);
11839 fetch csr_aggr_max_act_id into l_count_asg,l_max_prepay_act_id;
11840 close csr_aggr_max_act_id;
11841 
11842 pay_gb_fps_ni_and_others.get_ni_only_bal_rti_rpt(l_max_prepay_act_id,
11843                                                        p_per_ni_a_balance,
11844                                                        p_per_ni_b_balance,
11845                                                        p_per_ni_c_balance,
11846                                                        p_per_ni_d_balance,
11847                                                        p_per_ni_e_balance,
11848                                                        p_per_ni_j_balance,
11849                                                        p_per_ni_l_balance);
11850 -----
11851 /*FOR l_asg_act_rec in csr_asg_in_prepay(l_person_id)
11852 loop
11853 pay_gb_fps_ni_and_others.get_ni_only_agg_bal_sum_asg(l_asg_act_rec.asg_act_id,
11854                                                        p_per_ni_a_balance,
11855                                                        p_per_ni_b_balance,
11856                                                        p_per_ni_c_balance,
11857                                                        p_per_ni_d_balance,
11858                                                        p_per_ni_e_balance,
11859                                                        p_per_ni_j_balance,
11860                                                        p_per_ni_l_balance);
11861 end loop;
11862 */
11863 -- trace for customer
11864     hr_utility.trace('New Trace messages starts here : ');
11865     hr_utility.trace('p_per_ni_a_balance.assignment_id : ' || p_per_ni_a_balance.assignment_id);
11866     hr_utility.trace('p_per_ni_a_balance.act_info1 : ' || p_per_ni_a_balance.act_info1);
11867     hr_utility.trace('p_per_ni_a_balance.act_info2 : ' || p_per_ni_a_balance.act_info2);
11868     hr_utility.trace('p_per_ni_a_balance.act_info3 : ' || p_per_ni_a_balance.act_info3);
11869     hr_utility.trace('p_per_ni_a_balance.act_info4 : ' || p_per_ni_a_balance.act_info4);
11870     hr_utility.trace('p_per_ni_a_balance.act_info5 : ' || p_per_ni_a_balance.act_info5);
11871     hr_utility.trace('p_per_ni_a_balance.act_info6 : ' || p_per_ni_a_balance.act_info6);
11872     hr_utility.trace('p_per_ni_a_balance.act_info7 : ' || p_per_ni_a_balance.act_info7);
11873     hr_utility.trace('p_per_ni_a_balance.act_info8 : ' || p_per_ni_a_balance.act_info8);
11874     hr_utility.trace('p_per_ni_a_balance.act_info9 : ' || p_per_ni_a_balance.act_info9);
11875     hr_utility.trace('p_per_ni_a_balance.act_info10 : ' || p_per_ni_a_balance.act_info10);
11876 -----
11877     hr_utility.trace('p_per_ni_b_balance.assignment_id : ' || p_per_ni_b_balance.assignment_id);
11878     hr_utility.trace('p_per_ni_b_balance.act_info1 : ' || p_per_ni_b_balance.act_info1);
11879     hr_utility.trace('p_per_ni_b_balance.act_info2 : ' || p_per_ni_b_balance.act_info2);
11880     hr_utility.trace('p_per_ni_b_balance.act_info3 : ' || p_per_ni_b_balance.act_info3);
11881     hr_utility.trace('p_per_ni_b_balance.act_info4 : ' || p_per_ni_b_balance.act_info4);
11882     hr_utility.trace('p_per_ni_b_balance.act_info5 : ' || p_per_ni_b_balance.act_info5);
11883     hr_utility.trace('p_per_ni_b_balance.act_info6 : ' || p_per_ni_b_balance.act_info6);
11884     hr_utility.trace('p_per_ni_b_balance.act_info7 : ' || p_per_ni_b_balance.act_info7);
11885     hr_utility.trace('p_per_ni_b_balance.act_info8 : ' || p_per_ni_b_balance.act_info8);
11886     hr_utility.trace('p_per_ni_b_balance.act_info9 : ' || p_per_ni_b_balance.act_info9);
11887     hr_utility.trace('p_per_ni_b_balance.act_info10 : ' || p_per_ni_b_balance.act_info10);
11888 ---
11889     hr_utility.trace('p_per_ni_c_balance.assignment_id : ' || p_per_ni_c_balance.assignment_id);
11890     hr_utility.trace('p_per_ni_c_balance.act_info1 : ' || p_per_ni_c_balance.act_info1);
11891     hr_utility.trace('p_per_ni_c_balance.act_info2 : ' || p_per_ni_c_balance.act_info2);
11892     hr_utility.trace('p_per_ni_c_balance.act_info3 : ' || p_per_ni_c_balance.act_info3);
11893     hr_utility.trace('p_per_ni_c_balance.act_info4 : ' || p_per_ni_c_balance.act_info4);
11894     hr_utility.trace('p_per_ni_c_balance.act_info5 : ' || p_per_ni_c_balance.act_info5);
11895     hr_utility.trace('p_per_ni_c_balance.act_info6 : ' || p_per_ni_c_balance.act_info6);
11896     hr_utility.trace('p_per_ni_c_balance.act_info7 : ' || p_per_ni_c_balance.act_info7);
11897     hr_utility.trace('p_per_ni_c_balance.act_info8 : ' || p_per_ni_c_balance.act_info8);
11898     hr_utility.trace('p_per_ni_c_balance.act_info9 : ' || p_per_ni_c_balance.act_info9);
11899     hr_utility.trace('p_per_ni_c_balance.act_info10 : ' || p_per_ni_c_balance.act_info10);
11900 ---
11901     hr_utility.trace('p_per_ni_d_balance.assignment_id : ' || p_per_ni_d_balance.assignment_id);
11902     hr_utility.trace('p_per_ni_d_balance.act_info1 : ' || p_per_ni_d_balance.act_info1);
11903     hr_utility.trace('p_per_ni_d_balance.act_info2 : ' || p_per_ni_d_balance.act_info2);
11904     hr_utility.trace('p_per_ni_d_balance.act_info3 : ' || p_per_ni_d_balance.act_info3);
11905     hr_utility.trace('p_per_ni_d_balance.act_info4 : ' || p_per_ni_d_balance.act_info4);
11906     hr_utility.trace('p_per_ni_d_balance.act_info5 : ' || p_per_ni_d_balance.act_info5);
11907     hr_utility.trace('p_per_ni_d_balance.act_info6 : ' || p_per_ni_d_balance.act_info6);
11908     hr_utility.trace('p_per_ni_d_balance.act_info7 : ' || p_per_ni_d_balance.act_info7);
11909     hr_utility.trace('p_per_ni_d_balance.act_info8 : ' || p_per_ni_d_balance.act_info8);
11910     hr_utility.trace('p_per_ni_d_balance.act_info9 : ' || p_per_ni_d_balance.act_info9);
11911     hr_utility.trace('p_per_ni_d_balance.act_info10 : ' || p_per_ni_d_balance.act_info10);
11912 
11913 ---
11914     hr_utility.trace('p_per_ni_e_balance.assignment_id : ' || p_per_ni_e_balance.assignment_id);
11915     hr_utility.trace('p_per_ni_e_balance.act_info1 : ' || p_per_ni_e_balance.act_info1);
11916     hr_utility.trace('p_per_ni_e_balance.act_info2 : ' || p_per_ni_e_balance.act_info2);
11917     hr_utility.trace('p_per_ni_e_balance.act_info3 : ' || p_per_ni_e_balance.act_info3);
11918     hr_utility.trace('p_per_ni_e_balance.act_info4 : ' || p_per_ni_e_balance.act_info4);
11919     hr_utility.trace('p_per_ni_e_balance.act_info5 : ' || p_per_ni_e_balance.act_info5);
11920     hr_utility.trace('p_per_ni_e_balance.act_info6 : ' || p_per_ni_e_balance.act_info6);
11921     hr_utility.trace('p_per_ni_e_balance.act_info7 : ' || p_per_ni_e_balance.act_info7);
11922     hr_utility.trace('p_per_ni_e_balance.act_info8 : ' || p_per_ni_e_balance.act_info8);
11923     hr_utility.trace('p_per_ni_e_balance.act_info9 : ' || p_per_ni_e_balance.act_info9);
11924     hr_utility.trace('p_per_ni_e_balance.act_info10 : ' || p_per_ni_e_balance.act_info10);
11925 
11926 
11927 ---
11928     hr_utility.trace('p_per_ni_j_balance.assignment_id : ' || p_per_ni_j_balance.assignment_id);
11929     hr_utility.trace('p_per_ni_j_balance.act_info1 : ' || p_per_ni_j_balance.act_info1);
11930     hr_utility.trace('p_per_ni_j_balance.act_info2 : ' || p_per_ni_j_balance.act_info2);
11931     hr_utility.trace('p_per_ni_j_balance.act_info3 : ' || p_per_ni_j_balance.act_info3);
11932     hr_utility.trace('p_per_ni_j_balance.act_info4 : ' || p_per_ni_j_balance.act_info4);
11933     hr_utility.trace('p_per_ni_j_balance.act_info5 : ' || p_per_ni_j_balance.act_info5);
11934     hr_utility.trace('p_per_ni_j_balance.act_info6 : ' || p_per_ni_j_balance.act_info6);
11935     hr_utility.trace('p_per_ni_j_balance.act_info7 : ' || p_per_ni_j_balance.act_info7);
11936     hr_utility.trace('p_per_ni_j_balance.act_info8 : ' || p_per_ni_j_balance.act_info8);
11937     hr_utility.trace('p_per_ni_j_balance.act_info9 : ' || p_per_ni_j_balance.act_info9);
11938     hr_utility.trace('p_per_ni_j_balance.act_info10 : ' || p_per_ni_j_balance.act_info10);
11939 
11940 
11941 ---
11942     hr_utility.trace('p_per_ni_l_balance.assignment_id : ' || p_per_ni_l_balance.assignment_id);
11943     hr_utility.trace('p_per_ni_l_balance.act_info1 : ' || p_per_ni_l_balance.act_info1);
11944     hr_utility.trace('p_per_ni_l_balance.act_info2 : ' || p_per_ni_l_balance.act_info2);
11945     hr_utility.trace('p_per_ni_l_balance.act_info3 : ' || p_per_ni_l_balance.act_info3);
11946     hr_utility.trace('p_per_ni_l_balance.act_info4 : ' || p_per_ni_l_balance.act_info4);
11947     hr_utility.trace('p_per_ni_l_balance.act_info5 : ' || p_per_ni_l_balance.act_info5);
11948     hr_utility.trace('p_per_ni_l_balance.act_info6 : ' || p_per_ni_l_balance.act_info6);
11949     hr_utility.trace('p_per_ni_l_balance.act_info7 : ' || p_per_ni_l_balance.act_info7);
11950     hr_utility.trace('p_per_ni_l_balance.act_info8 : ' || p_per_ni_l_balance.act_info8);
11951     hr_utility.trace('p_per_ni_l_balance.act_info9 : ' || p_per_ni_l_balance.act_info9);
11952     hr_utility.trace('p_per_ni_l_balance.act_info10 : ' || p_per_ni_l_balance.act_info10);
11953 
11954 
11955 
11956         set_address_fields(l_archive_tab(1),l_archive_tab(0),l_archive_tab(2));
11957 
11958 		    -- Validating fetched Person,Address,Assignment details for FPS
11959         hr_utility.set_location('Calling Person Address validations', 10);
11960         pay_gb_rti_fps_validate.person_address_validations(p_assactid, p_effective_date, l_archive_tab,l_per_addr_val_flag);
11961         hr_utility.trace('person address' ||l_per_addr_val_flag);
11962 
11963          l_per_addr_val_flag  := 'N'; --for testing
11964 
11965         IF l_per_addr_val_flag  = 'Y' THEN -- If validation fails
11966           l_personaddr_val_err := TRUE;
11967         END IF;
11968 
11969         hr_utility.set_location('Calling FPS validations', 10);
11970         pay_gb_rti_fps_validate.assignment_validations(p_assactid, p_effective_date, l_archive_tab,l_fps_etext_asg_flag);
11971 
11972         IF l_fps_etext_asg_flag = 'Y' THEN -- If validation fails
11973           l_fps_val_err        := TRUE;
11974         END IF;
11975 
11976         hr_utility.set_location('After Calling FPS validations', 10);
11977         -- LOOP through all NIs
11978          --commented below For Loop whole code for testing
11979         FOR i_count IN 4..i
11980         LOOP
11981 
11982           hr_utility.set_location ('C7alling FPS NI validations', 10);
11983 
11984           pay_gb_rti_fps_validate.ni_validations(p_assactid, p_effective_date, l_archive_tab,i_count,l_fps_etext_ni_flag);
11985 
11986 --          l_fps_etext_ni_flag := 'N';  --for testing
11987 
11988           IF l_fps_etext_ni_flag = 'Y' THEN -- If validation fails
11989             l_fps_ni_val_err    := TRUE;
11990           END IF;
11991         END LOOP;
11992 
11993 
11994    hr_utility.set_location('After Calling FPS validations', 10);
11995 
11996 --        IF l_archive_person AND l_archive_addr AND l_archive_asg_det1 AND l_archive_asg_det2 THEN
11997         IF l_archive_person AND l_archive_addr AND l_archive_asg_det1 THEN   --for testing
11998 --          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.
11999           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.
12000             THEN
12001             hr_utility.set_location('Validation failed, raise error.',999);
12002             fnd_file.put_line(fnd_file.LOG,'Not Archiving');
12003             raise error_found;
12004           ELSE
12005             hr_utility.set_location('Validation successful, archive data.',999);
12006            if l_ni_rti_flag = 'Y' then
12007                ni_agg_ytd_sum(l_archive_tab,i,p_per_ni_a_balance,p_per_ni_b_balance,
12008                 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);
12009                insert_archive_row(p_assactid, p_effective_date,l_archive_tab);
12010            /* moved this code to action creation
12011                -- lock the pre payments action id with current fps assignment action id
12012                begin
12013                 hr_nonrun_asact.insint(p_assactid, l_prepay_asg_action_id);
12014                exception
12015                when dup_val_on_index then
12016                    hr_utility.set_location(sqlcode || '-' || sqlerrm,60);
12017                    hr_utility.set_location('Skip locking for retry.Locking action id-'||p_assactid || ' Locked action id-' || l_prepay_asg_action_id,60);
12018                end; */
12019            else
12020                hr_utility.set_location('Non NI Reporting asg: ' || l_asg_id, 999);
12021 
12022 	               hr_utility.set_location('Retrieve the ni reporting assignment for ' || l_asg_id ,1000);
12023 
12024                open csr_get_ni_rpt_asg(l_asg_id);
12025                fetch csr_get_ni_rpt_asg into l_ni_rpt_asg_id,l_ni_rpt_date;
12026                close csr_get_ni_rpt_asg;
12027                hr_utility.set_location('l_ni_rpt_asg_id: ' || l_ni_rpt_asg_id || ' l_ni_rpt_date: ' || l_ni_rpt_date,1000);
12028                hr_utility.set_location('NI reporting assignment for the assignment: ' || l_asg_id || 'is ' ||l_ni_rpt_asg_id ,1000);
12029 
12030                if  l_ni_rpt_asg_id is not null then
12031                   hr_utility.set_location(' l_ni_rpt_asg_id:' || l_ni_rpt_asg_id || ' g_pre_pact_id:' ||g_pre_pact_id ,1000);
12032                   -- check whether the RTI reporting assignment is processed in the current prepayment.
12033                   open csr_rti_rpt_proc_prepay(l_ni_rpt_asg_id,g_pre_pact_id);
12034                   fetch csr_rti_rpt_proc_prepay into l_rti_ni_proc_flag_1;
12035                   close csr_rti_rpt_proc_prepay;
12036                   hr_utility.set_location('l_rti_ni_proc_flag_1: ' || l_rti_ni_proc_flag_1,1000);
12037                   -- check whether the current asg_act_id is the max id
12038                   -- so that RTI asg is archived only ones when multiple non-rti asgs exists.
12039                   OPEN csr_ni_aggr_max_act_id (l_person_id, g_pre_pact_id);
12040                   FETCH csr_ni_aggr_max_act_id INTO l_ni_aggr_max_act_id;
12041                   CLOSE csr_ni_aggr_max_act_id;
12042                hr_utility.set_location('l_ni_aggr_max_act_id: ' || l_ni_aggr_max_act_id ,1000);
12043                hr_utility.set_location('l_last_asg_action_id: ' || l_last_asg_action_id ,1000);
12044                   if l_ni_aggr_max_act_id = l_last_asg_action_id and nvl(l_rti_ni_proc_flag_1,'N') <> 'Y' then
12045                   -- 0. Get the RTI NI Reporting assignment for the period.
12046                   -- 1. Store the NI YTD values of current Assignment in a temp variable.
12047                   -- 2. Make the NI YTD values 0.
12048                   -- 3. Get all the Previously archived values of NI Reporting assignment.
12049                   -- 4. Make the Period balances 0.
12050                   -- 5. Replace the NI YTD with the current processing NI YTD values.
12051                   -- 6. Archive this record.
12052                      hr_utility.set_location('fetching the rti rpt asg values: ',1000);
12053                      open csr_ni_asg_last_archived(l_ni_rpt_asg_id);
12054                      fetch csr_ni_asg_last_archived BULK COLLECT INTO l_archive_tab_ni_rpt;
12055                      close csr_ni_asg_last_archived;
12056                      record_count := l_archive_tab_ni_rpt.count;
12057                hr_utility.set_location('record_count: ' || record_count ,1000);
12058                      if l_archive_tab_ni_rpt.count > 0 then
12059 
12060                      for counter in 1..l_archive_tab_ni_rpt.count
12061                      loop
12062                         if l_archive_tab_ni_rpt(counter).action_info_category = 'GB_RTI_FPS_ASG_DET2' then
12063                          -- set 0 for other Run level balances in details 2 context.
12064                            l_archive_tab_ni_rpt(counter).act_info6 := 0;
12065                            l_archive_tab_ni_rpt(counter).act_info8 := 0;
12066                            l_archive_tab_ni_rpt(counter).act_info9 := 0;
12067                            l_archive_tab_ni_rpt(counter).act_info10 := 0;
12068                            l_archive_tab_ni_rpt(counter).act_info11 := 0;
12069                            l_archive_tab_ni_rpt(counter).act_info12 := 0;
12070                            l_archive_tab_ni_rpt(counter).act_info13 := 0;
12071                            l_archive_tab_ni_rpt(counter).act_info15 := 0;
12072                            l_archive_tab_ni_rpt(counter).act_info16 := 0;
12073                            l_archive_tab_ni_rpt(counter).act_info17 := 0;
12074                            l_archive_tab_ni_rpt(counter).act_info23 := 0;
12075                            l_archive_tab(counter).act_info29 := g_pre_pact_id||','||l_last_asg_action_id;
12076                         end if;
12077                         if l_archive_tab_ni_rpt(counter).action_info_category = 'GB_RTI_FPS_ASG_DET1' then
12078                            l_archive_tab(counter).act_info29 := g_pre_pact_id||','||l_last_asg_action_id;
12079                         end if;
12080                      end loop;
12081                      else --l_archive_tab_ni_rpt.count > 0
12082                           /*open csr_get_latest_asg_action(l_ni_rpt_asg_id);
12083                           fetch csr_get_latest_asg_action into l_ni_max_asg_act_id, l_ni_max_asg_act_date;
12084                           close csr_get_latest_asg_action;
12085                      */
12086                           select paa.assignment_action_id into l_ni_rpt_assact_id from  pay_assignment_actions paa
12087                           where paa.payroll_action_id = g_payroll_action_id
12088                           and paa.assignment_id = l_ni_rpt_asg_id;
12089                           hr_utility.set_location('Calling get_ni_only_asg_details:',1000);
12090                           get_ni_only_asg_details(l_ni_rpt_asg_id,
12091                                                   l_archive_tab_ni_rpt(1),
12092                                                   l_archive_tab_ni_rpt(2),
12093                                                    l_ni_rpt_assact_id);
12094                           -- after this make record_count := 2 as the next row in the table should store NI Values.
12095                           record_count := 2;
12096                      end if; --l_archive_tab_ni_rpt.count > 0
12097                hr_utility.set_location('p_per_ni_a_balance.act_info1: ' ||p_per_ni_a_balance.act_info1,1000);
12098 -- NI A
12099         				        if p_per_ni_a_balance.act_info1 is not null then
12100                               record_count := record_count +1;
12101                               l_archive_tab_ni_rpt(record_count).action_info_category := 'GB_RTI_FPS_NI_DET';
12102                               l_archive_tab_ni_rpt(record_count).assignment_id := l_ni_rpt_asg_id;
12103                 			        l_archive_tab_ni_rpt(record_count).act_info1 := 'A';
12104                 			        l_archive_tab_ni_rpt(record_count).act_info2 := 0;
12105                 			        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;
12106                       			  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;
12107 			                        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;
12108       			                  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;
12109             			            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;
12110                   		      	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;
12111                 			        l_archive_tab_ni_rpt(record_count).act_info9 := 0;
12112                 			        l_archive_tab_ni_rpt(record_count).act_info10 := 0;
12113 			                  end if;
12114                hr_utility.set_location('record_count: ' || record_count ,1000);
12115 -- NI D
12116                hr_utility.set_location('p_per_ni_d_balance.act_info1: ' || p_per_ni_d_balance.act_info1 ,1000);
12117         				        if p_per_ni_d_balance.act_info1 is not null then
12118                               record_count := record_count + 1;
12119                               l_archive_tab_ni_rpt(record_count).action_info_category := 'GB_RTI_FPS_NI_DET';
12120                 			        l_archive_tab_ni_rpt(record_count).act_info1 := 'D';
12121                               l_archive_tab_ni_rpt(record_count).assignment_id := l_ni_rpt_asg_id;
12122                 			        l_archive_tab_ni_rpt(record_count).act_info2 := 0;
12123                 			        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;
12124                       			  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;
12125 			                        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;
12126       			                  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;
12127             			            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;
12128                   		      	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;
12129                 			        l_archive_tab_ni_rpt(record_count).act_info9 := 0;
12130                 			        l_archive_tab_ni_rpt(record_count).act_info10 := 0;
12131 			                  end if;
12132                hr_utility.set_location('record_count: ' || record_count ,1000);
12133 
12134 -- NI B
12135                hr_utility.set_location('p_per_ni_b_balance.act_info1: ' || p_per_ni_b_balance.act_info1 ,1000);
12136         				        if p_per_ni_b_balance.act_info1 is not null then
12137                               record_count := record_count + 1;
12138                               l_archive_tab_ni_rpt(record_count).action_info_category := 'GB_RTI_FPS_NI_DET';
12139                 			        l_archive_tab_ni_rpt(record_count).act_info1 := 'B';
12140                               l_archive_tab_ni_rpt(record_count).assignment_id := l_ni_rpt_asg_id;
12141                 			        l_archive_tab_ni_rpt(record_count).act_info2 := 0;
12142                 			        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;
12143                       			  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;
12144 			                        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;
12145       			                  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;
12146             			            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;
12147                   		      	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;
12148                 			        l_archive_tab_ni_rpt(record_count).act_info9 := 0;
12149                 			        l_archive_tab_ni_rpt(record_count).act_info10 := 0;
12150 			                  end if;
12151                hr_utility.set_location('record_count: ' || record_count ,1000);
12152 -- NI C
12153                hr_utility.set_location('p_per_ni_c_balance.act_info1: ' || p_per_ni_c_balance.act_info1 ,1000);
12154         				        if p_per_ni_c_balance.act_info1 is not null then
12155                               record_count := record_count + 1;
12156                               l_archive_tab_ni_rpt(record_count).action_info_category := 'GB_RTI_FPS_NI_DET';
12157                 			        l_archive_tab_ni_rpt(record_count).act_info1 := 'C';
12158                               l_archive_tab_ni_rpt(record_count).assignment_id := l_ni_rpt_asg_id;
12159                 			        l_archive_tab_ni_rpt(record_count).act_info2 := 0;
12160                 			        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;
12161                       			  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;
12162 			                        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;
12163       			                  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;
12164             			            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;
12165                   		      	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;
12166                 			        l_archive_tab_ni_rpt(record_count).act_info9 := 0;
12167                 			        l_archive_tab_ni_rpt(record_count).act_info10 := 0;
12168 			                  end if;
12169                hr_utility.set_location('record_count: ' || record_count ,1000);
12170 
12171 -- NI E
12172                hr_utility.set_location('p_per_ni_e_balance.act_info1: ' || p_per_ni_e_balance.act_info1 ,1000);
12173         				        if p_per_ni_e_balance.act_info1 is not null then
12174                               record_count := record_count + 1;
12175                               l_archive_tab_ni_rpt(record_count).action_info_category := 'GB_RTI_FPS_NI_DET';
12176                 			        l_archive_tab_ni_rpt(record_count).act_info1 := 'E';
12177                               l_archive_tab_ni_rpt(record_count).assignment_id := l_ni_rpt_asg_id;
12178                 			        l_archive_tab_ni_rpt(record_count).act_info2 := 0;
12179                 			        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;
12180                       			  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;
12181 			                        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;
12182       			                  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;
12183             			            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;
12184                   		      	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;
12185                 			        l_archive_tab_ni_rpt(record_count).act_info9 := 0;
12186                 			        l_archive_tab_ni_rpt(record_count).act_info10 := 0;
12187 			                  end if;
12188                hr_utility.set_location('record_count: ' || record_count ,1000);
12189 
12190 -- NI J
12191                hr_utility.set_location('p_per_ni_j_balance.act_info1: ' || p_per_ni_j_balance.act_info1 ,1000);
12192         				        if p_per_ni_j_balance.act_info1 is not null then
12193                               record_count := record_count + 1;
12194                               l_archive_tab_ni_rpt(record_count).action_info_category := 'GB_RTI_FPS_NI_DET';
12195                 			        l_archive_tab_ni_rpt(record_count).act_info1 := 'J';
12196                               l_archive_tab_ni_rpt(record_count).assignment_id := l_ni_rpt_asg_id;
12197                 			        l_archive_tab_ni_rpt(record_count).act_info2 := 0;
12198                 			        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;
12199                       			  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;
12200 			                        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;
12201       			                  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;
12202             			            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;
12203                   		      	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;
12204                 			        l_archive_tab_ni_rpt(record_count).act_info9 := 0;
12205                 			        l_archive_tab_ni_rpt(record_count).act_info10 := 0;
12206 			                  end if;
12207                hr_utility.set_location('record_count: ' || record_count ,1000);
12208 
12209 -- NI L
12210                hr_utility.set_location('p_per_ni_l_balance.act_info1: ' || p_per_ni_l_balance.act_info1 ,1000);
12211         				        if p_per_ni_l_balance.act_info1 is not null then
12212                               record_count := record_count + 1;
12213                               l_archive_tab_ni_rpt(record_count).action_info_category := 'GB_RTI_FPS_NI_DET';
12214                 			        l_archive_tab_ni_rpt(record_count).act_info1 := 'L';
12215                               l_archive_tab_ni_rpt(record_count).assignment_id := l_ni_rpt_asg_id;
12216                 			        l_archive_tab_ni_rpt(record_count).act_info2 := 0;
12217                 			        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;
12218                       			  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;
12219 			                        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;
12220       			                  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;
12221             			            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;
12222                   		      	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;
12223                 			        l_archive_tab_ni_rpt(record_count).act_info9 := 0;
12224                 			        l_archive_tab_ni_rpt(record_count).act_info10 := 0;
12225 			                  end if;
12226                hr_utility.set_location('record_count: ' || record_count ,1000);
12227                /*  else -- else for l_archive_tab_ni_rpt.count > 0
12228                      -- get the latest prepayment and the payroll details.
12229                       select * from pay_payroll_actions ppa,
12230                       get_ni_only_asg_details(l_ni_rpt_asg_id,l_archive_tab_ni_rpt,
12231                  end if; -- end if for l_archive_tab_ni_rpt.count > 0
12232 */
12233 
12234     select paa.assignment_action_id into l_ni_rpt_assact_id from  pay_assignment_actions paa
12235     where paa.payroll_action_id = g_payroll_action_id
12236     and paa.assignment_id = l_ni_rpt_asg_id;
12237                hr_utility.set_location('l_ni_rpt_assact_id: ' || l_ni_rpt_assact_id ,1000);
12238                --         insert_archive_row(p_assactid, p_effective_date,l_archive_tab);
12239 
12240 
12241                         insert_archive_row_agg(p_assactid, p_effective_date,l_archive_tab_ni_rpt);
12242                         INSERT
12243                               INTO PAY_GB_FPS_DETAILS
12244                                 (
12245                                   ASSIGNMENT_ID,
12246                                   PERSON_ID,
12247                                   FPS_ASG_ACT_ID,
12248                                   FPS_PAY_ACT_ID,
12249                                   FPS_EFFECTIVE_DATE,
12250                                   PREPAY_ASG_ACT_ID,
12251                                   PREPAY_PAY_ACT_ID,
12252                                   PREPAY_EFFECTIVE_DATE,
12253                                   PAYROLL_ASG_ACT_ID,
12254                                   PAYROLL_PAY_ACT_ID,
12255                                   PAYROLL_EFFECTIVE_DATE
12256                                 )
12257                                 VALUES
12258                                 (
12259                                   l_ni_rpt_asg_id,
12260                                   l_person_id,
12261                                   l_ni_rpt_assact_id,
12262                                   g_payroll_action_id,
12263                                   g_fps_effective_date,
12264                                   l_prepay_asg_action_id,
12265                                   l_prepay_payroll_action_id,
12266                                   l_prepay_effective_date,
12267                                   l_last_asg_action_id,
12268                                   l_payroll_pact_id,
12269                                   l_last_effective_date
12270                                 );
12271                 end if; --l_ni_aggr_max_act_id = l_last_asg_action_id
12272               else
12273                      hr_utility.set_location('No NI reporting assignment for the assignment: ' || l_asg_id ,1000);
12274                      fnd_file.put_line(fnd_file.LOG,'No NI reporting assignment for the assignment: ' || l_asg_id);
12275 					 populate_run_msg(p_assactid, 'No NI reporting assignment for the assignment: '||l_assignment_number);
12276                      raise error_found;
12277                end if; -- l_ni_rpt_asg_id is not null
12278               -- make the NI YTD to 0.
12279                FOR k IN 4..i
12280                LOOP
12281                      if l_archive_tab(k).act_info1 is not null then
12282                       hr_utility.trace('NON RPT act_info1' || l_archive_tab(k).act_info1);
12283                       l_archive_tab(k).act_info3 := 0;
12284                       l_archive_tab(k).act_info4 := 0;
12285                       l_archive_tab(k).act_info5 := 0;
12286                       l_archive_tab(k).act_info6 := 0;
12287                       l_archive_tab(k).act_info7 := 0;
12288                       l_archive_tab(k).act_info8 := 0;
12289                      end if;
12290                END LOOP;
12291                insert_archive_row(p_assactid, p_effective_date,l_archive_tab);
12292            end if;
12293           END IF;
12294         ELSE
12295             hr_utility.set_location('Archiving Error - assignment action id ' || p_assactid ,999);
12296             raise error_found;
12297         END IF;
12298 /*    else   -- this else is for if l_ni_rti_flag = 'Y'
12299      g_ni_values(l_person_id).act_info_1 := l_archive_tab(i_count).act_info1;
12300         g_ni_values(l_person_id).act_info_2 := l_archive_tab(i_count).act_info2;
12301         g_ni_values(l_person_id).act_info_3 := l_archive_tab(i_count).act_info3;
12302         g_ni_values(l_person_id).act_info_4 := l_archive_tab(i_count).act_info4;
12303         g_ni_values(l_person_id).act_info_5 := l_archive_tab(i_count).act_info5;
12304         g_ni_values(l_person_id).act_info_6 := l_archive_tab(i_count).act_info6;
12305         g_ni_values(l_person_id).act_info_7 := l_archive_tab(i_count).act_info7;
12306         g_ni_values(l_person_id).act_info_8 := l_archive_tab(i_count).act_info8;
12307         g_ni_values(l_person_id).act_info_9 := l_archive_tab(i_count).act_info9;
12308         g_ni_values(l_person_id).act_info_10 := l_archive_tab(i_count).act_info10;
12309 
12310     end if;
12311 */
12312 end if; --nvl(l_rti_ni_proc_flag,'N') = 'Y'
12313 end if;   -- NI only Aggregation Logic ends here ; l_per_ni_agg_flag <> 'Y'
12314 
12315 
12316    hr_utility.set_location('Leaving: '||l_proc,999);
12317 end if; -- First Fps and First Fps Prepayment if ends
12318 
12319 EXCEPTION
12320 WHEN error_found THEN
12321   reset_flag('GB_RTI_ASG_DETAILS',g_reset_flag_type, p_assactid);
12322   fnd_file.put_line(fnd_file.LOG,'Errors found while archiving data.');
12323   raise_application_error(-20001,'Errors found while archiving data.');
12324 
12325 WHEN already_processed THEN
12326 	fnd_file.put_line (fnd_file.LOG,'Current Assignment '|| l_assignment_number ||' is already processed in an earlier FPS run. Hence, not processing now.');
12327 
12328 WHEN OTHERS THEN
12329     fnd_file.put_line(fnd_file.LOG,'An error encountered was - '||SQLERRM);
12330   	raise_application_error(-20001,'An error encountered was - '||SQLERRM);
12331 END archive_code;
12332 --
12333 --
12334 PROCEDURE deinitialization_code
12335   (
12336     pactid IN NUMBER
12337   )
12338 IS
12339   l_proc    CONSTANT VARCHAR2(50) := g_package || 'deinitialization_code';
12340   l_counter NUMBER;
12341   l_flag      VARCHAR2(1);
12342   l_exp EXCEPTION;
12343   errbuf varchar2(100);
12344   retcode number;
12345   l_econ varchar2(100);
12346   l_person_count number :=0;
12347   l_error_flag VARCHAR2(1);
12348   CURSOR csr_is_etext_report
12349   IS
12350     SELECT report_type
12351     FROM pay_payroll_actions pact
12352     WHERE pact.payroll_action_id = pactid;
12353   l_is_etext_report VARCHAR2(50);
12354   l_request_id fnd_concurrent_requests.request_id%TYPE;
12355   xml_layout BOOLEAN;
12356 
12357   -- Cursor to fetch Employer details
12358   CURSOR csr_payroll_details(pactid NUMBER)
12359   IS
12360     SELECT NVL(UPPER(hoi.org_information11),' ') sender_id,
12361       DECODE(SUBSTR(pact.legislative_parameters,instr(pact.legislative_parameters,'TEST=') + 5,1) ,'N',' ','Y','1') test_indicator,
12362       fnd_number.number_to_canonical(pact.request_id) request_id,
12363       NVL(upper(SUBSTR(ltrim(hoi.org_information3),1,35)),' ') employer_name,
12364       NVL(upper(SUBSTR(ltrim(SUBSTR(hoi.org_information1,4,11),'/'),1,10)),' ') tax_ref_no,
12365       lpad(SUBSTR(hoi.ORG_INFORMATION1,0,instr(hoi.ORG_INFORMATION1,'/')-1),3,0) tax_office_no,
12366       DECODE(PAY_GB_EOY_MAGTAPE.get_payroll_version, ' ', '0', PAY_GB_EOY_MAGTAPE.get_payroll_version) payroll_ver,
12367       (lpad(SUBSTR(hoi.ORG_INFORMATION6,0,instr(hoi.ORG_INFORMATION6,'P')-1),3,0)
12368       || 'P'
12369       || SUBSTR(hoi.ORG_INFORMATION6,instr(hoi.ORG_INFORMATION6,'P')     +1,1)
12370       || lpad(SUBSTR(hoi.ORG_INFORMATION6,instr(hoi.ORG_INFORMATION6,'P')+2,LENGTH(hoi.ORG_INFORMATION6)-3-(instr(hoi.ORG_INFORMATION6,'P')-1)),7,0)
12371       || SUBSTR(hoi.ORG_INFORMATION6,LENGTH(hoi.ORG_INFORMATION6),1) ) AS acc_ref_no,
12372       hoi.org_information7 econ_number,
12373       pact.business_group_id bus_grp_id,
12374       pact.action_parameter_group_id act_param_grp_id,
12375       org_information19 service_company
12376     FROM pay_payroll_actions pact,
12377       hr_organization_information hoi
12378     WHERE pact.payroll_action_id        =pactid
12379     AND pact.business_group_id          = hoi.organization_id
12380     AND hoi.org_information_context     = 'Tax Details References'
12381     AND NVL(hoi.org_information10,'UK') = 'UK'
12382     AND SUBSTR(pact.legislative_parameters,instr(pact.legislative_parameters,'TAX_REF=') + 8, instr(pact.legislative_parameters
12383       ||' ',' ', instr(pact.legislative_parameters,'TAX_REF=')                           +8) - instr(pact.legislative_parameters, 'TAX_REF=') - 8) = hoi.org_information1;
12384 
12385   CURSOR csr_parameter_info
12386   IS
12387     SELECT effective_date,
12388       business_group_id,
12389       SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters, 'TAX_REF'),1,3) tax_dist,
12390       SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'TAX_REF'),1,20) tax_ref,
12391       SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'SPLIT'),1,20) split,
12392       SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'PRE_PAY_ID'),1,20) pre_pay_id,
12393       SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'FIRST_FPS'),1,20) first_fps,
12394       SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'FIN_SUB'),1,20) final_submission,
12395       SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'TAX_PMT_MADE'),1,20) free_tax_payments_made,
12396       SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'THIRD_PARTY'),1,20) pay_to_third_party,
12397       SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'EXP_BEN_OTHER'),1,20) expenses_benefits_others,
12398       SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'OUTSIDE_UK'),1,20) employed_outside_uk,
12399       SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'P11D_DUE'),1,20) p11d_due,
12400       SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'HMRC_ADVAN'),1,20) hmrc_advance_received,
12401       SUBSTR(pay_gb_eoy_archive.get_parameter(legislative_parameters,'CIS_DEDUCT'),1,20) cis_deductions,
12402 	  substr(legislative_parameters,instr(legislative_parameters,'VERSION=')+8) version
12403     FROM pay_payroll_actions
12404     WHERE payroll_action_id = pactid;
12405 
12406   l_payroll_rec csr_payroll_details%rowtype;
12407   l_action_info_id          NUMBER(15);
12408   l_ovn                     NUMBER;
12409   l_final_submission_ceased VARCHAR2(1);
12410   l_final_submission_year   VARCHAR2(1);
12411   l_final_submission        VARCHAR2(50);
12412   l_negative_payment        VARCHAR2(10);
12413   l_parameter_info_rec csr_parameter_info%rowtype;
12414   ---------------------
12415   ---------------------
12416 
12417 PROCEDURE write_header(
12418     report_type VARCHAR2)
12419 IS
12420   l_token     VARCHAR2(255);
12421   l_addr1     VARCHAR2(255);
12422   l_addr2     VARCHAR2(255);
12423   l_addr3     VARCHAR2(255);
12424   l_addr4     VARCHAR2(255);
12425   l_form      VARCHAR2(40);
12426   l_tax_ref   VARCHAR2(20);
12427   l_urgent    VARCHAR2(2);
12428   l_test      VARCHAR2(2);
12429   l_temp      NUMBER;
12430   l_form_name VARCHAR2(100);
12431   l_payroll_name VARCHAR2(100);
12432   l_prepay_eff_date date;
12433 
12434   CURSOR csr_leg_param
12435   IS
12436     SELECT legislative_parameters para,
12437       fnd_number.number_to_canonical(request_id) control_id,
12438       report_type,
12439       business_group_id
12440     FROM pay_payroll_actions pact
12441     WHERE payroll_action_id = pactid;
12442 
12443   CURSOR csr_header_det(p_bus_id NUMBER, p_tax_ref VARCHAR2)
12444   IS
12445     SELECT NVL(hoi.org_information11,' ') sender_id,
12446       NVL(upper(hoi.org_information2),' ') hrmc_office,
12447       NVL(upper(hoi.org_information4),' ') er_addr,
12448       NVL(upper(hoi.org_information3),' ') er_name
12449     FROM hr_organization_information hoi
12450     WHERE hoi.organization_id           = p_bus_id
12451     AND hoi.org_information_context     = 'Tax Details References'
12452     AND NVL(hoi.org_information10,'UK') = 'UK'
12453     AND upper(hoi.org_information1)     = upper(p_tax_ref);
12454 
12455 CURSOR csr_payroll_details
12456   IS
12457     SELECT  ppf.PAYROLL_NAME , ppapre.EFFECTIVE_DATE
12458     from pay_payrolls_f ppf,pay_payroll_actions ppapre,pay_payroll_actions ppa
12459     WHERE ppa.payroll_action_id = pactid
12460     and ppf.payroll_id = SUBSTR(pay_gb_eoy_archive.get_parameter(ppa.legislative_parameters,'PAYROLL_ID'),1,20)
12461     and ppapre.payroll_action_id = SUBSTR(pay_gb_eoy_archive.get_parameter(ppa.legislative_parameters,'PRE_PAY_ID'),1,20);
12462 
12463   -- Cursor to fetch  Errored Records
12464   CURSOR get_asg_action_id_error
12465   IS
12466     SELECT DISTINCT paa.assignment_action_id asg_action_id,
12467       assignment_id
12468     FROM pay_payroll_actions ppa,
12469       pay_assignment_actions paa
12470     WHERE ppa.payroll_action_id = pactid -- pact_id
12471     AND paa.payroll_action_id   = ppa.payroll_action_id
12472     AND paa.action_status       = 'E';
12473 
12474 
12475 --CURSOR csr_err_msg(asg_action_id NUMBER)
12476 CURSOR csr_prepay_err_msg(asg_action_id NUMBER)
12477   IS
12478     SELECT DISTINCT line_text
12479     FROM pay_message_lines
12480     WHERE source_id = asg_action_id --9919881 --asg_action_id
12481     AND message_level <> 'W'-- p_message_level
12482     AND line_text like '%Pre payment is not run%'
12483     AND payroll_id  = 100;
12484 
12485   l_param csr_leg_param%rowtype;
12486   l_det csr_header_det%rowtype;
12487   l_start_date DATE;
12488   l_end_date DATE;
12489   l_err_msg varchar2(100);
12490 BEGIN
12491   OPEN csr_leg_param;
12492   FETCH csr_leg_param INTO l_param;
12493   CLOSE csr_leg_param;
12494 
12495   open csr_payroll_details;
12496   fetch csr_payroll_details into l_payroll_name,l_prepay_eff_date;
12497   close csr_payroll_details;
12498 
12499   l_token   := 'TAX_REF';
12500   l_temp    := instr(l_param.para,l_token);
12501   l_tax_ref := SUBSTR(l_param.para, l_temp + LENGTH(l_token) + 1, instr(l_param.para||' ',' ',l_temp)
12502                                                              - (l_temp + LENGTH(l_token) + 1));
12503   l_token   := 'TEST';
12504   l_temp    := instr(l_param.para,l_token);
12505   l_test    := SUBSTR(l_param.para, l_temp + LENGTH(l_token) + 1, instr(l_param.para||' ',' ',l_temp)
12506                                                              - (l_temp + LENGTH(l_token) + 1));
12507 
12508   OPEN csr_header_det(l_param.business_group_id, l_tax_ref);
12509   FETCH csr_header_det INTO l_det;
12510   CLOSE csr_header_det;
12511 
12512   l_addr1           := l_det.er_addr;
12513   IF LENGTH(l_addr1) > 35 THEN
12514     l_temp          := instr(l_addr1, ',', 34 - LENGTH(l_addr1));
12515     IF l_temp        = 0 THEN
12516       l_temp        := 35;
12517     END IF;
12518     l_addr2 := ltrim(SUBSTR(l_addr1, 1 + l_temp),' ,');
12519     l_addr1 := SUBSTR(l_addr1,1,l_temp);
12520   END IF;
12521   IF LENGTH(l_addr2) > 35 THEN
12522     l_temp          := instr(l_addr2, ',', 34 - LENGTH(l_addr2));
12523     IF l_temp        = 0 THEN
12524       l_temp        := 35;
12525     END IF;
12526     l_addr3 := ltrim(SUBSTR(l_addr2, 1 + l_temp),' ,');
12527     l_addr2 := SUBSTR(l_addr2,1,l_temp);
12528   END IF;
12529   IF LENGTH(l_addr3) > 35 THEN
12530     l_temp          := instr(l_addr3, ',', 34 - LENGTH(l_addr3));
12531     IF l_temp        = 0 THEN
12532       l_temp        := 35;
12533     END IF;
12534     l_addr3 := ltrim(SUBSTR(l_addr3, 1 + l_temp),' ,');
12535     l_addr4 := SUBSTR(l_addr3,1,l_temp);
12536   END IF;
12537 
12538   l_form      := 'RTI_FPS_REP';
12539   l_form_name :='Full Payment Submission';
12540 
12541     FOR action_id IN get_asg_action_id_error
12542     LOOP
12543       OPEN csr_prepay_err_msg(action_id.asg_action_id);
12544       FETCH csr_prepay_err_msg INTO l_err_msg;
12545 			exit when csr_prepay_err_msg%notfound;
12546 
12547       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.');
12548 --			exit when csr_prepay_err_msg%found;
12549       CLOSE csr_prepay_err_msg;
12550     END loop;
12551 
12552   fnd_file.put_line(fnd_file.output,' ');
12553   fnd_file.put_line(fnd_file.output,'EDI Transmission Report:');
12554   fnd_file.put_line(fnd_file.output,' ');
12555   fnd_file.put_line(fnd_file.output,rpad('Form Type : ',32) || l_form_name);
12556   fnd_file.put_line(fnd_file.output,rpad('Sender : ',32) || l_det.sender_id);
12557   fnd_file.put_line(fnd_file.output,rpad('Date : ',32) || TO_CHAR(sysdate, 'DD/MM/YYYY HH24:MI:SS'));
12558   fnd_file.put_line(fnd_file.output,rpad('Interchange Control Reference : ',32) || l_param.control_id);
12559   fnd_file.put_line(fnd_file.output,rpad('Test Transmission : ',32) || l_test);
12560   fnd_file.put_line(fnd_file.output,rpad('-',80,'-'));
12561   fnd_file.put_line(fnd_file.output,rpad('Employers PAYE Reference : ',32) || l_tax_ref);
12562   fnd_file.put_line(fnd_file.output,rpad('HRMC Office : ',32) || l_det.hrmc_office);
12563   fnd_file.put_line(fnd_file.output,rpad('Employer Name : ',32) || l_det.er_name);
12564   fnd_file.put_line(fnd_file.output,rpad('Employer Address : ',32) || l_addr1);
12565 
12566   IF LENGTH(l_addr2) > 0 THEN
12567     fnd_file.put_line(fnd_file.output,rpad(' ',32) || l_addr2);
12568   END IF;
12569   IF LENGTH(l_addr3) > 0 THEN
12570     fnd_file.put_line(fnd_file.output,rpad(' ',32) || l_addr3);
12571   END IF;
12572   IF LENGTH(l_addr4) > 0 THEN
12573     fnd_file.put_line(fnd_file.output,rpad(' ',32) || l_addr4);
12574   END IF;
12575 
12576   fnd_file.put_line(fnd_file.output,rpad('Payroll : ',32) || l_payroll_name);
12577   fnd_file.put_line(fnd_file.output,rpad('Prepayment Effective Date : ',32) || l_prepay_eff_date);
12578 
12579 END write_header;
12580 ---
12581 PROCEDURE write_sub_header(
12582     p_type      VARCHAR2,
12583     report_type VARCHAR2)
12584 IS
12585 BEGIN
12586   fnd_file.put_line(fnd_file.output,NULL);
12587   IF p_type = 'E' THEN
12588     fnd_file.put_line(fnd_file.output,'The following employments have completed with error');
12589   ELSIF p_type = 'W' THEN
12590     fnd_file.put_line(fnd_file.output,'The following employments have completed with warning');
12591   ELSE
12592     fnd_file.put_line(fnd_file.output,'The following employments have completed successfully');
12593   END IF;
12594 
12595   IF p_type = 'W' THEN -- warning records
12596     fnd_file.put_line(fnd_file.output,rpad('Assignment Number',19) || rpad('NI Number',11) || rpad('Employee Name', 51)
12597                       || rpad('Warning Messages',30));
12598   ELSIF p_type <> 'E' THEN --Completed records
12599     fnd_file.put_line(fnd_file.output,rpad('Assignment Number',19) || rpad('NI Number',11) || rpad('Employee Name', 51));
12600   ELSE -- errored records
12601     fnd_file.put_line(fnd_file.output,rpad('Assignment Number',19) || rpad('NI Number',11) || rpad('Employee Name', 51)
12602                       || rpad('Error Messages',30));
12603   END IF;
12604 
12605   IF p_type = 'W' THEN -- warning records
12606     fnd_file.put_line(fnd_file.output,rpad('-',18,'-') || ' ' || rpad('-',10,'-') || ' ' || rpad('-',50,'-') || ' '
12607                      || rpad('-',30,'-'));
12608   ELSIF p_type <> 'E' THEN -- Completed records
12609     fnd_file.put_line(fnd_file.output,rpad('-',18,'-') || ' ' || rpad('-',10,'-') || ' ' || rpad('-',50,'-'));
12610   ELSE -- errored records
12611     fnd_file.put_line(fnd_file.output,rpad('-',18,'-') || ' ' || rpad('-',10,'-') || ' ' || rpad('-',50,'-') || ' '
12612                      || rpad('-',30,'-'));
12613   END IF;
12614 END write_sub_header;
12615 ---
12616 PROCEDURE write_body(
12617     p_type VARCHAR2,
12618     pactid IN NUMBER,
12619     report_type VARCHAR2)
12620 IS
12621   l_count     NUMBER;
12622   i           NUMBER;
12623   l_temp      VARCHAR2(255);
12624   l_emp_count NUMBER;
12625   l_number    VARCHAR2(30);
12626   l_start_date DATE;
12627   l_end_date DATE;
12628   l_count_warns number;
12629   l_effective_date date;
12630 
12631   -- Cursor to fetch Completed records
12632   CURSOR get_asg_action_id
12633   IS
12634     SELECT DISTINCT paa.assignment_action_id asg_action_id,
12635       assignment_id
12636     FROM pay_payroll_actions ppa,
12637       pay_assignment_actions paa
12638     WHERE ppa.payroll_action_id = pactid -- pact_id
12639     AND paa.payroll_action_id   = ppa.payroll_action_id
12640     AND paa.action_status       = 'C';
12641 
12642   -- Cursor to fetch  Errored Records
12643   CURSOR get_asg_action_id_error
12644   IS
12645     SELECT DISTINCT paa.assignment_action_id asg_action_id,
12646       assignment_id
12647     FROM pay_payroll_actions ppa,
12648       pay_assignment_actions paa
12649     WHERE ppa.payroll_action_id = pactid -- pact_id
12650     AND paa.payroll_action_id   = ppa.payroll_action_id
12651     AND paa.action_status       = 'E';
12652 
12653   CURSOR get_person_details(c_assignment_id NUMBER)
12654   IS
12655 			SELECT DISTINCT pap.first_name f_name ,
12656       pap.middle_names m_name,
12657       pap.last_name l_name,
12658       pap.title title,
12659       paa.assignment_number emp_no,
12660       NVL(pap.national_identifier,'        ')ni_no,
12661       NVL(pap.employee_number,'    ') employee_number,
12662       TO_CHAR(paa.EFFECTIVE_START_DATE,'DD-MON-RRRR') start_date,
12663       paa.EFFECTIVE_END_DATE end_date, --to_char(paa.EFFECTIVE_END_DATE,'DD-MON-RRRR') end_date
12664       pap.person_id
12665     FROM per_all_assignments_f paa,
12666       per_assignment_status_types past,
12667       per_all_people_f pap
12668     WHERE paa.person_id                = pap.person_id
12669     AND paa.assignment_id              = c_assignment_id
12670     AND past.ASSIGNMENT_STATUS_TYPE_ID = paa.ASSIGNMENT_STATUS_TYPE_ID
12671     AND past.per_system_status        IN ('ACTIVE_ASSIGN', 'SUSP_ASSIGN') -- Added for Bug#13626488
12672      and    pap.effective_start_date =
12673        ( select max(pap2.effective_start_date) from
12674 				 per_all_people_f pap2
12675          where  pap2.person_id         = pap.person_id
12676          and    pap2.effective_start_date <= l_effective_date
12677        )
12678      and    paa.effective_start_date =
12679        ( select max(asg2.effective_start_date)
12680          from   per_all_assignments_f asg2
12681          where  asg2.assignment_id         = paa.assignment_id
12682          and    asg2.assignment_type       = 'E'
12683          and    ASSIGNMENT_STATUS_TYPE_ID = paa.ASSIGNMENT_STATUS_TYPE_ID
12684          and    asg2.effective_start_date <= l_effective_date
12685        )
12686 
12687     ORDER BY end_date DESC;
12688 
12689   -- Cursor to fetch error Messages from pay_message lines table
12690 --CURSOR csr_err_msg(asg_action_id NUMBER)
12691 CURSOR csr_err_msg(asg_action_id NUMBER)
12692   IS
12693     SELECT DISTINCT line_text
12694     FROM pay_message_lines
12695     WHERE source_id = asg_action_id
12696     AND message_level <> 'W'-- p_message_level
12697     AND payroll_id  = 100;
12698 
12699 --CURSOR csr_warn_msg(asg_action_id NUMBER)
12700 CURSOR csr_warn_msg(asg_action_id NUMBER)
12701   IS
12702     SELECT DISTINCT line_text
12703     FROM pay_message_lines
12704     WHERE source_id = asg_action_id
12705     AND message_level = 'W'
12706     AND payroll_id  = 100;
12707 
12708 cursor csr_get_prepayment_date(p_pre_pact_id number) is
12709 select EFFECTIVE_DATE from pay_payroll_actions where payroll_action_id = p_pre_pact_id;
12710 
12711   err_msg varchar2(255);--csr_err_msg%rowtype;
12712   et_asg_rec get_person_details%rowtype;
12713   asg_rec get_person_details%rowtype;
12714   l_et_temp VARCHAR2(255);
12715 BEGIN
12716   l_count := 0;
12717   l_count_warns := 0;
12718 open csr_get_prepayment_date(g_pre_pact_id);
12719 fetch csr_get_prepayment_date into l_effective_date;
12720 close csr_get_prepayment_date;
12721     fnd_file.put_line(fnd_file.LOG, 'l_effective_date: ' || l_effective_date);
12722   --Completed Records
12723   IF p_type        = 'ET'THEN
12724     FOR action_id IN get_asg_action_id
12725     LOOP
12726       OPEN get_person_details(action_id.assignment_id);
12727       FETCH get_person_details INTO et_asg_rec;
12728       CLOSE get_person_details;
12729       l_et_temp             := et_asg_rec.l_name || ', '|| et_asg_rec.title || ' ' || et_asg_rec.f_name || ' ' || et_asg_rec.m_name;
12730       IF et_asg_rec.end_date = fnd_date.canonical_to_date('4712/12/31 00:00:00') THEN
12731         fnd_file.put_line(fnd_file.output,rpad(et_asg_rec.emp_no, 18) || ' ' || rpad(et_asg_rec.ni_no ,10) || ' '
12732                           || rpad(l_et_temp,50) );
12733       ELSE
12734         fnd_file.put_line(fnd_file.output,rpad(et_asg_rec.emp_no, 18) || ' ' || rpad(et_asg_rec.ni_no ,10) || ' '
12735                           || rpad(l_et_temp,50));
12736       END IF;
12737       l_count := l_count + 1;
12738     END LOOP;
12739   END IF;
12740 
12741   -- Errored Records
12742   IF p_type        = 'E'THEN
12743     FOR action_id IN get_asg_action_id_error
12744     LOOP
12745       err_msg := ' ';
12746       -- Fetching details
12747       OPEN get_person_details(action_id.assignment_id);
12748       FETCH get_person_details INTO asg_rec;
12749       CLOSE get_person_details;
12750 
12751       OPEN csr_err_msg(action_id.asg_action_id);
12752       FETCH csr_err_msg INTO err_msg;
12753 			if csr_err_msg%notfound then
12754          SELECT LINE_TEXT into err_msg FROM pay_message_lines WHERE source_id = action_id.asg_action_id and rownum <=1;
12755       end if;
12756 
12757 	  l_error_flag := 'Y';
12758 
12759       l_temp             := asg_rec.l_name || ', '|| asg_rec.title || ' ' || asg_rec.f_name || ' ' || asg_rec.m_name;
12760       IF asg_rec.end_date = fnd_date.canonical_to_date('4712/12/31 00:00:00') THEN
12761         fnd_file.put_line(fnd_file.output,rpad(asg_rec.emp_no, 18) || ' ' || rpad(asg_rec.ni_no ,10) || ' ' || rpad(l_temp,50)
12762                           || ' ' || rpad(err_msg,120) ); -- error message
12763       ELSE
12764         fnd_file.put_line(fnd_file.output,rpad(asg_rec.emp_no, 18) || ' ' || rpad(asg_rec.ni_no ,10) || ' ' || rpad(l_temp,50)
12765                           || ' ' || rpad(err_msg,120) ); -- error message
12766       END IF;
12767 
12768       -- To print remaining error messgaes if any
12769       LOOP
12770         FETCH csr_err_msg INTO err_msg;
12771         EXIT
12772       WHEN csr_err_msg%notfound;
12773         fnd_file.put_line(fnd_file.output,rpad(' ',81,' ')||rpad(err_msg,120));
12774       END LOOP;
12775 
12776       CLOSE csr_err_msg;
12777       l_count := l_count + 1;
12778     END LOOP;
12779   END IF;
12780   fnd_file.put_line(fnd_file.output,NULL);
12781 
12782   -- Warning Records
12783   IF p_type        = 'W'THEN
12784 
12785     FOR action_id IN get_asg_action_id
12786     LOOP
12787       err_msg := ' ';
12788       -- Fetching details
12789       OPEN get_person_details(action_id.assignment_id);
12790       FETCH get_person_details INTO asg_rec;
12791       CLOSE get_person_details;
12792 
12793 --           fnd_file.put_line(fnd_file.LOG,'action_id.asg_action_id: '||action_id.asg_action_id);
12794 
12795       OPEN csr_warn_msg(action_id.asg_action_id);
12796       FETCH csr_warn_msg INTO err_msg;
12797 
12798 --           fnd_file.put_line(fnd_file.LOG,'action_id.asg_action_id: '||action_id.asg_action_id);
12799 
12800 /*			if csr_err_msg%notfound then
12801          SELECT LINE_TEXT into err_msg FROM pay_message_lines WHERE source_id = action_id.asg_action_id
12802             AND MESSAGE_LEVEL = 'W' and rownum <=1;
12803       end if;
12804 */
12805 
12806 			IF csr_warn_msg%NOTFOUND THEN
12807          NULL;
12808       ELSE
12809       l_temp             := asg_rec.l_name || ', '|| asg_rec.title || ' ' || asg_rec.f_name || ' ' || asg_rec.m_name;
12810       IF asg_rec.end_date = fnd_date.canonical_to_date('4712/12/31 00:00:00') THEN
12811         fnd_file.put_line(fnd_file.output,rpad(asg_rec.emp_no, 18) || ' ' || rpad(asg_rec.ni_no ,10) || ' ' || rpad(l_temp,50)
12812                           || ' ' || rpad(err_msg,100) );
12813       ELSE
12814         fnd_file.put_line(fnd_file.output,rpad(asg_rec.emp_no, 18) || ' ' || rpad(asg_rec.ni_no ,10) || ' ' || rpad(l_temp,50)
12815                           || ' ' || rpad(err_msg,100) );
12816       END IF;
12817       l_count_warns := l_count_warns + 1;
12818       END IF;
12819       CLOSE csr_warn_msg;
12820 
12821     END LOOP;
12822 
12823   END IF;
12824   fnd_file.put_line(fnd_file.output,NULL);
12825 
12826   IF p_type = 'E' THEN
12827     fnd_file.put_line(fnd_file.output,'Total Number of employments completed with error : ' || l_count);
12828   ELSIF p_type = 'W' THEN
12829     fnd_file.put_line(fnd_file.output,'Total Number of employments completed with warning : ' || l_count_warns);
12830   ELSE
12831     fnd_file.put_line(fnd_file.output,'Total Number of employments completed successfully :' || l_count);
12832   END IF;
12833   l_counter := l_counter + l_count;
12834 END write_body;
12835 ---
12836 PROCEDURE write_footer
12837 IS
12838 
12839   CURSOR get_person_count
12840   IS
12841     SELECT COUNT(DISTINCT(paaf.person_id))
12842     FROM pay_payroll_actions ppa,
12843       pay_assignment_actions paa,
12844       per_all_assignments_f paaf
12845     WHERE ppa.payroll_action_id = pactid -- pact_id
12846     AND paa.payroll_action_id   = ppa.payroll_action_id
12847     AND paa.action_status       = 'C'
12848     AND paaf.assignment_id      = paa.assignment_id;
12849 
12850 --l_person_count NUMBER;
12851 
12852 BEGIN
12853   OPEN get_person_count;
12854   FETCH get_person_count INTO l_person_count;
12855   CLOSE get_person_count;
12856 
12857   fnd_file.put_line(fnd_file.output,NULL);
12858   fnd_file.put_line(fnd_file.output,'Total Number of employments : ' || l_counter);
12859   fnd_file.put_line(fnd_file.output,NULL);
12860   fnd_file.put_line(fnd_file.output,'Total Number of employees successfully processed : ' || l_person_count);
12861 END write_footer;
12862 ---------------------
12863 BEGIN
12864   hr_utility.trace('Entering deinit: '||l_proc);
12865 
12866    -- To avoid re-archiving while Retry
12867    delete from pay_action_information pai
12868    where pai.action_context_id = pactid
12869    and pai.action_context_type = 'PA'
12870    and pai.action_information_category in ('RTI PAYROLL INFO');
12871 
12872    delete from pay_action_information pai
12873    where pai.action_context_id = pactid
12874    and pai.action_context_type = 'PA'
12875    and pai.action_information_category in ('GB_RTI_FPS_EXTRA_DET');
12876 
12877   OPEN csr_payroll_details(pactid);
12878   FETCH csr_payroll_details INTO l_payroll_rec;
12879   CLOSE csr_payroll_details;
12880 
12881   OPEN csr_parameter_info;
12882   FETCH csr_parameter_info INTO l_parameter_info_rec;
12883   CLOSE csr_parameter_info;
12884 
12885   l_final_submission_year                    := NULL;
12886   l_final_submission_ceased                  := NULL;
12887 
12888   IF(l_parameter_info_rec.final_submission    = 'YYEAR') THEN
12889     l_final_submission_year                  := 'Y';
12890     l_final_submission                       := 'Yes - Final for the Year';
12891   elsif(l_parameter_info_rec.final_submission = 'YCEAS') THEN
12892     l_final_submission_ceased                := 'Y';
12893     l_final_submission                       := 'Yes - Final for Ceased PAYE Ref';
12894   else l_final_submission := 'NO';
12895   END IF;
12896 
12897   l_econ := l_payroll_rec.econ_number;
12898 
12899   --Footer Validations
12900   pay_gb_rti_fps_validate.footer_validations(l_payroll_rec.econ_number,l_final_submission,l_flag);
12901 
12902   pay_balance_pkg.set_context('PAYROLL_ACTION_ID',pactid);
12903   hr_utility.set_location('l_payroll_rec.bus_grp_id   = ' || l_payroll_rec.bus_grp_id,10);
12904   hr_utility.set_location('l_payroll_rec.act_param_grp_id   = ' || l_payroll_rec.act_param_grp_id,20);
12905   hr_utility.set_location('l_sender_id = '||l_payroll_rec.sender_id,30);
12906   hr_utility.set_location('l_test_indicator = '||l_payroll_rec.test_indicator,40);
12907   hr_utility.set_location('l_request_id = '||l_payroll_rec.request_id,50);
12908   hr_utility.set_location('g_start_year = '||g_start_year,60);
12909 
12910   hr_utility.set_location('Archiving RTI PAYROLL INFO',60);
12911 
12912   pay_action_information_api.create_action_information ( p_action_information_id => l_action_info_id ,
12913                                                          p_action_context_id => pactid ,
12914                                                          p_action_context_type => 'PA' ,
12915                                                          p_object_version_number => l_ovn ,
12916                                                          p_source_id => NULL ,
12917                                                          p_source_text => NULL ,
12918                                                          p_action_information_category => 'RTI PAYROLL INFO' ,
12919                                                          p_action_information1 => pactid ,
12920                                                          p_action_information3 => NULL ,
12921                                                          p_action_information4 => l_payroll_rec.employer_name ,
12922                                                          p_action_information6 => l_payroll_rec.tax_office_no ,
12923                                                          p_action_information7 => l_payroll_rec.tax_ref_no ,
12924                                                          p_action_information8 => l_payroll_rec.payroll_ver ,
12925                                                          p_action_information11 => l_payroll_rec.acc_ref_no ,
12926                                                          p_action_information12 => l_payroll_rec.sender_id ,
12927                                                          p_action_information13 => l_payroll_rec.test_indicator ,
12928                                                          p_action_information14 => TO_CHAR(l_payroll_rec.request_id),
12929                                                          p_action_information15 => to_char(g_end_year,'RRRR'));
12930   ---
12931   pay_action_information_api.create_action_information ( p_action_information_id => l_action_info_id ,
12932                                                          p_action_context_id => pactid ,
12933                                                          p_action_context_type => 'PA' ,
12934                                                          p_object_version_number => l_ovn ,
12935                                                          p_source_id => NULL ,
12936                                                          p_source_text => NULL ,
12937                                                          p_action_information_category => 'GB_RTI_FPS_EXTRA_DET' ,
12938                                                          p_action_information1 => l_final_submission_ceased ,
12939                                                          p_action_information2 => l_final_submission_year ,
12940                                                          p_action_information3 => l_econ ,
12941                                                          p_action_information4 => l_parameter_info_rec.free_tax_payments_made ,
12942                                                          p_action_information5 => l_parameter_info_rec.expenses_benefits_others ,
12943                                                          p_action_information6 => l_parameter_info_rec.employed_outside_uk ,
12944                                                          p_action_information7 => l_parameter_info_rec.pay_to_third_party ,
12945                                                          p_action_information8 => l_parameter_info_rec.p11d_due ,
12946                                                          p_action_information9 => l_payroll_rec.service_company);
12947   ---
12948   OPEN csr_is_etext_report;
12949   FETCH csr_is_etext_report INTO l_is_etext_report;
12950   CLOSE csr_is_etext_report;
12951 
12952   l_counter := 0;
12953   write_header(l_is_etext_report);
12954   write_sub_header('C',l_is_etext_report);
12955   write_body('ET',pactid,l_is_etext_report);
12956   write_sub_header('E',l_is_etext_report);
12957   write_body('E',pactid,l_is_etext_report);
12958   write_sub_header('W',l_is_etext_report);
12959   write_body('W',pactid,l_is_etext_report);
12960   write_footer;
12961 	--Footer Validations
12962 	if l_flag = 'Y' then
12963 	PAY_GB_FPS_NI_AND_OTHERS.restored(pactid);
12964 	raise l_exp;
12965 	end if;
12966 
12967   if l_parameter_info_rec.version = 'Pre October' then
12968     l_negative_payment := 'N';
12969   else
12970     l_negative_payment := 'Y';
12971   end if;
12972 
12973   /*if(l_error_flag = 'Y') then
12974 	  	raise_application_error(-20001,'Errored assignments exists while processing FPS Process.');
12975   end if;
12976 */
12977   -- For Spawning the output Concurrent Program
12978   hr_utility.set_location('Spawning RTI FPS output process',1);
12979   xml_layout     := FND_REQUEST.ADD_LAYOUT('PAY','PYGBRTIFPSOP','en','US','ETEXT');
12980 
12981 
12982   IF xml_layout   = true and g_validation_check = 'Y' and l_person_count <> 0 THEN
12983     l_request_id := fnd_request.submit_request (application => 'PAY'
12984                                                 ,program => 'PYGBRTIFPSOP'
12985                                                 ,argument1 => pactid     --Process Name
12986                                                 ,argument2 => l_negative_payment
12987 						);
12988     COMMIT;
12989     --check for process submit error
12990     IF l_request_id = 0 THEN
12991       hr_utility.set_location('Error spawning output process',1);
12992     END IF;
12993 
12994   END IF;
12995   hr_utility.set_location('Leaving: '||l_proc,999);
12996 
12997 
12998 
12999   -- For Spawning the Reconciliation Concurrent Program
13000   hr_utility.set_location('Spawning RTI FPS Reconciliation process',1);
13001   xml_layout     := FND_REQUEST.ADD_LAYOUT('PAY','PYGBFPSREC','en','US','PDF');
13002 
13003 
13004   IF xml_layout   = true and g_validation_check = 'Y' and l_person_count <> 0 THEN
13005     l_request_id := fnd_request.submit_request (application => 'PAY'
13006                                                 ,program => 'PYGBFPSREC'
13007                                                 ,argument1 => pactid     --Process Name
13008                                                -- ,argument2 => l_negative_payment
13009 						);
13010     COMMIT;
13011     --check for process submit error
13012     IF l_request_id = 0 THEN
13013       hr_utility.set_location('Error spawning Reconciliation process',1);
13014     END IF;
13015 
13016   END IF;
13017   hr_utility.set_location('Leaving: '||l_proc,999);
13018 /*if(l_error_flag = 'Y') then
13019 	  	raise_application_error(-20001,'Errored assignments exists while processing FPS Process.');
13020   end if;
13021 */
13022 EXCEPTION
13023 	When l_exp then
13024     fnd_file.put_line(fnd_file.LOG,'Errors found while archiving data.');
13025 		raise_application_error(-20001,'Errors found while archiving data.');
13026 END deinitialization_code;
13027 --
13028 END PAY_GB_RTI_FPS;