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