DBA Data[Home] [Help]

PACKAGE BODY: APPS.PAY_NO_EOY_ARCHIVE

Source


1 PACKAGE BODY pay_no_eoy_archive AS
2  /* $Header: pynoeoya.pkb 120.16.12020000.12 2013/02/08 05:35:17 smeduri ship $ */
3  --
4  l_package_name CONSTANT VARCHAR2(30) := 'pay_no_eoy_archive';
5  --
6  --
7  g_clob CLOB;
8  -- -----------------------------------------------------------------------------
9  -- Data types.
10  -- -----------------------------------------------------------------------------
11  --
12  TYPE t_xml_element_rec IS RECORD
13   (tagname  VARCHAR2(100)
14   ,tagvalue VARCHAR2(500)
15   ,tagtype  VARCHAR2(1)
16   ,tagattrb VARCHAR2(500));
17  --
18  TYPE t_xml_element_table IS TABLE OF t_xml_element_rec INDEX BY BINARY_INTEGER;
19  --
20  TYPE t_number_table IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
21  --
22  TYPE t_ni_zones_rec IS RECORD
23   (ni_zone t_number_table
24   ,total   NUMBER);
25  --
26  TYPE t_le_si_bal_rec IS RECORD
27   (si_status                      VARCHAR2(10)
28   ,tax                            NUMBER
29   ,emp_contr_reimb_spcl_base      NUMBER
30   ,emp_contr_spcl_pct_base        NUMBER
31   ,emp_contr_spcl_pct             NUMBER
32   ,emp_contr_spcl                 NUMBER
33   ,pension                 t_ni_zones_rec
34   ,emp_contr               t_ni_zones_rec
35   ,emp_contr_over62        t_ni_zones_rec);
36  --
37  TYPE t_le_si_bal_table IS TABLE OF t_le_si_bal_rec INDEX BY BINARY_INTEGER;
38  --
39  TYPE fixed_code_rec IS RECORD (fixed_code       VARCHAR2(20)
40                                ,status           NUMBER
41 			       ,Amount_Value     VARCHAR2(50)
42 			       ,Addl_Value       VARCHAR2(50)
43 			       ,displayed        NUMBER);
44  --
45  TYPE fixed_code     IS TABLE OF  fixed_code_rec INDEX BY BINARY_INTEGER;
46  --
47  TYPE code_616_rec   IS RECORD (TRN       VARCHAR2(60)
48                                ,Country   VARCHAR2(60)
49                                ,Pay_Value NUMBER
50                                ,Days      NUMBER
51                                ,Per_Diem  NUMBER);
52  --
53  TYPE code_616       IS TABLE OF  code_616_rec   INDEX BY BINARY_INTEGER;
54  --
55  TYPE summary_code_orid_rec IS RECORD (orid_value       VARCHAR2(50)
56                                        ,info_data         VARCHAR2(100)
57 			               ,info_prompt       VARCHAR2(100)
58 			               ,info_datatype      VARCHAR2(50));
59  --
60  TYPE summary_code_orid     IS TABLE OF  summary_code_orid_rec INDEX BY BINARY_INTEGER;
61  --
62  --
63  -- -----------------------------------------------------------------------------
64  -- Global variables.
65  -- -----------------------------------------------------------------------------
66  --
67  g_xml_element_table     t_xml_element_table;
68  g_empty_rep_code_rec    t_rep_code_rec;
69  g_empty_rep_code_table  t_rep_code_table;
70  g_empty_le_si_bal_table t_le_si_bal_table;
71  g_fixed_code            fixed_code;
72  g_summary_code_orid     summary_code_orid;
73  g_payroll_action_id     NUMBER;
74  g_business_group_id     NUMBER;
75  g_legal_employer_id     NUMBER;
76  g_report_date           DATE;
77  --
78  --
79  -- -----------------------------------------------------------------------------
80  -- Localisation delivered support for extracting specific reporting codes.
81  --
82  -- Needs to call the procedure with following parameter:-
83  --
84  -- Procedure XYZ
85  --  (p_assignment_action_id   IN NUMBER
86  --  ,p_reporting_code         IN VARCHAR2
87  --  ,p_report_date            IN DATE);
88  --
89  -- Needs to populate the archive as follows:-
90  --
91  --  pay_action_information_api.create_action_information
92  --  (p_action_context_type         => 'AAP'
93  --  ,p_action_context_id           => p_assignment_action_id
94  --  ,p_action_information_id       => l_act_inf_id
95  --  ,p_object_version_number       => l_ovn
96  --  ,p_effective_date              => p_report_date
97  --  ,p_action_information_category => 'EMEA REPORT INFORMATION'
98  --  ,p_action_information1         => 'ASG_REP_CODE_INFO'
99  --  ,p_action_information2         => p_reporting_code
100  --  ,p_action_information3         => <amount>
101  --  ,p_action_information4         => <info1>
102  --  ,p_action_information5         => <info2>
103  --  ,p_action_information6         => <info3>
104  --  ,p_action_information7         => <info4>
105  --  ,p_action_information8         => <info5>
106  --  ,p_action_information9         => <info6>
107  --  ,p_action_information10        => <Seaman Component status>
108  --  ,p_action_information11         => <info7>		--2009 changes
109  --  ,p_action_information12         => <info8>		--2009 changes
110  --  ,p_action_information13         => <info9>		--2009 changes
111  --  ,p_action_information14         => <info10>	--2009 changes
112  --);
113  -- -----------------------------------------------------------------------------
114  --
115  PROCEDURE extract_reporting_code
116  (p_assignment_action_id IN NUMBER
117  ,p_reporting_code       IN VARCHAR2
118  ,p_report_date          IN DATE) IS
119   --
120   l_act_inf_id NUMBER;
121   l_ovn        NUMBER;
122   --
123  BEGIN
124   NULL;
125  END extract_reporting_code;
126  --
127  --
128  -- -----------------------------------------------------------------------------
129  -- Localisation delivered support for collating specific reporting codes.
130  --
131  -- Needs to call the procedure with following parameter:-
132  --
133  -- PROCEDURE collate_reporting_code
134  -- (p_payroll_action_id IN NUMBER
135  -- ,p_legal_employer_id IN VARCHAR2
136  -- ,p_reporting_code    IN VARCHAR2) IS
137  --
138  --
139  -- Cursor to retrieve reporting code informastion to be collated:-
140  --
141  --  CURSOR csr_REPORTING_CODES
142  --          (p_payroll_action_id IN NUMBER
143  --          ,p_legal_employer_id IN VARCHAR2
144  --         ,p_reporting_code    IN VARCHAR2) IS
145  --   SELECT asg_act.action_information5  person_id
146  --         ,asg_act.action_information6  tax_municipality
147  --         ,TO_NUMBER(rep_cde.action_information3)  amount
148  --   FROM   pay_assignment_actions paa
149  --         ,pay_action_information asg_act
150  --         ,pay_action_information rep_cde
151  --   WHERE  paa.payroll_action_id               = p_payroll_action_id
152  --     AND  asg_act.action_context_type         = 'AAP'
153  --     AND  asg_act.action_context_id           = paa.assignment_action_id
154  --     AND  asg_act.action_information_category = 'EMEA REPORT INFORMATION'
155  --     AND  asg_act.action_information1         = 'ASG_ACT_INFO'
156  --     AND  asg_act.action_information2         = p_legal_employer_id
157  --     AND  rep_cde.action_context_type         = 'AAP'
158  --     AND  rep_cde.action_context_id           = asg_act.action_context_id
159  --     AND  rep_cde.action_information_category = 'EMEA REPORT INFORMATION'
160  --     AND  rep_cde.action_information1         = 'ASG_REP_CODE_INFO'
161  --     AND  rep_cde.action_information2         = p_reporting_code;
162  --
163  -- Needs to populate the archive as follows:-
164  --
165  --  pay_action_information_api.create_action_information
166  --  (p_action_context_type         => 'PA'
167  --  ,p_action_context_id           => p_payroll_action_id
168  --  ,p_action_information_id       => l_act_inf_id
169  --  ,p_object_version_number       => l_ovn
170  --  ,p_effective_date              => p_report_date
171  --  ,p_action_information_category => 'EMEA REPORT INFORMATION'
172  --  ,p_action_information1         => 'AUDIT_REP_SUMMARY'
173  --  ,p_action_information2         => p_legal_employer_id
174  --  ,p_action_information3         => <person ID>
175  --  ,p_action_information4         => p_reporting_code
176  --  ,p_action_information5         => <amount>
177  --  ,p_action_information6         => <info1>
178  --  ,p_action_information7         => <info2>
179  --  ,p_action_information8         => <info3>
180  --  ,p_action_information9         => <info4>
181  --  ,p_action_information10        => <info5>
182  --  ,p_action_information11        => <info6>
183  --  ,p_action_information12        => <tax_municipality>
184  --  ,p_action_information13        => <Seaman Component status>
185  --  ,p_action_information14        => <info7>		--2009 changes
186  --  ,p_action_information15        => <info8>		--2009 changes
187  --  ,p_action_information16        => <info9>		--2009 changes
188  --  ,p_action_information17        => <info10>		--2009 changes
189  --);
190  -- -----------------------------------------------------------------------------
191  --
192 
193  PROCEDURE collate_reporting_code
194  (p_payroll_action_id IN NUMBER
195  ,p_legal_employer_id IN VARCHAR2
196  ,p_reporting_code    IN VARCHAR2) IS
197   --
198   l_act_inf_id NUMBER;
199   l_ovn        NUMBER;
200   --
201  BEGIN
202   NULL;
203  END collate_reporting_code;
204  --
205  --
206  -- -----------------------------------------------------------------------------
207  -- Get the correct characterset for XML generation
208  -- -----------------------------------------------------------------------------
209  --
210  PROCEDURE set_currency_mask(p_business_group_id  IN NUMBER
211                              ,lg_format_mask      OUT NOCOPY VARCHAR2) IS
212   -- Cursor to retrieve Currency
213     CURSOR csr_currency IS
214     SELECT org_information10
215     FROM   hr_organization_information
216     WHERE  organization_id = p_business_group_id
217     AND    org_information_context = 'Business Group Information';
218     --
219     l_currency VARCHAR2(40);
220     --
221   BEGIN
222   --
223     OPEN csr_currency;
224     FETCH csr_currency into l_currency;
225     CLOSE csr_currency;
226     --
227     lg_format_mask := FND_CURRENCY.GET_FORMAT_MASK(l_currency,40);
228     lg_format_mask := nvl (lg_format_mask,'FM9G999G999G999G990D00');
229     --
230   EXCEPTION WHEN OTHERS THEN
231     lg_format_mask := nvl (lg_format_mask,'FM9G999G999G999G990D00');
232     --
233  END set_currency_mask;
234  --
235  --
236  -- -----------------------------------------------------------------------------
237  -- Get the correct characterset for XML generation
238  -- -----------------------------------------------------------------------------
239  --
240  FUNCTION get_IANA_charset RETURN VARCHAR2 IS
241    CURSOR csr_get_iana_charset IS
242      SELECT tag
243        FROM fnd_lookup_values
244       WHERE lookup_type = 'FND_ISO_CHARACTER_SET_MAP'
245         AND lookup_code = SUBSTR(USERENV('LANGUAGE'),
246                                     INSTR(USERENV('LANGUAGE'), '.') + 1)
247         AND language = 'US';
248  --
249   lv_iana_charset fnd_lookup_values.tag%type;
250  BEGIN
251    OPEN csr_get_iana_charset;
252      FETCH csr_get_iana_charset INTO lv_iana_charset;
253    CLOSE csr_get_iana_charset;
254    RETURN (lv_iana_charset);
255  END get_IANA_charset;
256  --
257  --
258  -- -----------------------------------------------------------------------------
259  -- Takes XML element from a table and puts them into a CLOB.
260  -- -----------------------------------------------------------------------------
261  --
262  PROCEDURE write_to_clob
263  (p_clob OUT NOCOPY CLOB) IS
264   --
265 --  l_xml_element_template0 VARCHAR2(20) := '<TAG>VALUE</TAG>';
266 --  l_xml_element_template1 VARCHAR2(30) := '<TAG><![CDATA[VALUE]]></TAG>';
267 --  l_xml_element_template2 VARCHAR2(10) := '<TAG>';
268 --  l_xml_element_template3 VARCHAR2(10) := '</TAG>';
269   l_str1                  VARCHAR2(80) ;
270   l_str2                  VARCHAR2(20) := '</EOY> </ROOT>';
271   l_xml_element           VARCHAR2(800);
272   l_clob                  CLOB;
273   --
274  BEGIN
275   --
276 --  l_str1 := '<?xml version="1.0" encoding="UTF-8"?> <ROOT> <EOY>';
277   -- l_str1 := '<?xml version="1.0" encoding="' || get_IANA_charset || '"?> <ROOT> <EOY>';
278   l_str1 := '<?xml version="1.0" encoding="' || get_IANA_charset || '"?>' ;
279 
280   dbms_lob.createtemporary(l_clob, FALSE, DBMS_LOB.CALL);
281   dbms_lob.open(l_clob, DBMS_LOB.LOB_READWRITE);
282   --
283   dbms_lob.writeappend(l_clob, LENGTH(l_str1), l_str1);
284   --
285   IF g_xml_element_table.COUNT > 0 THEN
286   --
287    FOR table_counter IN g_xml_element_table.FIRST .. g_xml_element_table.LAST LOOP
288    --
289     IF g_xml_element_table(table_counter).tagvalue = '_START_' THEN
290       IF g_xml_element_table(table_counter).tagattrb IS NOT NULL THEN
291       l_xml_element := '<' || g_xml_element_table(table_counter).tagname || ' '
292                          || g_xml_element_table(table_counter).tagattrb ||'>';
293 
294        ELSE
295        l_xml_element := '<' || g_xml_element_table(table_counter).tagname || '>';
296 
297        END IF;
298 
299     ELSIF g_xml_element_table(table_counter).tagvalue = '_END_' THEN
300      l_xml_element := '</' || g_xml_element_table(table_counter).tagname || '>';
301 
302     ELSIF g_xml_element_table(table_counter).tagattrb IS NOT NULL THEN
303        IF g_xml_element_table(table_counter).tagtype IS NULL THEN
304        l_xml_element := '<' || g_xml_element_table(table_counter).tagname  || ' '
305                           || g_xml_element_table(table_counter).tagattrb ||
306                       '><![CDATA[' || g_xml_element_table(table_counter).tagvalue ||
307                       ']]></' || g_xml_element_table(table_counter).tagname || '>';
308 
309        ELSIF g_xml_element_table(table_counter).tagtype = 'A' THEN
310       l_xml_element := '<' || g_xml_element_table(table_counter).tagname || ' '
311                           || g_xml_element_table(table_counter).tagattrb ||
312                       '>' || g_xml_element_table(table_counter).tagvalue ||
313                       '</'|| g_xml_element_table(table_counter).tagname || '>';
314        END IF;
315 
316      ELSIF g_xml_element_table(table_counter).tagattrb IS NULL THEN
317      l_xml_element := '<' || g_xml_element_table(table_counter).tagname ||
318                       '><![CDATA[' || g_xml_element_table(table_counter).tagvalue ||
319                      ']]></' || g_xml_element_table(table_counter).tagname || '>';
320 
321 
322     END IF;
323     --
324     dbms_lob.writeappend(l_clob, LENGTH(l_xml_element), l_xml_element);
325    --
326    END LOOP;
327   --
328   END IF;
329   --
330   -- dbms_lob.writeappend(l_clob, LENGTH(l_str2), l_str2);
331   --
332   p_clob := l_clob;
333   --
334   EXCEPTION
335    WHEN OTHERS THEN
336      --Fnd_file.put_line(FND_FILE.LOG,'## SQLERR ' || sqlerrm(sqlcode));
337      hr_utility.set_location(sqlerrm(sqlcode),110);
338   --
339  END write_to_clob;
340  --
341  --
342  PROCEDURE write_file(p_file_name IN VARCHAR) IS
343 
344   l_str1            VARCHAR2(80) ;
345   l_xml_element     VARCHAR2(800);
346   l_file            UTL_FILE.FILE_TYPE;
347   l_directory_path  VARCHAR2(500);
348   l_file_name       VARCHAR2(50);
349 
350   CURSOR cur_get_directory_path IS
351   SELECT  value
352   FROM    v$parameter
353   WHERE   lower (name) = 'utl_file_dir';
354 
355 BEGIN
356   hr_utility.trace('+====write_file============================================+');
357  fnd_file.put_line(fnd_file.log, 'p_file_name '||p_file_name);
358   OPEN  cur_get_directory_path;
359   FETCH cur_get_directory_path INTO l_directory_path;
360   CLOSE cur_get_directory_path;
361 
362   IF INSTR(l_directory_path,',') > 0 THEN
363     l_directory_path := SUBSTR(l_directory_path, 1, INSTR(l_directory_path,',')-1);
364   END IF;
365 
366   l_file := utl_file.fopen(l_directory_path, p_file_name, 'W');
367     l_str1 :='<?xml version="1.0" encoding="' || get_IANA_charset || '"?>';
368 --  l_str1 := '<?xml version="1.0" encoding="ISO-8859-1"?>'||EOL;
369     utl_file.put_line(l_file, l_str1);
370 
371   IF g_xml_element_table.COUNT > 0 THEN
372   --
373    FOR table_counter IN g_xml_element_table.FIRST .. g_xml_element_table.LAST LOOP
374    --
375     IF g_xml_element_table(table_counter).tagvalue = '_START_' THEN
376       IF g_xml_element_table(table_counter).tagattrb IS NOT NULL THEN
377       l_xml_element := '<' || g_xml_element_table(table_counter).tagname || ' '
378                          || g_xml_element_table(table_counter).tagattrb ||'>';
379 hr_utility.set_location(l_xml_element,30);
380        ELSE
381        l_xml_element := '<' || g_xml_element_table(table_counter).tagname || '>';
382        END IF;
383 
384     ELSIF g_xml_element_table(table_counter).tagvalue = '_END_' THEN
385      l_xml_element := '</' || g_xml_element_table(table_counter).tagname || '>';
386 
387     ELSIF g_xml_element_table(table_counter).tagattrb IS NOT NULL THEN
388        IF g_xml_element_table(table_counter).tagtype IS NULL THEN
389        l_xml_element := '<' || g_xml_element_table(table_counter).tagname  || ' '
390                           || g_xml_element_table(table_counter).tagattrb ||
391                       '><![CDATA[' || g_xml_element_table(table_counter).tagvalue ||
392                       ']]></' || g_xml_element_table(table_counter).tagname || '>';
393        ELSIF g_xml_element_table(table_counter).tagtype = 'A' THEN
394       l_xml_element := '<' || g_xml_element_table(table_counter).tagname || ' '
395                           || g_xml_element_table(table_counter).tagattrb ||
396                       '>' || g_xml_element_table(table_counter).tagvalue ||
397                       '</'|| g_xml_element_table(table_counter).tagname || '>';
398        END IF;
399 
400      ELSIF g_xml_element_table(table_counter).tagattrb IS NULL THEN
401      l_xml_element := '<' || g_xml_element_table(table_counter).tagname ||
402                       '><![CDATA[' || g_xml_element_table(table_counter).tagvalue ||
403                      ']]></' || g_xml_element_table(table_counter).tagname || '>';
404 
405     END IF;
406     --
407   --  dbms_lob.writeappend(l_clob, LENGTH(l_xml_element), l_xml_element);
408       utl_file.put_line(l_file,l_xml_element);
409 	dbms_lob.writeappend(g_clob, LENGTH(l_xml_element), l_xml_element);
410    --
411    END LOOP;
412   --
413   END IF;
414   utl_file.fclose(l_file);
415   hr_utility.trace('Written file : '||l_directory_path||'/'||p_file_name);
416   hr_utility.trace('x====write_file============================================x');
417 EXCEPTION
418   WHEN others THEN
419     hr_utility.trace('Exception in write_file SQL-ERRM : '||SQLERRM);
420     hr_utility.raise_error;
421 END write_file;
422  -- -----------------------------------------------------------------------------
423  -- Parse out parameters from string.
424  -- -----------------------------------------------------------------------------
425  --
426  FUNCTION get_parameter
427  (p_parameter_string IN VARCHAR2
428  ,p_token            IN VARCHAR) RETURN VARCHAR2 IS
429   --
430   l_parameter pay_payroll_actions.legislative_parameters%TYPE := NULL;
431   l_start_pos NUMBER;
432   l_delimiter VARCHAR2(1) := ' ';
433   --
434  BEGIN
435   l_start_pos := INSTR(' ' || p_parameter_string, l_delimiter || p_token || '=');
436   --
437   IF l_start_pos = 0 THEN
438    l_delimiter := '|';
439    l_start_pos := INSTR(' ' || p_parameter_string, l_delimiter || p_token || '=');
440   END IF;
441   --
442   IF l_start_pos <> 0 THEN
443    l_start_pos := l_start_pos + LENGTH(p_token || '=');
444    l_parameter := SUBSTR(p_parameter_string, l_start_pos, INSTR(p_parameter_string || ' ', l_delimiter, l_start_pos) - l_start_pos);
445   END IF;
446   --
447   RETURN l_parameter;
448  END;
449  --
450  --
451  -- -----------------------------------------------------------------------------
452  -- Returns the prompt for a given information item.
453  -- -----------------------------------------------------------------------------
454  --
455  FUNCTION get_info_prompt
456  (p_payroll_action_id IN NUMBER
457  ,p_legal_employer_id IN VARCHAR2
458  ,p_reporting_code    IN VARCHAR2
459  ,p_info_id           IN VARCHAR2) RETURN VARCHAR2 IS
460   --
461   CURSOR csr_INFO_DTLS
462           (p_payroll_action_id IN NUMBER
463           ,p_legal_employer_id IN VARCHAR2
464           ,p_reporting_code    IN VARCHAR2
465           ,p_info_id           IN VARCHAR2) IS
466    SELECT inf_dtl.action_information5 prompt
467    FROM   pay_action_information inf_dtl
468    WHERE  inf_dtl.action_context_type         = 'PA'
469      AND  inf_dtl.action_context_id           = p_payroll_action_id
470      AND  inf_dtl.action_information_category = 'EMEA REPORT INFORMATION'
471      AND  inf_dtl.action_information1         = 'REP_CODE_INFO_DTLS'
472      AND  inf_dtl.action_information2         = p_legal_employer_id
473      AND  inf_dtl.action_information3         = p_reporting_code
474      AND  inf_dtl.action_information4         = p_info_id;
475   --
476   l_inf_dtl_rec csr_INFO_DTLS%ROWTYPE;
477   --
478  BEGIN
479   OPEN  csr_INFO_DTLS
480          (p_payroll_action_id
481          ,p_legal_employer_id
482          ,p_reporting_code
483          ,p_info_id);
484   FETCH csr_INFO_DTLS INTO l_inf_dtl_rec;
485   CLOSE csr_INFO_DTLS;
486   --
487   RETURN l_inf_dtl_rec.prompt;
488  END get_info_prompt;
489  --
490  --
491  -- -----------------------------------------------------------------------------
492  -- Returns the datatype for a given information item.
493  -- -----------------------------------------------------------------------------
494  --
495  FUNCTION get_info_dtype
496  (p_payroll_action_id IN NUMBER
497  ,p_legal_employer_id IN VARCHAR2
498  ,p_reporting_code    IN VARCHAR
499  ,p_info_id           IN VARCHAR2) RETURN VARCHAR2 IS
500   --
501   CURSOR csr_INFO_DTLS
502           (p_payroll_action_id IN NUMBER
503           ,p_legal_employer_id IN VARCHAR2
504           ,p_reporting_code    IN VARCHAR
505           ,p_info_id           IN VARCHAR2) IS
506    SELECT inf_dtl.action_information6 datatype
507    FROM   pay_action_information inf_dtl
508    WHERE  inf_dtl.action_context_type         = 'PA'
509      AND  inf_dtl.action_context_id           = p_payroll_action_id
510      AND  inf_dtl.action_information_category = 'EMEA REPORT INFORMATION'
511      AND  inf_dtl.action_information1         = 'REP_CODE_INFO_DTLS'
512      AND  inf_dtl.action_information2         = p_legal_employer_id
513      AND  inf_dtl.action_information3         = p_reporting_code
514      AND  inf_dtl.action_information4         = p_info_id;
515   --
516   l_inf_dtl_rec csr_INFO_DTLS%ROWTYPE;
517   --
518  BEGIN
519   OPEN  csr_INFO_DTLS
520          (p_payroll_action_id
521          ,p_legal_employer_id
522          ,p_reporting_code
523          ,p_info_id);
524   FETCH csr_INFO_DTLS INTO l_inf_dtl_rec;
525   CLOSE csr_INFO_DTLS;
526   --
527   RETURN l_inf_dtl_rec.datatype;
528  END get_info_dtype;
529  --
530  --
531  -- -- -----------------------------------------------------------------------------
532  -- Returns the XML-ORID for a given information item. Changes 2007-08
533  -- -----------------------------------------------------------------------------
534  --
535  FUNCTION get_xml_orid
536  (p_payroll_action_id IN NUMBER
537  ,p_legal_employer_id IN VARCHAR2
538  ,p_reporting_code    IN VARCHAR
539  ,p_info_id           IN VARCHAR2) RETURN VARCHAR2 IS
540   --
541   CURSOR csr_XML_DTLS
542           (p_payroll_action_id IN NUMBER
543           ,p_legal_employer_id IN VARCHAR2
544           ,p_reporting_code    IN VARCHAR
545           ,p_info_id           IN VARCHAR2) IS
546    SELECT inf_dtl.action_information8 xml_orid
547    FROM   pay_action_information inf_dtl
548    WHERE  inf_dtl.action_context_type         = 'PA'
549      AND  inf_dtl.action_context_id           = p_payroll_action_id
550      AND  inf_dtl.action_information_category = 'EMEA REPORT INFORMATION'
551      AND  inf_dtl.action_information1         = 'REP_CODE_INFO_DTLS'
552      AND  inf_dtl.action_information2         = p_legal_employer_id
553      AND  inf_dtl.action_information3         = p_reporting_code
554      AND  inf_dtl.action_information4         = p_info_id;
555   --
556   l_xml_dtl_rec csr_XML_DTLS%ROWTYPE;
557   --
558  BEGIN
559   OPEN  csr_XML_DTLS
560          (p_payroll_action_id
561          ,p_legal_employer_id
562          ,p_reporting_code
563          ,p_info_id);
564   FETCH csr_XML_DTLS INTO l_xml_dtl_rec;
565   CLOSE csr_XML_DTLS;
566   --
567   RETURN l_xml_dtl_rec.xml_orid;
568  END get_xml_orid;
569  --
570  --
571  -- -----------------------------------------------------------------------------
572  -- Returns the description for a given reporting code.
573  -- -----------------------------------------------------------------------------
574  --
575  FUNCTION get_code_desc
576  (p_payroll_action_id IN NUMBER
577  ,p_legal_employer_id IN VARCHAR2
578  ,p_reporting_code    IN VARCHAR) RETURN VARCHAR2 IS
579   --
580   CURSOR csr_CODE_DTLS
581           (p_payroll_action_id IN NUMBER
582           ,p_legal_employer_id IN VARCHAR2
583           ,p_reporting_code    IN VARCHAR) IS
584    SELECT inf_dtl.action_information11 description
585    FROM   pay_action_information inf_dtl
586    WHERE  inf_dtl.action_context_type         = 'PA'
587      AND  inf_dtl.action_context_id           = p_payroll_action_id
588      AND  inf_dtl.action_information_category = 'EMEA REPORT INFORMATION'
589      AND  inf_dtl.action_information1         = 'REP_CODE_DTLS'
590      AND  inf_dtl.action_information2         = p_legal_employer_id
591      AND  inf_dtl.action_information3         = p_reporting_code;
592   --
593   l_cde_dtl_rec csr_CODE_DTLS%ROWTYPE;
594   --
595  BEGIN
596   OPEN  csr_CODE_DTLS
597          (p_payroll_action_id
598          ,p_legal_employer_id
599          ,p_reporting_code);
600   FETCH csr_CODE_DTLS INTO l_cde_dtl_rec;
601   CLOSE csr_CODE_DTLS;
602   --
603   RETURN l_cde_dtl_rec.description;
604  END get_code_desc;
605  --
606  --
607  -- -----------------------------------------------------------------------------
608  -- Returns TRUE If the primary classification of the element is Earnings Adjustment
609  -- -----------------------------------------------------------------------------
610  --
611  --
612   FUNCTION is_EA_classification (l_element_type_id  IN NUMBER
613                                 ,l_report_date      IN DATE)
614   RETURN BOOLEAN AS
615   --
616   l_classification pay_element_classifications.classification_name%TYPE;
617   --
618   BEGIN
619   --
620   SELECT pec.classification_name
621   INTO   l_classification
622   FROM   pay_element_classifications pec
623         ,pay_element_types_f         pet
624   WHERE  pet.element_type_id   = l_element_type_id
625    AND   pec.classification_id = pet.classification_id
626    AND   l_report_date         BETWEEN pet.effective_start_date
627                                AND     pet.effective_end_date;
628    --
629    IF l_classification = 'Earnings Adjustment' THEN RETURN TRUE;
630                                                ELSE RETURN FALSE;
631    END IF;
632   END is_EA_classification;
633  --
634  --
635  -- -----------------------------------------------------------------------------
636  -- Returns Y if Person is employed throughout the year in same Tax Unit
637  -- -----------------------------------------------------------------------------
638  --
639  --
640   FUNCTION employed_throughout_year ( p_person_id        IN NUMBER
641                                      ,p_legal_empoyer_id IN NUMBER
642                                      ,p_effective_date   IN DATE )
643   RETURN VARCHAR2 AS
644   --
645    CURSOR csr_asg_contribution is
646     SELECT paf.assignment_id
647           ,greatest( trunc(p_effective_date,'Y'), paf.effective_start_date) start_date
648           ,least( p_effective_date, paf.effective_end_date) end_date
649     FROM   per_all_assignments_f       paf
650           ,hr_soft_coding_keyflex      sck
651           ,hr_organization_information hoi
652           ,per_assignment_status_types pas
653     WHERE  paf.person_id                 = p_person_id
654     AND    sck.soft_coding_keyflex_id    = paf.soft_coding_keyflex_id
655     AND    pas.assignment_status_type_id = paf.assignment_status_type_id
656     AND    pas.user_status               = 'Active Assignment'
657     AND    hoi.org_information_context   = 'NO_LOCAL_UNITS'
658     AND    hoi.org_information1          = sck.segment2
659     AND    hoi.organization_id           = p_legal_empoyer_id
660     AND    ((paf.effective_start_date BETWEEN trunc(p_effective_date,'Y') and p_effective_date
661            OR paf.effective_end_date  BETWEEN trunc(p_effective_date,'Y') and p_effective_date)
662            OR (trunc(p_effective_date,'Y') > paf.effective_start_date
663               AND p_effective_date < paf.effective_end_date))
664     ORDER BY paf.effective_start_date;
665   --
666     l_asg_end_date        per_all_assignments_f.effective_end_date%TYPE;
667     l_first_flag          NUMBER;
668     --
669     rec_asg_contribution  csr_asg_contribution%ROWTYPE;
670   --
671   BEGIN
672     --
673     l_first_flag := 0;
674 
675     fnd_file.put_line(fnd_file.log, 'p_person_id'||p_person_id);
676     --
677     OPEN  csr_asg_contribution;
678     LOOP
679     --
680       FETCH csr_asg_contribution INTO rec_asg_contribution;
681       IF csr_asg_contribution%NOTFOUND THEN
682         --
683         CLOSE csr_asg_contribution;
684 
685         --
686         IF l_first_flag <> 0 AND l_asg_end_date >= p_effective_date THEN
687 
688           RETURN ('Y');
689         --
690         ELSE
691 
692           RETURN ('N');
693         --
694         END IF;
695       --
696       END IF;
697       --
698       IF l_first_flag = 0 THEN
699       --
700         l_first_flag := 1;
701         l_asg_end_date := rec_asg_contribution.end_date;
702         --
703         IF trunc(p_effective_date,'Y') < rec_asg_contribution.start_date THEN
704         --
705           CLOSE csr_asg_contribution;
706 
707           RETURN ('N');
708         --
709         END IF;
710 	--
711       END IF;
712       --
713       IF rec_asg_contribution.start_date > (l_asg_end_date + 1)  THEN
714         --
715         CLOSE csr_asg_contribution;
716 	fnd_file.put_line(fnd_file.log,'Pos 4');
717         RETURN ('N');
718         --
719       END IF;
720       --
721       l_asg_end_date := greatest(l_asg_end_date, rec_asg_contribution.end_date);
722       --
723       IF l_asg_end_date >= p_effective_date THEN
724         --
725         CLOSE csr_asg_contribution;
726 	fnd_file.put_line(fnd_file.log,'Pos 5');
727         RETURN ('Y');
728       --
729       END IF;
730       --
731     END LOOP;
732     --
733   END employed_throughout_year;
734  --
735  --
736  -- -----------------------------------------------------------------------------
737  -- Returns Dates / Days for Non-Continuous Employment
738  -- -----------------------------------------------------------------------------
739  --
740  --
741  FUNCTION employed_period(p_person_id        IN NUMBER
742                          ,p_legal_empoyer_id IN NUMBER
743                          ,p_effective_date   IN DATE)
744   RETURN VARCHAR2 AS
745   --
746    CURSOR csr_asg_contribution is
747     SELECT greatest( trunc(p_effective_date,'Y'), paf.effective_start_date) start_date
748           ,least( p_effective_date, paf.effective_end_date) end_date
749     FROM   per_all_assignments_f       paf
750           ,hr_soft_coding_keyflex      sck
751           ,hr_organization_information hoi
752           ,per_assignment_status_types pas
753     WHERE  paf.person_id                 = p_person_id
754     AND    sck.soft_coding_keyflex_id    = paf.soft_coding_keyflex_id
755     AND    pas.assignment_status_type_id = paf.assignment_status_type_id
756     AND    pas.user_status               = 'Active Assignment'
757     AND    hoi.org_information_context   = 'NO_LOCAL_UNITS'
758     AND    hoi.org_information1          = sck.segment2
759     AND    hoi.organization_id           = p_legal_empoyer_id
760     AND    ((paf.effective_start_date BETWEEN trunc(p_effective_date,'Y') and p_effective_date
761            OR paf.effective_end_date  BETWEEN trunc(p_effective_date,'Y') and p_effective_date)
762            OR (trunc(p_effective_date,'Y') > paf.effective_start_date
763               AND p_effective_date < paf.effective_end_date))
764     ORDER BY paf.effective_start_date;
765     --
766     l_asg_start_date per_all_assignments_f.effective_start_date%TYPE;
767     l_asg_end_date   per_all_assignments_f.effective_end_date%TYPE;
768     l_first_flag     NUMBER;
769     l_days           NUMBER;
770     --
771     rec_asg_contribution  csr_asg_contribution%ROWTYPE;
772   --
773   BEGIN
774   --
775   l_first_flag := 0;
776   l_days       := 0;
777   --
778   OPEN  csr_asg_contribution;
779   LOOP
780   --
781     FETCH csr_asg_contribution INTO rec_asg_contribution;
782     --
783     IF csr_asg_contribution%NOTFOUND THEN
784     --
785       CLOSE csr_asg_contribution;
786       --
787       IF l_days = 0 THEN
788         Return to_char(l_asg_start_date,'DD/MON') || '-' || to_char(l_asg_end_date,'DD/MON');
789       ELSE
790         Return to_char(l_days + (l_asg_end_date - l_asg_start_date) + 1);
791       END IF;
792       --
793     END IF;
794     --
795     IF l_first_flag = 0 THEN
796     --
797       l_first_flag :=1;
798       l_asg_start_date := rec_asg_contribution.start_date;
799       l_asg_end_date := rec_asg_contribution.end_date;
800       --
801     END IF;
802     --
803     -- Only dates have to be reported
804     IF l_asg_end_date >= rec_asg_contribution.start_date THEN
805       l_asg_end_date := greatest(rec_asg_contribution.end_date, l_asg_end_date);
806     ELSE
807       --  Only days have to be reported
808       l_days := l_days + (l_asg_end_date - l_asg_start_date) + 1;
809       l_asg_start_date := rec_asg_contribution.start_date;
810       l_asg_end_date := rec_asg_contribution.end_date;
811     END IF;
812     --
813   END LOOP;
814   --
815 END employed_period;
816  --
817  -- -----------------------------------------------------------------------------
818  -- Returns the defined balance ID for a given balance / balance dimension
819  -- combination.
820  -- -----------------------------------------------------------------------------
821  --
822  FUNCTION get_defined_balance
823  (p_business_group_id    IN NUMBER
824  ,p_balance_name         IN VARCHAR2
825  ,p_database_item_suffix IN VARCHAR) RETURN NUMBER IS
826   --
827   CURSOR csr_DEF_BAL
828           (p_business_group_id    IN NUMBER
829           ,p_balance_name         IN VARCHAR2
830           ,p_database_item_suffix IN VARCHAR) IS
831    SELECT db.defined_balance_id
832    FROM   pay_defined_balances   db
833          ,pay_balance_dimensions bd
834          ,pay_balance_types      bt
835    WHERE  bt.balance_name         = p_balance_name
836      AND  ((bt.business_group_id IS NULL AND bt.legislation_code = 'NO') OR (bt.legislation_code IS NULL AND bt.business_group_id = p_business_group_id))
837      AND  bd.database_item_suffix = p_database_item_suffix
838      AND  ((bd.business_group_id IS NULL AND bd.legislation_code = 'NO') OR (bd.legislation_code IS NULL AND bd.business_group_id = p_business_group_id))
839      AND  db.balance_type_id      = bt.balance_type_id
840      AND  db.balance_dimension_id = bd.balance_dimension_id;
841   --
842   l_def_bal_rec csr_DEF_BAL%ROWTYPE;
843   --
844  BEGIN
845   OPEN  csr_DEF_BAL
846          (p_business_group_id
847          ,p_balance_name
848          ,p_database_item_suffix);
849   FETCH csr_DEF_BAL INTO l_def_bal_rec;
850   CLOSE csr_DEF_BAL;
851   --
852   RETURN l_def_bal_rec.defined_balance_id;
853  END get_defined_balance;
854  --
855  --
856  -- -----------------------------------------------------------------------------
857  -- Returns the element type ID for a given element.
858  -- -----------------------------------------------------------------------------
859  --
860  FUNCTION get_element
861  (p_business_group_id IN NUMBER
862  ,p_element_name      IN VARCHAR2) RETURN NUMBER IS
863   --
864   CURSOR csr_ELEMENT
865           (p_business_group_id IN NUMBER
866           ,p_element_name      IN VARCHAR2) IS
867    SELECT et.element_type_id
868    FROM   pay_element_types_f et
869    WHERE  et.element_name         = p_element_name
870      AND  ((et.business_group_id IS NULL AND et.legislation_code = 'NO') OR (et.legislation_code IS NULL AND et.business_group_id = p_business_group_id));
871   --
872   l_element_rec csr_ELEMENT%ROWTYPE;
873   --
874  BEGIN
875   OPEN  csr_ELEMENT
876          (p_business_group_id
877          ,p_element_name);
878   FETCH csr_ELEMENT INTO l_element_rec;
879   CLOSE csr_ELEMENT;
880   --
881   RETURN l_element_rec.element_type_id;
882  END get_element;
883  --
884  --
885  -- -----------------------------------------------------------------------------
886  -- Returns the global value for a given global.
887  -- -----------------------------------------------------------------------------
888  --
889  FUNCTION get_global
890  (p_effective_date IN DATE
891  ,p_global_name    IN VARCHAR2) RETURN VARCHAR2 IS
892   --
893   CURSOR csr_GLOBAL
894           (p_effective_date IN DATE
895           ,p_global_name    IN VARCHAR2) IS
896    SELECT glb.global_value
897    FROM   ff_globals_f glb
898    WHERE  glb.global_name      = p_global_name
899      AND  glb.legislation_code = 'NO'
900      AND  p_effective_date BETWEEN glb.effective_start_date
901                                AND glb.effective_end_date;
902   --
903   l_global_rec csr_GLOBAL%ROWTYPE;
904   --
905  BEGIN
906   OPEN  csr_GLOBAL
907          (p_effective_date
908          ,p_global_name);
909   FETCH csr_GLOBAL INTO l_global_rec;
910   CLOSE csr_GLOBAL;
911   --
912   RETURN l_global_rec.global_value;
913  END get_global;
914  --
915  --
916  -- -----------------------------------------------------------------------------
917  -- Returns organization details for a given organization.
918  -- -----------------------------------------------------------------------------
919  --
920  PROCEDURE get_org_details
921  (p_organization_id  IN NUMBER
922  ,p_name            OUT NOCOPY VARCHAR2
923  ,p_address_line1   OUT NOCOPY VARCHAR2
924  ,p_address_line2   OUT NOCOPY VARCHAR2
925  ,p_address_line3   OUT NOCOPY VARCHAR2
926  ,p_postcode        OUT NOCOPY VARCHAR2
927  ,p_postoffice      OUT NOCOPY VARCHAR2) IS
928   --
929   CURSOR csr_ORG_DETAILS
930           (p_organization_id IN NUMBER) IS
931    SELECT org.name
932          ,loc.address_line_1
933          ,loc.address_line_2
934          ,loc.address_line_3
935          ,loc.postal_code postcode
936          ,UPPER(SUBSTR(hr_general.decode_lookup('NO_POSTAL_CODE', loc.postal_code)
937                       ,INSTR(hr_general.decode_lookup('NO_POSTAL_CODE', loc.postal_code), ' ')  + 1))  postoffice
938    FROM   hr_all_organization_units org
939          ,hr_locations_all loc
940    WHERE  org.organization_id = p_organization_id
941      AND  loc.location_id (+) = org.location_id;
942   --
943   l_org_dtl_rec csr_ORG_DETAILS%ROWTYPE;
944  BEGIN
945   OPEN  csr_ORG_DETAILS
946          (p_organization_id);
947   FETCH csr_ORG_DETAILS INTO l_org_dtl_rec;
948   CLOSE csr_ORG_DETAILS;
949   --
950   p_name          := l_org_dtl_rec.name;
951   p_address_line1 := l_org_dtl_rec.address_line_1;
952   p_address_line2 := l_org_dtl_rec.address_line_2;
953   p_address_line3 := l_org_dtl_rec.address_line_3;
954   p_postcode      := l_org_dtl_rec.postcode;
955   p_postoffice    := l_org_dtl_rec.postoffice;
956  END get_org_details;
957   --
958  --
959  -- -----------------------------------------------------------------------------
960  -- Returns person address for a given person ID.
961  -- -----------------------------------------------------------------------------
962  --
963  PROCEDURE get_per_addr
964  (p_person_id        IN NUMBER
965  ,p_report_date      IN DATE
966  ,p_address_line1   OUT NOCOPY VARCHAR2
967  ,p_address_line2   OUT NOCOPY VARCHAR2
968  ,p_address_line3   OUT NOCOPY VARCHAR2
969  ,p_postcode        OUT NOCOPY VARCHAR2
970  ,p_postoffice      OUT NOCOPY VARCHAR2) IS
971   --
972   CURSOR csr_PER_DETAILS
973           (p_person_id   IN NUMBER
974           ,p_report_date IN DATE) IS
975    SELECT pa.address_line1 address_line_1
976          ,pa.address_line2 address_line_2
977 		 ,pa.address_line3 address_line_3
978 		 ,pa.postal_code   postcode
979 		 ,decode(pa.style,'NO',substr(hr_general.decode_lookup('NO_POSTAL_CODE',pa.postal_code),
980 	      instr(hr_general.decode_lookup('NO_POSTAL_CODE',pa.postal_code),' ')+1),'NO_GLB',pa.town_or_city) postoffice
981     FROM  per_addresses     pa
982     WHERE pa.person_id      = p_person_id
983     AND   pa.primary_flag   = 'Y'
984     AND   pa.style          IN ('NO', 'NO_GLB')
985     AND   p_report_date     BETWEEN   pa.date_from
986                             AND       nvl(pa.date_to,to_date('31-12-4712','DD-MM-YYYY'));
987   --
988   l_per_dtl_rec csr_PER_DETAILS%ROWTYPE;
989  BEGIN
990   OPEN  csr_PER_DETAILS
991          (p_person_id
992          ,p_report_date);
993   FETCH csr_PER_DETAILS INTO l_per_dtl_rec;
994   CLOSE csr_PER_DETAILS;
995   --
996   p_address_line1 := l_per_dtl_rec.address_line_1;
997   p_address_line2 := l_per_dtl_rec.address_line_2;
998   p_address_line3 := l_per_dtl_rec.address_line_3;
999   p_postcode      := l_per_dtl_rec.postcode;
1000   p_postoffice    := l_per_dtl_rec.postoffice;
1001  END get_per_addr;
1002  --
1003  --
1004  -- -----------------------------------------------------------------------------
1005  -- Sets all legislative parameters as global variables for future use.
1006  -- -----------------------------------------------------------------------------
1007  --
1008  PROCEDURE set_parameters
1009  (p_payroll_action_id IN NUMBER) IS
1010   --
1011   CURSOR csr_PARAMS
1012           (p_payroll_action_id IN NUMBER) IS
1013    SELECT business_group_id
1014          ,legislative_parameters
1015          ,pay_no_eoy_archive.get_parameter(legislative_parameters, 'LEGAL_EMPLOYER_ID') legal_employer_id
1016          ,fnd_date.canonical_to_date(pay_no_eoy_archive.get_parameter(legislative_parameters, 'DATE')) report_date
1017    FROM   pay_payroll_actions
1018    WHERE  payroll_action_id = p_payroll_action_id;
1019   --
1020   l_parameter_rec csr_PARAMS%ROWTYPE;
1021   --
1022  BEGIN
1023   OPEN  csr_PARAMS(p_payroll_action_id);
1024   FETCH csr_PARAMS INTO l_parameter_rec;
1025   CLOSE csr_PARAMS;
1026   --
1027   g_payroll_action_id := p_payroll_action_id;
1028   g_business_group_id := l_parameter_rec.business_group_id;
1029   g_legal_employer_id := l_parameter_rec.legal_employer_id;
1030   g_report_date       := l_parameter_rec.report_date;
1031  END set_parameters;
1032  --
1033  --
1034  -- -----------------------------------------------------------------------------
1035  -- Part of archive logic.
1036  -- -----------------------------------------------------------------------------
1037  --
1038  PROCEDURE range_code
1039  (p_payroll_action_id IN NUMBER
1040  ,p_sql               OUT NOCOPY VARCHAR2) IS
1041   --
1042   l_proc_name CONSTANT VARCHAR2(61) := l_package_name || '.range_code';
1043   --
1044   CURSOR csr_LEGEMP
1045           (p_business_group_id IN NUMBER
1046           ,p_legal_employer_id IN NUMBER) IS
1047    SELECT org.organization_id legal_employer_id
1048          ,org.name
1049          ,hoi2.org_information1 organization_number
1050          ,TO_NUMBER(hoi2.org_information5) tax_office_id
1051          ,hoi2.org_information2 tax_municipality
1052    FROM   hr_all_organization_units org
1053          ,hr_organization_information hoi1
1054          ,hr_organization_information hoi2
1055    WHERE  p_legal_employer_id IS NULL
1056      AND  org.business_group_id            = p_business_group_id
1057      AND  hoi1.organization_id             = org.organization_id
1058      AND  hoi1.org_information_context     = 'CLASS'
1059      AND  hoi1.org_information1            = 'HR_LEGAL_EMPLOYER'
1060      AND  hoi2.organization_id (+)         = hoi1.organization_id
1061      AND  hoi2.org_information_context (+) = 'NO_LEGAL_EMPLOYER_DETAILS'
1062    UNION ALL
1063    SELECT org.organization_id legal_employer_id
1064          ,org.name
1065          ,hoi1.org_information1 organization_number
1066          ,TO_NUMBER(hoi1.org_information5) tax_office_id
1067          ,hoi1.org_information2 tax_municipality
1068    FROM   hr_all_organization_units   org
1069          ,hr_organization_information hoi1
1070    WHERE  p_legal_employer_id IS NOT NULL
1071      AND  org.organization_id              = p_legal_employer_id
1072      AND  hoi1.organization_id (+)         = org.organization_id
1073      AND  hoi1.org_information_context (+) = 'NO_LEGAL_EMPLOYER_DETAILS';
1074   --
1075   -- Cursor to Extract  Other subsidis received (to reduce excemption limit),
1076   -- same as in bi-monthly recording sheet, but total for the year (2007/08 changes)
1077   --
1078 
1079   CURSOR csr_Legal_Emp_EA(csr_v_legal_emp_id  hr_organization_information.organization_id%TYPE
1080                          ,csr_v_business_group_id hr_organization_units.business_group_id%TYPE
1081                         ,p_report_date DATE) IS
1082  SELECT to_number(hoi2.org_information4) economic_aid
1083    FROM hr_organization_units o1
1084        ,hr_organization_information hoi1
1085        ,hr_organization_information hoi2
1086  WHERE o1.business_group_id         = csr_v_business_group_id
1087    AND hoi1.organization_id         = o1.organization_id
1088    AND hoi1.organization_id         = csr_v_legal_emp_id
1089    AND hoi1.org_information1        = 'HR_LEGAL_EMPLOYER'
1090    AND hoi1.org_information_context = 'CLASS'
1091    AND o1.organization_id           = hoi2.organization_id
1092    AND hoi2.org_information_context ='NO_NI_EXEMPTION_LIMIT'
1093    AND p_report_date     BETWEEN fnd_date.canonical_to_date(hoi2.org_information2)
1094                            AND fnd_date.canonical_to_date(hoi2.org_information3);
1095   ---- Bug#9579261 fix starts
1096 
1097   CURSOR csr_Legal_Emp_PP(csr_v_legal_emp_id  hr_organization_information.organization_id%TYPE
1098                          ,csr_v_business_group_id hr_organization_units.business_group_id%TYPE
1099                         ,p_report_date DATE) IS
1100   SELECT hoi2.org_information3 pen_scheme
1101          ,hoi2.org_information4 pp_id
1102    FROM hr_organization_units o1
1103        ,hr_organization_information hoi1
1104        ,hr_organization_information hoi2
1105        ,hr_organization_units o2
1106  WHERE o1.business_group_id         = csr_v_business_group_id
1107    AND hoi1.organization_id         = o1.organization_id
1108    AND hoi1.organization_id         = csr_v_legal_emp_id
1109    AND hoi1.org_information1        = 'HR_LEGAL_EMPLOYER'
1110    AND hoi1.org_information_context = 'CLASS'
1111    AND o1.organization_id           = hoi2.organization_id
1112    AND hoi2.org_information_context ='NO_PENSION_PROVIDER'
1113    AND p_report_date     BETWEEN fnd_date.canonical_to_date(hoi2.org_information1)
1114                            AND fnd_date.canonical_to_date(hoi2.org_information2);
1115 
1116   CURSOR csr_pp_name(csr_v_pp_id hr_organization_units.organization_id%TYPE) IS
1117   SELECT o1.name name
1118   FROM hr_organization_units o1
1119   where o1.organization_id = csr_v_pp_id;
1120   ---- Bug#9579261 fix ends
1121   --
1122 
1123   CURSOR csr_REPCODE
1124           (p_report_date       IN DATE
1125           ,p_legal_employer_id IN NUMBER) IS
1126    SELECT r.row_low_range_or_name reporting_code
1127          ,hr_general.decode_lookup('NO_EOY_REPORTING_CODE',
1128           hr_de_general.get_uci(p_report_date,t.user_table_id,r.user_row_id,'MAPPING_ID')) description
1129          ,hr_de_general.get_uci(p_report_date,t.user_table_id,r.user_row_id,'FIXED_CODE') fixed_code
1130          ,hr_de_general.get_uci(p_report_date,t.user_table_id,r.user_row_id,'XML_CODE_MAP') XML_CODE           -- Added w.r.t phase2 Legislative changes for NORWAY for 2008
1131          ,hr_de_general.get_uci(p_report_date,t.user_table_id,r.user_row_id,'MULT_REC') mult_rec
1132          ,hr_de_general.get_uci(p_report_date,t.user_table_id,r.user_row_id,'REP_EARNINGS') reportable_earnings
1133          ,nvl(hoi.org_information4, hr_de_general.get_uci(p_report_date,t.user_table_id,r.user_row_id,'ASG_INFO_METH')) asg_info_meth
1134          ,nvl(DECODE(hoi.org_information4,'BAL', hoi.org_information5,'BAL_CODE_CTX', hoi.org_information5,'RRV_ELEMENT', hoi.org_information6,'PROCEDURE', hoi.org_information7),
1135           decode(hoi.org_information4,'RRV',NULL,hr_de_general.get_uci(p_report_date,t.user_table_id,r.user_row_id,'ASG_INFO_DFN'))) asg_info_dfn
1136          ,nvl(hoi.org_information14, hr_de_general.get_uci(p_report_date,t.user_table_id,r.user_row_id,'REP_SUMM_METH')) rep_summ_meth
1137          ,nvl(DECODE(hoi.org_information14,'PROCEDURE' , hoi.org_information15),
1138          decode(hoi.org_information14, 'PROCEDURE', hr_de_general.get_uci(p_report_date,t.user_table_id,r.user_row_id,'REP_SUMM_DFN'))) rep_summ_dfn
1139    FROM   pay_user_tables t
1140          ,pay_user_rows_f r
1141          ,hr_organization_information hoi
1142    WHERE  t.user_table_name        = 'NO_EOY_CODE_REPORTING_RULES'
1143      AND  t.legislation_code       = 'NO'
1144      AND  r.user_table_id          = t.user_table_id
1145      AND  r.row_low_range_or_name  = hoi.org_information3(+)
1146 	 AND  hoi.organization_id(+)   = p_legal_employer_id
1147 	 AND  hoi.org_information_context(+) = 'NO_EOY_REPORTING_RULE_OVERRIDE'
1148 	 AND  to_number(to_char(p_report_date,'YYYY')) between to_number(hoi.org_information1(+))
1149                             AND to_number(nvl(hoi.org_information2,'4712'))
1150      AND  p_report_date BETWEEN r.effective_start_date
1151                             AND r.effective_end_date;
1152   --
1153   CURSOR csr_REPCODE_INFO
1154           (p_report_date       IN DATE
1155           ,p_reporting_code    IN VARCHAR2
1156           ,p_legal_employer_id IN NUMBER) IS
1157    SELECT SUBSTR(c.user_column_name, 1, INSTR(c.user_column_name, '_') - 1) info_id
1158          ,hr_general.decode_lookup('NO_EOY_INFO_PROMPTS', ci.value) prompt
1159        	 ,nvl(DECODE(SUBSTR(c.user_column_name, 1, INSTR(c.user_column_name, '_') - 1)
1160 		             ,'INFO1',hoi.org_information8
1161 		             ,'INFO2',hoi.org_information9
1162 		             ,'INFO3',hoi.org_information10
1163 		             ,'INFO4',hoi.org_information11
1164 		             ,'INFO5',hoi.org_information12
1165 		             ,'INFO6',hoi.org_information13
1166 		             ,'INFO7',hoi.org_information14 -- 2009 changes
1167 		             ,'INFO8',hoi.org_information15 -- 2009 changes
1168 		             ,'INFO9',hoi.org_information16 -- 2009 changes
1169 		             ,'INFO10',hoi.org_information17 -- 2009 changes
1170                      )
1171            ,hr_de_general.get_uci
1172             (p_report_date
1173             ,t.user_table_id
1174             ,r.user_row_id
1175             ,SUBSTR(c.user_column_name, 1, INSTR(c.user_column_name, '_') - 1) || '_ASG_INFO_DFN')) asg_info_dfn
1176     	 ,hr_de_general.get_uci
1177            (p_report_date
1178            ,t.user_table_id
1179            ,r.user_row_id
1180            ,SUBSTR(c.user_column_name, 1, INSTR(c.user_column_name, '_') - 1) || '_DATATYPE') datatype
1181 	   ,hr_de_general.get_uci
1182            (p_report_date
1183            ,t.user_table_id
1184            ,r.user_row_id
1185            ,SUBSTR(c.user_column_name, 1, INSTR(c.user_column_name, '_') - 1) || '_XML_CODE_MAP') XML_VALUE_MAP --2007/08 changes
1186    FROM   pay_user_rows_f r
1187          ,pay_user_tables t
1188          ,pay_user_columns c
1189          ,pay_user_column_instances_f ci
1190          ,hr_organization_information hoi
1191    WHERE  t.user_table_name       = 'NO_EOY_CODE_REPORTING_RULES'
1192      AND  c.user_table_id         = t.user_table_id
1193      AND  r.user_table_id         = t.user_table_id
1194      AND  ci.user_row_id          = r.user_row_id
1195      AND  ci.user_column_id       = c.user_column_id
1196      AND  c.user_column_name      LIKE '%PROMPT'
1197      AND  r.row_low_range_or_name = p_reporting_code
1198 	 AND  r.row_low_range_or_name = hoi.org_information3(+)
1199 	 AND  hoi.organization_id(+)  = p_legal_employer_id
1200 	 AND  hoi.org_information_context(+) = 'NO_EOY_REPORTING_RULE_OVERRIDE'
1201 	 AND  to_number(to_char(p_report_date,'YYYY')) BETWEEN to_number(hoi.org_information1(+))
1202                             AND to_number(nvl(hoi.org_information2,'4712'))
1203      AND  p_report_date BETWEEN r.effective_start_date   AND r.effective_end_date
1204      AND  p_report_date BETWEEN ci.effective_start_date  AND ci.effective_end_date;
1205   --
1206   CURSOR csr_LE_SI_LU_TM_INFO
1207           (p_report_date       IN DATE
1208           ,p_business_group_id IN NUMBER
1209           ,p_legal_employer_id IN NUMBER) IS
1210    SELECT DISTINCT
1211           DECODE(orginf2.org_information5
1212                 ,'Y', orginf2.org_information4
1213                 ,orginf1.org_information3) si_status
1214          ,org2.organization_id local_unit_id
1215 	     ,org2.name local_unit
1216          ,pac2.context_value tax_municipality_id
1217 	     ,lu.meaning tax_municipality
1218          ,TO_NUMBER(decode(hr_de_general.get_uci(p_report_date,t.user_table_id,r.user_row_id,'ZONE'),'1a','6','4a','7',
1219 	         hr_de_general.get_uci(p_report_date,t.user_table_id,r.user_row_id,'ZONE'))) ni_zone
1220 --         ,TO_NUMBER(SUBSTR(lu.meaning, 1,1)) ni_zone
1221           ,DECODE(orginf2.org_information5,'Y', orginf2.org_information2,orginf1.org_information4) nace_code   -- 2007/08 changes
1222 	  ,paa.assignment_id  assg_id        -- 2007/2008 Changes
1223     --Bug 14671801
1224     ,         DECODE(orginf2.org_information5
1225                 ,'Y', orginf2.org_information1
1226                 ,orginf1.org_information1) org_number
1227 
1228    FROM   pay_assignment_actions paa
1229          ,pay_payroll_actions ppa
1230          ,pay_action_contexts pac1
1231          ,pay_action_contexts pac2
1232          ,ff_contexts ctx1
1233          ,ff_contexts ctx2
1234          ,hr_lookups lu
1235          ,hr_organization_information orginf1
1236          ,hr_all_organization_units org2
1237          ,hr_organization_information orginf2
1238          ,pay_user_tables t
1239          ,pay_user_rows_f r
1240    WHERE  ppa.business_group_id           = p_business_group_id
1241      AND  paa.payroll_action_id           = ppa.payroll_action_id
1242      AND  pac1.assignment_action_id       = paa.assignment_action_id
1243      AND  pac1.context_id                 = ctx1.context_id
1244      AND  ctx1.context_name               = 'LOCAL_UNIT_ID'
1245      AND  pac2.assignment_action_id       = paa.assignment_action_id
1246      AND  pac2.context_id                 = ctx2.context_id
1247      AND  ctx2.context_name               = 'JURISDICTION_CODE'
1248      AND  r.row_low_range_or_name         = pac2.context_value
1249      AND  t.user_table_name               = 'NO_TAX_MUNICIPALITY'
1250      AND  t.legislation_code              = 'NO'
1251      AND  r.user_table_id                 = t.user_table_id
1252      AND  lu.lookup_type                  = 'NO_TAX_MUNICIPALITY'
1253      AND  lu.lookup_code                  = hr_de_general.get_uci(p_report_date,t.user_table_id,r.user_row_id,'MAPPING_ID')
1254      AND  paa.tax_unit_id                 = p_legal_employer_id
1255      AND  org2.organization_id            = pac1.context_value
1256      AND  orginf1.organization_id         = paa.tax_unit_id
1257      AND  orginf1.org_information_context = 'NO_LEGAL_EMPLOYER_DETAILS'
1258      AND  orginf2.organization_id         = org2.organization_id
1259      AND  orginf2.org_information_context = 'NO_LOCAL_UNIT_DETAILS'
1260      AND  ppa.effective_date BETWEEN TRUNC(p_report_date, 'Y') AND p_report_date
1261      AND  p_report_date      BETWEEN r.effective_start_date    AND r.effective_end_date
1262    ORDER BY DECODE(orginf2.org_information5, 'Y', orginf2.org_information4, orginf1.org_information3)
1263            ,org2.organization_id;
1264   --
1265   CURSOR csr_GET_ASG_ACT_ID
1266           (p_report_date       IN DATE
1267           ,p_business_group_id IN NUMBER
1268           ,p_legal_employer_id IN NUMBER
1269 	  ,p_assg_id           IN NUMBER) IS
1270    SELECT  max(paa.assignment_action_id)
1271     FROM   pay_payroll_actions    ppa
1272           ,pay_assignment_actions paa
1273     WHERE  ppa.business_group_id    = p_business_group_id
1274      AND   ppa.action_type          IN ('R','Q','I','B')
1275      AND   ppa.action_status        = 'C'
1276      AND   paa.payroll_action_id    = ppa.payroll_action_id
1277      AND   paa.assignment_id        = p_assg_id            -- changes 2007/2008
1278      AND   paa.tax_unit_id          = p_legal_employer_id
1279      AND   ppa.date_earned          BETWEEN TRUNC(p_report_date, 'Y') AND p_report_date;
1280 --
1281   --Bug 14671801
1282   Cursor csr_LE_Contact ( csr_v_legal_emp_id  hr_organization_information.organization_id%TYPE) IS
1283     SELECT hoi2.org_information2 email
1284           ,hoi3.org_information2 phone
1285       FROM hr_organization_units o1
1286           ,hr_organization_information hoi1
1287           ,hr_organization_information hoi2
1288           ,hr_organization_information hoi3
1289    WHERE  o1.business_group_id           = g_business_group_id
1290       AND hoi1.organization_id            = o1.organization_id
1291       AND hoi1.organization_id            = csr_v_legal_emp_id
1292       AND hoi1.org_information1           = 'HR_LEGAL_EMPLOYER'
1293       AND hoi1.org_information_context    = 'CLASS'
1294       AND hoi2.organization_id (+)        = o1.organization_id
1295       AND hoi2.org_information_context(+) = 'ORG_CONTACT_DETAILS'
1296       AND hoi2.org_information1(+)        = 'EMAIL'
1297       AND hoi3.organization_id (+)        = o1.organization_id
1298       AND hoi3.org_information_context(+) = 'ORG_CONTACT_DETAILS'
1299       AND hoi3.org_information1(+)        = 'PHONE';
1300     --
1301     rg_LE_Contact  csr_LE_Contact%rowtype; --Bug 14671801
1302 
1303       --
1304   l_act_inf_id                   NUMBER;
1305   l_ovn                          NUMBER;
1306   l_asg_act_id                   NUMBER;
1307   l_si_status                    VARCHAR2(30);
1308   l_local_unit_id                VARCHAR2(30);
1309   l_asg_info_dfn                 VARCHAR2(61);
1310   l_le_si_count                  NUMBER := 0;
1311   l_le_si_bal_table              t_le_si_bal_table;
1312   l_bal_value                    NUMBER := 0;
1313   l_le_name                      hr_all_organization_units.name%TYPE;
1314   l_le_addr1                     hr_locations_all.address_line_1%TYPE;
1315   l_le_addr2                     hr_locations_all.address_line_2%TYPE;
1316   l_le_addr3                     hr_locations_all.address_line_3%TYPE;
1317   l_le_postcode                  hr_locations_all.postal_code%TYPE;
1318   l_le_postoffice                VARCHAR2(100);
1319   l_to_name                      hr_all_organization_units.name%TYPE;
1320   l_to_addr1                     hr_locations_all.address_line_1%TYPE;
1321   l_to_addr2                     hr_locations_all.address_line_2%TYPE;
1322   l_to_addr3                     hr_locations_all.address_line_3%TYPE;
1323   l_to_postcode                  hr_locations_all.postal_code%TYPE;
1324   l_to_postoffice                VARCHAR2(100);
1325   l_ni_zone_arc                  VARCHAR2(10);
1326   l_tax_defbal_id                NUMBER := get_defined_balance(g_business_group_id, 'Tax', '_TU_LU_YTD');
1327   l_ec_spcl_pct_bse_defbal_id    NUMBER := get_defined_balance(g_business_group_id, 'Employer Contribution Special Percentage Base', '_TU_LU_YTD');
1328   l_ec_spcl_pct_defbal_id        NUMBER := get_defined_balance(g_business_group_id, 'Employer Contribution Special Percentage', '_TU_LU_YTD');
1329   l_ec_spcl_defbal_id            NUMBER := get_defined_balance(g_business_group_id, 'Employer Contribution Special', '_TU_LU_YTD');
1330   l_ec_defbal_id                 NUMBER := get_defined_balance(g_business_group_id, 'Employer Contribution Base', '_TU_MU_LU_YTD');
1331   l_eco62_defbal_id              NUMBER := get_defined_balance(g_business_group_id, 'Employer Contribution Over 62 Base', '_TU_MU_LU_YTD');
1332   -- Start Changes 2007/2008
1333 
1334   -- The Balance below are used to display for the new XML Requirements
1335 
1336   l_ec_spcl_reimb_bse_defbal_id  NUMBER := get_defined_balance(g_business_group_id, 'Employer Contribution Special Perc Benefit Reimbursed Base','_TU_LU_YTD');
1337   l_emp_pension_bse_defbal_id    NUMBER := get_defined_balance(g_business_group_id, 'Employers Pension Premium', '_TU_MU_LU_YTD');
1338 
1339   -- The six balance below will add up to give the Reimburse Base
1340   l_reimb_bse                    NUMBER := 0;
1341   l_emp_contr_bse                NUMBER := 0;
1342   l_pension_bse                  NUMBER := 0;
1343   l_tot_emp_contr_bse		 NUMBER := 0;
1344   l_tot_reimb_bse		 NUMBER := 0;
1345   l_tot_pension_bse              NUMBER := 0;
1346   l_sick_reimb_defbal_id         NUMBER := get_defined_balance(g_business_group_id, 'Sickness Benefit Reimbursed', '_TU_MU_LU_YTD');
1347   l_child_mind_reimb_defbal_id   NUMBER := get_defined_balance(g_business_group_id, 'Child Minder Sickness Benefit Reimbursed', '_TU_MU_LU_YTD');
1348   l_parent_reimb_defbal_id       NUMBER := get_defined_balance(g_business_group_id, 'Parental Benefit Reimbursed', '_TU_MU_LU_YTD');
1349   l_sick_hdy_reimb_defbal_id     NUMBER := get_defined_balance(g_business_group_id, 'Sickness Benefit Holiday Pay Reimbursed', '_TU_MU_LU_YTD');
1350   l_cld_sck_hdy_defbal_id        NUMBER := get_defined_balance(g_business_group_id, 'Child Minder Sickness Benefit Holiday Pay Reimbursed', '_TU_MU_LU_YTD');
1351   l_prnt_hdy_reimb_defbal_id     NUMBER := get_defined_balance(g_business_group_id, 'Parental Benefit Holiday Pay Reimbursed', '_TU_MU_LU_YTD');
1352 
1353   l_Legal_Emp_EA                 csr_Legal_Emp_EA%ROWTYPE;
1354   l_Legal_Emp_PP                 csr_Legal_Emp_PP%ROWTYPE;   -- Bug#9579261 fix
1355   l_pp_name                      csr_pp_name%ROWTYPE; -- Bug#9579261 fix
1356   -- End Changes 2007/2008
1357   --
1358  BEGIN
1359   hr_utility.set_location('Entering ' || l_proc_name, 10);
1360   --
1361   --
1362   -- Setup legislative parameters as global values for future use.
1363   --
1364   set_parameters(p_payroll_action_id);
1365   --
1366     Fnd_file.put_line(FND_FILE.LOG,'Inside Archive');
1367 
1368   -- Archive: EMEA REPORT DETAILS -> PYNOEOYA
1369   --
1370   pay_action_information_api.create_action_information
1371   (p_action_context_type         => 'PA'
1372   ,p_action_context_id           => p_payroll_action_id
1373   ,p_action_information_id       => l_act_inf_id
1374   ,p_object_version_number       => l_ovn
1375   ,p_effective_date              => g_report_date
1376   ,p_action_information_category => 'EMEA REPORT DETAILS'
1377   ,p_action_information1         => 'PYNOEOYA');
1378   --
1379   --
1380   -- Loop through all legal employers.
1381   --
1382   --
1383  -- Fnd_file.put_line(FND_FILE.LOG,'csr_LEGEMP g_business_group_id'||g_business_group_id);
1384  -- Fnd_file.put_line(FND_FILE.LOG,'csr_LEGEMP g_legal_employer_id'||g_legal_employer_id);
1385   FOR l_rec1 IN csr_LEGEMP(g_business_group_id, g_legal_employer_id) LOOP
1386    --
1387    l_Legal_Emp_PP := null; -- Bug#9579261 fix
1388     l_pp_name := null; -- Bug#9579261 fix
1389 
1390    -- Get details for legal employer.
1391    get_org_details
1392     (p_organization_id => l_rec1.legal_employer_id
1393     ,p_name            => l_le_name
1394     ,p_address_line1   => l_le_addr1
1395     ,p_address_line2   => l_le_addr2
1396     ,p_address_line3   => l_le_addr3
1397     ,p_postcode        => l_le_postcode
1398     ,p_postoffice      => l_le_postoffice);
1399    --
1400    --Bug 14671801
1401    OPEN csr_LE_Contact(l_rec1.legal_employer_id);
1402    FETCH csr_LE_Contact INTO rg_LE_Contact;
1403    CLOSE csr_LE_Contact;
1404 
1405    --
1406    -- Get details for tax office.
1407    --
1408    get_org_details
1409     (p_organization_id => l_rec1.tax_office_id
1410     ,p_name            => l_to_name
1411     ,p_address_line1   => l_to_addr1
1412     ,p_address_line2   => l_to_addr2
1413     ,p_address_line3   => l_to_addr3
1414     ,p_postcode        => l_to_postcode
1415     ,p_postoffice      => l_to_postoffice);
1416    --
1417    --
1418    OPEN csr_Legal_Emp_EA( l_rec1.legal_employer_id,g_business_group_id,g_report_date) ;
1419      FETCH csr_Legal_Emp_EA INTO l_Legal_Emp_EA;
1420      CLOSE csr_Legal_Emp_EA;
1421 
1422 -- Bug#9579261 fix
1423    OPEN csr_Legal_Emp_PP( l_rec1.legal_employer_id,g_business_group_id,g_report_date) ;
1424      FETCH csr_Legal_Emp_PP INTO l_Legal_Emp_PP;
1425      CLOSE csr_Legal_Emp_PP;
1426 
1427   IF l_Legal_Emp_PP.pp_id is not null THEN
1428   OPEN csr_pp_name(l_Legal_Emp_PP.pp_id);
1429   FETCH csr_pp_name INTO l_pp_name;
1430   CLOSE csr_pp_name;
1431  END IF;
1432  -- Bug#9579261 fix
1433 
1434    --
1435    -- Archive: EMEA REPORT INFORMATION | LEG_EMP_INFO
1436    --
1437    pay_action_information_api.create_action_information
1438    (p_action_context_type         => 'PA'
1439    ,p_action_context_id           => p_payroll_action_id
1440    ,p_action_information_id       => l_act_inf_id
1441    ,p_object_version_number       => l_ovn
1442    ,p_effective_date              => g_report_date
1443    ,p_action_information_category => 'EMEA REPORT INFORMATION'
1444    ,p_action_information1         => 'LEG_EMP_INFO'
1445    ,p_action_information2         => TO_CHAR(l_rec1.legal_employer_id)
1446    ,p_action_information3         => l_rec1.name
1447    ,p_action_information4         => l_rec1.organization_number
1448    ,p_action_information5         => l_le_addr1
1449    ,p_action_information6         => l_le_addr2
1450    ,p_action_information7         => l_le_addr3
1451    ,p_action_information8         => l_le_postcode
1452    ,p_action_information9         => l_le_postoffice
1453    ,p_action_information10        => l_to_name
1454    ,p_action_information11        => l_to_addr1
1455    ,p_action_information12        => l_to_addr2
1456    ,p_action_information13        => l_to_addr3
1457    ,p_action_information14        => l_to_postcode
1458    ,p_action_information15        => l_to_postoffice
1459    ,p_action_information16        => l_rec1.tax_municipality
1460    ,p_action_information17        => l_Legal_Emp_EA.economic_aid
1461    ,p_action_information18        => l_Legal_Emp_PP.pen_scheme -- Bug#9579261 fix
1462    ,p_action_information19        => l_pp_name.name -- Bug#9579261 fix
1463    ,p_action_information20        => rg_LE_Contact.phone  --Bug 14671801
1464    ,p_action_information21        => rg_LE_Contact.email  --Bug 14671801
1465    );    -- 2007/2008 Changes
1466    --
1467    l_le_si_bal_table := g_empty_le_si_bal_table;
1468    l_le_si_count := 0;
1469    l_si_status := '~';
1470    l_local_unit_id := '~';
1471    --
1472 
1473    -- Loop through all SI status, local unit, and tax municipality combinations for the legal employer.
1474    --
1475    FOR l_rec2 IN csr_LE_SI_LU_TM_INFO(g_report_date, g_business_group_id, l_rec1.legal_employer_id) LOOP
1476     --
1477     --
1478     -- Set balance contexts.
1479     --
1480     pay_balance_pkg.set_context('TAX_UNIT_ID', l_rec1.legal_employer_id);
1481     pay_balance_pkg.set_context('DATE_EARNED', fnd_date.date_to_canonical(g_report_date));
1482     pay_balance_pkg.set_context('LOCAL_UNIT_ID', l_rec2.local_unit_id);
1483     pay_balance_pkg.set_context('JURISDICTION_CODE', l_rec2.tax_municipality_id);
1484     --
1485     --
1486     -- Reset the values to Zero: changes 2007/2008
1487      l_reimb_bse     := 0;
1488      l_emp_contr_bse := 0;
1489      l_pension_bse   := 0 ;
1490 
1491     -- Moved on to a new SI status so initialise data structure.
1492     --
1493     IF NOT(l_si_status = l_rec2.si_status) THEN
1494      l_le_si_count := l_le_si_count + 1;
1495      l_le_si_bal_table(l_le_si_count).si_status := l_rec2.si_status;
1496      l_le_si_bal_table(l_le_si_count).tax := 0;
1497      l_le_si_bal_table(l_le_si_count).emp_contr_reimb_spcl_base := 0;
1498      l_le_si_bal_table(l_le_si_count).emp_contr_spcl_pct_base := 0;
1499      l_le_si_bal_table(l_le_si_count).emp_contr_spcl_pct := 0;
1500      l_le_si_bal_table(l_le_si_count).emp_contr_spcl := 0;
1501      FOR l_count IN 1..7 LOOP
1502       l_le_si_bal_table(l_le_si_count).pension.ni_zone(l_count) := 0;
1503       l_le_si_bal_table(l_le_si_count).emp_contr.ni_zone(l_count) := 0;
1504       l_le_si_bal_table(l_le_si_count).emp_contr_over62.ni_zone(l_count) := 0;
1505      END LOOP;
1506      l_le_si_bal_table(l_le_si_count).pension.total := 0;
1507      l_le_si_bal_table(l_le_si_count).emp_contr.total := 0;
1508      l_le_si_bal_table(l_le_si_count).emp_contr_over62.total := 0;
1509     END IF;
1510     --
1511     --
1512     -- Moved the call of the cursor outside the IF condition
1513     --
1514      OPEN csr_GET_ASG_ACT_ID(g_report_date, g_business_group_id, l_rec1.legal_employer_id, l_rec2.assg_id) ;  -- Changes  2007/2008
1515      FETCH csr_GET_ASG_ACT_ID INTO l_asg_act_id;
1516      CLOSE csr_GET_ASG_ACT_ID;
1517      --
1518      -- Find distinct SI status / local unit combinations as these will be used later to combine the totals for various reporting codes.
1519      --
1520      IF NOT(l_si_status = l_rec2.si_status AND l_local_unit_id = l_rec2.local_unit_id) THEN
1521      --
1522      --
1523      -- Archive: EMEA REPORT INFORMATION | LE_SI_LU_INFO
1524      --
1525      pay_action_information_api.create_action_information
1526      (p_action_context_type         => 'PA'
1527      ,p_action_context_id           => p_payroll_action_id
1528      ,p_action_information_id       => l_act_inf_id
1529      ,p_object_version_number       => l_ovn
1530      ,p_effective_date              => g_report_date
1531      ,p_action_information_category => 'EMEA REPORT INFORMATION'
1532      ,p_action_information1         => 'LE_SI_LU_INFO'
1533      ,p_action_information2         => TO_CHAR(l_rec1.legal_employer_id)
1534      ,p_action_information3         => l_rec2.si_status
1535      ,p_action_information4         => l_rec2.local_unit_id
1536      ,p_action_information5         => l_rec2.nace_code );           -- 2007-08 changes
1537      --
1538      -- Retrieve balances for:-
1539      --
1540      --  Tax_TU_LU_YTD
1541      --  Employer Contribution Special Percentage Base_TU_LU_YTD
1542      --  Employer Contribution Special Percentage_TU_LU_YTD
1543      --  Employer Contribution Special_TU_LU_YTD
1544      --
1545      --
1546      l_bal_value := pay_balance_pkg.get_value(p_defined_balance_id => l_tax_defbal_id, p_assignment_action_id => l_asg_act_id);
1547      l_le_si_bal_table(l_le_si_count).tax := l_le_si_bal_table(l_le_si_count).tax + l_bal_value;
1548      --
1549      l_bal_value := pay_balance_pkg.get_value(p_defined_balance_id => l_ec_spcl_pct_bse_defbal_id, p_assignment_action_id => l_asg_act_id);
1550      l_le_si_bal_table(l_le_si_count).emp_contr_spcl_pct_base := l_le_si_bal_table(l_le_si_count).emp_contr_spcl_pct_base + l_bal_value;
1551      --
1552      l_bal_value := pay_balance_pkg.get_value(p_defined_balance_id => l_ec_spcl_pct_defbal_id, p_assignment_action_id => l_asg_act_id);
1553      l_le_si_bal_table(l_le_si_count).emp_contr_spcl_pct := l_le_si_bal_table(l_le_si_count).emp_contr_spcl_pct + l_bal_value;
1554      --
1555      l_bal_value := pay_balance_pkg.get_value(p_defined_balance_id => l_ec_spcl_defbal_id, p_assignment_action_id => l_asg_act_id);
1556      l_le_si_bal_table(l_le_si_count).emp_contr_spcl := l_le_si_bal_table(l_le_si_count).emp_contr_spcl + l_bal_value;
1557      --
1558 
1559     END IF;
1560     --
1561      -- Start changes 2007/2008
1562      -- Special Reimburesd Base for US/Canada
1563      l_bal_value := pay_balance_pkg.get_value(p_defined_balance_id => l_ec_spcl_reimb_bse_defbal_id, p_assignment_action_id => l_asg_act_id);
1564      l_le_si_bal_table(l_le_si_count).emp_contr_reimb_spcl_base := l_le_si_bal_table(l_le_si_count).emp_contr_reimb_spcl_base + l_bal_value;
1565      --
1566      -- Employer Contribution Base
1567      --
1568      l_emp_contr_bse := pay_balance_pkg.get_value(p_defined_balance_id => l_ec_defbal_id, p_assignment_action_id => l_asg_act_id);
1569      l_tot_emp_contr_bse := nvl(l_tot_emp_contr_bse,0) + nvl(l_emp_contr_bse,0);
1570      --
1571      --  Reimbursed Base
1572      --
1573      l_reimb_bse := pay_balance_pkg.get_value(p_defined_balance_id  => l_sick_reimb_defbal_id
1574 					    ,p_assignment_action_id => l_asg_act_id);
1575      l_reimb_bse := nvl(l_reimb_bse,0) + nvl(pay_balance_pkg.get_value(p_defined_balance_id   => l_child_mind_reimb_defbal_id
1576 								      ,p_assignment_action_id => l_asg_act_id),0);
1577      l_reimb_bse := nvl(l_reimb_bse,0) + nvl(pay_balance_pkg.get_value(p_defined_balance_id   => l_parent_reimb_defbal_id
1578  					                              ,p_assignment_action_id => l_asg_act_id),0);
1579      l_reimb_bse := nvl(l_reimb_bse,0) + nvl(pay_balance_pkg.get_value(p_defined_balance_id   => l_sick_hdy_reimb_defbal_id
1580 					                              ,p_assignment_action_id => l_asg_act_id),0);
1581      l_reimb_bse := nvl(l_reimb_bse,0) + nvl(pay_balance_pkg.get_value(p_defined_balance_id   => l_cld_sck_hdy_defbal_id
1582 					                              ,p_assignment_action_id => l_asg_act_id),0);
1583      l_reimb_bse := nvl(l_reimb_bse,0) + nvl(pay_balance_pkg.get_value(p_defined_balance_id   => l_prnt_hdy_reimb_defbal_id
1584            				                              ,p_assignment_action_id => l_asg_act_id),0);
1585      --  Total of the Reimbursed bases for all the zones
1586      l_tot_reimb_bse := nvl(l_tot_reimb_bse,0) + nvl(l_reimb_bse,0);
1587      --
1588      -- Pension Base
1589      --
1590      l_pension_bse := pay_balance_pkg.get_value(p_defined_balance_id => l_emp_pension_bse_defbal_id , p_assignment_action_id => l_asg_act_id);
1591 
1592      l_tot_pension_bse := nvl(l_tot_pension_bse,0) + nvl(l_pension_bse,0);
1593      --
1594      -- End 2007/2008 changes
1595      --
1596     l_ni_zone_arc := NULL;
1597     --
1598     SELECT DECODE(l_rec2.ni_zone,6,'1a',7,'1a',l_rec2.ni_zone)
1599     INTO l_ni_zone_arc
1600     FROM DUAL;
1601     --
1602     --
1603     -- Archive: EMEA REPORT INFORMATION | LE_SI_LU_TM_INFO
1604     --
1605     pay_action_information_api.create_action_information
1606     (p_action_context_type         => 'PA'
1607     ,p_action_context_id           => p_payroll_action_id
1608     ,p_action_information_id       => l_act_inf_id
1609     ,p_object_version_number       => l_ovn
1610     ,p_effective_date              => g_report_date
1611     ,p_action_information_category => 'EMEA REPORT INFORMATION'
1612     ,p_action_information1         => 'LE_SI_LU_TM_INFO'
1613     ,p_action_information2         => TO_CHAR(l_rec1.legal_employer_id)
1614     ,p_action_information3         => l_rec2.si_status
1615     ,p_action_information4         => l_rec2.local_unit_id
1616     ,p_action_information5         => l_rec2.local_unit
1617     ,p_action_information6         => l_rec2.tax_municipality_id
1618     ,p_action_information7         => l_rec2.tax_municipality
1619     ,p_action_information8         => l_ni_zone_arc
1620     ,p_action_information9         => fnd_number.number_to_canonical(l_emp_contr_bse)  -- 2007/2008 changes
1621     ,p_action_information10        => fnd_number.number_to_canonical(l_reimb_bse)      -- 2007/2008 changes
1622     ,p_action_information11        => fnd_number.number_to_canonical(l_pension_bse)  -- 2007/2008 Changes
1623     ,p_action_information12        => l_rec2.org_number);     --Bug 14671801
1624     --
1625 
1626     -- Retrieve balances for:-
1627     --
1628     --  Employer Contribution Base_TU_MU_LU_YTD
1629     --  Employer Contribution Over 62 Base_TU_MU_LU_YTD
1630     --
1631     -- and add them into correct NI Zone.
1632     --
1633     l_bal_value := pay_balance_pkg.get_value(p_defined_balance_id => l_ec_defbal_id, p_assignment_action_id => l_asg_act_id);
1634     l_le_si_bal_table(l_le_si_count).emp_contr.ni_zone(l_rec2.ni_zone) :=
1635       l_le_si_bal_table(l_le_si_count).emp_contr.ni_zone(l_rec2.ni_zone) + l_bal_value;
1636     l_le_si_bal_table(l_le_si_count).emp_contr.total :=
1637       l_le_si_bal_table(l_le_si_count).emp_contr.total + l_bal_value;
1638     --
1639     l_bal_value := pay_balance_pkg.get_value(p_defined_balance_id => l_eco62_defbal_id, p_assignment_action_id => l_asg_act_id);
1640     l_le_si_bal_table(l_le_si_count).emp_contr_over62.ni_zone(l_rec2.ni_zone) :=
1641     l_le_si_bal_table(l_le_si_count).emp_contr_over62.ni_zone(l_rec2.ni_zone) + l_bal_value;
1642     l_le_si_bal_table(l_le_si_count).emp_contr_over62.total :=
1643     l_le_si_bal_table(l_le_si_count).emp_contr_over62.total + l_bal_value;
1644     --
1645     l_si_status := l_rec2.si_status;
1646     l_local_unit_id := l_rec2.local_unit_id;
1647    END LOOP;
1648    --
1649    -- Loop through all legal employer / SI status records and write them out to archive.
1650    --
1651    IF l_le_si_bal_table.count > 0 THEN
1652    FOR l_count2 IN l_le_si_bal_table.FIRST .. l_le_si_bal_table.LAST LOOP
1653     --
1654     --
1655     -- Archive: EMEA REPORT INFORMATION | LE_SI_BALS
1656     --
1657     pay_action_information_api.create_action_information
1658     (p_action_context_type         => 'PA'
1659     ,p_action_context_id           => p_payroll_action_id
1660     ,p_action_information_id       => l_act_inf_id
1661     ,p_object_version_number       => l_ovn
1662     ,p_effective_date              => g_report_date
1663     ,p_action_information_category => 'EMEA REPORT INFORMATION'
1664     ,p_action_information1         => 'LE_SI_BALS'
1665     ,p_action_information2         => TO_CHAR(l_rec1.legal_employer_id)
1666     ,p_action_information3         => l_le_si_bal_table(l_count2).si_status
1667     ,p_action_information4         => fnd_number.number_to_canonical(l_le_si_bal_table(l_count2).emp_contr.ni_zone(1))
1668     ,p_action_information5         => fnd_number.number_to_canonical(l_le_si_bal_table(l_count2).emp_contr.ni_zone(2))
1669     ,p_action_information6         => fnd_number.number_to_canonical(l_le_si_bal_table(l_count2).emp_contr.ni_zone(3))
1670     ,p_action_information7         => fnd_number.number_to_canonical(l_le_si_bal_table(l_count2).emp_contr.ni_zone(4))
1671     ,p_action_information8         => fnd_number.number_to_canonical(l_le_si_bal_table(l_count2).emp_contr.ni_zone(5))
1672     ,p_action_information9         => fnd_number.number_to_canonical(l_le_si_bal_table(l_count2).emp_contr.total)
1673     ,p_action_information10        => fnd_number.number_to_canonical(l_le_si_bal_table(l_count2).emp_contr_over62.ni_zone(1))
1674     ,p_action_information11        => fnd_number.number_to_canonical(l_le_si_bal_table(l_count2).emp_contr_over62.ni_zone(2))
1675     ,p_action_information12        => fnd_number.number_to_canonical(l_le_si_bal_table(l_count2).emp_contr_over62.ni_zone(3))
1676     ,p_action_information13        => fnd_number.number_to_canonical(l_le_si_bal_table(l_count2).emp_contr_over62.ni_zone(4))
1677     ,p_action_information14        => fnd_number.number_to_canonical(l_le_si_bal_table(l_count2).emp_contr_over62.ni_zone(5))
1678     ,p_action_information15        => fnd_number.number_to_canonical(l_le_si_bal_table(l_count2).emp_contr_over62.total)
1679     ,p_action_information16        => fnd_number.number_to_canonical(l_le_si_bal_table(l_count2).tax)
1680     ,p_action_information17        => fnd_number.number_to_canonical(l_le_si_bal_table(l_count2).emp_contr_spcl_pct_base)
1681     ,p_action_information18        => fnd_number.number_to_canonical(l_le_si_bal_table(l_count2).emp_contr_spcl_pct)
1682     ,p_action_information19        => fnd_number.number_to_canonical(l_le_si_bal_table(l_count2).emp_contr_spcl)
1683     ,p_action_information20        => fnd_number.number_to_canonical(get_global(g_report_date, 'NO_NI_FOREIGN_SPECIAL_RATE'))
1684     ,p_action_information21        => fnd_number.number_to_canonical(get_global(g_report_date, 'NO_NI_FOREIGN_MARINER_AMOUNT'))
1685     ,p_action_information22        => fnd_number.number_to_canonical(l_le_si_bal_table(l_count2).emp_contr_reimb_spcl_base)  -- 2007/2008 changes
1686     ,p_action_information23        => fnd_number.number_to_canonical(l_tot_reimb_bse)       -- 2007/2008 changes
1687     ,p_action_information24        => fnd_number.number_to_canonical(l_tot_pension_bse));   -- 2007/2008 changes
1688 
1689    END LOOP;
1690    END IF;
1691    --
1692    --
1693    -- Loop through all reporting code rules NB. The rules may vary between legal employers.
1694    --
1695    FOR l_rec3 IN csr_REPCODE(g_report_date, l_rec1.legal_employer_id) LOOP
1696     --
1697     --
1698     -- Extract IDs where appropriate i.e. element type ID or defined balance ID.
1699     --
1700  --Fnd_file.put_line(FND_FILE.LOG,'$$ l_rec3.asg_info_dfn'||l_rec3.asg_info_dfn);
1701     IF l_rec3.asg_info_meth = 'BAL' THEN
1702      l_asg_info_dfn := TO_CHAR(get_defined_balance(g_business_group_id, l_rec3.asg_info_dfn, '_ASG_TU_MC_LU_YTD'));
1703     ELSIF l_rec3.asg_info_meth = 'BAL_CODE_CTX' THEN
1704      l_asg_info_dfn := TO_CHAR(get_defined_balance(g_business_group_id, l_rec3.asg_info_dfn, '_ASG_ELE_CODE_TU_MC_LU_YTD'));
1705     ELSIF l_rec3.asg_info_meth = 'RRV_ELEMENT' THEN
1706      l_asg_info_dfn := TO_CHAR(get_element(g_business_group_id, l_rec3.asg_info_dfn));
1707     ELSE
1708      l_asg_info_dfn := l_rec3.asg_info_dfn;
1709     END IF;
1710  --Fnd_file.put_line(FND_FILE.LOG,'$$ l_asg_info_dfn'||l_asg_info_dfn);
1711     --
1712     -- Archive: EMEA REPORT INFORMATION | REP_CODE_DTLS
1713     --
1714     pay_action_information_api.create_action_information
1715     (p_action_context_type         => 'PA'
1716     ,p_action_context_id           => p_payroll_action_id
1717     ,p_action_information_id       => l_act_inf_id
1718     ,p_object_version_number       => l_ovn
1719     ,p_effective_date              => g_report_date
1720     ,p_action_information_category => 'EMEA REPORT INFORMATION'
1721     ,p_action_information1         => 'REP_CODE_DTLS'
1722     ,p_action_information2         => TO_CHAR(l_rec1.legal_employer_id)
1723     ,p_action_information3         => l_rec3.reporting_code
1724     ,p_action_information4         => l_rec3.fixed_code
1725     ,p_action_information5         => l_rec3.mult_rec
1726     ,p_action_information6         => l_rec3.reportable_earnings
1727     ,p_action_information7         => l_rec3.asg_info_meth
1728     ,p_action_information8         => l_asg_info_dfn
1729     ,p_action_information9         => l_rec3.rep_summ_meth
1730     ,p_action_information10        => l_rec3.rep_summ_dfn
1731     ,p_action_information11        => l_rec3.description
1732     ,p_action_information12         => l_rec3.XML_CODE); -- 2007/2008 Changes
1733     --
1734     --
1735     -- Loop through all information columns for the reporting code.
1736     --
1737     FOR l_rec4 IN csr_REPCODE_INFO(g_report_date, l_rec3.reporting_code, l_rec1.legal_employer_id) LOOP
1738      --
1739      --
1740      -- Extract IDs where appropriate i.e. element type ID or defined balance ID.
1741      --
1742      IF    l_rec3.asg_info_meth = 'BAL' AND l_rec4.asg_info_dfn IS NOT NULL THEN
1743       l_asg_info_dfn := TO_CHAR(get_defined_balance(g_business_group_id, l_rec4.asg_info_dfn, '_ASG_TU_MC_LU_YTD'));
1744      ELSIF l_rec3.asg_info_meth = 'BAL_CODE_CTX' AND l_rec4.asg_info_dfn IS NOT NULL THEN
1745       l_asg_info_dfn := TO_CHAR(get_defined_balance(g_business_group_id, l_rec4.asg_info_dfn, '_ASG_ELE_CODE_TU_MC_LU_YTD'));
1746      ELSE
1747       l_asg_info_dfn := NULL;
1748      END IF;
1749      --
1750      --
1751      -- Archive: EMEA REPORT INFORMATION | REP_CODE_INFO_DTLS
1752      --
1753      pay_action_information_api.create_action_information
1754      (p_action_context_type         => 'PA'
1755      ,p_action_context_id           => p_payroll_action_id
1756      ,p_action_information_id       => l_act_inf_id
1757      ,p_object_version_number       => l_ovn
1758      ,p_effective_date              => g_report_date
1759      ,p_action_information_category => 'EMEA REPORT INFORMATION'
1760      ,p_action_information1         => 'REP_CODE_INFO_DTLS'
1761      ,p_action_information2         => TO_CHAR(l_rec1.legal_employer_id)
1762      ,p_action_information3         => l_rec3.reporting_code
1763      ,p_action_information4         => l_rec4.info_id
1764      ,p_action_information5         => l_rec4.prompt
1765      ,p_action_information6         => l_rec4.datatype
1766      ,p_action_information7         => l_asg_info_dfn
1767      ,p_action_information8          => l_rec4.XML_VALUE_MAP);   --2007/2008 changes
1768     END LOOP;
1769    END LOOP;
1770   END LOOP;
1771   --
1772   -- Set SQL to identify potential candidate people to process.
1773   --
1774   p_sql :=
1775   'SELECT   DISTINCT per.person_id
1776    FROM     per_people_f per
1777            ,pay_payroll_actions ppa
1778    WHERE    ppa.payroll_action_id = :payroll_action_id
1779      AND    per.business_group_id = ppa.business_group_id
1780    ORDER BY per.person_id';
1781   --
1782   hr_utility.set_location('Leaving ' || l_proc_name, 1000);
1783  END range_code;
1784  --
1785  --
1786  -- -----------------------------------------------------------------------------
1787  -- Part of archive logic.
1788  -- -----------------------------------------------------------------------------
1789  --
1790  PROCEDURE assignment_action_code
1791  (p_payroll_action_id IN NUMBER
1792  ,p_start_person      IN NUMBER
1793  ,p_end_person        IN NUMBER
1794  ,p_chunk             IN NUMBER) IS
1795   --
1796   l_proc_name CONSTANT VARCHAR2(61) := l_package_name || '.assignment_action_code';
1797   --
1798   CURSOR csr_ASG
1799           (p_payroll_action_id IN NUMBER
1800           ,p_start_person      IN NUMBER
1801           ,p_end_person        IN NUMBER
1802           ,p_report_date       IN DATE) IS
1803    SELECT asg.person_id
1804          ,paa.assignment_id
1805          ,paa.tax_unit_id legal_employer_id
1806          ,TO_NUMBER(ac1.context_value) local_unit_id
1807          ,ac2.context_value tax_municipality
1808          ,ac3.context_value municipality_code
1809          ,hr_de_general.get_uci(p_report_date,t.user_table_id,r.user_row_id,'ZONE') ni_zone
1810          ,MAX(ppa.effective_date) effective_date
1811          ,MAX(asg.effective_end_date) effective_end_date
1812 	 ,MAX(asg.effective_start_date) effective_start_date      --Changes 2007/2008
1813    FROM   per_all_assignments_f  asg
1814          ,pay_assignment_actions paa
1815          ,pay_payroll_actions    ppa
1816          ,pay_action_information ai
1817          ,pay_action_contexts    ac1
1818          ,ff_contexts            ctx1
1819          ,pay_action_contexts    ac2
1820          ,ff_contexts            ctx2
1821          ,pay_action_contexts    ac3
1822          ,ff_contexts            ctx3
1823          ,pay_user_tables        t
1824          ,pay_user_rows_f        r
1825    WHERE  asg.person_id BETWEEN p_start_person AND p_end_person
1826      AND  paa.assignment_id              = asg.assignment_id
1827      AND  ppa.payroll_action_id          = paa.payroll_action_id
1828      AND  ac1.assignment_action_id       = paa.assignment_action_id
1829      AND  ctx1.context_id                = ac1.context_id
1830      AND  ctx1.context_name              = 'LOCAL_UNIT_ID'
1831      AND  ac3.assignment_action_id       = paa.assignment_action_id
1832      AND  ctx3.context_id                = ac3.context_id
1833      AND  ctx3.context_name              = 'SOURCE_TEXT2'
1834      AND  ac2.assignment_action_id       = paa.assignment_action_id
1835      AND  ctx2.context_id                = ac2.context_id
1836      AND  ctx2.context_name              = 'JURISDICTION_CODE'
1837      AND  t.user_table_name              = 'NO_TAX_MUNICIPALITY'
1838      AND  t.legislation_code             = 'NO'
1839      AND  r.user_table_id                = t.user_table_id
1840      AND  r.row_low_range_or_name        = ac2.context_value
1841      AND  paa.tax_unit_id                = TO_NUMBER(ai.action_information2)
1842      AND  ai.action_context_type         = 'PA'
1843      AND  ai.action_context_id           = p_payroll_action_id
1844      AND  ai.action_information_category = 'EMEA REPORT INFORMATION'
1845      AND  ai.action_information1         = 'LEG_EMP_INFO'
1846      AND  ppa.effective_date BETWEEN TRUNC(p_report_date,'Y') AND p_report_date
1847      AND  p_report_date      BETWEEN r.effective_start_date   AND r.effective_end_date
1848    GROUP BY asg.person_id
1849            ,paa.assignment_id
1850            ,paa.tax_unit_id
1851            ,TO_NUMBER(ac1.context_value)
1852            ,ac2.context_value
1853            ,ac3.context_value
1854            ,hr_de_general.get_uci(p_report_date,t.user_table_id,r.user_row_id,'ZONE')
1855    ORDER BY asg.person_id
1856            ,MAX(ppa.effective_date) DESC;
1857   --
1858   CURSOR csr_PER
1859           (p_person_id      IN NUMBER
1860           ,p_effective_date IN DATE) IS
1861    SELECT per.full_name
1862          ,per.national_identifier
1863          ,per.employee_number
1864 
1865    FROM   per_all_people_f per
1866    WHERE  per.person_id = p_person_id
1867      AND  p_effective_date BETWEEN per.effective_start_date
1868                                AND per.effective_end_date;
1869   --
1870   l_assact_id                NUMBER;
1871   l_person_id                NUMBER := -1;
1872   l_act_inf_id               NUMBER;
1873   l_ovn                      NUMBER;
1874   l_bal_value                NUMBER;
1875   l_seaman_status            VARCHAR2(1) := 'N';
1876   l_per_addr1                per_addresses.address_line1%TYPE;
1877   l_per_addr2                per_addresses.address_line2%TYPE;
1878   l_per_addr3                per_addresses.address_line3%TYPE;
1879   l_per_postcode             per_addresses.postal_code%TYPE;
1880   l_per_postoffice           VARCHAR2(100);
1881   l_non_cont_dates_days      VARCHAR2(20);
1882   l_employed_throughout_year VARCHAR2(9);
1883   l_person_rec               csr_PER%ROWTYPE;
1884   l_seaman_defbal_id NUMBER := get_defined_balance(g_business_group_id, 'Seaman', '_PER_TU_YTD');
1885   l_employment_start_date   DATE;
1886   l_employment_end_date     DATE;
1887   --
1888  BEGIN
1889   hr_utility.set_location('Entering ' || l_proc_name, 10);
1890   --
1891   --
1892   -- Setup legislative parameters as global values for future use.
1893   --
1894   set_parameters(p_payroll_action_id);
1895   --
1896   --
1897   -- Loop through all assignment, legal employer, local unit, tax municipality (ni zone) combinations for
1898   -- the legal employer.
1899   --
1900   FOR l_asg_rec IN csr_ASG(p_payroll_action_id, p_start_person, p_end_person, g_report_date) LOOP
1901    IF l_asg_rec.person_id <> l_person_id THEN
1902     --
1903     OPEN  csr_PER(l_asg_rec.person_id, l_asg_rec.effective_date);
1904     FETCH csr_PER INTO l_person_rec;
1905     CLOSE csr_PER;
1906     --
1907     pay_balance_pkg.set_context('TAX_UNIT_ID', l_asg_rec.legal_employer_id);
1908     pay_balance_pkg.set_context('DATE_EARNED', fnd_date.date_to_canonical(g_report_date));
1909      --
1910      --  Seaman_PER_TU_YTD
1911      --
1912     l_bal_value := pay_balance_pkg.get_value
1913                   (p_defined_balance_id => l_seaman_defbal_id
1914                   ,p_assignment_id      => l_asg_rec.assignment_id
1915                   ,p_virtual_date       => least(g_report_date,l_asg_rec.effective_end_date));
1916     --
1917     --
1918     l_seaman_status := 'N';
1919     --
1920     IF l_bal_value > 0 THEN
1921       l_seaman_status := 'Y';
1922     END IF;
1923     --
1924     -- Get the Person address
1925     --
1926     get_per_addr
1927      (p_person_id       => l_asg_rec.person_id
1928      ,p_report_date     => least(g_report_date, l_asg_rec.effective_end_date)
1929      ,p_address_line1   => l_per_addr1
1930      ,p_address_line2   => l_per_addr2
1931      ,p_address_line3   => l_per_addr3
1932      ,p_postcode        => l_per_postcode
1933      ,p_postoffice      => l_per_postoffice);
1934     --
1935     --
1936     --
1937     l_employed_throughout_year := employed_throughout_year(l_asg_rec.person_id
1938                                                , l_asg_rec.legal_employer_id, g_report_date);
1939     fnd_file.put_line(fnd_file.log,'l_employed_throughout_year:'||l_employed_throughout_year);
1940     l_non_cont_dates_days := NULL;
1941     --
1942     IF l_employed_throughout_year = 'N' THEN
1943     --
1944       l_non_cont_dates_days := employed_period (l_asg_rec.person_id
1945                                                ,l_asg_rec.legal_employer_id
1946                                                ,g_report_date);
1947     --
1948     END IF;
1949     --
1950     --Start Changes 2007/2008
1951      IF (to_char (l_asg_rec.effective_end_date, 'DD-MM-YYYY') ='31-12-4712') THEN
1952     --
1953         l_employment_end_date := NULL;
1954     ELSE
1955     --
1956       l_employment_end_date := l_asg_rec.effective_end_date;
1957 
1958     END IF;
1959     --
1960     l_employment_start_date := l_asg_rec.effective_start_date;
1961     --End  Changes 2007/2008
1962 
1963     -- Archive: EMEA REPORT INFORMATION | PER_INFO
1964     --
1965     pay_action_information_api.create_action_information
1966     (p_action_context_type         => 'PA'
1967     ,p_action_context_id           => p_payroll_action_id
1968     ,p_action_information_id       => l_act_inf_id
1969     ,p_object_version_number       => l_ovn
1970     ,p_effective_date              => g_report_date
1971     ,p_action_information_category => 'EMEA REPORT INFORMATION'
1972     ,p_action_information1         => 'PER_INFO'
1973     ,p_action_information2         => TO_CHAR(l_asg_rec.person_id)
1974     ,p_action_information3         => l_person_rec.full_name
1975     ,p_action_information4         => l_person_rec.employee_number
1976     ,p_action_information5         => l_person_rec.national_identifier
1977     ,p_action_information6         => hr_general.decode_lookup('YES_NO',l_employed_throughout_year)
1978     ,p_action_information7         => hr_general.decode_lookup('YES_NO',l_seaman_status)
1979     ,p_action_information8         => l_non_cont_dates_days
1980     ,p_action_information9         => l_per_addr1
1981     ,p_action_information10        => l_per_addr2
1982     ,p_action_information11        => l_per_addr3
1983     ,p_action_information12        => l_per_postcode
1984     ,p_action_information13        => l_per_postoffice
1985     ,p_action_information14        => fnd_date.date_to_canonical(l_employment_start_date)    --Changes 2007/2008
1986     ,p_action_information15        => fnd_date.date_to_canonical(l_employment_end_date)      --Changes 2007/2008
1987      );
1988    END IF;
1989    l_person_id := l_asg_rec.person_id;
1990    --
1991    --
1992    -- Create assignment action for archive process.
1993    --
1994    SELECT pay_assignment_actions_s.nextval INTO l_assact_id FROM dual;
1995    hr_nonrun_asact.insact
1996    (l_assact_id
1997    ,l_asg_rec.assignment_id
1998    ,p_payroll_action_id
1999    ,p_chunk
2000    ,NULL);
2001    --
2002    --
2003    -- Archive: EMEA REPORT INFORMATION | ASG_ACT_INFO
2004    --
2005    pay_action_information_api.create_action_information
2006    (p_action_context_type         => 'AAP'
2007    ,p_action_context_id           => l_assact_id
2008    ,p_action_information_id       => l_act_inf_id
2009    ,p_object_version_number       => l_ovn
2010    ,p_effective_date              => g_report_date
2011    ,p_action_information_category => 'EMEA REPORT INFORMATION'
2012    ,p_action_information1         => 'ASG_ACT_INFO'
2013    ,p_action_information2         => TO_CHAR(l_asg_rec.legal_employer_id)
2014    ,p_action_information3         => TO_CHAR(l_asg_rec.local_unit_id)
2015    ,p_action_information4         => l_asg_rec.ni_zone
2016    ,p_action_information5         => TO_CHAR(l_asg_rec.person_id)
2017    ,p_action_information6         => l_asg_rec.tax_municipality
2018    ,p_action_information7         => 'N'
2019    ,p_action_information8         => l_asg_rec.municipality_code
2020    );
2021   END LOOP;
2022   --
2023   hr_utility.set_location('Leaving ' || l_proc_name, 1000);
2024  END assignment_action_code;
2025  --
2026  --
2027  -- -----------------------------------------------------------------------------
2028  -- Part of archive logic.
2029  -- -----------------------------------------------------------------------------
2030  --
2031  PROCEDURE initialization_code
2032  (p_payroll_action_id IN NUMBER) IS
2033  BEGIN
2034   NULL;
2035  END initialization_code;
2036  --
2037  --
2038  -- -----------------------------------------------------------------------------
2039  -- Part of archive logic.
2040  -- -----------------------------------------------------------------------------
2041  --
2042  PROCEDURE archive_code
2043  (p_assignment_action_id IN NUMBER
2044  ,p_effective_date       IN DATE) IS
2045   --
2046   l_proc_name CONSTANT VARCHAR2(61) := l_package_name || '.archive_code';
2047   --
2048   CURSOR csr_ASGACT
2049           (p_assignment_action_id IN NUMBER) IS
2050    SELECT paa.assignment_id
2051          ,asg_act.action_information2 legal_employer_id
2052          ,asg_act.action_information3 local_unit_id
2053          ,asg_act.action_information4 ni_zone
2054          ,asg_act.action_information6 tax_municipality_id
2055          ,asg_act.action_information8 municipality_code
2056    FROM   pay_action_information asg_act
2057          ,pay_assignment_actions paa
2058    WHERE  asg_act.action_information_category = 'EMEA REPORT INFORMATION'
2059      AND  asg_act.action_information1         = 'ASG_ACT_INFO'
2060      AND  asg_act.action_context_type         = 'AAP'
2061      AND  asg_act.action_context_id           = paa.assignment_action_id
2062      AND  paa.assignment_action_id            = p_assignment_action_id;
2063   --
2064   CURSOR csr_BAL
2065           (p_payroll_action_id IN NUMBER
2066           ,p_legal_employer_id IN VARCHAR2) IS
2067    SELECT cde_dtl.action_information3 reporting_code
2068          ,TO_NUMBER(cde_dtl.action_information8) defined_balance_id
2069    FROM   pay_action_information cde_dtl
2070    WHERE  cde_dtl.action_context_type         = 'PA'
2071      AND  cde_dtl.action_context_id           = p_payroll_action_id
2072      AND  cde_dtl.action_information_category = 'EMEA REPORT INFORMATION'
2073      AND  cde_dtl.action_information1         = 'REP_CODE_DTLS'
2074      AND  cde_dtl.action_information2         = p_legal_employer_id
2075      AND  cde_dtl.action_information7        IN ('BAL','BAL_CODE_CTX');
2076   --
2077   CURSOR csr_BAL_ADDITIONAL_INFO
2078           (p_payroll_action_id IN NUMBER
2079           ,p_legal_employer_id IN VARCHAR2
2080           ,p_reporting_code    IN VARCHAR2) IS
2081    SELECT inf_dtl.action_information4 info_id
2082          ,TO_NUMBER(inf_dtl.action_information7) defined_balance_id
2083    FROM   pay_action_information inf_dtl
2084    WHERE  inf_dtl.action_context_type         = 'PA'
2085      AND  inf_dtl.action_context_id           = p_payroll_action_id
2086      AND  inf_dtl.action_information_category = 'EMEA REPORT INFORMATION'
2087      AND  inf_dtl.action_information1         = 'REP_CODE_INFO_DTLS'
2088      AND  inf_dtl.action_information2         = p_legal_employer_id
2089      AND  inf_dtl.action_information3         = p_reporting_code
2090      AND  inf_dtl.action_information7         IS NOT NULL;
2091   --
2092    CURSOR csr_RRV
2093           (p_payroll_action_id IN NUMBER
2094           ,p_business_group_id IN NUMBER
2095           ,p_assignment_id     IN NUMBER
2096           ,p_legal_employer_id IN VARCHAR2
2097           ,p_local_unit_id     IN VARCHAR2
2098           ,p_tax_municipality  IN VARCHAR2
2099           ,p_report_date       IN DATE) IS
2100    SELECT rr.run_result_id
2101          ,rr.element_type_id  element_type
2102          ,cde_dtl.action_information3 reporting_code
2103          ,cde_info_dtl.action_information4 info_id
2104          ,rrv.result_value
2105          ,cde_info_dtl.action_information6 dtype
2106 				, pee.creator_type creator_type
2107 				 ,cde_dtl.action_context_id action_context_id
2108 			--         ,pivf.uom dtype
2109    FROM   pay_action_information      cde_dtl
2110          ,pay_action_information      cde_info_dtl
2111      	 ,pay_element_type_extra_info eei
2112  	     ,pay_assignment_actions      paa
2113          ,pay_action_contexts         ac1
2114          ,ff_contexts                 ctx1
2115          ,pay_action_contexts         ac2
2116          ,ff_contexts                 ctx2
2117          ,pay_payroll_actions         ppa
2118      	 ,pay_run_results             rr
2119      	 ,pay_run_result_values       rrv
2120          ,pay_input_values_f          pivf
2121          ,pay_user_tables             t
2122          ,pay_user_rows_f             r
2123 ,pay_element_entries_f pee
2124    WHERE  cde_dtl.action_context_type              = 'PA'
2125      AND  cde_dtl.action_context_id                = p_payroll_action_id
2126      AND  cde_dtl.action_information_category      = 'EMEA REPORT INFORMATION'
2127      AND  cde_dtl.action_information1              = 'REP_CODE_DTLS'
2128      AND  cde_dtl.action_information2              = p_legal_employer_id
2129      AND  cde_dtl.action_information7              IN ('RRV', 'RRV_ELEMENT')
2130      AND  cde_info_dtl.action_context_type         = cde_dtl.action_context_type
2131      AND  cde_info_dtl.action_context_id           = cde_dtl.action_context_id
2132      AND  cde_info_dtl.action_information_category = cde_dtl.action_information_category
2133      AND  cde_info_dtl.action_information1         = 'REP_CODE_INFO_DTLS'
2134      AND  cde_info_dtl.action_information2         = cde_dtl.action_information2
2135      AND  cde_info_dtl.action_information3         = cde_dtl.action_information3
2136      AND  eei.eei_information3                     = cde_info_dtl.action_information3  --Reporting_Code
2137      AND  eei.information_type                     = 'NO_EOY_REPORTING_CODE_MAPPING'
2138      AND  to_number(to_char(p_report_date,'YYYY')) BETWEEN to_number(eei.eei_information1)
2139                                                    AND to_number(nvl(eei.eei_information2,'4712'))
2140      AND  ppa.business_group_id                    = p_business_group_id
2141      AND  ppa.action_type                          IN ('R','Q','I','B')
2142      AND  ppa.action_status                        = 'C'
2143      AND  ppa.payroll_action_id                    = paa.payroll_action_id
2144      AND  paa.action_status                        = 'C'
2145      AND  ac1.assignment_action_id                 = paa.assignment_action_id
2146      AND  ctx1.context_id                          = ac1.context_id
2147      AND  ctx1.context_name                        = 'LOCAL_UNIT_ID'
2148      AND  ac1.context_value                        = p_local_unit_id
2149      AND  ac2.assignment_action_id                 = paa.assignment_action_id
2150      AND  ctx2.context_id                          = ac2.context_id
2151      AND  ctx2.context_name                        = 'JURISDICTION_CODE'
2152      AND  t.user_table_name                        = 'NO_TAX_MUNICIPALITY'
2153      AND  t.legislation_code                       = 'NO'
2154      AND  r.user_table_id                          = t.user_table_id
2155      AND  r.row_low_range_or_name                  = ac2.context_value
2156      AND  ac2.context_value                        = p_tax_municipality
2157      AND  paa.tax_unit_id                          = TO_NUMBER(p_legal_employer_id)
2158      AND  paa.assignment_id                        = p_assignment_id
2159      AND  ppa.effective_date                       BETWEEN TRUNC(p_report_date, 'Y') AND p_report_date
2160      AND  rr.assignment_action_id                  = paa.assignment_action_id
2161      AND  eei.element_type_id                      = DECODE(cde_dtl.action_information7
2162                                                           ,'RRV', eei.element_type_id
2163                                                           ,TO_NUMBER(cde_dtl.action_information8))
2164      AND  rr.element_type_id                       = eei.element_type_id
2165      AND  rrv.run_result_id                        = rr.run_result_id
2166      AND  rrv.input_value_id                       = TO_NUMBER(DECODE(cde_info_dtl.action_information4
2167           	                                                     ,'INFO1' , eei.eei_information6
2168                                                                  ,'INFO2' , eei.eei_information8
2169                                                                  ,'INFO3' , eei.eei_information10
2170                                                                  ,'INFO4' , eei.eei_information12
2171                                                                  ,'INFO5' , eei.eei_information14
2172                                                                  ,'INFO6' , eei.eei_information16
2173                                                                  ,'INFO7' , eei.eei_information19   --2009 changes
2174                                                                  ,'INFO8' , eei.eei_information21   --2009 changes
2175                                                                  ,'INFO9' , eei.eei_information23   --2009 changes
2176                                                                  ,'INFO10' , eei.eei_information25   --2009 changes
2177                                                                  ,'AMOUNT', eei.eei_information4))
2178      AND  pivf.input_value_id                      = rrv.input_value_id
2179      AND  p_report_date                            BETWEEN pivf.effective_start_date
2180                                                    AND pivf.effective_end_date
2181      AND  p_report_date                            BETWEEN r.effective_start_date
2182                                                    AND r.effective_end_date
2183      and pee.element_entry_id = rr.element_entry_id
2184      and pee.effective_start_date  BETWEEN TRUNC(p_report_date, 'Y') AND p_report_date
2185    ORDER BY cde_dtl.action_information3, rr.run_result_id;
2186    --
2187    CURSOR csr_retro(p_legal_employer_id varchar2
2188 			 ,p_action_context_id number
2189  			 ,p_run_result_id number
2190                    ,p_reporting_code varchar2
2191 			 ,p_info_id varchar2
2192 			 ,p_report_date       IN DATE	) IS
2193 
2194 select cde_info_dtl.action_information3 reporting_code
2195          ,cde_info_dtl.action_information4 info_id
2196          ,rrv.result_value
2197          ,cde_info_dtl.action_information6 dtype
2198 			from 	pay_run_results rr,
2199 						pay_element_entries_f pee,
2200 						pay_run_results rr1 ,
2201             pay_run_result_values rrv,
2202 				--		pay_action_information      cde_dtl,
2203            pay_action_information      cde_info_dtl
2204             ,pay_element_type_extra_info eei
2205 						 ,pay_input_values_f          pivf
2206 where rr.run_result_id = p_run_result_id
2207 	and rr.element_entry_id = pee.element_entry_id
2208 	and pee.SOURCE_ASG_ACTION_ID is not null
2209 	and pee.source_id = rr1.run_result_id
2210       and rrv.run_result_id = rr1.run_result_id
2211      AND  cde_info_dtl.action_context_type         = 'PA'
2212      AND  cde_info_dtl.action_context_id           = p_action_context_id
2213      AND  cde_info_dtl.action_information_category = 'EMEA REPORT INFORMATION'
2214      AND  cde_info_dtl.action_information1         = 'REP_CODE_INFO_DTLS'
2215      AND  cde_info_dtl.action_information2         = p_legal_employer_id
2216      AND  cde_info_dtl.action_information3         = p_reporting_code
2217   AND  eei.eei_information3                     = cde_info_dtl.action_information3  --Reporting_Code
2218 AND cde_info_dtl.action_information4 = p_info_id
2219      AND  eei.information_type                     = 'NO_EOY_REPORTING_CODE_MAPPING'
2220      AND  to_number(to_char(p_report_date ,'YYYY')) BETWEEN to_number(eei.eei_information1)
2221                                                    AND to_number(nvl(eei.eei_information2,'4712'))
2222     AND  rr1.element_type_id                       = eei.element_type_id
2223  AND  rrv.input_value_id                       = TO_NUMBER(DECODE(cde_info_dtl.action_information4
2224           	                                                     ,'INFO1' , eei.eei_information6
2225                                                                  ,'INFO2' , eei.eei_information8
2226                                                                  ,'INFO3' , eei.eei_information10
2227                                                                  ,'INFO4' , eei.eei_information12
2228                                                                  ,'INFO5' , eei.eei_information14
2229                                                                  ,'INFO6' , eei.eei_information16
2230                                                                  ,'INFO7' , eei.eei_information19   --2009 changes
2231                                                                  ,'INFO8' , eei.eei_information21   --2009 changes
2232                                                                  ,'INFO9' , eei.eei_information23   --2009 changes
2233                                                                  ,'INFO10' , eei.eei_information25   --2009 changes
2234                                                              --    ,'AMOUNT', eei.eei_information4
2235                                                                 ))
2236      AND  pivf.input_value_id                      = rrv.input_value_id
2237      AND  p_report_date    BETWEEN pivf.effective_start_date
2238                                                    AND pivf.effective_end_date;
2239   --
2240   CURSOR csr_PROC
2241           (p_payroll_action_id IN NUMBER
2242           ,p_legal_employer_id IN VARCHAR2) IS
2243    SELECT cde_dtl.action_information3 reporting_code
2244          ,cde_dtl.action_information8 procedure_name
2245    FROM   pay_action_information cde_dtl
2246    WHERE  cde_dtl.action_context_type         = 'PA'
2247      AND  cde_dtl.action_context_id           = p_payroll_action_id
2248      AND  cde_dtl.action_information_category = 'EMEA REPORT INFORMATION'
2249      AND  cde_dtl.action_information1         = 'REP_CODE_DTLS'
2250      AND  cde_dtl.action_information2         = p_legal_employer_id
2251      AND  cde_dtl.action_information7         = 'PROCEDURE';
2252   --
2253   CURSOR csr_Seaman IS
2254    SELECT classification_id
2255     FROM  pay_element_classifications
2256    WHERE  classification_name = 'Seaman _ Earnings';
2257   --
2258   CURSOR csr_Seaman_Status
2259           (l_element_type      IN NUMBER
2260           ,l_classification_id IN NUMBER
2261           ,l_report_date       IN DATE) IS
2262    SELECT 'Y'
2263     FROM  pay_sub_classification_rules_f
2264     WHERE element_type_id   = l_element_type
2265     AND   classification_id = l_classification_id
2266     AND   l_report_date BETWEEN effective_start_date AND effective_end_date;
2267   --
2268   CURSOR csr_seaman_bal_status
2269            (l_classification_id  IN NUMBER
2270            ,l_defined_balance_id IN NUMBER) IS
2271    SELECT 'Y'
2272     FROM   pay_defined_balances        pdb
2273           ,pay_balance_classifications pbc
2274     WHERE  pbc.classification_id  = l_classification_id
2275     AND    pdb.balance_type_id    = pbc.balance_type_id
2276     AND    pdb.defined_balance_id = l_defined_balance_id;
2277   --
2278   CURSOR csr_549_118A
2279           (p_business_group_id IN NUMBER
2280           ,p_assignment_id     IN NUMBER
2281           ,p_legal_employer_id IN VARCHAR2
2282           ,p_local_unit_id     IN VARCHAR2
2283           ,p_tax_municipality  IN VARCHAR2
2284           ,p_report_date       IN DATE
2285           ,l_element_name      IN VARCHAR2 ) IS
2286    SELECT rrv.result_value    value
2287          ,pivf.uom            dtype
2288    FROM   pay_assignment_actions      paa
2289          ,pay_action_contexts         ac1
2290          ,ff_contexts                 ctx1
2291          ,pay_action_contexts         ac2
2292          ,ff_contexts                 ctx2
2293          ,pay_payroll_actions         ppa
2294      	 ,pay_run_results             rr
2295      	 ,pay_run_result_values       rrv
2296          ,pay_input_values_f          pivf
2297          ,pay_element_types_f         petf
2298          ,pay_user_tables             t
2299          ,pay_user_rows_f             r
2300    WHERE  ppa.business_group_id        = p_business_group_id
2301      AND  ppa.action_type              IN ('R','Q','I','B')
2302      AND  ppa.action_status            = 'C'
2303      AND  paa.payroll_action_id        = ppa.payroll_action_id
2304      AND  paa.action_status            = 'C'
2305      AND  ac1.assignment_action_id     = paa.assignment_action_id
2306      AND  ctx1.context_id              = ac1.context_id
2307      AND  ctx1.context_name            = 'LOCAL_UNIT_ID'
2308      AND  ac1.context_value            = p_local_unit_id
2309      AND  ac2.assignment_action_id     = paa.assignment_action_id
2310      AND  ctx2.context_id              = ac2.context_id
2311      AND  ctx2.context_name            = 'JURISDICTION_CODE'
2312      AND  t.user_table_name            = 'NO_TAX_MUNICIPALITY'
2313      AND  t.legislation_code           = 'NO'
2314      AND  r.user_table_id              = t.user_table_id
2315      AND  r.row_low_range_or_name      = ac2.context_value
2316      AND  ac2.context_value            = p_tax_municipality
2317      AND  paa.tax_unit_id              = TO_NUMBER(p_legal_employer_id)
2318      AND  paa.assignment_id            = p_assignment_id
2319      AND  rr.assignment_action_id      = paa.assignment_action_id
2320      AND  rr.element_type_id           = petf.element_type_id
2321 	 AND  petf.element_name            = l_element_name
2322 	 AND  petf.legislation_code        = 'NO'
2323      AND  rrv.run_result_id            = rr.run_result_id
2324      AND  pivf.name                    = 'Pay Value'
2325 	 AND  pivf.legislation_code        = 'NO'
2326      AND  pivf.input_value_id          = rrv.input_value_id
2327 	 AND  pivf.element_type_id         = petf.element_type_id
2328      AND  ppa.effective_date           BETWEEN TRUNC(p_report_date, 'Y') AND p_report_date
2329      AND  p_report_date                BETWEEN petf.effective_start_date
2330                                        AND petf.effective_end_date
2331      AND  p_report_date                BETWEEN pivf.effective_start_date
2332                                        AND pivf.effective_end_date
2333      AND  p_report_date                BETWEEN r.effective_start_date
2334                                        AND r.effective_end_date;
2335   --
2336   /* For 2009 Legislative changes related to Foriegn Travel rates, from March 2009
2337   the following element's preocessing rules, processing results and balance feed
2338   haven been end dated by 28-FEB-2009.
2339   1) Total Abroad Overnight Travel over 28 days Hotel
2340   2) Adjustment Total Abroad Overnight Travel over 28 days Hotel
2341   3) Total Domestic Overnight Travel over 28 days Hotel
2342   4) Adjustment Total Domestic Overnight Travel over 28 days Hotel
2343   Newly created following elements will be used from 01-mar-2009
2344   1) Per Diem Over 28 Days Hotel Abroad
2345   2) Adjustment Per Diem Over 28 Days Hotel Abroad
2346   3) Per Diem Over 28 Days Hotel Domestic
2347   4) Adjustment Per Diem Over 28 Days Hotel Domestic.
2348   To select newly created element's rr values, new element name also added in
2349   the where clause   */
2350   CURSOR csr_613_616
2351           (p_business_group_id IN NUMBER
2352           ,p_assignment_id     IN NUMBER
2353           ,p_legal_employer_id IN VARCHAR2
2354           ,p_local_unit_id     IN VARCHAR2
2355           ,p_tax_municipality  IN VARCHAR2
2356           ,p_report_date       IN DATE
2357           ,l_element_name      IN VARCHAR2
2358           ,l_new_element_name  IN VARCHAR2) IS
2359    SELECT rrv.result_value         value
2360 		 ,petf.element_type_id     element_type_id
2361 		 ,rr.run_result_id         rr_id
2362          ,petf.element_name        element_name
2363          ,ppa.action_type          action_type
2364    FROM   pay_assignment_actions      paa
2365          ,pay_action_contexts         ac1
2366          ,ff_contexts                 ctx1
2367          ,pay_action_contexts         ac2
2368          ,ff_contexts                 ctx2
2369          ,pay_payroll_actions         ppa
2370      	 ,pay_run_results             rr
2371      	 ,pay_run_result_values       rrv
2372          ,pay_input_values_f          pivf
2373          ,pay_element_types_f         petf
2374          ,pay_user_tables             t
2375          ,pay_user_rows_f             r
2376    WHERE  ppa.business_group_id        = p_business_group_id
2377      AND  ppa.action_type              IN ('R','Q','I','B')
2378      AND  ppa.action_status            = 'C'
2379      AND  paa.payroll_action_id        = ppa.payroll_action_id
2380      AND  paa.action_status            = 'C'
2381      AND  ac1.assignment_action_id     = paa.assignment_action_id
2382      AND  ctx1.context_id              = ac1.context_id
2383      AND  ctx1.context_name            = 'LOCAL_UNIT_ID'
2384      AND  ac1.context_value            = p_local_unit_id
2385      AND  ac2.assignment_action_id     = paa.assignment_action_id
2386      AND  ctx2.context_id              = ac2.context_id
2387      AND  ctx2.context_name            = 'JURISDICTION_CODE'
2388      AND  t.user_table_name            = 'NO_TAX_MUNICIPALITY'
2389      AND  t.legislation_code           = 'NO'
2390      AND  r.user_table_id              = t.user_table_id
2391      AND  r.row_low_range_or_name      = ac2.context_value
2392      AND  ac2.context_value            = p_tax_municipality
2393      AND  paa.tax_unit_id              = TO_NUMBER(p_legal_employer_id)
2394      AND  paa.assignment_id            = p_assignment_id
2395      AND  rr.assignment_action_id      = paa.assignment_action_id
2396      AND  rr.element_type_id           = petf.element_type_id
2397      AND  petf.element_name            IN ( l_element_name, 'Adjustment ' || l_element_name, l_new_element_name, 'Adjustment '||l_new_element_name )
2398 	 AND  petf.legislation_code        = 'NO'
2399      AND  rrv.run_result_id            = rr.run_result_id
2400      AND  pivf.name                    = 'Travel Reference Number'
2401 	 AND  pivf.legislation_code        = 'NO'
2402      AND  pivf.input_value_id          = rrv.input_value_id
2403      AND  pivf.element_type_id         = petf.element_type_id
2404      AND  ppa.effective_date           BETWEEN TRUNC(p_report_date, 'Y') AND p_report_date
2405      AND  p_report_date                BETWEEN petf.effective_start_date
2406                                        AND petf.effective_end_date
2407      AND  p_report_date                BETWEEN pivf.effective_start_date
2408                                        AND pivf.effective_end_date
2409      AND  p_report_date                BETWEEN r.effective_start_date
2410                                        AND r.effective_end_date
2411      order by rrv.result_value;
2412   --
2413   CURSOR csr_613_616_details
2414           (l_rr_id            IN NUMBER
2415           ,l_element_type_id  IN NUMBER
2416           ,p_report_date      IN DATE) IS
2417     SELECT sum(decode (piv.name,'Pay Value', fnd_number.canonical_to_number(rrv.result_value) ,0)) Pay_Value
2418 	      ,sum(decode (piv.name,'Per Diem', fnd_number.canonical_to_number(rrv.result_value) ,0)) Per_Diem
2419 	 	  ,sum(decode (piv.name,'Number of Days to be reported', fnd_number.canonical_to_number(rrv.result_value) ,0)) Reporting_Days
2420 		  ,sum(decode (piv.name,'Number of Days', fnd_number.canonical_to_number(rrv.result_value) ,0)) Days
2421           ,max(decode (piv.name,'Country', rrv.result_value)) Country
2422 	  FROM pay_run_result_values rrv
2423           ,pay_input_values_f    piv
2424 	 WHERE rrv.run_result_id   = l_rr_id
2425 	   AND piv.element_type_id = l_element_type_id
2426 	   AND piv.name            IN ('Pay Value','Number of Days','Per Diem','Number of Days to be reported','Country')
2427 	   AND piv.input_value_id  = rrv.input_value_id
2428        AND p_report_date       BETWEEN piv.effective_start_date
2429                                AND piv.effective_end_date;
2430   --
2431   l_asg_act_rec    csr_ASGACT%ROWTYPE;
2432   l_plsql_block    VARCHAR2(2000) := 'BEGIN <PROC>(:1, :2, :3); END;';
2433   l_rep_code_rec   t_rep_code_rec;
2434   l_act_inf_id     NUMBER;
2435   l_ovn            NUMBER;
2436   l_amount         NUMBER;
2437   l_rr_id          NUMBER := -1;
2438   l_classification_id  pay_element_classifications.classification_id%TYPE;
2439   l_element_type_id    pay_element_Types_f.element_type_id%TYPE;
2440   l_element_name       pay_element_types_f.element_name%TYPE;
2441   rec_613_616_details  csr_613_616_details%ROWTYPE;
2442   l_seaman_status      VARCHAR2(2);
2443   l_Travel_Ref         VARCHAR2(60);
2444   l_Pay_Value          NUMBER;
2445   l_Days               NUMBER;
2446   status_616           NUMBER;
2447   l_index_616          NUMBER;
2448   l_code_616           code_616;
2449   l_payroll_action_id  pay_assignment_actions.payroll_action_id%type;
2450   r_retro_rec csr_retro%rowtype;
2451   --
2452  BEGIN
2453   hr_utility.set_location('Entering ' || l_proc_name, 10);
2454   --
2455   /* Select Payroll_action_id
2456      into l_payroll_action_id
2457     from pay_assignment_actions paa
2458     where paa.assignment_action_id = p_assignment_action_id;
2459 
2460   set_parameters(l_payroll_action_id);
2461 
2462   hr_utility.set_location('After setting globals ' || l_proc_name, 30); */
2463 
2464   OPEN  csr_Seaman;
2465   FETCH csr_Seaman INTO l_classification_id;
2466   CLOSE csr_Seaman;
2467   --
2468   --
2469   -- Get information for the assignment action being processed.
2470   --
2471 --  fnd_file.put_line(fnd_file.log,'csr_ASGACT p_assignment_action_id'||p_assignment_action_id);
2472   OPEN  csr_ASGACT(p_assignment_action_id);
2473   FETCH csr_ASGACT INTO l_asg_act_rec;
2474   CLOSE csr_ASGACT;
2475   --
2476   --
2477   -- Setup balance contexts.
2478   --
2479   pay_balance_pkg.set_context('TAX_UNIT_ID'      , l_asg_act_rec.legal_employer_id);
2480   pay_balance_pkg.set_context('DATE_EARNED'      , fnd_date.date_to_canonical(g_report_date));
2481   pay_balance_pkg.set_context('LOCAL_UNIT_ID'    , l_asg_act_rec.local_unit_id);
2482 --  pay_balance_pkg.set_context('JURISDICTION_CODE', l_asg_act_rec.tax_municipality_id);
2483   pay_balance_pkg.set_context('SOURCE_TEXT2'     , l_asg_act_rec.municipality_code);
2484   --
2485   --
2486   -- Loop through all balance based reporting codes.
2487   --
2488 --  fnd_file.put_line(fnd_file.log,'csr_BAL g_payroll_action_id'||g_payroll_action_id);
2489 --  fnd_file.put_line(fnd_file.log,'csr_BAL legal_employer_id'||l_asg_act_rec.legal_employer_id);
2490   FOR l_bal_rec IN csr_BAL
2491                     (g_payroll_action_id
2492                     ,l_asg_act_rec.legal_employer_id)
2493   LOOP
2494    l_rep_code_rec := g_empty_rep_code_rec;
2495    --
2496    --
2497    -- Setup balance contexts NB. This is used for reporting codes using BAL_CODE_CTX.
2498    --
2499    pay_balance_pkg.set_context('SOURCE_TEXT', l_bal_rec.reporting_code);
2500  --fnd_file.put_line(fnd_file.log,'$$$ reporting_code: '||l_bal_rec.reporting_code);
2501    --
2502    --
2503    -- Get balance value.
2504    --
2505 --fnd_file.put_line(fnd_file.log,'$$$ l_bal_rec.defined_balance_id: '||l_bal_rec.defined_balance_id);
2506 --fnd_file.put_line(fnd_file.log,'$$$ l_asg_act_rec.assignment_id: '||l_asg_act_rec.assignment_id);
2507 --fnd_file.put_line(fnd_file.log,'$$$ g_report_date: '||g_report_date);
2508    IF l_bal_rec.defined_balance_id IS NOT NULL THEN
2509      l_amount := pay_balance_pkg.get_value
2510                  (p_defined_balance_id => l_bal_rec.defined_balance_id
2511                  ,p_assignment_id      => l_asg_act_rec.assignment_id
2512                  ,p_virtual_date       => g_report_date);
2513    ELSE
2514      l_amount := 0;
2515    END IF;
2516  --fnd_file.put_line(fnd_file.log,'$$$ l_amount: '||l_amount);
2517    --
2518    IF l_amount <> 0 THEN
2519     l_rep_code_rec.reporting_code := l_bal_rec.reporting_code;
2520     l_rep_code_rec.amount         := fnd_number.number_to_canonical(l_amount);
2521     --
2522     l_seaman_status := 'N';
2523     --
2524     OPEN  csr_seaman_bal_status(l_classification_id, l_bal_rec.defined_balance_id);
2525     FETCH csr_seaman_bal_status INTO l_seaman_status;
2526     CLOSE csr_seaman_bal_status;
2527     --
2528     -- Check if the code 549 is processed through the payroll, then it should be
2529     -- archived individually. i.e. should appear once for each concerned element is processed.
2530     --
2531     IF l_bal_rec.reporting_code = '549' THEN    --IN ('118-A', '549') THEN
2532     --
2533     --  IF l_bal_rec.reporting_code = '118-A' THEN
2534     --    l_element_name := 'BIK Company Cars';
2535     --  ELSIF l_bal_rec.reporting_code = '549' THEN
2536         l_element_name := 'BIK Employer Assets';
2537     --  END IF;
2538       --
2539       FOR rec_549_118A IN csr_549_118A (g_business_group_id
2540                                        ,l_asg_act_rec.assignment_id
2541                                        ,l_asg_act_rec.legal_employer_id
2542                                        ,l_asg_act_rec.local_unit_id
2543                                        ,l_asg_act_rec.tax_municipality_id
2544                                        ,g_report_date
2545                                        ,l_element_name )
2546       LOOP
2547         --
2548         IF rec_549_118A.dtype = 'M' THEN
2549           l_rep_code_rec.amount := fnd_number.number_to_canonical(rec_549_118A.value);
2550         ELSE
2551           l_rep_code_rec.amount := rec_549_118A.value;
2552         END IF;
2553         --
2554         --
2555         -- Archive: EMEA REPORT INFORMATION | ASG_REP_CODE_INFO
2556         --
2557         pay_action_information_api.create_action_information
2558         (p_action_context_type         => 'AAP'
2559         ,p_action_context_id           => p_assignment_action_id
2560         ,p_action_information_id       => l_act_inf_id
2561         ,p_object_version_number       => l_ovn
2562         ,p_effective_date              => g_report_date
2563         ,p_action_information_category => 'EMEA REPORT INFORMATION'
2564         ,p_action_information1         => 'ASG_REP_CODE_INFO'
2565         ,p_action_information2         => l_rep_code_rec.reporting_code
2566         ,p_action_information3         => l_rep_code_rec.amount
2567         ,p_action_information10        => l_seaman_status);
2568       --
2569       END LOOP;
2570     --
2571     ELSIF l_bal_rec.reporting_code = '613' THEN
2572       --
2573       l_Travel_Ref := NULL;
2574       l_Pay_Value  := 0;
2575       l_Days       := 0;
2576       --
2577       -- Get the RR ID, Element Type Id, Travel Ref Num
2578       --
2579        /* 2009 legislative changes related to foriegn travel rates.
2580        To select newly created element's('Per Diem Over 28 Days Hotel Domestic')
2581        rr values for archieval, that element also passed as an argument */
2582       FOR rec_613_616 IN csr_613_616 (g_business_group_id
2583                                      ,l_asg_act_rec.assignment_id
2584                                      ,l_asg_act_rec.legal_employer_id
2585                                      ,l_asg_act_rec.local_unit_id
2586                                      ,l_asg_act_rec.tax_municipality_id
2587                                      ,g_report_date
2588                                      ,'Total Domestic Overnight Travel over 28 days Hotel'
2589                                      ,'Per Diem Over 28 Days Hotel Domestic' )
2590       LOOP
2591       --
2592        IF rec_613_616.rr_id IS NOT NULL AND rec_613_616.element_type_id IS NOT NULL THEN
2593         --
2594         -- From the RR ID and Element Type ID, get additional info as 'Pay Value','Number of Days'
2595         -- for code 613
2596         --
2597         OPEN csr_613_616_details
2598               (rec_613_616.rr_id
2599               ,rec_613_616.element_type_id
2600               ,g_report_date);
2601         FETCH csr_613_616_details INTO rec_613_616_details;
2602         CLOSE csr_613_616_details;
2603         --
2604         IF NVL(l_Travel_Ref,rec_613_616.value) = rec_613_616.value  THEN
2605           l_Pay_Value  := l_Pay_Value + rec_613_616_details.Pay_Value;
2606           l_Days := l_Days + rec_613_616_details.Days;
2607           --
2608         ELSE
2609           --
2610           -- For the code 613, additional information order is Days
2611           -- Archive: EMEA REPORT INFORMATION | ASG_REP_CODE_INFO | Code 613
2612           --
2613           pay_action_information_api.create_action_information
2614           (p_action_context_type         => 'AAP'
2615           ,p_action_context_id           => p_assignment_action_id
2616           ,p_action_information_id       => l_act_inf_id
2617           ,p_object_version_number       => l_ovn
2618           ,p_effective_date              => g_report_date
2619           ,p_action_information_category => 'EMEA REPORT INFORMATION'
2620           ,p_action_information1         => 'ASG_REP_CODE_INFO'
2621           ,p_action_information2         => l_bal_rec.reporting_code
2622           ,p_action_information3         => fnd_number.number_to_canonical(l_Pay_Value)
2623           ,p_action_information4         => fnd_number.number_to_canonical(l_Days)
2624           ,p_action_information10        => l_seaman_status);
2625           --
2626           l_Pay_Value  := rec_613_616_details.Pay_Value;
2627           l_Days := rec_613_616_details.Days;
2628           --
2629         END IF;
2630         l_Travel_Ref := rec_613_616.value;
2631         --
2632        END IF; -- rr_id, ele_typ_id
2633        --
2634       END LOOP;
2635       --
2636       -- Archive last RR Values for Pav Value, Number of Days based on the RR ID
2637       --
2638       IF l_Travel_Ref IS NOT NULL THEN
2639         --
2640         --
2641         -- Archive: EMEA REPORT INFORMATION | ASG_REP_CODE_INFO | Code 613, 616
2642         --
2643         pay_action_information_api.create_action_information
2644         (p_action_context_type         => 'AAP'
2645         ,p_action_context_id           => p_assignment_action_id
2646         ,p_action_information_id       => l_act_inf_id
2647         ,p_object_version_number       => l_ovn
2648         ,p_effective_date              => g_report_date
2649         ,p_action_information_category => 'EMEA REPORT INFORMATION'
2650         ,p_action_information1         => 'ASG_REP_CODE_INFO'
2651         ,p_action_information2         => l_bal_rec.reporting_code
2652         ,p_action_information3         => fnd_number.number_to_canonical(l_Pay_Value)
2653         ,p_action_information4         => fnd_number.number_to_canonical(l_Days)
2654         ,p_action_information10        => l_seaman_status);
2655         --
2656       END IF;
2657     --
2658     ELSIF l_bal_rec.reporting_code = '616' THEN -- to modify from here
2659       --
2660       l_Days       := 0;
2661       l_index_616  := 0;
2662       l_code_616.DELETE;
2663       --
2664       -- Get the RR ID, Element Type Id, Travel Ref Num
2665       --
2666        /* 2009 legislative changes related to foriegn travel rates.
2667       To select newly created element's('Per Diem Over 28 Days Hotel Abroad')
2668       rr values for archieval, that element also passed as an argument */
2669       FOR rec_613_616 IN csr_613_616 (g_business_group_id
2670                                      ,l_asg_act_rec.assignment_id
2671                                      ,l_asg_act_rec.legal_employer_id
2672                                      ,l_asg_act_rec.local_unit_id
2673                                      ,l_asg_act_rec.tax_municipality_id
2674                                      ,g_report_date
2675                                      ,'Total Abroad Overnight Travel over 28 days Hotel'
2676                                      ,'Per Diem Over 28 Days Hotel Abroad')
2677       LOOP
2678       --
2679        IF rec_613_616.rr_id IS NOT NULL AND rec_613_616.element_type_id IS NOT NULL THEN
2680          --
2681          -- From the RR ID and Element Type ID, get additional info as 'Pay Value','Number of Days'
2682          -- ,'Per Diem','Number of Days to be reported','Country') for code 616
2683          --
2684          OPEN csr_613_616_details
2685               (rec_613_616.rr_id
2686               ,rec_613_616.element_type_id
2687               ,g_report_date);
2688          FETCH csr_613_616_details INTO rec_613_616_details;
2689          CLOSE csr_613_616_details;
2690          --
2691          l_Days := NULL;
2692          --
2693          IF rec_613_616.element_name = 'Total Abroad Overnight Travel over 28 days Hotel' THEN
2694            l_Days := rec_613_616_details.Reporting_Days;
2695          ELSE
2696            l_Days := rec_613_616_details.Days;
2697          END IF;
2698          --
2699          IF rec_613_616.action_type IN ('I','B') OR l_index_616 = 0 THEN
2700            -- if this is balance adjustment / initialization or the very first trnsaction
2701            -- load it in plsql table
2702            l_index_616 := l_index_616 + 1;
2703            l_code_616(l_index_616).TRN       := rec_613_616.value;
2704            l_code_616(l_index_616).Country   := rec_613_616_details.Country;
2705            l_code_616(l_index_616).Per_Diem  := rec_613_616_details.Per_Diem;
2706            l_code_616(l_index_616).Pay_Value := rec_613_616_details.Pay_Value;
2707            l_code_616(l_index_616).Days      := l_Days;
2708          --
2709          ELSE -- If code generated is through Payroll run result
2710            -- find its accurate position corresponding to TRN, Per Diem and Country
2711            -- and add the values for Days and Pay Value
2712            status_616 := 0;
2713            --
2714            FOR i IN 1 .. l_index_616
2715            LOOP
2716              --
2717              IF l_code_616(i).TRN = rec_613_616.value
2718                AND l_code_616(i).Country = rec_613_616_details.Country
2719                AND l_code_616(i).Per_Diem = rec_613_616_details.Per_Diem THEN
2720                --
2721                l_code_616(i).Pay_Value := l_code_616(i).Pay_Value + rec_613_616_details.Pay_Value;
2722                l_code_616(i).Days      := l_code_616(i).Days + l_Days;
2723                status_616 := 1;
2724                EXIT;
2725              --
2726              ELSIF l_code_616(i).TRN > rec_613_616.value THEN
2727                --
2728                l_index_616 := l_index_616 + 1;
2729                l_code_616(l_index_616).TRN       := rec_613_616.value;
2730                l_code_616(l_index_616).Country   := rec_613_616_details.Country;
2731                l_code_616(l_index_616).Per_Diem  := rec_613_616_details.Per_Diem;
2732                l_code_616(l_index_616).Pay_Value := rec_613_616_details.Pay_Value;
2733                l_code_616(l_index_616).Days      := l_Days;
2734                status_616 := 1;
2735                EXIT;
2736              --
2737              END IF;
2738            --
2739            END LOOP;
2740            -- if new trn no from payroll run result then insert new record in plsql table
2741            IF status_616 = 0 THEN
2742            --
2743              l_index_616 := l_index_616 + 1;
2744              l_code_616(l_index_616).TRN       := rec_613_616.value;
2745              l_code_616(l_index_616).Country   := rec_613_616_details.Country;
2746              l_code_616(l_index_616).Per_Diem  := rec_613_616_details.Per_Diem;
2747              l_code_616(l_index_616).Pay_Value := rec_613_616_details.Pay_Value;
2748              l_code_616(l_index_616).Days      := l_Days;
2749              --
2750            END IF;
2751            --
2752          END IF; --'I','B'
2753          --
2754        END IF; -- rr_id and ele_type_id
2755       --
2756       END LOOP; -- trn num fetch
2757       --
2758       --  Archive all the records from plsql table against the code 616
2759       IF l_index_616 > 0 THEN
2760       --
2761         FOR i IN 1 .. l_index_616
2762         LOOP
2763         --
2764           pay_action_information_api.create_action_information
2765           (p_action_context_type         => 'AAP'
2766           ,p_action_context_id           => p_assignment_action_id
2767           ,p_action_information_id       => l_act_inf_id
2768           ,p_object_version_number       => l_ovn
2769           ,p_effective_date              => g_report_date
2770           ,p_action_information_category => 'EMEA REPORT INFORMATION'
2771           ,p_action_information1         => 'ASG_REP_CODE_INFO'
2772           ,p_action_information2         => l_bal_rec.reporting_code
2773           ,p_action_information3         => fnd_number.number_to_canonical(l_code_616(i).Pay_Value)
2774           ,p_action_information4         => fnd_number.number_to_canonical(l_code_616(i).Per_Diem)
2775           ,p_action_information5         => fnd_number.number_to_canonical(l_code_616(i).Days)
2776           ,p_action_information6         => l_code_616(i).Country
2777           ,p_action_information10        => l_seaman_status);
2778         --
2779         END LOOP;
2780       --
2781       END IF;
2782     --
2783     -- For the codes except 613, 616 and 549 only       -- and 111-A
2784     ELSE
2785     --
2786     -- Loop through any additional information for the rest of the codes.
2787     --
2788       FOR l_bal_info_rec IN csr_BAL_ADDITIONAL_INFO
2789                              (g_payroll_action_id
2790                              ,l_asg_act_rec.legal_employer_id
2791                              ,l_bal_rec.reporting_code)
2792       LOOP
2793        --
2794        --
2795        -- Get balance value.
2796        --
2797        IF l_bal_info_rec.defined_balance_id IS NOT NULL THEN
2798          l_amount := pay_balance_pkg.get_value
2799                     (p_defined_balance_id => l_bal_info_rec.defined_balance_id
2800                     ,p_assignment_id      => l_asg_act_rec.assignment_id
2801                     ,p_virtual_date       => g_report_date);
2802        ELSE
2803          l_amount := 0;
2804        END IF;
2805        --
2806        --
2807        IF    l_bal_info_rec.info_id = 'INFO1' THEN
2808         l_rep_code_rec.info1 := fnd_number.number_to_canonical(l_amount);
2809        ELSIF l_bal_info_rec.info_id = 'INFO2' THEN
2810         l_rep_code_rec.info2 := fnd_number.number_to_canonical(l_amount);
2811        ELSIF l_bal_info_rec.info_id = 'INFO3' THEN
2812         l_rep_code_rec.info3 := fnd_number.number_to_canonical(l_amount);
2813        ELSIF l_bal_info_rec.info_id = 'INFO4' THEN
2814         l_rep_code_rec.info4 := fnd_number.number_to_canonical(l_amount);
2815        ELSIF l_bal_info_rec.info_id = 'INFO5' THEN
2816         l_rep_code_rec.info5 := fnd_number.number_to_canonical(l_amount);
2817        ELSIF l_bal_info_rec.info_id = 'INFO6' THEN
2818         l_rep_code_rec.info6 := fnd_number.number_to_canonical(l_amount);
2819        -- 2009 changes starts
2820        ELSIF l_bal_info_rec.info_id = 'INFO7' THEN
2821         l_rep_code_rec.info7 := fnd_number.number_to_canonical(l_amount);
2822        ELSIF l_bal_info_rec.info_id = 'INFO8' THEN
2823         l_rep_code_rec.info8 := fnd_number.number_to_canonical(l_amount);
2824        ELSIF l_bal_info_rec.info_id = 'INFO9' THEN
2825         l_rep_code_rec.info9 := fnd_number.number_to_canonical(l_amount);
2826        ELSIF l_bal_info_rec.info_id = 'INFO10' THEN
2827         l_rep_code_rec.info10 := fnd_number.number_to_canonical(l_amount);
2828        -- 2009 changes ends
2829        END IF;
2830       END LOOP;
2831       --
2832       --
2833       -- Archive: EMEA REPORT INFORMATION | ASG_REP_CODE_INFO
2834       --
2835       pay_action_information_api.create_action_information
2836       (p_action_context_type         => 'AAP'
2837       ,p_action_context_id           => p_assignment_action_id
2838       ,p_action_information_id       => l_act_inf_id
2839       ,p_object_version_number       => l_ovn
2840       ,p_effective_date              => g_report_date
2841       ,p_action_information_category => 'EMEA REPORT INFORMATION'
2842       ,p_action_information1         => 'ASG_REP_CODE_INFO'
2843       ,p_action_information2         => l_rep_code_rec.reporting_code
2844       ,p_action_information3         => l_rep_code_rec.amount
2845       ,p_action_information4         => l_rep_code_rec.info1
2846       ,p_action_information5         => l_rep_code_rec.info2
2847       ,p_action_information6         => l_rep_code_rec.info3
2848       ,p_action_information7         => l_rep_code_rec.info4
2849       ,p_action_information8         => l_rep_code_rec.info5
2850       ,p_action_information9         => l_rep_code_rec.info6
2851       ,p_action_information10        => l_seaman_status
2852       ,p_action_information11        => l_rep_code_rec.info7    --2009 changes
2853       ,p_action_information12        => l_rep_code_rec.info8    --2009 changes
2854       ,p_action_information13        => l_rep_code_rec.info9    --2009 changes
2855       ,p_action_information14        => l_rep_code_rec.info10   --2009 changes
2856       );
2857       END IF;
2858       --
2859     END IF;
2860   --
2861   END LOOP;
2862   --
2863   l_rep_code_rec := g_empty_rep_code_rec;
2864   --
2865   --
2866   -- Loop through all RRV based reporting codes NB. this is done result value by result value.
2867   --
2868   FOR l_rrv_rec IN csr_RRV
2869                     (g_payroll_action_id
2870                     ,g_business_group_id
2871                     ,l_asg_act_rec.assignment_id
2872                     ,l_asg_act_rec.legal_employer_id
2873                     ,l_asg_act_rec.local_unit_id
2874                     ,l_asg_act_rec.tax_municipality_id
2875                     ,g_report_date)
2876   LOOP
2877    --
2878    --
2879    -- Moved onto new run result so write out to archive.
2880    --
2881    IF l_rr_id <> l_rrv_rec.run_result_id THEN
2882     IF l_rep_code_rec.reporting_code IS NOT NULL THEN
2883      --
2884      l_seaman_status := 'N';
2885      OPEN csr_Seaman_Status(l_element_type_id, l_classification_id, g_report_date);
2886      FETCH csr_Seaman_Status INTO l_seaman_status;
2887      CLOSE csr_Seaman_Status;
2888      --
2889      --
2890      -- Archive: EMEA REPORT INFORMATION | ASG_REP_CODE_INFO
2891      --
2892      pay_action_information_api.create_action_information
2893      (p_action_context_type         => 'AAP'
2894      ,p_action_context_id           => p_assignment_action_id
2895      ,p_action_information_id       => l_act_inf_id
2896      ,p_object_version_number       => l_ovn
2897      ,p_effective_date              => g_report_date
2898      ,p_action_information_category => 'EMEA REPORT INFORMATION'
2899      ,p_action_information1         => 'ASG_REP_CODE_INFO'
2900      ,p_action_information2         => l_rep_code_rec.reporting_code
2901      ,p_action_information3         => l_rep_code_rec.amount
2902      ,p_action_information4         => l_rep_code_rec.info1
2903      ,p_action_information5         => l_rep_code_rec.info2
2904      ,p_action_information6         => l_rep_code_rec.info3
2905      ,p_action_information7         => l_rep_code_rec.info4
2906      ,p_action_information8         => l_rep_code_rec.info5
2907      ,p_action_information9         => l_rep_code_rec.info6
2908      ,p_action_information10        => l_seaman_status
2909      ,p_action_information11        => l_rep_code_rec.info7
2910      ,p_action_information12        => l_rep_code_rec.info8
2911      ,p_action_information13        => l_rep_code_rec.info9
2912      ,p_action_information14        => l_rep_code_rec.info10
2913      ,p_action_information15        => l_rep_code_rec.info11
2914      ,p_action_information16        => l_rep_code_rec.info12
2915      ,p_action_information17        => l_rep_code_rec.info13    --2009 changes
2916      ,p_action_information18        => l_rep_code_rec.info14    --2009 changes
2917      ,p_action_information19        => l_rep_code_rec.info15    --2009 changes
2918      ,p_action_information20        => l_rep_code_rec.info16    --2009 changes
2919      ,p_action_information21        => l_rep_code_rec.info17    --2009 changes
2920      ,p_action_information22        => l_rep_code_rec.info18    --2009 changes
2921      ,p_action_information23        => l_rep_code_rec.info19    --2009 changes
2922      ,p_action_information24        => l_rep_code_rec.info20    --2009 changes
2923      );
2924      --
2925      l_rep_code_rec := g_empty_rep_code_rec;
2926     END IF;
2927     --
2928     l_rep_code_rec.reporting_code := l_rrv_rec.reporting_code;
2929    END IF;
2930    --
2931 --   IF l_rrv_rec.dtype IN ('M','N') THEN
2932     --
2933 --    l_rrv_rec.result_value := fnd_number.number_to_canonical(l_rrv_rec.result_value);
2934 --   END IF;
2935    --
2936    --
2937 IF l_rrv_rec.creator_type = 'RR' and l_rrv_rec.result_value is null THEN
2938 
2939 OPEN csr_retro( l_asg_act_rec.legal_employer_id,l_rrv_rec.action_context_id ,
2940 		    l_rrv_rec.run_result_id ,l_rrv_rec.reporting_code,l_rrv_rec.info_id,g_report_date);
2941 fetch csr_retro into r_retro_rec;
2942 close csr_retro;
2943  IF r_retro_rec.dtype IN ('C','T','D','MC') THEN -- All Non numeric data types (char, text, data)
2944     --
2945      IF    r_retro_rec.info_id = 'INFO1' THEN
2946       l_rep_code_rec.info7 := r_retro_rec.result_value;
2947      ELSIF r_retro_rec.info_id = 'INFO2' THEN
2948       l_rep_code_rec.info8 := r_retro_rec.result_value;
2949      ELSIF r_retro_rec.info_id = 'INFO3' THEN
2950       l_rep_code_rec.info9 := r_retro_rec.result_value;
2951      ELSIF r_retro_rec.info_id = 'INFO4' THEN
2952       l_rep_code_rec.info10 := r_retro_rec.result_value;
2953      ELSIF r_retro_rec.info_id = 'INFO5' THEN
2954       l_rep_code_rec.info11 := r_retro_rec.result_value;
2955      ELSIF r_retro_rec.info_id = 'INFO6' THEN
2956       l_rep_code_rec.info12 := r_retro_rec.result_value;
2957      -- 2009 changes starts
2958      ELSIF r_retro_rec.info_id = 'INFO7' THEN
2959       l_rep_code_rec.info17 := r_retro_rec.result_value;
2960      ELSIF r_retro_rec.info_id = 'INFO8' THEN
2961       l_rep_code_rec.info18 := r_retro_rec.result_value;
2962      ELSIF r_retro_rec.info_id = 'INFO9' THEN
2963       l_rep_code_rec.info19 := r_retro_rec.result_value;
2964      ELSIF r_retro_rec.info_id = 'INFO10' THEN
2965       l_rep_code_rec.info20 := r_retro_rec.result_value;
2966      -- 2009 changes ends
2967      END IF;
2968     --
2969    ELSE -- Data type is numeric
2970    --
2971      IF   r_retro_rec.info_id = 'INFO1' THEN
2972       l_rep_code_rec.info1 := r_retro_rec.result_value;
2973      ELSIF r_retro_rec.info_id = 'INFO2' THEN
2974       l_rep_code_rec.info2 := r_retro_rec.result_value;
2975      ELSIF r_retro_rec.info_id = 'INFO3' THEN
2976       l_rep_code_rec.info3 := r_retro_rec.result_value;
2977      ELSIF r_retro_rec.info_id = 'INFO4' THEN
2978       l_rep_code_rec.info4 := r_retro_rec.result_value;
2979      ELSIF r_retro_rec.info_id = 'INFO5' THEN
2980       l_rep_code_rec.info5 := r_retro_rec.result_value;
2981      ELSIF r_retro_rec.info_id = 'INFO6' THEN
2982       l_rep_code_rec.info6 := r_retro_rec.result_value;
2983      -- 2009 changes starts
2984      ELSIF r_retro_rec.info_id = 'INFO7' THEN
2985       l_rep_code_rec.info13 := r_retro_rec.result_value;
2986      ELSIF r_retro_rec.info_id = 'INFO8' THEN
2987       l_rep_code_rec.info14 := r_retro_rec.result_value;
2988      ELSIF r_retro_rec.info_id = 'INFO9' THEN
2989       l_rep_code_rec.info15 := r_retro_rec.result_value;
2990      ELSIF r_retro_rec.info_id = 'INFO10' THEN
2991       l_rep_code_rec.info16 := r_retro_rec.result_value;
2992      -- 2009 changes ends
2993      ELSIF r_retro_rec.info_id = 'AMOUNT' THEN
2994       IF is_EA_classification(l_rrv_rec.element_type, g_report_date) THEN
2995         l_rep_code_rec.amount := fnd_number.number_to_canonical(-1 * fnd_number.canonical_to_number(l_rrv_rec.result_value));
2996       ELSE
2997         l_rep_code_rec.amount := l_rrv_rec.result_value;
2998       END IF;
2999      END IF;
3000    --
3001    END IF;
3002 
3003    -- Store value against correct information column.
3004    --
3005 
3006 ELSE
3007    -- Store value against correct information column.
3008    --
3009    IF l_rrv_rec.dtype IN ('C','T','D','MC') THEN -- All Non numeric data types (char, text, data)
3010     --
3011      IF    l_rrv_rec.info_id = 'INFO1' THEN
3012       l_rep_code_rec.info7 := l_rrv_rec.result_value;
3013      ELSIF l_rrv_rec.info_id = 'INFO2' THEN
3014       l_rep_code_rec.info8 := l_rrv_rec.result_value;
3015      ELSIF l_rrv_rec.info_id = 'INFO3' THEN
3016       l_rep_code_rec.info9 := l_rrv_rec.result_value;
3017      ELSIF l_rrv_rec.info_id = 'INFO4' THEN
3018       l_rep_code_rec.info10 := l_rrv_rec.result_value;
3019      ELSIF l_rrv_rec.info_id = 'INFO5' THEN
3020       l_rep_code_rec.info11 := l_rrv_rec.result_value;
3021      ELSIF l_rrv_rec.info_id = 'INFO6' THEN
3022       l_rep_code_rec.info12 := l_rrv_rec.result_value;
3023      -- 2009 changes starts
3024      ELSIF l_rrv_rec.info_id = 'INFO7' THEN
3025       l_rep_code_rec.info17 := l_rrv_rec.result_value;
3026      ELSIF l_rrv_rec.info_id = 'INFO8' THEN
3027       l_rep_code_rec.info18 := l_rrv_rec.result_value;
3028      ELSIF l_rrv_rec.info_id = 'INFO9' THEN
3029       l_rep_code_rec.info19 := l_rrv_rec.result_value;
3030      ELSIF l_rrv_rec.info_id = 'INFO10' THEN
3031       l_rep_code_rec.info20 := l_rrv_rec.result_value;
3032      -- 2009 changes ends
3033      END IF;
3034     --
3035    ELSE -- Data type is numeric
3036    --
3037      IF    l_rrv_rec.info_id = 'INFO1' THEN
3038       l_rep_code_rec.info1 := l_rrv_rec.result_value;
3039      ELSIF l_rrv_rec.info_id = 'INFO2' THEN
3040       l_rep_code_rec.info2 := l_rrv_rec.result_value;
3041      ELSIF l_rrv_rec.info_id = 'INFO3' THEN
3042       l_rep_code_rec.info3 := l_rrv_rec.result_value;
3043      ELSIF l_rrv_rec.info_id = 'INFO4' THEN
3044       l_rep_code_rec.info4 := l_rrv_rec.result_value;
3045      ELSIF l_rrv_rec.info_id = 'INFO5' THEN
3046       l_rep_code_rec.info5 := l_rrv_rec.result_value;
3047      ELSIF l_rrv_rec.info_id = 'INFO6' THEN
3048       l_rep_code_rec.info6 := l_rrv_rec.result_value;
3049      -- 2009 changes starts
3050      ELSIF l_rrv_rec.info_id = 'INFO7' THEN
3051       l_rep_code_rec.info13 := l_rrv_rec.result_value;
3052      ELSIF l_rrv_rec.info_id = 'INFO8' THEN
3053       l_rep_code_rec.info14 := l_rrv_rec.result_value;
3054      ELSIF l_rrv_rec.info_id = 'INFO9' THEN
3055       l_rep_code_rec.info15 := l_rrv_rec.result_value;
3056      ELSIF l_rrv_rec.info_id = 'INFO10' THEN
3057       l_rep_code_rec.info16 := l_rrv_rec.result_value;
3058      -- 2009 changes ends
3059      ELSIF l_rrv_rec.info_id = 'AMOUNT' THEN
3060       IF is_EA_classification(l_rrv_rec.element_type, g_report_date) THEN
3061         l_rep_code_rec.amount := fnd_number.number_to_canonical(-1 * fnd_number.canonical_to_number(l_rrv_rec.result_value));
3062       ELSE
3063         l_rep_code_rec.amount := l_rrv_rec.result_value;
3064       END IF;
3065      END IF;
3066    --
3067    END IF;
3068    END IF;
3069    --
3070    l_rr_id := l_rrv_rec.run_result_id;
3071    l_element_type_id := l_rrv_rec.element_type;
3072   END LOOP;
3073   --
3074   --
3075   -- Write out to archive.
3076   --
3077   IF l_rep_code_rec.reporting_code IS NOT NULL THEN
3078    --
3079    l_seaman_status := 'N';
3080    OPEN csr_Seaman_Status(l_element_type_id, l_classification_id, g_report_date);
3081    FETCH csr_Seaman_Status INTO l_seaman_status;
3082    CLOSE csr_Seaman_Status;
3083    --
3084    --
3085    -- Archive: EMEA REPORT INFORMATION | ASG_REP_CODE_INFO
3086    --
3087    pay_action_information_api.create_action_information
3088    (p_action_context_type         => 'AAP'
3089    ,p_action_context_id           => p_assignment_action_id
3090    ,p_action_information_id       => l_act_inf_id
3091    ,p_object_version_number       => l_ovn
3092    ,p_effective_date              => g_report_date
3093    ,p_action_information_category => 'EMEA REPORT INFORMATION'
3094    ,p_action_information1         => 'ASG_REP_CODE_INFO'
3095    ,p_action_information2         => l_rep_code_rec.reporting_code
3096    ,p_action_information3         => l_rep_code_rec.amount
3097    ,p_action_information4         => l_rep_code_rec.info1
3098    ,p_action_information5         => l_rep_code_rec.info2
3099    ,p_action_information6         => l_rep_code_rec.info3
3100    ,p_action_information7         => l_rep_code_rec.info4
3101    ,p_action_information8         => l_rep_code_rec.info5
3102    ,p_action_information9         => l_rep_code_rec.info6
3103    ,p_action_information10        => l_seaman_status
3104    ,p_action_information11        => l_rep_code_rec.info7
3105    ,p_action_information12        => l_rep_code_rec.info8
3106    ,p_action_information13        => l_rep_code_rec.info9
3107    ,p_action_information14        => l_rep_code_rec.info10
3108    ,p_action_information15        => l_rep_code_rec.info11
3109    ,p_action_information16        => l_rep_code_rec.info12
3110    ,p_action_information17        => l_rep_code_rec.info13    --2009 changes
3111    ,p_action_information18        => l_rep_code_rec.info14    --2009 changes
3112    ,p_action_information19        => l_rep_code_rec.info15    --2009 changes
3113    ,p_action_information20        => l_rep_code_rec.info16    --2009 changes
3114    ,p_action_information21        => l_rep_code_rec.info17    --2009 changes
3115    ,p_action_information22        => l_rep_code_rec.info18    --2009 changes
3116    ,p_action_information23        => l_rep_code_rec.info19    --2009 changes
3117    ,p_action_information24        => l_rep_code_rec.info20    --2009 changes
3118    );
3119    --
3120    l_rep_code_rec := g_empty_rep_code_rec;
3121   END IF;
3122   --
3123   --
3124   -- Loop through all PROCEDURE based reporting codes NB. this is done result value by result value.
3125   --
3126   FOR l_proc_name_rec IN csr_PROC
3127                      (g_payroll_action_id
3128                      ,l_asg_act_rec.legal_employer_id)
3129   LOOP
3130    l_plsql_block := REPLACE(l_plsql_block, '<PROC>', l_proc_name_rec.procedure_name);
3131    --
3132    --
3133    -- Dynamically call the stored procedure.
3134    --
3135    EXECUTE IMMEDIATE l_plsql_block
3136    USING p_assignment_action_id
3137         ,l_proc_name_rec.reporting_code
3138         ,g_report_date;
3139   END LOOP;
3140   --
3141   hr_utility.set_location('Leaving ' || l_proc_name, 1000);
3142  END archive_code;
3143  --
3144  --
3145  -- -----------------------------------------------------------------------------
3146  -- Part of archive logic.
3147  -- -----------------------------------------------------------------------------
3148  --
3149  PROCEDURE deinitialization_code
3150  (p_payroll_action_id IN NUMBER) IS
3151   --
3152   l_proc_name CONSTANT VARCHAR2(61) := l_package_name || '.deinitialization_code';
3153   --
3154   CURSOR csr_LE_PER_BELOW_REP_LIMIT
3155           (p_payroll_action_id IN NUMBER) IS
3156    SELECT  le_lu.action_information2   legal_employer_id
3157           ,asg_act.action_information5 person_id
3158     FROM   pay_assignment_actions paa
3159           ,pay_action_information le_lu
3160           ,pay_action_information asg_act
3161           ,pay_action_information rep_cde
3162           ,pay_action_information cde_dtl
3163     WHERE  paa.payroll_action_id               = le_lu.action_context_id
3164       AND  asg_act.action_context_type         = 'AAP'
3165       AND  asg_act.action_context_id           = paa.assignment_action_id
3166       AND  asg_act.action_information_category = 'EMEA REPORT INFORMATION'
3167       AND  asg_act.action_information1         = 'ASG_ACT_INFO'
3168       AND  asg_act.action_information2         = le_lu.action_information2
3169       AND  asg_act.action_information3         = le_lu.action_information4
3170       AND  le_lu.action_context_type           = 'PA'
3171       AND  le_lu.action_context_id             = p_payroll_action_id
3172       AND  le_lu.action_information_category   = 'EMEA REPORT INFORMATION'
3173       AND  le_lu.action_information1           = 'LE_SI_LU_INFO'
3174       AND  cde_dtl.action_context_type         = 'PA'
3175       AND  cde_dtl.action_context_id           = le_lu.action_context_id
3176       AND  cde_dtl.action_information_category = 'EMEA REPORT INFORMATION'
3177       AND  cde_dtl.action_information1         = 'REP_CODE_DTLS'
3178       AND  cde_dtl.action_information2         = le_lu.action_information2
3179       AND  cde_dtl.action_information3         = rep_cde.action_information2
3180       AND  cde_dtl.action_information6         = 'Y'
3181       AND  rep_cde.action_context_type         = 'AAP'
3182       AND  rep_cde.action_context_id           = asg_act.action_context_id
3183       AND  rep_cde.action_information_category = 'EMEA REPORT INFORMATION'
3184       AND  rep_cde.action_information1         = 'ASG_REP_CODE_INFO'
3185     GROUP BY le_lu.action_information2
3186  	    ,asg_act.action_information5
3187     HAVING SUM(fnd_number.canonical_to_number(rep_cde.action_information3)) < 1000;
3188   --
3189   CURSOR csr_ASGACT
3190           (p_payroll_action_id IN NUMBER
3191           ,p_legal_employer_id IN VARCHAR2
3192           ,p_person_id         IN VARCHAR2) IS
3193    SELECT asg_act.action_information_id
3194          ,asg_act.object_version_number
3195          ,paa.assignment_id
3196    FROM   pay_action_information asg_act
3197          ,pay_assignment_actions paa
3198    WHERE  asg_act.action_information_category = 'EMEA REPORT INFORMATION'
3199      AND  asg_act.action_information1         = 'ASG_ACT_INFO'
3200      AND  asg_act.action_information2         = p_legal_employer_id
3201      AND  asg_act.action_information5         = p_person_id
3202      AND  asg_act.action_context_type         = 'AAP'
3203      AND  asg_act.action_context_id           = paa.assignment_action_id
3204      AND  paa.payroll_action_id               = p_payroll_action_id;
3205   --
3206   CURSOR csr_INDIVIDUAL_CODES
3207           (p_payroll_action_id IN NUMBER) IS
3208    SELECT asg_act.action_information2  legal_employer_id
3209          ,asg_act.action_information5  person_id
3210          ,asg_act.action_information6  tax_municipality
3211          ,rep_cde.action_information2  code
3212          ,rep_cde.action_information3  amount
3213          ,rep_cde.action_information4  info1
3214          ,rep_cde.action_information5  info2
3215          ,rep_cde.action_information6  info3
3216          ,rep_cde.action_information7  info4
3217          ,rep_cde.action_information8  info5
3218          ,rep_cde.action_information9  info6
3219          ,rep_cde.action_information10 seaman_component
3220          ,rep_cde.action_information11 cinfo1
3221          ,rep_cde.action_information12 cinfo2
3222          ,rep_cde.action_information13 cinfo3
3223          ,rep_cde.action_information14 cinfo4
3224          ,rep_cde.action_information15 cinfo5
3225          ,rep_cde.action_information16 cinfo6
3226          ,rep_cde.action_information17 info7    --2009 changes
3227          ,rep_cde.action_information18 info8    --2009 changes
3228          ,rep_cde.action_information19 info9    --2009 changes
3229          ,rep_cde.action_information20 info10   --2009 changes
3230          ,rep_cde.action_information21 cinfo7   --2009 changes
3231          ,rep_cde.action_information22 cinfo8   --2009 changes
3232          ,rep_cde.action_information23 cinfo9   --2009 changes
3233          ,rep_cde.action_information24 cinfo10  --2009 changes
3234    FROM   pay_assignment_actions paa
3235          ,pay_action_information asg_act
3236          ,pay_action_information rep_cde
3237          ,pay_action_information cde_dtl
3238    WHERE  paa.payroll_action_id               = p_payroll_action_id
3239      AND  asg_act.action_context_type         = 'AAP'
3240      AND  asg_act.action_context_id           = paa.assignment_action_id
3241      AND  asg_act.action_information_category = 'EMEA REPORT INFORMATION'
3242      AND  asg_act.action_information1         = 'ASG_ACT_INFO'
3243      AND  rep_cde.action_context_type         = 'AAP'
3244      AND  rep_cde.action_context_id           = asg_act.action_context_id
3245      AND  rep_cde.action_information_category = 'EMEA REPORT INFORMATION'
3246      AND  rep_cde.action_information1         = 'ASG_REP_CODE_INFO'
3247      AND  cde_dtl.action_context_type         = 'PA'
3248      AND  cde_dtl.action_context_id           = paa.payroll_action_id
3249      AND  cde_dtl.action_information_category = 'EMEA REPORT INFORMATION'
3250      AND  cde_dtl.action_information1         = 'REP_CODE_DTLS'
3251      AND  cde_dtl.action_information2         = asg_act.action_information2
3252      AND  cde_dtl.action_information3         = rep_cde.action_information2
3253      AND  cde_dtl.action_information9         = 'INDIVIDUAL'
3254      AND rep_cde.action_information2 <> '113-A'; -- added bug 16084022
3255 /* bug 16084022 start */
3256      CURSOR csr_113_continous
3257    (p_payroll_action_id IN NUMBER) IS
3258 	 select asg_act.action_information2  legal_employer_id
3259          ,asg_act.action_information5  person_id
3260          ,asg_act.action_information6  tax_municipality
3261          ,rep_cde.action_information2  code
3262 				 ,sum(rep_cde.action_information3)  amount
3263   			 ,rep_cde.action_information4  info1
3264          ,rep_cde.action_information5  info2
3265          ,rep_cde.action_information6  info3
3266          ,rep_cde.action_information7  info4
3267         -- ,rep_cde.action_information8  info5
3268        --  ,rep_cde.action_information9  info6
3269          ,rep_cde.action_information10 seaman_component
3270  				 ,min(rep_cde.action_information11) cinfo1
3271          ,max(rep_cde.action_information12) cinfo2
3272          ,rep_cde.action_information13 cinfo3
3273          ,rep_cde.action_information14 cinfo4
3274 	  FROM pay_assignment_actions paa,pay_action_information asg_act,pay_action_information rep_cde
3275 		WHERE paa.payroll_action_id = p_payroll_action_id
3276      AND asg_act.action_context_type          = 'AAP'
3277      AND  asg_act.action_context_id           = paa.assignment_action_id
3278      AND  asg_act.action_information_category = 'EMEA REPORT INFORMATION'
3279      AND  asg_act.action_information1         = 'ASG_ACT_INFO'
3280      AND  rep_cde.action_context_type         = 'AAP'
3281      AND  rep_cde.action_context_id           = asg_act.action_context_id
3282      AND  rep_cde.action_information_category = 'EMEA REPORT INFORMATION'
3283      AND  rep_cde.action_information1         = 'ASG_REP_CODE_INFO'
3284      AND rep_cde.action_information2 = '113-A'
3285       AND EXISTS (
3286 			 select 1 from pay_action_information pai2
3287 		      where pai2.action_context_id = rep_cde.action_context_id
3288 		        and pai2.ACTION_INFORMATION1= 'ASG_REP_CODE_INFO'
3289                     and pai2.ACTION_INFORMATION2= '113-A'
3290                     and pai2.action_information13 = rep_cde.action_information13
3291                     and pai2.action_information14 = rep_cde.action_information14
3292             	  and (fnd_date.canonical_to_date(rep_cde.action_information12)+1 = fnd_date.canonical_to_date(pai2.action_information11)
3293 				or fnd_date.canonical_to_date(rep_cde.action_information11)-1 = fnd_date.canonical_to_date(pai2.action_information12))
3294                  )
3295 	GROUP BY asg_act.action_information2
3296          ,asg_act.action_information5
3297          ,asg_act.action_information6
3298          ,rep_cde.action_information2
3299 				 ,rep_cde.action_information4
3300          ,rep_cde.action_information5
3301          ,rep_cde.action_information6
3302          ,rep_cde.action_information7
3303       --   ,rep_cde.action_information8
3304         -- ,rep_cde.action_information9
3305          ,rep_cde.action_information10
3306          ,rep_cde.action_information13
3307          ,rep_cde.action_information14 ;
3308 
3309 
3310 CURSOR csr_113_noncontinous
3311    (p_payroll_action_id IN NUMBER) IS
3312 	 select asg_act.action_information2  legal_employer_id
3313          ,asg_act.action_information5  person_id
3314          ,asg_act.action_information6  tax_municipality
3315          ,rep_cde.action_information2  code
3316 				 ,rep_cde.action_information3  amount
3317   			 ,rep_cde.action_information4  info1
3318          ,rep_cde.action_information5  info2
3319          ,rep_cde.action_information6  info3
3320          ,rep_cde.action_information7  info4
3321         -- ,rep_cde.action_information8  info5
3322         -- ,rep_cde.action_information9  info6
3323          ,rep_cde.action_information10 seaman_component
3324  				 ,rep_cde.action_information11 cinfo1
3325          ,rep_cde.action_information12 cinfo2
3326          ,rep_cde.action_information13 cinfo3
3327          ,rep_cde.action_information14 cinfo4
3328 	  FROM pay_assignment_actions paa,pay_action_information asg_act,pay_action_information rep_cde
3329 		WHERE paa.payroll_action_id = p_payroll_action_id
3330      AND asg_act.action_context_type          = 'AAP'
3331      AND  asg_act.action_context_id           = paa.assignment_action_id
3332      AND  asg_act.action_information_category = 'EMEA REPORT INFORMATION'
3333      AND  asg_act.action_information1         = 'ASG_ACT_INFO'
3334      AND  rep_cde.action_context_type         = 'AAP'
3335      AND  rep_cde.action_context_id           = asg_act.action_context_id
3336      AND  rep_cde.action_information_category = 'EMEA REPORT INFORMATION'
3337      AND  rep_cde.action_information1         = 'ASG_REP_CODE_INFO'
3338      AND rep_cde.action_information2 = '113-A'
3339     AND NOT EXISTS (
3340 			   select 1 from pay_action_information pai2
3341 		         where pai2.action_context_id = rep_cde.action_context_id
3342 			     and pai2.ACTION_INFORMATION1= 'ASG_REP_CODE_INFO'
3343                        and pai2.ACTION_INFORMATION2= '113-A'
3344                        and pai2.action_information13 = rep_cde.action_information13
3345                        and pai2.action_information14 = rep_cde.action_information14
3346             	and (fnd_date.canonical_to_date(rep_cde.action_information12)+1 = fnd_date.canonical_to_date(pai2.action_information11)
3347 			or fnd_date.canonical_to_date(rep_cde.action_information11)-1 = fnd_date.canonical_to_date(pai2.action_information12)));
3348   --
3349   /* bug 16084022 end */
3350   CURSOR csr_SUM_CODES
3351           (p_payroll_action_id IN NUMBER) IS
3352    SELECT asg_act.action_information2  legal_employer_id
3353          ,asg_act.action_information5  person_id
3354          ,asg_act.action_information6  tax_municipality
3355          ,rep_cde.action_information2  code
3356          ,SUM(fnd_number.canonical_to_number(rep_cde.action_information3))  amount
3357          ,SUM(fnd_number.canonical_to_number(nvl(rep_cde.action_information4,0)))  info1
3358          ,SUM(fnd_number.canonical_to_number(nvl(rep_cde.action_information5,0)))  info2
3359          ,SUM(fnd_number.canonical_to_number(nvl(rep_cde.action_information6,0)))  info3
3360          ,SUM(fnd_number.canonical_to_number(nvl(rep_cde.action_information7,0)))  info4
3361          ,SUM(fnd_number.canonical_to_number(nvl(rep_cde.action_information8,0)))  info5
3362          ,SUM(fnd_number.canonical_to_number(nvl(rep_cde.action_information9,0)))  info6
3363          ,rep_cde.action_information10 seaman_component
3364          ,rep_cde.action_information11 cinfo1
3365          ,rep_cde.action_information12 cinfo2
3366          ,rep_cde.action_information13 cinfo3
3367          ,rep_cde.action_information14 cinfo4
3368          ,rep_cde.action_information15 cinfo5
3369          ,rep_cde.action_information16 cinfo6
3370          ,SUM(fnd_number.canonical_to_number(nvl(rep_cde.action_information17,0)))  info7 --2009 changes
3371          ,SUM(fnd_number.canonical_to_number(nvl(rep_cde.action_information18,0)))  info8 --2009 changes
3372          ,SUM(fnd_number.canonical_to_number(nvl(rep_cde.action_information19,0)))  info9 --2009 changes
3373          ,SUM(fnd_number.canonical_to_number(nvl(rep_cde.action_information20,0)))  info10 --2009 changes
3374          ,rep_cde.action_information21 cinfo7 --2009 changes
3375          ,rep_cde.action_information22 cinfo8 --2009 changes
3376          ,rep_cde.action_information23 cinfo9 --2009 changes
3377          ,rep_cde.action_information24 cinfo10 --2009 changes
3378    FROM   pay_assignment_actions paa
3379          ,pay_action_information asg_act
3380          ,pay_action_information rep_cde
3381          ,pay_action_information cde_dtl
3382    WHERE  paa.payroll_action_id               = p_payroll_action_id
3383      AND  asg_act.action_context_type         = 'AAP'
3384      AND  asg_act.action_context_id           = paa.assignment_action_id
3385      AND  asg_act.action_information_category = 'EMEA REPORT INFORMATION'
3386      AND  asg_act.action_information1         = 'ASG_ACT_INFO'
3387      AND  rep_cde.action_context_type         = 'AAP'
3388      AND  rep_cde.action_context_id           = asg_act.action_context_id
3389      AND  rep_cde.action_information_category = 'EMEA REPORT INFORMATION'
3390      AND  rep_cde.action_information1         = 'ASG_REP_CODE_INFO'
3391      AND  cde_dtl.action_context_type         = 'PA'
3392      AND  cde_dtl.action_context_id           = paa.payroll_action_id
3393      AND  cde_dtl.action_information_category = 'EMEA REPORT INFORMATION'
3394      AND  cde_dtl.action_information1         = 'REP_CODE_DTLS'
3395      AND  cde_dtl.action_information2         = asg_act.action_information2
3396      AND  cde_dtl.action_information3         = rep_cde.action_information2
3397      AND  cde_dtl.action_information9         = 'SUM'
3398    GROUP BY asg_act.action_information2
3399            ,asg_act.action_information5
3400            ,asg_act.action_information6
3401            ,rep_cde.action_information2
3402            ,rep_cde.action_information10
3403            ,rep_cde.action_information11
3404            ,rep_cde.action_information12
3405            ,rep_cde.action_information13
3406            ,rep_cde.action_information14
3407            ,rep_cde.action_information15
3408            ,rep_cde.action_information16
3409            ,rep_cde.action_information21 --2009 changes
3410            ,rep_cde.action_information22 --2009 changes
3411            ,rep_cde.action_information23 --2009 changes
3412            ,rep_cde.action_information24; --2009 changes
3413 
3414   --
3415   CURSOR csr_PROCEDURE_CODES
3416           (p_payroll_action_id IN NUMBER) IS
3417    SELECT cde_dtl.action_information2  legal_employer_id
3418          ,cde_dtl.action_information3  reporting_code
3419          ,cde_dtl.action_information10 procedure_name
3420    FROM   pay_action_information cde_dtl
3421    WHERE  cde_dtl.action_context_id           = p_payroll_action_id
3422      AND  cde_dtl.action_context_type         = 'PA'
3423      AND  cde_dtl.action_information_category = 'EMEA REPORT INFORMATION'
3424      AND  cde_dtl.action_information1         = 'REP_CODE_DTLS'
3425      AND  cde_dtl.action_information9         = 'PROCEDURE';
3426   --
3427   l_plsql_block    VARCHAR2(2000) := 'BEGIN <PROC>(:1, :2, :3); END;';
3428   l_act_inf_id     NUMBER;
3429   l_ovn            NUMBER;
3430   l_amount         NUMBER;
3431   l_balance_tested BOOLEAN := FALSE;
3432   l_tax_defbal_id  NUMBER := get_defined_balance(g_business_group_id, 'Tax', '_PER_TU_YTD');
3433   --
3434  BEGIN
3435   hr_utility.set_location('Entering ' || l_proc_name, 10);
3436   --
3437   set_parameters(p_payroll_action_id);
3438   --
3439   --
3440  -- Find people who have reportable earnings below 1000 NOK for the legal employer.
3441   --
3442   FOR l_per_blw_rep_limit_rec IN csr_LE_PER_BELOW_REP_LIMIT
3443                                   (p_payroll_action_id)
3444   LOOP
3445    l_amount := 0;
3446    l_balance_tested := FALSE;
3447    --
3448    --
3449    -- Find all ASG_ACT_INFO archive records for the given person / legal employer combination.
3450    --
3451    FOR l_asg_act_rec IN csr_ASGACT
3452                          (p_payroll_action_id
3453                          ,l_per_blw_rep_limit_rec.legal_employer_id
3454                          ,l_per_blw_rep_limit_rec.person_id)
3455    LOOP
3456     --
3457     --
3458     -- See how much tax they have paid while working for legal employer NB. Only need to test balance ONCE
3459     -- as it is at person level.
3460     --
3461 
3462 
3463     IF NOT l_balance_tested THEN
3464      --
3465      --
3466      -- Setup balance contexts.
3467      --
3468      pay_balance_pkg.set_context('TAX_UNIT_ID', l_per_blw_rep_limit_rec.legal_employer_id);
3469      pay_balance_pkg.set_context('DATE_EARNED', fnd_date.date_to_canonical(g_report_date));
3470      --
3471      --
3472      -- Retrieve balance for:-
3473      --
3474      --  Tax_PER_TU_YTD
3475      --
3476      l_amount := pay_balance_pkg.get_value
3477                   (p_defined_balance_id => l_tax_defbal_id
3478                   ,p_assignment_id      => l_asg_act_rec.assignment_id
3479                   ,p_virtual_date       => g_report_date);
3480      --
3481      l_balance_tested := TRUE;
3482     END IF;
3483     --
3484     --
3485     -- Person is below 1000 NOK reportable earnings AND they haven't paid any tax so update the
3486     -- ASG_ACT_INFO archive records to identify that. This will put their reporting code details into the
3487     -- earnings below reporting limit category on the Employer Contribution Summary report.
3488     --
3489     IF l_amount = 0 THEN
3490      pay_action_information_api.update_action_information
3491       (p_action_information_id => l_asg_act_rec.action_information_id
3492       ,p_object_version_number => l_asg_act_rec.object_version_number
3493       ,p_action_information7   => 'Y');
3494     END IF;
3495    END LOOP;
3496   END LOOP;
3497   --
3498   --
3499   -- Loop for all reporting codes that are kept as INDIVIDUAL records.
3500   --
3501   FOR l_cde_rec IN csr_INDIVIDUAL_CODES
3502                     (p_payroll_action_id)
3503   LOOP
3504    --
3505    --
3506    -- Archive: EMEA REPORT INFORMATION | AUDIT_REP_SUMMARY
3507    --
3508 
3509 
3510    pay_action_information_api.create_action_information
3511    (p_action_context_type         => 'PA'
3512    ,p_action_context_id           => p_payroll_action_id
3513    ,p_action_information_id       => l_act_inf_id
3514    ,p_object_version_number       => l_ovn
3515    ,p_effective_date              => g_report_date
3516    ,p_action_information_category => 'EMEA REPORT INFORMATION'
3517    ,p_action_information1         => 'AUDIT_REP_SUMMARY'
3518    ,p_action_information2         => l_cde_rec.legal_employer_id
3519    ,p_action_information3         => l_cde_rec.person_id
3520    ,p_action_information4         => l_cde_rec.code
3521    ,p_action_information5         => l_cde_rec.amount
3522    ,p_action_information6         => nvl(l_cde_rec.cinfo1, l_cde_rec.info1)
3523    ,p_action_information7         => nvl(l_cde_rec.cinfo2, l_cde_rec.info2)
3524    ,p_action_information8         => nvl(l_cde_rec.cinfo3, l_cde_rec.info3)
3525    ,p_action_information9         => nvl(l_cde_rec.cinfo4, l_cde_rec.info4)
3526    ,p_action_information10        => nvl(l_cde_rec.cinfo5, l_cde_rec.info5)
3527    ,p_action_information11        => nvl(l_cde_rec.cinfo6, l_cde_rec.info6)
3528    ,p_action_information12        => l_cde_rec.tax_municipality
3529    ,p_action_information13        => l_cde_rec.seaman_component
3530    ,p_action_information14         => nvl(l_cde_rec.cinfo7, l_cde_rec.info7)    --2009 chnages
3531    ,p_action_information15        => nvl(l_cde_rec.cinfo8, l_cde_rec.info8)     --2009 chnages
3532    ,p_action_information16         => nvl(l_cde_rec.cinfo9, l_cde_rec.info9)    --2009 chnages
3533    ,p_action_information17         => nvl(l_cde_rec.cinfo10, l_cde_rec.info10)  --2009 chnages
3534    );
3535   END LOOP;
3536   --
3537   /* bug 16084022 start */
3538     FOR l_cde_rec_113 IN csr_113_continous
3539                     (p_payroll_action_id)
3540   LOOP
3541    -- Archive: EMEA REPORT INFORMATION | AUDIT_REP_SUMMARY
3542     pay_action_information_api.create_action_information
3543    (p_action_context_type         => 'PA'
3544    ,p_action_context_id           => p_payroll_action_id
3545    ,p_action_information_id       => l_act_inf_id
3546    ,p_object_version_number       => l_ovn
3547    ,p_effective_date              => g_report_date
3548    ,p_action_information_category => 'EMEA REPORT INFORMATION'
3549    ,p_action_information1         => 'AUDIT_REP_SUMMARY'
3550    ,p_action_information2         => l_cde_rec_113.legal_employer_id
3551    ,p_action_information3         => l_cde_rec_113.person_id
3552    ,p_action_information4         => l_cde_rec_113.code
3553    ,p_action_information5         => l_cde_rec_113.amount
3554    ,p_action_information6         => nvl(l_cde_rec_113.cinfo1, l_cde_rec_113.info1)
3555    ,p_action_information7         => nvl(l_cde_rec_113.cinfo2, l_cde_rec_113.info2)
3556    ,p_action_information8         => nvl(l_cde_rec_113.cinfo3, l_cde_rec_113.info3)
3557    ,p_action_information9         => nvl(l_cde_rec_113.cinfo4, l_cde_rec_113.info4)
3558   -- ,p_action_information10        => nvl(l_cde_rec_113.cinfo5, l_cde_rec_113.info5)
3559   -- ,p_action_information11        => nvl(l_cde_rec_113.cinfo6, l_cde_rec_113.info6)
3560    ,p_action_information12        => l_cde_rec_113.tax_municipality
3561    ,p_action_information13        => l_cde_rec_113.seaman_component
3562   -- ,p_action_information14         => nvl(l_cde_rec_113.cinfo7, l_cde_rec_113.info7)    --2009 chnages
3563    --,p_action_information15        => nvl(l_cde_rec_113.cinfo8, l_cde_rec_113.info8)     --2009 chnages
3564    --,p_action_information16         => nvl(l_cde_rec_113.cinfo9, l_cde_rec_113.info9)    --2009 chnages
3565   -- ,p_action_information17         => nvl(l_cde_rec_113.cinfo10, l_cde_rec_113.info10)  --2009 chnages
3566    );
3567   END LOOP;
3568 
3569   FOR l_cde_rec_113a IN csr_113_noncontinous
3570                     (p_payroll_action_id)
3571   LOOP
3572      -- Archive: EMEA REPORT INFORMATION | AUDIT_REP_SUMMARY
3573     pay_action_information_api.create_action_information
3574    (p_action_context_type         => 'PA'
3575    ,p_action_context_id           => p_payroll_action_id
3576    ,p_action_information_id       => l_act_inf_id
3577    ,p_object_version_number       => l_ovn
3578    ,p_effective_date              => g_report_date
3579    ,p_action_information_category => 'EMEA REPORT INFORMATION'
3580    ,p_action_information1         => 'AUDIT_REP_SUMMARY'
3581    ,p_action_information2         => l_cde_rec_113a.legal_employer_id
3582    ,p_action_information3         => l_cde_rec_113a.person_id
3583    ,p_action_information4         => l_cde_rec_113a.code
3584    ,p_action_information5         => l_cde_rec_113a.amount
3585    ,p_action_information6         => nvl(l_cde_rec_113a.cinfo1, l_cde_rec_113a.info1)
3586    ,p_action_information7         => nvl(l_cde_rec_113a.cinfo2, l_cde_rec_113a.info2)
3587    ,p_action_information8         => nvl(l_cde_rec_113a.cinfo3, l_cde_rec_113a.info3)
3588    ,p_action_information9         => nvl(l_cde_rec_113a.cinfo4, l_cde_rec_113a.info4)
3589   -- ,p_action_information10        => nvl(l_cde_rec_113.cinfo5, l_cde_rec_113.info5)
3590   -- ,p_action_information11        => nvl(l_cde_rec_113.cinfo6, l_cde_rec_113.info6)
3591    ,p_action_information12        => l_cde_rec_113a.tax_municipality
3592    ,p_action_information13        => l_cde_rec_113a.seaman_component
3593   -- ,p_action_information14         => nvl(l_cde_rec_113.cinfo7, l_cde_rec_113.info7)    --2009 chnages
3594    --,p_action_information15        => nvl(l_cde_rec_113.cinfo8, l_cde_rec_113.info8)     --2009 chnages
3595    --,p_action_information16         => nvl(l_cde_rec_113.cinfo9, l_cde_rec_113.info9)    --2009 chnages
3596   -- ,p_action_information17         => nvl(l_cde_rec_113.cinfo10, l_cde_rec_113.info10)  --2009 chnages
3597    );
3598   END LOOP;
3599   /* bug 16084022 end */
3600   --
3601   -- Loop for all reporting codes that are SUMMED.
3602   --
3603   FOR l_cde_rec IN csr_SUM_CODES
3604                     (p_payroll_action_id)
3605   LOOP
3606    --
3607    --
3608    -- Archive: EMEA REPORT INFORMATION | AUDIT_REP_SUMMARY
3609    --
3610 
3611 
3612 
3613    pay_action_information_api.create_action_information
3614    (p_action_context_type         => 'PA'
3615    ,p_action_context_id           => p_payroll_action_id
3616    ,p_action_information_id       => l_act_inf_id
3617    ,p_object_version_number       => l_ovn
3618    ,p_effective_date              => g_report_date
3619    ,p_action_information_category => 'EMEA REPORT INFORMATION'
3620    ,p_action_information1         => 'AUDIT_REP_SUMMARY'
3621    ,p_action_information2         => l_cde_rec.legal_employer_id
3622    ,p_action_information3         => l_cde_rec.person_id
3623    ,p_action_information4         => l_cde_rec.code
3624    ,p_action_information5         => fnd_number.number_to_canonical(l_cde_rec.amount)
3625    ,p_action_information6         => nvl(l_cde_rec.cinfo1, fnd_number.number_to_canonical(l_cde_rec.info1))
3626    ,p_action_information7         => nvl(l_cde_rec.cinfo2, fnd_number.number_to_canonical(l_cde_rec.info2))
3627    ,p_action_information8         => nvl(l_cde_rec.cinfo3, fnd_number.number_to_canonical(l_cde_rec.info3))
3628    ,p_action_information9         => nvl(l_cde_rec.cinfo4, fnd_number.number_to_canonical(l_cde_rec.info4))
3629    ,p_action_information10        => nvl(l_cde_rec.cinfo5, fnd_number.number_to_canonical(l_cde_rec.info5))
3630    ,p_action_information11        => nvl(l_cde_rec.cinfo6, fnd_number.number_to_canonical(l_cde_rec.info6))
3631    ,p_action_information12        => l_cde_rec.tax_municipality
3632    ,p_action_information13        => l_cde_rec.seaman_component
3633    ,p_action_information14        => nvl(l_cde_rec.cinfo7, fnd_number.number_to_canonical(l_cde_rec.info7)) --2009 chnages
3634    ,p_action_information15        => nvl(l_cde_rec.cinfo8, fnd_number.number_to_canonical(l_cde_rec.info8)) --2009 chnages
3635    ,p_action_information16        => nvl(l_cde_rec.cinfo9, fnd_number.number_to_canonical(l_cde_rec.info9)) --2009 chnages
3636    ,p_action_information17        => nvl(l_cde_rec.cinfo10, fnd_number.number_to_canonical(l_cde_rec.info10)) --2009 chnages
3637    );
3638   END LOOP;
3639   --
3640   --
3641   -- Loop for all reporting codes that are processed by an external PROCEDURE.
3642   --
3643   FOR l_proc_name_rec IN csr_PROCEDURE_CODES
3644                      (p_payroll_action_id)
3645   LOOP
3646    l_plsql_block := REPLACE(l_plsql_block, '<PROC>', l_proc_name_rec.procedure_name);
3647    --
3648    --
3649    -- Dynamically call the stored procedure.
3650    --
3651    EXECUTE IMMEDIATE l_plsql_block
3652    USING p_payroll_action_id
3653         ,l_proc_name_rec.legal_employer_id
3654         ,l_proc_name_rec.reporting_code;
3655   END LOOP;
3656   --
3657   hr_utility.set_location('Leaving ' || l_proc_name, 1000);
3658   --
3659   EXCEPTION
3660    WHEN OTHERS THEN
3661      Fnd_file.put_line(FND_FILE.LOG,'## SQLERR ' || sqlerrm(sqlcode));
3662      hr_utility.set_location(sqlerrm(sqlcode),120);
3663    --
3664  END deinitialization_code;
3665  --
3666  --
3667  -- -----------------------------------------------------------------------------
3668  -- Generates XML for the Norwegian End of Year Audit report.
3669  -- -----------------------------------------------------------------------------
3670  --
3671  PROCEDURE get_audit_data
3672  (p_payroll_action_id IN VARCHAR2
3673  ,p_template_name     IN VARCHAR2
3674  ,p_xml               OUT NOCOPY CLOB) IS
3675   --
3676   l_proc_name CONSTANT VARCHAR2(61) := l_package_name || '.get_audit_data';
3677   --
3678   CURSOR csr_LEGEMP
3679           (l_payroll_action_id IN NUMBER) IS
3680    SELECT leg_emp.action_information2  legal_employer_id
3681          ,leg_emp.action_information3  legal_employer_name
3682          ,leg_emp.action_information4  organization_number
3683 	 ,leg_emp.effective_date               effective_date
3684    FROM   pay_action_information leg_emp
3685    WHERE  leg_emp.action_context_type         = 'PA'
3686      AND  leg_emp.action_context_id           = l_payroll_action_id
3687      AND  leg_emp.action_information_category = 'EMEA REPORT INFORMATION'
3688      AND  leg_emp.action_information1         = 'LEG_EMP_INFO'
3689    ORDER BY leg_emp.action_information3;
3690   --
3691   CURSOR csr_PERSON
3692           (l_payroll_action_id IN NUMBER
3693           ,p_legal_employer_id IN VARCHAR2
3694           ,l_seaman_emp        IN VARCHAR2) IS
3695    SELECT DISTINCT
3696           summ_cde.action_information3 person_id
3697          ,summ_cde.action_information12 tax_municipality
3698          ,per.action_information3 full_name
3699          ,per.action_information4 employee_number
3700          ,per.action_information5 national_identifier
3701          ,per.action_information6 employed_throughout
3702          ,per.action_information7 seamen
3703          ,per.action_information8 employment_date_days
3704    FROM   pay_action_information summ_cde
3705          ,pay_action_information per
3706    WHERE  summ_cde.action_context_type         = 'PA'
3707      AND  summ_cde.action_context_id           = l_payroll_action_id
3708      AND  summ_cde.action_information_category = 'EMEA REPORT INFORMATION'
3709      AND  summ_cde.action_information1         = 'AUDIT_REP_SUMMARY'
3710      AND  summ_cde.action_information2         = p_legal_employer_id
3711      AND  per.action_context_type              = summ_cde.action_context_type
3712      AND  per.action_context_id                = summ_cde.action_context_id
3713      AND  per.action_information_category      = summ_cde.action_information_category
3714      AND  per.action_information1              = 'PER_INFO'
3715      AND  per.action_information2              = summ_cde.action_information3
3716      AND  per.action_information7              = DECODE(l_seaman_emp,'N',per.action_information7,hr_general.decode_lookup('YES_NO','Y'))
3717    ORDER BY per.action_information3;
3718   --
3719   CURSOR csr_SUMMARY_CODES
3720           (l_payroll_action_id IN NUMBER
3721           ,p_legal_employer_id IN VARCHAR2
3722           ,p_person_id         IN VARCHAR2
3723           ,p_tax_municipality  IN VARCHAR2
3724           ,l_seaman_status     IN VARCHAR2 ) IS
3725    SELECT summ_cde.action_information4  code
3726          ,trunc(fnd_number.canonical_to_number(summ_cde.action_information5))  amount
3727          ,summ_cde.action_information6  info1
3728          ,summ_cde.action_information7  info2
3729          ,summ_cde.action_information8  info3
3730          ,summ_cde.action_information9  info4
3731          ,summ_cde.action_information10 info5
3732          ,summ_cde.action_information11 info6
3733          ,summ_cde.action_information14 info7   --2009 changes
3734          ,summ_cde.action_information15 info8   --2009 changes
3735          ,summ_cde.action_information16 info9   --2009 changes
3736          ,summ_cde.action_information17 info10   --2009 changes
3737          ,pay_no_eoy_archive.get_code_desc(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4)            description
3738          ,pay_no_eoy_archive.get_info_prompt(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO1') info1_prompt
3739          ,pay_no_eoy_archive.get_info_prompt(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO2') info2_prompt
3740          ,pay_no_eoy_archive.get_info_prompt(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO3') info3_prompt
3741          ,pay_no_eoy_archive.get_info_prompt(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO4') info4_prompt
3742          ,pay_no_eoy_archive.get_info_prompt(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO5') info5_prompt
3743          ,pay_no_eoy_archive.get_info_prompt(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO6') info6_prompt
3744          ,pay_no_eoy_archive.get_info_prompt(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO7') info7_prompt     --2009 changes
3745          ,pay_no_eoy_archive.get_info_prompt(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO8') info8_prompt     --2009 changes
3746          ,pay_no_eoy_archive.get_info_prompt(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO9') info9_prompt     --2009 changes
3747          ,pay_no_eoy_archive.get_info_prompt(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO10') info10_prompt     --2009 changes
3748          ,pay_no_eoy_archive.get_info_dtype(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO1') info1_dtype
3749          ,pay_no_eoy_archive.get_info_dtype(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO2') info2_dtype
3750          ,pay_no_eoy_archive.get_info_dtype(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO3') info3_dtype
3751          ,pay_no_eoy_archive.get_info_dtype(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO4') info4_dtype
3752          ,pay_no_eoy_archive.get_info_dtype(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO5') info5_dtype
3753          ,pay_no_eoy_archive.get_info_dtype(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO6') info6_dtype
3754          ,pay_no_eoy_archive.get_info_dtype(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO7') info7_dtype   --2009 Changes
3755          ,pay_no_eoy_archive.get_info_dtype(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO8') info8_dtype   --2009 Changes
3756          ,pay_no_eoy_archive.get_info_dtype(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO9') info9_dtype   --2009 Changes
3757          ,pay_no_eoy_archive.get_info_dtype(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO10') info10_dtype   --2009 Changes
3758    FROM   pay_action_information summ_cde
3759    WHERE  summ_cde.action_context_type         = 'PA'
3760      AND  summ_cde.action_context_id           = l_payroll_action_id
3761      AND  summ_cde.action_information_category = 'EMEA REPORT INFORMATION'
3762      AND  summ_cde.action_information1         = 'AUDIT_REP_SUMMARY'
3763      AND  summ_cde.action_information2         = p_legal_employer_id
3764      AND  summ_cde.action_information3         = p_person_id
3765      AND  summ_cde.action_information12        = p_tax_municipality
3766      AND  summ_cde.action_information13        = l_seaman_status
3767    ORDER BY summ_cde.action_information2,
3768             summ_cde.action_information4;
3769   --
3770   l_xml_element_count NUMBER := 1;
3771   l_payroll_action_id NUMBER;
3772   l_bg_id             NUMBER;
3773   lg_format_mask      VARCHAR2(40);
3774   l_desc_count        NUMBER := 0;
3775   l_seaman_status     VARCHAR2(1);
3776   --
3777  BEGIN
3778   hr_utility.set_location('Entering ' || l_proc_name, 10);
3779   g_xml_element_table.DELETE;
3780   g_fixed_code.DELETE;
3781   --
3782   IF p_payroll_action_id is null then
3783     BEGIN
3784     SELECT payroll_action_id
3785       into l_payroll_action_id
3786       from pay_payroll_actions ppa,
3787 	   fnd_conc_req_summary_v fcrs,
3788 	   fnd_conc_req_summary_v fcrs1
3789      WHERE fcrs.request_id = fnd_global.conc_request_id
3790        and fcrs.priority_request_id = fcrs1.priority_request_id
3791        and ppa.request_id between fcrs1.request_id and fcrs.request_id
3792        and ppa.request_id = fcrs1.request_id;
3793      EXCEPTION
3794      WHEN others then
3795        null;
3796      END;
3797   ELSE
3798     l_payroll_action_id := p_payroll_action_id;
3799   END IF;
3800   --
3801   -- get the currecnt BG's currency and mask to format the amount fields
3802   --
3803   fnd_profile.get('PER_BUSINESS_GROUP_ID', l_bg_id);
3804   set_currency_mask(l_bg_id, lg_format_mask);
3805   --9538493
3806   g_xml_element_table(l_xml_element_count).tagname  := 'PYNOEOYAUR';
3807   g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
3808   l_xml_element_count := l_xml_element_count + 1;
3809   --9538493
3810   --
3811   -- Loop for each legal employer.
3812   --
3813 --  fnd_file.put_line(fnd_file.log,'csr_LEGEMP l_payroll_action_id'||l_payroll_action_id);
3814   FOR l_legemp_rec IN csr_LEGEMP
3815                        (l_payroll_action_id)
3816   LOOP
3817    --
3818    --
3819    g_xml_element_table(l_xml_element_count).tagname  := 'LEGAL_EMPLOYER';
3820    g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
3821    l_xml_element_count := l_xml_element_count + 1;
3822    --
3823    g_xml_element_table(l_xml_element_count).tagname  := 'LEGAL_EMPLOYER_NAME';
3824    g_xml_element_table(l_xml_element_count).tagvalue := l_legemp_rec.legal_employer_name;
3825    l_xml_element_count := l_xml_element_count + 1;
3826    --
3827    g_xml_element_table(l_xml_element_count).tagname  := 'LEGAL_EMPLOYER_ORG_NUMBER';
3828    g_xml_element_table(l_xml_element_count).tagvalue := l_legemp_rec.organization_number;
3829    l_xml_element_count := l_xml_element_count + 1;
3830    --
3831    g_xml_element_table(l_xml_element_count).tagname  := 'REP_PERIOD';
3832    --g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_legemp_rec.effective_date,'DD-MON-YYYY');
3833    g_xml_element_table(l_xml_element_count).tagvalue := fnd_date.date_to_displaydate(l_legemp_rec.effective_date);
3834    l_xml_element_count := l_xml_element_count + 1;
3835    --
3836    --
3837    -- Loop for each person within legal employer.
3838    --
3839    l_seaman_status := 'N';
3840    --
3841    -- Following loop executes csr_PERSON with l_seaman_status = 'N' (for all employees)
3842    -- and for the second time l_seaman_status = 'Y' (Seaman Workers)
3843    --
3844    FOR i IN 1..2 LOOP
3845    --
3846    FOR l_person_rec IN csr_PERSON
3847                         (l_payroll_action_id
3848                         ,l_legemp_rec.legal_employer_id
3849                         ,l_seaman_status)
3850    LOOP
3851     --
3852     g_xml_element_table(l_xml_element_count).tagname  := 'PERSON';
3853     g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
3854     l_xml_element_count := l_xml_element_count + 1;
3855     --
3856     l_desc_count := 0;
3857     --
3858     --
3859     -- Loop for all reporting codes within person, legal employer, and tax municipality.
3860     --
3861     FOR l_summ_code_rec IN csr_SUMMARY_CODES
3862                             (l_payroll_action_id
3863                             ,l_legemp_rec.legal_employer_id
3864                             ,l_person_rec.person_id
3865                             ,l_person_rec.tax_municipality
3866                             ,l_seaman_status)
3867     LOOP
3868      --
3869      l_desc_count := 1;
3870      --
3871      g_xml_element_table(l_xml_element_count).tagname  := 'REP_CODE';
3872      g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
3873      l_xml_element_count := l_xml_element_count + 1;
3874      --
3875      g_xml_element_table(l_xml_element_count).tagname  := 'CODE';
3876      g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.code;
3877      l_xml_element_count := l_xml_element_count + 1;
3878      --
3879      g_xml_element_table(l_xml_element_count).tagname  := 'AMOUNT';
3880      g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_summ_code_rec.amount);
3881      g_xml_element_table(l_xml_element_count).tagtype  := 'A';
3882      l_xml_element_count := l_xml_element_count + 1;
3883      --
3884      g_xml_element_table(l_xml_element_count).tagname  := 'DESC';
3885      g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.description;
3886      l_xml_element_count := l_xml_element_count + 1;
3887      --
3888      IF l_summ_code_rec.info1_prompt IS NOT NULL AND l_summ_code_rec.info1 IS NOT NULL THEN
3889       g_xml_element_table(l_xml_element_count).tagname  := 'INFO';
3890       g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
3891       l_xml_element_count := l_xml_element_count + 1;
3892       --
3893       g_xml_element_table(l_xml_element_count).tagname  := 'DESC';
3894       g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.info1_prompt;
3895       l_xml_element_count := l_xml_element_count + 1;
3896       --
3897       g_xml_element_table(l_xml_element_count).tagname  := 'INFO_DTLS';
3898       IF l_summ_code_rec.info1_dtype IN ('M','A','N','MC') THEN
3899         g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_summ_code_rec.info1));
3900       ELSIF l_summ_code_rec.info1_dtype = 'D' AND l_summ_code_rec.info1 <> '0' THEN
3901       g_xml_element_table(l_xml_element_count).tagvalue := fnd_date.date_to_displaydate(fnd_date.canonical_to_date(l_summ_code_rec.info1));
3902 
3903       ELSE
3904         g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.info1;
3905       END IF;
3906       l_xml_element_count := l_xml_element_count + 1;
3907       --
3908       g_xml_element_table(l_xml_element_count).tagname  := 'INFO';
3909       g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
3910       l_xml_element_count := l_xml_element_count + 1;
3911      END IF;
3912      --
3913      IF l_summ_code_rec.info2_prompt IS NOT NULL AND l_summ_code_rec.info2 IS NOT NULL THEN
3914       g_xml_element_table(l_xml_element_count).tagname  := 'INFO';
3915       g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
3916       l_xml_element_count := l_xml_element_count + 1;
3917       --
3918       g_xml_element_table(l_xml_element_count).tagname  := 'DESC';
3919       g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.info2_prompt;
3920       l_xml_element_count := l_xml_element_count + 1;
3921       --
3922       g_xml_element_table(l_xml_element_count).tagname  := 'INFO_DTLS';
3923       IF l_summ_code_rec.info2_dtype IN ('M','A','N') THEN
3924         g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_summ_code_rec.info2));
3925       ELSIF l_summ_code_rec.info2_dtype = 'D' AND l_summ_code_rec.info2 <> '0' THEN
3926         g_xml_element_table(l_xml_element_count).tagvalue := fnd_date.date_to_displaydate(fnd_date.canonical_to_date(l_summ_code_rec.info2));
3927 	--g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_date.canonical_to_date(l_summ_code_rec.info2),'DD-MM-YYYY');
3928       ELSE
3929         g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.info2;
3930       END IF;
3931       l_xml_element_count := l_xml_element_count + 1;
3932       --
3933       g_xml_element_table(l_xml_element_count).tagname  := 'INFO';
3934       g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
3935       l_xml_element_count := l_xml_element_count + 1;
3936      END IF;
3937      --
3938      IF l_summ_code_rec.info3_prompt IS NOT NULL AND l_summ_code_rec.info3 IS NOT NULL THEN
3939       g_xml_element_table(l_xml_element_count).tagname  := 'INFO';
3940       g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
3941       l_xml_element_count := l_xml_element_count + 1;
3942       --
3943       g_xml_element_table(l_xml_element_count).tagname  := 'DESC';
3944       g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.info3_prompt;
3945       l_xml_element_count := l_xml_element_count + 1;
3946       --
3947       g_xml_element_table(l_xml_element_count).tagname  := 'INFO_DTLS';
3948       IF l_summ_code_rec.info3_dtype IN ('M','A','N') THEN
3949         g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_summ_code_rec.info3));
3950       ELSIF l_summ_code_rec.info3_dtype = 'D' AND l_summ_code_rec.info3 <> '0' THEN
3951         g_xml_element_table(l_xml_element_count).tagvalue := fnd_date.date_to_displaydate(fnd_date.canonical_to_date(l_summ_code_rec.info3));
3952 	--g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_date.canonical_to_date(l_summ_code_rec.info3),'DD-MM-YYYY');
3953       ELSE
3954         g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.info3;
3955       END IF;
3956       l_xml_element_count := l_xml_element_count + 1;
3957       --
3958       g_xml_element_table(l_xml_element_count).tagname  := 'INFO';
3959       g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
3960       l_xml_element_count := l_xml_element_count + 1;
3961      END IF;
3962      --
3963      IF l_summ_code_rec.info4_prompt IS NOT NULL AND l_summ_code_rec.info4 IS NOT NULL THEN
3964       g_xml_element_table(l_xml_element_count).tagname  := 'INFO';
3965       g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
3966       l_xml_element_count := l_xml_element_count + 1;
3967       --
3968       g_xml_element_table(l_xml_element_count).tagname  := 'DESC';
3969       g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.info4_prompt;
3970       l_xml_element_count := l_xml_element_count + 1;
3971       --
3972       g_xml_element_table(l_xml_element_count).tagname  := 'INFO_DTLS';
3973       IF l_summ_code_rec.info4_dtype IN ('M','A','N') THEN
3974         g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_summ_code_rec.info4));
3975       ELSIF l_summ_code_rec.info4_dtype = 'D' AND l_summ_code_rec.info4 <> '0' THEN
3976         g_xml_element_table(l_xml_element_count).tagvalue := fnd_date.date_to_displaydate(fnd_date.canonical_to_date(l_summ_code_rec.info4));
3977 	--g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_date.canonical_to_date(l_summ_code_rec.info4),'DD-MM-YYYY');
3978       ELSE
3979         g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.info4;
3980       END IF;
3981       l_xml_element_count := l_xml_element_count + 1;
3982       --
3983       g_xml_element_table(l_xml_element_count).tagname  := 'INFO';
3984       g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
3985       l_xml_element_count := l_xml_element_count + 1;
3986      END IF;
3987      --
3988      IF l_summ_code_rec.info5_prompt IS NOT NULL AND l_summ_code_rec.info5 IS NOT NULL THEN
3989       g_xml_element_table(l_xml_element_count).tagname  := 'INFO';
3990       g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
3991       l_xml_element_count := l_xml_element_count + 1;
3992       --
3993       g_xml_element_table(l_xml_element_count).tagname  := 'DESC';
3994       g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.info5_prompt;
3995       l_xml_element_count := l_xml_element_count + 1;
3996       --
3997       g_xml_element_table(l_xml_element_count).tagname  := 'INFO_DTLS';
3998       IF l_summ_code_rec.info5_dtype IN ('M','A','N') THEN
3999         g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_summ_code_rec.info5));
4000       ELSIF l_summ_code_rec.info5_dtype = 'D' AND l_summ_code_rec.info5 <> '0' THEN
4001         g_xml_element_table(l_xml_element_count).tagvalue := fnd_date.date_to_displaydate(fnd_date.canonical_to_date(l_summ_code_rec.info5));
4002 	--g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_date.canonical_to_date(l_summ_code_rec.info5),'DD-MM-YYYY');
4003       ELSE
4004         g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.info5;
4005       END IF;
4006       l_xml_element_count := l_xml_element_count + 1;
4007       --
4008       g_xml_element_table(l_xml_element_count).tagname  := 'INFO';
4009       g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
4010       l_xml_element_count := l_xml_element_count + 1;
4011      END IF;
4012      --
4013      IF l_summ_code_rec.info6_prompt IS NOT NULL AND l_summ_code_rec.info6 IS NOT NULL THEN
4014       g_xml_element_table(l_xml_element_count).tagname  := 'INFO';
4015       g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
4016       l_xml_element_count := l_xml_element_count + 1;
4017       --
4018       g_xml_element_table(l_xml_element_count).tagname  := 'DESC';
4019       g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.info6_prompt;
4020       l_xml_element_count := l_xml_element_count + 1;
4021       --
4022       g_xml_element_table(l_xml_element_count).tagname  := 'INFO_DTLS';
4023       IF l_summ_code_rec.info6_dtype IN ('M','A','N') THEN
4024         g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_summ_code_rec.info6));
4025       ELSIF l_summ_code_rec.info6_dtype = 'D' AND l_summ_code_rec.info6 <> '0' THEN
4026         g_xml_element_table(l_xml_element_count).tagvalue := fnd_date.date_to_displaydate(fnd_date.canonical_to_date(l_summ_code_rec.info6));
4027 	--g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_date.canonical_to_date(l_summ_code_rec.info6),'DD-MM-YYYY');
4028       ELSE
4029         g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.info6;
4030       END IF;
4031       l_xml_element_count := l_xml_element_count + 1;
4032       --
4033       g_xml_element_table(l_xml_element_count).tagname  := 'INFO';
4034       g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
4035       l_xml_element_count := l_xml_element_count + 1;
4036      END IF;
4037      -- 2009 changes starts
4038       IF l_summ_code_rec.info7_prompt IS NOT NULL AND l_summ_code_rec.info7 IS NOT NULL THEN
4039       g_xml_element_table(l_xml_element_count).tagname  := 'INFO';
4040       g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
4041       l_xml_element_count := l_xml_element_count + 1;
4042       --
4043       g_xml_element_table(l_xml_element_count).tagname  := 'DESC';
4044       g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.info7_prompt;
4045       l_xml_element_count := l_xml_element_count + 1;
4046       --
4047       g_xml_element_table(l_xml_element_count).tagname  := 'INFO_DTLS';
4048       IF l_summ_code_rec.info7_dtype IN ('M','A','N') THEN
4049         g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_summ_code_rec.info7));
4050       ELSIF l_summ_code_rec.info7_dtype = 'D' AND l_summ_code_rec.info7 <> '0' THEN
4051         g_xml_element_table(l_xml_element_count).tagvalue := fnd_date.date_to_displaydate(fnd_date.canonical_to_date(l_summ_code_rec.info7));
4052 	--g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_date.canonical_to_date(l_summ_code_rec.info7),'DD-MM-YYYY');
4053       ELSE
4054         g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.info7;
4055       END IF;
4056       l_xml_element_count := l_xml_element_count + 1;
4057       --
4058       g_xml_element_table(l_xml_element_count).tagname  := 'INFO';
4059       g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
4060       l_xml_element_count := l_xml_element_count + 1;
4061      END IF;
4062      --
4063       IF l_summ_code_rec.info8_prompt IS NOT NULL AND l_summ_code_rec.info8 IS NOT NULL THEN
4064       g_xml_element_table(l_xml_element_count).tagname  := 'INFO';
4065       g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
4066       l_xml_element_count := l_xml_element_count + 1;
4067       --
4068       g_xml_element_table(l_xml_element_count).tagname  := 'DESC';
4069       g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.info8_prompt;
4070       l_xml_element_count := l_xml_element_count + 1;
4071       --
4072       g_xml_element_table(l_xml_element_count).tagname  := 'INFO_DTLS';
4073       IF l_summ_code_rec.info8_dtype IN ('M','A','N') THEN
4074         g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_summ_code_rec.info8));
4075       ELSIF l_summ_code_rec.info8_dtype = 'D' AND l_summ_code_rec.info8 <> '0' THEN
4076         g_xml_element_table(l_xml_element_count).tagvalue := fnd_date.date_to_displaydate(fnd_date.canonical_to_date(l_summ_code_rec.info8));
4077 	--g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_date.canonical_to_date(l_summ_code_rec.info8),'DD-MM-YYYY');
4078       ELSE
4079         g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.info8;
4080       END IF;
4081       l_xml_element_count := l_xml_element_count + 1;
4082       --
4083       g_xml_element_table(l_xml_element_count).tagname  := 'INFO';
4084       g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
4085       l_xml_element_count := l_xml_element_count + 1;
4086      END IF;
4087      --
4088       IF l_summ_code_rec.info9_prompt IS NOT NULL AND l_summ_code_rec.info9 IS NOT NULL THEN
4089       g_xml_element_table(l_xml_element_count).tagname  := 'INFO';
4090       g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
4091       l_xml_element_count := l_xml_element_count + 1;
4092       --
4093       g_xml_element_table(l_xml_element_count).tagname  := 'DESC';
4094       g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.info9_prompt;
4095       l_xml_element_count := l_xml_element_count + 1;
4096       --
4097       g_xml_element_table(l_xml_element_count).tagname  := 'INFO_DTLS';
4098       IF l_summ_code_rec.info9_dtype IN ('M','A','N') THEN
4099         g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_summ_code_rec.info9));
4100       ELSIF l_summ_code_rec.info9_dtype = 'D' AND l_summ_code_rec.info9 <> '0' THEN
4101         g_xml_element_table(l_xml_element_count).tagvalue := fnd_date.date_to_displaydate(fnd_date.canonical_to_date(l_summ_code_rec.info9));
4102 	--g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_date.canonical_to_date(l_summ_code_rec.info9),'DD-MM-YYYY');
4103       ELSE
4104         g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.info9;
4105       END IF;
4106       l_xml_element_count := l_xml_element_count + 1;
4107       --
4108       g_xml_element_table(l_xml_element_count).tagname  := 'INFO';
4109       g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
4110       l_xml_element_count := l_xml_element_count + 1;
4111      END IF;
4112      --
4113       IF l_summ_code_rec.info10_prompt IS NOT NULL AND l_summ_code_rec.info10 IS NOT NULL THEN
4114       g_xml_element_table(l_xml_element_count).tagname  := 'INFO';
4115       g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
4116       l_xml_element_count := l_xml_element_count + 1;
4117       --
4118       g_xml_element_table(l_xml_element_count).tagname  := 'DESC';
4119       g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.info10_prompt;
4120       l_xml_element_count := l_xml_element_count + 1;
4121       --
4122       g_xml_element_table(l_xml_element_count).tagname  := 'INFO_DTLS';
4123       IF l_summ_code_rec.info10_dtype IN ('M','A','N') THEN
4124         g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_summ_code_rec.info10));
4125       ELSIF l_summ_code_rec.info10_dtype = 'D' AND l_summ_code_rec.info10 <> '0' THEN
4126         g_xml_element_table(l_xml_element_count).tagvalue := fnd_date.date_to_displaydate(fnd_date.canonical_to_date(l_summ_code_rec.info10));
4127 	--g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_date.canonical_to_date(l_summ_code_rec.info10),'DD-MM-YYYY');
4128       ELSE
4129         g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.info10;
4130       END IF;
4131       l_xml_element_count := l_xml_element_count + 1;
4132       --
4133       g_xml_element_table(l_xml_element_count).tagname  := 'INFO';
4134       g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
4135       l_xml_element_count := l_xml_element_count + 1;
4136      END IF;
4137      -- 2009 changes ends
4138      --
4139      g_xml_element_table(l_xml_element_count).tagname  := 'REP_CODE';
4140      g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
4141      l_xml_element_count := l_xml_element_count + 1;
4142     END LOOP;
4143     --
4144     IF l_desc_count = 1 THEN
4145       --
4146       g_xml_element_table(l_xml_element_count).tagname  := 'NAME';
4147       g_xml_element_table(l_xml_element_count).tagvalue := l_person_rec.full_name;
4148       l_xml_element_count := l_xml_element_count + 1;
4149       --
4150       g_xml_element_table(l_xml_element_count).tagname  := 'NI_NUMBER';
4151       g_xml_element_table(l_xml_element_count).tagvalue := l_person_rec.national_identifier;
4152       l_xml_element_count := l_xml_element_count + 1;
4153       --
4154       g_xml_element_table(l_xml_element_count).tagname  := 'EMP_NO';
4155       g_xml_element_table(l_xml_element_count).tagvalue := l_person_rec.employee_number;
4156       l_xml_element_count := l_xml_element_count + 1;
4157       --
4158       g_xml_element_table(l_xml_element_count).tagname  := 'EMPLOYED_THROUGHOUT';
4159       g_xml_element_table(l_xml_element_count).tagvalue := l_person_rec.employed_throughout;
4160       l_xml_element_count := l_xml_element_count + 1;
4161       --
4162       g_xml_element_table(l_xml_element_count).tagname  := 'SEAMEN';
4163       g_xml_element_table(l_xml_element_count).tagvalue := l_person_rec.seamen;   -- Fix For Seamen Display 2007/2008
4164   --g_xml_element_table(l_xml_element_count).tagvalue := hr_general.decode_lookup('YES_NO',l_seaman_status);
4165       l_xml_element_count := l_xml_element_count + 1;
4166       --
4167       g_xml_element_table(l_xml_element_count).tagname  := 'TAX_MUNICIPALITY';
4168       g_xml_element_table(l_xml_element_count).tagvalue := l_person_rec.tax_municipality;
4169       l_xml_element_count := l_xml_element_count + 1;
4170       --
4171       g_xml_element_table(l_xml_element_count).tagname  := 'EMPLOYMENT_DATES';
4172       g_xml_element_table(l_xml_element_count).tagvalue := l_person_rec.employment_date_days;
4173       l_xml_element_count := l_xml_element_count + 1;
4174       --
4175       g_xml_element_table(l_xml_element_count).tagname  := 'PERSON';
4176       g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
4177       l_xml_element_count := l_xml_element_count + 1;
4178       --
4179      ELSE
4180       --
4181       l_xml_element_count := l_xml_element_count - 1;
4182       g_xml_element_table(l_xml_element_count).tagname  := NULL;
4183       g_xml_element_table(l_xml_element_count).tagvalue := NULL;
4184       --
4185      END IF;
4186     --
4187     END LOOP;
4188     --
4189     l_seaman_status := 'Y';
4190     --
4191    END LOOP;
4192    --
4193    g_xml_element_table(l_xml_element_count).tagname  := 'LEGAL_EMPLOYER';
4194    g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
4195    l_xml_element_count := l_xml_element_count + 1;
4196   END LOOP;
4197   --
4198   --9538493
4199   g_xml_element_table(l_xml_element_count).tagname  := 'PYNOEOYAUR';
4200   g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
4201   l_xml_element_count := l_xml_element_count + 1;
4202   --9538493
4203 
4204   write_to_clob(p_xml);
4205   --
4206   hr_utility.set_location('Leaving ' || l_proc_name, 1000);
4207  END get_audit_data;
4208  --
4209  --
4210  ------------------------------------------------------------------------------------
4211  -- Generates Norwegian End of Year Employer Contribution Summary Report
4212  --
4213  -----------------------------------------------------------------------------------
4214  --
4215  PROCEDURE get_employer_contribution_data
4216  (p_payroll_action_id IN VARCHAR2
4217  ,p_template_name     IN VARCHAR2
4218  ,p_xml               OUT NOCOPY CLOB) IS
4219   --
4220   l_proc_name CONSTANT VARCHAR2(61) := l_package_name || '.get_employer_contribution_data';
4221   --
4222   --
4223   -- Cursor to get the Values for the NI Zones and the Tax Municipal Details 2007/08 changes
4224   --
4225   CURSOR csr_LE_SI_LU_TM_INFO
4226           (l_payroll_action_id IN NUMBER
4227           ,l_legal_employer_id IN NUMBER) IS --Bug 14671801 --Added LE Parameter
4228    SELECT DISTINCT
4229      le_lu_tm.action_information3   si_status
4230          ,le_lu_tm.action_information4   local_unit_id
4231          ,le_lu_tm.action_information12   org_number     --Bug 14671801
4232 --         ,le_lu_tm.action_information5   local_unit
4233          ,le_lu_tm.action_information6   tax_municipality_id
4234          ,le_lu_tm.action_information7   tax_municipality
4235          ,le_lu_tm.action_information8   ni_zone_arc
4236 	 ,fnd_number.canonical_to_number(le_lu_tm.action_information9)   emp_contr_bse
4237          ,fnd_number.canonical_to_number(le_lu_tm.action_information10)  reimb_bse
4238 	 ,fnd_number.canonical_to_number(le_lu_tm.action_information11)  pension_bse
4239    FROM   pay_action_information le_lu_tm
4240    WHERE  le_lu_tm.action_context_type           = 'PA'
4241      AND  le_lu_tm.action_context_id             = l_payroll_action_id
4242      AND  le_lu_tm.action_information_category   = 'EMEA REPORT INFORMATION'
4243      AND  le_lu_tm.action_information1           = 'LE_SI_LU_TM_INFO'
4244      AND  le_lu_tm.action_information2           = TO_CHAR(l_legal_employer_id);--Bug 14671801
4245   --
4246   CURSOR csr_LE_SI
4247           (l_payroll_action_id IN NUMBER) IS
4248    SELECT DISTINCT
4249           le_lu.action_information2    legal_employer_id
4250          ,le_lu.action_information3    si_status
4251          ,le_lu.action_information5    nace_code             -- changes 2007/08
4252          ,leg_emp.action_information3  legal_employer_name
4253          ,leg_emp.action_information4  organization_number
4254  --Bug 14671801
4255          ,leg_emp.action_information5  le_addr1
4256          ,leg_emp.action_information6  le_addr2
4257          ,leg_emp.action_information7  le_addr3
4258          ,leg_emp.action_information8  le_postcode
4259          ,leg_emp.action_information9  le_postoffice
4260 
4261          ,leg_emp.action_information10 tax_office_name --Bug 14671801
4262 --         ,leg_emp.action_information11 to_addr1
4263 --         ,leg_emp.action_information12 to_addr2
4264 --         ,leg_emp.action_information13 to_addr3
4265 --         ,leg_emp.action_information14 to_postcode
4266 --         ,leg_emp.action_information15 to_postoffice
4267        ,leg_emp.action_information16 le_tax_muncipality  --2007/2008 Changes
4268        ,leg_emp.action_information17 le_economic_aid     -- 2007/2008 Changes
4269     	 ,leg_emp.effective_date       effective_date
4270     	,leg_emp.action_information18 le_pen_scheme -- Bug#9579261 fix
4271     	,leg_emp.action_information19 le_pp_name -- Bug#9579261 fix
4272        	,leg_emp.action_information20 le_phone --Bug 14671801
4273        	,leg_emp.action_information21 le_email --Bug 14671801
4274 
4275 
4276    FROM   pay_action_information le_lu
4277          ,pay_action_information leg_emp
4278    WHERE  le_lu.action_context_type           = 'PA'
4279      AND  le_lu.action_context_id             = l_payroll_action_id
4280      AND  le_lu.action_information_category   = 'EMEA REPORT INFORMATION'
4281      AND  le_lu.action_information1           = 'LE_SI_LU_INFO'
4282      AND  leg_emp.action_context_type         = 'PA'
4283      AND  leg_emp.action_context_id           = le_lu.action_context_id
4284      AND  leg_emp.action_information_category = 'EMEA REPORT INFORMATION'
4285      AND  leg_emp.action_information1         = 'LEG_EMP_INFO'
4286      AND  leg_emp.action_information2         = le_lu.action_information2;
4287   --
4288   CURSOR csr_LE_SI_BAL_SUMMARY
4289           (l_payroll_action_id IN NUMBER
4290           ,p_legal_employer_id IN VARCHAR2
4291           ,p_si_status         IN VARCHAR2) IS
4292    SELECT
4293 --          fnd_number.canonical_to_number(le_si_bals.action_information4)  emp_contr_ni_zone1
4294 --         ,fnd_number.canonical_to_number(le_si_bals.action_information5)  emp_contr_ni_zone2
4295 --         ,fnd_number.canonical_to_number(le_si_bals.action_information6)  emp_contr_ni_zone3
4296 --         ,fnd_number.canonical_to_number(le_si_bals.action_information7)  emp_contr_ni_zone4
4297 --         ,fnd_number.canonical_to_number(le_si_bals.action_information8)  emp_contr_ni_zone5
4298           fnd_number.canonical_to_number(le_si_bals.action_information9)  emp_contr_ni_total
4299 --         ,fnd_number.canonical_to_number(le_si_bals.action_information10) emp_contr_o62_ni_zone1
4300 --         ,fnd_number.canonical_to_number(le_si_bals.action_information11) emp_contr_o62_ni_zone2
4301 --         ,fnd_number.canonical_to_number(le_si_bals.action_information12) emp_contr_o62_ni_zone3
4302 --         ,fnd_number.canonical_to_number(le_si_bals.action_information13) emp_contr_o62_ni_zone4
4303 --         ,fnd_number.canonical_to_number(le_si_bals.action_information14) emp_contr_o62_ni_zone5
4304 --         ,fnd_number.canonical_to_number(le_si_bals.action_information15) emp_contr_o62_ni_total
4305          ,fnd_number.canonical_to_number(le_si_bals.action_information16) tax
4306 --Bug 14671801         ,fnd_number.canonical_to_number(le_si_bals.action_information17) emp_contr_spcl_pct_base
4307 --         ,fnd_number.canonical_to_number(le_si_bals.action_information18) emp_contr_spcl_pct
4308 --Bug 14671801         ,fnd_number.canonical_to_number(le_si_bals.action_information19) emp_contr_spcl
4309 --         ,fnd_number.canonical_to_number(le_si_bals.action_information20) foreign_special_percentage
4310 --Bug 14671801         ,fnd_number.canonical_to_number(le_si_bals.action_information21) foreign_special_amount
4311 --Bug 14671801         ,fnd_number.canonical_to_number(le_si_bals.action_information22) emp_contr_reimb_spcl_base  --2007/2008 changes
4312          ,fnd_number.canonical_to_number(le_si_bals.action_information23) tot_reimb_bse           --2007/2008 changes
4313 	 ,fnd_number.canonical_to_number(le_si_bals.action_information24) tot_pension_bse         -- 2007/2008 Changes
4314    FROM   pay_action_information le_si_bals
4315    WHERE  le_si_bals.action_context_type         = 'PA'
4316      AND  le_si_bals.action_context_id           = l_payroll_action_id
4317      AND  le_si_bals.action_information_category = 'EMEA REPORT INFORMATION'
4318      AND  le_si_bals.action_information1         = 'LE_SI_BALS'
4319      AND  le_si_bals.action_information2         = p_legal_employer_id
4320      AND  le_si_bals.action_information3         = p_si_status;
4321   --
4322   CURSOR csr_LE_SI_CODE_SUMMARY
4323           (l_payroll_action_id IN NUMBER
4324           ,p_legal_employer_id IN VARCHAR2
4325           ,p_si_status         IN VARCHAR2) IS
4326    SELECT COUNT (DISTINCT asg_act.action_information5) certificates
4327 /*	 ,SUM(DECODE(asg_act.action_information4 || asg_act.action_information7 || TO_CHAR(SIGN(INSTR(rep_cde.action_information2, 'A')))
4328                     ,'1N1', fnd_number.canonical_to_number(rep_cde.action_information3)
4329                     ,0)) a_zone1
4330 	 ,SUM(DECODE(asg_act.action_information4 || asg_act.action_information7 || TO_CHAR(SIGN(INSTR(rep_cde.action_information2, 'A')))
4331                     ,'2N1', fnd_number.canonical_to_number(rep_cde.action_information3)
4332                     ,0)) a_zone2
4333 	 ,SUM(DECODE(asg_act.action_information4 || asg_act.action_information7 || TO_CHAR(SIGN(INSTR(rep_cde.action_information2, 'A')))
4334                     ,'3N1', fnd_number.canonical_to_number(rep_cde.action_information3)
4335                     ,0)) a_zone3
4336 	 ,SUM(DECODE(asg_act.action_information4 || asg_act.action_information7 || TO_CHAR(SIGN(INSTR(rep_cde.action_information2, 'A')))
4337                     ,'4N1', fnd_number.canonical_to_number(rep_cde.action_information3)
4338                     ,0)) a_zone4
4339 	 ,SUM(DECODE(asg_act.action_information4 || asg_act.action_information7 || TO_CHAR(SIGN(INSTR(rep_cde.action_information2, 'A')))
4340                     ,'5N1', fnd_number.canonical_to_number(rep_cde.action_information3)
4341                     ,0)) a_zone5*/
4342 	 ,SUM(DECODE(asg_act.action_information4 || asg_act.action_information7 || TO_CHAR(SIGN(INSTR(rep_cde.action_information2, 'A')))
4343                     ,'1Y1', fnd_number.canonical_to_number(rep_cde.action_information3)
4344                     ,0)) bl_zone1
4345 	 ,SUM(DECODE(asg_act.action_information4 || asg_act.action_information7 || TO_CHAR(SIGN(INSTR(rep_cde.action_information2, 'A')))
4346                     ,'2Y1', fnd_number.canonical_to_number(rep_cde.action_information3)
4347                     ,0)) bl_zone2
4348 	 ,SUM(DECODE(asg_act.action_information4 || asg_act.action_information7 || TO_CHAR(SIGN(INSTR(rep_cde.action_information2, 'A')))
4349                     ,'3Y1', fnd_number.canonical_to_number(rep_cde.action_information3)
4350                     ,0)) bl_zone3
4351 	 ,SUM(DECODE(asg_act.action_information4 || asg_act.action_information7 || TO_CHAR(SIGN(INSTR(rep_cde.action_information2, 'A')))
4352                     ,'4Y1', fnd_number.canonical_to_number(rep_cde.action_information3)
4353                     ,0)) bl_zone4
4354 	 ,SUM(DECODE(asg_act.action_information4 || asg_act.action_information7 || TO_CHAR(SIGN(INSTR(rep_cde.action_information2, 'A')))
4355                     ,'5Y1', fnd_number.canonical_to_number(rep_cde.action_information3)
4356                     ,0)) bl_zone5
4357 /*	 ,SUM(DECODE(asg_act.action_information4 || TO_CHAR(SIGN(INSTR(rep_cde.action_information2, 'A')))
4358                     ,'11', fnd_number.canonical_to_number(rep_cde.action_information3)
4359                     ,0)) sum_zone1
4360 	 ,SUM(DECODE(asg_act.action_information4 || TO_CHAR(SIGN(INSTR(rep_cde.action_information2, 'A')))
4361                     ,'21', fnd_number.canonical_to_number(rep_cde.action_information3)
4362                     ,0)) sum_zone2
4363 	 ,SUM(DECODE(asg_act.action_information4 || TO_CHAR(SIGN(INSTR(rep_cde.action_information2, 'A')))
4364                     ,'31', fnd_number.canonical_to_number(rep_cde.action_information3)
4365                     ,0)) sum_zone3
4366 	 ,SUM(DECODE(asg_act.action_information4 || TO_CHAR(SIGN(INSTR(rep_cde.action_information2, 'A')))
4367                     ,'41', fnd_number.canonical_to_number(rep_cde.action_information3)
4368                     ,0)) sum_zone4
4369 	 ,SUM(DECODE(asg_act.action_information4 || TO_CHAR(SIGN(INSTR(rep_cde.action_information2, 'A')))
4370                     ,'51', fnd_number.canonical_to_number(rep_cde.action_information3)
4371                     ,0)) sum_zone5
4372 	 ,SUM(DECODE(TO_CHAR(SIGN(INSTR(rep_cde.action_information2, 'A')))
4373                     ,'1', fnd_number.canonical_to_number(rep_cde.action_information3)
4374                     ,0)) sum_totals*/
4375    FROM   pay_assignment_actions paa
4376          ,pay_action_information le_lu
4377          ,pay_action_information asg_act
4378          ,pay_action_information rep_cde
4379          ,pay_action_information cde_dtl
4380    WHERE  paa.payroll_action_id               = le_lu.action_context_id
4381      AND  asg_act.action_context_type         = 'AAP'
4382      AND  asg_act.action_context_id           = paa.assignment_action_id
4383      AND  asg_act.action_information_category = 'EMEA REPORT INFORMATION'
4384      AND  asg_act.action_information1         = 'ASG_ACT_INFO'
4385      AND  asg_act.action_information2         = le_lu.action_information2
4386      AND  asg_act.action_information3         = le_lu.action_information4
4387      AND  le_lu.action_context_type           = 'PA'
4388      AND  le_lu.action_context_id             = l_payroll_action_id
4389      AND  le_lu.action_information_category   = 'EMEA REPORT INFORMATION'
4390      AND  le_lu.action_information1           = 'LE_SI_LU_INFO'
4391      AND  le_lu.action_information2           = p_legal_employer_id
4392      AND  le_lu.action_information3           = p_si_status
4393      AND  cde_dtl.action_context_type         = 'PA'
4394      AND  cde_dtl.action_context_id           = le_lu.action_context_id
4395      AND  cde_dtl.action_information_category = 'EMEA REPORT INFORMATION'
4396      AND  cde_dtl.action_information1         = 'REP_CODE_DTLS'
4397      AND  cde_dtl.action_information2         = le_lu.action_information2
4398      AND  cde_dtl.action_information3         = rep_cde.action_information2
4399      AND  cde_dtl.action_information6         = 'Y'
4400      AND  rep_cde.action_context_type         = 'AAP'
4401      AND  rep_cde.action_context_id           = asg_act.action_context_id
4402      AND  rep_cde.action_information_category = 'EMEA REPORT INFORMATION'
4403      AND  rep_cde.action_information1         = 'ASG_REP_CODE_INFO'
4404    GROUP BY asg_act.action_information2
4405            ,le_lu.action_information3;
4406   --
4407   CURSOR csr_LE_SI_CODE_TOTAL_SUMMARY
4408           (l_payroll_action_id IN NUMBER
4409           ,p_legal_employer_id IN VARCHAR2
4410           ,p_si_status         IN VARCHAR2) IS
4411    SELECT
4412 /*       SUM(DECODE(asg_act.action_information7
4413                     ,'N', fnd_number.canonical_to_number(rep_cde.action_information3)
4414                     , 0)) a_earnings
4415        ,SUM(DECODE(asg_act.action_information7
4416                      ,'Y', fnd_number.canonical_to_number(rep_cde.action_information3)
4417                     , 0)) bl_earnings
4418 	     ,*/
4419 	SUM(fnd_number.canonical_to_number(rep_cde.action_information3)) sum_earnings
4420    FROM   pay_assignment_actions paa
4421          ,pay_action_information le_lu
4422          ,pay_action_information asg_act
4423          ,pay_action_information rep_cde
4424          ,pay_action_information cde_dtl
4425    WHERE  paa.payroll_action_id               = le_lu.action_context_id
4426      AND  asg_act.action_context_type         = 'AAP'
4427      AND  asg_act.action_context_id           = paa.assignment_action_id
4428      AND  asg_act.action_information_category = 'EMEA REPORT INFORMATION'
4429      AND  asg_act.action_information1         = 'ASG_ACT_INFO'
4430      AND  asg_act.action_information2         = le_lu.action_information2
4431      AND  asg_act.action_information3         = le_lu.action_information4
4432      AND  le_lu.action_context_type           = 'PA'
4433      AND  le_lu.action_context_id             = l_payroll_action_id
4434      AND  le_lu.action_information_category   = 'EMEA REPORT INFORMATION'
4435      AND  le_lu.action_information1           = 'LE_SI_LU_INFO'
4436      AND  le_lu.action_information2           = p_legal_employer_id
4437      AND  le_lu.action_information3           = p_si_status
4438      AND  cde_dtl.action_context_type         = 'PA'
4439      AND  cde_dtl.action_context_id           = le_lu.action_context_id
4440      AND  cde_dtl.action_information_category = 'EMEA REPORT INFORMATION'
4441      AND  cde_dtl.action_information1         = 'REP_CODE_DTLS'
4442      AND  cde_dtl.action_information2         = le_lu.action_information2
4443      AND  cde_dtl.action_information3         = rep_cde.action_information2
4444      AND  cde_dtl.action_information6         = 'Y'
4445      AND  rep_cde.action_context_type         = 'AAP'
4446      AND  rep_cde.action_context_id           = asg_act.action_context_id
4447      AND  rep_cde.action_information_category = 'EMEA REPORT INFORMATION'
4448      AND  rep_cde.action_information1         = 'ASG_REP_CODE_INFO'
4449      AND  rep_cde.action_information2         NOT IN ('000','250','311','312','313','314','315','316','950')  -- Changes 2007/2008
4450    GROUP BY asg_act.action_information2
4451            ,le_lu.action_information3;
4452 --
4453  /*
4454    CURSOR csr_LE_SI_CODE_TOTALS
4455           (l_payroll_action_id IN NUMBER
4456           ,p_legal_employer_id IN VARCHAR2
4457           ,p_si_status         IN VARCHAR2) IS
4458    SELECT asg_act.action_information2 legal_employer_id
4459          ,le_lu.action_information3 si_status
4460          ,DECODE(cde_dtl.action_information4, 'Y', rep_cde.action_information2, 'TOTAL_OTHER_CODES') code
4461          ,SUM(fnd_number.canonical_to_number(rep_cde.action_information3)) amount
4462    FROM   pay_assignment_actions paa
4463          ,pay_action_information le_lu
4464          ,pay_action_information asg_act
4465          ,pay_action_information rep_cde
4466          ,pay_action_information cde_dtl
4467    WHERE  paa.payroll_action_id               = le_lu.action_context_id
4468      AND  asg_act.action_context_type         = 'AAP'
4469      AND  asg_act.action_context_id           = paa.assignment_action_id
4470      AND  asg_act.action_information_category = 'EMEA REPORT INFORMATION'
4471      AND  asg_act.action_information1         = 'ASG_ACT_INFO'
4472      AND  asg_act.action_information2         = le_lu.action_information2
4473      AND  asg_act.action_information3         = le_lu.action_information4
4474      AND  le_lu.action_context_type           = 'PA'
4475      AND  le_lu.action_context_id             = l_payroll_action_id
4476      AND  le_lu.action_information_category   = 'EMEA REPORT INFORMATION'
4477      AND  le_lu.action_information1           = 'LE_SI_LU_INFO'
4478      AND  le_lu.action_information2           = p_legal_employer_id
4479      AND  le_lu.action_information3           = p_si_status
4480      AND  cde_dtl.action_context_type         = 'PA'
4481      AND  cde_dtl.action_context_id           = le_lu.action_context_id
4482      AND  cde_dtl.action_information_category = 'EMEA REPORT INFORMATION'
4483      AND  cde_dtl.action_information1         = 'REP_CODE_DTLS'
4484      AND  cde_dtl.action_information2         = le_lu.action_information2
4485      AND  cde_dtl.action_information3         = rep_cde.action_information2
4486      AND  rep_cde.action_context_type         = 'AAP'
4487      AND  rep_cde.action_context_id           = asg_act.action_context_id
4488      AND  rep_cde.action_information_category = 'EMEA REPORT INFORMATION'
4489      AND  rep_cde.action_information1         = 'ASG_REP_CODE_INFO'
4490    GROUP BY asg_act.action_information2
4491            ,le_lu.action_information3
4492            ,DECODE(cde_dtl.action_information4, 'Y',rep_cde.action_information2, 'TOTAL_OTHER_CODES');
4493 */
4494 --
4495 /*  CURSOR csr_SI_STATUS IS
4496    SELECT lu.lookup_code si_status
4497    FROM   hr_lookups lu
4498    WHERE  lu.lookup_type = 'NO_LEGAL_EMP_SI_STATUS';*/
4499   --
4500   l_total_below_rep_limit   NUMBER;
4501   l_xml_element_count       NUMBER := 1;
4502   l_total_codes             NUMBER;
4503   l_bg_id                   NUMBER;
4504   lg_format_mask            VARCHAR2(40);
4505   l_payroll_action_id       NUMBER;
4506 --  l_si_sts_rec              csr_SI_STATUS%ROWTYPE;
4507   l_le_si_rec               csr_LE_SI%ROWTYPE;
4508   l_le_si_code_rec          csr_LE_SI_CODE_SUMMARY%ROWTYPE;
4509   l_le_si_code_total_rec    csr_LE_SI_CODE_TOTAL_SUMMARY%ROWTYPE;
4510   l_le_si_bal_rec           csr_LE_SI_BAL_SUMMARY%ROWTYPE;
4511 --  l_le_si_total_rec         csr_LE_SI_CODE_TOTALS%ROWTYPE;
4512   l_net_emp_contr_bse       NUMBER := 0;
4513   l_gross_emp_contr_bse     NUMBER := 0;
4514   l_spcl_net_base           NUMBER := 0;
4515 
4516   l_specs_count             NUMBER :=0;         --Bug 14671801
4517   l_page_ended              BOOLEAN := FALSE;   --Bug 14671801
4518   --
4519  BEGIN
4520   hr_utility.set_location('Entering ' || l_proc_name, 10);
4521   g_xml_element_table.DELETE;
4522   --
4523   IF p_payroll_action_id is null then
4524     BEGIN
4525     SELECT payroll_action_id
4526       into l_payroll_action_id
4527       from pay_payroll_actions ppa,
4528 	   fnd_conc_req_summary_v fcrs,
4529 	   fnd_conc_req_summary_v fcrs1
4530      WHERE fcrs.request_id = fnd_global.conc_request_id
4531        and fcrs.priority_request_id = fcrs1.priority_request_id
4532        and ppa.request_id between fcrs1.request_id and fcrs.request_id
4533        and ppa.request_id = fcrs1.request_id;
4534      EXCEPTION
4535      WHEN others then
4536        null;
4537      END;
4538   ELSE
4539     l_payroll_action_id := p_payroll_action_id;
4540   END IF;
4541   --
4542   -- get the currecnt BG's currency and mask to format the amount fields
4543   --
4544 /*  fnd_profile.get('PER_BUSINESS_GROUP_ID', l_bg_id);
4545   set_currency_mask(l_bg_id, lg_format_mask);*/
4546   lg_format_mask:='FM9999999999990'; --Bug 14671801
4547   --
4548   --
4549   --
4550   g_xml_element_table(l_xml_element_count).tagname  := 'EMPR_CONTR';
4551   g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
4552   l_xml_element_count := l_xml_element_count + 1;
4553   --
4554   -- Loop for each unique legal employer / SI status combination.
4555   --
4556   --
4557   OPEN csr_LE_SI
4558         (l_payroll_action_id);
4559   LOOP
4560    FETCH csr_LE_SI INTO l_le_si_rec;
4561    EXIT WHEN csr_LE_SI%NOTFOUND;
4562    --
4563    g_xml_element_table(l_xml_element_count).tagname  := 'LEGAL_EMPLOYER';
4564    g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
4565    l_xml_element_count := l_xml_element_count + 1;
4566    --
4567   g_xml_element_table(l_xml_element_count).tagname  := 'PAGE';
4568   g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
4569   l_xml_element_count := l_xml_element_count + 1;
4570 
4571    g_xml_element_table(l_xml_element_count).tagname  := 'YEAR'; --Bug 14671801
4572 --   g_xml_element_table(l_xml_element_count).tagvalue := fnd_date.date_to_displaydate(l_le_si_rec.effective_date);
4573    g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_le_si_rec.effective_date,'YYYY');
4574    l_xml_element_count := l_xml_element_count + 1;
4575    -- ORID-16513 - 2007/2008 Changes
4576    g_xml_element_table(l_xml_element_count).tagname  := 'TAX_OFFICE';
4577    g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_rec.le_tax_muncipality;
4578    l_xml_element_count := l_xml_element_count + 1;
4579    -- ORID -25795
4580    g_xml_element_table(l_xml_element_count).tagname  := 'LEGAL_EMPLOYER_NAME';
4581    g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_rec.legal_employer_name;
4582    l_xml_element_count := l_xml_element_count + 1;
4583    -- ORID -21772
4584    g_xml_element_table(l_xml_element_count).tagname  := 'LEGAL_EMPLOYER_ORG_NUMBER';
4585    g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_rec.organization_number;
4586    l_xml_element_count := l_xml_element_count + 1;
4587    -- ORID-27602 - 2007/2008 Changes
4588    g_xml_element_table(l_xml_element_count).tagname  := 'INDUSTRY_CODE';
4589    g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_rec.nace_code;
4590    l_xml_element_count := l_xml_element_count + 1;
4591    -- ORID 27603 Calculation Method - 2007/2008 Changes
4592 /*
4593    g_xml_element_table(l_xml_element_count).tagname  := 'CALCULATION_METHOD';
4594    g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_rec.si_status;
4595    l_xml_element_count := l_xml_element_count + 1;
4596 */ --Bug 14671801
4597    g_xml_element_table(l_xml_element_count).tagname  := 'CALC_METHOD_'||l_le_si_rec.si_status;
4598    g_xml_element_table(l_xml_element_count).tagvalue := 'X';
4599    l_xml_element_count := l_xml_element_count + 1;
4600 
4601    -- ORID 27604 Economic Aid Received - 2007/2008 Changes
4602    g_xml_element_table(l_xml_element_count).tagname  := 'ECONOMIC_AID';
4603    g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_le_si_rec.le_economic_aid),lg_format_mask);
4604    l_xml_element_count := l_xml_element_count + 1;
4605 
4606    -- Bug#9579261 fix starts
4607    /*
4608    g_xml_element_table(l_xml_element_count).tagname  := 'PEN_SCHEME';
4609    IF l_le_si_rec.le_pen_scheme IS NOT NULL THEN
4610        g_xml_element_table(l_xml_element_count).tagvalue := 'Yes';
4611    ELSE
4612        g_xml_element_table(l_xml_element_count).tagvalue := 'No';
4613    END IF;
4614    */ --Bug 14671801
4615 
4616    IF l_le_si_rec.le_pen_scheme IS NOT NULL THEN
4617        g_xml_element_table(l_xml_element_count).tagname  :='PEN_SCHEME_YES';
4618    ELSE
4619        g_xml_element_table(l_xml_element_count).tagname  :='PEN_SCHEME_NO';
4620    END IF;
4621    g_xml_element_table(l_xml_element_count).tagvalue := 'X';
4622    l_xml_element_count := l_xml_element_count + 1;
4623 
4624    g_xml_element_table(l_xml_element_count).tagname  := 'PP_NAME';
4625    g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_rec.le_pp_name;
4626    l_xml_element_count := l_xml_element_count + 1;
4627    -- Bug#9579261 fix ends
4628 
4629    g_xml_element_table(l_xml_element_count).tagname  := 'ADDRESS'; --Bug 14671801
4630    g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_rec.le_addr1||' '||l_le_si_rec.le_addr2||' '||l_le_si_rec.le_addr3;
4631    l_xml_element_count := l_xml_element_count + 1;
4632 
4633    g_xml_element_table(l_xml_element_count).tagname  := 'POST_CODE'; --Bug 14671801
4634    g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_rec.le_postcode;
4635    l_xml_element_count := l_xml_element_count + 1;
4636 
4637    g_xml_element_table(l_xml_element_count).tagname  := 'POST_OFFICE'; --Bug 14671801
4638    g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_rec.le_postoffice;
4639    l_xml_element_count := l_xml_element_count + 1;
4640 
4641 
4642    g_xml_element_table(l_xml_element_count).tagname  := 'PHONE';--Bug 14671801
4643    g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_rec.le_phone;
4644    l_xml_element_count := l_xml_element_count + 1;
4645    --
4646    g_xml_element_table(l_xml_element_count).tagname  := 'EMAIL'; --Bug 14671801
4647    g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_rec.le_email;
4648    l_xml_element_count := l_xml_element_count + 1;
4649 
4650    --
4651 /*   g_xml_element_table(l_xml_element_count).tagname  := 'LEGAL_EMPLOYER_ADDRESS1';
4652    g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_rec.le_addr1;
4653    l_xml_element_count := l_xml_element_count + 1;*/
4654    --
4655 /*   g_xml_element_table(l_xml_element_count).tagname  := 'LEGAL_EMPLOYER_ADDRESS2';
4656    g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_rec.le_addr2;
4657    l_xml_element_count := l_xml_element_count + 1;*/
4658    --
4659 /*   g_xml_element_table(l_xml_element_count).tagname  := 'LEGAL_EMPLOYER_ADDRESS3';
4660    g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_rec.le_addr3;
4661    l_xml_element_count := l_xml_element_count + 1;*/
4662    --
4663 /*   g_xml_element_table(l_xml_element_count).tagname  := 'LEGAL_EMPLOYER_POSTCODE1';
4664    g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_rec.le_postcode;
4665    l_xml_element_count := l_xml_element_count + 1;*/
4666    --
4667 /*   g_xml_element_table(l_xml_element_count).tagname  := 'LEGAL_EMPLOYER_POSTCODE2';
4668    g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_rec.le_postoffice;
4669    l_xml_element_count := l_xml_element_count + 1;*/
4670    --
4671    g_xml_element_table(l_xml_element_count).tagname  := 'TAX_OFFICE_NAME';
4672    g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_rec.tax_office_name;
4673    l_xml_element_count := l_xml_element_count + 1;
4674    --
4675 /*   g_xml_element_table(l_xml_element_count).tagname  := 'TAX_OFFICE_ADDRESS1';
4676    g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_rec.to_addr1;
4677    l_xml_element_count := l_xml_element_count + 1;*/
4678    --
4679 /*   g_xml_element_table(l_xml_element_count).tagname  := 'TAX_OFFICE_ADDRESS2';
4680    g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_rec.to_addr2;
4681    l_xml_element_count := l_xml_element_count + 1;*/
4682    --
4683 /*   g_xml_element_table(l_xml_element_count).tagname  := 'TAX_OFFICE_ADDRESS3';
4684    g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_rec.to_addr3;
4685    l_xml_element_count := l_xml_element_count + 1;*/
4686    --
4687 /*   g_xml_element_table(l_xml_element_count).tagname  := 'TAX_OFFICE_POSTCODE1';
4688    g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_rec.to_postcode;
4689    l_xml_element_count := l_xml_element_count + 1;*/
4690    --
4691 /*   g_xml_element_table(l_xml_element_count).tagname  := 'TAX_OFFICE_POSTCODE2';
4692    g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_rec.to_postoffice;
4693    l_xml_element_count := l_xml_element_count + 1;*/
4694    --
4695    --
4696 /*   -- Loop through all 7 SI statuses.
4697    --
4698    OPEN csr_SI_STATUS;
4699    LOOP
4700     FETCH csr_SI_STATUS INTO l_si_sts_rec;
4701     EXIT WHEN csr_SI_STATUS%NOTFOUND;
4702     --
4703     g_xml_element_table(l_xml_element_count).tagname  := l_si_sts_rec.si_status;
4704     --
4705     --
4706     -- Set to X for the SI status being reported on.
4707     --
4708     IF l_si_sts_rec.si_status = l_le_si_rec.si_status THEN
4709      g_xml_element_table(l_xml_element_count).tagvalue := 'X';
4710     ELSE
4711      g_xml_element_table(l_xml_element_count).tagvalue := ' ';
4712     END IF;
4713     --
4714     l_xml_element_count := l_xml_element_count + 1;
4715    END LOOP;
4716    CLOSE csr_SI_STATUS;
4717    --*/
4718    --
4719    -- Fetch all balances for the legal employer / SI status combination.
4720    --
4721    OPEN csr_LE_SI_BAL_SUMMARY
4722          (l_payroll_action_id
4723          ,l_le_si_rec.legal_employer_id
4724          ,l_le_si_rec.si_status);
4725    FETCH csr_LE_SI_BAL_SUMMARY INTO l_le_si_bal_rec;
4726    CLOSE csr_LE_SI_BAL_SUMMARY;
4727    --
4728 /*   g_xml_element_table(l_xml_element_count).tagname  := 'EC_ZONE1';
4729    g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_le_si_bal_rec.emp_contr_ni_zone1),lg_format_mask);
4730    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
4731    l_xml_element_count := l_xml_element_count + 1;*/
4732    --
4733 /*   g_xml_element_table(l_xml_element_count).tagname  := 'EC_ZONE2';
4734    g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_le_si_bal_rec.emp_contr_ni_zone2),lg_format_mask);
4735    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
4736    l_xml_element_count := l_xml_element_count + 1;*/
4737    --
4738 /*   g_xml_element_table(l_xml_element_count).tagname  := 'EC_ZONE3';
4739    g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_le_si_bal_rec.emp_contr_ni_zone3),lg_format_mask);
4740    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
4741    l_xml_element_count := l_xml_element_count + 1;*/
4742    --
4743 /*   g_xml_element_table(l_xml_element_count).tagname  := 'EC_ZONE4';
4744    g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_le_si_bal_rec.emp_contr_ni_zone4),lg_format_mask);
4745    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
4746    l_xml_element_count := l_xml_element_count + 1;*/
4747    --
4748 /*   g_xml_element_table(l_xml_element_count).tagname  := 'EC_ZONE5';
4749    g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_le_si_bal_rec.emp_contr_ni_zone5),lg_format_mask);
4750    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
4751    l_xml_element_count := l_xml_element_count + 1;*/
4752    --
4753 /*   g_xml_element_table(l_xml_element_count).tagname  := 'EC_TOTAL';
4754    g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_le_si_bal_rec.emp_contr_ni_total),lg_format_mask);
4755    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
4756    l_xml_element_count := l_xml_element_count + 1;*/
4757    --
4758 /*   g_xml_element_table(l_xml_element_count).tagname  := 'EC_O62_ZONE1';
4759    g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_le_si_bal_rec.emp_contr_o62_ni_zone1),lg_format_mask);
4760    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
4761    l_xml_element_count := l_xml_element_count + 1;*/
4762    --
4763 /*   g_xml_element_table(l_xml_element_count).tagname  := 'EC_O62_ZONE2';
4764    g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_le_si_bal_rec.emp_contr_o62_ni_zone2),lg_format_mask);
4765    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
4766    l_xml_element_count := l_xml_element_count + 1;*/
4767    --
4768 /*   g_xml_element_table(l_xml_element_count).tagname  := 'EC_O62_ZONE3';
4769    g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_le_si_bal_rec.emp_contr_o62_ni_zone3),lg_format_mask);
4770    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
4771    l_xml_element_count := l_xml_element_count + 1;*/
4772    --
4773 /*   g_xml_element_table(l_xml_element_count).tagname  := 'EC_O62_ZONE4';
4774    g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_le_si_bal_rec.emp_contr_o62_ni_zone4),lg_format_mask);
4775    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
4776    l_xml_element_count := l_xml_element_count + 1;*/
4777    --
4778 /*   g_xml_element_table(l_xml_element_count).tagname  := 'EC_O62_ZONE5';
4779    g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_le_si_bal_rec.emp_contr_o62_ni_zone5),lg_format_mask);
4780    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
4781    l_xml_element_count := l_xml_element_count + 1;*/
4782    --
4783 /*   g_xml_element_table(l_xml_element_count).tagname  := 'EC_O62_TOTAL';
4784    g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_le_si_bal_rec.emp_contr_o62_ni_total),lg_format_mask);
4785    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
4786    l_xml_element_count := l_xml_element_count + 1;*/
4787    --
4788    -- Total witholding Tax
4789    --
4790    g_xml_element_table(l_xml_element_count).tagname  := 'A_TAX';
4791    g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_le_si_bal_rec.tax),lg_format_mask);
4792    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
4793    l_xml_element_count := l_xml_element_count + 1;
4794 
4795 /*--Bug 14671801
4796    --
4797    -- ORID 22225 - Gross Base for Employees from USA/Canada
4798    --
4799    g_xml_element_table(l_xml_element_count).tagname  := 'FE_PCT_BASE';
4800    g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_le_si_bal_rec.emp_contr_spcl_pct_base),lg_format_mask);
4801    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
4802    l_xml_element_count := l_xml_element_count + 1;
4803 */
4804     --
4805 /*   g_xml_element_table(l_xml_element_count).tagname  := 'FE_PCT';
4806    g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_le_si_bal_rec.foreign_special_percentage),lg_format_mask);
4807    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
4808    l_xml_element_count := l_xml_element_count + 1;*/
4809    --
4810 /*   g_xml_element_table(l_xml_element_count).tagname  := 'FE_PCT_AMOUNT';
4811    g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_le_si_bal_rec.emp_contr_spcl_pct),lg_format_mask);
4812    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
4813    l_xml_element_count := l_xml_element_count + 1;*/
4814 
4815 /* --Bug 14671801
4816    -- ORID 25415 Total number of months Foreign Employees on Monthly Rate
4817    g_xml_element_table(l_xml_element_count).tagname  := 'FE_MONTHS';
4818    g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_bal_rec.emp_contr_spcl / l_le_si_bal_rec.foreign_special_amount;
4819    l_xml_element_count := l_xml_element_count + 1;
4820 */
4821    --
4822 /*   g_xml_element_table(l_xml_element_count).tagname  := 'FE_MONTHS_RATE';
4823    g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_le_si_bal_rec.foreign_special_amount,lg_format_mask);
4824    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
4825    l_xml_element_count := l_xml_element_count + 1;*/
4826    --
4827 /*   g_xml_element_table(l_xml_element_count).tagname  := 'FE_MONTHS_AMOUNT';
4828    g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_le_si_bal_rec.emp_contr_spcl,lg_format_mask);
4829    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
4830    l_xml_element_count := l_xml_element_count + 1;*/
4831    --
4832 /* --Bug 14671801
4833    --Reimbursement Base Employees From USA/Canada ORID-27612 - 2007/2008 Changes
4834    --
4835    g_xml_element_table(l_xml_element_count).tagname  := 'FE_REIMBURSEMENT_BASE';
4836    g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_le_si_bal_rec.emp_contr_reimb_spcl_base),lg_format_mask);
4837    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
4838    l_xml_element_count := l_xml_element_count + 1;
4839    -- Net Base for Employees from USA/Canada - 2007/2008 Changes
4840    l_spcl_net_base := nvl(l_le_si_bal_rec.emp_contr_spcl_pct_base,0) - nvl(l_le_si_bal_rec.emp_contr_reimb_spcl_base,0);
4841    g_xml_element_table(l_xml_element_count).tagname  := 'FE_NET_BASE';
4842    g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_spcl_net_base,lg_format_mask);
4843    l_xml_element_count := l_xml_element_count + 1;
4844    --ORID 28103 Total EC Base - 2007/2008 Changes
4845    g_xml_element_table(l_xml_element_count).tagname  := 'TOT_EC_BASE';
4846    g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_le_si_bal_rec.emp_contr_ni_total),lg_format_mask);
4847    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
4848    l_xml_element_count := l_xml_element_count + 1;
4849    -- ORID 28104 Total Pension Base
4850    g_xml_element_table(l_xml_element_count).tagname  := 'TOT_PEN_BASE';
4851    g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_le_si_bal_rec.tot_pension_bse),lg_format_mask);
4852    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
4853    l_xml_element_count := l_xml_element_count + 1;
4854 */
4855       --
4856    --Gross Employer Contribution Base - 2007/2008 Changes
4857    --
4858    l_gross_emp_contr_bse := nvl(l_le_si_bal_rec.emp_contr_ni_total,0) + nvl(l_le_si_bal_rec.tot_pension_bse,0);
4859    g_xml_element_table(l_xml_element_count).tagname  := 'GROSS_EMP_BASE';
4860    g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_gross_emp_contr_bse,lg_format_mask);
4861    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
4862    l_xml_element_count := l_xml_element_count + 1;
4863    --
4864    --
4865    -- Total Reimbursement base ORID 28105 -  2007/2008 Changes
4866    --
4867    g_xml_element_table(l_xml_element_count).tagname  := 'TOT_REIMB_BASE';
4868    g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_le_si_bal_rec.tot_reimb_bse,lg_format_mask);
4869    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
4870    l_xml_element_count := l_xml_element_count + 1;
4871    --
4872    -- Net Employer Contribution Base - 2007/2008 Changes
4873    --
4874    l_net_emp_contr_bse := l_gross_emp_contr_bse - nvl(l_le_si_bal_rec.tot_reimb_bse,0) ;
4875    --
4876    g_xml_element_table(l_xml_element_count).tagname  := 'TOT_NET_BASE';
4877    g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_net_emp_contr_bse,lg_format_mask);
4878    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
4879    l_xml_element_count := l_xml_element_count + 1;
4880    --
4881    -- Loop through the reporting code information.
4882    --
4883    OPEN csr_LE_SI_CODE_SUMMARY
4884          (l_payroll_action_id
4885          ,l_le_si_rec.legal_employer_id
4886          ,l_le_si_rec.si_status);
4887    FETCH csr_LE_SI_CODE_SUMMARY INTO l_le_si_code_rec;
4888    CLOSE csr_LE_SI_CODE_SUMMARY;
4889    --
4890    OPEN csr_LE_SI_CODE_TOTAL_SUMMARY
4891          (l_payroll_action_id
4892          ,l_le_si_rec.legal_employer_id
4893          ,l_le_si_rec.si_status);
4894    FETCH csr_LE_SI_CODE_TOTAL_SUMMARY INTO l_le_si_code_total_rec;
4895    CLOSE csr_LE_SI_CODE_TOTAL_SUMMARY;
4896    --
4897 /*   g_xml_element_table(l_xml_element_count).tagname  := 'A_ROW';
4898    g_xml_element_table(l_xml_element_count).tagvalue := 'A';
4899    l_xml_element_count := l_xml_element_count + 1;*/
4900    --
4901    -- Number of Certificates
4902    --
4903    g_xml_element_table(l_xml_element_count).tagname  := 'A_CERTIFICATES';
4904    g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_code_rec.certificates;
4905    l_xml_element_count := l_xml_element_count + 1;
4906    --
4907 /*   g_xml_element_table(l_xml_element_count).tagname  := 'A_EARNINGS';
4908    g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_le_si_code_total_rec.a_earnings,lg_format_mask);
4909    l_xml_element_count := l_xml_element_count + 1;*/
4910    --
4911 /*   g_xml_element_table(l_xml_element_count).tagname  := 'A_ZONE1';
4912    g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_le_si_code_rec.a_zone1,lg_format_mask);
4913    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
4914    l_xml_element_count := l_xml_element_count + 1;*/
4915    --
4916 /*   g_xml_element_table(l_xml_element_count).tagname  := 'A_ZONE2';
4917    g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_le_si_code_rec.a_zone2,lg_format_mask);
4918    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
4919    l_xml_element_count := l_xml_element_count + 1;*/
4920    --
4921 /*   g_xml_element_table(l_xml_element_count).tagname  := 'A_ZONE3';
4922    g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_le_si_code_rec.a_zone3,lg_format_mask);
4923    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
4924    l_xml_element_count := l_xml_element_count + 1;*/
4925    --
4926 /*   g_xml_element_table(l_xml_element_count).tagname  := 'A_ZONE4';
4927    g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_le_si_code_rec.a_zone4,lg_format_mask);
4928    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
4929    l_xml_element_count := l_xml_element_count + 1;*/
4930    --
4931 /*   g_xml_element_table(l_xml_element_count).tagname  := 'A_ZONE5';
4932    g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_le_si_code_rec.a_zone5,lg_format_mask);
4933    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
4934    l_xml_element_count := l_xml_element_count + 1;*/
4935    --
4936 /*   g_xml_element_table(l_xml_element_count).tagname  := 'B_ROW';
4937    g_xml_element_table(l_xml_element_count).tagvalue := 'B';
4938    l_xml_element_count := l_xml_element_count + 1;*/
4939 
4940    --
4941 /*   g_xml_element_table(l_xml_element_count).tagname  := 'BL_EARNINGS';
4942    g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_le_si_code_total_rec.bl_earnings,lg_format_mask);
4943    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
4944    l_xml_element_count := l_xml_element_count + 1;*/
4945    --
4946 /*   g_xml_element_table(l_xml_element_count).tagname  := 'BL_ZONE1';
4947    g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_le_si_code_rec.bl_zone1,lg_format_mask);
4948    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
4949    l_xml_element_count := l_xml_element_count + 1;*/
4950    --
4951 /*   g_xml_element_table(l_xml_element_count).tagname  := 'BL_ZONE2';
4952    g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_le_si_code_rec.bl_zone2,lg_format_mask);
4953    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
4954    l_xml_element_count := l_xml_element_count + 1;*/
4955    --
4956 /*   g_xml_element_table(l_xml_element_count).tagname  := 'BL_ZONE3';
4957    g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_le_si_code_rec.bl_zone3,lg_format_mask);
4958    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
4959    l_xml_element_count := l_xml_element_count + 1;*/
4960    --
4961 /*   g_xml_element_table(l_xml_element_count).tagname  := 'BL_ZONE4';
4962    g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_le_si_code_rec.bl_zone4,lg_format_mask);
4963    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
4964    l_xml_element_count := l_xml_element_count + 1;*/
4965    --
4966 /*   g_xml_element_table(l_xml_element_count).tagname  := 'BL_ZONE5';
4967    g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_le_si_code_rec.bl_zone5,lg_format_mask);
4968    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
4969    l_xml_element_count := l_xml_element_count + 1;*/
4970    --
4971    -- Total Earnings Below Reporting Limit 2007/2008 changes
4972    l_total_below_rep_limit := nvl(l_le_si_code_rec.bl_zone1,0)+ nvl(l_le_si_code_rec.bl_zone2,0)+ nvl(l_le_si_code_rec.bl_zone3,0)
4973 --                               + nvl(l_le_si_code_rec.bl_zone4,0)+ nvl(l_le_si_code_rec.bl_zone2,0);
4974                                + nvl(l_le_si_code_rec.bl_zone4,0)+ nvl(l_le_si_code_rec.bl_zone5,0);
4975    g_xml_element_table(l_xml_element_count).tagname  := 'TOT_EAR_BELOW_REP_LIMIT';
4976    g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_total_below_rep_limit,lg_format_mask);
4977    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
4978    l_xml_element_count := l_xml_element_count + 1;
4979    --
4980    -- Total Reportable Earnings according to Certificates
4981    --
4982    g_xml_element_table(l_xml_element_count).tagname  := 'SUM_EARNINGS';
4983    g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_le_si_code_total_rec.sum_earnings,lg_format_mask);
4984    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
4985    l_xml_element_count := l_xml_element_count + 1;
4986    --
4987 /*   g_xml_element_table(l_xml_element_count).tagname  := 'SUM_ZONE1';
4988    g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_le_si_code_rec.sum_zone1,lg_format_mask);
4989    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
4990    l_xml_element_count := l_xml_element_count + 1;*/
4991    --
4992 /*   g_xml_element_table(l_xml_element_count).tagname  := 'SUM_ZONE2';
4993    g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_le_si_code_rec.sum_zone2,lg_format_mask);
4994    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
4995    l_xml_element_count := l_xml_element_count + 1;*/
4996    --
4997 /*   g_xml_element_table(l_xml_element_count).tagname  := 'SUM_ZONE3';
4998    g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_le_si_code_rec.sum_zone3,lg_format_mask);
4999    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
5000    l_xml_element_count := l_xml_element_count + 1;*/
5001    --
5002 /*   g_xml_element_table(l_xml_element_count).tagname  := 'SUM_ZONE4';
5003    g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_le_si_code_rec.sum_zone4,lg_format_mask);
5004    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
5005    l_xml_element_count := l_xml_element_count + 1;*/
5006    --
5007 /*   g_xml_element_table(l_xml_element_count).tagname  := 'SUM_ZONE5';
5008    g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_le_si_code_rec.sum_zone5,lg_format_mask);
5009    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
5010    l_xml_element_count := l_xml_element_count + 1;*/
5011    --
5012 /*   g_xml_element_table(l_xml_element_count).tagname  := 'SUM_TOTALS';
5013    g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_le_si_code_rec.sum_totals,lg_format_mask);
5014    g_xml_element_table(l_xml_element_count).tagtype  := 'A';
5015    l_xml_element_count := l_xml_element_count + 1;*/
5016    --
5017 /*   g_fixed_code(1).fixed_code := '111-A';
5018    g_fixed_code(1).status     := 0;
5019    g_fixed_code(2).fixed_code := '112-A';
5020    g_fixed_code(2).status     := 0;
5021    g_fixed_code(3).fixed_code := '116-A';
5022    g_fixed_code(3).status     := 0;
5023    g_fixed_code(4).fixed_code := '211';
5024    g_fixed_code(4).status     := 0;
5025    g_fixed_code(5).fixed_code := '311';
5026    g_fixed_code(5).status     := 0;
5027    g_fixed_code(6).fixed_code := '312';
5028    g_fixed_code(6).status     := 0;
5029    g_fixed_code(7).fixed_code := '313';
5030    g_fixed_code(7).status     := 0;
5031    g_fixed_code(8).fixed_code := '314';
5032    g_fixed_code(8).status     := 0;
5033    g_fixed_code(9).fixed_code := '316';
5034    g_fixed_code(9).status     := 0;
5035    g_fixed_code(10).fixed_code := '401';
5036    g_fixed_code(10).status     := 0;
5037    g_fixed_code(11).fixed_code := '711';
5038    g_fixed_code(11).status     := 0;
5039    g_fixed_code(12).fixed_code := '950';
5040    g_fixed_code(12).status     := 0;
5041    g_fixed_code(13).fixed_code :='TOTAL_OTHER_CODES';
5042    g_fixed_code(13).status     := 0;
5043    --
5044    --
5045    -- Loop through all fixed codes.
5046    --
5047    l_total_codes := 0;
5048    OPEN csr_LE_SI_CODE_TOTALS
5049          (l_payroll_action_id
5050          ,l_le_si_rec.legal_employer_id
5051          ,l_le_si_rec.si_status);
5052    LOOP
5053     FETCH csr_LE_SI_CODE_TOTALS INTO l_le_si_total_rec;
5054     EXIT WHEN csr_LE_SI_CODE_TOTALS%NOTFOUND;
5055     --
5056     --
5057     -- XML TAG name is based on reporting code.
5058     --
5059     g_xml_element_table(l_xml_element_count).tagname  := '_' || REPLACE(l_le_si_total_rec.code,'-');
5060     g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_le_si_total_rec.amount,lg_format_mask);
5061     g_xml_element_table(l_xml_element_count).tagtype  := 'A';
5062     l_xml_element_count := l_xml_element_count + 1;
5063     --
5064     FOR rec_fixed_code in 1..13 LOOP
5065       --
5066       IF g_fixed_code(rec_fixed_code).fixed_code = l_le_si_total_rec.code THEN
5067         g_fixed_code(rec_fixed_code).status := 1;
5068         EXIT;
5069       END IF;
5070       --
5071     END LOOP;
5072     --
5073     l_total_codes := l_total_codes + nvl(l_le_si_total_rec.amount,0);
5074    END LOOP;
5075    CLOSE csr_LE_SI_CODE_TOTALS;
5076    --
5077    FOR rec_fixed_code in 1..13 LOOP
5078       --
5079       IF g_fixed_code(rec_fixed_code).status = 0 THEN
5080         --
5081         g_fixed_code(rec_fixed_code).status := 1;
5082         g_xml_element_table(l_xml_element_count).tagname  := '_' || REPLACE(g_fixed_code(rec_fixed_code).fixed_code,'-');
5083         g_xml_element_table(l_xml_element_count).tagvalue := to_char(0,lg_format_mask);
5084         g_xml_element_table(l_xml_element_count).tagtype  := 'A';
5085         l_xml_element_count := l_xml_element_count + 1;
5086       --
5087       END IF;
5088       --
5089    END LOOP;
5090    --
5091    g_xml_element_table(l_xml_element_count).tagname  := 'PROMPT_111A';
5092    g_xml_element_table(l_xml_element_count).tagvalue := '111A';
5093    l_xml_element_count := l_xml_element_count + 1;
5094    --
5095    g_xml_element_table(l_xml_element_count).tagname  := 'PROMPT_112A';
5096    g_xml_element_table(l_xml_element_count).tagvalue := '112A';
5097    l_xml_element_count := l_xml_element_count + 1;
5098    --
5099    g_xml_element_table(l_xml_element_count).tagname  := 'PROMPT_116A';
5100    g_xml_element_table(l_xml_element_count).tagvalue := '116A';
5101    l_xml_element_count := l_xml_element_count + 1;
5102    --
5103    g_xml_element_table(l_xml_element_count).tagname  := 'TOTAL_ALL_CODES';
5104    g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_total_codes,lg_format_mask);
5105    l_xml_element_count := l_xml_element_count + 1;*/
5106    --
5107 
5108 -- 8881234 - XML Tags for Second Page of Report
5109 
5110 --Bug 14671801
5111   l_specs_count  :=0;
5112   l_page_ended   := FALSE;
5113 
5114 
5115   FOR l_le_si_lu_tm_rec IN  csr_LE_SI_LU_TM_INFO
5116                                 (l_payroll_action_id
5117                                 ,l_le_si_rec.legal_employer_id)
5118   LOOP
5119   --
5120   IF l_page_ended THEN --Bug 14671801
5121   g_xml_element_table(l_xml_element_count).tagname  := 'PAGE';
5122   g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
5123   l_xml_element_count := l_xml_element_count + 1;
5124   l_page_ended :=FALSE;
5125   END IF;
5126 
5127   g_xml_element_table(l_xml_element_count).tagname  := 'SPECIFICATION';
5128   g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
5129   l_xml_element_count := l_xml_element_count + 1;
5130   --
5131   --Organization Number (Local Unit)
5132   --
5133   g_xml_element_table(l_xml_element_count).tagname  := 'ORGANIZATION_NUMBER';
5134 --  g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_lu_tm_rec.local_unit_id;     --Bug 14671801
5135   g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_lu_tm_rec.org_number;
5136   l_xml_element_count := l_xml_element_count + 1;
5137   --
5138   -- Local Unit Municipal Number
5139   --
5140   g_xml_element_table(l_xml_element_count).tagname  := 'MUNICIPAL_NUMBER';
5141   g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_lu_tm_rec.tax_municipality_id;
5142   l_xml_element_count := l_xml_element_count + 1;
5143   --
5144   -- Local Unit Municipal Name
5145   --
5146   g_xml_element_table(l_xml_element_count).tagname  := 'MUNICIPAL_NAME';
5147   g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_lu_tm_rec.tax_municipality;
5148   l_xml_element_count := l_xml_element_count + 1;
5149   --
5150   --  Employer Contribution Zone
5151   --
5152   g_xml_element_table(l_xml_element_count).tagname  := 'ZONE';
5153   g_xml_element_table(l_xml_element_count).tagvalue :=  l_le_si_lu_tm_rec.ni_zone_arc;
5154   l_xml_element_count := l_xml_element_count + 1;
5155   --
5156   -- Employer Contribution Base
5157   --
5158   g_xml_element_table(l_xml_element_count).tagname  := 'TOTAL_BASIS';
5159   g_xml_element_table(l_xml_element_count).tagvalue :=  to_char(l_le_si_lu_tm_rec.emp_contr_bse ,lg_format_mask);
5160   l_xml_element_count := l_xml_element_count + 1;
5161   --
5162   -- Pension Base
5163   --
5164   g_xml_element_table(l_xml_element_count).tagname  := 'PENSION_BASE';
5165   g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_le_si_lu_tm_rec.pension_bse,lg_format_mask);
5166   l_xml_element_count := l_xml_element_count + 1;
5167   --
5168   --Gross Employer Contribution Base
5169   --
5170   l_gross_emp_contr_bse := l_le_si_lu_tm_rec.emp_contr_bse + l_le_si_lu_tm_rec.pension_bse;
5171   --
5172   g_xml_element_table(l_xml_element_count).tagname  := 'GROSS_BASE';
5173   g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_gross_emp_contr_bse,lg_format_mask);
5174   l_xml_element_count := l_xml_element_count + 1;
5175   --
5176   -- Reimbursement Base
5177   --
5178   g_xml_element_table(l_xml_element_count).tagname  := 'REIMBURSED';
5179   g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_le_si_lu_tm_rec.reimb_bse,lg_format_mask);
5180   l_xml_element_count := l_xml_element_count + 1;
5181   --
5182   -- Net Employer Contribution Base
5183   l_net_emp_contr_bse := l_gross_emp_contr_bse - l_le_si_lu_tm_rec.reimb_bse ;
5184   --
5185   g_xml_element_table(l_xml_element_count).tagname  := 'NET_BASE';
5186   g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_net_emp_contr_bse,lg_format_mask);
5187   l_xml_element_count := l_xml_element_count + 1;
5188   --
5189   g_xml_element_table(l_xml_element_count).tagname  := 'SPECIFICATION';
5190   g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
5191   l_xml_element_count := l_xml_element_count + 1;
5192   --
5193   l_specs_count := l_specs_count+1;
5194 
5195   if MOD(l_specs_count,5)=0 THEN --Bug 14671801
5196     g_xml_element_table(l_xml_element_count).tagname  := 'PAGE';
5197     g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
5198     l_xml_element_count := l_xml_element_count + 1;
5199     l_page_ended := true;
5200   END IF;
5201 
5202   END LOOP;
5203 -- 8881234 - End of XML Tags for Second Page of Report
5204 --
5205 
5206   IF NOT l_page_ended THEN--Bug 14671801
5207     g_xml_element_table(l_xml_element_count).tagname  := 'PAGE';
5208     g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
5209     l_xml_element_count := l_xml_element_count + 1;
5210   END IF;
5211 
5212    g_xml_element_table(l_xml_element_count).tagname  := 'LEGAL_EMPLOYER';
5213    g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
5214    l_xml_element_count := l_xml_element_count + 1;
5215   END LOOP;
5216   CLOSE csr_LE_SI;
5217   --
5218   g_xml_element_table(l_xml_element_count).tagname  := 'EMPR_CONTR';
5219   g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
5220   l_xml_element_count := l_xml_element_count + 1;
5221   --
5222   write_to_clob(p_xml);
5223   --
5224   hr_utility.set_location('Leaving ' || l_proc_name, 1000);
5225  END get_employer_contribution_data;
5226  --
5227  --
5228  --
5229  -- -----------------------------------------------------------------------------
5230  -- Generates XML for the Norwegian End of Year Employer Contribution Summary
5231  -- report. Changes -2007/2008
5232  -- -----------------------------------------------------------------------------
5233  --
5234  PROCEDURE get_employer_contribution_xml
5235  (p_business_group_id IN NUMBER
5236  ,p_payroll_action_id IN VARCHAR2
5237  ,p_template_name     IN VARCHAR2
5238  ,p_xml               OUT NOCOPY CLOB) IS
5239   --
5240   l_proc_name CONSTANT VARCHAR2(61) := l_package_name || '.get_employer_contribution_xml';
5241   --
5242   -- Cursor to get the Values for the NI Zones and the Tax Municipal Details 2007/08 changes
5243   --
5244   CURSOR csr_LE_SI_LU_TM_INFO
5245           (l_payroll_action_id IN NUMBER) IS
5246    SELECT DISTINCT
5247    	  le_lu_tm.action_information3   si_status
5248          ,le_lu_tm.action_information4   local_unit_id
5249          ,le_lu_tm.action_information5   local_unit
5250          ,le_lu_tm.action_information6   tax_municipality_id
5251          ,le_lu_tm.action_information7   tax_municipality
5252          ,le_lu_tm.action_information8   ni_zone_arc
5253 	 ,fnd_number.canonical_to_number(le_lu_tm.action_information9)   emp_contr_bse
5254          ,fnd_number.canonical_to_number(le_lu_tm.action_information10)  reimb_bse
5255 	 ,fnd_number.canonical_to_number(le_lu_tm.action_information11)  pension_bse
5256    FROM   pay_action_information le_lu_tm
5257    WHERE  le_lu_tm.action_context_type           = 'PA'
5258      AND  le_lu_tm.action_context_id             = l_payroll_action_id
5259      AND  le_lu_tm.action_information_category   = 'EMEA REPORT INFORMATION'
5260      AND  le_lu_tm.action_information1           = 'LE_SI_LU_TM_INFO';
5261   --
5262   CURSOR csr_LE_SI
5263           (l_payroll_action_id IN NUMBER) IS
5264    SELECT DISTINCT
5265           le_lu.action_information2    legal_employer_id
5266          ,le_lu.action_information3    si_status
5267 	 ,le_lu.action_information5    nace_code             -- changes 2007/08
5268          ,leg_emp.action_information3  legal_employer_name
5269          ,leg_emp.action_information4  organization_number
5270          ,leg_emp.action_information5  le_addr1
5271          ,leg_emp.action_information6  le_addr2
5272          ,leg_emp.action_information7  le_addr3
5273          ,leg_emp.action_information8  le_postcode
5274          ,leg_emp.action_information9  le_postoffice
5275          ,leg_emp.action_information10 tax_office_name
5276          ,leg_emp.action_information11 to_addr1
5277          ,leg_emp.action_information12 to_addr2
5278          ,leg_emp.action_information13 to_addr3
5279          ,leg_emp.action_information14 to_postcode
5280          ,leg_emp.action_information15 to_postoffice
5281 	 ,leg_emp.action_information16 le_tax_muncipality    -- 2007/2008 Changes
5282 	 ,leg_emp.action_information17 le_economic_aid        -- 2007/2008 Changes
5283     	 ,leg_emp.effective_date       effective_date
5284      ,leg_emp.action_information18 le_pen_scheme -- Bug#9579261 fix
5285      ,leg_emp.action_information19 le_pp_name 	 -- Bug#9579261 fix
5286    FROM   pay_action_information le_lu
5287          ,pay_action_information leg_emp
5288    WHERE  le_lu.action_context_type           = 'PA'
5289      AND  le_lu.action_context_id             = l_payroll_action_id
5290      AND  le_lu.action_information_category   = 'EMEA REPORT INFORMATION'
5291      AND  le_lu.action_information1           = 'LE_SI_LU_INFO'
5292      AND  leg_emp.action_context_type         = 'PA'
5293      AND  leg_emp.action_context_id           = le_lu.action_context_id
5294      AND  leg_emp.action_information_category = 'EMEA REPORT INFORMATION'
5295      AND  leg_emp.action_information1         = 'LEG_EMP_INFO'
5296      AND  leg_emp.action_information2         = le_lu.action_information2;
5297   --
5298   CURSOR csr_LE_SI_BAL_SUMMARY
5299           (l_payroll_action_id IN NUMBER
5300           ,p_legal_employer_id IN VARCHAR2
5301           ,p_si_status         IN VARCHAR2) IS
5302    SELECT fnd_number.canonical_to_number(le_si_bals.action_information4)  emp_contr_ni_zone1
5303          ,fnd_number.canonical_to_number(le_si_bals.action_information5)  emp_contr_ni_zone2
5304          ,fnd_number.canonical_to_number(le_si_bals.action_information6)  emp_contr_ni_zone3
5305          ,fnd_number.canonical_to_number(le_si_bals.action_information7)  emp_contr_ni_zone4
5306          ,fnd_number.canonical_to_number(le_si_bals.action_information8)  emp_contr_ni_zone5
5307          ,fnd_number.canonical_to_number(le_si_bals.action_information9)  emp_contr_ni_total
5308          ,fnd_number.canonical_to_number(le_si_bals.action_information10) emp_contr_o62_ni_zone1
5309          ,fnd_number.canonical_to_number(le_si_bals.action_information11) emp_contr_o62_ni_zone2
5310          ,fnd_number.canonical_to_number(le_si_bals.action_information12) emp_contr_o62_ni_zone3
5311          ,fnd_number.canonical_to_number(le_si_bals.action_information13) emp_contr_o62_ni_zone4
5312          ,fnd_number.canonical_to_number(le_si_bals.action_information14) emp_contr_o62_ni_zone5
5313          ,fnd_number.canonical_to_number(le_si_bals.action_information15) emp_contr_o62_ni_total
5314          ,fnd_number.canonical_to_number(le_si_bals.action_information16) tax
5315          ,fnd_number.canonical_to_number(le_si_bals.action_information17) emp_contr_spcl_pct_base
5316          ,fnd_number.canonical_to_number(le_si_bals.action_information18) emp_contr_spcl_pct
5317          ,fnd_number.canonical_to_number(le_si_bals.action_information19) emp_contr_spcl
5318          ,fnd_number.canonical_to_number(le_si_bals.action_information20) foreign_special_percentage
5319          ,fnd_number.canonical_to_number(le_si_bals.action_information21) foreign_special_amount
5320 	 ,fnd_number.canonical_to_number(le_si_bals.action_information22) emp_contr_reimb_spcl_base  --2007/2008 changes
5321          ,fnd_number.canonical_to_number(le_si_bals.action_information23) tot_reimb_bse           --2007/2008 changes
5322 	 ,fnd_number.canonical_to_number(le_si_bals.action_information24) tot_pension_bse         -- 2007/2008 Changes
5323    FROM   pay_action_information le_si_bals
5324    WHERE  le_si_bals.action_context_type         = 'PA'
5325      AND  le_si_bals.action_context_id           = l_payroll_action_id
5326      AND  le_si_bals.action_information_category = 'EMEA REPORT INFORMATION'
5327      AND  le_si_bals.action_information1         = 'LE_SI_BALS'
5328      AND  le_si_bals.action_information2         = p_legal_employer_id
5329      AND  le_si_bals.action_information3         = p_si_status;
5330   --
5331   CURSOR csr_LE_SI_CODE_SUMMARY
5332           (l_payroll_action_id IN NUMBER
5333           ,p_legal_employer_id IN VARCHAR2
5334           ,p_si_status         IN VARCHAR2) IS
5335    SELECT COUNT (DISTINCT asg_act.action_information5) certificates
5336 	 ,SUM(DECODE(asg_act.action_information4 || asg_act.action_information7 || TO_CHAR(SIGN(INSTR(rep_cde.action_information2, 'A')))
5337                     ,'1N1', fnd_number.canonical_to_number(rep_cde.action_information3)
5338                     ,0)) a_zone1
5339 	 ,SUM(DECODE(asg_act.action_information4 || asg_act.action_information7 || TO_CHAR(SIGN(INSTR(rep_cde.action_information2, 'A')))
5340                     ,'2N1', fnd_number.canonical_to_number(rep_cde.action_information3)
5341                     ,0)) a_zone2
5342 	 ,SUM(DECODE(asg_act.action_information4 || asg_act.action_information7 || TO_CHAR(SIGN(INSTR(rep_cde.action_information2, 'A')))
5343                     ,'3N1', fnd_number.canonical_to_number(rep_cde.action_information3)
5344                     ,0)) a_zone3
5345 	 ,SUM(DECODE(asg_act.action_information4 || asg_act.action_information7 || TO_CHAR(SIGN(INSTR(rep_cde.action_information2, 'A')))
5346                     ,'4N1', fnd_number.canonical_to_number(rep_cde.action_information3)
5347                     ,0)) a_zone4
5348 	 ,SUM(DECODE(asg_act.action_information4 || asg_act.action_information7 || TO_CHAR(SIGN(INSTR(rep_cde.action_information2, 'A')))
5349                     ,'5N1', fnd_number.canonical_to_number(rep_cde.action_information3)
5350                     ,0)) a_zone5
5351 	 ,SUM(DECODE(asg_act.action_information4 || asg_act.action_information7 || TO_CHAR(SIGN(INSTR(rep_cde.action_information2, 'A')))
5352                     ,'1Y1', fnd_number.canonical_to_number(rep_cde.action_information3)
5353                     ,0)) bl_zone1
5354 	 ,SUM(DECODE(asg_act.action_information4 || asg_act.action_information7 || TO_CHAR(SIGN(INSTR(rep_cde.action_information2, 'A')))
5355                     ,'2Y1', fnd_number.canonical_to_number(rep_cde.action_information3)
5356                     ,0)) bl_zone2
5357 	 ,SUM(DECODE(asg_act.action_information4 || asg_act.action_information7 || TO_CHAR(SIGN(INSTR(rep_cde.action_information2, 'A')))
5358                     ,'3Y1', fnd_number.canonical_to_number(rep_cde.action_information3)
5359                     ,0)) bl_zone3
5360 	 ,SUM(DECODE(asg_act.action_information4 || asg_act.action_information7 || TO_CHAR(SIGN(INSTR(rep_cde.action_information2, 'A')))
5361                     ,'4Y1', fnd_number.canonical_to_number(rep_cde.action_information3)
5362                     ,0)) bl_zone4
5363 	 ,SUM(DECODE(asg_act.action_information4 || asg_act.action_information7 || TO_CHAR(SIGN(INSTR(rep_cde.action_information2, 'A')))
5364                     ,'5Y1', fnd_number.canonical_to_number(rep_cde.action_information3)
5365                     ,0)) bl_zone5
5366 	 ,SUM(DECODE(asg_act.action_information4 || TO_CHAR(SIGN(INSTR(rep_cde.action_information2, 'A')))
5367                     ,'11', fnd_number.canonical_to_number(rep_cde.action_information3)
5368                     ,0)) sum_zone1
5369 	 ,SUM(DECODE(asg_act.action_information4 || TO_CHAR(SIGN(INSTR(rep_cde.action_information2, 'A')))
5370                     ,'21', fnd_number.canonical_to_number(rep_cde.action_information3)
5371                     ,0)) sum_zone2
5372 	 ,SUM(DECODE(asg_act.action_information4 || TO_CHAR(SIGN(INSTR(rep_cde.action_information2, 'A')))
5373                     ,'31', fnd_number.canonical_to_number(rep_cde.action_information3)
5374                     ,0)) sum_zone3
5375 	 ,SUM(DECODE(asg_act.action_information4 || TO_CHAR(SIGN(INSTR(rep_cde.action_information2, 'A')))
5376                     ,'41', fnd_number.canonical_to_number(rep_cde.action_information3)
5377                     ,0)) sum_zone4
5378 	 ,SUM(DECODE(asg_act.action_information4 || TO_CHAR(SIGN(INSTR(rep_cde.action_information2, 'A')))
5379                     ,'51', fnd_number.canonical_to_number(rep_cde.action_information3)
5380                     ,0)) sum_zone5
5381 	 ,SUM(DECODE(TO_CHAR(SIGN(INSTR(rep_cde.action_information2, 'A')))
5382                     ,'1', fnd_number.canonical_to_number(rep_cde.action_information3)
5383                     ,0)) sum_totals
5384    FROM   pay_assignment_actions paa
5385          ,pay_action_information le_lu
5386          ,pay_action_information asg_act
5387          ,pay_action_information rep_cde
5388          ,pay_action_information cde_dtl
5389    WHERE  paa.payroll_action_id               = le_lu.action_context_id
5390      AND  asg_act.action_context_type         = 'AAP'
5391      AND  asg_act.action_context_id           = paa.assignment_action_id
5392      AND  asg_act.action_information_category = 'EMEA REPORT INFORMATION'
5393      AND  asg_act.action_information1         = 'ASG_ACT_INFO'
5394      AND  asg_act.action_information2         = le_lu.action_information2
5395      AND  asg_act.action_information3         = le_lu.action_information4
5396      AND  le_lu.action_context_type           = 'PA'
5397      AND  le_lu.action_context_id             = l_payroll_action_id
5398      AND  le_lu.action_information_category   = 'EMEA REPORT INFORMATION'
5399      AND  le_lu.action_information1           = 'LE_SI_LU_INFO'
5400      AND  le_lu.action_information2           = p_legal_employer_id
5401      AND  le_lu.action_information3           = p_si_status
5402      AND  cde_dtl.action_context_type         = 'PA'
5403      AND  cde_dtl.action_context_id           = le_lu.action_context_id
5404      AND  cde_dtl.action_information_category = 'EMEA REPORT INFORMATION'
5405      AND  cde_dtl.action_information1         = 'REP_CODE_DTLS'
5406      AND  cde_dtl.action_information2         = le_lu.action_information2
5407      AND  cde_dtl.action_information3         = rep_cde.action_information2
5408      AND  cde_dtl.action_information6         = 'Y'
5409      AND  rep_cde.action_context_type         = 'AAP'
5410      AND  rep_cde.action_context_id           = asg_act.action_context_id
5411      AND  rep_cde.action_information_category = 'EMEA REPORT INFORMATION'
5412      AND  rep_cde.action_information1         = 'ASG_REP_CODE_INFO'
5413    GROUP BY asg_act.action_information2
5414            ,le_lu.action_information3;
5415   --
5416   CURSOR csr_LE_SI_CODE_TOTAL_SUMMARY
5417           (l_payroll_action_id IN NUMBER
5418           ,p_legal_employer_id IN VARCHAR2
5419           ,p_si_status         IN VARCHAR2) IS
5420    SELECT SUM(DECODE(asg_act.action_information7
5421                     ,'N', fnd_number.canonical_to_number(rep_cde.action_information3)
5422                     , 0)) a_earnings
5423     	 ,SUM(DECODE(asg_act.action_information7
5424                      ,'Y', fnd_number.canonical_to_number(rep_cde.action_information3)
5425                     , 0)) bl_earnings
5426 	     ,SUM(fnd_number.canonical_to_number(rep_cde.action_information3)) sum_earnings
5427    FROM   pay_assignment_actions paa
5428          ,pay_action_information le_lu
5429          ,pay_action_information asg_act
5430          ,pay_action_information rep_cde
5431          ,pay_action_information cde_dtl
5432    WHERE  paa.payroll_action_id               = le_lu.action_context_id
5433      AND  asg_act.action_context_type         = 'AAP'
5434      AND  asg_act.action_context_id           = paa.assignment_action_id
5435      AND  asg_act.action_information_category = 'EMEA REPORT INFORMATION'
5436      AND  asg_act.action_information1         = 'ASG_ACT_INFO'
5437      AND  asg_act.action_information2         = le_lu.action_information2
5438      AND  asg_act.action_information3         = le_lu.action_information4
5439      AND  le_lu.action_context_type           = 'PA'
5440      AND  le_lu.action_context_id             = l_payroll_action_id
5441      AND  le_lu.action_information_category   = 'EMEA REPORT INFORMATION'
5442      AND  le_lu.action_information1           = 'LE_SI_LU_INFO'
5443      AND  le_lu.action_information2           = p_legal_employer_id
5444      AND  le_lu.action_information3           = p_si_status
5445      AND  cde_dtl.action_context_type         = 'PA'
5446      AND  cde_dtl.action_context_id           = le_lu.action_context_id
5447      AND  cde_dtl.action_information_category = 'EMEA REPORT INFORMATION'
5448      AND  cde_dtl.action_information1         = 'REP_CODE_DTLS'
5449      AND  cde_dtl.action_information2         = le_lu.action_information2
5450      AND  cde_dtl.action_information3         = rep_cde.action_information2
5451      AND  cde_dtl.action_information6         = 'Y'
5452      AND  rep_cde.action_context_type         = 'AAP'
5453      AND  rep_cde.action_context_id           = asg_act.action_context_id
5454      AND  rep_cde.action_information_category = 'EMEA REPORT INFORMATION'
5455      AND  rep_cde.action_information1         = 'ASG_REP_CODE_INFO'
5456      AND  rep_cde.action_information2         NOT IN ('000','250','311','316','950')
5457    GROUP BY asg_act.action_information2
5458            ,le_lu.action_information3;
5459   --
5460   CURSOR csr_LE_SI_CODE_TOTALS
5461           (l_payroll_action_id IN NUMBER
5462           ,p_legal_employer_id IN VARCHAR2
5463           ,p_si_status         IN VARCHAR2) IS
5464    SELECT asg_act.action_information2 legal_employer_id
5465          ,le_lu.action_information3 si_status
5466          ,DECODE(cde_dtl.action_information4, 'Y', rep_cde.action_information2, 'TOTAL_OTHER_CODES') code
5467          ,SUM(fnd_number.canonical_to_number(rep_cde.action_information3)) amount
5468    FROM   pay_assignment_actions paa
5469          ,pay_action_information le_lu
5470          ,pay_action_information asg_act
5471          ,pay_action_information rep_cde
5472          ,pay_action_information cde_dtl
5473    WHERE  paa.payroll_action_id               = le_lu.action_context_id
5474      AND  asg_act.action_context_type         = 'AAP'
5475      AND  asg_act.action_context_id           = paa.assignment_action_id
5476      AND  asg_act.action_information_category = 'EMEA REPORT INFORMATION'
5477      AND  asg_act.action_information1         = 'ASG_ACT_INFO'
5478      AND  asg_act.action_information2         = le_lu.action_information2
5479      AND  asg_act.action_information3         = le_lu.action_information4
5480      AND  le_lu.action_context_type           = 'PA'
5481      AND  le_lu.action_context_id             = l_payroll_action_id
5482      AND  le_lu.action_information_category   = 'EMEA REPORT INFORMATION'
5483      AND  le_lu.action_information1           = 'LE_SI_LU_INFO'
5484      AND  le_lu.action_information2           = p_legal_employer_id
5485      AND  le_lu.action_information3           = p_si_status
5486      AND  cde_dtl.action_context_type         = 'PA'
5487      AND  cde_dtl.action_context_id           = le_lu.action_context_id
5488      AND  cde_dtl.action_information_category = 'EMEA REPORT INFORMATION'
5489      AND  cde_dtl.action_information1         = 'REP_CODE_DTLS'
5490      AND  cde_dtl.action_information2         = le_lu.action_information2
5491      AND  cde_dtl.action_information3         = rep_cde.action_information2
5492      AND  rep_cde.action_context_type         = 'AAP'
5493      AND  rep_cde.action_context_id           = asg_act.action_context_id
5494      AND  rep_cde.action_information_category = 'EMEA REPORT INFORMATION'
5495      AND  rep_cde.action_information1         = 'ASG_REP_CODE_INFO'
5496    GROUP BY asg_act.action_information2
5497            ,le_lu.action_information3
5498            ,DECODE(cde_dtl.action_information4, 'Y',rep_cde.action_information2, 'TOTAL_OTHER_CODES');
5499   --
5500   CURSOR csr_SI_STATUS IS
5501    SELECT lu.lookup_code si_status
5502    FROM   hr_lookups lu
5503    WHERE  lu.lookup_type = 'NO_LEGAL_EMP_SI_STATUS';
5504   --
5505   l_total_below_rep_limit   NUMBER;
5506   l_xml_element_count       NUMBER := 1;
5507   l_total_codes             NUMBER;
5508   l_bg_id                   NUMBER;
5509   lg_format_mask            VARCHAR2(40);
5510   l_payroll_action_id       NUMBER;
5511   l_si_sts_rec              csr_SI_STATUS%ROWTYPE;
5512   l_le_si_rec               csr_LE_SI%ROWTYPE;
5513   l_le_si_code_rec          csr_LE_SI_CODE_SUMMARY%ROWTYPE;
5514   l_le_si_code_total_rec    csr_LE_SI_CODE_TOTAL_SUMMARY%ROWTYPE;
5515   l_le_si_bal_rec           csr_LE_SI_BAL_SUMMARY%ROWTYPE;
5516   l_le_si_total_rec         csr_LE_SI_CODE_TOTALS%ROWTYPE;
5517   l_net_emp_contr_bse       NUMBER := 0;
5518   l_gross_emp_contr_bse     NUMBER := 0;
5519   --
5520  BEGIN
5521   hr_utility.set_location('Entering ' || l_proc_name, 10);
5522   g_xml_element_table.DELETE;
5523   --
5524   /*
5525   IF p_payroll_action_id is null then
5526     BEGIN
5527     SELECT payroll_action_id
5528       into l_payroll_action_id
5529       from pay_payroll_actions ppa,
5530 	   fnd_conc_req_summary_v fcrs,
5531 	   fnd_conc_req_summary_v fcrs1
5532      WHERE fcrs.request_id = fnd_global.conc_request_id
5533        and fcrs.priority_request_id = fcrs1.priority_request_id
5534        and ppa.request_id between fcrs1.request_id and fcrs.request_id
5535        and ppa.request_id = fcrs1.request_id;
5536      EXCEPTION
5537      WHEN others then
5538        null;
5539      END;
5540   ELSE
5541     l_payroll_action_id := p_payroll_action_id;
5542   END IF;
5543   --
5544   -- get the currecnt BG's currency and mask to format the amount fields
5545   --
5546   fnd_profile.get('PER_BUSINESS_GROUP_ID', l_bg_id);
5547   set_currency_mask(l_bg_id, lg_format_mask);
5548   --
5549   -- Loop for each unique legal employer / SI status combination.
5550   --
5551   ---------------------------------------------------------------------------------------------------------
5552   -- Code for XML generation for Employee Summary w.r.t 2007-2008
5553   -----------------------------------------------------------------------------------------------------------
5554   --
5555   g_xml_element_table(l_xml_element_count).tagname  := 'Skjema';
5556   g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
5557   g_xml_element_table(l_xml_element_count).tagattrb := 'tittel= "Lnns- og trekkoppgave" gruppeid="93" spesifikasjonsnummer="10696" skjemanummer="210" etatid="974761076" blankettnummer="RF-1015"';
5558   l_xml_element_count := l_xml_element_count + 1;
5559   --
5560   OPEN csr_LE_SI
5561         (l_payroll_action_id);
5562   LOOP
5563    FETCH csr_LE_SI INTO l_le_si_rec;
5564    EXIT WHEN csr_LE_SI%NOTFOUND;
5565   --
5566   --
5567   --
5568   g_xml_element_table(l_xml_element_count).tagname  := 'Innledning-grp-5749';
5569   g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
5570   g_xml_element_table(l_xml_element_count).tagattrb := 'gruppeid="5749"';
5571   l_xml_element_count := l_xml_element_count + 1;
5572   --
5573   --
5574   --
5575 --  g_xml_element_table(l_xml_element_count).tagname  := 'TypeOppgave-grp-5747';
5576 --  g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
5577 --  g_xml_element_table(l_xml_element_count).tagattrb := 'gruppeid="5747"';
5578 --  l_xml_element_count := l_xml_element_count + 1;
5579   --
5580 --  g_xml_element_table(l_xml_element_count).tagname  := 'OppgaveEndringsoppgave-datadef-21819';
5581 --  g_xml_element_table(l_xml_element_count).tagvalue := ' ';
5582 --  g_xml_element_table(l_xml_element_count).tagattrb := 'orid="21819"';
5583 --  l_xml_element_count := l_xml_element_count + 1;
5584   --
5585 --  g_xml_element_table(l_xml_element_count).tagname  := 'TypeOppgave-grp-5747';
5586 --  g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
5587 --  l_xml_element_count := l_xml_element_count + 1;
5588   --
5589   --
5590   --
5591   g_xml_element_table(l_xml_element_count).tagname  := 'Skatteoppkrever-grp-5748';
5592   g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
5593   g_xml_element_table(l_xml_element_count).tagattrb := 'gruppeid="5748"';
5594   l_xml_element_count := l_xml_element_count + 1;
5595   --
5596   g_xml_element_table(l_xml_element_count).tagname  := 'SkatteoppkreverKommuneNummer-datadef-16513';
5597   g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_rec.le_tax_muncipality;
5598   g_xml_element_table(l_xml_element_count).tagattrb := 'orid="16513"';
5599   l_xml_element_count := l_xml_element_count + 1;
5600   --
5601   g_xml_element_table(l_xml_element_count).tagname  := 'Skatteoppkrever-grp-5748';
5602   g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
5603   l_xml_element_count := l_xml_element_count + 1;
5604   --
5605   --
5606   --Legal Employer Details
5607   --
5608   g_xml_element_table(l_xml_element_count).tagname  := 'Arbeidsgiver-grp-5750';
5609   g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
5610   g_xml_element_table(l_xml_element_count).tagattrb := 'gruppeid="5750"';
5611   l_xml_element_count := l_xml_element_count + 1;
5612   --
5613   -- Organization Number
5614   --
5615   g_xml_element_table(l_xml_element_count).tagname  := 'RapporteringsenhetOrganisasjonsnummer-datadef-21772';
5616   g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_rec.organization_number;
5617   g_xml_element_table(l_xml_element_count).tagattrb := 'orid="21772"';
5618   l_xml_element_count := l_xml_element_count + 1;
5619   --
5620 -- g_xml_element_table(l_xml_element_count).tagname  := 'OppgavegiverFodselsnummer-datadef-26';
5621 --  g_xml_element_table(l_xml_element_count).tagvalue := ' ';
5622 --  g_xml_element_table(l_xml_element_count).tagattrb := 'orid="26"';
5623 --  l_xml_element_count := l_xml_element_count + 1;
5624   --
5625   -- Legal Employer Name
5626   --
5627   g_xml_element_table(l_xml_element_count).tagname  := 'OppgavegiverNavnPreutfylt-datadef-25795';
5628   g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_rec.legal_employer_name;
5629   g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25795"';
5630   l_xml_element_count := l_xml_element_count + 1;
5631   --
5632   -- Address
5633   --
5634 
5635 IF l_le_si_rec.le_addr1 IS NOT NULL OR l_le_si_rec.le_addr2 IS NOT NULL OR l_le_si_rec.le_addr3 IS NOT NULL then
5636   g_xml_element_table(l_xml_element_count).tagname  := 'OppgavegiverAdressePreutfylt-datadef-25796';
5637   g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_rec.le_addr1||' '||l_le_si_rec.le_addr2||' '||l_le_si_rec.le_addr3;
5638   g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25796"';
5639   l_xml_element_count := l_xml_element_count + 1;
5640 
5641 END IF;
5642   --
5643   -- Post Code
5644   --
5645 IF  l_le_si_rec.le_postcode IS NOT NULL THEN
5646   g_xml_element_table(l_xml_element_count).tagname  := 'OppgavegiverPostnummerPreutfylt-datadef-25797';
5647   g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_rec.le_postcode;
5648   g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25797"';
5649   l_xml_element_count := l_xml_element_count + 1;
5650   --
5651 END IF;
5652   -- Post Office
5653   --
5654 IF l_le_si_rec.le_postoffice IS NOT NULL THEN
5655   g_xml_element_table(l_xml_element_count).tagname  := 'OppgavegiverPoststedPreutfylt-datadef-25798';
5656   g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_rec.le_postoffice;
5657   g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25798"';
5658   l_xml_element_count := l_xml_element_count + 1;
5659   --
5660 END IF;
5661   -- Industry Code
5662   --
5663 IF l_le_si_rec.nace_code IS NOT NULL THEN
5664   g_xml_element_table(l_xml_element_count).tagname  := 'OppgavegiverNACEKode-datadef-27602';
5665   g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_rec.nace_code;
5666   g_xml_element_table(l_xml_element_count).tagattrb := 'orid="27602"';
5667   l_xml_element_count := l_xml_element_count + 1;
5668 END IF;
5669   --
5670 --  g_xml_element_table(l_xml_element_count).tagname  := 'OppgavegiverMobiltelefonnummer-datadef-28654';
5671 --  g_xml_element_table(l_xml_element_count).tagvalue := ' ';
5672 --  g_xml_element_table(l_xml_element_count).tagattrb := 'orid="28654"';
5673 --  l_xml_element_count := l_xml_element_count + 1;
5674   --
5675   g_xml_element_table(l_xml_element_count).tagname  := 'Arbeidsgiver-grp-5750';
5676   g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
5677   l_xml_element_count := l_xml_element_count + 1;
5678   --
5679   --
5680   --
5681   g_xml_element_table(l_xml_element_count).tagname  := 'Innledning-grp-5749';
5682   g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
5683   l_xml_element_count := l_xml_element_count + 1;
5684   --
5685   --
5686   --
5687   -- Fetch all balances for the legal employer / SI status combination.
5688   --
5689   OPEN csr_LE_SI_BAL_SUMMARY
5690          (l_payroll_action_id
5691          ,l_le_si_rec.legal_employer_id
5692          ,l_le_si_rec.si_status);
5693   FETCH csr_LE_SI_BAL_SUMMARY INTO l_le_si_bal_rec;
5694   CLOSE csr_LE_SI_BAL_SUMMARY;
5695   --
5696   --
5697   -- Loop through the reporting code information.
5698   --
5699   OPEN csr_LE_SI_CODE_SUMMARY
5700          (l_payroll_action_id
5701          ,l_le_si_rec.legal_employer_id
5702          ,l_le_si_rec.si_status);
5703    FETCH csr_LE_SI_CODE_SUMMARY INTO l_le_si_code_rec;
5704    CLOSE csr_LE_SI_CODE_SUMMARY;
5705    --
5706    --
5707    OPEN csr_LE_SI_CODE_TOTAL_SUMMARY
5708          (l_payroll_action_id
5709          ,l_le_si_rec.legal_employer_id
5710          ,l_le_si_rec.si_status);
5711    FETCH csr_LE_SI_CODE_TOTAL_SUMMARY INTO l_le_si_code_total_rec;
5712    CLOSE csr_LE_SI_CODE_TOTAL_SUMMARY;
5713   g_xml_element_table(l_xml_element_count).tagname  := 'AndreOpplysninger-grp-5751';
5714   g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
5715   g_xml_element_table(l_xml_element_count).tagattrb := 'gruppeid="5751"';
5716   l_xml_element_count := l_xml_element_count + 1;
5717   --
5718   --
5719   --
5720   g_xml_element_table(l_xml_element_count).tagname  := 'Beregningsmate-grp-6844';
5721   g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
5722   g_xml_element_table(l_xml_element_count).tagattrb := 'gruppeid="6844"';
5723   l_xml_element_count := l_xml_element_count + 1;
5724   --
5725   --Calculation Method for Employer's Contribution (AA, BB etc) from Legal Employer/Local Unit
5726   --
5727   g_xml_element_table(l_xml_element_count).tagname  := 'TerminoppgaveBeregningsmate-datadef-27603';
5728   g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_rec.si_status;
5729   g_xml_element_table(l_xml_element_count).tagattrb := 'orid="27603"';
5730   l_xml_element_count := l_xml_element_count + 1;
5731   --
5732   g_xml_element_table(l_xml_element_count).tagname  := 'Beregningsmate-grp-6844';
5733   g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
5734   l_xml_element_count := l_xml_element_count + 1;
5735   --
5736   --
5737   --
5738   g_xml_element_table(l_xml_element_count).tagname  := 'Annet-grp-6845';
5739   g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
5740   g_xml_element_table(l_xml_element_count).tagattrb := 'gruppeid="6845"';
5741   l_xml_element_count := l_xml_element_count + 1;
5742   --
5743   -- Other subsidis received (to reduce excemption limit),
5744   -- same as in bi-monthly recording sheet, but total for the year
5745   --
5746 
5747 if l_le_si_rec.le_economic_aid is not null then
5748   g_xml_element_table(l_xml_element_count).tagname  := 'TilskuddAndreTerminoppgave-datadef-27604';
5749  g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_le_si_rec.le_economic_aid));
5750   g_xml_element_table(l_xml_element_count).tagattrb := 'orid="27604"';
5751   l_xml_element_count := l_xml_element_count + 1;
5752   --
5753 end if;
5754   --
5755   -- Total Earnings Below Reporting Limit
5756   l_total_below_rep_limit := nvl(l_le_si_code_rec.bl_zone1,0)+ nvl(l_le_si_code_rec.bl_zone2,0)+ nvl(l_le_si_code_rec.bl_zone3,0)
5757 --                               + nvl(l_le_si_code_rec.bl_zone4,0)+ nvl(l_le_si_code_rec.bl_zone2,0);
5758                                + nvl(l_le_si_code_rec.bl_zone4,0)+ nvl(l_le_si_code_rec.bl_zone5,0);
5759   --
5760   g_xml_element_table(l_xml_element_count).tagname  := 'TilskuddAndreIkkeOppgavepliktige-datadef-28102';
5761   g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_total_below_rep_limit );
5762   g_xml_element_table(l_xml_element_count).tagattrb := 'orid="28102"';
5763   l_xml_element_count := l_xml_element_count + 1;
5764   --
5765   g_xml_element_table(l_xml_element_count).tagname  := 'Annet-grp-6845';
5766   g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
5767   l_xml_element_count := l_xml_element_count + 1;
5768   --
5769   --
5770   --
5771   g_xml_element_table(l_xml_element_count).tagname  := 'AndreOpplysninger-grp-5751';
5772   g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
5773   l_xml_element_count := l_xml_element_count + 1;
5774   --
5775   --
5776   --
5777   g_xml_element_table(l_xml_element_count).tagname  := 'SpesielleGrupper-grp-5755';
5778   g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
5779   g_xml_element_table(l_xml_element_count).tagattrb := 'gruppeid="5755"';
5780   l_xml_element_count := l_xml_element_count + 1;
5781   --
5782   --
5783   --
5784   g_xml_element_table(l_xml_element_count).tagname  := 'SpesielleGrupper-grp-6846';
5785   g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
5786   g_xml_element_table(l_xml_element_count).tagattrb := 'gruppeid="6846"';
5787   l_xml_element_count := l_xml_element_count + 1;
5788   --
5789   -- Special Employers Contribution Basis for employees from USA/Canada
5790   --
5791   g_xml_element_table(l_xml_element_count).tagname  := 'ArbeidsgiveravgiftUtenlandskArbeidstakerUSACanadaGrunnlag-datadef-22225';
5792   g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_le_si_bal_rec.emp_contr_spcl_pct_base);
5793   g_xml_element_table(l_xml_element_count).tagattrb := 'orid="22225"';
5794   l_xml_element_count := l_xml_element_count + 1;
5795   --
5796   -- Reimbursable basis for Employees from US/Canada
5797   --
5798   g_xml_element_table(l_xml_element_count).tagname  := 'ArbeidsgiveravgiftUtenlandskRefusjonsgrunnlagSpesifisert-datadef-27612';
5799   g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_le_si_bal_rec.emp_contr_reimb_spcl_base);
5800   g_xml_element_table(l_xml_element_count).tagattrb := 'orid="27612"';
5801   l_xml_element_count := l_xml_element_count + 1;
5802   --
5803   g_xml_element_table(l_xml_element_count).tagname  := 'SpesielleGrupper-grp-6846';
5804   g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
5805   l_xml_element_count := l_xml_element_count + 1;
5806   --
5807   -- Bug#9579261 fix starts
5808   g_xml_element_table(l_xml_element_count).tagname  := 'Pensjon-grp-8580';
5809   g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
5810   g_xml_element_table(l_xml_element_count).tagattrb := 'gruppeid="8580"';
5811   l_xml_element_count := l_xml_element_count + 1;
5812   --
5813   --
5814   g_xml_element_table(l_xml_element_count).tagname  := 'ArbeidsgiverAvtalePensjonstilbyder-datadef-32865';
5815   IF l_le_si_rec.le_pen_scheme IS NOT NULL THEN
5816        g_xml_element_table(l_xml_element_count).tagvalue := 'Ja';
5817   ELSE
5818        g_xml_element_table(l_xml_element_count).tagvalue := 'Nei';
5819   END IF;
5820   g_xml_element_table(l_xml_element_count).tagattrb := 'orid="32865"';
5821   l_xml_element_count := l_xml_element_count + 1;
5822   --
5823   --
5824   --
5825 IF l_le_si_rec.le_pp_name IS NOT NULL THEN
5826   g_xml_element_table(l_xml_element_count).tagname  := 'PensjonstilbyderNavn-datadef-32866';
5827   g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_rec.le_pp_name;
5828   g_xml_element_table(l_xml_element_count).tagattrb := 'orid="32866"';
5829   l_xml_element_count := l_xml_element_count + 1;
5830 END IF;
5831   --
5832   g_xml_element_table(l_xml_element_count).tagname  := 'Pensjon-grp-8580';
5833   g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
5834   l_xml_element_count := l_xml_element_count + 1;
5835   --
5836   -- Bug#9579261 fix ends
5837   --
5838   g_xml_element_table(l_xml_element_count).tagname  := 'VisseSjomenn-grp-5756';
5839   g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
5840   g_xml_element_table(l_xml_element_count).tagattrb := 'gruppeid="5756"';
5841   l_xml_element_count := l_xml_element_count + 1;
5842   --
5843   -- Special Employers Contribution for Seaman with special monthly rate - number of months
5844   --
5845   g_xml_element_table(l_xml_element_count).tagname  := 'ArbeidsgiveravgiftUtenlandskArbeidstakerAntallManeder-datadef-25415';
5846   g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_bal_rec.emp_contr_spcl / l_le_si_bal_rec.foreign_special_amount;
5847   g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25415"';
5848   l_xml_element_count := l_xml_element_count + 1;
5849   --
5850   g_xml_element_table(l_xml_element_count).tagname  := 'VisseSjomenn-grp-5756';
5851   g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
5852   l_xml_element_count := l_xml_element_count + 1;
5853   --
5854   --
5855   --
5856   g_xml_element_table(l_xml_element_count).tagname  := 'SpesielleGrupper-grp-5755';
5857   g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
5858   l_xml_element_count := l_xml_element_count + 1;
5859   --
5860   --
5861   --
5862   g_xml_element_table(l_xml_element_count).tagname  := 'Avgiftsgrunnlag-grp-6847';
5863   g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
5864   g_xml_element_table(l_xml_element_count).tagattrb := 'gruppeid="6847"';
5865   l_xml_element_count := l_xml_element_count + 1;
5866   --
5867   --
5868   FOR l_le_si_lu_tm_rec IN  csr_LE_SI_LU_TM_INFO
5869                                 (l_payroll_action_id)
5870   LOOP
5871   --
5872   g_xml_element_table(l_xml_element_count).tagname  := 'AvgiftsgrunnlagTabell-grp-6848';
5873   g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
5874   g_xml_element_table(l_xml_element_count).tagattrb := 'gruppeid="6848"';
5875   l_xml_element_count := l_xml_element_count + 1;
5876   --
5877   --Organization Number (Local Unit)
5878   --
5879   g_xml_element_table(l_xml_element_count).tagname  := 'AvgiftsbetalerOrganisasjonsnummer-datadef-27605';
5880   g_xml_element_table(l_xml_element_count).tagvalue := lpad(l_le_si_lu_tm_rec.local_unit_id,9,'0');
5881   g_xml_element_table(l_xml_element_count).tagattrb := 'orid="27605"';
5882   l_xml_element_count := l_xml_element_count + 1;
5883   --
5884   -- Local Unit Municipal Number
5885   --
5886   g_xml_element_table(l_xml_element_count).tagname  := 'AvgiftsbetalerKommunenummer-datadef-27610';
5887   g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_lu_tm_rec.tax_municipality_id;
5888   g_xml_element_table(l_xml_element_count).tagattrb := 'orid="27610"';
5889   l_xml_element_count := l_xml_element_count + 1;
5890   --
5891   -- Local Unit Municipal Name
5892   --
5893   g_xml_element_table(l_xml_element_count).tagname  := 'AvgiftsbetalerKommunenavn-datadef-28111';
5894  g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_lu_tm_rec.tax_municipality;
5895   g_xml_element_table(l_xml_element_count).tagattrb := 'orid="28111"';
5896   l_xml_element_count := l_xml_element_count + 1;
5897   --
5898   --  Employer Contribution Zone
5899   --
5900   g_xml_element_table(l_xml_element_count).tagname  := 'AvgiftsbetalerArbeidsgiveravgiftSone-datadef-28112';
5901   g_xml_element_table(l_xml_element_count).tagvalue :=  l_le_si_lu_tm_rec.ni_zone_arc;
5902   g_xml_element_table(l_xml_element_count).tagattrb := 'orid="28112"';
5903   l_xml_element_count := l_xml_element_count + 1;
5904   --
5905   -- Employer Contribution Base
5906   --
5907   g_xml_element_table(l_xml_element_count).tagname  := 'ArbeidsgiveravgiftRefusjonGrunnlagSpesifisert-datadef-28106';
5908   g_xml_element_table(l_xml_element_count).tagvalue :=  to_char(l_le_si_lu_tm_rec.emp_contr_bse);
5909   g_xml_element_table(l_xml_element_count).tagattrb := 'orid="28106"';
5910   l_xml_element_count := l_xml_element_count + 1;
5911   --
5912   -- Pension Base
5913   --
5914   g_xml_element_table(l_xml_element_count).tagname  := 'ArbeidsgiveravgiftRefusjonTilskuddPensjonSpesifisert-datadef-28107';
5915   g_xml_element_table(l_xml_element_count).tagvalue := l_le_si_lu_tm_rec.pension_bse;
5916   g_xml_element_table(l_xml_element_count).tagattrb := 'orid="28107"';
5917   l_xml_element_count := l_xml_element_count + 1;
5918   --
5919   --Gross Employer Contribution Base
5920   --
5921   l_gross_emp_contr_bse := l_le_si_lu_tm_rec.emp_contr_bse + l_le_si_lu_tm_rec.pension_bse;
5922   --
5923   g_xml_element_table(l_xml_element_count).tagname  := 'ArbeidsgiveravgiftRefusjonBruttoSpesifisert-datadef-28108';
5924   g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_gross_emp_contr_bse);
5925   g_xml_element_table(l_xml_element_count).tagattrb := 'orid="28108"';
5926   l_xml_element_count := l_xml_element_count + 1;
5927   --
5928   -- Reimbursement Base
5929   --
5930   g_xml_element_table(l_xml_element_count).tagname  := 'ArbeidsgiveravgiftRefusjonRefusjonsgrunnlagSpesifisert-datadef-28109';
5931   g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_le_si_lu_tm_rec.reimb_bse);
5932   g_xml_element_table(l_xml_element_count).tagattrb := 'orid="28109"';
5933   l_xml_element_count := l_xml_element_count + 1;
5934   --
5935   -- Net Employer Contribution Base
5936   l_net_emp_contr_bse := l_gross_emp_contr_bse - l_le_si_lu_tm_rec.reimb_bse ;
5937   --
5938   g_xml_element_table(l_xml_element_count).tagname  := 'ArbeidsgiveravgiftRefusjonNettoSpesifisert-datadef-28110';
5939   g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_net_emp_contr_bse);
5940   g_xml_element_table(l_xml_element_count).tagattrb := 'orid="28110"';
5941   l_xml_element_count := l_xml_element_count + 1;
5942   --
5943   g_xml_element_table(l_xml_element_count).tagname  := 'AvgiftsgrunnlagTabell-grp-6848';
5944   g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
5945   l_xml_element_count := l_xml_element_count + 1;
5946   --
5947   END LOOP;
5948   --
5949   --
5950   -- Total Employer Contribution Base
5951   --
5952   g_xml_element_table(l_xml_element_count).tagname  := 'ArbeidsgiveravgiftRefusjonGrunnlagSummert-datadef-28103';
5953   g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_le_si_bal_rec.emp_contr_ni_total);
5954   g_xml_element_table(l_xml_element_count).tagattrb := 'orid="28103"';
5955   l_xml_element_count := l_xml_element_count + 1;
5956   --
5957   -- Total Pension Base
5958   --
5959   g_xml_element_table(l_xml_element_count).tagname  := 'ArbeidsgiveravgiftRefusjonTilskuddPensjonSummert-datadef-28104';
5960   g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_le_si_bal_rec.tot_pension_bse);
5961   g_xml_element_table(l_xml_element_count).tagattrb := 'orid="28104"';
5962   l_xml_element_count := l_xml_element_count + 1;
5963   --
5964   -- Total Reimbursement Base
5965   --
5966   g_xml_element_table(l_xml_element_count).tagname  := 'ArbeidsgiveravgiftRefusjonRefusjonsgrunnlagSummert-datadef-28105';
5967   g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_le_si_bal_rec.tot_reimb_bse);
5968   g_xml_element_table(l_xml_element_count).tagattrb := 'orid="28105"';
5969   l_xml_element_count := l_xml_element_count + 1;
5970   --
5971   g_xml_element_table(l_xml_element_count).tagname  := 'Avgiftsgrunnlag-grp-6847';
5972   g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
5973   l_xml_element_count := l_xml_element_count + 1;
5974   --
5975   --
5976   --
5977 
5978   END LOOP ;
5979 
5980   CLOSE csr_LE_SI;
5981   --
5982   g_xml_element_table(l_xml_element_count).tagname  := 'Skjema';
5983   g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
5984   l_xml_element_count := l_xml_element_count + 1;
5985   --
5986   */
5987    g_xml_element_table(l_xml_element_count).tagname  := 'Obsolete';
5988    g_xml_element_table(l_xml_element_count).tagvalue := 'The concurrent program "Norwegian End of Year Employer Summary XML File" is no longer valid.';
5989    l_xml_element_count := l_xml_element_count + 1;
5990 
5991   write_to_clob(p_xml);
5992   --
5993   hr_utility.set_location('Leaving ' || l_proc_name, 1000);
5994  END get_employer_contribution_xml;
5995  --
5996  --
5997  -- -----------------------------------------------------------------------------
5998  -- Generates Report for the Norwegian End of Year Report called Certificate of Pay
5999  -- and Tax Deducted for each employee.
6000  -- -----------------------------------------------------------------------------
6001  --
6002  PROCEDURE get_employee_cerificate_data
6003  (p_payroll_action_id IN VARCHAR2
6004  ,p_template_name     IN VARCHAR2
6005  ,p_xml               OUT NOCOPY CLOB) IS
6006   --
6007   l_proc_name CONSTANT VARCHAR2(61) := l_package_name || '.employee_certificate_data';
6008   --
6009   CURSOR csr_LEGEMP
6010           (l_payroll_action_id IN NUMBER) IS
6011    SELECT leg_emp.action_information2  legal_employer_id
6012          ,leg_emp.action_information3  legal_employer_name
6013          ,leg_emp.action_information4  organization_number
6014          ,leg_emp.action_information5  add_line_1
6015          ,leg_emp.action_information6  add_line_2
6016          ,leg_emp.action_information7  add_line_3
6017          ,leg_emp.action_information8  add_post_code
6018          ,leg_emp.action_information9  add_post_office
6019          ,leg_emp.action_information16 le_tax_municipality
6020 	     ,leg_emp.effective_date       effective_date
6021    FROM   pay_action_information leg_emp
6022    WHERE  leg_emp.action_context_type         = 'PA'
6023      AND  leg_emp.action_context_id           = l_payroll_action_id
6024      AND  leg_emp.action_information_category = 'EMEA REPORT INFORMATION'
6025      AND  leg_emp.action_information1         = 'LEG_EMP_INFO'
6026    ORDER BY leg_emp.action_information3;
6027   --
6028   CURSOR csr_PERSON
6029           (l_payroll_action_id IN NUMBER
6030           ,p_legal_employer_id IN VARCHAR2) IS
6031    SELECT DISTINCT
6032           summ_cde.action_information12 tax_municipality
6033          ,per.action_information2  person_id
6034          ,per.action_information3  full_name
6035          ,per.action_information4  employee_number
6036          ,per.action_information5  national_identifier
6037          ,per.action_information6  employed_throughout
6038          ,per.action_information7  seamen
6039          ,per.action_information8  employed_date_or_days
6040          ,per.action_information9  add_line_1
6041          ,per.action_information10 add_line_2
6042          ,per.action_information11 add_line_3
6043          ,per.action_information12 add_post_code
6044          ,per.action_information13 add_post_office
6045    FROM   pay_action_information summ_cde
6046          ,pay_action_information per
6047    WHERE  summ_cde.action_context_type         = 'PA'
6048      AND  summ_cde.action_context_id           = l_payroll_action_id
6049      AND  summ_cde.action_information_category = 'EMEA REPORT INFORMATION'
6050      AND  summ_cde.action_information1         = 'AUDIT_REP_SUMMARY'
6051      AND  summ_cde.action_information2         = p_legal_employer_id
6052      AND  per.action_context_type              = summ_cde.action_context_type
6053      AND  per.action_context_id                = summ_cde.action_context_id
6054      AND  per.action_information_category      = summ_cde.action_information_category
6055      AND  per.action_information1              = 'PER_INFO'
6056      AND  per.action_information2              = summ_cde.action_information3
6057    ORDER BY per.action_information3;
6058   --
6059   CURSOR csr_PER_FIX_CODE
6060           (l_payroll_action_id IN NUMBER
6061           ,p_legal_employer_id IN VARCHAR2
6062           ,l_person_id         IN NUMBER) IS
6063    SELECT rep_cde.action_information3 code
6064          ,trunc(SUM(fnd_number.canonical_to_number(aud_smr.action_information5))) amount
6065          ,pay_no_eoy_archive.get_info_dtype(l_payroll_action_id, p_legal_employer_id, rep_cde.action_information3, 'INFO1') info1_dtype
6066    FROM   pay_action_information rep_cde
6067          ,pay_action_information aud_smr
6068    WHERE  rep_cde.action_context_type         = 'PA'
6069      AND  rep_cde.action_context_id           = l_payroll_action_id
6070      AND  rep_cde.action_information_category = 'EMEA REPORT INFORMATION'
6071      AND  rep_cde.action_information1         = 'REP_CODE_DTLS'
6072      AND  rep_cde.action_information2         = p_legal_employer_id
6073      AND  rep_cde.action_information3         = aud_smr.action_information4
6074      AND  rep_cde.action_information4         = 'Y'
6075      AND  aud_smr.action_context_type         = 'PA'
6076      AND  aud_smr.action_context_id           = l_payroll_action_id
6077      AND  aud_smr.action_information_category = 'EMEA REPORT INFORMATION'
6078      AND  aud_smr.action_information1         = 'AUDIT_REP_SUMMARY'
6079      AND  aud_smr.action_information2         = p_legal_employer_id
6080      AND  aud_smr.action_information3         = l_person_id
6081      group by rep_cde.action_information3 ;
6082   --
6083   CURSOR csr_PER_FIX_CODE_ADDL_INFO_CUM
6084           (l_payroll_action_id IN NUMBER
6085           ,p_legal_employer_id IN VARCHAR2
6086           ,l_person_id         IN NUMBER
6087           ,l_eoy_code          IN VARCHAR2) IS
6088    SELECT SUM(fnd_number.canonical_to_number(aud_smr.action_information6)) info1
6089    FROM   pay_action_information rep_cde
6090          ,pay_action_information aud_smr
6091    WHERE  rep_cde.action_context_type         = 'PA'
6092      AND  rep_cde.action_context_id           = l_payroll_action_id
6093      AND  rep_cde.action_information_category = 'EMEA REPORT INFORMATION'
6094      AND  rep_cde.action_information1         = 'REP_CODE_DTLS'
6095      AND  rep_cde.action_information2         = p_legal_employer_id
6096      AND  rep_cde.action_information3         = aud_smr.action_information4
6097      AND  rep_cde.action_information4         = 'Y'
6098      AND  aud_smr.action_context_type         = 'PA'
6099      AND  aud_smr.action_context_id           = l_payroll_action_id
6100      AND  aud_smr.action_information_category = 'EMEA REPORT INFORMATION'
6101      AND  aud_smr.action_information1         = 'AUDIT_REP_SUMMARY'
6102      AND  aud_smr.action_information2         = p_legal_employer_id
6103      AND  aud_smr.action_information3         = l_person_id
6104      AND  aud_smr.action_information4         = l_eoy_code;
6105   --
6106   CURSOR csr_PER_FIX_CODE_ADDL_INFO_IND
6107           (l_payroll_action_id IN NUMBER
6108           ,p_legal_employer_id IN VARCHAR2
6109           ,l_person_id         IN NUMBER
6110           ,l_eoy_code          IN VARCHAR2) IS
6111    SELECT decode(count(distinct(aud_smr.action_information6)),1,max(aud_smr.action_information6),'') info1
6112    FROM   pay_action_information rep_cde
6113          ,pay_action_information aud_smr
6114    WHERE  rep_cde.action_context_type         = 'PA'
6115      AND  rep_cde.action_context_id           = l_payroll_action_id
6116      AND  rep_cde.action_information_category = 'EMEA REPORT INFORMATION'
6117      AND  rep_cde.action_information1         = 'REP_CODE_DTLS'
6118      AND  rep_cde.action_information2         = p_legal_employer_id
6119      AND  rep_cde.action_information3         = aud_smr.action_information4
6120      AND  rep_cde.action_information4         = 'Y'
6121      AND  aud_smr.action_context_type         = 'PA'
6122      AND  aud_smr.action_context_id           = l_payroll_action_id
6123      AND  aud_smr.action_information_category = 'EMEA REPORT INFORMATION'
6124      AND  aud_smr.action_information1         = 'AUDIT_REP_SUMMARY'
6125      AND  aud_smr.action_information2         = p_legal_employer_id
6126      AND  aud_smr.action_information3         = l_person_id
6127      AND  aud_smr.action_information4         = l_eoy_code;
6128   --
6129   CURSOR csr_SUMMARY_CODES
6130           (l_payroll_action_id IN NUMBER
6131           ,p_legal_employer_id IN VARCHAR2
6132           ,p_person_id         IN VARCHAR2 ) IS
6133    SELECT summ_cde.action_information4  code
6134          ,trunc(fnd_number.canonical_to_number(summ_cde.action_information5))  amount
6135          ,summ_cde.action_information6  info1
6136          ,summ_cde.action_information7  info2
6137          ,summ_cde.action_information8  info3
6138          ,summ_cde.action_information9  info4
6139          ,summ_cde.action_information10 info5
6140          ,summ_cde.action_information11 info6
6141          ,summ_cde.action_information14 info7   --2009 changes
6142          ,summ_cde.action_information15 info8   --2009 changes
6143          ,summ_cde.action_information16 info9   --2009 changes
6144          ,summ_cde.action_information17 info10  --2009 changes
6145          ,pay_no_eoy_archive.get_code_desc(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4)            description
6146          ,pay_no_eoy_archive.get_info_prompt(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO1') info1_prompt
6147          ,pay_no_eoy_archive.get_info_prompt(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO2') info2_prompt
6148          ,pay_no_eoy_archive.get_info_prompt(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO3') info3_prompt
6149          ,pay_no_eoy_archive.get_info_prompt(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO4') info4_prompt
6150          ,pay_no_eoy_archive.get_info_prompt(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO5') info5_prompt
6151          ,pay_no_eoy_archive.get_info_prompt(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO6') info6_prompt
6152          ,pay_no_eoy_archive.get_info_prompt(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO7') info7_prompt     --2009 changes
6153          ,pay_no_eoy_archive.get_info_prompt(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO8') info8_prompt     --2009 changes
6154          ,pay_no_eoy_archive.get_info_prompt(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO9') info9_prompt     --2009 changes
6155          ,pay_no_eoy_archive.get_info_prompt(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO10') info10_prompt     --2009 changes
6156          ,pay_no_eoy_archive.get_info_dtype(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO1') info1_dtype
6157          ,pay_no_eoy_archive.get_info_dtype(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO2') info2_dtype
6158          ,pay_no_eoy_archive.get_info_dtype(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO3') info3_dtype
6159          ,pay_no_eoy_archive.get_info_dtype(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO4') info4_dtype
6160          ,pay_no_eoy_archive.get_info_dtype(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO5') info5_dtype
6161          ,pay_no_eoy_archive.get_info_dtype(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO6') info6_dtype
6162          ,pay_no_eoy_archive.get_info_dtype(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO7') info7_dtype   --2009 Changes
6163          ,pay_no_eoy_archive.get_info_dtype(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO8') info8_dtype   --2009 Changes
6164          ,pay_no_eoy_archive.get_info_dtype(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO9') info9_dtype   --2009 Changes
6165          ,pay_no_eoy_archive.get_info_dtype(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO10') info10_dtype --2009 Changes
6166     	 ,pay_no_eoy_archive.get_xml_orid(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO1') info1_orid    -- changes 2007-08
6167          ,pay_no_eoy_archive.get_xml_orid(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO2') info2_orid    -- changes 2007-08
6168          ,pay_no_eoy_archive.get_xml_orid(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO3') info3_orid    -- changes 2007-08
6169          ,pay_no_eoy_archive.get_xml_orid(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO4') info4_orid    -- changes 2007-08
6170          ,pay_no_eoy_archive.get_xml_orid(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO5') info5_orid    -- changes 2007-08
6171          ,pay_no_eoy_archive.get_xml_orid(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO6') info6_orid    -- changes 2007-08
6172          ,pay_no_eoy_archive.get_xml_orid(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO7') info7_orid      --2009 Changes
6173          ,pay_no_eoy_archive.get_xml_orid(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO8') info8_orid      --2009 Changes
6174          ,pay_no_eoy_archive.get_xml_orid(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO9') info9_orid      --2009 Changes
6175          ,pay_no_eoy_archive.get_xml_orid(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO10') info10_orid      --2009 Changes
6176    FROM   pay_action_information      summ_cde
6177          ,pay_action_information      rep_cde
6178    WHERE   rep_cde.action_context_type         = 'PA'
6179      AND  rep_cde.action_context_id            = l_payroll_action_id
6180      AND  rep_cde.action_information_category  = 'EMEA REPORT INFORMATION'
6181      AND  rep_cde.action_information1          = 'REP_CODE_DTLS'
6182      AND  rep_cde.action_information2          = p_legal_employer_id
6183      AND  rep_cde.action_information3          = summ_cde.action_information4
6184      AND  rep_cde.action_information4          <> 'Y'
6185      AND  summ_cde.action_context_type         = 'PA'
6186      AND  summ_cde.action_context_id           = l_payroll_action_id
6187      AND  summ_cde.action_information_category = 'EMEA REPORT INFORMATION'
6188      AND  summ_cde.action_information1         = 'AUDIT_REP_SUMMARY'
6189      AND  summ_cde.action_information2         = p_legal_employer_id
6190      AND  summ_cde.action_information3         = p_person_id
6191    ORDER BY summ_cde.action_information2,
6192             summ_cde.action_information4;
6193   --
6194   CURSOR csr_FIX_CODE_DESC
6195           (l_payroll_action_id IN NUMBER) IS
6196     SELECT DISTINCT rep_cde.action_information3 code
6197           ,rep_cde.action_information11         description
6198       FROM pay_action_information rep_cde
6199      WHERE rep_cde.action_context_type         = 'PA'
6200       AND  rep_cde.action_context_id           = l_payroll_action_id
6201       AND  rep_cde.action_information_category = 'EMEA REPORT INFORMATION'
6202       AND  rep_cde.action_information1         = 'REP_CODE_DTLS'
6203       AND  rep_cde.action_information4         = 'Y';
6204   --
6205   --
6206   l_xml_element_count NUMBER := 1;
6207   l_payroll_action_id NUMBER;
6208   l_bg_id             NUMBER;
6209   lg_format_mask      VARCHAR2(40);
6210   rec_per_fix_code    csr_PER_FIX_CODE%ROWTYPE;
6211   addl_info           VARCHAR2(30);
6212   --
6213  BEGIN
6214   hr_utility.set_location('Entering ' || l_proc_name, 10);
6215 
6216   g_xml_element_table.DELETE;
6217   --
6218   IF p_payroll_action_id is null then
6219     BEGIN
6220     SELECT payroll_action_id
6221       into l_payroll_action_id
6222       from pay_payroll_actions ppa,
6223 	   fnd_conc_req_summary_v fcrs,
6224 	   fnd_conc_req_summary_v fcrs1
6225      WHERE fcrs.request_id = fnd_global.conc_request_id
6226        and fcrs.priority_request_id = fcrs1.priority_request_id
6227        and ppa.request_id between fcrs1.request_id and fcrs.request_id
6228        and ppa.request_id = fcrs1.request_id;
6229      EXCEPTION
6230      WHEN others then
6231        null;
6232      END;
6233   ELSE
6234     l_payroll_action_id := p_payroll_action_id;
6235   END IF;
6236   --
6237 
6238   -- get the currecnt BG's currency and mask to format the amount fields
6239   --
6240   fnd_profile.get('PER_BUSINESS_GROUP_ID', l_bg_id);
6241   set_currency_mask(l_bg_id, lg_format_mask);
6242   --
6243   g_xml_element_table(l_xml_element_count).tagname  := 'EOY';
6244   g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
6245   l_xml_element_count := l_xml_element_count + 1;
6246   --
6247   FOR rec_FIX_CODE_DESC IN csr_FIX_CODE_DESC(l_payroll_action_id)
6248   LOOP
6249   --
6250     g_xml_element_table(l_xml_element_count).tagname  := 'PROMPT_'|| replace(rec_FIX_CODE_DESC.code,'-');
6251     g_xml_element_table(l_xml_element_count).tagvalue := rec_FIX_CODE_DESC.code;
6252     l_xml_element_count := l_xml_element_count + 1;
6253     --
6254     g_xml_element_table(l_xml_element_count).tagname  := 'DESC_'|| replace(rec_FIX_CODE_DESC.code,'-');
6255     g_xml_element_table(l_xml_element_count).tagvalue := rec_FIX_CODE_DESC.description;
6256     l_xml_element_count := l_xml_element_count + 1;
6257   --
6258   END LOOP;
6259   --
6260   -- Loop for each legal employer.
6261   --
6262   FOR l_legemp_rec IN csr_LEGEMP
6263                        (l_payroll_action_id)
6264   LOOP
6265    --
6266    --
6267    g_xml_element_table(l_xml_element_count).tagname  := 'LEGAL_EMPLOYER';
6268    g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
6269    l_xml_element_count := l_xml_element_count + 1;
6270    --
6271    g_xml_element_table(l_xml_element_count).tagname  := 'REPORT_YEAR';
6272    g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_legemp_rec.effective_date,'YYYY');
6273    l_xml_element_count := l_xml_element_count + 1;
6274    --
6275    g_xml_element_table(l_xml_element_count).tagname  := 'LEGAL_EMPLOYER_NAME';
6276    g_xml_element_table(l_xml_element_count).tagvalue := l_legemp_rec.legal_employer_name;
6277    l_xml_element_count := l_xml_element_count + 1;
6278    --
6279    g_xml_element_table(l_xml_element_count).tagname  := 'LEGAL_EMPLOYER_ADDRESS1';
6280    g_xml_element_table(l_xml_element_count).tagvalue := l_legemp_rec.add_line_1;
6281    l_xml_element_count := l_xml_element_count + 1;
6282    --
6283    g_xml_element_table(l_xml_element_count).tagname  := 'LEGAL_EMPLOYER_ADDRESS2';
6284    g_xml_element_table(l_xml_element_count).tagvalue := l_legemp_rec.add_line_2;
6285    l_xml_element_count := l_xml_element_count + 1;
6286    --
6287    g_xml_element_table(l_xml_element_count).tagname  := 'LEGAL_EMPLOYER_ADDRESS3';
6288    g_xml_element_table(l_xml_element_count).tagvalue := l_legemp_rec.add_line_3;
6289    l_xml_element_count := l_xml_element_count + 1;
6290    --
6291    g_xml_element_table(l_xml_element_count).tagname  := 'LEGAL_EMPLOYER_POSTCODE1';
6292    g_xml_element_table(l_xml_element_count).tagvalue := l_legemp_rec.add_post_code;
6293    l_xml_element_count := l_xml_element_count + 1;
6294    --
6295    g_xml_element_table(l_xml_element_count).tagname  := 'LEGAL_EMPLOYER_POSTCODE2';
6296    g_xml_element_table(l_xml_element_count).tagvalue := l_legemp_rec.add_post_office;
6297    l_xml_element_count := l_xml_element_count + 1;
6298    --
6299    g_xml_element_table(l_xml_element_count).tagname  := 'LEGAL_EMPLOYER_ORG_NUMBER';
6300    g_xml_element_table(l_xml_element_count).tagvalue := l_legemp_rec.organization_number;
6301    l_xml_element_count := l_xml_element_count + 1;
6302    --
6303    g_xml_element_table(l_xml_element_count).tagname  := 'TAX_MUNICIPALITY';
6304    g_xml_element_table(l_xml_element_count).tagvalue := l_legemp_rec.le_tax_municipality;
6305    l_xml_element_count := l_xml_element_count + 1;
6306    --
6307    -- Loop for each person within legal employer.
6308    --
6309    FOR l_person_rec IN csr_PERSON
6310                         (l_payroll_action_id
6311                         ,l_legemp_rec.legal_employer_id)
6312    LOOP
6313     --
6314     g_xml_element_table(l_xml_element_count).tagname  := 'PERSON';
6315     g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
6316     l_xml_element_count := l_xml_element_count + 1;
6317     --
6318     g_xml_element_table(l_xml_element_count).tagname  := 'NAME';
6319     g_xml_element_table(l_xml_element_count).tagvalue := l_person_rec.full_name;
6320     l_xml_element_count := l_xml_element_count + 1;
6321     --
6322     g_xml_element_table(l_xml_element_count).tagname  := 'EMPLOYEE_NUMBER';
6323     g_xml_element_table(l_xml_element_count).tagvalue := l_person_rec.employee_number;
6324     l_xml_element_count := l_xml_element_count + 1;
6325     --
6326     g_xml_element_table(l_xml_element_count).tagname  := 'ADD_LINE_1';
6327     g_xml_element_table(l_xml_element_count).tagvalue := l_person_rec.add_line_1;
6328     l_xml_element_count := l_xml_element_count + 1;
6329     --
6330     g_xml_element_table(l_xml_element_count).tagname  := 'ADD_LINE_2';
6331     g_xml_element_table(l_xml_element_count).tagvalue := l_person_rec.add_line_2;
6332     l_xml_element_count := l_xml_element_count + 1;
6333     --
6334     g_xml_element_table(l_xml_element_count).tagname  := 'ADD_LINE_3';
6335     g_xml_element_table(l_xml_element_count).tagvalue := l_person_rec.add_line_3;
6336     l_xml_element_count := l_xml_element_count + 1;
6337     --
6338     g_xml_element_table(l_xml_element_count).tagname  := 'ADD_POST_CODE';
6339     g_xml_element_table(l_xml_element_count).tagvalue := l_person_rec.add_post_code;
6340     l_xml_element_count := l_xml_element_count + 1;
6341     --
6342     g_xml_element_table(l_xml_element_count).tagname  := 'ADD_POST_OFFICE';
6343     g_xml_element_table(l_xml_element_count).tagvalue := l_person_rec.add_post_office;
6344     l_xml_element_count := l_xml_element_count + 1;
6345     --
6346     g_xml_element_table(l_xml_element_count).tagname  := 'NI_NUMBER';
6347     g_xml_element_table(l_xml_element_count).tagvalue := l_person_rec.national_identifier;
6348     l_xml_element_count := l_xml_element_count + 1;
6349     --
6350     g_xml_element_table(l_xml_element_count).tagname  := 'TAX_MUNICIPALITY';
6351     g_xml_element_table(l_xml_element_count).tagvalue := l_person_rec.tax_municipality;
6352     l_xml_element_count := l_xml_element_count + 1;
6353     --
6354     g_xml_element_table(l_xml_element_count).tagname  := 'EMPLOYED_THROUGHOUT';
6355     g_xml_element_table(l_xml_element_count).tagvalue := l_person_rec.employed_throughout;
6356     l_xml_element_count := l_xml_element_count + 1;
6357     --
6358     g_xml_element_table(l_xml_element_count).tagname  := 'EMPLOYED_DATE_OR_DAYS';
6359     g_xml_element_table(l_xml_element_count).tagvalue := l_person_rec.employed_date_or_days;
6360     l_xml_element_count := l_xml_element_count + 1;
6361     --
6362     g_xml_element_table(l_xml_element_count).tagname  := 'SEAMEN';
6363     g_xml_element_table(l_xml_element_count).tagvalue := l_person_rec.seamen;
6364     l_xml_element_count := l_xml_element_count + 1;
6365     --
6366     g_fixed_code.DELETE;
6367     g_fixed_code(1).fixed_code := '111-A';
6368     g_fixed_code(1).status     := 0;
6369     g_fixed_code(2).fixed_code := '112-A';
6370     g_fixed_code(2).status     := 0;
6371     g_fixed_code(3).fixed_code := '116-A';
6372     g_fixed_code(3).status     := 0;
6373     g_fixed_code(4).fixed_code := '211';
6374     g_fixed_code(4).status     := 0;
6375     g_fixed_code(5).fixed_code := '311';
6376     g_fixed_code(5).status     := 0;
6377     g_fixed_code(6).fixed_code := '312';
6378     g_fixed_code(6).status     := 0;
6379     g_fixed_code(7).fixed_code := '313';
6380     g_fixed_code(7).status     := 0;
6381     g_fixed_code(8).fixed_code := '314';
6382     g_fixed_code(8).status     := 0;
6383     g_fixed_code(9).fixed_code := '316';
6384     g_fixed_code(9).status     := 0;
6385     g_fixed_code(10).fixed_code := '401';
6386     g_fixed_code(10).status     := 0;
6387     g_fixed_code(11).fixed_code := '711';
6388     g_fixed_code(11).status     := 0;
6389     g_fixed_code(12).fixed_code := '950';
6390     g_fixed_code(12).status     := 0;
6391     g_fixed_code(13).fixed_code :='000';
6392     g_fixed_code(13).status     := 0;
6393    --
6394    --
6395    -- Loop through all fixed codes.
6396    --
6397    OPEN csr_PER_FIX_CODE
6398          (l_payroll_action_id
6399          ,l_legemp_rec.legal_employer_id
6400          ,l_person_rec.person_id);
6401    LOOP
6402     FETCH csr_PER_FIX_CODE INTO rec_per_fix_code;
6403     EXIT WHEN csr_PER_FIX_CODE%NOTFOUND;
6404     --
6405     --
6406     -- XML TAG name is based on reporting code.
6407     --
6408     g_xml_element_table(l_xml_element_count).tagname  := 'AMOUNT_' || REPLACE(rec_per_fix_code.code,'-');
6409     g_xml_element_table(l_xml_element_count).tagvalue := to_char(rec_per_fix_code.amount);
6410     g_xml_element_table(l_xml_element_count).tagtype  := 'A';
6411     l_xml_element_count := l_xml_element_count + 1;
6412     --
6413     FOR rec_fixed_code in 1..13 LOOP
6414       --
6415       IF g_fixed_code(rec_fixed_code).fixed_code = rec_per_fix_code.code THEN
6416         g_fixed_code(rec_fixed_code).status := 1;
6417         --
6418         IF rec_per_fix_code.code IN ('211','711') THEN
6419           IF rec_per_fix_code.info1_dtype IN ('M','N','A') THEN
6420             OPEN  csr_PER_FIX_CODE_ADDL_INFO_CUM(l_payroll_action_id
6421                                           ,l_legemp_rec.legal_employer_id
6422                                           ,l_person_rec.person_id
6423                                           ,rec_per_fix_code.code);
6424             FETCH csr_PER_FIX_CODE_ADDL_INFO_CUM INTO addl_info;
6425             CLOSE csr_PER_FIX_CODE_ADDL_INFO_CUM;
6426             --
6427             addl_info := to_char(to_number(addl_info),lg_format_mask);
6428             --
6429           ELSE
6430             OPEN  csr_PER_FIX_CODE_ADDL_INFO_IND(l_payroll_action_id
6431                                           ,l_legemp_rec.legal_employer_id
6432                                           ,l_person_rec.person_id
6433                                           ,rec_per_fix_code.code);
6434             FETCH csr_PER_FIX_CODE_ADDL_INFO_IND INTO addl_info;
6435             CLOSE csr_PER_FIX_CODE_ADDL_INFO_IND;
6436             --
6437             IF rec_per_fix_code.info1_dtype IN ('D') AND addl_info <> 0 THEN
6438               addl_info := fnd_date.date_to_displaydate(fnd_date.canonical_to_date(addl_info));
6439             END IF;
6440           --
6441           END IF;
6442           --
6443           g_xml_element_table(l_xml_element_count).tagname  := 'DETAIL_' || REPLACE(rec_per_fix_code.code,'-');
6444           g_xml_element_table(l_xml_element_count).tagvalue := addl_info;
6445           l_xml_element_count := l_xml_element_count + 1;
6446           --
6447         END IF;
6448         --
6449         EXIT;
6450       END IF;
6451       --
6452     END LOOP;
6453     --
6454    END LOOP;
6455    CLOSE csr_PER_FIX_CODE;
6456    --
6457    -- fixed codes which are not processed for this employee are shown as 0.
6458    FOR rec_fixed_code in 1..13 LOOP
6459       --
6460       IF g_fixed_code(rec_fixed_code).status = 0 THEN
6461         --
6462         g_fixed_code(rec_fixed_code).status := 1;
6463         g_xml_element_table(l_xml_element_count).tagname  := 'AMOUNT_' ||
6464                                                            REPLACE(g_fixed_code(rec_fixed_code).fixed_code,'-');
6465         g_xml_element_table(l_xml_element_count).tagvalue := to_char(0);
6466         g_xml_element_table(l_xml_element_count).tagtype  := 'A';
6467         l_xml_element_count := l_xml_element_count + 1;
6468       --
6469       END IF;
6470       --
6471     END LOOP;
6472     --
6473     -- Loop for all reporting codes within person, legal employer.
6474     --
6475     FOR l_summ_code_rec IN csr_SUMMARY_CODES
6476                             (l_payroll_action_id
6477                             ,l_legemp_rec.legal_employer_id
6478                             ,l_person_rec.person_id)
6479     LOOP
6480      --
6481      g_xml_element_table(l_xml_element_count).tagname  := 'REP_CODE';
6482      g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
6483      l_xml_element_count := l_xml_element_count + 1;
6484      --
6485      g_xml_element_table(l_xml_element_count).tagname  := 'CODE';
6486      g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.code;
6487      l_xml_element_count := l_xml_element_count + 1;
6488      --
6489      g_xml_element_table(l_xml_element_count).tagname  := 'AMOUNT';
6490 
6491      g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_summ_code_rec.amount);
6492           g_xml_element_table(l_xml_element_count).tagtype  := 'A';
6493      l_xml_element_count := l_xml_element_count + 1;
6494      --
6495      g_xml_element_table(l_xml_element_count).tagname  := 'DESC';
6496      g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.description;
6497      l_xml_element_count := l_xml_element_count + 1;
6498      --
6499      IF l_summ_code_rec.info1_prompt IS NOT NULL AND l_summ_code_rec.info1 IS NOT NULL THEN
6500       g_xml_element_table(l_xml_element_count).tagname  := 'INFO';
6501       g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
6502       l_xml_element_count := l_xml_element_count + 1;
6503       --
6504       g_xml_element_table(l_xml_element_count).tagname  := 'DESC';
6505       g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.info1_prompt;
6506       l_xml_element_count := l_xml_element_count + 1;
6507       --
6508       g_xml_element_table(l_xml_element_count).tagname  := 'INFO_DTLS';
6509       IF l_summ_code_rec.info1_dtype IN ('M','A','N','MC') THEN
6510         g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_summ_code_rec.info1));
6511       ELSIF l_summ_code_rec.info1_dtype = 'D' AND l_summ_code_rec.info1 <> '0' THEN
6512         g_xml_element_table(l_xml_element_count).tagvalue := fnd_date.date_to_displaydate(fnd_date.canonical_to_date(l_summ_code_rec.info1));
6513       ELSE
6514         g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.info1;
6515       END IF;
6516       l_xml_element_count := l_xml_element_count + 1;
6517       --
6518       g_xml_element_table(l_xml_element_count).tagname  := 'INFO';
6519       g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
6520       l_xml_element_count := l_xml_element_count + 1;
6521      END IF;
6522      --
6523      IF l_summ_code_rec.info2_prompt IS NOT NULL AND l_summ_code_rec.info2 IS NOT NULL THEN
6524       g_xml_element_table(l_xml_element_count).tagname  := 'INFO';
6525       g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
6526       l_xml_element_count := l_xml_element_count + 1;
6527       --
6528       g_xml_element_table(l_xml_element_count).tagname  := 'DESC';
6529       g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.info2_prompt;
6530       l_xml_element_count := l_xml_element_count + 1;
6531       --
6532       g_xml_element_table(l_xml_element_count).tagname  := 'INFO_DTLS';
6533       IF l_summ_code_rec.info2_dtype IN ('M','A','N') THEN
6534         g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_summ_code_rec.info2));
6535       ELSIF l_summ_code_rec.info2_dtype = 'D' AND l_summ_code_rec.info2 <> '0' THEN
6536         g_xml_element_table(l_xml_element_count).tagvalue := fnd_date.date_to_displaydate(fnd_date.canonical_to_date(l_summ_code_rec.info2));
6537       ELSE
6538         g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.info2;
6539       END IF;
6540       l_xml_element_count := l_xml_element_count + 1;
6541       --
6542       g_xml_element_table(l_xml_element_count).tagname  := 'INFO';
6543       g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
6544       l_xml_element_count := l_xml_element_count + 1;
6545      END IF;
6546      --
6547      IF l_summ_code_rec.info3_prompt IS NOT NULL AND l_summ_code_rec.info3 IS NOT NULL THEN
6548 
6549       g_xml_element_table(l_xml_element_count).tagname  := 'INFO';
6550       g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
6551       l_xml_element_count := l_xml_element_count + 1;
6552       --
6553       g_xml_element_table(l_xml_element_count).tagname  := 'DESC';
6554       g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.info3_prompt;
6555       l_xml_element_count := l_xml_element_count + 1;
6556       --
6557       g_xml_element_table(l_xml_element_count).tagname  := 'INFO_DTLS';
6558       IF l_summ_code_rec.info3_dtype IN ('M','A','N') THEN
6559         g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_summ_code_rec.info3));
6560       ELSIF l_summ_code_rec.info3_dtype = 'D' AND l_summ_code_rec.info3 <> '0'  THEN
6561         g_xml_element_table(l_xml_element_count).tagvalue := fnd_date.date_to_displaydate(fnd_date.canonical_to_date(l_summ_code_rec.info3));
6562       ELSE
6563         g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.info3;
6564       END IF;
6565       l_xml_element_count := l_xml_element_count + 1;
6566       --
6567       g_xml_element_table(l_xml_element_count).tagname  := 'INFO';
6568       g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
6569       l_xml_element_count := l_xml_element_count + 1;
6570      END IF;
6571      --
6572      IF l_summ_code_rec.info4_prompt IS NOT NULL AND l_summ_code_rec.info4 IS NOT NULL THEN
6573       g_xml_element_table(l_xml_element_count).tagname  := 'INFO';
6574       g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
6575       l_xml_element_count := l_xml_element_count + 1;
6576       --
6577       g_xml_element_table(l_xml_element_count).tagname  := 'DESC';
6578       g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.info4_prompt;
6579       l_xml_element_count := l_xml_element_count + 1;
6580       --
6581       g_xml_element_table(l_xml_element_count).tagname  := 'INFO_DTLS';
6582       IF l_summ_code_rec.info4_dtype IN ('M','A','N') THEN
6583         g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_summ_code_rec.info4));
6584       ELSIF l_summ_code_rec.info4_dtype = 'D' AND l_summ_code_rec.info4 <> '0'  THEN
6585         g_xml_element_table(l_xml_element_count).tagvalue := fnd_date.date_to_displaydate(fnd_date.canonical_to_date(l_summ_code_rec.info4));
6586       ELSE
6587         g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.info4;
6588       END IF;
6589       l_xml_element_count := l_xml_element_count + 1;
6590       --
6591       g_xml_element_table(l_xml_element_count).tagname  := 'INFO';
6592       g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
6593       l_xml_element_count := l_xml_element_count + 1;
6594      END IF;
6595      --
6596      IF l_summ_code_rec.info5_prompt IS NOT NULL AND l_summ_code_rec.info5 IS NOT NULL THEN
6597       g_xml_element_table(l_xml_element_count).tagname  := 'INFO';
6598       g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
6599       l_xml_element_count := l_xml_element_count + 1;
6600       --
6601       g_xml_element_table(l_xml_element_count).tagname  := 'DESC';
6602       g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.info5_prompt;
6603       l_xml_element_count := l_xml_element_count + 1;
6604       --
6605       g_xml_element_table(l_xml_element_count).tagname  := 'INFO_DTLS';
6606       IF l_summ_code_rec.info5_dtype IN ('M','A','N') THEN
6607         g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_summ_code_rec.info5));
6608       ELSIF l_summ_code_rec.info5_dtype = 'D' AND l_summ_code_rec.info5 <> '0' THEN
6609         g_xml_element_table(l_xml_element_count).tagvalue := fnd_date.date_to_displaydate(fnd_date.canonical_to_date(l_summ_code_rec.info5));
6610       ELSE
6611         g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.info5;
6612       END IF;
6613       l_xml_element_count := l_xml_element_count + 1;
6614       --
6615       g_xml_element_table(l_xml_element_count).tagname  := 'INFO';
6616       g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
6617       l_xml_element_count := l_xml_element_count + 1;
6618      END IF;
6619      --
6620      IF l_summ_code_rec.info6_prompt IS NOT NULL AND l_summ_code_rec.info6 IS NOT NULL THEN
6621       g_xml_element_table(l_xml_element_count).tagname  := 'INFO';
6622       g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
6623       l_xml_element_count := l_xml_element_count + 1;
6624       --
6625       g_xml_element_table(l_xml_element_count).tagname  := 'DESC';
6626       g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.info6_prompt;
6627       l_xml_element_count := l_xml_element_count + 1;
6628       --
6629       g_xml_element_table(l_xml_element_count).tagname  := 'INFO_DTLS';
6630       IF l_summ_code_rec.info6_dtype IN ('M','A','N') THEN
6631         g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_summ_code_rec.info6));
6632       ELSIF l_summ_code_rec.info6_dtype = 'D' AND l_summ_code_rec.info6 <> '0' THEN
6633         g_xml_element_table(l_xml_element_count).tagvalue := fnd_date.date_to_displaydate(fnd_date.canonical_to_date(l_summ_code_rec.info6));
6634       ELSE
6635         g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.info6;
6636       END IF;
6637       l_xml_element_count := l_xml_element_count + 1;
6638       --
6639       g_xml_element_table(l_xml_element_count).tagname  := 'INFO';
6640       g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
6641       l_xml_element_count := l_xml_element_count + 1;
6642      END IF;
6643      -- 2009 changes starts
6644      IF l_summ_code_rec.info7_prompt IS NOT NULL AND l_summ_code_rec.info7 IS NOT NULL THEN
6645       g_xml_element_table(l_xml_element_count).tagname  := 'INFO';
6646       g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
6647       l_xml_element_count := l_xml_element_count + 1;
6648       --
6649       g_xml_element_table(l_xml_element_count).tagname  := 'DESC';
6650       g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.info7_prompt;
6651       l_xml_element_count := l_xml_element_count + 1;
6652       --
6653       g_xml_element_table(l_xml_element_count).tagname  := 'INFO_DTLS';
6654       IF l_summ_code_rec.info7_dtype IN ('M','A','N') THEN
6655         g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_summ_code_rec.info7));
6656       ELSIF l_summ_code_rec.info7_dtype = 'D' AND l_summ_code_rec.info7 <> '0' THEN
6657         g_xml_element_table(l_xml_element_count).tagvalue := fnd_date.date_to_displaydate(fnd_date.canonical_to_date(l_summ_code_rec.info7));
6658       ELSE
6659         g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.info7;
6660       END IF;
6661       l_xml_element_count := l_xml_element_count + 1;
6662       --
6663       g_xml_element_table(l_xml_element_count).tagname  := 'INFO';
6664       g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
6665       l_xml_element_count := l_xml_element_count + 1;
6666      END IF;
6667 --
6668      IF l_summ_code_rec.info8_prompt IS NOT NULL AND l_summ_code_rec.info8 IS NOT NULL THEN
6669       g_xml_element_table(l_xml_element_count).tagname  := 'INFO';
6670       g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
6671       l_xml_element_count := l_xml_element_count + 1;
6672       --
6673       g_xml_element_table(l_xml_element_count).tagname  := 'DESC';
6674       g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.info8_prompt;
6675       l_xml_element_count := l_xml_element_count + 1;
6676       --
6677       g_xml_element_table(l_xml_element_count).tagname  := 'INFO_DTLS';
6678       IF l_summ_code_rec.info8_dtype IN ('M','A','N') THEN
6679         g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_summ_code_rec.info8));
6680       ELSIF l_summ_code_rec.info8_dtype = 'D' AND l_summ_code_rec.info8 <> '0' THEN
6681         g_xml_element_table(l_xml_element_count).tagvalue := fnd_date.date_to_displaydate(fnd_date.canonical_to_date(l_summ_code_rec.info8));
6682       ELSE
6683         g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.info8;
6684       END IF;
6685       l_xml_element_count := l_xml_element_count + 1;
6686       --
6687       g_xml_element_table(l_xml_element_count).tagname  := 'INFO';
6688       g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
6689       l_xml_element_count := l_xml_element_count + 1;
6690      END IF;
6691 --
6692      IF l_summ_code_rec.info9_prompt IS NOT NULL AND l_summ_code_rec.info9 IS NOT NULL THEN
6693       g_xml_element_table(l_xml_element_count).tagname  := 'INFO';
6694       g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
6695       l_xml_element_count := l_xml_element_count + 1;
6696       --
6697       g_xml_element_table(l_xml_element_count).tagname  := 'DESC';
6698       g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.info9_prompt;
6699       l_xml_element_count := l_xml_element_count + 1;
6700       --
6701       g_xml_element_table(l_xml_element_count).tagname  := 'INFO_DTLS';
6702       IF l_summ_code_rec.info9_dtype IN ('M','A','N') THEN
6703         g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_summ_code_rec.info9));
6704       ELSIF l_summ_code_rec.info9_dtype = 'D' AND l_summ_code_rec.info9 <> '0' THEN
6705         g_xml_element_table(l_xml_element_count).tagvalue :=  fnd_date.date_to_displaydate(fnd_date.canonical_to_date(l_summ_code_rec.info9));
6706       ELSE
6707         g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.info9;
6708       END IF;
6709       l_xml_element_count := l_xml_element_count + 1;
6710       --
6711       g_xml_element_table(l_xml_element_count).tagname  := 'INFO';
6712       g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
6713       l_xml_element_count := l_xml_element_count + 1;
6714      END IF;
6715 --
6716      IF l_summ_code_rec.info10_prompt IS NOT NULL AND l_summ_code_rec.info10 IS NOT NULL THEN
6717       g_xml_element_table(l_xml_element_count).tagname  := 'INFO';
6718       g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
6719       l_xml_element_count := l_xml_element_count + 1;
6720       --
6721       g_xml_element_table(l_xml_element_count).tagname  := 'DESC';
6722       g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.info10_prompt;
6723       l_xml_element_count := l_xml_element_count + 1;
6724       --
6725       g_xml_element_table(l_xml_element_count).tagname  := 'INFO_DTLS';
6726       IF l_summ_code_rec.info10_dtype IN ('M','A','N') THEN
6727         g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(l_summ_code_rec.info10));
6728       ELSIF l_summ_code_rec.info10_dtype = 'D' AND l_summ_code_rec.info10 <> '0' THEN
6729         g_xml_element_table(l_xml_element_count).tagvalue :=  fnd_date.date_to_displaydate(fnd_date.canonical_to_date(l_summ_code_rec.info10));
6730       ELSE
6731         g_xml_element_table(l_xml_element_count).tagvalue := l_summ_code_rec.info10;
6732       END IF;
6733       l_xml_element_count := l_xml_element_count + 1;
6734       --
6735       g_xml_element_table(l_xml_element_count).tagname  := 'INFO';
6736       g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
6737       l_xml_element_count := l_xml_element_count + 1;
6738      END IF;
6739      -- 2009 changes ends
6740      g_xml_element_table(l_xml_element_count).tagname  := 'REP_CODE';
6741      g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
6742      l_xml_element_count := l_xml_element_count + 1;
6743     END LOOP;
6744     --
6745     g_xml_element_table(l_xml_element_count).tagname  := 'PERSON';
6746     g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
6747     l_xml_element_count := l_xml_element_count + 1;
6748    --
6749    END LOOP;
6750    --
6751    g_xml_element_table(l_xml_element_count).tagname  := 'LEGAL_EMPLOYER';
6752    g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
6753    l_xml_element_count := l_xml_element_count + 1;
6754   END LOOP;
6755   --
6756    g_xml_element_table(l_xml_element_count).tagname  := 'EOY';
6757    g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
6758    l_xml_element_count := l_xml_element_count + 1;
6759   --
6760   write_to_clob(p_xml);
6761   --
6762   hr_utility.set_location('Leaving ' || l_proc_name, 1000);
6763  END get_employee_cerificate_data;
6764 --
6765 -------------------------------------------------------------------------------------
6766 -- Generates XML for the Norwegian End of Year Report called Certificate of Pay
6767 -- and Tax Deducted for each employee. 2007/08 changes
6768 -------------------------------------------------------------------------------------
6769 --
6770 --
6771 --
6772  PROCEDURE get_employee_certificate_xml
6773  (p_business_group_id IN NUMBER
6774  ,p_payroll_action_id IN VARCHAR2
6775  ,p_template_name     IN VARCHAR2
6776  ,employee_number          in  number
6777  ,p_xml               OUT NOCOPY CLOB) IS
6778   --
6779   l_proc_name CONSTANT VARCHAR2(61) := l_package_name || '.get_employee_certificate_xml';
6780   --
6781   CURSOR csr_LEGEMP
6782           (l_payroll_action_id IN NUMBER) IS
6783    SELECT leg_emp.action_information2  legal_employer_id
6784          ,leg_emp.action_information3  legal_employer_name
6785          ,leg_emp.action_information4  organization_number
6786          ,leg_emp.action_information5  add_line_1
6787          ,leg_emp.action_information6  add_line_2
6788          ,leg_emp.action_information7  add_line_3
6789          ,leg_emp.action_information8  add_post_code
6790          ,leg_emp.action_information9  add_post_office
6791          ,leg_emp.action_information16 le_tax_municipality
6792 	     ,leg_emp.effective_date       effective_date
6793    FROM   pay_action_information leg_emp
6794    WHERE  leg_emp.action_context_type         = 'PA'
6795      AND  leg_emp.action_context_id           = l_payroll_action_id
6796      AND  leg_emp.action_information_category = 'EMEA REPORT INFORMATION'
6797      AND  leg_emp.action_information1         = 'LEG_EMP_INFO'
6798    ORDER BY leg_emp.action_information3;
6799   --
6800   CURSOR csr_PERSON
6801           (l_payroll_action_id IN NUMBER
6802           ,p_legal_employer_id IN VARCHAR2) IS
6803    SELECT DISTINCT
6804           summ_cde.action_information12 tax_municipality
6805          ,per.action_information2  person_id
6806          ,per.action_information3  full_name
6807          ,per.action_information4  employee_number
6808          ,per.action_information5  national_identifier
6809          ,per.action_information6  employed_throughout
6810          ,per.action_information7  seamen
6811          ,per.action_information8  employed_date_or_days
6812          ,per.action_information9  add_line_1
6813          ,per.action_information10 add_line_2
6814          ,per.action_information11 add_line_3
6815          ,per.action_information12 add_post_code
6816          ,per.action_information13 add_post_office
6817 	 ,per.action_information14 employment_start_date     --Changes 2007/2008
6818 	 ,per.action_information15 employment_end_date       --Changes 2007/2008
6819        --Changes 2007/2008
6820    FROM   pay_action_information summ_cde
6821          ,pay_action_information per
6822    WHERE  summ_cde.action_context_type         = 'PA'
6823      AND  summ_cde.action_context_id           = l_payroll_action_id
6824      AND  summ_cde.action_information_category = 'EMEA REPORT INFORMATION'
6825      AND  summ_cde.action_information1         = 'AUDIT_REP_SUMMARY'
6826      AND  summ_cde.action_information2         = p_legal_employer_id
6827      AND  per.action_context_type              = summ_cde.action_context_type
6828      AND  per.action_context_id                = summ_cde.action_context_id
6829      AND  per.action_information_category      = summ_cde.action_information_category
6830      AND  per.action_information1              = 'PER_INFO'
6831      AND  per.action_information2              = summ_cde.action_information3
6832     and per.action_information2= NVL(employee_number,per.action_information2)
6833    ORDER BY per.action_information3;
6834   --
6835   CURSOR csr_PER_FIX_CODE
6836           (l_payroll_action_id IN NUMBER
6837           ,p_legal_employer_id IN VARCHAR2
6838           ,l_person_id         IN NUMBER) IS
6839    SELECT rep_cde.action_information3 code
6840          ,trunc(SUM(fnd_number.canonical_to_number(aud_smr.action_information5))) amount
6841          ,pay_no_eoy_archive.get_info_dtype(l_payroll_action_id, p_legal_employer_id, rep_cde.action_information3, 'INFO1') info1_dtype
6842    FROM   pay_action_information rep_cde
6843          ,pay_action_information aud_smr
6844    WHERE  rep_cde.action_context_type         = 'PA'
6845      AND  rep_cde.action_context_id           = l_payroll_action_id
6846      AND  rep_cde.action_information_category = 'EMEA REPORT INFORMATION'
6847      AND  rep_cde.action_information1         = 'REP_CODE_DTLS'
6848      AND  rep_cde.action_information2         = p_legal_employer_id
6849      AND  rep_cde.action_information3         = aud_smr.action_information4
6850      AND  rep_cde.action_information4         = 'Y'
6851      AND  aud_smr.action_context_type         = 'PA'
6852      AND  aud_smr.action_context_id           = l_payroll_action_id
6853      AND  aud_smr.action_information_category = 'EMEA REPORT INFORMATION'
6854      AND  aud_smr.action_information1         = 'AUDIT_REP_SUMMARY'
6855      AND  aud_smr.action_information2         = p_legal_employer_id
6856      AND  aud_smr.action_information3         = l_person_id
6857      group by rep_cde.action_information3 ;
6858   --
6859   CURSOR csr_PER_FIX_CODE_ADDL_INFO_CUM
6860           (l_payroll_action_id IN NUMBER
6861           ,p_legal_employer_id IN VARCHAR2
6862           ,l_person_id         IN NUMBER
6863           ,l_eoy_code          IN VARCHAR2) IS
6864    SELECT SUM(fnd_number.canonical_to_number(aud_smr.action_information6)) info1
6865    FROM   pay_action_information rep_cde
6866          ,pay_action_information aud_smr
6867    WHERE  rep_cde.action_context_type         = 'PA'
6868      AND  rep_cde.action_context_id           = l_payroll_action_id
6869      AND  rep_cde.action_information_category = 'EMEA REPORT INFORMATION'
6870      AND  rep_cde.action_information1         = 'REP_CODE_DTLS'
6871      AND  rep_cde.action_information2         = p_legal_employer_id
6872      AND  rep_cde.action_information3         = aud_smr.action_information4
6873      AND  rep_cde.action_information4         = 'Y'
6874      AND  aud_smr.action_context_type         = 'PA'
6875      AND  aud_smr.action_context_id           = l_payroll_action_id
6876      AND  aud_smr.action_information_category = 'EMEA REPORT INFORMATION'
6877      AND  aud_smr.action_information1         = 'AUDIT_REP_SUMMARY'
6878      AND  aud_smr.action_information2         = p_legal_employer_id
6879      AND  aud_smr.action_information3         = l_person_id
6880      AND  aud_smr.action_information4         = l_eoy_code;
6881   --
6882   CURSOR csr_PER_FIX_CODE_ADDL_INFO_IND
6883           (l_payroll_action_id IN NUMBER
6884           ,p_legal_employer_id IN VARCHAR2
6885           ,l_person_id         IN NUMBER
6886           ,l_eoy_code          IN VARCHAR2) IS
6887    SELECT decode(count(distinct(aud_smr.action_information6)),1,max(aud_smr.action_information6),'') info1
6888    FROM   pay_action_information rep_cde
6889          ,pay_action_information aud_smr
6890    WHERE  rep_cde.action_context_type         = 'PA'
6891      AND  rep_cde.action_context_id           = l_payroll_action_id
6892      AND  rep_cde.action_information_category = 'EMEA REPORT INFORMATION'
6893      AND  rep_cde.action_information1         = 'REP_CODE_DTLS'
6894      AND  rep_cde.action_information2         = p_legal_employer_id
6895      AND  rep_cde.action_information3         = aud_smr.action_information4
6896      AND  rep_cde.action_information4         = 'Y'
6897      AND  aud_smr.action_context_type         = 'PA'
6898      AND  aud_smr.action_context_id           = l_payroll_action_id
6899      AND  aud_smr.action_information_category = 'EMEA REPORT INFORMATION'
6900      AND  aud_smr.action_information1         = 'AUDIT_REP_SUMMARY'
6901      AND  aud_smr.action_information2         = p_legal_employer_id
6902      AND  aud_smr.action_information3         = l_person_id
6903      AND  aud_smr.action_information4         = l_eoy_code;
6904   --
6905   CURSOR csr_SUMMARY_CODES
6906           (l_payroll_action_id IN NUMBER
6907           ,p_legal_employer_id IN VARCHAR2
6908           ,p_person_id         IN VARCHAR2 ) IS
6909    SELECT summ_cde.action_information4  code
6910          ,trunc(fnd_number.canonical_to_number(summ_cde.action_information5))  amount
6911          ,summ_cde.action_information6  info1
6912          ,summ_cde.action_information7  info2
6913          ,summ_cde.action_information8  info3
6914          ,summ_cde.action_information9  info4
6915          ,summ_cde.action_information10 info5
6916          ,summ_cde.action_information11 info6
6917          ,summ_cde.action_information14 info7   --2009 changes
6918          ,summ_cde.action_information15 info8   --2009 changes
6919          ,summ_cde.action_information16 info9   --2009 changes
6920          ,summ_cde.action_information17 info10  --2009 changes
6921          ,pay_no_eoy_archive.get_code_desc(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4)            description
6922          ,pay_no_eoy_archive.get_info_prompt(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO1') info1_prompt
6923          ,pay_no_eoy_archive.get_info_prompt(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO2') info2_prompt
6924          ,pay_no_eoy_archive.get_info_prompt(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO3') info3_prompt
6925          ,pay_no_eoy_archive.get_info_prompt(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO4') info4_prompt
6926          ,pay_no_eoy_archive.get_info_prompt(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO5') info5_prompt
6927          ,pay_no_eoy_archive.get_info_prompt(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO6') info6_prompt
6928          ,pay_no_eoy_archive.get_info_prompt(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO7') info7_prompt         --2009 changes
6929          ,pay_no_eoy_archive.get_info_prompt(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO8') info8_prompt         --2009 changes
6930          ,pay_no_eoy_archive.get_info_prompt(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO9') info9_prompt         --2009 changes
6931          ,pay_no_eoy_archive.get_info_prompt(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO10') info10_prompt         --2009 changes
6932          ,pay_no_eoy_archive.get_info_dtype(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO1') info1_dtype
6933          ,pay_no_eoy_archive.get_info_dtype(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO2') info2_dtype
6934          ,pay_no_eoy_archive.get_info_dtype(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO3') info3_dtype
6935          ,pay_no_eoy_archive.get_info_dtype(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO4') info4_dtype
6936          ,pay_no_eoy_archive.get_info_dtype(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO5') info5_dtype
6937          ,pay_no_eoy_archive.get_info_dtype(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO6') info6_dtype
6938          ,pay_no_eoy_archive.get_info_dtype(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO7') info7_dtype       -- 2009 changes
6939          ,pay_no_eoy_archive.get_info_dtype(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO8') info8_dtype       -- 2009 changes
6940          ,pay_no_eoy_archive.get_info_dtype(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO9') info9_dtype       -- 2009 changes
6941          ,pay_no_eoy_archive.get_info_dtype(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO10') info10_dtype       -- 2009 changes
6942 	 ,pay_no_eoy_archive.get_xml_orid(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO1') info1_orid    -- changes 2007-08
6943          ,pay_no_eoy_archive.get_xml_orid(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO2') info2_orid    -- changes 2007-08
6944          ,pay_no_eoy_archive.get_xml_orid(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO3') info3_orid    -- changes 2007-08
6945          ,pay_no_eoy_archive.get_xml_orid(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO4') info4_orid    -- changes 2007-08
6946          ,pay_no_eoy_archive.get_xml_orid(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO5') info5_orid    -- changes 2007-08
6947          ,pay_no_eoy_archive.get_xml_orid(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO6') info6_orid    -- changes 2007-08
6948          ,pay_no_eoy_archive.get_xml_orid(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO7') info7_orid    -- 2009 changes
6949          ,pay_no_eoy_archive.get_xml_orid(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO8') info8_orid    -- 2009 changes
6950          ,pay_no_eoy_archive.get_xml_orid(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO9') info9_orid    -- 2009 changes
6951          ,pay_no_eoy_archive.get_xml_orid(l_payroll_action_id, summ_cde.action_information2, summ_cde.action_information4, 'INFO10') info10_orid    -- 2009 changes
6952    FROM   pay_action_information      summ_cde
6953          ,pay_action_information      rep_cde
6954    WHERE   rep_cde.action_context_type         = 'PA'
6955      AND  rep_cde.action_context_id            = l_payroll_action_id
6956      AND  rep_cde.action_information_category  = 'EMEA REPORT INFORMATION'
6957      AND  rep_cde.action_information1          = 'REP_CODE_DTLS'
6958      AND  rep_cde.action_information2          = p_legal_employer_id
6959      AND  rep_cde.action_information3          = summ_cde.action_information4
6960      AND  rep_cde.action_information4          <> 'Y'
6961      AND  summ_cde.action_context_type         = 'PA'
6962      AND  summ_cde.action_context_id           = l_payroll_action_id
6963      AND  summ_cde.action_information_category = 'EMEA REPORT INFORMATION'
6964      AND  summ_cde.action_information1         = 'AUDIT_REP_SUMMARY'
6965      AND  summ_cde.action_information2         = p_legal_employer_id
6966      AND  summ_cde.action_information3         = p_person_id
6967    ORDER BY summ_cde.action_information2,
6968             summ_cde.action_information4;
6969   --
6970   CURSOR csr_FIX_CODE_DESC
6971           (l_payroll_action_id IN NUMBER) IS
6972     SELECT DISTINCT rep_cde.action_information3 code
6973           ,rep_cde.action_information11         description
6974       FROM pay_action_information rep_cde
6975      WHERE rep_cde.action_context_type         = 'PA'
6976       AND  rep_cde.action_context_id           = l_payroll_action_id
6977       AND  rep_cde.action_information_category = 'EMEA REPORT INFORMATION'
6978       AND  rep_cde.action_information1         = 'REP_CODE_DTLS'
6979       AND  rep_cde.action_information4         = 'Y';
6980   --
6981   --
6982   l_xml_element_count NUMBER := 1;
6983   l_payroll_action_id NUMBER;
6984   l_bg_id             NUMBER;
6985   lg_format_mask      VARCHAR2(40);
6986   rec_per_fix_code    csr_PER_FIX_CODE%ROWTYPE;
6987   addl_info           VARCHAR2(30);
6988   l_file_name      VARCHAR2(70);
6989   l_title varchar2(25) := 'L'||utl_raw.cast_to_varchar2('C3B8')||'nns- og trekkoppgave';
6990 /*CURSOR csr_country_code(p_country varchar2)  IS
6991 						SELECT l.MEANING FROM hr_lookups l
6992              WHERE l.lookup_type='NO_LAND_CODES'
6993               and sysdate between nvl(l.START_DATE_ACTIVE , to_date('01/01/0001','DD/MM/YYYY'))
6994              and nvl(l.END_DATE_ACTIVE , to_date('31/12/4712','DD/MM/YYYY'))
6995 --and l1.lookup_type=  'NO_COUNTRY_CODES'
6996 --and sysdate between nvl(l1.START_DATE_ACTIVE , to_date('01/01/0001','DD/MM/YYYY')) and nvl(l1.END_DATE_ACTIVE , to_date('31/12/4712','DD/MM/YYYY'))
6997                and l.LOOKUP_CODE =upper(p_country);
6998 l_country_code varchar2(25); */
6999 l_str1            VARCHAR2(80) ;
7000 l_start varchar2(25) := '<RF1015U>' ;
7001 l_end varchar2(25) := '</RF1015U>' ;
7002   --
7003  BEGIN
7004   hr_utility.set_location('Entering ' || l_proc_name, 10);
7005   g_xml_element_table.DELETE;
7006   --
7007   IF p_payroll_action_id is null then
7008     BEGIN
7009     SELECT payroll_action_id
7010       into l_payroll_action_id
7011       from pay_payroll_actions ppa,
7012 	   fnd_conc_req_summary_v fcrs,
7013 	   fnd_conc_req_summary_v fcrs1
7014      WHERE fcrs.request_id = fnd_global.conc_request_id
7015        and fcrs.priority_request_id = fcrs1.priority_request_id
7016        and ppa.request_id between fcrs1.request_id and fcrs.request_id
7017        and ppa.request_id = fcrs1.request_id;
7018      EXCEPTION
7019      WHEN others then
7020        null;
7021      END;
7022   ELSE
7023     l_payroll_action_id := p_payroll_action_id;
7024   END IF;
7025   --
7026   set_parameters(l_payroll_action_id);
7027   -- get the currecnt BG's currency and mask to format the amount fields
7028   --
7029   fnd_profile.get('PER_BUSINESS_GROUP_ID', l_bg_id);
7030   set_currency_mask(l_bg_id, lg_format_mask);
7031 
7032    l_str1 := '<?xml version="1.0" encoding="' || get_IANA_charset || '"?>' ;
7033 
7034   dbms_lob.createtemporary(g_clob, FALSE, DBMS_LOB.CALL);
7035   dbms_lob.open(g_clob, DBMS_LOB.LOB_READWRITE);
7036   --
7037   dbms_lob.writeappend(g_clob, LENGTH(l_str1), l_str1);
7038 dbms_lob.writeappend(g_clob, LENGTH(l_start), l_start);
7039   --
7040   --/*Applying the changes for the 2007-2008*/
7041 
7042 /*  g_xml_element_table(l_xml_element_count).tagname  := 'Skjema';
7043   g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
7044   g_xml_element_table(l_xml_element_count).tagattrb := 'tittel= "Lnns- og trekkoppgave" gruppeid="5541" spesifikasjonsnummer="10682" skjemanummer="1083" etatid="974761076" blankettnummer="RF-1015-U"';
7045   l_xml_element_count := l_xml_element_count + 1;
7046   --
7047   g_xml_element_table(l_xml_element_count).tagname  := 'Innledning-grp-5549';
7048   g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
7049   g_xml_element_table(l_xml_element_count).tagattrb := 'gruppeid="5549"';
7050   l_xml_element_count := l_xml_element_count + 1;  */
7051   --
7052 
7053   FOR l_legemp_rec IN csr_LEGEMP
7054                        (l_payroll_action_id)
7055   LOOP
7056 
7057    -- g_xml_element_table(l_xml_element_count).tagname  := 'LEGAL_EMPLOYER';
7058  /*  g_xml_element_table(l_xml_element_count).tagname  := 'Arbeidsgiver-grp-5770';
7059    g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
7060    g_xml_element_table(l_xml_element_count).tagattrb := 'gruppeid="5770"';
7061    l_xml_element_count := l_xml_element_count + 1;
7062    --
7063    -- g_xml_element_table(l_xml_element_count).tagname  := 'LEGAL_EMPLOYER_ORG_NUMBER';
7064    g_xml_element_table(l_xml_element_count).tagname  :='RapporteringsenhetOrganisasjonsnummer-datadef-21772';
7065    g_xml_element_table(l_xml_element_count).tagvalue := l_legemp_rec.organization_number;
7066    g_xml_element_table(l_xml_element_count).tagattrb := 'orid="21772"';
7067    l_xml_element_count := l_xml_element_count + 1;
7068    --
7069  /*  g_xml_element_table(l_xml_element_count).tagname  :='OppgavegiverFodselsnummer-datadef-26';
7070    g_xml_element_table(l_xml_element_count).tagvalue := ' ';
7071    g_xml_element_table(l_xml_element_count).tagattrb := 'orid="26"';
7072    l_xml_element_count := l_xml_element_count + 1; */
7073     --
7074    -- g_xml_element_table(l_xml_element_count).tagname  := 'LEGAL_EMPLOYER_NAME';
7075 /*   g_xml_element_table(l_xml_element_count).tagname  := 'OppgavegiverNavnPreutfylt-datadef-25795';
7076    g_xml_element_table(l_xml_element_count).tagvalue := l_legemp_rec.legal_employer_name;
7077    g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25795"';
7078    l_xml_element_count := l_xml_element_count + 1;
7079 
7080    --
7081 IF l_legemp_rec.add_line_1 IS NOT NULL OR l_legemp_rec.add_line_2 IS NOT NULL OR l_legemp_rec.add_line_3 IS NOT NULL THEN
7082    -- g_xml_element_table(l_xml_element_count).tagname  := 'LEGAL_EMPLOYER_ADDRESS1';
7083    g_xml_element_table(l_xml_element_count).tagname  := 'OppgavegiverAdressePreutfylt-datadef-25796';
7084    g_xml_element_table(l_xml_element_count).tagvalue := l_legemp_rec.add_line_1||' '||l_legemp_rec.add_line_2||' '||l_legemp_rec.add_line_3;
7085    g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25796"';
7086    l_xml_element_count := l_xml_element_count + 1;
7087 
7088 END IF;
7089    --
7090 
7091 IF l_legemp_rec.add_post_code IS NOT NULL THEN
7092    -- g_xml_element_table(l_xml_element_count).tagname  := 'LEGAL_EMPLOYER_POSTCODE1';
7093    g_xml_element_table(l_xml_element_count).tagname  := 'OppgavegiverPostnummerPreutfylt-datadef-25797';
7094    g_xml_element_table(l_xml_element_count).tagvalue := l_legemp_rec.add_post_code;
7095    g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25797"';
7096    l_xml_element_count := l_xml_element_count + 1;
7097    --
7098 END IF;
7099 
7100 IF l_legemp_rec.add_post_office IS NOT  NULL THEN
7101    -- g_xml_element_table(l_xml_element_count).tagname  := 'LEGAL_EMPLOYER_POSTCODE2';
7102    g_xml_element_table(l_xml_element_count).tagname  := 'OppgavegiverPoststedPreutfylt-datadef-25798';
7103    g_xml_element_table(l_xml_element_count).tagvalue := l_legemp_rec.add_post_office;
7104    g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25798"';
7105    l_xml_element_count := l_xml_element_count + 1;
7106 END IF;
7107    --
7108    --g_xml_element_table(l_xml_element_count).tagname  := 'LEGAL_EMPLOYER';
7109    g_xml_element_table(l_xml_element_count).tagname  := 'Arbeidsgiver-grp-5770';
7110    g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
7111    l_xml_element_count := l_xml_element_count + 1;  */
7112    --
7113    -- Loop for each person within legal employer.
7114    FOR l_person_rec IN csr_PERSON
7115                         (l_payroll_action_id
7116                         ,l_legemp_rec.legal_employer_id)
7117    LOOP
7118    -- 4334
7119     g_xml_element_table.DELETE;
7120   l_xml_element_count  := 1;
7121 
7122  g_xml_element_table(l_xml_element_count).tagname  := 'Skjema';
7123   g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
7124   g_xml_element_table(l_xml_element_count).tagattrb := 'tittel= "'||l_title||'" gruppeid="5541" spesifikasjonsnummer="10682" skjemanummer="1083" etatid="974761076" blankettnummer="RF-1015-U"';
7125   l_xml_element_count := l_xml_element_count + 1;
7126   --
7127   g_xml_element_table(l_xml_element_count).tagname  := 'Innledning-grp-5549';
7128   g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
7129   g_xml_element_table(l_xml_element_count).tagattrb := 'gruppeid="5549"';
7130   l_xml_element_count := l_xml_element_count + 1;
7131    -- g_xml_element_table(l_xml_element_count).tagname  := 'LEGAL_EMPLOYER';
7132    g_xml_element_table(l_xml_element_count).tagname  := 'Arbeidsgiver-grp-5770';
7133    g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
7134    g_xml_element_table(l_xml_element_count).tagattrb := 'gruppeid="5770"';
7135    l_xml_element_count := l_xml_element_count + 1;
7136    --
7137    -- g_xml_element_table(l_xml_element_count).tagname  := 'LEGAL_EMPLOYER_ORG_NUMBER';
7138    g_xml_element_table(l_xml_element_count).tagname  :='RapporteringsenhetOrganisasjonsnummer-datadef-21772';
7139    g_xml_element_table(l_xml_element_count).tagvalue := l_legemp_rec.organization_number;
7140    g_xml_element_table(l_xml_element_count).tagattrb := 'orid="21772"';
7141    g_xml_element_table(l_xml_element_count).tagtype := 'A';
7142    l_xml_element_count := l_xml_element_count + 1;
7143    --
7144  /*  g_xml_element_table(l_xml_element_count).tagname  :='OppgavegiverFodselsnummer-datadef-26';
7145    g_xml_element_table(l_xml_element_count).tagvalue := ' ';
7146    g_xml_element_table(l_xml_element_count).tagattrb := 'orid="26"';
7147    l_xml_element_count := l_xml_element_count + 1;  */
7148     --
7149    -- g_xml_element_table(l_xml_element_count).tagname  := 'LEGAL_EMPLOYER_NAME';
7150    g_xml_element_table(l_xml_element_count).tagname  := 'OppgavegiverNavnPreutfylt-datadef-25795';
7151    g_xml_element_table(l_xml_element_count).tagvalue := l_legemp_rec.legal_employer_name;
7152    g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25795"';
7153    l_xml_element_count := l_xml_element_count + 1;
7154 
7155    --
7156 IF l_legemp_rec.add_line_1 IS NOT NULL OR l_legemp_rec.add_line_2 IS NOT NULL OR l_legemp_rec.add_line_3 IS NOT NULL THEN
7157    -- g_xml_element_table(l_xml_element_count).tagname  := 'LEGAL_EMPLOYER_ADDRESS1';
7158    g_xml_element_table(l_xml_element_count).tagname  := 'OppgavegiverAdressePreutfylt-datadef-25796';
7159    g_xml_element_table(l_xml_element_count).tagvalue := l_legemp_rec.add_line_1||' '||l_legemp_rec.add_line_2||' '||l_legemp_rec.add_line_3;
7160    g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25796"';
7161    l_xml_element_count := l_xml_element_count + 1;
7162 
7163 END IF;
7164    --
7165 
7166 IF l_legemp_rec.add_post_code IS NOT NULL THEN
7167    -- g_xml_element_table(l_xml_element_count).tagname  := 'LEGAL_EMPLOYER_POSTCODE1';
7168    g_xml_element_table(l_xml_element_count).tagname  := 'OppgavegiverPostnummerPreutfylt-datadef-25797';
7169    g_xml_element_table(l_xml_element_count).tagvalue := l_legemp_rec.add_post_code;
7170    g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25797"';
7171    g_xml_element_table(l_xml_element_count).tagtype := 'A';
7172    l_xml_element_count := l_xml_element_count + 1;
7173    --
7174 END IF;
7175 
7176 IF l_legemp_rec.add_post_office IS NOT  NULL THEN
7177    -- g_xml_element_table(l_xml_element_count).tagname  := 'LEGAL_EMPLOYER_POSTCODE2';
7178    g_xml_element_table(l_xml_element_count).tagname  := 'OppgavegiverPoststedPreutfylt-datadef-25798';
7179    g_xml_element_table(l_xml_element_count).tagvalue := l_legemp_rec.add_post_office;
7180    g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25798"';
7181    l_xml_element_count := l_xml_element_count + 1;
7182 END IF;
7183    --
7184    --g_xml_element_table(l_xml_element_count).tagname  := 'LEGAL_EMPLOYER';
7185    g_xml_element_table(l_xml_element_count).tagname  := 'Arbeidsgiver-grp-5770';
7186    g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
7187    l_xml_element_count := l_xml_element_count + 1;
7188 
7189     --g_xml_element_table(l_xml_element_count).tagname  := 'PERSON';
7190     g_xml_element_table(l_xml_element_count).tagname  := 'Arbeidstaker-grp-5771';
7191     g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
7192     g_xml_element_table(l_xml_element_count).tagattrb := 'gruppeid="5771"';
7193     l_xml_element_count := l_xml_element_count + 1;
7194     --
7195     -- g_xml_element_table(l_xml_element_count).tagname  := 'NATIONAL_INDITIFER';
7196     g_xml_element_table(l_xml_element_count).tagname  := 'AnsattFodselsnummer-datadef-1224';
7197     g_xml_element_table(l_xml_element_count).tagvalue := l_person_rec.national_identifier;
7198     g_xml_element_table(l_xml_element_count).tagattrb := 'orid="1224"';
7199     g_xml_element_table(l_xml_element_count).tagtype := 'A';
7200     l_xml_element_count := l_xml_element_count + 1;
7201     --
7202  /*   g_xml_element_table(l_xml_element_count).tagname  := 'NaringsdrivendeLonnsmottakerOrganisasjonsnummer-datadef-24396';
7203     g_xml_element_table(l_xml_element_count).tagvalue := ' ';
7204     g_xml_element_table(l_xml_element_count).tagattrb := 'orid="24396"';
7205     l_xml_element_count := l_xml_element_count + 1;
7206    -- g_xml_element_table(l_xml_element_count).tagname  := 'DATE_OF_BIRTH';
7207     g_xml_element_table(l_xml_element_count).tagname  := 'AnsattFodselsdato-datadef-22734';
7208     g_xml_element_table(l_xml_element_count).tagvalue := ' ';
7209     g_xml_element_table(l_xml_element_count).tagattrb := 'orid="22734"';
7210     l_xml_element_count := l_xml_element_count + 1; */
7211     --
7212     --  g_xml_element_table(l_xml_element_count).tagname  := 'NAME';
7213     g_xml_element_table(l_xml_element_count).tagname  := 'AnsattNavn-datadef-25426';
7214     g_xml_element_table(l_xml_element_count).tagvalue := l_person_rec.full_name;
7215     g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25426"';
7216     l_xml_element_count := l_xml_element_count + 1;
7217     --
7218 
7219 IF  l_person_rec.add_line_1 <> NULL  OR  l_person_rec.add_line_2 <> NULL OR l_person_rec.add_line_3 <> NULL THEN
7220     -- g_xml_element_table(l_xml_element_count).tagname  := 'ADD_LINE_1';
7221     g_xml_element_table(l_xml_element_count).tagname  := 'AnsattAdresse-datadef-23161';
7222     g_xml_element_table(l_xml_element_count).tagvalue := l_person_rec.add_line_1||' '||l_person_rec.add_line_2||' '||l_person_rec.add_line_3;
7223     g_xml_element_table(l_xml_element_count).tagattrb := 'orid="23161"';
7224     l_xml_element_count := l_xml_element_count + 1;
7225     --
7226 END IF;
7227     --g_xml_element_table(l_xml_element_count).tagname  := 'ADD_POST_CODE';
7228     g_xml_element_table(l_xml_element_count).tagname  := 'AnsattPostnummer-datadef-8466';
7229     g_xml_element_table(l_xml_element_count).tagvalue := l_person_rec.add_post_code;
7230     g_xml_element_table(l_xml_element_count).tagattrb := 'orid="8466"';
7231     g_xml_element_table(l_xml_element_count).tagtype := 'A';
7232     l_xml_element_count := l_xml_element_count + 1;
7233     --
7234 IF l_person_rec.add_post_office IS NOT NULL THEN
7235     --g_xml_element_table(l_xml_element_count).tagname  := 'ADD_POST_OFFICE';
7236     g_xml_element_table(l_xml_element_count).tagname  := 'AnsattPoststed-datadef-8467';
7237     g_xml_element_table(l_xml_element_count).tagvalue := l_person_rec.add_post_office;
7238     g_xml_element_table(l_xml_element_count).tagattrb := 'orid="8467"';
7239     g_xml_element_table(l_xml_element_count).tagtype := 'A';
7240     l_xml_element_count := l_xml_element_count + 1;
7241     --
7242 END IF;
7243     --g_xml_element_table(l_xml_element_count).tagname  := 'TAX_MUNICIPALITY';
7244     g_xml_element_table(l_xml_element_count).tagname  := 'AnsattSkattekortkommunenummer-datadef-23289';
7245     g_xml_element_table(l_xml_element_count).tagvalue := l_person_rec.tax_municipality;
7246     g_xml_element_table(l_xml_element_count).tagattrb := 'orid="23289"';
7247     g_xml_element_table(l_xml_element_count).tagtype := 'A';
7248     l_xml_element_count := l_xml_element_count + 1;
7249     --
7250     --
7251     --
7252     g_xml_element_table(l_xml_element_count).tagname  := 'Arbeidstaker-grp-5771';
7253     g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
7254     l_xml_element_count := l_xml_element_count + 1;
7255 
7256    g_xml_element_table(l_xml_element_count).tagname  := 'Innledning-grp-5549';
7257    g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
7258    l_xml_element_count := l_xml_element_count + 1;
7259 
7260     -- Start of Employee Work Details
7261     g_xml_element_table(l_xml_element_count).tagname  := 'Ansettelsesforhold-grp-6849';
7262     g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
7263     g_xml_element_table(l_xml_element_count).tagattrb := 'gruppeid="6849"';
7264     l_xml_element_count := l_xml_element_count + 1;
7265     --
7266     --
7267     --
7268 /*    g_xml_element_table(l_xml_element_count).tagname  := 'Sjofolk-grp-5773';
7269     g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
7270     g_xml_element_table(l_xml_element_count).tagattrb := 'gruppeid="5773"';
7271     l_xml_element_count := l_xml_element_count + 1;
7272     --
7273 
7274 
7275     --g_xml_element_table(l_xml_element_count).tagname  := 'SEAMEN';
7276     g_xml_element_table(l_xml_element_count).tagname  := 'OppgaveSjofolk-datadef-24335';
7277  IF l_person_rec.seamen = 'No' THEN
7278        g_xml_element_table(l_xml_element_count).tagvalue := 'Nei';
7279   ELSE
7280        g_xml_element_table(l_xml_element_count).tagvalue := 'Ja';
7281   END IF;
7282   --  g_xml_element_table(l_xml_element_count).tagvalue := l_person_rec.seamen;
7283     g_xml_element_table(l_xml_element_count).tagattrb := 'orid="24335"';
7284     l_xml_element_count := l_xml_element_count + 1;
7285     --
7286     g_xml_element_table(l_xml_element_count).tagname  := 'Sjofolk-grp-5773';
7287     g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
7288     l_xml_element_count := l_xml_element_count + 1; */
7289     --
7290     --
7291     --
7292     g_xml_element_table(l_xml_element_count).tagname  := 'Ansettelsesperiode-grp-5772';
7293     g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
7294     g_xml_element_table(l_xml_element_count).tagattrb := 'gruppeid="5772"';
7295     l_xml_element_count := l_xml_element_count + 1;
7296     --
7297     --g_xml_element_table(l_xml_element_count).tagname  := 'EMPLOYED_THROUGHOUT';
7298     g_xml_element_table(l_xml_element_count).tagname  := 'AnsattAnsettelseHeleAret-datadef-24333';
7299 IF l_person_rec.employed_throughout = 'No' THEN
7300        g_xml_element_table(l_xml_element_count).tagvalue := 'Nei';
7301   ELSE
7302        g_xml_element_table(l_xml_element_count).tagvalue := 'Ja';
7303   END IF;
7304  --   g_xml_element_table(l_xml_element_count).tagvalue := l_person_rec.employed_throughout;
7305     g_xml_element_table(l_xml_element_count).tagattrb := 'orid="24333"';
7306     g_xml_element_table(l_xml_element_count).tagtype := 'A';
7307     l_xml_element_count := l_xml_element_count + 1;
7308     --
7309     --g_xml_element_table(l_xml_element_count).tagname  := 'EMPLOYED_START_DATE';
7310     g_xml_element_table(l_xml_element_count).tagname  := 'ArbeidsforholdStartdato-datadef-23170';
7311      g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_date.canonical_to_date(l_person_rec.employment_start_date),'YYYY-MM-DD');
7312     g_xml_element_table(l_xml_element_count).tagattrb := 'orid="23170"';
7313     g_xml_element_table(l_xml_element_count).tagtype := 'A';
7314     l_xml_element_count := l_xml_element_count + 1;
7315     --
7316     --g_xml_element_table(l_xml_element_count).tagname  := 'EMPLOYED_END_DATE';
7317    g_xml_element_table(l_xml_element_count).tagname  := 'ArbeidsforholdSluttdato-datadef-23171';
7318     g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_date.canonical_to_date(l_person_rec.employment_end_date),'YYYY-MM-DD');
7319     g_xml_element_table(l_xml_element_count).tagattrb := 'orid="23171"';
7320     g_xml_element_table(l_xml_element_count).tagtype := 'A';
7321     l_xml_element_count := l_xml_element_count + 1;
7322     --
7323     -- g_xml_element_table(l_xml_element_count).tagname  := 'EMPLOYED_DATE_OR_DAYS';
7324  /*   g_xml_element_table(l_xml_element_count).tagname  := 'ArbeidsforholdAntallDager-datadef-24364';
7325     g_xml_element_table(l_xml_element_count).tagvalue := l_person_rec.employed_date_or_days;
7326     g_xml_element_table(l_xml_element_count).tagattrb := 'orid="24364"';
7327     l_xml_element_count := l_xml_element_count + 1; */
7328     --
7329     g_xml_element_table(l_xml_element_count).tagname  := 'Ansettelsesperiode-grp-5772';
7330     g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
7331     l_xml_element_count := l_xml_element_count + 1;
7332     --
7333     --
7334 
7335     g_xml_element_table(l_xml_element_count).tagname  := 'Sjofolk-grp-5773';
7336     g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
7337     g_xml_element_table(l_xml_element_count).tagattrb := 'gruppeid="5773"';
7338     l_xml_element_count := l_xml_element_count + 1;
7339     --
7340 
7341 
7342     --g_xml_element_table(l_xml_element_count).tagname  := 'SEAMEN';
7343     g_xml_element_table(l_xml_element_count).tagname  := 'OppgaveSjofolk-datadef-24335';
7344  IF l_person_rec.seamen = 'No' THEN
7345        g_xml_element_table(l_xml_element_count).tagvalue := 'Nei';
7346   ELSE
7347        g_xml_element_table(l_xml_element_count).tagvalue := 'Ja';
7348   END IF;
7349   --  g_xml_element_table(l_xml_element_count).tagvalue := l_person_rec.seamen;
7350     g_xml_element_table(l_xml_element_count).tagattrb := 'orid="24335"';
7351     g_xml_element_table(l_xml_element_count).tagtype := 'A';
7352     l_xml_element_count := l_xml_element_count + 1;
7353     --
7354     g_xml_element_table(l_xml_element_count).tagname  := 'Sjofolk-grp-5773';
7355     g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
7356     l_xml_element_count := l_xml_element_count + 1;
7357     --
7358     g_xml_element_table(l_xml_element_count).tagname  := 'Ansettelsesforhold-grp-6849';
7359     g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
7360     l_xml_element_count := l_xml_element_count + 1;
7361     -- End of Employee Work Details
7362     --
7363     --
7364     --Extraction of Values of the Fixed Codes
7365     g_fixed_code.DELETE;
7366     g_fixed_code(1).fixed_code  := '111-A';
7367     g_fixed_code(1).status      := 0;
7368     g_fixed_code(1).displayed   := 0;
7369     g_fixed_code(2).fixed_code  := '112-A';
7370     g_fixed_code(2).status      := 0;
7371     g_fixed_code(2).displayed   := 0;
7372     g_fixed_code(3).fixed_code  := '116-A';
7373     g_fixed_code(3).status      := 0;
7374     g_fixed_code(3).displayed   := 0;
7375     g_fixed_code(4).fixed_code  := '211';
7376     g_fixed_code(4).status      := 0;
7377     g_fixed_code(4).displayed   := 0;
7378     g_fixed_code(5).fixed_code  := '311';
7379     g_fixed_code(5).status      := 0;
7380     g_fixed_code(5).displayed   := 0;
7381     g_fixed_code(6).fixed_code  := '312';
7382     g_fixed_code(6).status      := 0;
7383     g_fixed_code(6).displayed   := 0;
7384     g_fixed_code(7).fixed_code  := '313';
7385     g_fixed_code(7).status      := 0;
7386     g_fixed_code(7).displayed   := 0;
7387     g_fixed_code(8).fixed_code  := '314';
7388     g_fixed_code(8).status      := 0;
7389     g_fixed_code(8).displayed   := 0;
7390     g_fixed_code(9).fixed_code  := '316';
7391     g_fixed_code(9).status      := 0;
7392     g_fixed_code(9).displayed   := 0;
7393     g_fixed_code(10).fixed_code := '401';
7394     g_fixed_code(10).status     := 0;
7395     g_fixed_code(10).displayed  := 0;
7396     g_fixed_code(11).fixed_code := '711';
7397     g_fixed_code(11).status     := 0;
7398     g_fixed_code(11).displayed  := 0;
7399     g_fixed_code(12).fixed_code := '950';
7400     g_fixed_code(12).status     := 0;
7401     g_fixed_code(12).displayed  := 0;
7402     g_fixed_code(13).fixed_code :='000';
7403     g_fixed_code(13).status     := 0;
7404     g_fixed_code(13).displayed  := 0;
7405    --
7406    --
7407    -- Loop through all fixed codes.
7408    --
7409    OPEN csr_PER_FIX_CODE
7410          (l_payroll_action_id
7411          ,l_legemp_rec.legal_employer_id
7412          ,l_person_rec.person_id);
7413    LOOP
7414     FETCH csr_PER_FIX_CODE INTO rec_per_fix_code;
7415     EXIT WHEN csr_PER_FIX_CODE%NOTFOUND;
7416     --
7417     --
7418     -- XML TAG name is based on reporting code.
7419     --
7420     --g_xml_element_table(l_xml_element_count).tagname  := 'AMOUNT_' || REPLACE(rec_per_fix_code.code,'-');
7421     --g_xml_element_table(l_xml_element_count).tagvalue := to_char(rec_per_fix_code.amount,lg_format_mask);
7422     --g_xml_element_table(l_xml_element_count).tagtype  := 'A';
7423     --l_xml_element_count := l_xml_element_count + 1;
7424     --
7425     FOR rec_fixed_code in 1..13 LOOP
7426       --
7427       IF g_fixed_code(rec_fixed_code).fixed_code = rec_per_fix_code.code THEN
7428         g_fixed_code(rec_fixed_code).status := 1;
7429 --	g_fixed_code(rec_fixed_code).Amount_value := to_char(rec_per_fix_code.amount,lg_format_mask); --4528
7430 g_fixed_code(rec_fixed_code).Amount_value := to_char(rec_per_fix_code.amount);
7431         --
7432         IF rec_per_fix_code.code IN ('211','711') THEN
7433           IF rec_per_fix_code.info1_dtype IN ('M','N','A') THEN
7434             OPEN  csr_PER_FIX_CODE_ADDL_INFO_CUM(l_payroll_action_id
7435                                           ,l_legemp_rec.legal_employer_id
7436                                           ,l_person_rec.person_id
7437                                           ,rec_per_fix_code.code);
7438             FETCH csr_PER_FIX_CODE_ADDL_INFO_CUM INTO addl_info;
7439             CLOSE csr_PER_FIX_CODE_ADDL_INFO_CUM;
7440             --
7441           --  g_fixed_code(rec_fixed_code).Addl_Value := to_char(to_number(addl_info),lg_format_mask);
7442  g_fixed_code(rec_fixed_code).Addl_Value := to_char(to_number(addl_info));
7443             --
7444           ELSE
7445             OPEN  csr_PER_FIX_CODE_ADDL_INFO_IND(l_payroll_action_id
7446                                           ,l_legemp_rec.legal_employer_id
7447                                           ,l_person_rec.person_id
7448                                           ,rec_per_fix_code.code);
7449             FETCH csr_PER_FIX_CODE_ADDL_INFO_IND INTO addl_info;
7450             CLOSE csr_PER_FIX_CODE_ADDL_INFO_IND;
7451             --
7452             IF rec_per_fix_code.info1_dtype IN ('D') AND addl_info <> '0' THEN
7453 	       g_fixed_code(rec_fixed_code).Addl_Value :=to_char(fnd_date.canonical_to_date(addl_info),'yyyy-mm-dd');
7454             END IF;
7455           --
7456           END IF;
7457           --
7458           --g_xml_element_table(l_xml_element_count).tagname  := 'DETAIL_' || REPLACE(rec_per_fix_code.code,'-');
7459           --g_xml_element_table(l_xml_element_count).tagvalue := addl_info;
7460           --l_xml_element_count := l_xml_element_count + 1;
7461           --
7462         END IF;
7463         --
7464         EXIT;
7465 	--
7466       END IF;
7467       --
7468     END LOOP;
7469     --
7470    END LOOP;
7471    CLOSE csr_PER_FIX_CODE;
7472    --
7473    -- fixed codes which are not processed for this employee are shown as 0.
7474    --
7475    FOR rec_fixed_code in 1..13 LOOP
7476       --
7477       IF g_fixed_code(rec_fixed_code).status = 0 THEN
7478         --
7479         g_fixed_code(rec_fixed_code).status := 1;
7480        -- g_fixed_code(rec_fixed_code).Amount_value := to_char(0,lg_format_mask);
7481 g_fixed_code(rec_fixed_code).Amount_value := to_char(0);
7482 	g_fixed_code(rec_fixed_code).Addl_Value := to_char(0);
7483 
7484 	--
7485       END IF;
7486       --
7487     END LOOP;
7488     --
7489     --
7490     --
7491     --
7492     -- Start of Tax Code Fixed Code details
7493     g_xml_element_table(l_xml_element_count).tagname  := 'MestBrukteKoder-grp-5774 ';
7494     g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
7495     g_xml_element_table(l_xml_element_count).tagattrb := 'gruppeid="5774"';
7496     l_xml_element_count := l_xml_element_count + 1;
7497     --
7498     --
7499     --
7500     g_xml_element_table(l_xml_element_count).tagname  := 'LonnOgForskuddstrekk-grp-5775';
7501     g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
7502     g_xml_element_table(l_xml_element_count).tagattrb := 'gruppeid="5775"';
7503     l_xml_element_count := l_xml_element_count + 1;
7504     --
7505     -- Code Details for 111-A -Amount Value
7506     --
7507 
7508 IF g_fixed_code(1).Amount_Value <> '0' THEN
7509     g_xml_element_table(l_xml_element_count).tagname  := 'AnsattLonn-datadef-25427';
7510     g_xml_element_table(l_xml_element_count).tagvalue := g_fixed_code(1).Amount_Value;
7511     g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25427"';
7512     g_xml_element_table(l_xml_element_count).tagtype := 'A';
7513     l_xml_element_count := l_xml_element_count + 1;
7514 END IF;
7515     g_fixed_code(1).displayed := 1;
7516 
7517 
7518     --
7519     --Code Details for 950 - Amount Value
7520     --
7521     g_xml_element_table(l_xml_element_count).tagname  := 'AnsattForskuddstrekk-datadef-25428';
7522     g_xml_element_table(l_xml_element_count).tagvalue := g_fixed_code(12).Amount_Value;
7523     g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25428"';
7524     g_xml_element_table(l_xml_element_count).tagtype := 'A';
7525     l_xml_element_count := l_xml_element_count + 1;
7526     g_fixed_code(12).displayed := 1;
7527     --
7528     g_xml_element_table(l_xml_element_count).tagname  := 'LonnOgForskuddstrekk-grp-5775';
7529     g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
7530     l_xml_element_count := l_xml_element_count + 1;
7531     --
7532     --
7533     --
7534 IF g_fixed_code(11).Amount_Value <> '0' THEN
7535     g_xml_element_table(l_xml_element_count).tagname  := 'TrekkfriBilgodtgjorelse-grp-5776';
7536     g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
7537     g_xml_element_table(l_xml_element_count).tagattrb := 'gruppeid="5776"';
7538     l_xml_element_count := l_xml_element_count + 1;
7539     --
7540     -- Details of Code 711 - Amount Value
7541     --
7542     g_xml_element_table(l_xml_element_count).tagname  := 'AnsattBilgodtgjorelseTrekkfri-datadef-25429';
7543     g_xml_element_table(l_xml_element_count).tagvalue := g_fixed_code(11).Amount_Value;
7544     g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25429"';
7545     g_xml_element_table(l_xml_element_count).tagtype := 'A';
7546     l_xml_element_count := l_xml_element_count + 1;
7547 
7548     --
7549     -- Details of Code 711 - Number of Kilometers
7550     --
7551     g_xml_element_table(l_xml_element_count).tagname  := 'AnsattBilgodtgjorelseTrekkfriAntallKilometer-datadef-25430';
7552     g_xml_element_table(l_xml_element_count).tagvalue := g_fixed_code(11).Addl_Value;
7553     g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25430"';
7554     l_xml_element_count := l_xml_element_count + 1;
7555     --
7556     g_xml_element_table(l_xml_element_count).tagname  := 'TrekkfriBilgodtgjorelse-grp-5776';
7557     g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
7558     l_xml_element_count := l_xml_element_count + 1;
7559     --
7560     --
7561 END IF;
7562 g_fixed_code(11).displayed := 1;
7563 
7564 if g_fixed_code(10).Amount_Value <> '0' then
7565     --
7566     g_xml_element_table(l_xml_element_count).tagname  := 'Naringsdrivende-grp-5777';
7567     g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
7568     g_xml_element_table(l_xml_element_count).tagattrb := 'gruppeid="5777"';
7569     l_xml_element_count := l_xml_element_count + 1;
7570     --
7571     -- Details of Code 401 - Amount value
7572     --
7573     g_xml_element_table(l_xml_element_count).tagname  := 'NaringsdrivendeUtbetaling-datadef-25434';
7574     g_xml_element_table(l_xml_element_count).tagvalue := g_fixed_code(10).Amount_Value;
7575     g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25434"';
7576     g_xml_element_table(l_xml_element_count).tagtype := 'A';
7577     l_xml_element_count := l_xml_element_count + 1;
7578 
7579     --
7580     g_xml_element_table(l_xml_element_count).tagname  := 'Naringsdrivende-grp-5777';
7581     g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
7582     l_xml_element_count := l_xml_element_count + 1;
7583     --
7584 end if;
7585 
7586 g_fixed_code(10).displayed := 1;
7587     --
7588     --
7589     g_xml_element_table(l_xml_element_count).tagname  := 'KoderSomIkkeForesISelvangivelsen-grp-5778';
7590     g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
7591     g_xml_element_table(l_xml_element_count).tagattrb := 'gruppeid="5778"';
7592     l_xml_element_count := l_xml_element_count + 1;
7593     --
7594     --Details of Code 000 - Amount Value
7595     --
7596     g_xml_element_table(l_xml_element_count).tagname  := 'AnsattFeriepenger-datadef-25431';
7597     g_xml_element_table(l_xml_element_count).tagvalue := g_fixed_code(13).Amount_Value;
7598     g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25431"';
7599     g_xml_element_table(l_xml_element_count).tagtype := 'A';
7600     l_xml_element_count := l_xml_element_count + 1;
7601     g_fixed_code(13).displayed := 1;
7602     --
7603     -- Details of Code 313 - Amount Value
7604     --
7605 if g_fixed_code(7).Amount_Value <> '0' then
7606     g_xml_element_table(l_xml_element_count).tagname  := 'AnsattUnderholdsbidrag-datadef-25432';
7607     g_xml_element_table(l_xml_element_count).tagvalue := g_fixed_code(7).Amount_Value;
7608     g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25432"';
7609     g_xml_element_table(l_xml_element_count).tagtype := 'A';
7610     l_xml_element_count := l_xml_element_count + 1;
7611 
7612     --
7613 end if;
7614  g_fixed_code(7).displayed := 1;
7615     -- Details of Code 316 - Amount value
7616     --
7617 
7618 if g_fixed_code(9).Amount_Value <> '0' then
7619     g_xml_element_table(l_xml_element_count).tagname  := 'AnsattUnderholdsbidragIkkeFradragsberegnet-datadef-25433';
7620     g_xml_element_table(l_xml_element_count).tagvalue := g_fixed_code(9).Amount_Value;
7621     g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25433"';
7622     g_xml_element_table(l_xml_element_count).tagtype := 'A';
7623     l_xml_element_count := l_xml_element_count + 1;
7624     end if;
7625 g_fixed_code(9).displayed := 1;
7626     --
7627     g_xml_element_table(l_xml_element_count).tagname  := 'KoderSomIkkeForesISelvangivelsen-grp-5778';
7628     g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
7629     l_xml_element_count := l_xml_element_count + 1;
7630     --
7631     --
7632     --
7633     g_xml_element_table(l_xml_element_count).tagname  := 'MestBrukteKoder-grp-5774 ';
7634     g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
7635     l_xml_element_count := l_xml_element_count + 1;
7636     --
7637     --
7638     --
7639     g_xml_element_table(l_xml_element_count).tagname  := 'OvrigeKoder-grp-5779';
7640     g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
7641     g_xml_element_table(l_xml_element_count).tagattrb := 'gruppeid="5779"';
7642     l_xml_element_count := l_xml_element_count + 1;
7643     --
7644     --
7645     --112-A(2),116-A(3),211(4),311(5),312(6),314(8)
7646     -- Fixed Codes
7647     FOR rec_fixed_code in 1..13 LOOP
7648     --
7649      IF g_fixed_code(rec_fixed_code).displayed = 0 THEN
7650          --
7651          g_xml_element_table(l_xml_element_count).tagname  := 'OvrigeLTOKoder-grp-5806';
7652          g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
7653          g_xml_element_table(l_xml_element_count).tagattrb := 'gruppeid="5806"';
7654          l_xml_element_count := l_xml_element_count + 1;
7655          --
7656 	 IF g_fixed_code(rec_fixed_code).fixed_code = '211' and g_fixed_code(rec_fixed_code).Amount_Value <> '0' THEN
7657 	 --
7658 FND_FILE.PUT_LINE(FND_FILE.LOG,'g_fixed_code(rec_fixed_code).Amount_Value '||g_fixed_code(rec_fixed_code).Amount_Value);
7659          g_xml_element_table(l_xml_element_count).tagname  := 'LonnoppgavekodeKodenummer-datadef-25435';
7660          g_xml_element_table(l_xml_element_count).tagvalue := g_fixed_code(rec_fixed_code).fixed_code;
7661          g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25435"';
7662 	   g_xml_element_table(l_xml_element_count).tagtype := 'A';
7663          l_xml_element_count := l_xml_element_count + 1;
7664          --
7665          g_xml_element_table(l_xml_element_count).tagname  := 'LonnsoppgaveTabelloppsettBelop1-datadef-25437';
7666          g_xml_element_table(l_xml_element_count).tagvalue := g_fixed_code(rec_fixed_code).Amount_Value;
7667          g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25437"';
7668 	   g_xml_element_table(l_xml_element_count).tagtype := 'A';
7669          l_xml_element_count := l_xml_element_count + 1;
7670 	 --
7671 
7672 	 g_xml_element_table(l_xml_element_count).tagname  := 'LonnsoppgaveTabelloppsettFraDato-datadef-25444';
7673 	 g_xml_element_table(l_xml_element_count).tagvalue := g_fixed_code(rec_fixed_code).Addl_Value;
7674 	 g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25444"';
7675 	 g_xml_element_table(l_xml_element_count).tagtype := 'A';
7676          l_xml_element_count := l_xml_element_count + 1;
7677 
7678 
7679 	 --
7680 	 ELSE
7681 	 --
7682 	 g_xml_element_table(l_xml_element_count).tagname  := 'LonnoppgavekodeKodenummer-datadef-25435';
7683          g_xml_element_table(l_xml_element_count).tagvalue := substr(g_fixed_code(rec_fixed_code).fixed_code,1,3);
7684          g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25435"';
7685 	   g_xml_element_table(l_xml_element_count).tagtype := 'A';
7686          l_xml_element_count := l_xml_element_count + 1;
7687          --
7688          g_xml_element_table(l_xml_element_count).tagname  := 'LonnsoppgaveTabelloppsettBelop1-datadef-25437';
7689          g_xml_element_table(l_xml_element_count).tagvalue := g_fixed_code(rec_fixed_code).Amount_Value;
7690          g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25437"';
7691 	   g_xml_element_table(l_xml_element_count).tagtype := 'A';
7692          l_xml_element_count := l_xml_element_count + 1;
7693 	 --
7694 	 END IF;
7695          --
7696          g_xml_element_table(l_xml_element_count).tagname  := 'OvrigeLTOKoder-grp-5806';
7697          g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
7698 	 l_xml_element_count := l_xml_element_count + 1;
7699 
7700 	 g_fixed_code(rec_fixed_code).displayed := 1; --4775
7701       --
7702       END IF;
7703     --
7704       END LOOP;
7705 
7706     --Start of Summary Codes
7707     FOR l_summ_code_rec IN csr_SUMMARY_CODES
7708                             (l_payroll_action_id
7709                             ,l_legemp_rec.legal_employer_id
7710                             ,l_person_rec.person_id)
7711     LOOP
7712 
7713     g_summary_code_orid.DELETE;
7714     g_summary_code_orid(1).orid_value    := l_summ_code_rec.info1_orid;
7715     g_summary_code_orid(1).info_data     := l_summ_code_rec.info1;
7716     g_summary_code_orid(1).info_prompt   := l_summ_code_rec.info1_prompt;
7717     g_summary_code_orid(1).info_datatype := l_summ_code_rec.info1_dtype;
7718     --
7719     g_summary_code_orid(2).orid_value    := l_summ_code_rec.info2_orid;
7720     g_summary_code_orid(2).info_data     := l_summ_code_rec.info2;
7721     g_summary_code_orid(2).info_prompt   := l_summ_code_rec.info2_prompt;
7722     g_summary_code_orid(2).info_datatype := l_summ_code_rec.info2_dtype;
7723     --
7724     g_summary_code_orid(3).orid_value    := l_summ_code_rec.info3_orid;
7725     g_summary_code_orid(3).info_data     := l_summ_code_rec.info3;
7726     g_summary_code_orid(3).info_prompt   := l_summ_code_rec.info3_prompt;
7727     g_summary_code_orid(3).info_datatype := l_summ_code_rec.info3_dtype;
7728     --
7729     g_summary_code_orid(4).orid_value    := l_summ_code_rec.info4_orid;
7730     g_summary_code_orid(4).info_data     := l_summ_code_rec.info4;
7731     g_summary_code_orid(4).info_prompt   := l_summ_code_rec.info4_prompt;
7732     g_summary_code_orid(4).info_datatype := l_summ_code_rec.info4_dtype;
7733     --
7734     g_summary_code_orid(5).orid_value    := l_summ_code_rec.info5_orid;
7735     g_summary_code_orid(5).info_data     := l_summ_code_rec.info5;
7736     g_summary_code_orid(5).info_prompt   := l_summ_code_rec.info5_prompt;
7737     g_summary_code_orid(5).info_datatype := l_summ_code_rec.info5_dtype;
7738     --
7739     g_summary_code_orid(6).orid_value    := l_summ_code_rec.info6_orid;
7740     g_summary_code_orid(6).info_data     := l_summ_code_rec.info6;
7741     g_summary_code_orid(6).info_prompt   := l_summ_code_rec.info6_prompt;
7742     g_summary_code_orid(6).info_datatype := l_summ_code_rec.info6_dtype;
7743     -- 2009 changes starts
7744     g_summary_code_orid(7).orid_value    := l_summ_code_rec.info7_orid;
7745     g_summary_code_orid(7).info_data     := l_summ_code_rec.info7;
7746     g_summary_code_orid(7).info_prompt   := l_summ_code_rec.info7_prompt;
7747     g_summary_code_orid(7).info_datatype := l_summ_code_rec.info7_dtype;
7748     --
7749     g_summary_code_orid(8).orid_value    := l_summ_code_rec.info8_orid;
7750     g_summary_code_orid(8).info_data     := l_summ_code_rec.info8;
7751     g_summary_code_orid(8).info_prompt   := l_summ_code_rec.info8_prompt;
7752     g_summary_code_orid(8).info_datatype := l_summ_code_rec.info8_dtype;
7753     --
7754     g_summary_code_orid(9).orid_value    := l_summ_code_rec.info9_orid;
7755     g_summary_code_orid(9).info_data     := l_summ_code_rec.info9;
7756     g_summary_code_orid(9).info_prompt   := l_summ_code_rec.info9_prompt;
7757     g_summary_code_orid(9).info_datatype := l_summ_code_rec.info9_dtype;
7758     --
7759     g_summary_code_orid(10).orid_value    := l_summ_code_rec.info10_orid;
7760     g_summary_code_orid(10).info_data     := l_summ_code_rec.info10;
7761     g_summary_code_orid(10).info_prompt   := l_summ_code_rec.info10_prompt;
7762     g_summary_code_orid(10).info_datatype := l_summ_code_rec.info10_dtype;
7763     --2009 changes ends
7764 IF nvl(to_char(l_summ_code_rec.amount),'0') <> '0' then
7765     g_xml_element_table(l_xml_element_count).tagname  := 'OvrigeLTOKoder-grp-5806';
7766     g_xml_element_table(l_xml_element_count).tagvalue := '_START_';
7767     g_xml_element_table(l_xml_element_count).tagattrb := 'gruppeid="5806"';
7768     l_xml_element_count := l_xml_element_count + 1;
7769     --
7770     g_xml_element_table(l_xml_element_count).tagname  := 'LonnoppgavekodeKodenummer-datadef-25435';
7771     g_xml_element_table(l_xml_element_count).tagvalue := substr(l_summ_code_rec.code,1,3);
7772     g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25435"';
7773     g_xml_element_table(l_xml_element_count).tagtype := 'A';
7774     l_xml_element_count := l_xml_element_count + 1;
7775     --
7776 
7777     g_xml_element_table(l_xml_element_count).tagname  := 'LonnsytelserAvgiftsplikt-datadef-25436';
7778 if instr(l_summ_code_rec.code,'-') > 0 then
7779     g_xml_element_table(l_xml_element_count).tagvalue :='Ja';
7780 else
7781       g_xml_element_table(l_xml_element_count).tagvalue :='Nei';
7782 end if;
7783     g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25436"';
7784     g_xml_element_table(l_xml_element_count).tagtype := 'A';
7785     l_xml_element_count := l_xml_element_count + 1;
7786     --
7787     g_xml_element_table(l_xml_element_count).tagname  := 'LonnsoppgaveTabelloppsettBelop1-datadef-25437';
7788     g_xml_element_table(l_xml_element_count).tagvalue := to_char(l_summ_code_rec.amount);
7789     g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25437"';
7790     g_xml_element_table(l_xml_element_count).tagtype := 'A';
7791     l_xml_element_count := l_xml_element_count + 1;
7792     --
7793     --
7794 
7795     FOR l_summ_var IN 1..6 LOOP
7796     IF g_summary_code_orid(l_summ_var).orid_value = '25438' THEN
7797       g_xml_element_table(l_xml_element_count).tagname  := 'LonnsoppgaveTabelloppsettBelop2-datadef-25438';
7798       IF g_summary_code_orid(l_summ_var).info_datatype IN ('M','A','N','MC') THEN
7799           g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(g_summary_code_orid(l_summ_var).info_data));
7800        ELSIF g_summary_code_orid(l_summ_var).info_datatype = 'D'  AND g_summary_code_orid(l_summ_var).info_data <> '0' THEN
7801           g_xml_element_table(l_xml_element_count).tagvalue :=to_char(fnd_date.canonical_to_date(g_summary_code_orid(l_summ_var).info_data),'yyyy-mm-dd');
7802        ELSE
7803           g_xml_element_table(l_xml_element_count).tagvalue := g_summary_code_orid(l_summ_var).info_data;
7804        END IF;
7805       g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25438"';
7806 	g_xml_element_table(l_xml_element_count).tagtype := 'A';
7807       l_xml_element_count := l_xml_element_count + 1;
7808     EXIT;
7809     END IF;
7810     END LOOP;
7811     --
7812     --
7813     FOR l_summ_var IN 1..6 LOOP
7814     IF g_summary_code_orid(l_summ_var).orid_value = '25439' THEN
7815        g_xml_element_table(l_xml_element_count).tagname  := 'LonnsoppgaveTabelloppsettAntall-datadef-25439';
7816        IF g_summary_code_orid(l_summ_var).info_datatype IN ('M','A','N','MC') THEN
7817           g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(g_summary_code_orid(l_summ_var).info_data), lg_format_mask);
7818        ELSIF g_summary_code_orid(l_summ_var).info_datatype = 'D' AND g_summary_code_orid(l_summ_var).info_data <> '0'  THEN
7819           g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_date.canonical_to_date(g_summary_code_orid(l_summ_var).info_data),'yyyy-mm-dd');
7820        ELSE
7821           g_xml_element_table(l_xml_element_count).tagvalue := g_summary_code_orid(l_summ_var).info_data;
7822        END IF;
7823        g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25439"';
7824 	 g_xml_element_table(l_xml_element_count).tagtype := 'A';
7825        l_xml_element_count := l_xml_element_count + 1;
7826     EXIT;
7827     END IF;
7828     END LOOP;
7829     --
7830     --
7831 
7832     FOR l_summ_var IN 1..6 LOOP
7833     IF g_summary_code_orid(l_summ_var).orid_value = '25440' THEN
7834         g_xml_element_table(l_xml_element_count).tagname  := 'LonnsoppgaveTabelloppsettLandkode1-datadef-25440';
7835         IF g_summary_code_orid(l_summ_var).info_datatype IN ('M','A','N','MC') THEN
7836            g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(g_summary_code_orid(l_summ_var).info_data), lg_format_mask);
7837          ELSIF g_summary_code_orid(l_summ_var).info_datatype = 'D' AND g_summary_code_orid(l_summ_var).info_data <> '0' THEN
7838            g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_date.canonical_to_date(g_summary_code_orid(l_summ_var).info_data),'yyyy-mm-dd');
7839          ELSE
7840 --			open csr_country_code(g_summary_code_orid(l_summ_var).info_data);
7841 		--	fetch csr_country_code into l_country_code;
7842 		--	if csr_country_code%notfound then
7843 	--		l_country_code := g_summary_code_orid(l_summ_var).info_data;
7844 	--		end if;
7845 		--		close csr_country_code;
7846 
7847            g_xml_element_table(l_xml_element_count).tagvalue := g_summary_code_orid(l_summ_var).info_data;
7848 		--	g_xml_element_table(l_xml_element_count).tagvalue := l_country_code;
7849          END IF;
7850     g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25440"';
7851     l_xml_element_count := l_xml_element_count + 1;
7852     EXIT;
7853     END IF;
7854     END LOOP;
7855     --
7856     --
7857 
7858     FOR l_summ_var IN 1..6 LOOP
7859     IF g_summary_code_orid(l_summ_var).orid_value = '25441' THEN
7860       g_xml_element_table(l_xml_element_count).tagname  := 'LonnsoppgaveTabelloppsettLandkode2-datadef-25441';
7861       IF g_summary_code_orid(l_summ_var).info_datatype IN ('M','A','N','MC') THEN
7862         g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(g_summary_code_orid(l_summ_var).info_data), lg_format_mask);
7863       ELSIF g_summary_code_orid(l_summ_var).info_datatype = 'D' AND g_summary_code_orid(l_summ_var).info_data <> '0' THEN
7864          g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_date.canonical_to_date(g_summary_code_orid(l_summ_var).info_data),'yyyy-mm-dd');
7865       ELSE
7866          g_xml_element_table(l_xml_element_count).tagvalue := g_summary_code_orid(l_summ_var).info_data;
7867        END IF;
7868     g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25441"';
7869     l_xml_element_count := l_xml_element_count + 1;
7870     EXIT;
7871     END IF;
7872     END LOOP;
7873     --
7874     --
7875 
7876     FOR l_summ_var IN 1..6 LOOP
7877     IF g_summary_code_orid(l_summ_var).orid_value = '25442' THEN
7878     g_xml_element_table(l_xml_element_count).tagname  := 'LonnsoppgaveTabelloppsettAr-datadef-25442';
7879       IF g_summary_code_orid(l_summ_var).info_datatype IN ('M','A','N','MC') THEN
7880         g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(g_summary_code_orid(l_summ_var).info_data), lg_format_mask);
7881       ELSIF g_summary_code_orid(l_summ_var).info_datatype = 'D' AND g_summary_code_orid(l_summ_var).info_data <> '0' THEN
7882          g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_date.canonical_to_date(g_summary_code_orid(l_summ_var).info_data),'yyyy-mm-dd');
7883       ELSE
7884          g_xml_element_table(l_xml_element_count).tagvalue := g_summary_code_orid(l_summ_var).info_data;
7885        END IF;
7886     g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25442"';
7887     g_xml_element_table(l_xml_element_count).tagtype := 'A';
7888     l_xml_element_count := l_xml_element_count + 1;
7889     EXIT;
7890     END IF;
7891     END LOOP;
7892     --
7893     --
7894 
7895     FOR l_summ_var IN 1..6 LOOP
7896     IF g_summary_code_orid(l_summ_var).orid_value = '25443' THEN
7897     g_xml_element_table(l_xml_element_count).tagname  := 'LonnsoppgaveTabelloppsettBelop3-datadef-25443 ';
7898       IF g_summary_code_orid(l_summ_var).info_datatype IN ('M','A','N','MC') THEN
7899         g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(g_summary_code_orid(l_summ_var).info_data));
7900       ELSIF g_summary_code_orid(l_summ_var).info_datatype = 'D' AND g_summary_code_orid(l_summ_var).info_data <> '0' THEN
7901          g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_date.canonical_to_date(g_summary_code_orid(l_summ_var).info_data),'yyyy-mm-dd');
7902       ELSE
7903          g_xml_element_table(l_xml_element_count).tagvalue := g_summary_code_orid(l_summ_var).info_data;
7904       END IF;
7905     g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25443"';
7906     g_xml_element_table(l_xml_element_count).tagtype := 'A';
7907     l_xml_element_count := l_xml_element_count + 1;
7908     EXIT;
7909     END IF;
7910     END LOOP;
7911     --
7912     --
7913 
7914     FOR l_summ_var IN 1..6 LOOP
7915     IF g_summary_code_orid(l_summ_var).orid_value = '25444' THEN
7916     g_xml_element_table(l_xml_element_count).tagname  := 'LonnsoppgaveTabelloppsettFraDato-datadef-25444';
7917       IF g_summary_code_orid(l_summ_var).info_datatype IN ('M','A','N','MC') THEN
7918         g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(g_summary_code_orid(l_summ_var).info_data));
7919       ELSIF g_summary_code_orid(l_summ_var).info_datatype = 'D' AND g_summary_code_orid(l_summ_var).info_data <> '0' THEN
7920 
7921   -- g_xml_element_table(l_xml_element_count).tagvalue := to_date(g_summary_code_orid(l_summ_var).info_data);
7922 g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_date.canonical_to_date(g_summary_code_orid(l_summ_var).info_data),'yyyy-mm-dd');
7923       ELSE
7924          g_xml_element_table(l_xml_element_count).tagvalue := g_summary_code_orid(l_summ_var).info_data;
7925       END IF;
7926     g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25444"';
7927     g_xml_element_table(l_xml_element_count).tagtype := 'A';
7928     l_xml_element_count := l_xml_element_count + 1;
7929     EXIT;
7930     END IF;
7931     END LOOP;
7932     --
7933     --
7934 
7935     FOR l_summ_var IN 1..6 LOOP
7936     IF g_summary_code_orid(l_summ_var).orid_value = '25445' THEN
7937     g_xml_element_table(l_xml_element_count).tagname  := 'LonnsoppgaveTabelloppsettTilDato-datadef-25445';
7938       IF g_summary_code_orid(l_summ_var).info_datatype IN ('M','A','N','MC') THEN
7939         g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(g_summary_code_orid(l_summ_var).info_data));
7940       ELSIF g_summary_code_orid(l_summ_var).info_datatype = 'D' AND g_summary_code_orid(l_summ_var).info_data <> '0' THEN
7941 --       g_xml_element_table(l_xml_element_count).tagvalue := fnd_date.date_to_canonical(fnd_date.canonical_to_date(g_summary_code_orid(l_summ_var).info_data));
7942  g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_date.canonical_to_date(g_summary_code_orid(l_summ_var).info_data),'yyyy-mm-dd');
7943       ELSE
7944          g_xml_element_table(l_xml_element_count).tagvalue := g_summary_code_orid(l_summ_var).info_data;
7945       END IF;
7946     g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25445"';
7947     g_xml_element_table(l_xml_element_count).tagtype := 'A';
7948     l_xml_element_count := l_xml_element_count + 1;
7949     EXIT;
7950     END IF;
7951     END LOOP;
7952     --
7953     --
7954 
7955     FOR l_summ_var IN  1..6 LOOP
7956     IF g_summary_code_orid(l_summ_var).orid_value = '25446' THEN
7957     g_xml_element_table(l_xml_element_count).tagname  := 'LonnsoppgaveTabelloppsettBelop4-datadef-25446';
7958       IF g_summary_code_orid(l_summ_var).info_datatype IN ('M','A','N','MC') THEN
7959         g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(g_summary_code_orid(l_summ_var).info_data));
7960       ELSIF g_summary_code_orid(l_summ_var).info_datatype = 'D' AND g_summary_code_orid(l_summ_var).info_data <> '0' THEN
7961          g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_date.canonical_to_date(g_summary_code_orid(l_summ_var).info_data),'yyyy-mm-dd');
7962       ELSE
7963          g_xml_element_table(l_xml_element_count).tagvalue := g_summary_code_orid(l_summ_var).info_data;
7964       END IF;
7965     g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25446"';
7966     g_xml_element_table(l_xml_element_count).tagtype := 'A';
7967     l_xml_element_count := l_xml_element_count + 1;
7968     EXIT;
7969     END IF;
7970     END LOOP;
7971     --
7972     --
7973 
7974     FOR l_summ_var IN 1..6 LOOP
7975     IF g_summary_code_orid(l_summ_var).orid_value = '25447' THEN
7976     g_xml_element_table(l_xml_element_count).tagname  := 'LonnsoppgaveTabelloppsettBelop5-datadef-25447';
7977       IF g_summary_code_orid(l_summ_var).info_datatype IN ('M','A','N','MC') THEN
7978         g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(g_summary_code_orid(l_summ_var).info_data));
7979       ELSIF g_summary_code_orid(l_summ_var).info_datatype = 'D' AND g_summary_code_orid(l_summ_var).info_data <> '0' THEN
7980          g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_date.canonical_to_date(g_summary_code_orid(l_summ_var).info_data),'yyyy-mm-dd');
7981       ELSE
7982          g_xml_element_table(l_xml_element_count).tagvalue := g_summary_code_orid(l_summ_var).info_data;
7983       END IF;
7984     g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25447"';
7985     g_xml_element_table(l_xml_element_count).tagtype := 'A';
7986     l_xml_element_count := l_xml_element_count + 1;
7987     EXIT;
7988     END IF;
7989     END LOOP;
7990     --
7991     --
7992 
7993     FOR l_summ_var IN 1..6 LOOP
7994     IF g_summary_code_orid(l_summ_var).orid_value = '25448' THEN
7995     g_xml_element_table(l_xml_element_count).tagname  := 'LonnsoppgaveTabelloppsettAnnenOpplysning1-datadef-25448';
7996       IF g_summary_code_orid(l_summ_var).info_datatype IN ('M','A','N','MC') THEN
7997         g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(g_summary_code_orid(l_summ_var).info_data));
7998       ELSIF g_summary_code_orid(l_summ_var).info_datatype = 'D' AND g_summary_code_orid(l_summ_var).info_data <> '0' THEN
7999          g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_date.canonical_to_date(g_summary_code_orid(l_summ_var).info_data),'yyyy-mm-dd');
8000       ELSE
8001          g_xml_element_table(l_xml_element_count).tagvalue := g_summary_code_orid(l_summ_var).info_data;
8002       END IF;
8003     g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25448"';
8004     g_xml_element_table(l_xml_element_count).tagtype := 'A';
8005     l_xml_element_count := l_xml_element_count + 1;
8006     EXIT;
8007     END IF;
8008     END LOOP;
8009     --
8010     --
8011 
8012     FOR l_summ_var IN  1..6 LOOP
8013     IF g_summary_code_orid(l_summ_var).orid_value = '25449' THEN
8014     g_xml_element_table(l_xml_element_count).tagname  := 'LonnsoppgaveTabelloppsettAnnenOpplysning2-datadef-25449';
8015       IF g_summary_code_orid(l_summ_var).info_datatype IN ('M','A','N','MC') THEN
8016         g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(g_summary_code_orid(l_summ_var).info_data));
8017       ELSIF g_summary_code_orid(l_summ_var).info_datatype = 'D' AND g_summary_code_orid(l_summ_var).info_data <> '0' THEN
8018          g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_date.canonical_to_date(g_summary_code_orid(l_summ_var).info_data),'yyyy-mm-dd');
8019       ELSE
8020          g_xml_element_table(l_xml_element_count).tagvalue := g_summary_code_orid(l_summ_var).info_data;
8021       END IF;
8022     g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25449"';
8023     l_xml_element_count := l_xml_element_count + 1;
8024     EXIT;
8025     END IF;
8026     END LOOP;
8027     --
8028     --
8029 
8030     FOR l_summ_var IN 1..6 LOOP
8031     IF g_summary_code_orid(l_summ_var).orid_value = '25450' THEN
8032     g_xml_element_table(l_xml_element_count).tagname  := 'LonnsoppgaveTabelloppsettAnnenOpplysning3-datadef-25450';
8033       IF g_summary_code_orid(l_summ_var).info_datatype IN ('M','A','N','MC') THEN
8034         g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_number.canonical_to_number(g_summary_code_orid(l_summ_var).info_data));
8035       ELSIF g_summary_code_orid(l_summ_var).info_datatype = 'D' AND g_summary_code_orid(l_summ_var).info_data <> '0' THEN
8036          g_xml_element_table(l_xml_element_count).tagvalue := to_char(fnd_date.canonical_to_date(g_summary_code_orid(l_summ_var).info_data),'yyyy-mm-dd');
8037       ELSE
8038          g_xml_element_table(l_xml_element_count).tagvalue := NVL(g_summary_code_orid(l_summ_var).info_data,'0');
8039       END IF;
8040     g_xml_element_table(l_xml_element_count).tagattrb := 'orid="25450"';
8041     l_xml_element_count := l_xml_element_count + 1;
8042     EXIT;
8043     END IF;
8044     END LOOP;
8045     --
8046     --
8047     g_xml_element_table(l_xml_element_count).tagname  := 'OvrigeLTOKoder-grp-5806';
8048     g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
8049     l_xml_element_count := l_xml_element_count + 1;
8050 end if;
8051     --
8052     --
8053     END LOOP;
8054     --
8055     --
8056     g_xml_element_table(l_xml_element_count).tagname  := 'OvrigeKoder-grp-5779';
8057     g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
8058     l_xml_element_count := l_xml_element_count + 1;
8059     --
8060     --
8061     --
8062     --g_xml_element_table(l_xml_element_count).tagname  := 'PERSON';
8063 /*   g_xml_element_table(l_xml_element_count).tagname  := 'Arbeidstaker-grp-5771';
8064     g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
8065     l_xml_element_count := l_xml_element_count + 1;  */
8066   g_xml_element_table(l_xml_element_count).tagname  := 'Skjema';
8067   g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
8068   l_xml_element_count := l_xml_element_count + 1;
8069     --
8070  l_file_name := l_person_rec.employee_number||'_'||to_char(g_report_date,'ddmmyyyy')||'_EOY';
8071 /*  IF p_type in ('W','R') THEN
8072     l_file_name := l_file_name||'_'||p_type;
8073   END IF; */
8074   l_file_name := l_file_name||'.xml';
8075 
8076   write_file(l_file_name);
8077     END LOOP;
8078     --
8079    END LOOP;
8080 
8081  /* g_xml_element_table(l_xml_element_count).tagname  := 'Innledning-grp-5549';
8082   g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
8083   l_xml_element_count := l_xml_element_count + 1;
8084   --
8085   g_xml_element_table(l_xml_element_count).tagname  := 'Skjema';
8086   g_xml_element_table(l_xml_element_count).tagvalue := '_END_';
8087   l_xml_element_count := l_xml_element_count + 1; */
8088 
8089   --
8090  -- write_to_clob(p_xml);
8091  dbms_lob.writeappend(g_clob, LENGTH(l_end), l_end);
8092 fnd_file.put_line(fnd_file.log, 'l_end'||l_end);
8093   p_xml := g_clob;
8094   --
8095   hr_utility.set_location('Leaving ' || l_proc_name, 1000);
8096  END get_employee_certificate_xml;
8097 --
8098 --
8099 --
8100 END pay_no_eoy_archive;