DBA Data[Home] [Help]

PACKAGE BODY: APPS.PAY_JP_ISDF_SS_PKG

Source


1 package body pay_jp_isdf_ss_pkg as
2 /* $Header: pyjpisfs.pkb 120.12.12020000.4 2012/09/20 19:01:41 dduvvuri ship $ */
3 --
4 c_package  constant varchar2(30) := 'pay_jp_isdf_ss_pkg.';
5 g_debug    boolean := hr_utility.debug_enabled;
6 --
7 c_isdf_ins_elm          constant varchar2(80) := 'YEA_INS_PREM_EXM_DECLARE_INFO';
8 c_isdf_ins_elm_id       constant number := hr_jp_id_pkg.element_type_id(c_isdf_ins_elm, null, 'JP');
9 c_life_gen_iv_id        constant number := hr_jp_id_pkg.input_value_id(c_isdf_ins_elm_id, 'GEN_LIFE_INS_PREM');
10 c_life_pens_iv_id       constant number := hr_jp_id_pkg.input_value_id(c_isdf_ins_elm_id, 'INDIVIDUAL_PENSION_PREM');
11 c_nonlife_long_iv_id    constant number := hr_jp_id_pkg.input_value_id(c_isdf_ins_elm_id, 'LONG_TERM_NONLIFE_INS_PREM');
12 c_nonlife_short_iv_id   constant number := hr_jp_id_pkg.input_value_id(c_isdf_ins_elm_id, 'SHORT_TERM_NONLIFE_INS_PREM');
13 c_earthquake_iv_id      constant number := hr_jp_id_pkg.input_value_id(c_isdf_ins_elm_id, 'EARTHQUAKE_INS_PREM');
14 c_life_gen_new_iv_id    constant number := hr_jp_id_pkg.input_value_id(c_isdf_ins_elm_id, 'GEN_LIFE_INS_PREM_2012');
15 c_life_pens_new_iv_id   constant number := hr_jp_id_pkg.input_value_id(c_isdf_ins_elm_id, 'INDIVIDUAL_PENSION_PREM_2012');
16 c_care_med_new_iv_id    constant number := hr_jp_id_pkg.input_value_id(c_isdf_ins_elm_id, 'CARE_INS_PREM_2012');
17 
18 --
19 c_isdf_is_elm           constant varchar2(80) := 'YEA_INS_PREM_SPOUSE_SP_EXM_INFO';
20 c_isdf_is_elm_id        constant number := hr_jp_id_pkg.element_type_id(c_isdf_is_elm, null, 'JP');
21 c_social_iv_id          constant number := hr_jp_id_pkg.input_value_id(c_isdf_is_elm_id, 'DECLARE_SI_PREM');
22 c_mutual_aid_iv_id      constant number := hr_jp_id_pkg.input_value_id(c_isdf_is_elm_id, 'SMALL_COMPANY_MUTUAL_AID_PREM');
23 c_spouse_iv_id          constant number := hr_jp_id_pkg.input_value_id(c_isdf_is_elm_id, 'SPOUSE_INCOME');
24 c_national_pens_iv_id   constant number := hr_jp_id_pkg.input_value_id(c_isdf_is_elm_id, 'NATIONAL_PENSION_PREM');
25 --
26 c_com_calc_dpnt_elm_id  constant number := hr_jp_id_pkg.element_type_id('YEA_DEP_EXM_PROC', null, 'JP');
27 c_sp_type_iv_id         constant number := hr_jp_id_pkg.input_value_id(c_com_calc_dpnt_elm_id, 'SPOUSE_TYPE');
28 c_widow_type_iv_id      constant number := hr_jp_id_pkg.input_value_id(c_com_calc_dpnt_elm_id, 'WIDOW_TYPE');
29 --
30 c_com_itax_info_elm_id  constant number := hr_jp_id_pkg.element_type_id('COM_ITX_INFO', null, 'JP');
31 c_tax_type_iv_id        constant number := hr_jp_id_pkg.input_value_id(c_com_itax_info_elm_id, 'ITX_TYPE');
32 --
33 c_st_upd_date_2007      constant date := to_date('2007/01/01','YYYY/MM/DD');
34 c_st_upd_date_2012      constant date := to_date('2012/01/01','YYYY/MM/DD');
35 --
36 -- -------------------------------------------------------------------------
37 -- check_submission_period
38 -- -------------------------------------------------------------------------
39 function check_submission_period(
40   p_action_information_id in number)
41 return date
42 is
43 --
44   l_submission_date date;
45 --
46   cursor csr_pact
47   is
48   select /*+ ORDERED */
49          pact.submission_period_status,
50          pact.submission_start_date,
51          pact.submission_end_date
52   from   pay_jp_isdf_assact_v assact,
53          pay_assignment_actions paa,
54          pay_jp_isdf_pact_v pact
55   where  assact.action_information_id = p_action_information_id
56   and    paa.assignment_action_id = assact.assignment_action_id
57   and    pact.payroll_action_id = paa.payroll_action_id;
58 --
59   l_csr_pact csr_pact%rowtype;
60 --
61 begin
62 --
63   open csr_pact;
64   fetch csr_pact into l_csr_pact;
65   close csr_pact;
66 --
67   if l_csr_pact.submission_period_status = 'C' then
68     fnd_message.set_name('PAY','PAY_JP_DEF_PERIOD_CLOSED');
69     fnd_message.raise_error;
70   end if;
71 --
72   l_submission_date := sysdate;
73 --
74   if l_submission_date < nvl(l_csr_pact.submission_start_date,l_submission_date) then
75     fnd_message.set_name('PAY','PAY_JP_DEF_PERIOD_NOT_STARTED');
76     fnd_message.raise_error;
77   end if;
78 --
79   if l_submission_date > nvl(l_csr_pact.submission_end_date,l_submission_date) then
80     fnd_message.set_name('PAY','PAY_JP_DEF_PERIOD_EXPIRED');
81     fnd_message.raise_error;
82   end if;
83 --
84 return l_submission_date;
85 --
86 end check_submission_period;
87 --
88 -- -------------------------------------------------------------------------
89 -- get_spouse_type
90 -- -------------------------------------------------------------------------
91 function get_spouse_type(
92   p_assignment_id        in number,
93   p_effective_date       in date,
94   p_payroll_id           in number)
95 return varchar2
96 is
97 --
98   l_spouse_type pay_element_entry_values_f.screen_entry_value%type;
99   l_tax_type pay_element_entry_values_f.screen_entry_value%type;
100   l_bg_itax_dpnt_ref_type varchar2(150);
101 --
102   cursor csr_bg_itax_dpnt_ref_type
103   is
104   select /*+ ORDERED */
105          nvl(nvl(pp.prl_information1, hoi.org_information2),'CTR_EE')
106   from   pay_all_payrolls_f          pp,
107          hr_organization_information hoi
108   where  pp.payroll_id = p_payroll_id
109   and    p_effective_date
110          between pp.effective_start_date and pp.effective_end_date
111   and    hoi.organization_id(+) = pp.business_group_id
112   and    hoi.org_information_context(+) = 'JP_BUSINESS_GROUP_INFO';
113 --
114 begin
115 --
116   l_spouse_type := pay_jp_balance_pkg.get_entry_value_char(c_sp_type_iv_id,p_assignment_id,p_effective_date);
117 --
118   if l_spouse_type is null then
119   --
120     open csr_bg_itax_dpnt_ref_type;
121     fetch csr_bg_itax_dpnt_ref_type into l_bg_itax_dpnt_ref_type;
122     close csr_bg_itax_dpnt_ref_type;
123   --
124     if l_bg_itax_dpnt_ref_type = 'CEI' then
125      --
126       l_tax_type := pay_jp_balance_pkg.get_entry_value_char(c_tax_type_iv_id,p_assignment_id,p_effective_date);
127       l_spouse_type := per_jp_ctr_utility_pkg.get_itax_spouse_type(p_assignment_id,l_tax_type,p_effective_date);
128      --
129     end if;
130   --
131   end if;
132 --
133 return l_spouse_type;
134 --
135 end get_spouse_type;
136 --
137 -- -------------------------------------------------------------------------
138 -- get_widow_type
139 -- -------------------------------------------------------------------------
140 function get_widow_type(
141   p_assignment_id        in number,
142   p_effective_date       in date)
143 return varchar2
144 is
145   l_widow_type pay_element_entry_values_f.screen_entry_value%type;
146 begin
147 --
148   l_widow_type := pay_jp_balance_pkg.get_entry_value_char(c_widow_type_iv_id,p_assignment_id,p_effective_date);
149 --
150 return l_widow_type;
151 --
152 end get_widow_type;
153 --
154 -- -------------------------------------------------------------------------
155 -- set_form_pg_prompt
156 -- -------------------------------------------------------------------------
157 procedure set_form_pg_prompt(
158   p_action_information_id in number)
159 is
160 --
161   l_proc varchar2(80) := c_package||'get_formpg_prompt';
162 --
163   l_payroll_action_id number;
164   l_business_group_id number;
165   l_effective_date date;
166 --
167   l_legislation_code varchar2(2);
168   l_rate    pay_user_column_instances_f.value%type;
169   l_add_adj pay_user_column_instances_f.value%type;
170   l_lnonlife_calc3 pay_user_column_instances_f.value%type;
171   l_snonlife_calc3 pay_user_column_instances_f.value%type;
172   l_sp_calc_other_inc_calc_rate pay_user_column_instances_f.value%type;
173   l_dct_cnt number := 0;
174   l_nonlife_max pay_user_column_instances_f.value%type;
175   l_nonlife_max_2007 pay_user_column_instances_f.value%type;
176 --
177   type t_sp_calc_rec is record(
178     range_a pay_user_rows_f.row_low_range_or_name%type,
179     range_b pay_user_rows_f.row_low_range_or_name%type,
180     val     pay_user_column_instances_f.value%type);
181   type t_sp_calc_tbl is table of t_sp_calc_rec index by binary_integer;
182   l_sp_calc_tbl t_sp_calc_tbl;
183 --
184   cursor csr_pact
185   is
186   select /* +ORDERED */
187          ppa.payroll_action_id,
188          ppa.business_group_id,
189          ppa.effective_date
190   from   pay_jp_isdf_assact_v pjia,
191          pay_assignment_actions paa,
192          pay_payroll_actions ppa
193   where  pjia.action_information_id = p_action_information_id
194   and    paa.assignment_action_id = pjia.assignment_action_id
195   and    ppa.payroll_action_id = paa.payroll_action_id;
196 --
197   cursor csr_udt_row(
198            p_udt_name       in varchar2,
199            p_effective_date in date)
200   is
201   select /* +ORDERED */
202          put.user_table_id,
203          pur.user_row_id,
204          pur.display_sequence,
205          pur.row_low_range_or_name,
206          pur.row_high_range
207   from   pay_user_tables put,
208          pay_user_rows_f pur
209   where  put.user_table_name = p_udt_name
210   and    nvl(put.legislation_code,'X') = nvl(l_legislation_code,nvl(put.legislation_code,'X'))
211   and    pur.user_table_id = put.user_table_id
212   and    p_effective_date
213          between pur.effective_start_date and pur.effective_end_date
214   order by 3, fnd_number.canonical_to_number(pur.row_low_range_or_name);
215 --
216   cursor csr_udt_val(
217            p_user_table_id  in number,
218            p_row_id         in number,
219            p_effective_date in date)
220   is
221   select /* +ORDERED */
222          puc.user_column_name,
223          puci.value
224   from   pay_user_columns puc,
225          pay_user_column_instances_f puci
226   where  puc.user_table_id = p_user_table_id
227   and    puci.user_column_id = puc.user_column_id
228   and    puci.user_row_id = p_row_id
229   and    p_effective_date
230          between puci.effective_start_date and puci.effective_end_date
231   order by 1;
232 --
233   l_csr_udt_row csr_udt_row%rowtype;
234   l_csr_udt_val csr_udt_val%rowtype;
235 --
236 begin
237 --
238   if g_debug then
239     hr_utility.set_location(l_proc,0);
240   end if;
241 --
242   open csr_pact;
243   fetch csr_pact into l_payroll_action_id, l_business_group_id, l_effective_date;
244   close csr_pact;
245 --
246   -- cache in case payroll_action_id is same.
247   if g_payroll_action_id is null
248   or (g_payroll_action_id <> l_payroll_action_id
249      and l_payroll_action_id is not null) then
250   --
251     g_payroll_action_id := l_payroll_action_id;
252     g_business_group_id := l_business_group_id;
253     g_effective_date  := l_effective_date;
254   --
255     l_legislation_code := hr_jp_id_pkg.legislation_code(g_business_group_id);
256   --
257     --
258     -- life_ins prompt fetch
259     --
260     l_effective_date := g_effective_date;
261     --
262     open csr_udt_row(c_life_gen_calc_udt,l_effective_date);
263     loop
264     --
265       fetch csr_udt_row into l_csr_udt_row;
266       exit when csr_udt_row%notfound;
267     --
268       if csr_udt_row%rowcount = 1 then
269       --
270         g_life_range1b := l_csr_udt_row.row_high_range;
271         g_life_range1b := to_char(to_number(g_life_range1b),fnd_currency.get_format_mask('JPY',40));
272       --
273       elsif csr_udt_row%rowcount = 2 then
274       --
275         g_life_range2a := l_csr_udt_row.row_low_range_or_name;
276         g_life_range2b := l_csr_udt_row.row_high_range;
277         g_life_range2a := to_char(to_number(g_life_range2a),fnd_currency.get_format_mask('JPY',40));
278         g_life_range2b := to_char(to_number(g_life_range2b),fnd_currency.get_format_mask('JPY',40));
279       --
280         open csr_udt_val(l_csr_udt_row.user_table_id,l_csr_udt_row.user_row_id,l_effective_date);
281         loop
282         --
283           fetch csr_udt_val into l_csr_udt_val;
284           exit when csr_udt_val%notfound;
285         --
286           if l_csr_udt_val.user_column_name = c_add_adj_udtcol then
287             l_add_adj := l_csr_udt_val.value;
288           elsif l_csr_udt_val.user_column_name = c_rate_udtcol then
289             l_rate := l_csr_udt_val.value;
290           end if;
291         --
292         end loop;
293         close csr_udt_val;
294       --
295         if fnd_number.canonical_to_number(l_rate) = 0.5 then
296           l_rate := '1/2';
297         elsif fnd_number.canonical_to_number(l_rate) = 0.25 then
298           l_rate := '1/4';
299         end if;
300       --
301         g_life_calc2 := 'x '||l_rate||' + '||to_char(to_number(l_add_adj),fnd_currency.get_format_mask('JPY',40));
302       --
303       elsif csr_udt_row%rowcount = 3 then
304       --
305         g_life_range3a := l_csr_udt_row.row_low_range_or_name;
306         g_life_range3b := l_csr_udt_row.row_high_range;
307         g_life_range3a := to_char(to_number(g_life_range3a),fnd_currency.get_format_mask('JPY',40));
308         g_life_range3b := to_char(to_number(g_life_range3b),fnd_currency.get_format_mask('JPY',40));
309       --
310         open csr_udt_val(l_csr_udt_row.user_table_id,l_csr_udt_row.user_row_id,l_effective_date);
311         loop
312         --
313           fetch csr_udt_val into l_csr_udt_val;
314           exit when csr_udt_val%notfound;
315         --
316           if l_csr_udt_val.user_column_name = c_add_adj_udtcol then
317             l_add_adj := l_csr_udt_val.value;
318           elsif l_csr_udt_val.user_column_name = c_rate_udtcol then
319             l_rate := l_csr_udt_val.value;
320           end if;
321         --
322         end loop;
323         close csr_udt_val;
324       --
325         if fnd_number.canonical_to_number(l_rate) = 0.5 then
326           l_rate := '1/2';
327         elsif fnd_number.canonical_to_number(l_rate) = 0.25 then
328           l_rate := '1/4';
329         end if;
330       --
331         g_life_calc3 := 'x '||l_rate||' + '||to_char(to_number(l_add_adj),fnd_currency.get_format_mask('JPY',40));
332       --
333       elsif csr_udt_row%rowcount = 4 then
334       --
335         g_life_range4a := l_csr_udt_row.row_low_range_or_name;
336         g_life_range4a := to_char(to_number(g_life_range4a),fnd_currency.get_format_mask('JPY',40));
337       --
338         open csr_udt_val(l_csr_udt_row.user_table_id,l_csr_udt_row.user_row_id,l_effective_date);
339         loop
340         --
341           fetch csr_udt_val into l_csr_udt_val;
342           exit when csr_udt_val%notfound;
343         --
344           if l_csr_udt_val.user_column_name = c_add_adj_udtcol then
345             l_add_adj := l_csr_udt_val.value;
346           end if;
347         --
348         end loop;
349         close csr_udt_val;
350       --
351         g_life_calc4 := l_add_adj;
352       --
353       end if;
354     --
355     end loop;
356     close csr_udt_row;
357   --
358     g_life_gen_max := g_life_calc4;
359     g_life_pens_max := g_life_calc4;
360     g_life_ins_max := to_char(to_number(g_life_gen_max) + to_number(g_life_pens_max));
361   --
362     g_life_calc4 := to_char(to_number(g_life_calc4),fnd_currency.get_format_mask('JPY',40));
363     g_life_gen_max := to_char(to_number(g_life_gen_max),fnd_currency.get_format_mask('JPY',40));
364     g_life_pens_max := to_char(to_number(g_life_pens_max),fnd_currency.get_format_mask('JPY',40));
365     g_life_ins_max := to_char(to_number(g_life_ins_max),fnd_currency.get_format_mask('JPY',40));
366   --
367     --
368     -- nonlife_ins prompt fetch
369     --
370     --  + long term
371     --
372     l_effective_date := g_effective_date;
373     --
374     open csr_udt_row(c_nonlife_long_calc_udt,l_effective_date);
375     loop
376     --
377       fetch csr_udt_row into l_csr_udt_row;
378       exit when csr_udt_row%notfound;
379     --
380       if csr_udt_row%rowcount = 1 then
381       --
382         g_lnonlife_range1b := l_csr_udt_row.row_high_range;
383         g_lnonlife_range1b := to_char(to_number(g_lnonlife_range1b),fnd_currency.get_format_mask('JPY',40));
384       --
385       elsif csr_udt_row%rowcount = 2 then
386       --
387         open csr_udt_val(l_csr_udt_row.user_table_id,l_csr_udt_row.user_row_id,l_effective_date);
388         loop
389         --
390           fetch csr_udt_val into l_csr_udt_val;
391           exit when csr_udt_val%notfound;
392         --
393           if l_csr_udt_val.user_column_name = c_add_adj_udtcol then
394             l_add_adj := l_csr_udt_val.value;
395           elsif l_csr_udt_val.user_column_name = c_rate_udtcol then
396             l_rate := l_csr_udt_val.value;
397           end if;
398         --
399         end loop;
400         close csr_udt_val;
401       --
402         if fnd_number.canonical_to_number(l_rate) = 0.5 then
403           l_rate := '1/2';
404         elsif fnd_number.canonical_to_number(l_rate) = 0.25 then
405           l_rate := '1/4';
406         end if;
407       --
408         g_lnonlife_calc2 := 'x '||l_rate||' + '||to_char(to_number(l_add_adj),fnd_currency.get_format_mask('JPY',40));
409       --
410       elsif csr_udt_row%rowcount = 3 then
411       --
412         open csr_udt_val(l_csr_udt_row.user_table_id,l_csr_udt_row.user_row_id,l_effective_date);
413         loop
414         --
415           fetch csr_udt_val into l_csr_udt_val;
416           exit when csr_udt_val%notfound;
417         --
418           if l_csr_udt_val.user_column_name = c_add_adj_udtcol then
419             l_add_adj := l_csr_udt_val.value;
420           end if;
421         --
422         end loop;
423         close csr_udt_val;
424       --
425         l_lnonlife_calc3 := l_add_adj;
426       --
427       end if;
428     --
429     end loop;
430     close csr_udt_row;
431     --
432     --  + short term
433     --
434     -- value always should be fetched.
435     if g_effective_date >= c_st_upd_date_2007 then
436     --
437       l_effective_date := c_st_upd_date_2007 - 1;
438     --
439     else
440     --
441       l_effective_date := g_effective_date;
442     --
443     end if;
444     --
445     open csr_udt_row(c_nonlife_short_calc_udt,l_effective_date);
446     loop
447     --
448       fetch csr_udt_row into l_csr_udt_row;
449       exit when csr_udt_row%notfound;
450     --
451       if csr_udt_row%rowcount = 1 then
452       --
453         g_snonlife_range1b := l_csr_udt_row.row_high_range;
454         g_snonlife_range1b := to_char(to_number(g_snonlife_range1b),fnd_currency.get_format_mask('JPY',40));
455       --
456       elsif csr_udt_row%rowcount = 2 then
457       --
458         open csr_udt_val(l_csr_udt_row.user_table_id,l_csr_udt_row.user_row_id,l_effective_date);
459         loop
460         --
461           fetch csr_udt_val into l_csr_udt_val;
462           exit when csr_udt_val%notfound;
463         --
464           if l_csr_udt_val.user_column_name = c_add_adj_udtcol then
465             l_add_adj := l_csr_udt_val.value;
466           elsif l_csr_udt_val.user_column_name = c_rate_udtcol then
467             l_rate := l_csr_udt_val.value;
468           end if;
469         --
470         end loop;
471         close csr_udt_val;
472       --
473         if fnd_number.canonical_to_number(l_rate) = 0.5 then
474           l_rate := '1/2';
475         elsif fnd_number.canonical_to_number(l_rate) = 0.25 then
476           l_rate := '1/4';
477         end if;
478       --
479         g_snonlife_calc2 := 'x '||l_rate||' + '||to_char(to_number(l_add_adj),fnd_currency.get_format_mask('JPY',40));
480       --
481       elsif csr_udt_row%rowcount = 3 then
482       --
483         open csr_udt_val(l_csr_udt_row.user_table_id,l_csr_udt_row.user_row_id,l_effective_date);
484         loop
485         --
486           fetch csr_udt_val into l_csr_udt_val;
487           exit when csr_udt_val%notfound;
488         --
489           if l_csr_udt_val.user_column_name = c_add_adj_udtcol then
490             l_add_adj := l_csr_udt_val.value;
491           end if;
492         --
493         end loop;
494         close csr_udt_val;
495       --
496         l_snonlife_calc3 := l_add_adj;
497       --
498       end if;
499     --
500     end loop;
501     close csr_udt_row;
502     --
503     --  + earthquake
504     --
505     if g_effective_date >= c_st_upd_date_2007 then
506     --
507       l_effective_date := g_effective_date;
508     --
509     -- value always should be fetched.
510     else
511     --
512       l_effective_date := c_st_upd_date_2007;
513     --
514     end if;
515     --
516     if c_earthquake_max is null then
517       c_earthquake_max := to_number(pay_jp_report_pkg.get_udt_value(
518                                      g_business_group_id,
519                                      c_yea_calc_max_udt,
520                                      c_max_udtcol,
521                                      c_earthquake_udtrow,
522                                      l_effective_date));
523     end if;
524     --
525     g_earthquake_max := c_earthquake_max;
526     g_earthquake_max := to_char(to_number(g_earthquake_max),fnd_currency.get_format_mask('JPY',40));
527     --
528     g_lnonlife_year := to_char(c_nonlife_long_year);
529     g_lnonlife_max := l_lnonlife_calc3;
530     g_snonlife_max := l_snonlife_calc3;
531     g_lnonlife_max := to_char(to_number(g_lnonlife_max),fnd_currency.get_format_mask('JPY',40));
532     g_snonlife_max := to_char(to_number(g_snonlife_max),fnd_currency.get_format_mask('JPY',40));
533     --
534     --  + nonlife dct
535     --
536     -- value always should be fetched.
537     if g_effective_date >= c_st_upd_date_2007 then
538     --
539       l_effective_date := c_st_upd_date_2007 - 1;
540     --
541     else
542     --
543       l_effective_date := g_effective_date;
544     --
545     end if;
546     --
547     l_nonlife_max := to_number(pay_jp_report_pkg.get_udt_value(
548                                  g_business_group_id,
549                                  c_yea_calc_max_udt,
550                                  c_max_udtcol,
551                                  c_nonlife_udtrow,
552                                  l_effective_date));
553     --
554     -- value always should be fetched.
555     if g_effective_date >= c_st_upd_date_2007 then
556     --
557       l_effective_date := g_effective_date;
558     --
559     else
560     --
561       l_effective_date := c_st_upd_date_2007 - 1;
562     --
563     end if;
564     --
565     l_nonlife_max_2007 := to_number(pay_jp_report_pkg.get_udt_value(
566                                       g_business_group_id,
567                                       c_yea_calc_max_udt,
568                                       c_max_udtcol,
569                                       c_nonlife_udtrow,
570                                       l_effective_date));
571     --
572     -- need always reset for each time
573     if g_effective_date >= c_st_upd_date_2007 then
574     --
575       c_nonlife_max := l_nonlife_max_2007;
576     --
577     else
578     --
579       c_nonlife_max := l_nonlife_max;
580     --
581     end if;
582     --
583     g_nonlife_max := l_nonlife_max;
584     g_nonlife_max_2007 := l_nonlife_max_2007;
585     g_nonlife_max := to_char(to_number(g_nonlife_max),fnd_currency.get_format_mask('JPY',40));
586     g_nonlife_max_2007 := to_char(to_number(g_nonlife_max_2007),fnd_currency.get_format_mask('JPY',40));
587   --
588     --
589     -- spouse prompt fetch
590     --
591     g_sp_calc_unit := c_sp_calc_unit;
592     --
593     l_effective_date := g_effective_date;
594     --
595     if c_emp_income_max is null then
596     --
597       c_emp_income_max := to_number(pay_jp_report_pkg.get_udt_value(
598                                       g_business_group_id,
599                                       c_yea_calc_max_udt,
600                                       c_max_udtcol,
601                                       c_sp_emp_income_udtrow,
602                                       l_effective_date));
603     end if;
604     --
605     g_sp_emp_inc_max := c_emp_income_max/c_sp_calc_unit;
606     g_sp_emp_inc_max := to_char(to_number(g_sp_emp_inc_max),fnd_currency.get_format_mask('JPY',40));
607   --
608     l_effective_date := g_effective_date;
609     --
610     if c_inc_spouse_dct_max is null then
611     --
612       c_inc_spouse_dct_max := to_number(pay_jp_report_pkg.get_udt_value(
613                                          g_business_group_id,
614                                          c_yea_calc_max_udt,
615                                          c_max_udtcol,
616                                          c_sp_dctable_sp_income_udtrow,
617                                          l_effective_date));
618     end if;
619     --
620     g_sp_spdct_max := c_inc_spouse_dct_max/c_sp_calc_unit;
621     g_sp_spdct_max := to_char(to_number(g_sp_spdct_max),fnd_currency.get_format_mask('JPY',40));
622     --
623     l_effective_date := g_effective_date;
624     --
625     if c_spouse_income_max is null then
626       c_spouse_income_max := to_number(pay_jp_report_pkg.get_udt_value(
627                                          g_business_group_id,
628                                          c_yea_calc_max_udt,
629                                          c_max_udtcol,
630                                          c_sp_spouse_income_udtrow,
631                                          l_effective_date));
632     end if;
633     --
634     g_sp_spinc_max := c_spouse_income_max/c_sp_calc_unit;
635     g_sp_spinc_max := to_char(to_number(g_sp_spinc_max),fnd_currency.get_format_mask('JPY',40));
636   --
637     --
638     -- spouse_calc prompt fetch
639     --
640     g_sp_calc_exp1b := c_sp_earned_inc_exp;
641     g_sp_calc_exp1b_fmt := to_char(g_sp_calc_exp1b);
642     g_sp_calc_exp1b_fmt := to_char(to_number(g_sp_calc_exp1b_fmt),fnd_currency.get_format_mask('JPY',40));
643     g_sp_calc_cal1 := to_char(c_sp_calc_earned_inc_calc1);
644     --
645     if fnd_number.canonical_to_number(c_sp_calc_other_inc_calc_rate) = 0.5 then
646       l_sp_calc_other_inc_calc_rate := '1/2';
647     elsif fnd_number.canonical_to_number(c_sp_calc_other_inc_calc_rate) = 0.25 then
648       l_sp_calc_other_inc_calc_rate := '1/4';
649     end if;
650     --
651     g_sp_calc_cal6 := 'x '||l_sp_calc_other_inc_calc_rate;
652   --
653     l_effective_date := g_effective_date;
654     --
655     open csr_udt_row(c_spouse_calc_udt,l_effective_date);
656     loop
657     --
658       fetch csr_udt_row into l_csr_udt_row;
659       exit when csr_udt_row%notfound;
660     --
661       if fnd_number.canonical_to_number(l_csr_udt_row.row_low_range_or_name) > c_inc_spouse_dct_max then
662       --
663         l_dct_cnt := l_dct_cnt + 1;
664         l_sp_calc_tbl(l_dct_cnt).range_a := l_csr_udt_row.row_low_range_or_name;
665         l_sp_calc_tbl(l_dct_cnt).range_b := l_csr_udt_row.row_high_range;
666       --
667         open csr_udt_val(l_csr_udt_row.user_table_id,l_csr_udt_row.user_row_id,l_effective_date);
668         loop
669         --
670           fetch csr_udt_val into l_csr_udt_val;
671           exit when csr_udt_val%notfound;
672         --
673           if l_csr_udt_val.user_column_name = c_dct_udtcol then
674             --l_sp_calc_tbl(l_dct_cnt).val := to_char(fnd_number.canonical_to_number(l_csr_udt_val.value)/c_sp_calc_unit);
675             l_sp_calc_tbl(l_dct_cnt).val := l_csr_udt_val.value;
676           end if;
677         --
678         end loop;
679         close csr_udt_val;
680       --
681       end if;
682     --
683     end loop;
684     close csr_udt_row;
685   --
686     if l_sp_calc_tbl.count >= 9 then
687     --
688       g_sp_calc_dct_range1a := l_sp_calc_tbl(1).range_a;
689       g_sp_calc_dct_range1b := l_sp_calc_tbl(1).range_b;
690       g_sp_calc_dct1        := l_sp_calc_tbl(1).val;
691       g_sp_calc_dct_range2a := l_sp_calc_tbl(2).range_a;
692       g_sp_calc_dct_range2b := l_sp_calc_tbl(2).range_b;
693       g_sp_calc_dct2        := l_sp_calc_tbl(2).val;
694       g_sp_calc_dct_range3a := l_sp_calc_tbl(3).range_a;
695       g_sp_calc_dct_range3b := l_sp_calc_tbl(3).range_b;
696       g_sp_calc_dct3        := l_sp_calc_tbl(3).val;
697       g_sp_calc_dct_range4a := l_sp_calc_tbl(4).range_a;
698       g_sp_calc_dct_range4b := l_sp_calc_tbl(4).range_b;
699       g_sp_calc_dct4        := l_sp_calc_tbl(4).val;
700       g_sp_calc_dct_range5a := l_sp_calc_tbl(5).range_a;
701       g_sp_calc_dct_range5b := l_sp_calc_tbl(5).range_b;
702       g_sp_calc_dct5        := l_sp_calc_tbl(5).val;
703       g_sp_calc_dct_range6a := l_sp_calc_tbl(6).range_a;
704       g_sp_calc_dct_range6b := l_sp_calc_tbl(6).range_b;
705       g_sp_calc_dct6        := l_sp_calc_tbl(6).val;
706       g_sp_calc_dct_range7a := l_sp_calc_tbl(7).range_a;
707       g_sp_calc_dct_range7b := l_sp_calc_tbl(7).range_b;
708       g_sp_calc_dct7        := l_sp_calc_tbl(7).val;
709       g_sp_calc_dct_range8a := l_sp_calc_tbl(8).range_a;
710       g_sp_calc_dct_range8b := l_sp_calc_tbl(8).range_b;
711       g_sp_calc_dct8        := l_sp_calc_tbl(8).val;
712       g_sp_calc_dct_range9a := l_sp_calc_tbl(9).range_a;
713       g_sp_calc_dct_range9b := l_sp_calc_tbl(9).range_b;
714       g_sp_calc_dct9        := l_sp_calc_tbl(9).val;
715     --
716       g_sp_calc_dct_range1a := to_char(to_number(g_sp_calc_dct_range1a),fnd_currency.get_format_mask('JPY',40));
717       g_sp_calc_dct_range1b := to_char(to_number(g_sp_calc_dct_range1b),fnd_currency.get_format_mask('JPY',40));
718       g_sp_calc_dct1        := to_char(to_number(g_sp_calc_dct1),fnd_currency.get_format_mask('JPY',40));
719       g_sp_calc_dct_range2a := to_char(to_number(g_sp_calc_dct_range2a),fnd_currency.get_format_mask('JPY',40));
720       g_sp_calc_dct_range2b := to_char(to_number(g_sp_calc_dct_range2b),fnd_currency.get_format_mask('JPY',40));
721       g_sp_calc_dct2        := to_char(to_number(g_sp_calc_dct2),fnd_currency.get_format_mask('JPY',40));
722       g_sp_calc_dct_range3a := to_char(to_number(g_sp_calc_dct_range3a),fnd_currency.get_format_mask('JPY',40));
723       g_sp_calc_dct_range3b := to_char(to_number(g_sp_calc_dct_range3b),fnd_currency.get_format_mask('JPY',40));
724       g_sp_calc_dct3        := to_char(to_number(g_sp_calc_dct3),fnd_currency.get_format_mask('JPY',40));
725       g_sp_calc_dct_range4a := to_char(to_number(g_sp_calc_dct_range4a),fnd_currency.get_format_mask('JPY',40));
726       g_sp_calc_dct_range4b := to_char(to_number(g_sp_calc_dct_range4b),fnd_currency.get_format_mask('JPY',40));
727       g_sp_calc_dct4        := to_char(to_number(g_sp_calc_dct4),fnd_currency.get_format_mask('JPY',40));
728       g_sp_calc_dct_range5a := to_char(to_number(g_sp_calc_dct_range5a),fnd_currency.get_format_mask('JPY',40));
729       g_sp_calc_dct_range5b := to_char(to_number(g_sp_calc_dct_range5b),fnd_currency.get_format_mask('JPY',40));
730       g_sp_calc_dct5        := to_char(to_number(g_sp_calc_dct5),fnd_currency.get_format_mask('JPY',40));
731       g_sp_calc_dct_range6a := to_char(to_number(g_sp_calc_dct_range6a),fnd_currency.get_format_mask('JPY',40));
732       g_sp_calc_dct_range6b := to_char(to_number(g_sp_calc_dct_range6b),fnd_currency.get_format_mask('JPY',40));
733       g_sp_calc_dct6        := to_char(to_number(g_sp_calc_dct6),fnd_currency.get_format_mask('JPY',40));
734       g_sp_calc_dct_range7a := to_char(to_number(g_sp_calc_dct_range7a),fnd_currency.get_format_mask('JPY',40));
735       g_sp_calc_dct_range7b := to_char(to_number(g_sp_calc_dct_range7b),fnd_currency.get_format_mask('JPY',40));
736       g_sp_calc_dct7        := to_char(to_number(g_sp_calc_dct7),fnd_currency.get_format_mask('JPY',40));
737       g_sp_calc_dct_range8a := to_char(to_number(g_sp_calc_dct_range8a),fnd_currency.get_format_mask('JPY',40));
738       g_sp_calc_dct_range8b := to_char(to_number(g_sp_calc_dct_range8b),fnd_currency.get_format_mask('JPY',40));
739       g_sp_calc_dct8        := to_char(to_number(g_sp_calc_dct8),fnd_currency.get_format_mask('JPY',40));
740       g_sp_calc_dct_range9a := to_char(to_number(g_sp_calc_dct_range9a),fnd_currency.get_format_mask('JPY',40));
741       g_sp_calc_dct_range9b := to_char(to_number(g_sp_calc_dct_range9b),fnd_currency.get_format_mask('JPY',40));
742       g_sp_calc_dct9        := to_char(to_number(g_sp_calc_dct9),fnd_currency.get_format_mask('JPY',40));
743     --
744     end if;
745   --
746     fnd_message.set_name('PAY','PAY_JP_ISDF_P_LIFE_RANGE_FIRST');
747     fnd_message.set_token('RANGE_B',g_life_range1b);
748     g_msg_life_range1 := fnd_message.get;
749   --
750     fnd_message.set_name('PAY','PAY_JP_ISDF_P_LIFE_RANGE_MID');
751     fnd_message.set_token('RANGE_A',g_life_range2a);
752     fnd_message.set_token('RANGE_B',g_life_range2b);
753     g_msg_life_range2 := fnd_message.get;
754   --
755     fnd_message.set_name('PAY','PAY_JP_ISDF_P_LIFE_RANGE_MID');
756     fnd_message.set_token('RANGE_A',g_life_range3a);
757     fnd_message.set_token('RANGE_B',g_life_range3b);
758     g_msg_life_range3 := fnd_message.get;
759   --
760     fnd_message.set_name('PAY','PAY_JP_ISDF_P_LIFE_RANGE_LAST');
761     fnd_message.set_token('RANGE_A',g_life_range4a);
762     g_msg_life_range4 := fnd_message.get;
763   --
764     fnd_message.set_name('PAY','PAY_JP_ISDF_P_LIFE_DCT_MID');
765     fnd_message.set_token('CALC',g_life_calc2);
766     g_msg_life_calc2 := fnd_message.get;
767   --
768     fnd_message.set_name('PAY','PAY_JP_ISDF_P_LIFE_DCT_MID');
769     fnd_message.set_token('CALC',g_life_calc3);
770     g_msg_life_calc3 := fnd_message.get;
771   --
772     fnd_message.set_name('PAY','PAY_JP_ISDF_P_LIFE_DCT_LAST');
773     fnd_message.set_token('CALC',g_life_calc4);
774     g_msg_life_calc4 := fnd_message.get;
775   --
776     fnd_message.set_name('PAY','PAY_JP_ISDF_P_MAX');
777     fnd_message.set_token('MAX_VAL',g_life_gen_max);
778     g_msg_life_gen_max := fnd_message.get;
779   --
780     fnd_message.set_name('PAY','PAY_JP_ISDF_P_MAX');
781     fnd_message.set_token('MAX_VAL',g_life_pens_max);
782     g_msg_life_pens_max := fnd_message.get;
783   --
784     fnd_message.set_name('PAY','PAY_JP_ISDF_P_MAX');
785     fnd_message.set_token('MAX_VAL',g_life_ins_max);
786     g_msg_life_ins_max := fnd_message.get;
787   --
788     fnd_message.set_name('PAY','PAY_JP_ISDF_P_NONLIFE_2007');
789     g_msg_nonlife_2007 := fnd_message.get;
790   --
791     fnd_message.set_name('PAY','PAY_JP_ISDF_P_NONLIFE_AP_2007');
792     g_msg_nonlife_ap_2007 := fnd_message.get;
793   --
794     fnd_message.set_name('PAY','PAY_JP_ISDF_P_EQNONLIFE_S_2007');
795     g_msg_eqnonlife_s_2007 := fnd_message.get;
796   --
797     fnd_message.set_name('PAY','PAY_JP_ISDF_P_LNONLIFE_S_2007');
798     g_msg_lnonlife_s_2007 := fnd_message.get;
799   --
800     fnd_message.set_name('PAY','PAY_JP_ISDF_P_LNONLIFE');
801     fnd_message.set_token('YEAR',g_lnonlife_year);
802     g_msg_lnonlife := fnd_message.get;
803   --
804     fnd_message.set_name('PAY','PAY_JP_ISDF_P_EQNONLIFE_2007');
805     g_msg_eqnonlife_2007 := fnd_message.get;
806   --
807     fnd_message.set_name('PAY','PAY_JP_ISDF_P_LNONLIFE_2007');
808     g_msg_lnonlife_2007 := fnd_message.get;
809   --
810     fnd_message.set_name('PAY','PAY_JP_ISDF_P_LNONLIFE_DCT');
811     fnd_message.set_token('RANGE_B',g_lnonlife_range1b);
812     fnd_message.set_token('CALC',g_lnonlife_calc2);
813     g_msg_lnonlife_dct := fnd_message.get;
814   --
815     fnd_message.set_name('PAY','PAY_JP_ISDF_P_SNONLIFE_DCT');
816     fnd_message.set_token('RANGE_B',g_snonlife_range1b);
817     fnd_message.set_token('CALC',g_snonlife_calc2);
818     g_msg_snonlife_dct := fnd_message.get;
819   --
820     fnd_message.set_name('PAY','PAY_JP_ISDF_P_LNONL_DCT_2007');
821     fnd_message.set_token('RANGE_B',g_lnonlife_range1b);
822     fnd_message.set_token('CALC',g_lnonlife_calc2);
823     g_msg_lnonlife_dct_2007 := fnd_message.get;
824   --
825     fnd_message.set_name('PAY','PAY_JP_ISDF_P_MAX');
826     fnd_message.set_token('MAX_VAL',g_earthquake_max);
827     g_msg_earthquake_max := fnd_message.get;
828   --
829     fnd_message.set_name('PAY','PAY_JP_ISDF_P_MAX');
830     fnd_message.set_token('MAX_VAL',g_lnonlife_max);
831     g_msg_nonlife_long_max := fnd_message.get;
832   --
833     fnd_message.set_name('PAY','PAY_JP_ISDF_P_MAX');
834     fnd_message.set_token('MAX_VAL',g_snonlife_max);
835     g_msg_nonlife_short_max := fnd_message.get;
836   --
837     fnd_message.set_name('PAY','PAY_JP_ISDF_P_MAX');
838     fnd_message.set_token('MAX_VAL',g_nonlife_max);
839     	g_msg_nonlife_ins_max := fnd_message.get;
840   --
841     fnd_message.set_name('PAY','PAY_JP_ISDF_P_MAX');
842     fnd_message.set_token('MAX_VAL',g_nonlife_max_2007);
843     g_msg_nonlife_ins_max_2007 := fnd_message.get;
844   --
845     fnd_message.set_name('PAY','PAY_JP_ISDF_P_SP_EMP_INC_MAX');
846     fnd_message.set_token('EMP_INC_MAX',g_sp_emp_inc_max);
847     g_msg_sp_emp_inc_max := fnd_message.get;
848   --
849     fnd_message.set_name('PAY','PAY_JP_ISDF_P_SP_SP_INC_MAX');
850     fnd_message.set_token('SP_DCT_MAX',g_sp_spdct_max);
851     fnd_message.set_token('SP_INC_MAX',g_sp_spinc_max);
852     g_msg_sp_sp_inc_max := fnd_message.get;
853   --
854     fnd_message.set_name('PAY','PAY_JP_ISDF_P_SP_CALC_EXP1');
855     fnd_message.set_token('SP_CALC_EXP1',g_sp_calc_cal1);
856     g_msg_sp_calc_cal1 := fnd_message.get;
857   --
858     fnd_message.set_name('PAY','PAY_JP_ISDF_P_SP_CALC_EXP6');
859     fnd_message.set_token('SP_CALC_EXP6',g_sp_calc_cal6);
860     g_msg_sp_calc_cal6 := fnd_message.get;
861   --
862     fnd_message.set_name('PAY','PAY_JP_ISDF_P_SP_DCT_RANGE');
863     fnd_message.set_token('RANGE_A',g_sp_calc_dct_range1a);
864     fnd_message.set_token('RANGE_B',g_sp_calc_dct_range1b);
865     g_msg_sp_calc_dct_range1 := fnd_message.get;
866   --
867     fnd_message.set_name('PAY','PAY_JP_ISDF_P_SP_DCT_RANGE');
868     fnd_message.set_token('RANGE_A',g_sp_calc_dct_range2a);
869     fnd_message.set_token('RANGE_B',g_sp_calc_dct_range2b);
870     g_msg_sp_calc_dct_range2 := fnd_message.get;
871   --
872     fnd_message.set_name('PAY','PAY_JP_ISDF_P_SP_DCT_RANGE');
873     fnd_message.set_token('RANGE_A',g_sp_calc_dct_range3a);
874     fnd_message.set_token('RANGE_B',g_sp_calc_dct_range3b);
875     g_msg_sp_calc_dct_range3 := fnd_message.get;
876   --
877     fnd_message.set_name('PAY','PAY_JP_ISDF_P_SP_DCT_RANGE');
878     fnd_message.set_token('RANGE_A',g_sp_calc_dct_range4a);
879     fnd_message.set_token('RANGE_B',g_sp_calc_dct_range4b);
880     g_msg_sp_calc_dct_range4 := fnd_message.get;
881   --
882     fnd_message.set_name('PAY','PAY_JP_ISDF_P_SP_DCT_RANGE');
883     fnd_message.set_token('RANGE_A',g_sp_calc_dct_range5a);
884     fnd_message.set_token('RANGE_B',g_sp_calc_dct_range5b);
885     g_msg_sp_calc_dct_range5 := fnd_message.get;
886   --
887     fnd_message.set_name('PAY','PAY_JP_ISDF_P_SP_DCT_RANGE');
888     fnd_message.set_token('RANGE_A',g_sp_calc_dct_range6a);
889     fnd_message.set_token('RANGE_B',g_sp_calc_dct_range6b);
890     g_msg_sp_calc_dct_range6 := fnd_message.get;
891   --
892     fnd_message.set_name('PAY','PAY_JP_ISDF_P_SP_DCT_RANGE');
893     fnd_message.set_token('RANGE_A',g_sp_calc_dct_range7a);
894     fnd_message.set_token('RANGE_B',g_sp_calc_dct_range7b);
895     g_msg_sp_calc_dct_range7 := fnd_message.get;
896   --
897     fnd_message.set_name('PAY','PAY_JP_ISDF_P_SP_DCT_RANGE');
898     fnd_message.set_token('RANGE_A',g_sp_calc_dct_range8a);
899     fnd_message.set_token('RANGE_B',g_sp_calc_dct_range8b);
900     g_msg_sp_calc_dct_range8 := fnd_message.get;
901   --
902     fnd_message.set_name('PAY','PAY_JP_ISDF_P_SP_DCT_RANGE');
903     fnd_message.set_token('RANGE_A',g_sp_calc_dct_range9a);
904     fnd_message.set_token('RANGE_B',g_sp_calc_dct_range9b);
905     g_msg_sp_calc_dct_range9 := fnd_message.get;
906   --
907     --fnd_message.set_name('PAY','PAY_JP_ISDF_P_SP_DCT');
908     --fnd_message.set_token('DCT',g_sp_calc_dct1);
909     --g_msg_sp_calc_dct1 := fnd_message.get;
910     g_msg_sp_calc_dct1 := g_sp_calc_dct1;
911   --
912     --fnd_message.set_name('PAY','PAY_JP_ISDF_P_SP_DCT');
913     --fnd_message.set_token('DCT',g_sp_calc_dct2);
914     --g_msg_sp_calc_dct2 := fnd_message.get;
915     g_msg_sp_calc_dct2 := g_sp_calc_dct2;
916   --
917     --fnd_message.set_name('PAY','PAY_JP_ISDF_P_SP_DCT');
918     --fnd_message.set_token('DCT',g_sp_calc_dct3);
919     --g_msg_sp_calc_dct3 := fnd_message.get;
920     g_msg_sp_calc_dct3 := g_sp_calc_dct3;
921   --
922     --fnd_message.set_name('PAY','PAY_JP_ISDF_P_SP_DCT');
923     --fnd_message.set_token('DCT',g_sp_calc_dct4);
924     --g_msg_sp_calc_dct4 := fnd_message.get;
925     g_msg_sp_calc_dct4 := g_sp_calc_dct4;
926   --
927     --fnd_message.set_name('PAY','PAY_JP_ISDF_P_SP_DCT');
928     --fnd_message.set_token('DCT',g_sp_calc_dct5);
929     --g_msg_sp_calc_dct5 := fnd_message.get;
930     g_msg_sp_calc_dct5 := g_sp_calc_dct5;
931   --
932     --fnd_message.set_name('PAY','PAY_JP_ISDF_P_SP_DCT');
933     --fnd_message.set_token('DCT',g_sp_calc_dct6);
934     --g_msg_sp_calc_dct6 := fnd_message.get;
935     g_msg_sp_calc_dct6 := g_sp_calc_dct6;
936   --
937     --fnd_message.set_name('PAY','PAY_JP_ISDF_P_SP_DCT');
938     --fnd_message.set_token('DCT',g_sp_calc_dct7);
939     --g_msg_sp_calc_dct7 := fnd_message.get;
940     g_msg_sp_calc_dct7 := g_sp_calc_dct7;
941   --
942     --fnd_message.set_name('PAY','PAY_JP_ISDF_P_SP_DCT');
943     --fnd_message.set_token('DCT',g_sp_calc_dct8);
944     --g_msg_sp_calc_dct8 := fnd_message.get;
945     g_msg_sp_calc_dct8 := g_sp_calc_dct8;
946   --
947     --fnd_message.set_name('PAY','PAY_JP_ISDF_P_SP_DCT');
948     --fnd_message.set_token('DCT',g_sp_calc_dct9);
949     --g_msg_sp_calc_dct9 := fnd_message.get;
950     g_msg_sp_calc_dct9 := g_sp_calc_dct9;
951   --
952   end if;
953 --
954   if g_debug then
955     hr_utility.trace('g_life_range1b        : '||g_life_range1b);
956     hr_utility.trace('g_life_range2a        : '||g_life_range2a);
957     hr_utility.trace('g_life_range2b        : '||g_life_range2b);
958     hr_utility.trace('g_life_range3a        : '||g_life_range3a);
959     hr_utility.trace('g_life_range3b        : '||g_life_range3b);
960     hr_utility.trace('g_life_range4a        : '||g_life_range4a);
961     hr_utility.trace('g_life_calc2          : '||g_life_calc2);
962     hr_utility.trace('g_life_calc3          : '||g_life_calc3);
963     hr_utility.trace('g_life_calc4          : '||g_life_calc4);
964     hr_utility.trace('g_life_gen_max        : '||g_life_gen_max);
965     hr_utility.trace('g_life_pens_max       : '||g_life_pens_max);
966     hr_utility.trace('g_life_ins_max        : '||g_life_ins_max);
967     hr_utility.trace('g_earthquake_max      : '||g_earthquake_max);
968     hr_utility.trace('g_lnonlife_range1b    : '||g_lnonlife_range1b);
969     hr_utility.trace('g_lnonlife_calc2      : '||g_lnonlife_calc2);
970     hr_utility.trace('g_lnonlife_year       : '||g_lnonlife_year);
971     hr_utility.trace('g_snonlife_range1b    : '||g_snonlife_range1b);
972     hr_utility.trace('g_snonlife_calc2      : '||g_snonlife_calc2);
973     hr_utility.trace('g_lnonlife_max        : '||g_lnonlife_max);
974     hr_utility.trace('g_snonlife_max        : '||g_snonlife_max);
975     hr_utility.trace('g_nonlife_max         : '||g_nonlife_max);
976     hr_utility.trace('g_sp_calc_unit        : '||g_sp_calc_unit);
977     hr_utility.trace('g_sp_emp_inc_max      : '||g_sp_emp_inc_max);
978     hr_utility.trace('g_sp_spdct_max        : '||g_sp_spdct_max);
979     hr_utility.trace('g_sp_spinc_max        : '||g_sp_spinc_max);
980     hr_utility.trace('g_sp_calc_exp1b       : '||g_sp_calc_exp1b);
981     hr_utility.trace('g_sp_calc_exp1b_fmt   : '||g_sp_calc_exp1b_fmt);
982     hr_utility.trace('g_sp_calc_cal1        : '||g_sp_calc_cal1);
983     hr_utility.trace('g_sp_calc_cal6        : '||g_sp_calc_cal6);
984     hr_utility.trace('g_sp_calc_dct_range1a : '||g_sp_calc_dct_range1a);
985     hr_utility.trace('g_sp_calc_dct_range1b : '||g_sp_calc_dct_range1b);
986     hr_utility.trace('g_sp_calc_dct1        : '||g_sp_calc_dct1);
987     hr_utility.trace('g_sp_calc_dct_range2a : '||g_sp_calc_dct_range2a);
988     hr_utility.trace('g_sp_calc_dct_range2b : '||g_sp_calc_dct_range2b);
989     hr_utility.trace('g_sp_calc_dct2        : '||g_sp_calc_dct2);
990     hr_utility.trace('g_sp_calc_dct_range3a : '||g_sp_calc_dct_range3a);
991     hr_utility.trace('g_sp_calc_dct_range3b : '||g_sp_calc_dct_range3b);
992     hr_utility.trace('g_sp_calc_dct3        : '||g_sp_calc_dct3);
993     hr_utility.trace('g_sp_calc_dct_range4a : '||g_sp_calc_dct_range4a);
994     hr_utility.trace('g_sp_calc_dct_range4b : '||g_sp_calc_dct_range4b);
995     hr_utility.trace('g_sp_calc_dct4        : '||g_sp_calc_dct4);
996     hr_utility.trace('g_sp_calc_dct_range5a : '||g_sp_calc_dct_range5a);
997     hr_utility.trace('g_sp_calc_dct_range5b : '||g_sp_calc_dct_range5b);
998     hr_utility.trace('g_sp_calc_dct5        : '||g_sp_calc_dct5);
999     hr_utility.trace('g_sp_calc_dct_range6a : '||g_sp_calc_dct_range6a);
1000     hr_utility.trace('g_sp_calc_dct_range6b : '||g_sp_calc_dct_range6b);
1001     hr_utility.trace('g_sp_calc_dct6        : '||g_sp_calc_dct6);
1002     hr_utility.trace('g_sp_calc_dct_range7a : '||g_sp_calc_dct_range7a);
1003     hr_utility.trace('g_sp_calc_dct_range7b : '||g_sp_calc_dct_range7b);
1004     hr_utility.trace('g_sp_calc_dct7        : '||g_sp_calc_dct7);
1005     hr_utility.trace('g_sp_calc_dct_range8a : '||g_sp_calc_dct_range8a);
1006     hr_utility.trace('g_sp_calc_dct_range8b : '||g_sp_calc_dct_range8b);
1007     hr_utility.trace('g_sp_calc_dct8        : '||g_sp_calc_dct8);
1008     hr_utility.trace('g_sp_calc_dct_range9a : '||g_sp_calc_dct_range9a);
1009     hr_utility.trace('g_sp_calc_dct_range9b : '||g_sp_calc_dct_range9b);
1010     hr_utility.trace('g_sp_calc_dct9        : '||g_sp_calc_dct9);
1011   end if;
1012 --
1013   if g_debug then
1014     hr_utility.trace('g_msg_life_range1          : '||g_msg_life_range1);
1015     hr_utility.trace('g_msg_life_range2          : '||g_msg_life_range2);
1016     hr_utility.trace('g_msg_life_range3          : '||g_msg_life_range3);
1017     hr_utility.trace('g_msg_life_range4          : '||g_msg_life_range4);
1018     hr_utility.trace('g_msg_life_calc2           : '||g_msg_life_calc2);
1019     hr_utility.trace('g_msg_life_calc3           : '||g_msg_life_calc3);
1020     hr_utility.trace('g_msg_life_calc4           : '||g_msg_life_calc4);
1021     hr_utility.trace('g_msg_life_gen_max         : '||g_msg_life_gen_max);
1022     hr_utility.trace('g_msg_life_pens_max        : '||g_msg_life_pens_max);
1023     hr_utility.trace('g_msg_life_ins_max         : '||g_msg_life_ins_max);
1024     hr_utility.trace('g_msg_nonlife_2007         : '||g_msg_nonlife_2007);
1025     hr_utility.trace('g_msg_nonlife_ap_2007      : '||g_msg_nonlife_ap_2007);
1026     hr_utility.trace('g_msg_eqnonlife_s_2007     : '||g_msg_eqnonlife_s_2007);
1027     hr_utility.trace('g_msg_lnonlife_s_2007      : '||g_msg_lnonlife_s_2007);
1028     hr_utility.trace('g_msg_lnonlife             : '||g_msg_lnonlife);
1029     hr_utility.trace('g_msg_eqnonlife_2007       : '||g_msg_eqnonlife_2007);
1030     hr_utility.trace('g_msg_lnonlife_2007        : '||g_msg_lnonlife_2007);
1031     hr_utility.trace('g_msg_lnonlife_dct         : '||g_msg_lnonlife_dct);
1032     hr_utility.trace('g_msg_snonlife_dct         : '||g_msg_snonlife_dct);
1033     hr_utility.trace('g_msg_lnonlife_dct_2007    : '||g_msg_lnonlife_dct_2007);
1034     hr_utility.trace('g_msg_earthquake_max       : '||g_msg_earthquake_max);
1035     hr_utility.trace('g_msg_nonlife_long_max     : '||g_msg_nonlife_long_max);
1036     hr_utility.trace('g_msg_nonlife_short_max    : '||g_msg_nonlife_short_max);
1037     hr_utility.trace('g_msg_nonlife_ins_max      : '||g_msg_nonlife_ins_max);
1038     hr_utility.trace('g_msg_nonlife_ins_max_2007 : '||g_msg_nonlife_ins_max_2007);
1039     hr_utility.trace('g_msg_sp_emp_inc_max       : '||g_msg_sp_emp_inc_max);
1040     hr_utility.trace('g_msg_sp_sp_inc_max        : '||g_msg_sp_sp_inc_max);
1041     hr_utility.trace('g_msg_sp_calc_cal1         : '||g_msg_sp_calc_cal1);
1042     hr_utility.trace('g_msg_sp_calc_cal6         : '||g_msg_sp_calc_cal6);
1043     hr_utility.trace('g_msg_sp_calc_dct_range1   : '||g_msg_sp_calc_dct_range1);
1044     hr_utility.trace('g_msg_sp_calc_dct_range2   : '||g_msg_sp_calc_dct_range2);
1045     hr_utility.trace('g_msg_sp_calc_dct_range3   : '||g_msg_sp_calc_dct_range3);
1046     hr_utility.trace('g_msg_sp_calc_dct_range4   : '||g_msg_sp_calc_dct_range4);
1047     hr_utility.trace('g_msg_sp_calc_dct_range5   : '||g_msg_sp_calc_dct_range5);
1048     hr_utility.trace('g_msg_sp_calc_dct_range6   : '||g_msg_sp_calc_dct_range6);
1049     hr_utility.trace('g_msg_sp_calc_dct_range7   : '||g_msg_sp_calc_dct_range7);
1050     hr_utility.trace('g_msg_sp_calc_dct_range8   : '||g_msg_sp_calc_dct_range8);
1051     hr_utility.trace('g_msg_sp_calc_dct_range9   : '||g_msg_sp_calc_dct_range9);
1052     hr_utility.trace('g_msg_sp_calc_dct1         : '||g_msg_sp_calc_dct1);
1053     hr_utility.trace('g_msg_sp_calc_dct2         : '||g_msg_sp_calc_dct2);
1054     hr_utility.trace('g_msg_sp_calc_dct3         : '||g_msg_sp_calc_dct3);
1055     hr_utility.trace('g_msg_sp_calc_dct4         : '||g_msg_sp_calc_dct4);
1056     hr_utility.trace('g_msg_sp_calc_dct5         : '||g_msg_sp_calc_dct5);
1057     hr_utility.trace('g_msg_sp_calc_dct6         : '||g_msg_sp_calc_dct6);
1058     hr_utility.trace('g_msg_sp_calc_dct7         : '||g_msg_sp_calc_dct7);
1059     hr_utility.trace('g_msg_sp_calc_dct8         : '||g_msg_sp_calc_dct8);
1060     hr_utility.trace('g_msg_sp_calc_dct9         : '||g_msg_sp_calc_dct9);
1061   end if;
1062 --
1063   if g_debug then
1064     hr_utility.set_location(l_proc,1000);
1065   end if;
1066 --
1067 end set_form_pg_prompt;
1068 --
1069 -- -------------------------------------------------------------------------
1070 -- set_form_pg_prompt2012
1071 -- -------------------------------------------------------------------------
1072 procedure set_form_pg_prompt2012(
1073   p_action_information_id in number)
1074 is
1075 --
1076   l_proc varchar2(80) := c_package||'get_formpg_prompt2012';
1077   l_rate    pay_user_column_instances_f.value%type;
1078   l_add_adj pay_user_column_instances_f.value%type;
1079   l_legislation_code varchar2(2);
1080 --
1081   cursor csr_udt_row(
1082            p_udt_name       in varchar2,
1083            p_effective_date in date)
1084   is
1085   select /* +ORDERED */
1086          put.user_table_id,
1087          pur.user_row_id,
1088          pur.display_sequence,
1089          pur.row_low_range_or_name,
1090          pur.row_high_range
1091   from   pay_user_tables put,
1092          pay_user_rows_f pur
1093   where  put.user_table_name = p_udt_name
1094   and    nvl(put.legislation_code,'X') = nvl(l_legislation_code,nvl(put.legislation_code,'X'))
1095   and    pur.user_table_id = put.user_table_id
1096   and    p_effective_date
1097          between pur.effective_start_date and pur.effective_end_date
1098   order by 3, fnd_number.canonical_to_number(pur.row_low_range_or_name);
1099 --
1100   cursor csr_udt_val(
1101            p_user_table_id  in number,
1102            p_row_id         in number,
1103            p_effective_date in date)
1104   is
1105   select /* +ORDERED */
1106          puc.user_column_name,
1107          puci.value
1108   from   pay_user_columns puc,
1109          pay_user_column_instances_f puci
1110   where  puc.user_table_id = p_user_table_id
1111   and    puci.user_column_id = puc.user_column_id
1112   and    puci.user_row_id = p_row_id
1113   and    p_effective_date
1114          between puci.effective_start_date and puci.effective_end_date
1115   order by 1;
1116 --
1117   l_csr_udt_row csr_udt_row%rowtype;
1118   l_csr_udt_val csr_udt_val%rowtype;
1119 --
1120 begin
1121 --
1122   if g_debug then
1123     hr_utility.set_location(l_proc,0);
1124   end if;
1125 --
1126 l_legislation_code := 'JP';
1127 
1128 fnd_message.set_name('PAY','PAY_JP_ISDF_NEW_OLD_CLASS_2012');
1129 g_new_old_class_2012 := fnd_message.get;
1130 
1131 fnd_message.set_name('PAY','PAY_JP_ISDF_NEW_INS_PREM_2012');
1132 g_new_ins_prem_2012  := fnd_message.get;
1133 
1134 fnd_message.set_name('PAY','PAY_JP_ISDF_OLD_INS_PREM_2012');
1135 g_old_ins_prem_2012  := fnd_message.get;
1136 
1137 fnd_message.set_name('PAY','PAY_JP_ISDF_NEW_DEDN_INS_2012');
1138 g_new_dedn_ins_2012  := fnd_message.get;
1139 
1140 fnd_message.set_name('PAY','PAY_JP_ISDF_OLD_DEDN_INS_2012');
1141 g_old_dedn_ins_2012  := fnd_message.get;
1142 
1143 fnd_message.set_name('PAY','PAY_JP_ISDF_TOT_INS_2012');
1144 g_tot_ins_2012       := fnd_message.get;
1145 
1146 fnd_message.set_name('PAY','PAY_JP_ISDF_FIN_INS_2012');
1147 g_fin_ins_2012       := fnd_message.get;
1148 
1149 fnd_message.set_name('PAY','PAY_JP_ISDF_CMI_PREM_2012');
1150 g_cmi_prem_2012      := fnd_message.get;
1151 
1152 fnd_message.set_name('PAY','PAY_JP_ISDF_CMI_DEDN_2012');
1153 g_cmi_dedn_2012      := fnd_message.get;
1154 
1155 fnd_message.set_name('PAY','PAY_JP_ISDF_CMI_TOT_2012');
1156 g_cmi_tot_2012       := fnd_message.get;
1157 
1158 fnd_message.set_name('PAY','PAY_JP_ISDF_NEW_DEDN_PENS_2012');
1159 g_new_dedn_pens_2012 := fnd_message.get;
1160 
1161 fnd_message.set_name('PAY','PAY_JP_ISDF_OLD_DEDN_PENS_2012');
1162 g_old_dedn_pens_2012 := fnd_message.get;
1163 
1164 fnd_message.set_name('PAY','PAY_JP_ISDF_TOT_PENS_2012');
1165 g_tot_pens_2012      := fnd_message.get;
1166 
1167 fnd_message.set_name('PAY','PAY_JP_ISDF_FIN_PENS_2012');
1168 g_fin_pens_2012      := fnd_message.get;
1169 
1170 fnd_message.set_name('PAY','PAY_JP_ISDF_PENS_TOT_2012');
1171 g_pens_tot_2012      := fnd_message.get;
1172 
1173 fnd_message.set_name('PAY','PAY_JP_ISDF_LIFE_TAB_NEW_2012');
1174 g_life_tab_new_2012  := fnd_message.get;
1175 
1176 fnd_message.set_name('PAY','PAY_JP_ISDF_COL1_NEW_2012');
1177 g_col1_new_2012      := fnd_message.get;
1178 
1179 fnd_message.set_name('PAY','PAY_JP_ISDF_FORM_DEDN_AMT_2012');
1180 g_form_dedn_amt_2012 := fnd_message.get;
1181 
1182 fnd_message.set_name('PAY','PAY_JP_ISDF_ROW1_COL2_2012');
1183 g_row1_col2_2012     := fnd_message.get;
1184 
1185 fnd_message.set_name('PAY','PAY_JP_ISDF_LIFE_TAB_OLD_2012');
1186 g_life_tab_old_2012  := fnd_message.get;
1187 
1188 fnd_message.set_name('PAY','PAY_JP_ISDF_COL3_NEW_2012');
1189 g_col3_new_2012      := fnd_message.get;
1190 
1191 fnd_message.set_name('PAY','PAY_JP_ISDF_ROW1_COL4_2012');
1192 g_row1_col4_2012     := fnd_message.get;
1193 
1194 fnd_message.set_name('PAY','PAY_JP_ISDF_TOT_LID_2012');
1195 g_tot_lid_2012       := fnd_message.get;
1196 
1197 fnd_message.set_name('PAY','PAY_JP_ISDF_CORP_TYPE_2012');
1198 g_corp_type_2012     := fnd_message.get;
1199 
1200 -- messages for new table
1201   --
1202     open csr_udt_row(c_life_gen_new_calc_udt,c_st_upd_date_2012);
1203     loop
1204     --
1205       fetch csr_udt_row into l_csr_udt_row;
1206       exit when csr_udt_row%notfound;
1207     --
1208       if csr_udt_row%rowcount = 1 then
1209       --
1210         g_new_life_range1b := l_csr_udt_row.row_high_range;
1211         g_new_life_range1b := to_char(to_number(g_new_life_range1b),fnd_currency.get_format_mask('JPY',40));
1212       --
1213       elsif csr_udt_row%rowcount = 2 then
1214       --
1215         g_new_life_range2a := l_csr_udt_row.row_low_range_or_name;
1216         g_new_life_range2b := l_csr_udt_row.row_high_range;
1217         g_new_life_range2a := to_char(to_number(g_new_life_range2a),fnd_currency.get_format_mask('JPY',40));
1218         g_new_life_range2b := to_char(to_number(g_new_life_range2b),fnd_currency.get_format_mask('JPY',40));
1219       --
1220         open csr_udt_val(l_csr_udt_row.user_table_id,l_csr_udt_row.user_row_id,c_st_upd_date_2012);
1221         loop
1222         --
1223           fetch csr_udt_val into l_csr_udt_val;
1224           exit when csr_udt_val%notfound;
1225         --
1226           if l_csr_udt_val.user_column_name = c_add_adj_udtcol then
1227             l_add_adj := l_csr_udt_val.value;
1228           elsif l_csr_udt_val.user_column_name = c_rate_udtcol then
1229             l_rate := l_csr_udt_val.value;
1230           end if;
1231         --
1232         end loop;
1233         close csr_udt_val;
1234       --
1235         if fnd_number.canonical_to_number(l_rate) = 0.5 then
1236           l_rate := '1/2';
1237         elsif fnd_number.canonical_to_number(l_rate) = 0.25 then
1238           l_rate := '1/4';
1239         end if;
1240       --
1241         g_new_life_calc2a := 'x '||l_rate||' + '||to_char(to_number(l_add_adj),fnd_currency.get_format_mask('JPY',40));
1242       --
1243       elsif csr_udt_row%rowcount = 3 then
1244       --
1245         g_new_life_range3a := l_csr_udt_row.row_low_range_or_name;
1246         g_new_life_range3b := l_csr_udt_row.row_high_range;
1247         g_new_life_range3a := to_char(to_number(g_new_life_range3a),fnd_currency.get_format_mask('JPY',40));
1248         g_new_life_range3b := to_char(to_number(g_new_life_range3b),fnd_currency.get_format_mask('JPY',40));
1249       --
1250         open csr_udt_val(l_csr_udt_row.user_table_id,l_csr_udt_row.user_row_id,c_st_upd_date_2012);
1251         loop
1252         --
1253           fetch csr_udt_val into l_csr_udt_val;
1254           exit when csr_udt_val%notfound;
1255         --
1256           if l_csr_udt_val.user_column_name = c_add_adj_udtcol then
1257             l_add_adj := l_csr_udt_val.value;
1258           elsif l_csr_udt_val.user_column_name = c_rate_udtcol then
1259             l_rate := l_csr_udt_val.value;
1260           end if;
1261         --
1262         end loop;
1263         close csr_udt_val;
1264       --
1265         if fnd_number.canonical_to_number(l_rate) = 0.5 then
1266           l_rate := '1/2';
1267         elsif fnd_number.canonical_to_number(l_rate) = 0.25 then
1268           l_rate := '1/4';
1269         end if;
1270       --
1271         g_new_life_calc3a := 'x '||l_rate||' + '||to_char(to_number(l_add_adj),fnd_currency.get_format_mask('JPY',40));
1272       --
1273       elsif csr_udt_row%rowcount = 4 then
1274       --
1275         g_new_life_range4a := l_csr_udt_row.row_low_range_or_name;
1276         g_new_life_range4a := to_char(to_number(g_new_life_range4a),fnd_currency.get_format_mask('JPY',40));
1277       --
1278         open csr_udt_val(l_csr_udt_row.user_table_id,l_csr_udt_row.user_row_id,c_st_upd_date_2012);
1279         loop
1280         --
1281           fetch csr_udt_val into l_csr_udt_val;
1282           exit when csr_udt_val%notfound;
1283         --
1284           if l_csr_udt_val.user_column_name = c_add_adj_udtcol then
1285             l_add_adj := l_csr_udt_val.value;
1286           end if;
1287         --
1288         end loop;
1289         close csr_udt_val;
1290       --
1291         g_new_life_calc4a := to_char(to_number(l_add_adj),fnd_currency.get_format_mask('JPY',40));
1292       --
1293       end if;
1294     --
1295     end loop;
1296     close csr_udt_row;
1297 
1298     fnd_message.set_name('PAY','PAY_JP_ISDF_P_LIFE_RANGE_FIRST');
1299     fnd_message.set_token('RANGE_B',g_new_life_range1b);
1300     g_new_life_range1 := fnd_message.get;
1301   --
1302     fnd_message.set_name('PAY','PAY_JP_ISDF_P_LIFE_RANGE_MID');
1303     fnd_message.set_token('RANGE_A',g_new_life_range2a);
1304     fnd_message.set_token('RANGE_B',g_new_life_range2b);
1305     g_new_life_range2 := fnd_message.get;
1306   --
1307     fnd_message.set_name('PAY','PAY_JP_ISDF_P_LIFE_RANGE_MID');
1308     fnd_message.set_token('RANGE_A',g_new_life_range3a);
1309     fnd_message.set_token('RANGE_B',g_new_life_range3b);
1310     g_new_life_range3 := fnd_message.get;
1311   --
1312     fnd_message.set_name('PAY','PAY_JP_ISDF_P_LIFE_RANGE_LAST');
1313     fnd_message.set_token('RANGE_A',g_new_life_range4a);
1314     g_new_life_range4 := fnd_message.get;
1315   --
1316     fnd_message.set_name('PAY','PAY_JP_ISDF_ROW1_COL2_2012');
1317     g_new_life_calc1 := fnd_message.get;
1318   --
1319     fnd_message.set_name('PAY','PAY_JP_ISDF_NEW_INDX_2012');
1320     fnd_message.set_token('CALC',g_new_life_calc2a);
1321     g_new_life_calc2 := fnd_message.get;
1322   --
1323     fnd_message.set_name('PAY','PAY_JP_ISDF_NEW_INDX_2012');
1324     fnd_message.set_token('CALC',g_new_life_calc3a);
1325     g_new_life_calc3 := fnd_message.get;
1326   --
1327     fnd_message.set_name('PAY','PAY_JP_ISDF_P_LIFE_DCT_LAST');
1328     fnd_message.set_token('CALC',g_new_life_calc4a);
1329     g_new_life_calc4 := fnd_message.get;
1330   --
1331 -- messages for old table
1332   --
1333     open csr_udt_row(c_life_gen_calc_udt,c_st_upd_date_2012);
1334     loop
1335     --
1336       fetch csr_udt_row into l_csr_udt_row;
1337       exit when csr_udt_row%notfound;
1338     --
1339       if csr_udt_row%rowcount = 1 then
1340       --
1341         g_old_life_range1b := l_csr_udt_row.row_high_range;
1342         g_old_life_range1b := to_char(to_number(g_old_life_range1b),fnd_currency.get_format_mask('JPY',40));
1343       --
1344       elsif csr_udt_row%rowcount = 2 then
1345       --
1346         g_old_life_range2a := l_csr_udt_row.row_low_range_or_name;
1347         g_old_life_range2b := l_csr_udt_row.row_high_range;
1348         g_old_life_range2a := to_char(to_number(g_old_life_range2a),fnd_currency.get_format_mask('JPY',40));
1349         g_old_life_range2b := to_char(to_number(g_old_life_range2b),fnd_currency.get_format_mask('JPY',40));
1350 
1351         open csr_udt_val(l_csr_udt_row.user_table_id,l_csr_udt_row.user_row_id,c_st_upd_date_2012);
1352         loop
1353         --
1354           fetch csr_udt_val into l_csr_udt_val;
1355           exit when csr_udt_val%notfound;
1356         --
1357           if l_csr_udt_val.user_column_name = c_add_adj_udtcol then
1358             l_add_adj := l_csr_udt_val.value;
1359           elsif l_csr_udt_val.user_column_name = c_rate_udtcol then
1360             l_rate := l_csr_udt_val.value;
1361           end if;
1362         --
1363         end loop;
1364         close csr_udt_val;
1365       --
1366         if fnd_number.canonical_to_number(l_rate) = 0.5 then
1367           l_rate := '1/2';
1368         elsif fnd_number.canonical_to_number(l_rate) = 0.25 then
1369           l_rate := '1/4';
1370         end if;
1371       --
1372         g_old_life_calc2a := 'x '||l_rate||' + '||to_char(to_number(l_add_adj),fnd_currency.get_format_mask('JPY',40));
1373       --
1374       elsif csr_udt_row%rowcount = 3 then
1375       --
1376         g_old_life_range3a := l_csr_udt_row.row_low_range_or_name;
1377         g_old_life_range3b := l_csr_udt_row.row_high_range;
1378         g_old_life_range3a := to_char(to_number(g_old_life_range3a),fnd_currency.get_format_mask('JPY',40));
1379         g_old_life_range3b := to_char(to_number(g_old_life_range3b),fnd_currency.get_format_mask('JPY',40));
1380 
1381         open csr_udt_val(l_csr_udt_row.user_table_id,l_csr_udt_row.user_row_id,c_st_upd_date_2012);
1382         loop
1383         --
1384           fetch csr_udt_val into l_csr_udt_val;
1385           exit when csr_udt_val%notfound;
1386         --
1387           if l_csr_udt_val.user_column_name = c_add_adj_udtcol then
1388             l_add_adj := l_csr_udt_val.value;
1389           elsif l_csr_udt_val.user_column_name = c_rate_udtcol then
1390             l_rate := l_csr_udt_val.value;
1391           end if;
1392         --
1393         end loop;
1394         close csr_udt_val;
1395       --
1396         if fnd_number.canonical_to_number(l_rate) = 0.5 then
1397           l_rate := '1/2';
1398         elsif fnd_number.canonical_to_number(l_rate) = 0.25 then
1399           l_rate := '1/4';
1400         end if;
1401       --
1402         g_old_life_calc3a := 'x '||l_rate||' + '||to_char(to_number(l_add_adj),fnd_currency.get_format_mask('JPY',40));
1403       --
1404       elsif csr_udt_row%rowcount = 4 then
1405       --
1406         g_old_life_range4a := l_csr_udt_row.row_low_range_or_name;
1407         g_old_life_range4a := to_char(to_number(g_old_life_range4a),fnd_currency.get_format_mask('JPY',40));
1408 
1409         open csr_udt_val(l_csr_udt_row.user_table_id,l_csr_udt_row.user_row_id,c_st_upd_date_2012);
1410         loop
1411         --
1412           fetch csr_udt_val into l_csr_udt_val;
1413           exit when csr_udt_val%notfound;
1414         --
1415           if l_csr_udt_val.user_column_name = c_add_adj_udtcol then
1416             l_add_adj := l_csr_udt_val.value;
1417           end if;
1418         --
1419         end loop;
1420         close csr_udt_val;
1421       --
1422         g_old_life_calc4a := to_char(to_number(l_add_adj),fnd_currency.get_format_mask('JPY',40));
1423       --
1424       end if;
1425     --
1426     end loop;
1427     close csr_udt_row;
1428 
1429     fnd_message.set_name('PAY','PAY_JP_ISDF_P_LIFE_RANGE_FIRST');
1430     fnd_message.set_token('RANGE_B',g_old_life_range1b);
1431     g_old_life_range1 := fnd_message.get;
1432   --
1433     fnd_message.set_name('PAY','PAY_JP_ISDF_P_LIFE_RANGE_MID');
1434     fnd_message.set_token('RANGE_A',g_old_life_range2a);
1435     fnd_message.set_token('RANGE_B',g_old_life_range2b);
1436     g_old_life_range2 := fnd_message.get;
1437   --
1438     fnd_message.set_name('PAY','PAY_JP_ISDF_P_LIFE_RANGE_MID');
1439     fnd_message.set_token('RANGE_A',g_old_life_range3a);
1440     fnd_message.set_token('RANGE_B',g_old_life_range3b);
1441     g_old_life_range3 := fnd_message.get;
1442   --
1443     fnd_message.set_name('PAY','PAY_JP_ISDF_P_LIFE_RANGE_LAST');
1444     fnd_message.set_token('RANGE_A',g_old_life_range4a);
1445     g_old_life_range4 := fnd_message.get;
1446   --
1447     fnd_message.set_name('PAY','PAY_JP_ISDF_ROW1_COL4_2012');
1448     g_old_life_calc1 := fnd_message.get;
1449   --
1450     fnd_message.set_name('PAY','PAY_JP_ISDF_OLD_INDX_2012');
1451     fnd_message.set_token('CALC',g_old_life_calc2a);
1452     g_old_life_calc2 := fnd_message.get;
1453   --
1454     fnd_message.set_name('PAY','PAY_JP_ISDF_OLD_INDX_2012');
1455     fnd_message.set_token('CALC',g_old_life_calc3a);
1456     g_old_life_calc3 := fnd_message.get;
1457   --
1458     fnd_message.set_name('PAY','PAY_JP_ISDF_P_LIFE_DCT_LAST');
1459     fnd_message.set_token('CALC',g_old_life_calc4a);
1460     g_old_life_calc4 := fnd_message.get;
1461   --
1462 
1463 end set_form_pg_prompt2012;
1464 --
1465 -- -------------------------------------------------------------------------
1466 -- do_new
1467 -- -------------------------------------------------------------------------
1468 procedure do_new(
1469   p_action_information_id in number,
1470   p_object_version_number in out nocopy number)
1471 is
1472 --
1473   l_proc varchar2(80) := c_package||'do_new';
1474   l_submission_date date;
1475   l_assact_rec pay_jp_isdf_assact_v%rowtype;
1476   l_payroll_action_id number;
1477 --
1478   cursor csr_pact
1479   is
1480   select paa.payroll_action_id
1481   from   pay_assignment_actions paa
1482   where  paa.assignment_action_id = l_assact_rec.assignment_action_id;
1483 --
1484 begin
1485 --
1486   if g_debug then
1487     hr_utility.set_location(l_proc,0);
1488   end if;
1489 --
1490   l_submission_date := check_submission_period(p_action_information_id);
1491 --
1492   if g_debug then
1493     hr_utility.set_location(l_proc,10);
1494     hr_utility.trace('submission_date  : '||fnd_date.date_to_canonical(l_submission_date));
1495   end if;
1496 --
1497   pay_jp_isdf_dml_pkg.lock_assact(p_action_information_id, p_object_version_number, l_assact_rec);
1498 --
1499   if l_assact_rec.transaction_status not in ('U', 'N') then
1500     fnd_message.set_name('PAY','PAY_JP_DEF_INVALID_TXN_STATUS');
1501     fnd_message.raise_error;
1502   end if;
1503 --
1504   if g_debug then
1505     hr_utility.set_location(l_proc,20);
1506     hr_utility.trace('action_information_id  : '||p_action_information_id);
1507     hr_utility.trace('object_version_number  : '||p_object_version_number);
1508     hr_utility.trace('assignment_action_id   : '||l_assact_rec.assignment_action_id);
1509     hr_utility.trace('start delete preset archive');
1510   end if;
1511 --
1512 -- recreate archive data (available for existing data of transaction_status N or U)
1513 --
1514   delete
1515   from  pay_action_information
1516   where action_context_id = l_assact_rec.assignment_action_id
1517   and   action_context_type = 'AAP'
1518   and   action_information_category <> 'JP_ISDF_ASSACT';
1519 --
1520   if g_debug then
1521     hr_utility.trace('end delete preset archive');
1522     hr_utility.set_location(l_proc,30);
1523     hr_utility.trace('start archive_assact');
1524   end if;
1525 --
1526   -- set global argument of pact in pay_jp_isdf_archive_pkg
1527   open csr_pact;
1528   fetch csr_pact into l_payroll_action_id;
1529   close csr_pact;
1530 --
1531   if g_debug then
1532     hr_utility.set_location(l_proc,40);
1533   end if;
1534 --
1535   pay_jp_isdf_archive_pkg.init_pact(
1536     p_payroll_action_id => l_payroll_action_id);
1537   --
1538   -- reset to force archive because of concurrent parameter might be N
1539   pay_jp_isdf_archive_pkg.g_archive_default_flag := 'Y';
1540 --
1541   if g_debug then
1542     hr_utility.set_location(l_proc,50);
1543   end if;
1544 --
1545   -- set global argument of assact in pay_jp_isdf_archive_pkg
1546   pay_jp_isdf_archive_pkg.init_assact(
1547     p_assignment_action_id => l_assact_rec.assignment_action_id,
1548     p_assignment_id        => l_assact_rec.assignment_id);
1549 --
1550   if g_debug then
1551     hr_utility.set_location(l_proc,60);
1552   end if;
1553 --
1554   pay_jp_isdf_archive_pkg.archive_assact(
1555     p_assignment_action_id => l_assact_rec.assignment_action_id,
1556     p_assignment_id        => l_assact_rec.assignment_id);
1557 --
1558   if g_debug then
1559     hr_utility.trace('end archive_assact');
1560     hr_utility.set_location(l_proc,70);
1561     hr_utility.trace('start update_assact');
1562   end if;
1563 --
1564   p_object_version_number := l_assact_rec.object_version_number + 1;
1565 --
1566   --api is disable because assact has been locked.
1567   --pay_jp_isdf_dml_pkg.update_assact(
1568   --  p_action_information_id => l_assact_rec.assignment_action_id,
1569   --  p_object_version_number => p_object_version_number,
1570   --  p_transaction_status    => 'N',
1571   --  p_finalized_date        => l_assact_rec.finalized_date,
1572   --  p_finalized_by          => l_assact_rec.finalized_by,
1573   --  p_user_comments         => l_assact_rec.user_comments,
1574   --  p_admin_comments        => l_assact_rec.admin_comments,
1575   --  p_transfer_status       => l_assact_rec.transfer_status,
1576   --  p_transfer_date         => l_assact_rec.transfer_date,
1577   --  p_expiry_date           => l_assact_rec.expiry_date);
1578   update pay_jp_isdf_assact_dml_v
1579   set    object_version_number = p_object_version_number,
1580          transaction_status    = 'N'
1581   where  row_id = l_assact_rec.row_id;
1582 --
1583   if g_debug then
1584     hr_utility.trace('end update_assact');
1585     hr_utility.set_location(l_proc,1000);
1586   end if;
1587 --
1588 end do_new;
1589 --
1590 -- -------------------------------------------------------------------------
1591 -- do_apply
1592 -- -------------------------------------------------------------------------
1593 procedure do_apply(
1594   p_action_information_id in number,
1595   p_object_version_number in out nocopy number)
1596 is
1597   l_proc varchar2(80) := c_package||'do_apply';
1598   l_submission_date date;
1599   l_assact_rec pay_jp_isdf_assact_v%rowtype;
1600 begin
1601 --
1602   if g_debug then
1603     hr_utility.set_location(l_proc,0);
1604   end if;
1605 --
1606   l_submission_date := check_submission_period(p_action_information_id);
1607 --
1608   if g_debug then
1609     hr_utility.set_location(l_proc,10);
1610     hr_utility.trace('submission_date  : '||fnd_date.date_to_canonical(l_submission_date));
1611   end if;
1612 --
1613   pay_jp_isdf_dml_pkg.lock_assact(p_action_information_id, p_object_version_number, l_assact_rec);
1614 --
1615   if l_assact_rec.transaction_status <> 'N' then
1616     fnd_message.set_name('PAY','PAY_JP_DEF_INVALID_TXN_STATUS');
1617     fnd_message.raise_error;
1618   end if;
1619 --
1620   if g_debug then
1621     hr_utility.set_location(l_proc,20);
1622     hr_utility.set_location(l_proc,20);
1623     hr_utility.trace('action_information_id  : '||p_action_information_id);
1624     hr_utility.trace('object_version_number  : '||p_object_version_number);
1625     hr_utility.trace('assignment_action_id   : '||l_assact_rec.assignment_action_id);
1626     hr_utility.trace('start update_assact');
1627   end if;
1628 --
1629   p_object_version_number := l_assact_rec.object_version_number + 1;
1630 --
1631   --api is disable because assact has been locked.
1632   --pay_jp_isdf_dml_pkg.update_assact(
1633   --  p_action_information_id => l_assact_rec.assignment_action_id,
1634   --  p_object_version_number => p_object_version_number,
1635   --  p_transaction_status    => l_assact_rec.transaction_status,
1636   --  p_finalized_date        => l_assact_rec.finalized_date,
1637   --  p_finalized_by          => l_assact_rec.finalized_by,
1638   --  p_user_comments         => l_assact_rec.user_comments,
1639   --  p_admin_comments        => l_assact_rec.admin_comments,
1640   --  p_transfer_status       => l_assact_rec.transfer_status,
1641   --  p_transfer_date         => l_assact_rec.transfer_date,
1642   --  p_expiry_date           => l_assact_rec.expiry_date);
1643   update pay_jp_isdf_assact_dml_v
1644   set    object_version_number = p_object_version_number
1645   where  row_id = l_assact_rec.row_id;
1646 --
1647   if g_debug then
1648     hr_utility.trace('end update_assact');
1649     hr_utility.set_location(l_proc,1000);
1650   end if;
1651 --
1652 end do_apply;
1653 --
1654 -- -------------------------------------------------------------------------
1655 -- calc_total
1656 -- -------------------------------------------------------------------------
1657 procedure calc_total(
1658   p_assignment_action_id in number,
1659   p_calc_total_rec out nocopy t_calc_total_rec)
1660 is
1661 --
1662   l_proc varchar2(80) := c_package||'calc_total';
1663   l_action_info_tbl t_action_info_tbl;
1664 --
1665   l_archive_cnt number := 0;
1666 --
1667   cursor csr_archive_data
1668   is
1669   select action_information_id,
1670          action_context_id,
1671          action_context_type,
1672          object_version_number,
1673          action_information_category,
1674          action_information1,
1675          action_information2,
1676          action_information3,
1677          action_information4,
1678          action_information5,
1679          action_information6,
1680          action_information7,
1681          action_information8,
1682          action_information9,
1683          action_information10,
1684          action_information11,
1685          action_information12,
1686          action_information13,
1687          action_information14,
1688          action_information15,
1689          action_information16,
1690          action_information17,
1691          action_information18,
1692          action_information19,
1693          action_information20,
1694          action_information21,
1695          action_information22,
1696          action_information23,
1697          action_information24,
1698          action_information25,
1699          action_information26,
1700          action_information27,
1701          action_information28,
1702          action_information29,
1703          action_information30,
1704          effective_date,
1705          assignment_id
1706   from   pay_action_information pai
1707   where  pai.action_context_id = p_assignment_action_id
1708   and    pai.action_context_type = 'AAP'
1709   and    pai.action_information_category in ('JP_ISDF_LIFE_GEN',
1710                                              'JP_ISDF_LIFE_PENS',
1711                                              'JP_ISDF_NONLIFE',
1712                                              'JP_ISDF_SOCIAL',
1713                                              'JP_ISDF_MUTUAL_AID',
1714                                              'JP_ISDF_SPOUSE',
1715                                              'JP_ISDF_SPOUSE_INC',
1716                                              'JP_ISDF_CARE_MED')
1717   and    pai.action_information1 <> 'D';
1718 --
1719 begin
1720 --
1721   if g_debug then
1722     hr_utility.set_location(l_proc,0);
1723     hr_utility.trace('csr_archive_data bulk collect start');
1724   end if;
1725 --
1726   -- #2243411 bulk collect bug fix is available from 9.2
1727   open csr_archive_data;
1728   --fetch csr_archive_data bulk collect into l_action_info_tbl;
1729   loop
1730   --
1731     l_archive_cnt := l_archive_cnt + 1;
1732   --
1733     fetch csr_archive_data into l_action_info_tbl(l_archive_cnt);
1734     exit when csr_archive_data%notfound;
1735   --
1736   end loop;
1737   close csr_archive_data;
1738 --
1739   if g_debug then
1740     hr_utility.set_location(l_proc,10);
1741     hr_utility.trace('csr_archive_data bulk collect end');
1742     hr_utility.trace('csr_archive_data count : '||l_action_info_tbl.count);
1743   end if;
1744 --
1745   p_calc_total_rec.life_gen := 0;
1746   p_calc_total_rec.life_pens := 0;
1747   p_calc_total_rec.life_gen_new := 0;
1748   p_calc_total_rec.life_pens_new := 0;
1749   p_calc_total_rec.care_med_new := 0;
1750   p_calc_total_rec.earthquake := 0;
1751   p_calc_total_rec.nonlife_long := 0;
1752   p_calc_total_rec.nonlife_short := 0;
1753   p_calc_total_rec.national_pens := 0;
1754   p_calc_total_rec.social := 0;
1755   p_calc_total_rec.mutual_aid_ec := 0;
1756   p_calc_total_rec.mutual_aid_p := 0;
1757   p_calc_total_rec.mutual_aid_dsc := 0;
1758   p_calc_total_rec.sp_emp_inc := 0;
1759   p_calc_total_rec.sp_spouse_inc := 0;
1760   p_calc_total_rec.sp_sp_type := null;
1761   p_calc_total_rec.sp_wid_type := null;
1762   p_calc_total_rec.sp_dct_exc := null;
1763   p_calc_total_rec.sp_inc_cnt := 0;
1764   p_calc_total_rec.sp_earned_inc := 0;
1765   p_calc_total_rec.sp_earned_inc_exp := 0;
1766   p_calc_total_rec.sp_business_inc := 0;
1767   p_calc_total_rec.sp_business_inc_exp := 0;
1768   p_calc_total_rec.sp_miscellaneous_inc := 0;
1769   p_calc_total_rec.sp_miscellaneous_inc_exp := 0;
1770   p_calc_total_rec.sp_dividend_inc := 0;
1771   p_calc_total_rec.sp_dividend_inc_exp := 0;
1772   p_calc_total_rec.sp_real_estate_inc := 0;
1773   p_calc_total_rec.sp_real_estate_inc_exp := 0;
1774   p_calc_total_rec.sp_retirement_inc := 0;
1775   p_calc_total_rec.sp_retirement_inc_exp := 0;
1776   p_calc_total_rec.sp_other_inc := 0;
1777   p_calc_total_rec.sp_other_inc_exp := 0;
1778   p_calc_total_rec.sp_other_inc_exp_dct := 0;
1779   p_calc_total_rec.sp_other_inc_exp_tmp := 0;
1780   p_calc_total_rec.sp_other_inc_exp_tmp_exp := 0;
1781 --
1782   if g_debug then
1783     hr_utility.set_location(l_proc,20);
1784    end if;
1785 --
1786   for i in 1..l_action_info_tbl.count loop
1787   --
1788     if l_action_info_tbl(i).action_information_category = 'JP_ISDF_LIFE_GEN' then
1789     --
1790       if nvl(l_action_info_tbl(i).action_information13,'O') = 'O' then
1791          p_calc_total_rec.life_gen := nvl(p_calc_total_rec.life_gen,0) + nvl(fnd_number.canonical_to_number(l_action_info_tbl(i).action_information12),0);
1792       else
1793          p_calc_total_rec.life_gen_new := nvl(p_calc_total_rec.life_gen_new,0) + nvl(fnd_number.canonical_to_number(l_action_info_tbl(i).action_information12),0);
1794       end if;
1795     --
1796     elsif l_action_info_tbl(i).action_information_category = 'JP_ISDF_CARE_MED' then
1797     --
1798       if l_action_info_tbl(i).action_information13 = 'N' then
1799          p_calc_total_rec.care_med_new := nvl(p_calc_total_rec.care_med_new,0) + nvl(fnd_number.canonical_to_number(l_action_info_tbl(i).action_information12),0);
1800       end if;
1801     --
1802     elsif l_action_info_tbl(i).action_information_category = 'JP_ISDF_LIFE_PENS' then
1803     --
1804       if nvl(l_action_info_tbl(i).action_information14,'O') = 'O' then
1805          p_calc_total_rec.life_pens := nvl(p_calc_total_rec.life_pens,0) + nvl(fnd_number.canonical_to_number(l_action_info_tbl(i).action_information13),0);
1806       else
1807          p_calc_total_rec.life_pens_new := nvl(p_calc_total_rec.life_pens_new,0) + nvl(fnd_number.canonical_to_number(l_action_info_tbl(i).action_information13),0);
1808       end if;
1809     --
1810     elsif l_action_info_tbl(i).action_information_category = 'JP_ISDF_NONLIFE' then
1811     --
1812       -- non support calc for negative amount since deduction from multiple type is acceptable, it is not feasible in system.
1813       if nvl(fnd_number.canonical_to_number(l_action_info_tbl(i).action_information10),0) > 0 then
1814       --
1815         if l_action_info_tbl(i).action_information2 = 'EQ' then
1816           p_calc_total_rec.earthquake := nvl(p_calc_total_rec.earthquake,0) + nvl(fnd_number.canonical_to_number(l_action_info_tbl(i).action_information10),0);
1817         elsif l_action_info_tbl(i).action_information2 = 'L' then
1818           p_calc_total_rec.nonlife_long := nvl(p_calc_total_rec.nonlife_long,0) + nvl(fnd_number.canonical_to_number(l_action_info_tbl(i).action_information10),0);
1819         elsif l_action_info_tbl(i).action_information2 = 'S' then
1820           p_calc_total_rec.nonlife_short := nvl(p_calc_total_rec.nonlife_short,0) + nvl(fnd_number.canonical_to_number(l_action_info_tbl(i).action_information10),0);
1821         end if;
1822       --
1823       end if;
1824     --
1825     elsif l_action_info_tbl(i).action_information_category = 'JP_ISDF_SOCIAL' then
1826     --
1827       if l_action_info_tbl(i).action_information7 = 'Y' then
1828         p_calc_total_rec.national_pens := nvl(p_calc_total_rec.national_pens,0) + nvl(fnd_number.canonical_to_number(l_action_info_tbl(i).action_information6),0);
1829       end if;
1830     --
1831       p_calc_total_rec.social := nvl(p_calc_total_rec.social,0) + nvl(fnd_number.canonical_to_number(l_action_info_tbl(i).action_information6),0);
1832     --
1833     elsif l_action_info_tbl(i).action_information_category = 'JP_ISDF_MUTUAL_AID' then
1834     --
1835       p_calc_total_rec.mutual_aid_ec := nvl(fnd_number.canonical_to_number(l_action_info_tbl(i).action_information2),0);
1836       p_calc_total_rec.mutual_aid_p := nvl(fnd_number.canonical_to_number(l_action_info_tbl(i).action_information3),0);
1837       p_calc_total_rec.mutual_aid_dsc := nvl(fnd_number.canonical_to_number(l_action_info_tbl(i).action_information4),0);
1838     --
1839     elsif l_action_info_tbl(i).action_information_category = 'JP_ISDF_SPOUSE' then
1840     --
1841       p_calc_total_rec.sp_emp_inc := nvl(fnd_number.canonical_to_number(l_action_info_tbl(i).action_information6),0);
1842       p_calc_total_rec.sp_spouse_inc := nvl(fnd_number.canonical_to_number(l_action_info_tbl(i).action_information10),0);
1843       p_calc_total_rec.sp_sp_type := l_action_info_tbl(i).action_information7;
1844       p_calc_total_rec.sp_wid_type := l_action_info_tbl(i).action_information8;
1845       p_calc_total_rec.sp_dct_exc := l_action_info_tbl(i).action_information9;
1846     --
1847     elsif l_action_info_tbl(i).action_information_category = 'JP_ISDF_SPOUSE_INC' then
1848     --
1849       p_calc_total_rec.sp_inc_cnt := p_calc_total_rec.sp_inc_cnt + 1;
1850       p_calc_total_rec.sp_earned_inc := nvl(fnd_number.canonical_to_number(l_action_info_tbl(i).action_information2),0);
1851       p_calc_total_rec.sp_earned_inc_exp := nvl(fnd_number.canonical_to_number(l_action_info_tbl(i).action_information3),c_sp_earned_inc_exp);
1852       p_calc_total_rec.sp_business_inc := nvl(fnd_number.canonical_to_number(l_action_info_tbl(i).action_information4),0);
1853       p_calc_total_rec.sp_business_inc_exp := nvl(fnd_number.canonical_to_number(l_action_info_tbl(i).action_information5),0);
1854       p_calc_total_rec.sp_miscellaneous_inc := nvl(fnd_number.canonical_to_number(l_action_info_tbl(i).action_information6),0);
1855       p_calc_total_rec.sp_miscellaneous_inc_exp := nvl(fnd_number.canonical_to_number(l_action_info_tbl(i).action_information7),0);
1856       p_calc_total_rec.sp_dividend_inc := nvl(fnd_number.canonical_to_number(l_action_info_tbl(i).action_information8),0);
1857       p_calc_total_rec.sp_dividend_inc_exp := nvl(fnd_number.canonical_to_number(l_action_info_tbl(i).action_information9),0);
1858       p_calc_total_rec.sp_real_estate_inc := nvl(fnd_number.canonical_to_number(l_action_info_tbl(i).action_information10),0);
1859       p_calc_total_rec.sp_real_estate_inc_exp := nvl(fnd_number.canonical_to_number(l_action_info_tbl(i).action_information11),0);
1860       p_calc_total_rec.sp_retirement_inc := nvl(fnd_number.canonical_to_number(l_action_info_tbl(i).action_information12),0);
1861       p_calc_total_rec.sp_retirement_inc_exp := nvl(fnd_number.canonical_to_number(l_action_info_tbl(i).action_information13),0);
1862       p_calc_total_rec.sp_other_inc := nvl(fnd_number.canonical_to_number(l_action_info_tbl(i).action_information14),0);
1863       p_calc_total_rec.sp_other_inc_exp := nvl(fnd_number.canonical_to_number(l_action_info_tbl(i).action_information15),0);
1864       p_calc_total_rec.sp_other_inc_exp_dct := nvl(fnd_number.canonical_to_number(l_action_info_tbl(i).action_information16),0);
1865       p_calc_total_rec.sp_other_inc_exp_tmp := nvl(fnd_number.canonical_to_number(l_action_info_tbl(i).action_information17),0);
1866       p_calc_total_rec.sp_other_inc_exp_tmp_exp := nvl(fnd_number.canonical_to_number(l_action_info_tbl(i).action_information18),0);
1867     --
1868     end if;
1869   --
1870   end loop;
1871 --
1872   if g_debug then
1873     hr_utility.trace('life_gen                 : '||to_char(p_calc_total_rec.life_gen));
1874     hr_utility.trace('life_pens                : '||to_char(p_calc_total_rec.life_pens));
1875     hr_utility.trace('life_gen_new             : '||to_char(p_calc_total_rec.life_gen_new));
1876     hr_utility.trace('life_pens_new            : '||to_char(p_calc_total_rec.life_pens_new));
1877     hr_utility.trace('care_med_new             : '||to_char(p_calc_total_rec.care_med_new));
1878     hr_utility.trace('earthquake               : '||to_char(p_calc_total_rec.earthquake));
1879     hr_utility.trace('nonlife_long             : '||to_char(p_calc_total_rec.nonlife_long));
1880     hr_utility.trace('nonlife_short            : '||to_char(p_calc_total_rec.nonlife_short));
1881     hr_utility.trace('national_pens            : '||to_char(p_calc_total_rec.national_pens));
1882     hr_utility.trace('social                   : '||to_char(p_calc_total_rec.social));
1883     hr_utility.trace('mutual_aid_ec            : '||to_char(p_calc_total_rec.mutual_aid_ec));
1884     hr_utility.trace('mutual_aid_p             : '||to_char(p_calc_total_rec.mutual_aid_p));
1885     hr_utility.trace('mutual_aid_dsc           : '||to_char(p_calc_total_rec.mutual_aid_dsc));
1886     hr_utility.trace('sp_emp_inc               : '||to_char(p_calc_total_rec.sp_emp_inc));
1887     hr_utility.trace('sp_spouse_inc            : '||to_char(p_calc_total_rec.sp_spouse_inc));
1888     hr_utility.trace('sp_type                  : '||p_calc_total_rec.sp_sp_type);
1889     hr_utility.trace('sp_wid_type              : '||p_calc_total_rec.sp_wid_type);
1890     hr_utility.trace('sp_dct_exc               : '||p_calc_total_rec.sp_dct_exc);
1891     hr_utility.trace('sp_inc_cnt               : '||to_char(p_calc_total_rec.sp_inc_cnt));
1892     hr_utility.trace('sp_earned_inc            : '||to_char(p_calc_total_rec.sp_earned_inc));
1893     hr_utility.trace('sp_earned_inc_exp        : '||to_char(p_calc_total_rec.sp_earned_inc_exp));
1894     hr_utility.trace('sp_business_inc          : '||to_char(p_calc_total_rec.sp_business_inc));
1895     hr_utility.trace('sp_business_inc_exp      : '||to_char(p_calc_total_rec.sp_business_inc_exp));
1896     hr_utility.trace('sp_miscellaneous_inc     : '||to_char(p_calc_total_rec.sp_miscellaneous_inc));
1897     hr_utility.trace('sp_miscellaneous_inc_exp : '||to_char(p_calc_total_rec.sp_miscellaneous_inc_exp));
1898     hr_utility.trace('sp_dividend_inc          : '||to_char(p_calc_total_rec.sp_dividend_inc));
1899     hr_utility.trace('sp_dividend_inc_exp      : '||to_char(p_calc_total_rec.sp_dividend_inc_exp));
1900     hr_utility.trace('sp_real_estate_inc       : '||to_char(p_calc_total_rec.sp_real_estate_inc));
1901     hr_utility.trace('sp_real_estate_inc_exp   : '||to_char(p_calc_total_rec.sp_real_estate_inc_exp));
1902     hr_utility.trace('sp_retirement_inc        : '||to_char(p_calc_total_rec.sp_retirement_inc));
1903     hr_utility.trace('sp_retirement_inc_exp    : '||to_char(p_calc_total_rec.sp_retirement_inc_exp));
1904     hr_utility.trace('sp_other_inc             : '||to_char(p_calc_total_rec.sp_other_inc));
1905     hr_utility.trace('sp_other_inc_exp         : '||to_char(p_calc_total_rec.sp_other_inc_exp));
1906     hr_utility.trace('sp_other_inc_exp_dct     : '||to_char(p_calc_total_rec.sp_other_inc_exp_dct));
1907     hr_utility.trace('sp_other_inc_exp_tmp     : '||to_char(p_calc_total_rec.sp_other_inc_exp_tmp));
1908     hr_utility.trace('sp_other_inc_exp_tmp_exp : '||to_char(p_calc_total_rec.sp_other_inc_exp_tmp_exp));
1909     hr_utility.set_location(l_proc,1000);
1910    end if;
1911 --
1912 end calc_total;
1913 --
1914 -- -------------------------------------------------------------------------
1915 -- calc_life_ins_dct
1916 -- -------------------------------------------------------------------------
1917 procedure calc_life_ins_dct(
1918   p_life_gen_i        in number,
1919   p_life_pens_i       in number,
1920   p_life_gen_new_i    in number,
1921   p_life_pens_new_i   in number,
1922   p_care_med_new_i    in number,
1923   p_business_group_id in number,
1924   p_effective_date    in date,
1925   p_life_ins_dct_o    out nocopy number,
1926   p_life_gen_o        out nocopy number,
1927   p_life_pens_o       out nocopy number,
1928   p_life_gen_new_o    out nocopy number,
1929   p_life_pens_new_o   out nocopy number,
1930   p_care_med_new_o    out nocopy number)
1931 is
1932 --
1933   l_proc varchar2(80) := c_package||'calc_total';
1934   i_life_gen number := nvl(p_life_gen_i,0);
1935   i_life_pens number := nvl(p_life_pens_i,0);
1936   i_life_gen_new number := nvl(p_life_gen_new_i,0);
1937   i_life_pens_new number := nvl(p_life_pens_new_i,0);
1938   i_care_med_new number := nvl(p_care_med_new_i,0);
1939   o_life_pens number := 0;
1940   o_life_gen number := 0;
1941   o_life_gen_new number := 0;
1942   o_life_pens_new number := 0;
1943   o_care_med_new number := 0;
1944 --
1945 begin
1946 --
1947   if g_debug then
1948     hr_utility.set_location(l_proc,0);
1949     hr_utility.trace('p_life_gen_i        : '||to_char(p_life_gen_i));
1950     hr_utility.trace('p_life_pens_i       : '||to_char(p_life_pens_i));
1951     hr_utility.trace('p_life_gen_new_i        : '||to_char(p_life_gen_new_i));
1952     hr_utility.trace('p_life_pens_new_i       : '||to_char(p_life_pens_new_i));
1953     hr_utility.trace('p_care_med_new_i        : '||to_char(p_care_med_new_i));
1954     hr_utility.trace('p_business_group_id : '||to_char(p_business_group_id));
1955     hr_utility.trace('p_effective_date    : '||to_char(p_effective_date,'YYYY/MM/DD'));
1956     hr_utility.trace('i_life_gen          : '||to_char(i_life_gen));
1957     hr_utility.trace('i_life_pens         : '||to_char(i_life_pens));
1958     hr_utility.trace('i_life_gen_new          : '||to_char(i_life_gen_new));
1959     hr_utility.trace('i_life_pens_new         : '||to_char(i_life_pens_new));
1960     hr_utility.trace('i_care_med_new          : '||to_char(i_care_med_new));
1961   end if;
1962 --
1963   -- formula datetrack
1964   if (p_effective_date >= hr_api.g_sot
1965      and p_effective_date <= hr_api.g_eot) then
1966   --
1967     if g_debug then
1968       hr_utility.set_location(l_proc,10);
1969     end if;
1970   --
1971     if i_life_gen > 0 then
1972     --
1973       if g_debug then
1974         hr_utility.set_location(l_proc,20);
1975       end if;
1976     --
1977       -- udt satisfy validation of max value
1978       o_life_gen := round(i_life_gen
1979                              * to_number(pay_jp_report_pkg.get_udt_value(
1980                                            p_business_group_id,
1981                                            c_life_gen_calc_udt,
1982                                            c_rate_udtcol,
1983                                            to_char(i_life_gen),
1984                                            p_effective_date))
1985                              + to_number(pay_jp_report_pkg.get_udt_value(
1986                                            p_business_group_id,
1987                                            c_life_gen_calc_udt,
1988                                            c_add_adj_udtcol,
1989                                            to_char(i_life_gen),
1990                                            p_effective_date)));
1991     --
1992       if g_debug then
1993         hr_utility.set_location(l_proc,30);
1994       end if;
1995     --
1996     end if;
1997   --
1998     if i_life_gen_new > 0 then
1999     --
2000       if g_debug then
2001         hr_utility.set_location(l_proc,40);
2002       end if;
2003     --
2004       -- udt satisfy validation of max value
2005       o_life_gen_new := round(i_life_gen_new
2006                              * to_number(pay_jp_report_pkg.get_udt_value(
2007                                            p_business_group_id,
2008                                            c_life_gen_new_calc_udt,
2009                                            c_rate_udtcol,
2010                                            to_char(i_life_gen_new),
2011                                            p_effective_date))
2012                              + to_number(pay_jp_report_pkg.get_udt_value(
2013                                            p_business_group_id,
2014                                            c_life_gen_new_calc_udt,
2015                                            c_add_adj_udtcol,
2016                                            to_char(i_life_gen_new),
2017                                            p_effective_date)));
2018     --
2019       if g_debug then
2020         hr_utility.set_location(l_proc,45);
2021       end if;
2022     --
2023     end if;
2024 
2025 
2026     if i_care_med_new > 0 then
2027     --
2028       if g_debug then
2029         hr_utility.set_location(l_proc,40);
2030       end if;
2031     --
2032       -- udt satisfy validation of max value
2033       o_care_med_new := round(i_care_med_new
2034                              * to_number(pay_jp_report_pkg.get_udt_value(
2035                                            p_business_group_id,
2036                                            c_life_gen_new_calc_udt,
2037                                            c_rate_udtcol,
2038                                            to_char(i_care_med_new),
2039                                            p_effective_date))
2040                              + to_number(pay_jp_report_pkg.get_udt_value(
2041                                            p_business_group_id,
2042                                            c_life_gen_new_calc_udt,
2043                                            c_add_adj_udtcol,
2044                                            to_char(i_care_med_new),
2045                                            p_effective_date)));
2046     --
2047       if g_debug then
2048         hr_utility.set_location(l_proc,45);
2049       end if;
2050     --
2051     end if;
2052 
2053 
2054     if g_debug then
2055       hr_utility.set_location(l_proc,49);
2056     end if;
2057   --
2058     if i_life_pens > 0 then
2059     --
2060       if g_debug then
2061         hr_utility.set_location(l_proc,50);
2062       end if;
2063     --
2064       -- udt satisfy validation of max value
2065       o_life_pens := round(i_life_pens
2066                              * to_number(pay_jp_report_pkg.get_udt_value(
2067                                            p_business_group_id,
2068                                            c_life_pens_calc_udt,
2069                                            c_rate_udtcol,
2070                                            to_char(i_life_pens),
2071                                            p_effective_date))
2072                              + to_number(pay_jp_report_pkg.get_udt_value(
2073                                            p_business_group_id,
2074                                            c_life_pens_calc_udt,
2075                                            c_add_adj_udtcol,
2076                                            to_char(i_life_pens),
2077                                            p_effective_date)));
2078     --
2079       if g_debug then
2080         hr_utility.set_location(l_proc,60);
2081       end if;
2082     --
2083     end if;
2084   --
2085     if i_life_pens_new > 0 then
2086     --
2087       if g_debug then
2088         hr_utility.set_location(l_proc,65);
2089       end if;
2090     --
2091       -- udt satisfy validation of max value
2092       o_life_pens_new := round(i_life_pens_new
2093                              * to_number(pay_jp_report_pkg.get_udt_value(
2094                                            p_business_group_id,
2095                                            c_life_pens_new_calc_udt,
2096                                            c_rate_udtcol,
2097                                            to_char(i_life_pens_new),
2098                                            p_effective_date))
2099                              + to_number(pay_jp_report_pkg.get_udt_value(
2100                                            p_business_group_id,
2101                                            c_life_pens_new_calc_udt,
2102                                            c_add_adj_udtcol,
2103                                            to_char(i_life_pens_new),
2104                                            p_effective_date)));
2105     --
2106       if g_debug then
2107         hr_utility.set_location(l_proc,70);
2108       end if;
2109     --
2110     end if;
2111 
2112   end if;
2113 --
2114   p_life_gen_o     := o_life_gen;
2115   p_life_pens_o    := o_life_pens;
2116   p_life_gen_new_o := o_life_gen_new;
2117   p_life_pens_new_o := o_life_pens_new;
2118   p_care_med_new_o := o_care_med_new;
2119   if to_number(to_char(p_effective_date,'YYYY')) >= 2012 then
2120       p_life_ins_dct_o := least(greatest(least(o_life_gen+o_life_gen_new,40000),o_life_gen) +
2121                                 greatest(least(o_life_pens+o_life_pens_new,40000),o_life_pens) +
2122                                 least(o_care_med_new,40000),120000);
2123   else
2124       p_life_ins_dct_o := o_life_gen + o_life_pens;
2125   end if;
2126 --
2127   if g_debug then
2128     hr_utility.trace('o_life_gen       : '||to_char(o_life_gen));
2129     hr_utility.trace('o_life_pens      : '||to_char(o_life_pens));
2130     hr_utility.trace('o_life_gen_new       : '||to_char(o_life_gen_new));
2131     hr_utility.trace('o_life_pens_new      : '||to_char(o_life_pens_new));
2132     hr_utility.trace('p_life_gen_o     : '||to_char(p_life_gen_o));
2133     hr_utility.trace('p_life_pens_o    : '||to_char(p_life_pens_o));
2134     hr_utility.trace('p_life_gen_new_o     : '||to_char(p_life_gen_new_o));
2135     hr_utility.trace('p_life_pens_new_o    : '||to_char(p_life_pens_new_o));
2136     hr_utility.trace('p_life_ins_dct_o : '||to_char(p_life_ins_dct_o));
2137     hr_utility.set_location(l_proc,1000);
2138   end if;
2139 --
2140 end calc_life_ins_dct;
2141 --
2142 -- -------------------------------------------------------------------------
2143 -- calc_nonlife
2144 -- -------------------------------------------------------------------------
2145 procedure calc_nonlife_dct(
2146   p_earthquake_i      in number,
2147   p_nonlife_long_i    in number,
2148   p_nonlife_short_i   in number,
2149   p_business_group_id in number,
2150   p_effective_date    in date,
2151   p_nonlife_dct_o     out nocopy number,
2152   p_earthquake_o      out nocopy number,
2153   p_nonlife_long_o    out nocopy number,
2154   p_nonlife_short_o   out nocopy number)
2155 is
2156 --
2157   l_proc varchar2(80) := c_package||'calc_total';
2158   i_earthquake number := nvl(p_earthquake_i,0);
2159   i_nonlife_long number := nvl(p_nonlife_long_i,0);
2160   i_nonlife_short number := nvl(p_nonlife_short_i,0);
2161   o_earthquake number := 0;
2162   o_nonlife_long number := 0;
2163   o_nonlife_short number := 0;
2164   o_nonlife_dct number;
2165 --
2166 begin
2167 --
2168   if g_debug then
2169     hr_utility.set_location(l_proc,0);
2170     hr_utility.trace('p_earthquake_i      : '||to_char(p_earthquake_i));
2171     hr_utility.trace('p_nonlife_long_i    : '||to_char(p_nonlife_long_i));
2172     hr_utility.trace('p_nonlife_long_i    : '||to_char(p_nonlife_short_i));
2173     hr_utility.trace('p_business_group_id : '||to_char(p_business_group_id));
2174     hr_utility.trace('p_effective_date    : '||to_char(p_effective_date,'YYYY/MM/DD'));
2175     hr_utility.trace('i_earthquake        : '||to_char(i_earthquake));
2176     hr_utility.trace('i_nonlife_long      : '||to_char(i_nonlife_long));
2177     hr_utility.trace('i_nonlife_short     : '||to_char(i_nonlife_short));
2178   end if;
2179 --
2180   -- formula datetrack
2181   if (p_effective_date >= hr_api.g_sot
2182      and p_effective_date < c_st_upd_date_2007) then
2183   --
2184     if g_debug then
2185       hr_utility.set_location(l_proc,10);
2186     end if;
2187   --
2188     o_earthquake := null;
2189   --
2190     if i_nonlife_long > 0 then
2191     --
2192       if g_debug then
2193         hr_utility.set_location(l_proc,20);
2194       end if;
2195     --
2196       -- udt satisfy validation of max value
2197       o_nonlife_long := round(i_nonlife_long
2198                              * to_number(pay_jp_report_pkg.get_udt_value(
2199                                            p_business_group_id,
2200                                            c_nonlife_long_calc_udt,
2201                                            c_rate_udtcol,
2202                                            to_char(i_nonlife_long),
2203                                            p_effective_date))
2204                              + to_number(pay_jp_report_pkg.get_udt_value(
2205                                            p_business_group_id,
2206                                            c_nonlife_long_calc_udt,
2207                                            c_add_adj_udtcol,
2208                                            to_char(i_nonlife_long),
2209                                            p_effective_date)));
2210     --
2211       if g_debug then
2212         hr_utility.set_location(l_proc,30);
2213       end if;
2214     --
2215     end if;
2216   --
2217     if g_debug then
2218       hr_utility.set_location(l_proc,40);
2219     end if;
2220   --
2221     if i_nonlife_short > 0 then
2222     --
2223       if g_debug then
2224         hr_utility.set_location(l_proc,50);
2225       end if;
2226     --
2227       -- udt satisfy validation of max value
2228       o_nonlife_short := round(i_nonlife_short
2229                              * to_number(pay_jp_report_pkg.get_udt_value(
2230                                            p_business_group_id,
2231                                            c_nonlife_short_calc_udt,
2232                                            c_rate_udtcol,
2233                                            to_char(i_nonlife_short),
2234                                            p_effective_date))
2235                              + to_number(pay_jp_report_pkg.get_udt_value(
2236                                            p_business_group_id,
2237                                            c_nonlife_short_calc_udt,
2238                                            c_add_adj_udtcol,
2239                                            to_char(i_nonlife_short),
2240                                            p_effective_date)));
2241     --
2242       if g_debug then
2243         hr_utility.set_location(l_proc,60);
2244       end if;
2245     --
2246     end if;
2247   --
2248     o_nonlife_dct := o_nonlife_long + o_nonlife_short;
2249     --
2250     if g_effective_date <> p_effective_date
2251     or g_effective_date is null
2252     or c_nonlife_max is null then
2253     --
2254       -- need always reset cache has problem in case date is switched between 2006 and 2007.
2255       c_nonlife_max := to_number(pay_jp_report_pkg.get_udt_value(
2256                                    p_business_group_id,
2257                                    c_yea_calc_max_udt,
2258                                    c_max_udtcol,
2259                                    c_nonlife_udtrow,
2260                                    p_effective_date));
2261     --
2262     end if;
2263     --
2264     if g_debug then
2265       hr_utility.set_location(l_proc,70);
2266       hr_utility.trace('o_nonlife_dct : '||to_char(o_nonlife_dct));
2267       hr_utility.trace('c_nonlife_max : '||to_char(c_nonlife_max));
2268     end if;
2269   --
2270     if o_nonlife_dct > c_nonlife_max then
2271       o_nonlife_dct := c_nonlife_max;
2272     end if;
2273   --
2274     if g_debug then
2275       hr_utility.set_location(l_proc,80);
2276     end if;
2277   --
2278   elsif (p_effective_date >= c_st_upd_date_2007
2279           and p_effective_date <= hr_api.g_eot) then
2280   --
2281     if g_debug then
2282       hr_utility.set_location(l_proc,90);
2283     end if;
2284   --
2285     o_nonlife_short := null;
2286   --
2287     if i_earthquake > 0 then
2288     --
2289       if g_debug then
2290         hr_utility.set_location(l_proc,100);
2291       end if;
2292     --
2293       o_earthquake := round(i_earthquake);
2294       if c_earthquake_max is null then
2295         c_earthquake_max := to_number(pay_jp_report_pkg.get_udt_value(
2296                                      p_business_group_id,
2297                                      c_yea_calc_max_udt,
2298                                      c_max_udtcol,
2299                                      c_earthquake_udtrow,
2300                                      p_effective_date));
2301       end if;
2302     --
2303       if g_debug then
2304         hr_utility.set_location(l_proc,110);
2305         hr_utility.trace('o_earthquake     : '||to_char(o_earthquake));
2306         hr_utility.trace('c_earthquake_max : '||to_char(c_earthquake_max));
2307       end if;
2308     --
2309       if o_earthquake > c_earthquake_max then
2310         o_earthquake := c_earthquake_max;
2311       end if;
2312     --
2313       if g_debug then
2314         hr_utility.set_location(l_proc,120);
2315       end if;
2316     --
2317     end if;
2318   --
2319     if i_nonlife_long > 0 then
2320     --
2321       if g_debug then
2322         hr_utility.set_location(l_proc,130);
2323       end if;
2324     --
2325       -- udt satisfy validation of max value
2326       o_nonlife_long := round(i_nonlife_long
2327                              * to_number(pay_jp_report_pkg.get_udt_value(
2328                                            p_business_group_id,
2329                                            c_nonlife_long_calc_udt,
2330                                            c_rate_udtcol,
2331                                            to_char(i_nonlife_long),
2332                                            p_effective_date))
2333                              + to_number(pay_jp_report_pkg.get_udt_value(
2334                                            p_business_group_id,
2335                                            c_nonlife_long_calc_udt,
2336                                            c_add_adj_udtcol,
2337                                            to_char(i_nonlife_long),
2338                                            p_effective_date)));
2339     --
2340       if g_debug then
2341         hr_utility.set_location(l_proc,140);
2342       end if;
2343     --
2344     end if;
2345   --
2346     if g_debug then
2347       hr_utility.set_location(l_proc,150);
2348     end if;
2349   --
2350     o_nonlife_dct := o_earthquake + o_nonlife_long;
2351     --
2352     if g_effective_date <> p_effective_date
2353     or g_effective_date is null
2354     or c_nonlife_max is null then
2355     --
2356       -- need always reset cache has problem in case date is switched between 2006 and 2007.
2357       c_nonlife_max := to_number(pay_jp_report_pkg.get_udt_value(
2358                                    p_business_group_id,
2359                                    c_yea_calc_max_udt,
2360                                    c_max_udtcol,
2361                                    c_nonlife_udtrow,
2362                                    p_effective_date));
2363     --
2364     end if;
2365     --
2366     if g_debug then
2367       hr_utility.set_location(l_proc,160);
2368       hr_utility.trace('o_nonlife_dct : '||to_char(o_nonlife_dct));
2369       hr_utility.trace('c_nonlife_max : '||to_char(c_nonlife_max));
2370     end if;
2371   --
2372     if o_nonlife_dct > c_nonlife_max then
2373       o_nonlife_dct := c_nonlife_max;
2374     end if;
2375   --
2376     if g_debug then
2377       hr_utility.set_location(l_proc,170);
2378     end if;
2379   --
2380   end if;
2381 --
2382   p_earthquake_o    := o_earthquake;
2383   p_nonlife_long_o  := o_nonlife_long;
2384   p_nonlife_short_o := o_nonlife_short;
2385   p_nonlife_dct_o   := o_nonlife_dct;
2386 --
2387   if g_debug then
2388     hr_utility.trace('p_earthquake_o    : '||to_char(p_earthquake_o));
2389     hr_utility.trace('p_nonlife_long_o  : '||to_char(p_nonlife_long_o));
2390     hr_utility.trace('p_nonlife_short_o : '||to_char(p_nonlife_short_o));
2391     hr_utility.trace('p_nonlife_dct_o   : '||to_char(p_nonlife_dct_o));
2392     hr_utility.trace('o_nonlife_long    : '||to_char(o_nonlife_long));
2393     hr_utility.trace('o_nonlife_short   : '||to_char(o_nonlife_short));
2394     hr_utility.trace('o_nonlife_dct     : '||to_char(o_nonlife_dct));
2395     hr_utility.set_location(l_proc,1000);
2396   end if;
2397 --
2398 end calc_nonlife_dct;
2399 --
2400 -- -------------------------------------------------------------------------
2401 -- calc_nonlife_dct
2402 -- -------------------------------------------------------------------------
2403 --  wrapper, activate since 2007 statutory update
2404 procedure calc_nonlife_dct(
2405   p_earthquake_i      in number,
2406   p_nonlife_long_i    in number,
2407   p_business_group_id in number,
2408   p_effective_date    in date,
2409   p_nonlife_dct_o     out nocopy number,
2410   p_earthquake_o      out nocopy number,
2411   p_nonlife_long_o    out nocopy number)
2412 is
2413 --
2414   l_proc varchar2(80) := c_package||'calc_nonlife_dct';
2415   o_earthquake number;
2416   o_nonlife_long number;
2417   o_nonlife_short number;
2418   o_nonlife_dct number;
2419 --
2420 begin
2421 --
2422   if g_debug then
2423     hr_utility.set_location(l_proc,0);
2424     hr_utility.trace('calc_nonlife_dct wrapper');
2425   end if;
2426 --
2427   if (p_effective_date >= hr_api.g_sot
2428      and p_effective_date < c_st_upd_date_2007) then
2429   --
2430     if g_debug then
2431       hr_utility.set_location(l_proc,10);
2432     end if;
2433   --
2434     calc_nonlife_dct(
2435       p_earthquake_i      => p_earthquake_i,
2436       p_nonlife_long_i    => p_nonlife_long_i,
2437       p_nonlife_short_i   => null,
2438       p_business_group_id => p_business_group_id,
2439       p_effective_date    => p_effective_date,
2440       p_nonlife_dct_o     => o_nonlife_dct,
2441       p_earthquake_o      => o_earthquake,
2442       p_nonlife_long_o    => o_nonlife_long,
2443       p_nonlife_short_o   => o_nonlife_short);
2444   --
2445   end if;
2446 --
2447   p_earthquake_o    := o_earthquake;
2448   p_nonlife_long_o  := o_nonlife_long;
2449   p_nonlife_dct_o   := o_nonlife_dct;
2450 --
2451   if g_debug then
2452     hr_utility.set_location(l_proc,1000);
2453   end if;
2454 --
2455 end calc_nonlife_dct;
2456 --
2457 -- -------------------------------------------------------------------------
2458 -- calc_social_dct
2459 -- -------------------------------------------------------------------------
2460 procedure calc_social_dct(
2461   p_social_i          in number,
2462   p_business_group_id in number,
2463   p_effective_date    in date,
2464   p_social_dct_o      out nocopy number)
2465 is
2466 --
2467   l_proc varchar2(80) := c_package||'calc_total';
2468   i_social number := nvl(p_social_i,0);
2469   o_social_dct number;
2470 --
2471 begin
2472 --
2473   if g_debug then
2474     hr_utility.set_location(l_proc,0);
2475     hr_utility.trace('p_social_i          : '||to_char(p_social_i));
2476     hr_utility.trace('p_business_group_id : '||to_char(p_business_group_id));
2477     hr_utility.trace('p_effective_date    : '||to_char(p_effective_date,'YYYY/MM/DD'));
2478     hr_utility.trace('i_social            : '||to_char(i_social));
2479   end if;
2480 --
2481   -- formula datetrack
2482   if (p_effective_date >= hr_api.g_sot
2483      and p_effective_date <= hr_api.g_eot) then
2484   --
2485     if g_debug then
2486       hr_utility.set_location(l_proc,10);
2487     end if;
2488   --
2489     if i_social < 0 then
2490     --
2491       if g_debug then
2492         hr_utility.set_location(l_proc,20);
2493       end if;
2494     --
2495       o_social_dct := 0;
2496     --
2497     else
2498     --
2499       o_social_dct := round(i_social);
2500     --
2501       if g_debug then
2502         hr_utility.set_location(l_proc,30);
2503       end if;
2504     --
2505     end if;
2506   --
2507   end if;
2508 --
2509   p_social_dct_o := o_social_dct;
2510 --
2511   if g_debug then
2512     hr_utility.trace('p_social_dct_o : '||to_char(p_social_dct_o));
2513     hr_utility.trace('o_social_dct   : '||to_char(o_social_dct));
2514     hr_utility.set_location(l_proc,1000);
2515   end if;
2516 --
2517 end calc_social_dct;
2518 --
2519 -- -------------------------------------------------------------------------
2520 -- calc_mutual_aid_dct
2521 -- -------------------------------------------------------------------------
2522 procedure calc_mutual_aid_dct(
2523   p_mutual_aid_ec_i   in number,
2524   p_mutual_aid_p_i    in number,
2525   p_mutual_aid_dsc_i  in number,
2526   p_business_group_id in number,
2527   p_effective_date    in date,
2528   p_mutual_aid_dct_o  out nocopy number)
2529 is
2530 --
2531   l_proc varchar2(80) := c_package||'calc_total';
2532   i_mutual_aid_ec number := nvl(p_mutual_aid_ec_i,0);
2533   i_mutual_aid_p number := nvl(p_mutual_aid_p_i,0);
2534   i_mutual_aid_dsc number := nvl(p_mutual_aid_dsc_i,0);
2535   o_mutual_aid_dct number;
2536 --
2537 begin
2538 --
2539   if g_debug then
2540     hr_utility.set_location(l_proc,0);
2541     hr_utility.trace('p_mutual_aid_ec_i   : '||to_char(p_mutual_aid_ec_i));
2542     hr_utility.trace('p_mutual_aid_p_i    : '||to_char(p_mutual_aid_p_i));
2543     hr_utility.trace('p_mutual_aid_dsc_i  : '||to_char(p_mutual_aid_dsc_i));
2544     hr_utility.trace('p_business_group_id : '||to_char(p_business_group_id));
2545     hr_utility.trace('p_effective_date    : '||to_char(p_effective_date,'YYYY/MM/DD'));
2546     hr_utility.trace('i_mutual_aid_ec     : '||to_char(i_mutual_aid_ec));
2547     hr_utility.trace('i_mutual_aid_p      : '||to_char(i_mutual_aid_p));
2548     hr_utility.trace('i_mutual_aid_dsc    : '||to_char(i_mutual_aid_dsc));
2549   end if;
2550 --
2551   -- formula datetrack
2552   if (p_effective_date >= hr_api.g_sot
2553      and p_effective_date <= hr_api.g_eot) then
2554   --
2555     if g_debug then
2556       hr_utility.set_location(l_proc,10);
2557     end if;
2558   --
2559     o_mutual_aid_dct := round(i_mutual_aid_ec + i_mutual_aid_p + i_mutual_aid_dsc);
2560   --
2561   end if;
2562 --
2563   p_mutual_aid_dct_o := o_mutual_aid_dct;
2564 --
2565   if g_debug then
2566     hr_utility.trace('p_mutual_aid_dct_o : '||to_char(p_mutual_aid_dct_o));
2567     hr_utility.trace('o_mutual_aid_dct   : '||to_char(o_mutual_aid_dct));
2568     hr_utility.set_location(l_proc,1000);
2569   end if;
2570 --
2571 end calc_mutual_aid_dct;
2572 --
2573 -- -------------------------------------------------------------------------
2574 -- calc_spouse_dct
2575 -- -------------------------------------------------------------------------
2576 procedure calc_spouse_dct(
2577   p_spouse_income_i   in number,
2578   p_emp_income_i      in number,
2579   p_sp_type_i         in varchar2,
2580   p_wid_type_i        in varchar2,
2581   p_dct_exc_i         in varchar2,
2582   p_business_group_id in number,
2583   p_effective_date    in date,
2584   p_spouse_dct_o      out nocopy number)
2585 is
2586 --
2587   l_proc varchar2(80) := c_package||'calc_total';
2588   i_spouse_income number := nvl(p_spouse_income_i,0);
2589   i_emp_income number := nvl(p_emp_income_i,0);
2590   o_spouse_dct number := 0;
2591 --
2592   l_bg_itax_dpnt_ref_type varchar2(150);
2593   c_emp_income_max number;
2594   c_inc_spouse_dct_ma number;
2595 --
2596 begin
2597 --
2598 -- spouse_type validation is unnecessary. (just show it on form for confirmation)
2599 -- employer can distinguish the data validity between ss entry data and source data
2600 -- because employer can see archived spouse_type (source data) with ss entry data.
2601 -- spouse_type is fetched yea non-recurring entry so that it might not be setup
2602 -- data at the time when employer make archive data.
2603 -- spouse deduction on form will be calculated by based on ss entry data
2604 -- without message, even if ss entry data is not matched with source data,
2605 -- because employee cannot change spouse_type (source data) by themselves,
2606 -- specially in case when spouse_type is derived from eev (contact data can be changed).
2607 -- this might cause inconsistence between pay run result and form data,
2608 -- though employer should reject(ask employee to amend) ss entry data before pay run.
2609 --
2610 -- However, in this calculation, the calculated deduction is just information
2611 -- but as much as possible result should be same with actual yea run result,
2612 -- additionally spouse_type and widow_type are stored in recurring element,
2613 -- (dct_exc_flag is in non-recurring element), it means they probably will not be changed at yea run time
2614 -- and employer might has already setup the transferred override element for this ss form by manual,
2615 -- (actually this step is not desired.).
2616 -- finally the spouse_type, widow_type(set when spouse is inserted newly from ss
2617 -- or eev has been existed), dct_exc_flag(only case eev has been existed)
2618 -- their conditions are now included in current calculation logic like yea run formula.
2619 -- (At the calculated time, system cannot know final eev data at the yea runtime,
2620 -- so the result by this calculation might be different from final yea run result.)
2621 --
2622   if g_debug then
2623     hr_utility.set_location(l_proc,0);
2624     hr_utility.trace('p_spouse_income_i   : '||to_char(p_spouse_income_i));
2625     hr_utility.trace('p_emp_income_i      : '||to_char(p_emp_income_i));
2626     hr_utility.trace('p_business_group_id : '||to_char(p_business_group_id));
2627     hr_utility.trace('p_effective_date    : '||to_char(p_effective_date,'YYYY/MM/DD'));
2628     hr_utility.trace('i_spouse_income     : '||to_char(i_spouse_income));
2629     hr_utility.trace('i_emp_income        : '||to_char(i_emp_income));
2630     hr_utility.trace('following are just information');
2631     hr_utility.trace('p_sp_type_i         : '||p_sp_type_i);
2632     hr_utility.trace('p_wid_type_i        : '||p_wid_type_i);
2633     hr_utility.trace('p_dct_exc_i         : '||p_dct_exc_i);
2634   end if;
2635 --
2636   -- formula datetrack
2637   if (p_effective_date >= hr_api.g_sot
2638      and p_effective_date <= hr_api.g_eot) then
2639   --
2640     if g_debug then
2641       hr_utility.set_location(l_proc,10);
2642     end if;
2643   --
2644     if nvl(p_spouse_income_i,0) > 0
2645     and nvl(p_dct_exc_i,'N') = 'N' then
2646     --
2647       if g_debug then
2648         hr_utility.set_location(l_proc,20);
2649       end if;
2650     --
2651       if c_emp_income_max is null then
2652       --
2653         c_emp_income_max := to_number(pay_jp_report_pkg.get_udt_value(
2654                                        p_business_group_id,
2655                                        c_yea_calc_max_udt,
2656                                        c_max_udtcol,
2657                                        c_sp_emp_income_udtrow,
2658                                        p_effective_date));
2659       --
2660         if g_debug then
2661           hr_utility.set_location(l_proc,30);
2662           hr_utility.trace('c_emp_income_max : '||to_char(c_emp_income_max));
2663           hr_utility.trace('i_emp_income     : '||to_char(i_emp_income));
2664         end if;
2665       --
2666       end if;
2667     --
2668       if i_emp_income <= c_emp_income_max
2669       and nvl(p_wid_type_i,'0') = '0'
2670       -- calculate when sp_type is null since eev might be set in future.
2671       and nvl(p_sp_type_i,'1') <> '0' then
2672       --
2673         if g_debug then
2674           hr_utility.set_location(l_proc,40);
2675         end if;
2676       --
2677         if c_inc_spouse_dct_max is null then
2678         --
2679           c_inc_spouse_dct_max := to_number(pay_jp_report_pkg.get_udt_value(
2680                                              p_business_group_id,
2681                                              c_yea_calc_max_udt,
2682                                              c_max_udtcol,
2683                                              c_sp_dctable_sp_income_udtrow,
2684                                              p_effective_date));
2685         --
2686           if g_debug then
2687             hr_utility.set_location(l_proc,50);
2688             hr_utility.trace('c_inc_spouse_dct_max : '||to_char(c_inc_spouse_dct_max));
2689             hr_utility.trace('i_spouse_income      : '||to_char(i_spouse_income));
2690           end if;
2691         --
2692         end if;
2693       --
2694         -- even spouse_type is 2,3, if over inc_spouse_dct_max, they can be deductive for sp_spouse_dct.
2695         if i_spouse_income > c_inc_spouse_dct_max then
2696         --
2697           if g_debug then
2698             hr_utility.set_location(l_proc,60);
2699           end if;
2700         --
2701           if c_spouse_income_max is null then
2702           --
2703             c_spouse_income_max := to_number(pay_jp_report_pkg.get_udt_value(
2704                                               p_business_group_id,
2705                                               c_yea_calc_max_udt,
2706                                               c_max_udtcol,
2707                                               c_sp_spouse_income_udtrow,
2708                                               p_effective_date));
2709           --
2710           end if;
2711           --
2712           if g_debug then
2713             hr_utility.set_location(l_proc,70);
2714             hr_utility.trace('c_spouse_income_max : '||to_char(c_spouse_income_max));
2715             hr_utility.trace('i_spouse_income     : '||to_char(i_spouse_income));
2716           end if;
2717           --
2718           if i_spouse_income < c_spouse_income_max then
2719           --
2720             o_spouse_dct := round(to_number(pay_jp_report_pkg.get_udt_value(
2721                                         p_business_group_id,
2722                                         c_spouse_calc_udt,
2723                                         c_dct_udtcol,
2724                                         to_char(i_spouse_income),
2725                                         p_effective_date)));
2726           --
2727             if g_debug then
2728               hr_utility.set_location(l_proc,80);
2729               hr_utility.trace('o_spouse_dct : '||to_char(o_spouse_dct));
2730             end if;
2731           --
2732           end if;
2733         --
2734         end if;
2735       --
2736       end if;
2737     --
2738     end if;
2739   --
2740   end if;
2741 --
2742   p_spouse_dct_o := o_spouse_dct;
2743 --
2744   if g_debug then
2745     hr_utility.trace('p_spouse_dct_o : '||to_char(p_spouse_dct_o));
2746     hr_utility.trace('o_spouse_dct   : '||to_char(o_spouse_dct));
2747     hr_utility.set_location(l_proc,1000);
2748   end if;
2749 --
2750 end calc_spouse_dct;
2751 --
2752 -- -------------------------------------------------------------------------
2753 -- calc_spouse_inc
2754 -- -------------------------------------------------------------------------
2755 procedure calc_spouse_inc(
2756   p_sp_earned_inc_i            in number,
2757   p_sp_earned_inc_exp_i        in number,
2758   p_sp_business_inc_i          in number,
2759   p_sp_business_inc_exp_i      in number,
2760   p_sp_miscellaneous_inc_i     in number,
2761   p_sp_miscellaneous_inc_exp_i in number,
2762   p_sp_dividend_inc_i          in number,
2763   p_sp_dividend_inc_exp_i      in number,
2764   p_sp_real_estate_inc_i       in number,
2765   p_sp_real_estate_inc_exp_i   in number,
2766   p_sp_retirement_inc_i        in number,
2767   p_sp_retirement_inc_exp_i    in number,
2768   p_sp_other_inc_i             in number,
2769   p_sp_other_inc_exp_i         in number,
2770   p_sp_other_inc_exp_dct_i     in number,
2771   p_sp_other_inc_exp_tmp_i     in number,
2772   p_sp_other_inc_exp_tmp_exp_i in number,
2773   p_sp_inc_cnt_i               in number,
2774   p_ent_spouse_inc_i           in number,
2775   p_business_group_id          in number,
2776   p_effective_date             in date,
2777   p_calc_spouse_inc_rec        out nocopy t_calc_spouse_inc_rec,
2778   p_spouse_inc_o               out nocopy number)
2779 is
2780 --
2781   l_proc varchar2(80) := c_package||'calc_total';
2782   o_spouse_inc number := 0;
2783 --
2784 begin
2785 --
2786   if g_debug then
2787     hr_utility.set_location(l_proc,0);
2788     hr_utility.trace('p_sp_earned_inc_i            : '||to_char(p_sp_earned_inc_i));
2789     hr_utility.trace('p_sp_earned_inc_exp_i        : '||to_char(p_sp_earned_inc_exp_i));
2790     hr_utility.trace('p_sp_business_inc_i          : '||to_char(p_sp_business_inc_i));
2791     hr_utility.trace('p_sp_business_inc_exp_i      : '||to_char(p_sp_business_inc_exp_i));
2792     hr_utility.trace('p_sp_miscellaneous_inc_i     : '||to_char(p_sp_miscellaneous_inc_i));
2793     hr_utility.trace('p_sp_miscellaneous_inc_exp_i : '||to_char(p_sp_miscellaneous_inc_exp_i));
2794     hr_utility.trace('p_sp_dividend_inc_i          : '||to_char(p_sp_dividend_inc_i));
2795     hr_utility.trace('p_sp_dividend_inc_exp_i      : '||to_char(p_sp_dividend_inc_exp_i));
2796     hr_utility.trace('p_sp_real_estate_inc_i       : '||to_char(p_sp_real_estate_inc_i));
2797     hr_utility.trace('p_sp_real_estate_inc_exp_i   : '||to_char(p_sp_real_estate_inc_exp_i));
2798     hr_utility.trace('p_sp_retirement_inc_i        : '||to_char(p_sp_retirement_inc_i));
2799     hr_utility.trace('p_sp_retirement_inc_exp_i    : '||to_char(p_sp_retirement_inc_exp_i));
2800     hr_utility.trace('p_sp_other_inc_i             : '||to_char(p_sp_other_inc_i));
2801     hr_utility.trace('p_sp_other_inc_exp_i         : '||to_char(p_sp_other_inc_exp_i));
2802     hr_utility.trace('p_sp_other_inc_exp_dct_i     : '||to_char(p_sp_other_inc_exp_dct_i));
2803     hr_utility.trace('p_sp_other_inc_exp_tmp_i     : '||to_char(p_sp_other_inc_exp_tmp_i));
2804     hr_utility.trace('p_sp_other_inc_exp_tmp_exp_i : '||to_char(p_sp_other_inc_exp_tmp_exp_i));
2805     hr_utility.trace('p_sp_inc_cnt_i               : '||to_char(p_sp_inc_cnt_i));
2806     hr_utility.trace('p_ent_spouse_inc_i           : '||to_char(p_ent_spouse_inc_i));
2807   end if;
2808 --
2809   p_calc_spouse_inc_rec.sp_earned_inc_calc := 0;
2810   p_calc_spouse_inc_rec.sp_business_inc_calc := 0;
2811   p_calc_spouse_inc_rec.sp_miscellaneous_inc_calc := 0;
2812   p_calc_spouse_inc_rec.sp_dividend_inc_calc := 0;
2813   p_calc_spouse_inc_rec.sp_real_estate_inc_calc := 0;
2814   p_calc_spouse_inc_rec.sp_retirement_inc_calc := 0;
2815   p_calc_spouse_inc_rec.sp_other_inc_calc := 0;
2816   p_calc_spouse_inc_rec.sp_inc_calc := 0;
2817 --
2818   -- formula datetrack
2819   if (p_effective_date >= hr_api.g_sot
2820      and p_effective_date <= hr_api.g_eot) then
2821   --
2822     p_calc_spouse_inc_rec.sp_earned_inc_calc := p_sp_earned_inc_i - p_sp_earned_inc_exp_i;
2823     if p_calc_spouse_inc_rec.sp_earned_inc_calc < 0 then
2824       p_calc_spouse_inc_rec.sp_earned_inc_calc := 0;
2825     end if;
2826   --
2827     p_calc_spouse_inc_rec.sp_business_inc_calc := p_sp_business_inc_i - p_sp_business_inc_exp_i;
2828     -- basically this case is not happened.
2829     if p_calc_spouse_inc_rec.sp_business_inc_calc < 0 then
2830       p_calc_spouse_inc_rec.sp_business_inc_calc := 0;
2831     end if;
2832   --
2833     p_calc_spouse_inc_rec.sp_miscellaneous_inc_calc := p_sp_miscellaneous_inc_i - p_sp_miscellaneous_inc_exp_i;
2834     -- basically this case is not happened.
2835     if p_calc_spouse_inc_rec.sp_miscellaneous_inc_calc < 0 then
2836       p_calc_spouse_inc_rec.sp_miscellaneous_inc_calc := 0;
2837     end if;
2838   --
2839     p_calc_spouse_inc_rec.sp_dividend_inc_calc := p_sp_dividend_inc_i - p_sp_dividend_inc_exp_i;
2840     -- basically this case is not happened.
2841     if p_calc_spouse_inc_rec.sp_dividend_inc_calc < 0 then
2842       p_calc_spouse_inc_rec.sp_dividend_inc_calc := 0;
2843     end if;
2844   --
2845     p_calc_spouse_inc_rec.sp_real_estate_inc_calc := p_sp_real_estate_inc_i - p_sp_real_estate_inc_exp_i;
2846     -- basically this case is not happened.
2847     if p_calc_spouse_inc_rec.sp_real_estate_inc_calc < 0 then
2848       p_calc_spouse_inc_rec.sp_real_estate_inc_calc := 0;
2849     end if;
2850   --
2851     p_calc_spouse_inc_rec.sp_retirement_inc_calc := trunc((p_sp_retirement_inc_i - p_sp_retirement_inc_exp_i) / 2);
2852     -- basically this case is not happened.
2853     if p_calc_spouse_inc_rec.sp_retirement_inc_calc < 0 then
2854       p_calc_spouse_inc_rec.sp_retirement_inc_calc := 0;
2855     end if;
2856   --
2857   -- currently sp_other_inc_exp_tmp_i and sp_other_inc_exp_tmp_exp is not supported on FormPG.
2858     if (p_sp_other_inc_exp_tmp_i - p_sp_other_inc_exp_tmp_exp_i) / 2 < 0 then
2859       p_calc_spouse_inc_rec.sp_other_inc_calc := p_sp_other_inc_i - p_sp_other_inc_exp_i;
2860     else
2861       if p_sp_other_inc_i - p_sp_other_inc_exp_tmp_i < 0 then
2862         p_calc_spouse_inc_rec.sp_other_inc_calc := 0;
2863       else
2864         if p_sp_other_inc_exp_i - p_sp_other_inc_exp_tmp_exp_i < 0 then
2865           p_calc_spouse_inc_rec.sp_other_inc_calc := 0;
2866         else
2867           p_calc_spouse_inc_rec.sp_other_inc_calc := ((p_sp_other_inc_i - p_sp_other_inc_exp_tmp_i)
2868                                                       - (p_sp_other_inc_exp_i - p_sp_other_inc_exp_tmp_exp_i))
2869                                                      + trunc((p_sp_other_inc_exp_tmp_i - p_sp_other_inc_exp_tmp_exp_i) / 2);
2870         end if;
2871       end if;
2872     end if;
2873     if p_calc_spouse_inc_rec.sp_other_inc_calc < 0 then
2874       p_calc_spouse_inc_rec.sp_other_inc_calc := 0;
2875     end if;
2876   --
2877     p_calc_spouse_inc_rec.sp_inc_calc := p_calc_spouse_inc_rec.sp_earned_inc_calc
2878                                          + p_calc_spouse_inc_rec.sp_business_inc_calc
2879                                          + p_calc_spouse_inc_rec.sp_miscellaneous_inc_calc
2880                                          + p_calc_spouse_inc_rec.sp_dividend_inc_calc
2881                                          + p_calc_spouse_inc_rec.sp_real_estate_inc_calc
2882                                          + p_calc_spouse_inc_rec.sp_retirement_inc_calc
2883                                          + p_calc_spouse_inc_rec.sp_other_inc_calc;
2884   --
2885   end if;
2886 --
2887   -- basically use the calculated spouse inc, but use entry spouse inc if no record of sp_inc
2888   if p_sp_inc_cnt_i > 0 then
2889   --
2890     o_spouse_inc := p_calc_spouse_inc_rec.sp_inc_calc;
2891   --
2892   else
2893   --
2894     o_spouse_inc := p_ent_spouse_inc_i;
2895   --
2896   end if;
2897 --
2898   if g_debug then
2899     hr_utility.trace('p_calc_spouse_inc_rec.sp_earned_inc_calc        : '||to_char(p_calc_spouse_inc_rec.sp_earned_inc_calc));
2900     hr_utility.trace('p_calc_spouse_inc_rec.sp_business_inc_calc      : '||to_char(p_calc_spouse_inc_rec.sp_business_inc_calc));
2901     hr_utility.trace('p_calc_spouse_inc_rec.sp_miscellaneous_inc_calc : '||to_char(p_calc_spouse_inc_rec.sp_miscellaneous_inc_calc));
2902     hr_utility.trace('p_calc_spouse_inc_rec.sp_dividend_inc_calc      : '||to_char(p_calc_spouse_inc_rec.sp_dividend_inc_calc));
2903     hr_utility.trace('p_calc_spouse_inc_rec.sp_real_estate_inc_calc   : '||to_char(p_calc_spouse_inc_rec.sp_real_estate_inc_calc));
2904     hr_utility.trace('p_calc_spouse_inc_rec.sp_retirement_inc_calc    : '||to_char(p_calc_spouse_inc_rec.sp_retirement_inc_calc));
2905     hr_utility.trace('p_calc_spouse_inc_rec.sp_other_inc_calc         : '||to_char(p_calc_spouse_inc_rec.sp_other_inc_calc));
2906     hr_utility.trace('p_sp_inc_cnt_i                                  : '||to_char(p_sp_inc_cnt_i));
2907     hr_utility.trace('p_calc_spouse_inc_rec.sp_inc_calc               : '||to_char(p_calc_spouse_inc_rec.sp_inc_calc));
2908     hr_utility.trace('p_ent_spouse_inc_i                              : '||to_char(p_ent_spouse_inc_i));
2909     hr_utility.trace('o_spouse_inc                                    : '||to_char(o_spouse_inc));
2910     hr_utility.set_location(l_proc,1000);
2911   end if;
2912 --
2913   p_spouse_inc_o := o_spouse_inc;
2914 --
2915 end calc_spouse_inc;
2916 --
2917 -- -------------------------------------------------------------------------
2918 -- calc_dct
2919 -- -------------------------------------------------------------------------
2920 procedure calc_dct(
2921   p_assignment_action_id in number,
2922   p_calc_dct_rec         out nocopy t_calc_dct_rec)
2923 is
2924 --
2925   l_proc varchar2(80) := c_package||'calc_ins';
2926   l_calc_total_rec t_calc_total_rec;
2927   l_calc_spouse_inc_rec t_calc_spouse_inc_rec;
2928 --
2929   l_payroll_action_id number;
2930   l_business_group_id number;
2931   l_effective_date date;
2932 --
2933   cursor csr_pact
2934   is
2935   select /* +ORDERED */
2936          ppa.payroll_action_id,
2937          ppa.business_group_id,
2938          ppa.effective_date
2939   from   pay_assignment_actions paa,
2940          pay_payroll_actions ppa
2941   where  paa.assignment_action_id = p_assignment_action_id
2942   and    ppa.payroll_action_id = paa.payroll_action_id;
2943 --
2944 begin
2945 --
2946   if g_debug then
2947     hr_utility.set_location(l_proc,0);
2948   end if;
2949 --
2950   calc_total(
2951     p_assignment_action_id => p_assignment_action_id,
2952     p_calc_total_rec       => l_calc_total_rec);
2953 --
2954   p_calc_dct_rec.life_gen_ins_prem      := l_calc_total_rec.life_gen;
2955   p_calc_dct_rec.life_pens_ins_prem     := l_calc_total_rec.life_pens;
2956   p_calc_dct_rec.life_gen_new_ins_prem  := l_calc_total_rec.life_gen_new;
2957   p_calc_dct_rec.life_pens_new_ins_prem := l_calc_total_rec.life_pens_new;
2958   p_calc_dct_rec.care_med_new_ins_prem  := l_calc_total_rec.care_med_new;
2959   p_calc_dct_rec.earthquake_ins_prem    := l_calc_total_rec.earthquake;
2960   p_calc_dct_rec.nonlife_long_ins_prem  := l_calc_total_rec.nonlife_long;
2961   p_calc_dct_rec.nonlife_short_ins_prem := l_calc_total_rec.nonlife_short;
2962   p_calc_dct_rec.national_pens_ins_prem := l_calc_total_rec.national_pens;
2963   p_calc_dct_rec.social_ins_prem        := l_calc_total_rec.social;
2964 
2965 --
2966   open csr_pact;
2967   fetch csr_pact into l_payroll_action_id, l_business_group_id, l_effective_date;
2968   close csr_pact;
2969 --
2970   calc_spouse_inc(
2971     p_sp_earned_inc_i            => l_calc_total_rec.sp_earned_inc,
2972     p_sp_earned_inc_exp_i        => l_calc_total_rec.sp_earned_inc_exp,
2973     p_sp_business_inc_i          => l_calc_total_rec.sp_business_inc,
2974     p_sp_business_inc_exp_i      => l_calc_total_rec.sp_business_inc_exp,
2975     p_sp_miscellaneous_inc_i     => l_calc_total_rec.sp_miscellaneous_inc,
2976     p_sp_miscellaneous_inc_exp_i => l_calc_total_rec.sp_miscellaneous_inc_exp,
2977     p_sp_dividend_inc_i          => l_calc_total_rec.sp_dividend_inc,
2978     p_sp_dividend_inc_exp_i      => l_calc_total_rec.sp_dividend_inc_exp,
2979     p_sp_real_estate_inc_i       => l_calc_total_rec.sp_real_estate_inc,
2980     p_sp_real_estate_inc_exp_i   => l_calc_total_rec.sp_real_estate_inc_exp,
2981     p_sp_retirement_inc_i        => l_calc_total_rec.sp_retirement_inc,
2982     p_sp_retirement_inc_exp_i    => l_calc_total_rec.sp_retirement_inc_exp,
2983     p_sp_other_inc_i             => l_calc_total_rec.sp_other_inc,
2984     p_sp_other_inc_exp_i         => l_calc_total_rec.sp_other_inc_exp,
2985     p_sp_other_inc_exp_dct_i     => l_calc_total_rec.sp_other_inc_exp_dct,
2986     p_sp_other_inc_exp_tmp_i     => l_calc_total_rec.sp_other_inc_exp_tmp,
2987     p_sp_other_inc_exp_tmp_exp_i => l_calc_total_rec.sp_other_inc_exp_tmp_exp,
2988     p_business_group_id          => l_business_group_id,
2989     p_effective_date             => l_effective_date,
2990     p_sp_inc_cnt_i               => l_calc_total_rec.sp_inc_cnt,
2991     p_ent_spouse_inc_i           => l_calc_total_rec.sp_spouse_inc,
2992     p_calc_spouse_inc_rec        => l_calc_spouse_inc_rec,
2993     p_spouse_inc_o               => p_calc_dct_rec.spouse_inc);
2994 --
2995   p_calc_dct_rec.sp_earned_inc_calc := l_calc_spouse_inc_rec.sp_earned_inc_calc;
2996   p_calc_dct_rec.sp_business_inc_calc := l_calc_spouse_inc_rec.sp_business_inc_calc;
2997   p_calc_dct_rec.sp_miscellaneous_inc_calc := l_calc_spouse_inc_rec.sp_miscellaneous_inc_calc;
2998   p_calc_dct_rec.sp_dividend_inc_calc := l_calc_spouse_inc_rec.sp_dividend_inc_calc;
2999   p_calc_dct_rec.sp_real_estate_inc_calc := l_calc_spouse_inc_rec.sp_real_estate_inc_calc;
3000   p_calc_dct_rec.sp_retirement_inc_calc := l_calc_spouse_inc_rec.sp_retirement_inc_calc;
3001   p_calc_dct_rec.sp_other_inc_calc := l_calc_spouse_inc_rec.sp_other_inc_calc;
3002   p_calc_dct_rec.sp_inc_calc := l_calc_spouse_inc_rec.sp_inc_calc;
3003 --
3004   calc_life_ins_dct(
3005     p_life_gen_i        => l_calc_total_rec.life_gen,
3006     p_life_pens_i       => l_calc_total_rec.life_pens,
3007     p_life_gen_new_i    => l_calc_total_rec.life_gen_new,
3008     p_life_pens_new_i   => l_calc_total_rec.life_pens_new,
3009     p_care_med_new_i    => l_calc_total_rec.care_med_new,
3010     p_business_group_id => l_business_group_id,
3011     p_effective_date    => l_effective_date,
3012     p_life_ins_dct_o    => p_calc_dct_rec.life_ins_deduction,
3013     p_life_gen_o        => p_calc_dct_rec.life_gen_ins_calc_prem,
3014     p_life_pens_o       => p_calc_dct_rec.life_pens_ins_calc_prem,
3015     p_life_gen_new_o    => p_calc_dct_rec.life_gen_new_ins_calc_prem,
3016     p_life_pens_new_o   => p_calc_dct_rec.life_pens_new_ins_calc_prem,
3017     p_care_med_new_o    => p_calc_dct_rec.care_med_new_ins_calc_prem);
3018 --
3019   calc_nonlife_dct(
3020     p_earthquake_i      => l_calc_total_rec.earthquake,
3021     p_nonlife_long_i    => l_calc_total_rec.nonlife_long,
3022     p_nonlife_short_i   => l_calc_total_rec.nonlife_short,
3023     p_business_group_id => l_business_group_id,
3024     p_effective_date    => l_effective_date,
3025     p_nonlife_dct_o     => p_calc_dct_rec.nonlife_ins_deduction,
3026     p_earthquake_o      => p_calc_dct_rec.earthquake_ins_calc_prem,
3027     p_nonlife_long_o    => p_calc_dct_rec.nonlife_long_ins_calc_prem,
3028     p_nonlife_short_o   => p_calc_dct_rec.nonlife_short_ins_calc_prem);
3029 --
3030   calc_social_dct(
3031     p_social_i          => l_calc_total_rec.social,
3032     p_business_group_id => l_business_group_id,
3033     p_effective_date    => l_effective_date,
3034     p_social_dct_o      => p_calc_dct_rec.social_ins_deduction);
3035 --
3036   calc_mutual_aid_dct(
3037     p_mutual_aid_ec_i   => l_calc_total_rec.mutual_aid_ec,
3038     p_mutual_aid_p_i    => l_calc_total_rec.mutual_aid_p,
3039     p_mutual_aid_dsc_i  => l_calc_total_rec.mutual_aid_dsc,
3040     p_business_group_id => l_business_group_id,
3041     p_effective_date    => l_effective_date,
3042     p_mutual_aid_dct_o  => p_calc_dct_rec.mutual_aid_deduction);
3043 --
3044   calc_spouse_dct(
3045     p_spouse_income_i   => p_calc_dct_rec.spouse_inc,
3046     p_emp_income_i      => l_calc_total_rec.sp_emp_inc,
3047     p_sp_type_i         => l_calc_total_rec.sp_sp_type,
3048     p_wid_type_i        => l_calc_total_rec.sp_wid_type,
3049     p_dct_exc_i         => l_calc_total_rec.sp_dct_exc,
3050     p_business_group_id => l_business_group_id,
3051     p_effective_date    => l_effective_date,
3052     p_spouse_dct_o      => p_calc_dct_rec.spouse_deduction);
3053 --
3054   -- cache in case payroll_action_id is same.
3055   if g_payroll_action_id is null
3056   or (g_payroll_action_id <> l_payroll_action_id
3057      and l_payroll_action_id is not null) then
3058   --
3059     g_payroll_action_id := l_payroll_action_id;
3060     g_business_group_id := l_business_group_id;
3061     g_effective_date  := l_effective_date;
3062   --
3063   end if;
3064 --
3065   if g_debug then
3066     hr_utility.trace('end update_assact');
3067     hr_utility.set_location(l_proc,1000);
3068   end if;
3069 --
3070 end calc_dct;
3071 --
3072 -- -------------------------------------------------------------------------
3073 -- do_calculate
3074 -- -------------------------------------------------------------------------
3075 procedure do_calculate(
3076   p_action_information_id in number,
3077   p_object_version_number in out nocopy number)
3078 is
3079 --
3080   l_proc varchar2(80) := c_package||'do_calculate';
3081   l_submission_date date;
3082   l_assact_rec pay_jp_isdf_assact_v%rowtype;
3083   l_calc_dct_rec t_calc_dct_rec;
3084   l_action_information_id number;
3085   l_object_version_number number;
3086 --
3087   cursor csr_calc_dct
3088   is
3089   select *
3090   from   pay_jp_isdf_calc_dct_v
3091   where  assignment_action_id = l_assact_rec.assignment_action_id
3092   and    action_context_type = 'AAP'
3093   and    action_information_category = 'JP_ISDF_CALC_DCT'
3094   and    status <> 'D';
3095 --
3096   cursor csr_calc_dct2
3097   is
3098   select *
3099   from   pay_jp_isdf_calc_dct_v2
3100   where  assignment_action_id = l_assact_rec.assignment_action_id
3101   and    action_context_type = 'AAP'
3102   and    action_information_category = 'JP_ISDF_CALC_DCT2'
3103   and    status <> 'D';
3104  --
3105   l_csr_calc_dct csr_calc_dct%rowtype;
3106   l_csr_calc_dct2 csr_calc_dct2%rowtype;
3107 --
3108 begin
3109 --
3110   if g_debug then
3111     hr_utility.set_location(l_proc,0);
3112   end if;
3113 --
3114   l_submission_date := check_submission_period(p_action_information_id);
3115 --
3116   if g_debug then
3117     hr_utility.set_location(l_proc,10);
3118     hr_utility.trace('submission_date  : '||fnd_date.date_to_canonical(l_submission_date));
3119   end if;
3120 --
3121   -- unnecessary to lock
3122   select *
3123   into   l_assact_rec
3124   from   pay_jp_isdf_assact_v
3125   where  action_information_id = p_action_information_id;
3126 --
3127   if l_assact_rec.transaction_status <> 'N' then
3128     fnd_message.set_name('PAY','PAY_JP_DEF_INVALID_TXN_STATUS');
3129     fnd_message.raise_error;
3130   end if;
3131 --
3132   if g_debug then
3133     hr_utility.set_location(l_proc,20);
3134     hr_utility.trace('action_information_id  : '||p_action_information_id);
3135     hr_utility.trace('object_version_number  : '||p_object_version_number);
3136     hr_utility.trace('assignment_action_id   : '||l_assact_rec.assignment_action_id);
3137     hr_utility.trace('start calc_ins');
3138   end if;
3139 --
3140   calc_dct(
3141     p_assignment_action_id => l_assact_rec.assignment_action_id,
3142     p_calc_dct_rec         => l_calc_dct_rec);
3143 --
3144   open csr_calc_dct;
3145   fetch csr_calc_dct into l_csr_calc_dct;
3146   close csr_calc_dct;
3147 
3148 --
3149   if l_csr_calc_dct.action_information_id is null then
3150   --
3151     select pay_action_information_s.nextval
3152     into   l_action_information_id
3153     from   dual;
3154   --
3155     pay_jp_isdf_dml_pkg.create_calc_dct(
3156       p_action_information_id        => l_action_information_id,
3157       p_assignment_action_id         => l_assact_rec.assignment_action_id,
3158       p_action_context_type          => 'AAP',
3159       p_assignment_id                => l_assact_rec.assignment_id,
3160       p_effective_date               => l_assact_rec.effective_date,
3161       p_action_information_category  => 'JP_ISDF_CALC_DCT',
3162       p_status                       => 'I',
3163       p_life_gen_ins_prem            => l_calc_dct_rec.life_gen_ins_prem,
3164       p_life_pens_ins_prem           => l_calc_dct_rec.life_pens_ins_prem,
3165       p_life_gen_ins_calc_prem       => l_calc_dct_rec.life_gen_ins_calc_prem,
3166       p_life_pens_ins_calc_prem      => l_calc_dct_rec.life_pens_ins_calc_prem,
3167       p_life_ins_deduction           => l_calc_dct_rec.life_ins_deduction,
3168       p_nonlife_long_ins_prem        => l_calc_dct_rec.nonlife_long_ins_prem,
3169       p_nonlife_short_ins_prem       => l_calc_dct_rec.nonlife_short_ins_prem,
3170       p_earthquake_ins_prem          => l_calc_dct_rec.earthquake_ins_prem,
3171       p_nonlife_long_ins_calc_prem   => l_calc_dct_rec.nonlife_long_ins_calc_prem,
3172       p_nonlife_short_ins_calc_prem  => l_calc_dct_rec.nonlife_short_ins_calc_prem,
3173       p_earthquake_ins_calc_prem     => l_calc_dct_rec.earthquake_ins_calc_prem,
3174       p_nonlife_ins_deduction        => l_calc_dct_rec.nonlife_ins_deduction,
3175       p_national_pens_ins_prem       => l_calc_dct_rec.national_pens_ins_prem,
3176       p_social_ins_deduction         => l_calc_dct_rec.social_ins_deduction,
3177       p_mutual_aid_deduction         => l_calc_dct_rec.mutual_aid_deduction,
3178       p_sp_earned_income_calc        => l_calc_dct_rec.sp_earned_inc_calc,
3179       p_sp_business_income_calc      => l_calc_dct_rec.sp_business_inc_calc,
3180       p_sp_miscellaneous_income_calc => l_calc_dct_rec.sp_miscellaneous_inc_calc,
3181       p_sp_dividend_income_calc      => l_calc_dct_rec.sp_dividend_inc_calc,
3182       p_sp_real_estate_income_calc   => l_calc_dct_rec.sp_real_estate_inc_calc,
3183       p_sp_retirement_income_calc    => l_calc_dct_rec.sp_retirement_inc_calc,
3184       p_sp_other_income_calc         => l_calc_dct_rec.sp_other_inc_calc,
3185       p_sp_income_calc               => l_calc_dct_rec.sp_inc_calc,
3186       p_spouse_income                => l_calc_dct_rec.spouse_inc,
3187       p_spouse_deduction             => l_calc_dct_rec.spouse_deduction,
3188       p_object_version_number        => l_object_version_number,
3189       p_life_gen_new_ins_prem        => l_calc_dct_rec.life_gen_new_ins_prem,
3190       p_life_pens_new_ins_prem       => l_calc_dct_rec.life_pens_new_ins_prem,
3191       p_life_gen_new_ins_calc_prem   => l_calc_dct_rec.life_gen_new_ins_calc_prem,
3192       p_life_pens_new_ins_calc_prem  => l_calc_dct_rec.life_pens_new_ins_calc_prem);
3193   --
3194   else
3195   --
3196     l_action_information_id := l_csr_calc_dct.action_information_id;
3197     l_object_version_number := l_csr_calc_dct.object_version_number;
3198   --
3199   -- calc_dct is always insert mode because no initial archive data.
3200     pay_jp_isdf_dml_pkg.update_calc_dct(
3201       p_action_information_id        => l_action_information_id,
3202       p_object_version_number        => l_object_version_number,
3203       p_status                       => 'I',
3204       p_life_gen_ins_prem            => l_calc_dct_rec.life_gen_ins_prem,
3205       p_life_pens_ins_prem           => l_calc_dct_rec.life_pens_ins_prem,
3206       p_life_gen_ins_calc_prem       => l_calc_dct_rec.life_gen_ins_calc_prem,
3207       p_life_pens_ins_calc_prem      => l_calc_dct_rec.life_pens_ins_calc_prem,
3208       p_life_ins_deduction           => l_calc_dct_rec.life_ins_deduction,
3209       p_nonlife_long_ins_prem        => l_calc_dct_rec.nonlife_long_ins_prem,
3210       p_nonlife_short_ins_prem       => l_calc_dct_rec.nonlife_short_ins_prem,
3211       p_earthquake_ins_prem          => l_calc_dct_rec.earthquake_ins_prem,
3212       p_nonlife_long_ins_calc_prem   => l_calc_dct_rec.nonlife_long_ins_calc_prem,
3213       p_nonlife_short_ins_calc_prem  => l_calc_dct_rec.nonlife_short_ins_calc_prem,
3214       p_earthquake_ins_calc_prem     => l_calc_dct_rec.earthquake_ins_calc_prem,
3215       p_nonlife_ins_deduction        => l_calc_dct_rec.nonlife_ins_deduction,
3216       p_national_pens_ins_prem       => l_calc_dct_rec.national_pens_ins_prem,
3217       p_social_ins_deduction         => l_calc_dct_rec.social_ins_deduction,
3218       p_mutual_aid_deduction         => l_calc_dct_rec.mutual_aid_deduction,
3219       p_sp_earned_income_calc        => l_calc_dct_rec.sp_earned_inc_calc,
3220       p_sp_business_income_calc      => l_calc_dct_rec.sp_business_inc_calc,
3221       p_sp_miscellaneous_income_calc => l_calc_dct_rec.sp_miscellaneous_inc_calc,
3222       p_sp_dividend_income_calc      => l_calc_dct_rec.sp_dividend_inc_calc,
3223       p_sp_real_estate_income_calc   => l_calc_dct_rec.sp_real_estate_inc_calc,
3224       p_sp_retirement_income_calc    => l_calc_dct_rec.sp_retirement_inc_calc,
3225       p_sp_other_income_calc         => l_calc_dct_rec.sp_other_inc_calc,
3226       p_sp_income_calc               => l_calc_dct_rec.sp_inc_calc,
3227       p_spouse_income                => l_calc_dct_rec.spouse_inc,
3228       p_spouse_deduction             => l_calc_dct_rec.spouse_deduction,
3229       p_life_gen_new_ins_prem        => l_calc_dct_rec.life_gen_new_ins_prem,
3230       p_life_pens_new_ins_prem       => l_calc_dct_rec.life_pens_new_ins_prem,
3231       p_life_gen_new_ins_calc_prem   => l_calc_dct_rec.life_gen_new_ins_calc_prem,
3232       p_life_pens_new_ins_calc_prem  => l_calc_dct_rec.life_pens_new_ins_calc_prem);
3233   --
3234   end if;
3235 --
3236   open csr_calc_dct2;
3237   fetch csr_calc_dct2 into l_csr_calc_dct2;
3238   close csr_calc_dct2;
3239 --
3240   if l_csr_calc_dct2.action_information_id is null then
3241   --
3242     select pay_action_information_s.nextval
3243     into   l_action_information_id
3244     from   dual;
3245   --
3246     pay_jp_isdf_dml_pkg.create_calc_dct2(
3247       p_action_information_id        => l_action_information_id,
3248       p_assignment_action_id         => l_assact_rec.assignment_action_id,
3249       p_action_context_type          => 'AAP',
3250       p_assignment_id                => l_assact_rec.assignment_id,
3251       p_effective_date               => l_assact_rec.effective_date,
3252       p_action_information_category  => 'JP_ISDF_CALC_DCT2',
3253       p_status                       => 'I',
3254       p_object_version_number        => l_object_version_number,
3255       p_care_med_new_ins_prem        => l_calc_dct_rec.care_med_new_ins_prem,
3256       p_care_med_new_ins_calc_prem   => l_calc_dct_rec.care_med_new_ins_calc_prem);
3257   --
3258   else
3259   --
3260     l_action_information_id := l_csr_calc_dct2.action_information_id;
3261     l_object_version_number := l_csr_calc_dct2.object_version_number;
3262   --
3263   -- calc_dct is always insert mode because no initial archive data.
3264     pay_jp_isdf_dml_pkg.update_calc_dct2(
3265       p_action_information_id        => l_action_information_id,
3266       p_object_version_number        => l_object_version_number,
3267       p_status                       => 'I',
3268       p_care_med_new_ins_prem        => l_calc_dct_rec.care_med_new_ins_prem,
3269       p_care_med_new_ins_calc_prem   => l_calc_dct_rec.care_med_new_ins_calc_prem);
3270   --
3271   end if;
3272 --
3273   if g_debug then
3274     hr_utility.trace('end update_assact');
3275     hr_utility.set_location(l_proc,1000);
3276   end if;
3277 --
3278 end do_calculate;
3279 --
3280 -- -------------------------------------------------------------------------
3281 -- do_finalize
3282 -- -------------------------------------------------------------------------
3283 procedure do_finalize(
3284   p_action_information_id in number,
3285   p_object_version_number in out nocopy number,
3286   p_user_comments         in varchar2)
3287 is
3288 --
3289   l_proc varchar2(80) := c_package||'do_finalize';
3290   l_submission_date date;
3291   l_assact_rec pay_jp_isdf_assact_v%rowtype;
3292   l_calc_dct_rec t_calc_dct_rec;
3293   l_action_information_id number;
3294   l_object_version_number number;
3295 --
3296   cursor csr_calc_dct
3297   is
3298   select *
3299   from   pay_jp_isdf_calc_dct_v
3300   where  assignment_action_id = l_assact_rec.assignment_action_id
3301   and    action_context_type = 'AAP'
3302   and    action_information_category = 'JP_ISDF_CALC_DCT'
3303   and    status <> 'D';
3304 --
3305   cursor csr_calc_dct2
3306   is
3307   select *
3308   from   pay_jp_isdf_calc_dct_v2
3309   where  assignment_action_id = l_assact_rec.assignment_action_id
3310   and    action_context_type = 'AAP'
3311   and    action_information_category = 'JP_ISDF_CALC_DCT2'
3312   and    status <> 'D';
3313   --
3314   l_csr_calc_dct csr_calc_dct%rowtype;
3315   l_csr_calc_dct2 csr_calc_dct2%rowtype;
3316 --
3317   cursor csr_entry
3318   is
3319   select *
3320   from   pay_jp_isdf_entry_v
3321   where  assignment_action_id = l_assact_rec.assignment_action_id
3322   and    action_context_type = 'AAP'
3323   and    action_information_category = 'JP_ISDF_ENTRY'
3324   and    status <> 'D';
3325 --
3326   l_csr_entry csr_entry%rowtype;
3327 --
3328 begin
3329 --
3330   if g_debug then
3331     hr_utility.set_location(l_proc,0);
3332   end if;
3333 --
3334   l_submission_date := check_submission_period(p_action_information_id);
3335 --
3336   if g_debug then
3337     hr_utility.set_location(l_proc,10);
3338     hr_utility.trace('submission_date  : '||fnd_date.date_to_canonical(l_submission_date));
3339   end if;
3340 --
3341   pay_jp_isdf_dml_pkg.lock_assact(p_action_information_id, p_object_version_number, l_assact_rec);
3342 --
3343   if l_assact_rec.transaction_status <> 'N' then
3344     fnd_message.set_name('PAY','PAY_JP_DEF_INVALID_TXN_STATUS');
3345     fnd_message.raise_error;
3346   end if;
3347 --
3348   if g_debug then
3349     hr_utility.set_location(l_proc,20);
3350     hr_utility.trace('action_information_id  : '||p_action_information_id);
3351     hr_utility.trace('object_version_number  : '||p_object_version_number);
3352     hr_utility.trace('assignment_action_id   : '||l_assact_rec.assignment_action_id);
3353     hr_utility.trace('start calc_dct before finalize');
3354   end if;
3355 --
3356   calc_dct(
3357     p_assignment_action_id => l_assact_rec.assignment_action_id,
3358     p_calc_dct_rec         => l_calc_dct_rec);
3359 --
3360   open csr_calc_dct;
3361   fetch csr_calc_dct into l_csr_calc_dct;
3362   close csr_calc_dct;
3363 --
3364 
3365   if l_csr_calc_dct.action_information_id is null then
3366   --
3367     select pay_action_information_s.nextval
3368     into   l_action_information_id
3369     from   dual;
3370   --
3371     pay_jp_isdf_dml_pkg.create_calc_dct(
3372       p_action_information_id        => l_action_information_id,
3373       p_assignment_action_id         => l_assact_rec.assignment_action_id,
3374       p_action_context_type          => 'AAP',
3375       p_assignment_id                => l_assact_rec.assignment_id,
3376       p_effective_date               => l_assact_rec.effective_date,
3377       p_action_information_category  => 'JP_ISDF_CALC_DCT',
3378       p_status                       => 'I',
3379       p_life_gen_ins_prem            => l_calc_dct_rec.life_gen_ins_prem,
3380       p_life_pens_ins_prem           => l_calc_dct_rec.life_pens_ins_prem,
3381       p_life_gen_ins_calc_prem       => l_calc_dct_rec.life_gen_ins_calc_prem,
3382       p_life_pens_ins_calc_prem      => l_calc_dct_rec.life_pens_ins_calc_prem,
3383       p_life_ins_deduction           => l_calc_dct_rec.life_ins_deduction,
3384       p_nonlife_long_ins_prem        => l_calc_dct_rec.nonlife_long_ins_prem,
3385       p_nonlife_short_ins_prem       => l_calc_dct_rec.nonlife_short_ins_prem,
3386       p_earthquake_ins_prem          => l_calc_dct_rec.earthquake_ins_prem,
3387       p_nonlife_long_ins_calc_prem   => l_calc_dct_rec.nonlife_long_ins_calc_prem,
3388       p_nonlife_short_ins_calc_prem  => l_calc_dct_rec.nonlife_short_ins_calc_prem,
3389       p_earthquake_ins_calc_prem     => l_calc_dct_rec.earthquake_ins_calc_prem,
3390       p_nonlife_ins_deduction        => l_calc_dct_rec.nonlife_ins_deduction,
3391       p_national_pens_ins_prem       => l_calc_dct_rec.national_pens_ins_prem,
3392       p_social_ins_deduction         => l_calc_dct_rec.social_ins_deduction,
3393       p_mutual_aid_deduction         => l_calc_dct_rec.mutual_aid_deduction,
3394       p_sp_earned_income_calc        => l_calc_dct_rec.sp_earned_inc_calc,
3395       p_sp_business_income_calc      => l_calc_dct_rec.sp_business_inc_calc,
3396       p_sp_miscellaneous_income_calc => l_calc_dct_rec.sp_miscellaneous_inc_calc,
3397       p_sp_dividend_income_calc      => l_calc_dct_rec.sp_dividend_inc_calc,
3398       p_sp_real_estate_income_calc   => l_calc_dct_rec.sp_real_estate_inc_calc,
3399       p_sp_retirement_income_calc    => l_calc_dct_rec.sp_retirement_inc_calc,
3400       p_sp_other_income_calc         => l_calc_dct_rec.sp_other_inc_calc,
3401       p_sp_income_calc               => l_calc_dct_rec.sp_inc_calc,
3402       p_spouse_income                => l_calc_dct_rec.spouse_inc,
3403       p_spouse_deduction             => l_calc_dct_rec.spouse_deduction,
3404       p_object_version_number        => l_object_version_number,
3405       p_life_gen_new_ins_prem        => l_calc_dct_rec.life_gen_new_ins_prem,
3406       p_life_pens_new_ins_prem       => l_calc_dct_rec.life_pens_new_ins_prem,
3407       p_life_gen_new_ins_calc_prem   => l_calc_dct_rec.life_gen_new_ins_calc_prem,
3408       p_life_pens_new_ins_calc_prem  => l_calc_dct_rec.life_pens_new_ins_calc_prem);
3409   --
3410   else
3411   --
3412     l_action_information_id := l_csr_calc_dct.action_information_id;
3413     l_object_version_number := l_csr_calc_dct.object_version_number;
3414   --
3415   -- calc_dct is always insert mode because no initial archive data.
3416     pay_jp_isdf_dml_pkg.update_calc_dct(
3417       p_action_information_id        => l_action_information_id,
3418       p_object_version_number        => l_object_version_number,
3419       p_status                       => 'I',
3420       p_life_gen_ins_prem            => l_calc_dct_rec.life_gen_ins_prem,
3421       p_life_pens_ins_prem           => l_calc_dct_rec.life_pens_ins_prem,
3422       p_life_gen_ins_calc_prem       => l_calc_dct_rec.life_gen_ins_calc_prem,
3423       p_life_pens_ins_calc_prem      => l_calc_dct_rec.life_pens_ins_calc_prem,
3424       p_life_ins_deduction           => l_calc_dct_rec.life_ins_deduction,
3425       p_nonlife_long_ins_prem        => l_calc_dct_rec.nonlife_long_ins_prem,
3426       p_nonlife_short_ins_prem       => l_calc_dct_rec.nonlife_short_ins_prem,
3427       p_earthquake_ins_prem          => l_calc_dct_rec.earthquake_ins_prem,
3428       p_nonlife_long_ins_calc_prem   => l_calc_dct_rec.nonlife_long_ins_calc_prem,
3429       p_nonlife_short_ins_calc_prem  => l_calc_dct_rec.nonlife_short_ins_calc_prem,
3430       p_earthquake_ins_calc_prem     => l_calc_dct_rec.earthquake_ins_calc_prem,
3431       p_nonlife_ins_deduction        => l_calc_dct_rec.nonlife_ins_deduction,
3432       p_national_pens_ins_prem       => l_calc_dct_rec.national_pens_ins_prem,
3433       p_social_ins_deduction         => l_calc_dct_rec.social_ins_deduction,
3434       p_mutual_aid_deduction         => l_calc_dct_rec.mutual_aid_deduction,
3435       p_sp_earned_income_calc        => l_calc_dct_rec.sp_earned_inc_calc,
3436       p_sp_business_income_calc      => l_calc_dct_rec.sp_business_inc_calc,
3437       p_sp_miscellaneous_income_calc => l_calc_dct_rec.sp_miscellaneous_inc_calc,
3438       p_sp_dividend_income_calc      => l_calc_dct_rec.sp_dividend_inc_calc,
3439       p_sp_real_estate_income_calc   => l_calc_dct_rec.sp_real_estate_inc_calc,
3440       p_sp_retirement_income_calc    => l_calc_dct_rec.sp_retirement_inc_calc,
3441       p_sp_other_income_calc         => l_calc_dct_rec.sp_other_inc_calc,
3442       p_sp_income_calc               => l_calc_dct_rec.sp_inc_calc,
3443       p_spouse_income                => l_calc_dct_rec.spouse_inc,
3444       p_spouse_deduction             => l_calc_dct_rec.spouse_deduction,
3445       p_life_gen_new_ins_prem        => l_calc_dct_rec.life_gen_new_ins_prem,
3446       p_life_pens_new_ins_prem       => l_calc_dct_rec.life_pens_new_ins_prem,
3447       p_life_gen_new_ins_calc_prem   => l_calc_dct_rec.life_gen_new_ins_calc_prem,
3448       p_life_pens_new_ins_calc_prem  => l_calc_dct_rec.life_pens_new_ins_calc_prem);
3449   --
3450   end if;
3451 --
3452   open csr_calc_dct2;
3453   fetch csr_calc_dct2 into l_csr_calc_dct2;
3454   close csr_calc_dct2;
3455 
3456   if l_csr_calc_dct2.action_information_id is null then
3457   --
3458     select pay_action_information_s.nextval
3459     into   l_action_information_id
3460     from   dual;
3461   --
3462     pay_jp_isdf_dml_pkg.create_calc_dct2(
3463       p_action_information_id        => l_action_information_id,
3464       p_assignment_action_id         => l_assact_rec.assignment_action_id,
3465       p_action_context_type          => 'AAP',
3466       p_assignment_id                => l_assact_rec.assignment_id,
3467       p_effective_date               => l_assact_rec.effective_date,
3468       p_action_information_category  => 'JP_ISDF_CALC_DCT2',
3469       p_status                       => 'I',
3470       p_object_version_number        => l_object_version_number,
3471       p_care_med_new_ins_prem        => l_calc_dct_rec.care_med_new_ins_prem,
3472       p_care_med_new_ins_calc_prem   => l_calc_dct_rec.care_med_new_ins_calc_prem);
3473   --
3474   else
3475   --
3476     l_action_information_id := l_csr_calc_dct2.action_information_id;
3477     l_object_version_number := l_csr_calc_dct2.object_version_number;
3478   --
3479   -- calc_dct is always insert mode because no initial archive data.
3480     pay_jp_isdf_dml_pkg.update_calc_dct2(
3481       p_action_information_id        => l_action_information_id,
3482       p_object_version_number        => l_object_version_number,
3483       p_status                       => 'I',
3484       p_care_med_new_ins_prem        => l_calc_dct_rec.care_med_new_ins_prem,
3485       p_care_med_new_ins_calc_prem   => l_calc_dct_rec.care_med_new_ins_calc_prem);
3486   --
3487   end if;
3488 --
3489   -- Originally jp_isdf_entry should be made at the time of transfer
3490   -- because latest pre-set entry data in the transfer time is not same
3491   -- as the condition at the time of archive.
3492   -- However, finalize action is to fix all entry data except for _o prefex columns,
3493   -- so make jp_isdf_entry.
3494 --
3495   open csr_entry;
3496   fetch csr_entry into l_csr_entry;
3497   close csr_entry;
3498 --
3499   if l_csr_entry.action_information_id is null then
3500   --
3501     select pay_action_information_s.nextval
3502     into   l_action_information_id
3503     from   dual;
3504   --
3505     pay_jp_isdf_dml_pkg.create_entry(
3506       p_action_information_id        => l_action_information_id,
3507       p_assignment_action_id         => l_assact_rec.assignment_action_id,
3508       p_action_context_type          => 'AAP',
3509       p_assignment_id                => l_assact_rec.assignment_id,
3510       p_effective_date               => l_assact_rec.effective_date,
3511       p_action_information_category  => 'JP_ISDF_ENTRY',
3512       p_status                       => 'I',
3513       p_ins_datetrack_update_mode    => null,
3514       p_ins_element_entry_id         => null,
3515       p_ins_ee_object_version_number => null,
3516       p_life_gen_ins_prem            => l_calc_dct_rec.life_gen_ins_prem,
3517       p_life_gen_ins_prem_o          => null,
3518       p_life_pens_ins_prem           => l_calc_dct_rec.life_pens_ins_prem,
3519       p_life_pens_ins_prem_o         => null,
3520       p_nonlife_long_ins_prem        => l_calc_dct_rec.nonlife_long_ins_prem,
3521       p_nonlife_long_ins_prem_o      => null,
3522       p_nonlife_short_ins_prem       => l_calc_dct_rec.nonlife_short_ins_prem,
3523       p_nonlife_short_ins_prem_o     => null,
3524       p_earthquake_ins_prem          => l_calc_dct_rec.earthquake_ins_prem,
3525       p_earthquake_ins_prem_o        => null,
3526       p_is_datetrack_update_mode     => null,
3527       p_is_element_entry_id          => null,
3528       p_is_ee_object_version_number  => null,
3529       p_social_ins_prem              => l_calc_dct_rec.social_ins_deduction,
3530       p_social_ins_prem_o            => null,
3531       p_mutual_aid_prem              => l_calc_dct_rec.mutual_aid_deduction,
3532       p_mutual_aid_prem_o            => null,
3533       p_spouse_income                => l_calc_dct_rec.spouse_inc,
3534       p_spouse_income_o              => null,
3535       p_national_pens_ins_prem       => l_calc_dct_rec.national_pens_ins_prem,
3536       p_national_pens_ins_prem_o     => null,
3537       p_life_gen_ins_prem_new        => l_calc_dct_rec.life_gen_new_ins_prem,
3538       p_life_pens_ins_prem_new       => l_calc_dct_rec.life_pens_new_ins_prem,
3539       p_care_med_ins_prem_new        => l_calc_dct_rec.care_med_new_ins_prem,
3540       p_object_version_number        => l_object_version_number);
3541   --
3542   else
3543   --
3544     l_action_information_id := l_csr_entry.action_information_id;
3545     l_object_version_number := l_csr_entry.object_version_number;
3546   --
3547     -- if entry data was extracted from entry at the initial archive time,
3548     -- entry data has been set, otherwise, once the finalized entry data
3549     -- is changed to return status, then the data is finalized again in second time,
3550     -- it is not queried data and newly inserted in previous finalize time.
3551     -- so that the element_entry is not set, it means the previous finalized data.
3552     -- it can be overriden.
3553     --
3554     if l_csr_entry.ins_element_entry_id is not null
3555     or l_csr_entry.is_element_entry_id is not null then
3556     --
3557       pay_jp_isdf_dml_pkg.update_entry(
3558         p_action_information_id    => l_action_information_id,
3559         p_object_version_number    => l_object_version_number,
3560         p_status                   => 'Q',
3561         p_life_gen_ins_prem        => l_calc_dct_rec.life_gen_ins_prem,
3562         p_life_gen_ins_prem_o      => l_csr_entry.life_gen_ins_prem,
3563         p_life_pens_ins_prem       => l_calc_dct_rec.life_pens_ins_prem,
3564         p_life_pens_ins_prem_o     => l_csr_entry.life_pens_ins_prem,
3565         p_nonlife_long_ins_prem    => l_calc_dct_rec.nonlife_long_ins_prem,
3566         p_nonlife_long_ins_prem_o  => l_csr_entry.nonlife_long_ins_prem,
3567         p_nonlife_short_ins_prem   => l_calc_dct_rec.nonlife_short_ins_prem,
3568         p_nonlife_short_ins_prem_o => l_csr_entry.nonlife_short_ins_prem,
3569         p_earthquake_ins_prem      => l_calc_dct_rec.earthquake_ins_prem,
3570         p_earthquake_ins_prem_o    => l_csr_entry.earthquake_ins_prem,
3571         p_social_ins_prem          => l_calc_dct_rec.social_ins_deduction,
3572         p_social_ins_prem_o        => l_csr_entry.social_ins_prem,
3573         p_mutual_aid_prem          => l_calc_dct_rec.mutual_aid_deduction,
3574         p_mutual_aid_prem_o        => l_csr_entry.mutual_aid_prem,
3575         p_spouse_income            => l_calc_dct_rec.spouse_inc,
3576         p_spouse_income_o          => l_csr_entry.spouse_income,
3577         p_national_pens_ins_prem   => l_calc_dct_rec.national_pens_ins_prem,
3578         p_national_pens_ins_prem_o => l_csr_entry.national_pens_ins_prem,
3579         p_life_gen_ins_prem_new    => l_calc_dct_rec.life_gen_new_ins_prem,
3580         p_life_pens_ins_prem_new   => l_calc_dct_rec.life_pens_new_ins_prem,
3581         p_care_med_ins_prem_new    => l_calc_dct_rec.care_med_new_ins_prem);
3582     --
3583     else
3584     --
3585       pay_jp_isdf_dml_pkg.update_entry(
3586         p_action_information_id    => l_action_information_id,
3587         p_object_version_number    => l_object_version_number,
3588         p_status                   => 'I',
3589         p_life_gen_ins_prem        => l_calc_dct_rec.life_gen_ins_prem,
3590         p_life_gen_ins_prem_o      => null,
3591         p_life_pens_ins_prem       => l_calc_dct_rec.life_pens_ins_prem,
3592         p_life_pens_ins_prem_o     => null,
3593         p_nonlife_long_ins_prem    => l_calc_dct_rec.nonlife_long_ins_prem,
3594         p_nonlife_long_ins_prem_o  => null,
3595         p_nonlife_short_ins_prem   => l_calc_dct_rec.nonlife_short_ins_prem,
3596         p_nonlife_short_ins_prem_o => null,
3597         p_earthquake_ins_prem      => l_calc_dct_rec.earthquake_ins_prem,
3598         p_earthquake_ins_prem_o    => null,
3599         p_social_ins_prem          => l_calc_dct_rec.social_ins_deduction,
3600         p_social_ins_prem_o        => null,
3601         p_mutual_aid_prem          => l_calc_dct_rec.mutual_aid_deduction,
3602         p_mutual_aid_prem_o        => null,
3603         p_spouse_income            => l_calc_dct_rec.spouse_inc,
3604         p_spouse_income_o          => null,
3605         p_national_pens_ins_prem   => l_calc_dct_rec.national_pens_ins_prem,
3606         p_national_pens_ins_prem_o => null,
3607         p_life_gen_ins_prem_new    => l_calc_dct_rec.life_gen_new_ins_prem,
3608         p_life_pens_ins_prem_new   => l_calc_dct_rec.life_pens_new_ins_prem,
3609         p_care_med_ins_prem_new    => l_calc_dct_rec.care_med_new_ins_prem);
3610     --
3611     end if;
3612   --
3613   end if;
3614 --
3615   if g_debug then
3616     hr_utility.set_location(l_proc,20);
3617     hr_utility.trace('end calc_dct before finalize');
3618   end if;
3619 --
3620   if g_debug then
3621     hr_utility.set_location(l_proc,20);
3622     hr_utility.trace('action_information_id  : '||p_action_information_id);
3623     hr_utility.trace('object_version_number  : '||p_object_version_number);
3624     hr_utility.trace('assignment_action_id   : '||l_assact_rec.assignment_action_id);
3625     hr_utility.trace('start update_assact');
3626   end if;
3627 --
3628   p_object_version_number := l_assact_rec.object_version_number + 1;
3629 --
3630   --api is disable because assact has been locked.
3631   --pay_jp_isdf_dml_pkg.update_assact(
3632   --  p_action_information_id => l_assact_rec.assignment_action_id,
3633   --  p_object_version_number => p_object_version_number,
3634   --  p_transaction_status    => 'F',
3635   --  p_finalized_date        => fnd_date.date_to_canonical(l_submission_date),
3636   --  p_finalized_by          => fnd_number.number_to_canonical(fnd_global.user_id),
3637   --  p_user_comments         => p_user_comments,
3638   --  p_admin_comments        => l_assact_rec.admin_comments,
3639   --  p_transfer_status       => l_assact_rec.transfer_status,
3640   --  p_transfer_date         => l_assact_rec.transfer_date,
3641   --  p_expiry_date           => l_assact_rec.expiry_date);
3642   update pay_jp_isdf_assact_dml_v
3643   set    object_version_number = p_object_version_number,
3644          transaction_status    = 'F',
3645          finalized_date        = fnd_date.date_to_canonical(l_submission_date),
3646          finalized_by          = fnd_number.number_to_canonical(fnd_global.user_id),
3647          user_comments         = p_user_comments
3648   where  row_id = l_assact_rec.row_id;
3649 --
3650   if g_debug then
3651     hr_utility.trace('end update_assact');
3652     hr_utility.set_location(l_proc,1000);
3653   end if;
3654 --
3655 end do_finalize;
3656 --
3657 -- -------------------------------------------------------------------------
3658 -- do_reject
3659 -- -------------------------------------------------------------------------
3660 procedure do_reject(
3661   p_action_information_id in number,
3662   p_object_version_number in out nocopy number,
3663   p_admin_comments        in varchar2)
3664 is
3665 --
3666   l_proc varchar2(80) := c_package||'do_finalize';
3667   l_submission_date date;
3668   l_assact_rec pay_jp_isdf_assact_v%rowtype;
3669 --
3670 begin
3671 --
3672   if g_debug then
3673     hr_utility.set_location(l_proc,0);
3674   end if;
3675 --
3676   l_submission_date := check_submission_period(p_action_information_id);
3677 --
3678   if g_debug then
3679     hr_utility.set_location(l_proc,10);
3680     hr_utility.trace('submission_date  : '||fnd_date.date_to_canonical(l_submission_date));
3681   end if;
3682 --
3683   pay_jp_isdf_dml_pkg.lock_assact(p_action_information_id, p_object_version_number, l_assact_rec);
3684 --
3685   if l_assact_rec.transaction_status not in ('F', 'A') then
3686     fnd_message.set_name('PAY', 'PAY_JP_DEF_INVALID_TXN_STATUS');
3687     fnd_message.raise_error;
3688   elsif l_assact_rec.transfer_status <> 'U' then
3689     fnd_message.set_name('PAY','PAY_JP_DEF_ALREADY_TRANSFERRED');
3690     fnd_message.raise_error;
3691   end if;
3692 --
3693   if g_debug then
3694     hr_utility.set_location(l_proc,20);
3695     hr_utility.trace('action_information_id  : '||p_action_information_id);
3696     hr_utility.trace('object_version_number  : '||p_object_version_number);
3697     hr_utility.trace('assignment_action_id   : '||l_assact_rec.assignment_action_id);
3698     hr_utility.trace('start calc_dct before finalize');
3699   end if;
3700 --
3701   delete
3702   from  pay_action_information
3703   where action_context_id = l_assact_rec.assignment_action_id
3704   and   action_context_type = 'AAP'
3705   and   action_information_category <> 'JP_ISDF_ASSACT';
3706 --
3707   if g_debug then
3708     hr_utility.set_location(l_proc,20);
3709     hr_utility.trace('action_information_id  : '||p_action_information_id);
3710     hr_utility.trace('object_version_number  : '||p_object_version_number);
3711     hr_utility.trace('assignment_action_id   : '||l_assact_rec.assignment_action_id);
3712     hr_utility.trace('start update_assact');
3713   end if;
3714 --
3715   p_object_version_number := l_assact_rec.object_version_number + 1;
3716 --
3717   --api is disable because assact has been locked.
3718   --pay_jp_isdf_dml_pkg.update_assact(
3719   --  p_action_information_id => l_assact_rec.assignment_action_id,
3720   --  p_object_version_number => p_object_version_number,
3721   --  p_transaction_status    => 'U',
3722   --  p_finalized_date        => null,
3723   --  p_finalized_by          => null,
3724   --  p_user_comments         => l_assact_rec.user_comments,
3725   --  p_admin_comments        => p_admin_comments,
3726   --  p_transfer_status       => l_assact_rec.transfer_status,
3727   --  p_transfer_date         => l_assact_rec.transfer_date,
3728   --  p_expiry_date           => l_assact_rec.expiry_date);
3729   update pay_jp_isdf_assact_dml_v
3730   set    object_version_number = p_object_version_number,
3731          transaction_status    = 'U',
3732          finalized_date        = null,
3733          finalized_by          = null,
3734          admin_comments        = p_admin_comments
3735   where  row_id = l_assact_rec.row_id;
3736 --
3737   if g_debug then
3738     hr_utility.trace('end update_assact');
3739     hr_utility.set_location(l_proc,1000);
3740   end if;
3741 --
3742 end do_reject;
3743 --
3744 -- -------------------------------------------------------------------------
3745 -- do_return
3746 -- -------------------------------------------------------------------------
3747 procedure do_return(
3748   p_action_information_id in number,
3749   p_object_version_number in out nocopy number,
3750   p_admin_comments        in varchar2)
3751 is
3752 --
3753   l_proc varchar2(80) := c_package||'do_return';
3754   l_submission_date date;
3755   l_assact_rec pay_jp_isdf_assact_v%rowtype;
3756 --
3757 begin
3758 --
3759   if g_debug then
3760     hr_utility.set_location(l_proc,0);
3761   end if;
3762 --
3763   l_submission_date := check_submission_period(p_action_information_id);
3764 --
3765   if g_debug then
3766     hr_utility.set_location(l_proc,10);
3767     hr_utility.trace('submission_date  : '||fnd_date.date_to_canonical(l_submission_date));
3768   end if;
3769 --
3770   pay_jp_isdf_dml_pkg.lock_assact(p_action_information_id, p_object_version_number, l_assact_rec);
3771 --
3772   if l_assact_rec.transaction_status not in ('F', 'A') then
3773     fnd_message.set_name('PAY', 'PAY_JP_DEF_INVALID_TXN_STATUS');
3774     fnd_message.raise_error;
3775   elsif l_assact_rec.transfer_status <> 'U' then
3776     fnd_message.set_name('PAY','PAY_JP_DEF_ALREADY_TRANSFERRED');
3777     fnd_message.raise_error;
3778   end if;
3779 --
3780   if g_debug then
3781     hr_utility.set_location(l_proc,20);
3782     hr_utility.trace('action_information_id  : '||p_action_information_id);
3783     hr_utility.trace('object_version_number  : '||p_object_version_number);
3784     hr_utility.trace('assignment_action_id   : '||l_assact_rec.assignment_action_id);
3785     hr_utility.trace('start calc_dct before finalize');
3786   end if;
3787 --
3788   if g_debug then
3789     hr_utility.set_location(l_proc,20);
3790     hr_utility.trace('action_information_id  : '||p_action_information_id);
3791     hr_utility.trace('object_version_number  : '||p_object_version_number);
3792     hr_utility.trace('assignment_action_id   : '||l_assact_rec.assignment_action_id);
3793     hr_utility.trace('start update_assact');
3794   end if;
3795 --
3796   p_object_version_number := l_assact_rec.object_version_number + 1;
3797 --
3798   --api is disable because assact has been locked.
3799   --pay_jp_isdf_dml_pkg.update_assact(
3800   --  p_action_information_id => l_assact_rec.assignment_action_id,
3801   --  p_object_version_number => p_object_version_number,
3802   --  p_transaction_status    => 'N',
3803   --  p_finalized_date        => null,
3804   --  p_finalized_by          => null,
3805   --  p_user_comments         => l_assact_rec.user_comments,
3806   --  p_admin_comments        => p_admin_comments,
3807   --  p_transfer_status       => l_assact_rec.transfer_status,
3808   --  p_transfer_date         => l_assact_rec.transfer_date,
3809   --  p_expiry_date           => l_assact_rec.expiry_date);
3810   update pay_jp_isdf_assact_dml_v
3811   set    object_version_number = p_object_version_number,
3812          transaction_status    = 'N',
3813          finalized_date        = null,
3814          finalized_by          = null,
3815          admin_comments        = p_admin_comments
3816   where  row_id = l_assact_rec.row_id;
3817 --
3818   if g_debug then
3819     hr_utility.trace('end update_assact');
3820     hr_utility.set_location(l_proc,1000);
3821   end if;
3822 --
3823 end do_return;
3824 --
3825 -- -------------------------------------------------------------------------
3826 -- do_approve
3827 -- -------------------------------------------------------------------------
3828 procedure do_approve(
3829   p_action_information_id in number,
3830   p_object_version_number in out nocopy number)
3831 is
3832 --
3833   l_proc varchar2(80) := c_package||'do_approve';
3834   l_assact_rec pay_jp_isdf_assact_v%rowtype;
3835 --
3836 begin
3837 --
3838   if g_debug then
3839     hr_utility.set_location(l_proc,0);
3840   end if;
3841 --
3842   pay_jp_isdf_dml_pkg.lock_assact(p_action_information_id, p_object_version_number, l_assact_rec);
3843 --
3844   if l_assact_rec.transaction_status <> 'F' then
3845     fnd_message.set_name('PAY', 'PAY_JP_DEF_INVALID_TXN_STATUS');
3846     fnd_message.raise_error;
3847   end if;
3848 --
3849   if g_debug then
3850     hr_utility.set_location(l_proc,20);
3851     hr_utility.trace('action_information_id  : '||p_action_information_id);
3852     hr_utility.trace('object_version_number  : '||p_object_version_number);
3853     hr_utility.trace('assignment_action_id   : '||l_assact_rec.assignment_action_id);
3854     hr_utility.trace('start calc_dct before finalize');
3855   end if;
3856 --
3857   if g_debug then
3858     hr_utility.set_location(l_proc,20);
3859     hr_utility.trace('action_information_id  : '||p_action_information_id);
3860     hr_utility.trace('object_version_number  : '||p_object_version_number);
3861     hr_utility.trace('assignment_action_id   : '||l_assact_rec.assignment_action_id);
3862     hr_utility.trace('start update_assact');
3863   end if;
3864 --
3865   p_object_version_number := l_assact_rec.object_version_number + 1;
3866 --
3867   --api is disable because assact has been locked.
3868   --pay_jp_isdf_dml_pkg.update_assact(
3869   --  p_action_information_id => l_assact_rec.assignment_action_id,
3870   --  p_object_version_number => p_object_version_number,
3871   --  p_transaction_status    => 'A',
3872   --  p_finalized_date        => l_assact_rec.finalized_date,
3873   --  p_finalized_by          => l_assact_rec.finalized_by,
3874   --  p_user_comments         => l_assact_rec.user_comments,
3875   --  p_admin_comments        => l_assact_rec.admin_comments,
3876   --  p_transfer_status       => l_assact_rec.transfer_status,
3877   --  p_transfer_date         => l_assact_rec.transfer_date,
3878   --  p_expiry_date           => l_assact_rec.expiry_date);
3879   update pay_jp_isdf_assact_dml_v
3880   set    object_version_number = p_object_version_number,
3881          transaction_status    = 'A'
3882   where  row_id = l_assact_rec.row_id;
3883 --
3884   if g_debug then
3885     hr_utility.trace('end update_assact');
3886     hr_utility.set_location(l_proc,1000);
3887   end if;
3888 --
3889 end do_approve;
3890 --
3891 -- -------------------------------------------------------------------------
3892 -- insert_session
3893 -- -------------------------------------------------------------------------
3894 procedure insert_session(
3895             p_effective_date in date)
3896 is
3897 --
3898   l_rowid rowid;
3899 --
3900   cursor csr_session
3901   is
3902   select rowid
3903   from   fnd_sessions
3904   where  session_id = userenv('sessionid')
3905   for update nowait;
3906 --
3907 begin
3908 --
3909   open csr_session;
3910   fetch csr_session into l_rowid;
3911   --
3912     if csr_session%notfound then
3913     --
3914       insert into fnd_sessions(
3915         session_id,
3916         effective_date)
3917       values(
3918         userenv('sessionid'),
3919         p_effective_date);
3920     --
3921     else
3922     --
3923       update fnd_sessions
3924       set    effective_date = p_effective_date
3925       where rowid = l_rowid;
3926     --
3927     end if;
3928   --
3929   close csr_session;
3930 --
3931 end insert_session;
3932 --
3933 -- -------------------------------------------------------------------------
3934 -- delete_session
3935 -- -------------------------------------------------------------------------
3936 procedure delete_session
3937 is
3938 begin
3939 --
3940   delete
3941   from  fnd_sessions
3942   where session_id = userenv('sessionid');
3943 --
3944 end delete_session;
3945 --
3946 -- -------------------------------------------------------------------------
3947 -- changed
3948 -- -------------------------------------------------------------------------
3949 function changed(
3950   value1 in varchar2,
3951   value2 in varchar2)
3952 return boolean
3953 is
3954 begin
3955 --
3956   if nvl(value1, hr_api.g_varchar2) <> nvl(value2, hr_api.g_varchar2) then
3957     return true;
3958   else
3959     return false;
3960   end if;
3961 --
3962 end changed;
3963 --
3964 function changed(
3965   value1 in number,
3966   value2 in number)
3967 return boolean
3968 is
3969 begin
3970 --
3971   if nvl(value1, hr_api.g_number) <> nvl(value2, hr_api.g_number) then
3972     return true;
3973   else
3974     return false;
3975   end if;
3976 --
3977 end changed;
3978 --
3979 function changed(
3980   value1 in date,
3981   value2 in date)
3982 return boolean
3983 is
3984 begin
3985 --
3986   if nvl(value1, hr_api.g_date) <> nvl(value2, hr_api.g_date) then
3987     return true;
3988   else
3989     return false;
3990   end if;
3991 --
3992 end changed;
3993 --
3994 -- -------------------------------------------------------------------------
3995 -- transfer_entry
3996 -- -------------------------------------------------------------------------
3997 procedure transfer_entry(
3998   p_rec in out nocopy pay_jp_isdf_entry_v%rowtype,
3999   p_effective_date in date,
4000   p_expire_after_transfer in varchar2)
4001 is
4002 --
4003   l_proc varchar2(80) := c_package||'transfer_entry';
4004 --
4005   l_effective_date date;
4006   l_esd date;
4007   l_eed date;
4008   l_warning boolean;
4009   l_ins_element_link_id number;
4010   l_is_element_link_id number;
4011 --
4012   l_ins_element_entry_id number;
4013   l_ins_ee_object_version_number number;
4014   l_ins_datetrack_update_mode pay_jp_isdf_entry_v.ins_datetrack_update_mode%type;
4015   l_is_element_entry_id number;
4016   l_is_ee_object_version_number number;
4017   l_is_datetrack_update_mode pay_jp_isdf_entry_v.is_datetrack_update_mode%type;
4018   l_status pay_jp_isdf_entry_v.status%type;
4019 --
4020   l_entry_rec pay_jp_isdf_archive_pkg.t_entry_rec;
4021 --
4022   cursor csr_pact
4023   is
4024   select /* +ORDERED */
4025          ppa.payroll_action_id,
4026          ppa.business_group_id,
4027          ppa.effective_date
4028   from   pay_assignment_actions paa,
4029          pay_payroll_actions ppa
4030   where  paa.assignment_action_id = p_rec.assignment_action_id
4031   and    ppa.payroll_action_id = paa.payroll_action_id;
4032 --
4033 begin
4034 --
4035   if g_debug then
4036     hr_utility.set_location(l_proc,0);
4037   end if;
4038 --
4039   if p_effective_date is null then
4040     l_effective_date := p_rec.effective_date;
4041   else
4042     l_effective_date := p_effective_date;
4043   end if;
4044 --
4045   -- re-extract current entry data on transfer date
4046   -- since jp_isdf_entry data was extracted on archive date.
4047   --
4048   if g_business_group_id is null
4049   or g_effective_date is null
4050   or g_effective_date <> l_effective_date then
4051   --
4052     g_payroll_action_id := null;
4053     g_business_group_id := null;
4054     g_effective_date := null;
4055    --
4056     open csr_pact;
4057     fetch csr_pact into g_payroll_action_id, g_business_group_id, g_effective_date;
4058     close csr_pact;
4059   --
4060   end if;
4061   --
4062   pay_jp_isdf_archive_pkg.fetch_entry(
4063     p_assignment_id     => p_rec.assignment_id,
4064     p_business_group_id => g_business_group_id,
4065     p_effective_date    => l_effective_date,
4066     p_entry_rec         => l_entry_rec);
4067   --
4068   if p_rec.status = 'I' then
4069   --
4070     -- even if rec status is 'I', eev might setup by manually at transfer run time.
4071     -- when entry exists, use new ovn, update mode at transfer time instead of stored data.
4072     if l_entry_rec.ins_entry_cnt > 0 then
4073     --
4074       pay_element_entry_api.update_element_entry(
4075         p_validate              => false,
4076         p_effective_date        => l_effective_date,
4077         p_business_group_id     => g_business_group_id,
4078         p_datetrack_update_mode => l_entry_rec.ins_datetrack_update_mode,
4079         p_element_entry_id      => l_entry_rec.ins_element_entry_id,
4080         p_object_version_number => l_entry_rec.ins_ee_object_version_number,
4081         p_input_value_id1       => c_life_gen_iv_id,
4082         p_input_value_id2       => c_life_pens_iv_id,
4083         p_input_value_id3       => c_nonlife_long_iv_id,
4084         p_input_value_id4       => c_nonlife_short_iv_id,
4085         p_input_value_id5       => c_earthquake_iv_id,
4086         p_input_value_id6       => c_life_gen_new_iv_id,
4087         p_input_value_id7       => c_life_pens_new_iv_id,
4088         p_input_value_id8       => c_care_med_new_iv_id,
4089         p_entry_value1          => fnd_number.number_to_canonical(p_rec.life_gen_ins_prem),
4090         p_entry_value2          => fnd_number.number_to_canonical(p_rec.life_pens_ins_prem),
4091         p_entry_value3          => fnd_number.number_to_canonical(p_rec.nonlife_long_ins_prem),
4092         p_entry_value4          => fnd_number.number_to_canonical(p_rec.nonlife_short_ins_prem),
4093         p_entry_value5          => fnd_number.number_to_canonical(p_rec.earthquake_ins_prem),
4094         p_entry_value6          => fnd_number.number_to_canonical(p_rec.life_gen_ins_prem_new),
4095         p_entry_value7          => fnd_number.number_to_canonical(p_rec.life_pens_ins_prem_new),
4096         p_entry_value8          => fnd_number.number_to_canonical(p_rec.care_med_ins_prem_new),
4097         p_effective_start_date  => l_esd,
4098         p_effective_end_date    => l_eed,
4099         p_update_warning        => l_warning);
4100     --
4101       p_rec.status := 'Q';
4102       l_ins_element_entry_id := l_entry_rec.ins_element_entry_id;
4103       l_ins_ee_object_version_number := l_entry_rec.ins_ee_object_version_number;
4104       l_ins_datetrack_update_mode := l_entry_rec.ins_datetrack_update_mode;
4105     --
4106     else
4107     --
4108       l_ins_element_link_id := hr_entry_api.get_link(
4109                                  p_assignment_id   => p_rec.assignment_id,
4110                                  p_element_type_id => c_isdf_ins_elm_id,
4111                                  p_session_date    => l_effective_date);
4112     --
4113       if l_ins_element_link_id is null then
4114         fnd_message.set_name('PAY', 'PAY_JP_ISDF_NO_ELE_LINK');
4115         fnd_message.set_token('ELE_NAME',c_isdf_ins_elm);
4116         fnd_message.raise_error;
4117       end if;
4118    --
4119       pay_element_entry_api.create_element_entry(
4120         p_validate              => false,
4121         p_effective_date        => l_effective_date,
4122         p_business_group_id     => g_business_group_id,
4123         p_assignment_id         => p_rec.assignment_id,
4124         p_element_link_id       => l_ins_element_link_id,
4125         p_entry_type            => 'E',
4126         p_input_value_id1       => c_life_gen_iv_id,
4127         p_input_value_id2       => c_life_pens_iv_id,
4128         p_input_value_id3       => c_nonlife_long_iv_id,
4129         p_input_value_id4       => c_nonlife_short_iv_id,
4130         p_input_value_id5       => c_earthquake_iv_id,
4131         p_input_value_id6       => c_life_gen_new_iv_id,
4132         p_input_value_id7       => c_life_pens_new_iv_id,
4133         p_input_value_id8       => c_care_med_new_iv_id,
4134         p_entry_value1          => fnd_number.number_to_canonical(p_rec.life_gen_ins_prem),
4135         p_entry_value2          => fnd_number.number_to_canonical(p_rec.life_pens_ins_prem),
4136         p_entry_value3          => fnd_number.number_to_canonical(p_rec.nonlife_long_ins_prem),
4137         p_entry_value4          => fnd_number.number_to_canonical(p_rec.nonlife_short_ins_prem),
4138         p_entry_value5          => fnd_number.number_to_canonical(p_rec.earthquake_ins_prem),
4139         p_entry_value6          => fnd_number.number_to_canonical(p_rec.life_gen_ins_prem_new),
4140         p_entry_value7          => fnd_number.number_to_canonical(p_rec.life_pens_ins_prem_new),
4141         p_entry_value8          => fnd_number.number_to_canonical(p_rec.care_med_ins_prem_new),
4142         p_element_entry_id      => p_rec.ins_element_entry_id,
4143         p_object_version_number => p_rec.ins_ee_object_version_number,
4144         p_effective_start_date  => l_esd,
4145         p_effective_end_date    => l_eed,
4146         p_create_warning        => l_warning);
4147     --
4148       l_ins_element_entry_id := p_rec.ins_element_entry_id;
4149       l_ins_ee_object_version_number := p_rec.ins_ee_object_version_number;
4150       l_ins_datetrack_update_mode := pay_jp_isdf_archive_pkg.ee_datetrack_update_mode(p_rec.ins_element_entry_id,l_esd,l_eed,l_effective_date);
4151     --
4152     end if;
4153     --
4154     -- even if rec status is 'I', eev might setup by manually at transfer run time.
4155     -- when entry exists, use new ovn, update mode at transfer time instead of stored data.
4156     if l_entry_rec.is_entry_cnt > 0 then
4157     --
4158       pay_element_entry_api.update_element_entry(
4159         p_validate              => false,
4160         p_effective_date        => l_effective_date,
4161         p_business_group_id     => g_business_group_id,
4162         p_datetrack_update_mode => l_entry_rec.is_datetrack_update_mode,
4163         p_element_entry_id      => l_entry_rec.is_element_entry_id,
4164         p_object_version_number => l_entry_rec.is_ee_object_version_number,
4165         p_input_value_id5       => c_social_iv_id,
4166         p_input_value_id6       => c_mutual_aid_iv_id,
4167         p_input_value_id7       => c_spouse_iv_id,
4168         p_input_value_id9       => c_national_pens_iv_id,
4169         p_entry_value5          => fnd_number.number_to_canonical(p_rec.social_ins_prem),
4170         p_entry_value6          => fnd_number.number_to_canonical(p_rec.mutual_aid_prem),
4171         p_entry_value7          => fnd_number.number_to_canonical(p_rec.spouse_income),
4172         p_entry_value9          => fnd_number.number_to_canonical(p_rec.national_pens_ins_prem),
4173         p_effective_start_date  => l_esd,
4174         p_effective_end_date    => l_eed,
4175         p_update_warning        => l_warning);
4176     --
4177       p_rec.status := 'Q';
4178       l_is_element_entry_id := l_entry_rec.is_element_entry_id;
4179       l_is_ee_object_version_number := l_entry_rec.is_ee_object_version_number;
4180       l_is_datetrack_update_mode := l_entry_rec.is_datetrack_update_mode;
4181     --
4182     else
4183     --
4184       l_is_element_link_id := hr_entry_api.get_link(
4185                                 p_assignment_id   => p_rec.assignment_id,
4186                                 p_element_type_id => c_isdf_is_elm_id,
4187                                 p_session_date    => l_effective_date);
4188     --
4189       if l_is_element_link_id is null then
4190         fnd_message.set_name('PAY', 'PAY_JP_ISDF_NO_ELE_LINK');
4191         fnd_message.set_token('ELE_NAME',c_isdf_is_elm);
4192         fnd_message.raise_error;
4193       end if;
4194     --
4195       pay_element_entry_api.create_element_entry(
4196         p_validate              => false,
4197         p_effective_date        => l_effective_date,
4198         p_business_group_id     => g_business_group_id,
4199         p_assignment_id         => p_rec.assignment_id,
4200         p_element_link_id       => l_is_element_link_id,
4201         p_entry_type            => 'E',
4202         p_input_value_id5       => c_social_iv_id,
4203         p_input_value_id6       => c_mutual_aid_iv_id,
4204         p_input_value_id7       => c_spouse_iv_id,
4205         p_input_value_id9       => c_national_pens_iv_id,
4206         p_entry_value5          => fnd_number.number_to_canonical(p_rec.social_ins_prem),
4207         p_entry_value6          => fnd_number.number_to_canonical(p_rec.mutual_aid_prem),
4208         p_entry_value7          => fnd_number.number_to_canonical(p_rec.spouse_income),
4209         p_entry_value9          => fnd_number.number_to_canonical(p_rec.national_pens_ins_prem),
4210         p_element_entry_id      => p_rec.is_element_entry_id,
4211         p_object_version_number => p_rec.is_ee_object_version_number,
4212         p_effective_start_date  => l_esd,
4213         p_effective_end_date    => l_eed,
4214         p_create_warning        => l_warning);
4215     --
4216       l_is_element_entry_id := p_rec.is_element_entry_id;
4217       l_is_ee_object_version_number := p_rec.is_ee_object_version_number;
4218       l_is_datetrack_update_mode := pay_jp_isdf_archive_pkg.ee_datetrack_update_mode(p_rec.is_element_entry_id,l_esd,l_eed,l_effective_date);
4219     --
4220     end if;
4221     --
4222     p_rec.object_version_number := p_rec.object_version_number + 1;
4223     --
4224     if p_expire_after_transfer = 'Y' then
4225       l_status := 'D';
4226     -- p_rec.status = 'I' or 'Q' is now 'Q' because eev exists.
4227     else
4228       l_status := 'Q';
4229     end if;
4230     --
4231     -- revised old data at archive time to the latest extracted data.
4232     if p_rec.status = 'Q' then
4233     --
4234       update pay_jp_isdf_entry_dml_v
4235       set    object_version_number = p_rec.object_version_number,
4236              status = l_status,
4237              ins_datetrack_update_mode = l_ins_datetrack_update_mode,
4238              ins_element_entry_id = fnd_number.number_to_canonical(l_ins_element_entry_id),
4239              ins_ee_object_version_number = fnd_number.number_to_canonical(l_ins_ee_object_version_number),
4240              life_gen_ins_prem_o = l_entry_rec.life_gen_ins_prem,
4241              life_pens_ins_prem_o = l_entry_rec.life_pens_ins_prem,
4242              nonlife_long_ins_prem_o = l_entry_rec.nonlife_long_ins_prem,
4243              nonlife_short_ins_prem_o = l_entry_rec.nonlife_short_ins_prem,
4244              earthquake_ins_prem_o = l_entry_rec.earthquake_ins_prem,
4245              is_datetrack_update_mode = l_is_datetrack_update_mode,
4246              is_element_entry_id = fnd_number.number_to_canonical(l_is_element_entry_id),
4247              is_ee_object_version_number = fnd_number.number_to_canonical(l_is_ee_object_version_number),
4248              social_ins_prem_o = l_entry_rec.social_ins_prem,
4249              mutual_aid_prem_o = l_entry_rec.mutual_aid_prem,
4250              spouse_income_o = l_entry_rec.spouse_income,
4251              national_pens_ins_prem_o = l_entry_rec.national_pens_ins_prem,
4252              life_gen_ins_prem_new = l_entry_rec.life_gen_ins_prem_new,
4253              life_pens_ins_prem_new = l_entry_rec.life_pens_ins_prem_new,
4254              care_med_ins_prem_new = l_entry_rec.care_med_ins_prem_new
4255       where  row_id = p_rec.row_id;
4256     --
4257     else
4258     --
4259       update pay_jp_isdf_entry_dml_v
4260       set    object_version_number = p_rec.object_version_number,
4261              status = l_status,
4262              ins_datetrack_update_mode = l_ins_datetrack_update_mode,
4263              is_datetrack_update_mode = l_is_datetrack_update_mode,
4264              ins_element_entry_id = fnd_number.number_to_canonical(l_ins_element_entry_id),
4265              is_element_entry_id = fnd_number.number_to_canonical(l_is_element_entry_id),
4266              ins_ee_object_version_number = fnd_number.number_to_canonical(l_ins_ee_object_version_number),
4267              is_ee_object_version_number = fnd_number.number_to_canonical(l_is_ee_object_version_number)
4268       where row_id = p_rec.row_id;
4269     --
4270     end if;
4271   --
4272   elsif p_rec.status = 'Q' then
4273   --
4274     -- even if rec status is 'Q', eev might removed. specially if archive time is
4275     -- before december, the eev might not be set on december, transfer time.
4276     -- when entry exists, use new ovn, update mode at transfer time instead of stored data.
4277     if l_entry_rec.ins_entry_cnt > 0 then
4278     --
4279       if changed(p_rec.life_gen_ins_prem,l_entry_rec.life_gen_ins_prem)
4280       or changed(p_rec.life_pens_ins_prem,l_entry_rec.life_pens_ins_prem)
4281       or changed(p_rec.nonlife_long_ins_prem,l_entry_rec.nonlife_long_ins_prem)
4282       or ((l_effective_date < c_st_upd_date_2007 and changed(p_rec.nonlife_short_ins_prem,l_entry_rec.nonlife_short_ins_prem))
4283          or (l_effective_date >= c_st_upd_date_2007 and changed(p_rec.earthquake_ins_prem,l_entry_rec.earthquake_ins_prem)))
4284       or changed(p_rec.life_gen_ins_prem_new,l_entry_rec.life_gen_ins_prem_new)
4285       or changed(p_rec.life_pens_ins_prem_new,l_entry_rec.life_pens_ins_prem_new)
4286       or changed(p_rec.care_med_ins_prem_new,l_entry_rec.care_med_ins_prem_new) then
4287       --
4288         pay_element_entry_api.update_element_entry(
4289           p_validate              => false,
4290           p_effective_date        => l_effective_date,
4291           p_business_group_id     => g_business_group_id,
4292           p_datetrack_update_mode => l_entry_rec.ins_datetrack_update_mode,
4293           p_element_entry_id      => l_entry_rec.ins_element_entry_id,
4294           p_object_version_number => l_entry_rec.ins_ee_object_version_number,
4295           p_input_value_id1       => c_life_gen_iv_id,
4296           p_input_value_id2       => c_life_pens_iv_id,
4297           p_input_value_id3       => c_nonlife_long_iv_id,
4298           p_input_value_id4       => c_nonlife_short_iv_id,
4299           p_input_value_id5       => c_earthquake_iv_id,
4300           p_input_value_id6       => c_life_gen_new_iv_id,
4301           p_input_value_id7       => c_life_pens_new_iv_id,
4302           p_input_value_id8       => c_care_med_new_iv_id,
4303           p_entry_value1          => fnd_number.number_to_canonical(p_rec.life_gen_ins_prem),
4304           p_entry_value2          => fnd_number.number_to_canonical(p_rec.life_pens_ins_prem),
4305           p_entry_value3          => fnd_number.number_to_canonical(p_rec.nonlife_long_ins_prem),
4306           p_entry_value4          => fnd_number.number_to_canonical(p_rec.nonlife_short_ins_prem),
4307           p_entry_value5          => fnd_number.number_to_canonical(p_rec.earthquake_ins_prem),
4308           p_entry_value6          => fnd_number.number_to_canonical(p_rec.life_gen_ins_prem_new),
4309           p_entry_value7          => fnd_number.number_to_canonical(p_rec.life_pens_ins_prem_new),
4310           p_entry_value8          => fnd_number.number_to_canonical(p_rec.care_med_ins_prem_new),
4311           p_effective_start_date  => l_esd,
4312           p_effective_end_date    => l_eed,
4313           p_update_warning        => l_warning);
4314       --
4315       end if;
4316     --
4317       l_ins_element_entry_id := l_entry_rec.ins_element_entry_id;
4318       l_ins_ee_object_version_number := l_entry_rec.ins_ee_object_version_number;
4319       l_ins_datetrack_update_mode := l_entry_rec.ins_datetrack_update_mode;
4320     --
4321     else
4322     --
4323       -- this status soonly will be changed to 'Q' after insert.
4324       p_rec.status := 'I';
4325     --
4326       l_ins_element_link_id := hr_entry_api.get_link(
4327                                  p_assignment_id   => p_rec.assignment_id,
4328                                  p_element_type_id => c_isdf_ins_elm_id,
4329                                  p_session_date    => l_effective_date);
4330     --
4331       if l_ins_element_link_id is null then
4332         fnd_message.set_name('PAY', 'PAY_JP_ISDF_NO_ELE_LINK');
4333         fnd_message.set_token('ELE_NAME',c_isdf_ins_elm);
4334         fnd_message.raise_error;
4335       end if;
4336     --
4337       pay_element_entry_api.create_element_entry(
4338         p_validate              => false,
4339         p_effective_date        => l_effective_date,
4340         p_business_group_id     => g_business_group_id,
4341         p_assignment_id         => p_rec.assignment_id,
4342         p_element_link_id       => l_ins_element_link_id,
4343         p_entry_type            => 'E',
4344         p_input_value_id1       => c_life_gen_iv_id,
4345         p_input_value_id2       => c_life_pens_iv_id,
4346         p_input_value_id3       => c_nonlife_long_iv_id,
4347         p_input_value_id4       => c_nonlife_short_iv_id,
4348         p_input_value_id5       => c_earthquake_iv_id,
4349         p_input_value_id6       => c_life_gen_new_iv_id,
4350         p_input_value_id7       => c_life_pens_new_iv_id,
4351         p_input_value_id8       => c_care_med_new_iv_id,
4352         p_entry_value1          => fnd_number.number_to_canonical(p_rec.life_gen_ins_prem),
4353         p_entry_value2          => fnd_number.number_to_canonical(p_rec.life_pens_ins_prem),
4354         p_entry_value3          => fnd_number.number_to_canonical(p_rec.nonlife_long_ins_prem),
4355         p_entry_value4          => fnd_number.number_to_canonical(p_rec.nonlife_short_ins_prem),
4356         p_entry_value5          => fnd_number.number_to_canonical(p_rec.earthquake_ins_prem),
4357         p_entry_value6          => fnd_number.number_to_canonical(p_rec.life_gen_ins_prem_new),
4358         p_entry_value7          => fnd_number.number_to_canonical(p_rec.life_pens_ins_prem_new),
4359         p_entry_value8          => fnd_number.number_to_canonical(p_rec.care_med_ins_prem_new),
4360         p_element_entry_id      => p_rec.ins_element_entry_id,
4361         p_object_version_number => p_rec.ins_ee_object_version_number,
4362         p_effective_start_date  => l_esd,
4363         p_effective_end_date    => l_eed,
4364         p_create_warning        => l_warning);
4365     --
4366       l_ins_element_entry_id := p_rec.ins_element_entry_id;
4367       l_ins_ee_object_version_number := p_rec.ins_ee_object_version_number;
4368       l_ins_datetrack_update_mode := pay_jp_isdf_archive_pkg.ee_datetrack_update_mode(p_rec.ins_element_entry_id,l_esd,l_eed,l_effective_date);
4369     --
4370     end if;
4371     --
4372     -- even if rec status is 'Q', eev might removed. specially if archive time is
4373     -- before december, the eev might not be set on december, transfer time.
4374     -- when entry exists, use new ovn, update mode at transfer time instead of stored data.
4375     if l_entry_rec.is_entry_cnt > 0 then
4376     --
4377       if changed(p_rec.social_ins_prem,l_entry_rec.social_ins_prem)
4378       or changed(p_rec.mutual_aid_prem,l_entry_rec.mutual_aid_prem)
4379       or changed(p_rec.spouse_income,l_entry_rec.spouse_income)
4380       or changed(p_rec.national_pens_ins_prem,l_entry_rec.national_pens_ins_prem) then
4381       --
4382         pay_element_entry_api.update_element_entry(
4383           p_validate              => false,
4384           p_effective_date        => l_effective_date,
4385           p_business_group_id     => g_business_group_id,
4386           p_datetrack_update_mode => l_entry_rec.is_datetrack_update_mode,
4387           p_element_entry_id      => l_entry_rec.is_element_entry_id,
4388           p_object_version_number => l_entry_rec.is_ee_object_version_number,
4389           p_input_value_id5       => c_social_iv_id,
4390           p_input_value_id6       => c_mutual_aid_iv_id,
4391           p_input_value_id7       => c_spouse_iv_id,
4392           p_input_value_id9       => c_national_pens_iv_id,
4393           p_entry_value5          => fnd_number.number_to_canonical(p_rec.social_ins_prem),
4394           p_entry_value6          => fnd_number.number_to_canonical(p_rec.mutual_aid_prem),
4395           p_entry_value7          => fnd_number.number_to_canonical(p_rec.spouse_income),
4396           p_entry_value9          => fnd_number.number_to_canonical(p_rec.national_pens_ins_prem),
4397           p_effective_start_date  => l_esd,
4398           p_effective_end_date    => l_eed,
4399           p_update_warning        => l_warning);
4400       --
4401       end if;
4402     --
4403       l_is_element_entry_id := l_entry_rec.is_element_entry_id;
4404       l_is_ee_object_version_number := l_entry_rec.is_ee_object_version_number;
4405       l_is_datetrack_update_mode := l_entry_rec.is_datetrack_update_mode;
4406     --
4407     else
4408     --
4409       -- this status soonly will be changed to 'Q' after insert.
4410       p_rec.status := 'I';
4411     --
4412       l_is_element_link_id := hr_entry_api.get_link(
4413                                 p_assignment_id   => p_rec.assignment_id,
4414                                 p_element_type_id => c_isdf_is_elm_id,
4415                                 p_session_date    => l_effective_date);
4416     --
4417       if l_is_element_link_id is null then
4418         fnd_message.set_name('PAY', 'PAY_JP_ISDF_NO_ELE_LINK');
4419         fnd_message.set_token('ELE_NAME',c_isdf_is_elm);
4420         fnd_message.raise_error;
4421       end if;
4422     --
4423       pay_element_entry_api.create_element_entry(
4424         p_validate              => false,
4425         p_effective_date        => l_effective_date,
4426         p_business_group_id     => g_business_group_id,
4427         p_assignment_id         => p_rec.assignment_id,
4428         p_element_link_id       => l_is_element_link_id,
4429         p_entry_type            => 'E',
4430         p_input_value_id5       => c_social_iv_id,
4431         p_input_value_id6       => c_mutual_aid_iv_id,
4432         p_input_value_id7       => c_spouse_iv_id,
4433         p_input_value_id9       => c_national_pens_iv_id,
4434         p_entry_value5          => fnd_number.number_to_canonical(p_rec.social_ins_prem),
4435         p_entry_value6          => fnd_number.number_to_canonical(p_rec.mutual_aid_prem),
4436         p_entry_value7          => fnd_number.number_to_canonical(p_rec.spouse_income),
4437         p_entry_value9          => fnd_number.number_to_canonical(p_rec.national_pens_ins_prem),
4438         p_element_entry_id      => p_rec.is_element_entry_id,
4439         p_object_version_number => p_rec.is_ee_object_version_number,
4440         p_effective_start_date  => l_esd,
4441         p_effective_end_date    => l_eed,
4442         p_create_warning        => l_warning);
4443     --
4444       l_is_element_entry_id := p_rec.is_element_entry_id;
4445       l_is_ee_object_version_number := p_rec.is_ee_object_version_number;
4446       l_is_datetrack_update_mode := pay_jp_isdf_archive_pkg.ee_datetrack_update_mode(p_rec.is_element_entry_id,l_esd,l_eed,l_effective_date);
4447     --
4448     end if;
4449     --
4450     p_rec.object_version_number := p_rec.object_version_number + 1;
4451     --
4452     if p_expire_after_transfer = 'Y' then
4453       l_status := 'D';
4454     else
4455     -- p_rec.status = 'I' or 'Q' is now 'Q' because eev exists.
4456       l_status := 'Q';
4457     end if;
4458     --
4459     -- revised old data at archive time to the latest extracted data.
4460     if p_rec.status = 'Q' then
4461     --
4462       update pay_jp_isdf_entry_dml_v
4463       set    object_version_number = p_rec.object_version_number,
4464              status = l_status,
4465              ins_datetrack_update_mode = l_ins_datetrack_update_mode,
4466              ins_element_entry_id = fnd_number.number_to_canonical(l_ins_element_entry_id),
4467              ins_ee_object_version_number = fnd_number.number_to_canonical(l_ins_ee_object_version_number),
4468              life_gen_ins_prem_o = l_entry_rec.life_gen_ins_prem,
4469              life_pens_ins_prem_o = l_entry_rec.life_pens_ins_prem,
4470              nonlife_long_ins_prem_o = l_entry_rec.nonlife_long_ins_prem,
4471              nonlife_short_ins_prem_o = l_entry_rec.nonlife_short_ins_prem,
4472              earthquake_ins_prem_o = l_entry_rec.earthquake_ins_prem,
4473              is_datetrack_update_mode = l_is_datetrack_update_mode,
4474              is_element_entry_id = fnd_number.number_to_canonical(l_is_element_entry_id),
4475              is_ee_object_version_number = fnd_number.number_to_canonical(l_is_ee_object_version_number),
4476              social_ins_prem_o = l_entry_rec.social_ins_prem,
4477              mutual_aid_prem_o = l_entry_rec.mutual_aid_prem,
4478              spouse_income_o = l_entry_rec.spouse_income,
4479              national_pens_ins_prem_o = l_entry_rec.national_pens_ins_prem,
4480              life_gen_ins_prem_new = l_entry_rec.life_gen_ins_prem_new,
4481              life_pens_ins_prem_new = l_entry_rec.life_pens_ins_prem_new,
4482              care_med_ins_prem_new = l_entry_rec.care_med_ins_prem_new
4483       where  row_id = p_rec.row_id;
4484     --
4485     else
4486     --
4487       update pay_jp_isdf_entry_dml_v
4488       set    object_version_number = p_rec.object_version_number,
4489              status = l_status,
4490              ins_datetrack_update_mode = l_ins_datetrack_update_mode,
4491              ins_element_entry_id = fnd_number.number_to_canonical(l_ins_element_entry_id),
4492              ins_ee_object_version_number = fnd_number.number_to_canonical(l_ins_ee_object_version_number),
4493              life_gen_ins_prem_o = null,
4494              life_pens_ins_prem_o = null,
4495              nonlife_long_ins_prem_o = null,
4496              nonlife_short_ins_prem_o = null,
4497              earthquake_ins_prem_o = null,
4498              is_datetrack_update_mode = l_is_datetrack_update_mode,
4499              is_element_entry_id = fnd_number.number_to_canonical(l_is_element_entry_id),
4500              is_ee_object_version_number = fnd_number.number_to_canonical(l_is_ee_object_version_number),
4501              social_ins_prem_o = null,
4502              mutual_aid_prem_o = null,
4503              spouse_income_o = null,
4504              national_pens_ins_prem_o = null
4505       where row_id = p_rec.row_id;
4506     --
4507     end if;
4508   --
4509   end if;
4510 --
4511   if g_debug then
4512     hr_utility.trace('end update_assact');
4513     hr_utility.set_location(l_proc,1000);
4514   end if;
4515 --
4516 end transfer_entry;
4517 --
4518 -- -------------------------------------------------------------------------
4519 -- transfer_life_gen
4520 -- -------------------------------------------------------------------------
4521 procedure transfer_life_gen(
4522   p_rec in out nocopy pay_jp_isdf_life_gen_v%rowtype,
4523   p_effective_date in date,
4524   p_expire_after_transfer in varchar2)
4525 is
4526 --
4527   l_proc varchar2(80) := c_package||'transfer_entry';
4528 --
4529   cursor csr_aei
4530   is
4531   select *
4532   from   per_assignment_extra_info
4533   where  assignment_extra_info_id = p_rec.assignment_extra_info_id;
4534 --
4535   l_csr_aei csr_aei%rowtype;
4536   l_effective_date date;
4537 --
4538 begin
4539 --
4540   if g_debug then
4541     hr_utility.set_location(l_proc,0);
4542   end if;
4543 --
4544   if p_effective_date is null then
4545     l_effective_date := p_rec.effective_date;
4546   else
4547     l_effective_date := p_effective_date;
4548   end if;
4549 --
4550   -- currently this is not supported that newly inserted data can be transfered.
4551   if p_rec.status = 'I' then
4552   --
4553     -- validation is required
4554     -- to disable insert ins_class and comp_code into action table
4555     -- because those are managed in master Org DF and
4556     -- to disable to insert annual prem even ins_class is LINC
4557     -- because the column should be derived from LINC loading data
4558     -- the field is not for override basically.
4559     hr_assignment_extra_info_api.create_assignment_extra_info(
4560       p_validate                 => false,
4561       p_assignment_id            => p_rec.assignment_id,
4562       p_information_type         => 'JP_ASS_LIG_INFO',
4563       p_aei_information_category => 'JP_ASS_LIG_INFO',
4564       p_aei_information1         => p_rec.gen_ins_class,
4565       p_aei_information2         => p_rec.gen_ins_company_code,
4566       p_aei_information3         => fnd_date.date_to_canonical(l_effective_date),
4567       p_aei_information4         => '',
4568       p_aei_information5         => p_rec.ins_type,
4569       p_aei_information6         => p_rec.ins_period,
4570       p_aei_information7         => p_rec.contractor_name,
4571       p_aei_information8         => p_rec.beneficiary_name,
4572       p_aei_information9         => p_rec.beneficiary_relship,
4573       p_aei_information10        => '',
4574       p_aei_information12        => p_rec.gen_ins_class_old_new,
4575       p_assignment_extra_info_id => p_rec.assignment_extra_info_id,
4576       p_object_version_number    => p_rec.aei_object_version_number);
4577   --
4578     p_rec.object_version_number := p_rec.object_version_number + 1;
4579   --
4580     if p_expire_after_transfer = 'Y' then
4581       p_rec.status := 'D';
4582     end if;
4583   --
4584     update pay_jp_isdf_life_gen_dml_v
4585     set    object_version_number = p_rec.object_version_number,
4586            status = p_rec.status,
4587            assignment_extra_info_id = fnd_number.number_to_canonical(p_rec.assignment_extra_info_id),
4588            aei_object_version_number = fnd_number.number_to_canonical(p_rec.aei_object_version_number)
4589     where  row_id = p_rec.row_id;
4590   --
4591   -- currently only support case of update entry data (except for amendment of ins_class and code)
4592   -- additionally not support if eit has been removed at the transferred time
4593   -- even if the eit existed at the archive time.
4594   elsif p_rec.status = 'Q' then
4595   --
4596     open csr_aei;
4597     fetch csr_aei into l_csr_aei;
4598     close csr_aei;
4599     --
4600     -- support only update in case eit exists at the transfer time.
4601     if l_csr_aei.assignment_extra_info_id is not null then
4602       --
4603       if changed(p_rec.ins_type,l_csr_aei.aei_information5)
4604       or changed(p_rec.ins_period,l_csr_aei.aei_information6)
4605       or changed(p_rec.contractor_name,l_csr_aei.aei_information7)
4606       or changed(p_rec.beneficiary_name,l_csr_aei.aei_information8)
4607       or changed(p_rec.beneficiary_relship,l_csr_aei.aei_information9)
4608       or changed(p_rec.gen_ins_class_old_new,l_csr_aei.aei_information12) then
4609       --
4610         -- validation is required
4611         -- to disable update ins_class and comp_code into action table
4612         -- because those are managed in master Org DF and
4613         -- to disable to update annual prem even ins_class is LINC
4614         -- because the column should be derived from LINC loading data
4615         -- the field is not for override basically.
4616         --
4617         hr_assignment_extra_info_api.update_assignment_extra_info(
4618           p_validate                 => false,
4619           p_assignment_extra_info_id => l_csr_aei.assignment_extra_info_id,
4620           p_object_version_number    => l_csr_aei.object_version_number,
4621           p_aei_information_category => 'JP_ASS_LIG_INFO',
4622           p_aei_information1         => l_csr_aei.aei_information1,
4623           p_aei_information2         => l_csr_aei.aei_information2,
4624           p_aei_information3         => l_csr_aei.aei_information3,
4625           p_aei_information4         => l_csr_aei.aei_information4,
4626           p_aei_information5         => p_rec.ins_type,
4627           p_aei_information6         => p_rec.ins_period,
4628           p_aei_information7         => p_rec.contractor_name,
4629           p_aei_information8         => p_rec.beneficiary_name,
4630           p_aei_information9         => p_rec.beneficiary_relship,
4631           p_aei_information10        => l_csr_aei.aei_information10,
4632           p_aei_information12        => p_rec.gen_ins_class_old_new);
4633       --
4634         p_rec.object_version_number := p_rec.object_version_number + 1;
4635       --
4636         if p_expire_after_transfer = 'Y' then
4637           p_rec.status := 'D';
4638         end if;
4639       --
4640         -- since no storage for old eit data in view, unnecessary to change like entry.
4641         update pay_jp_isdf_life_gen_dml_v
4642         set    object_version_number = p_rec.object_version_number,
4643                status = p_rec.status,
4644                aei_object_version_number = fnd_number.number_to_canonical(l_csr_aei.object_version_number)
4645         where  row_id = p_rec.row_id;
4646       --
4647       end if;
4648     --
4649     end if;
4650   --
4651   elsif p_rec.status = 'D' then
4652   --
4653     --if p_rec.delete_mode = 'ZAP' then
4654     --  hr_assignment_extra_info_api.delete_assignment_extra_info(
4655     --    p_validate                 => false,
4656     --    p_assignment_extra_info_id => p_rec.assignment_extra_info_id,
4657     --    p_object_version_number    => p_rec.aei_object_version_number);
4658     --else
4659     --
4660       open csr_aei;
4661       fetch csr_aei into l_csr_aei;
4662       close csr_aei;
4663     --
4664     if l_csr_aei.assignment_extra_info_id is not null then
4665     --
4666       hr_assignment_extra_info_api.update_assignment_extra_info(
4667         p_validate                 => false,
4668         p_assignment_extra_info_id => l_csr_aei.assignment_extra_info_id,
4669         p_object_version_number    => l_csr_aei.object_version_number,
4670         p_aei_information_category => 'JP_ASS_LIG_INFO',
4671         p_aei_information1         => l_csr_aei.aei_information1,
4672         p_aei_information2         => l_csr_aei.aei_information2,
4673         p_aei_information3         => l_csr_aei.aei_information3,
4674         p_aei_information4         => fnd_date.date_to_canonical(l_effective_date-1),
4675         p_aei_information5         => p_rec.ins_type,
4676         p_aei_information6         => p_rec.ins_period,
4677         p_aei_information7         => p_rec.contractor_name,
4678         p_aei_information8         => p_rec.beneficiary_name,
4679         p_aei_information9         => p_rec.beneficiary_relship,
4680         p_aei_information10        => l_csr_aei.aei_information10,
4681         p_aei_information12        => p_rec.gen_ins_class_old_new);
4682     --
4683       p_rec.object_version_number := p_rec.object_version_number + 1;
4684     --
4685       -- since no storage for old eit data in view, unnecessary to change like entry.
4686       update pay_jp_isdf_life_gen_dml_v
4687       set    object_version_number = p_rec.object_version_number,
4688              aei_object_version_number = fnd_number.number_to_canonical(l_csr_aei.object_version_number)
4689       where  row_id = p_rec.row_id;
4690     --
4691     end if;
4692   --
4693   end if;
4694 --
4695   if g_debug then
4696     hr_utility.trace('end update_assact');
4697     hr_utility.set_location(l_proc,1000);
4698   end if;
4699 --
4700 end transfer_life_gen;
4701 --
4702 
4703 -- -------------------------------------------------------------------------
4704 -- transfer_care_med
4705 -- -------------------------------------------------------------------------
4706 procedure transfer_care_med(
4707   p_rec in out nocopy pay_jp_isdf_care_med_v%rowtype,
4708   p_effective_date in date,
4709   p_expire_after_transfer in varchar2)
4710 is
4711 --
4712   l_proc varchar2(80) := c_package||'transfer_entry';
4713 --
4714   cursor csr_aei
4715   is
4716   select *
4717   from   per_assignment_extra_info
4718   where  assignment_extra_info_id = p_rec.assignment_extra_info_id;
4719 --
4720   l_csr_aei csr_aei%rowtype;
4721   l_effective_date date;
4722 --
4723 begin
4724 --
4725   if g_debug then
4726     hr_utility.set_location(l_proc,0);
4727   end if;
4728 --
4729   if p_effective_date is null then
4730     l_effective_date := p_rec.effective_date;
4731   else
4732     l_effective_date := p_effective_date;
4733   end if;
4734 --
4735   -- currently this is not supported that newly inserted data can be transfered.
4736   if p_rec.status = 'I' then
4737   --
4738     -- validation is required
4739     -- to disable insert ins_class and comp_code into action table
4740     -- because those are managed in master Org DF and
4741     -- to disable to insert annual prem even ins_class is LINC
4742     -- because the column should be derived from LINC loading data
4743     -- the field is not for override basically.
4744     hr_assignment_extra_info_api.create_assignment_extra_info(
4745       p_validate                 => false,
4746       p_assignment_id            => p_rec.assignment_id,
4747       p_information_type         => 'JP_ASS_CMI_INFO',
4748       p_aei_information_category => 'JP_ASS_CMI_INFO',
4749       p_aei_information1         => p_rec.care_ins_class,
4750       p_aei_information2         => p_rec.care_ins_company_code,
4751       p_aei_information3         => fnd_date.date_to_canonical(l_effective_date),
4752       p_aei_information4         => '',
4753       p_aei_information5         => p_rec.ins_type,
4754       p_aei_information6         => p_rec.ins_period,
4755       p_aei_information7         => p_rec.contractor_name,
4756       p_aei_information8         => p_rec.beneficiary_name,
4757       p_aei_information9         => p_rec.beneficiary_relship,
4758       p_aei_information10        => '',
4759       p_assignment_extra_info_id => p_rec.assignment_extra_info_id,
4760       p_object_version_number    => p_rec.aei_object_version_number);
4761   --
4762     p_rec.object_version_number := p_rec.object_version_number + 1;
4763   --
4764     if p_expire_after_transfer = 'Y' then
4765       p_rec.status := 'D';
4766     end if;
4767   --
4768     update pay_jp_isdf_care_med_dml_v
4769     set    object_version_number = p_rec.object_version_number,
4770            status = p_rec.status,
4771            assignment_extra_info_id = fnd_number.number_to_canonical(p_rec.assignment_extra_info_id),
4772            aei_object_version_number = fnd_number.number_to_canonical(p_rec.aei_object_version_number)
4773     where  row_id = p_rec.row_id;
4774   --
4775   -- currently only support case of update entry data (except for amendment of ins_class and code)
4776   -- additionally not support if eit has been removed at the transferred time
4777   -- even if the eit existed at the archive time.
4778   elsif p_rec.status = 'Q' then
4779   --
4780     open csr_aei;
4781     fetch csr_aei into l_csr_aei;
4782     close csr_aei;
4783     --
4784     -- support only update in case eit exists at the transfer time.
4785     if l_csr_aei.assignment_extra_info_id is not null then
4786       --
4787       if changed(p_rec.ins_type,l_csr_aei.aei_information5)
4788       or changed(p_rec.ins_period,l_csr_aei.aei_information6)
4789       or changed(p_rec.contractor_name,l_csr_aei.aei_information7)
4790       or changed(p_rec.beneficiary_name,l_csr_aei.aei_information8)
4791       or changed(p_rec.beneficiary_relship,l_csr_aei.aei_information9) then
4792       --
4793         -- validation is required
4794         -- to disable update ins_class and comp_code into action table
4795         -- because those are managed in master Org DF and
4796         -- to disable to update annual prem even ins_class is LINC
4797         -- because the column should be derived from LINC loading data
4798         -- the field is not for override basically.
4799         --
4800         hr_assignment_extra_info_api.update_assignment_extra_info(
4801           p_validate                 => false,
4802           p_assignment_extra_info_id => l_csr_aei.assignment_extra_info_id,
4803           p_object_version_number    => l_csr_aei.object_version_number,
4804           p_aei_information_category => 'JP_ASS_CMI_INFO',
4805           p_aei_information1         => l_csr_aei.aei_information1,
4806           p_aei_information2         => l_csr_aei.aei_information2,
4807           p_aei_information3         => l_csr_aei.aei_information3,
4808           p_aei_information4         => l_csr_aei.aei_information4,
4809           p_aei_information5         => p_rec.ins_type,
4810           p_aei_information6         => p_rec.ins_period,
4811           p_aei_information7         => p_rec.contractor_name,
4812           p_aei_information8         => p_rec.beneficiary_name,
4813           p_aei_information9         => p_rec.beneficiary_relship,
4814           p_aei_information10        => l_csr_aei.aei_information10);
4815       --
4816         p_rec.object_version_number := p_rec.object_version_number + 1;
4817       --
4818         if p_expire_after_transfer = 'Y' then
4819           p_rec.status := 'D';
4820         end if;
4821       --
4822         -- since no storage for old eit data in view, unnecessary to change like entry.
4823         update pay_jp_isdf_care_med_dml_v
4824         set    object_version_number = p_rec.object_version_number,
4825                status = p_rec.status,
4826                aei_object_version_number = fnd_number.number_to_canonical(l_csr_aei.object_version_number)
4827         where  row_id = p_rec.row_id;
4828       --
4829       end if;
4830     --
4831     end if;
4832   --
4833   elsif p_rec.status = 'D' then
4834   --
4835     --if p_rec.delete_mode = 'ZAP' then
4836     --  hr_assignment_extra_info_api.delete_assignment_extra_info(
4837     --    p_validate                 => false,
4838     --    p_assignment_extra_info_id => p_rec.assignment_extra_info_id,
4839     --    p_object_version_number    => p_rec.aei_object_version_number);
4840     --else
4841     --
4842       open csr_aei;
4843       fetch csr_aei into l_csr_aei;
4844       close csr_aei;
4845     --
4846     if l_csr_aei.assignment_extra_info_id is not null then
4847     --
4848       hr_assignment_extra_info_api.update_assignment_extra_info(
4849         p_validate                 => false,
4850         p_assignment_extra_info_id => l_csr_aei.assignment_extra_info_id,
4851         p_object_version_number    => l_csr_aei.object_version_number,
4852         p_aei_information_category => 'JP_ASS_CMI_INFO',
4853         p_aei_information1         => l_csr_aei.aei_information1,
4854         p_aei_information2         => l_csr_aei.aei_information2,
4855         p_aei_information3         => l_csr_aei.aei_information3,
4856         p_aei_information4         => fnd_date.date_to_canonical(l_effective_date-1),
4857         p_aei_information5         => p_rec.ins_type,
4858         p_aei_information6         => p_rec.ins_period,
4859         p_aei_information7         => p_rec.contractor_name,
4860         p_aei_information8         => p_rec.beneficiary_name,
4861         p_aei_information9         => p_rec.beneficiary_relship,
4862         p_aei_information10        => l_csr_aei.aei_information10);
4863     --
4864       p_rec.object_version_number := p_rec.object_version_number + 1;
4865     --
4866       -- since no storage for old eit data in view, unnecessary to change like entry.
4867       update pay_jp_isdf_care_med_dml_v
4868       set    object_version_number = p_rec.object_version_number,
4869              aei_object_version_number = fnd_number.number_to_canonical(l_csr_aei.object_version_number)
4870       where  row_id = p_rec.row_id;
4871     --
4872     end if;
4873   --
4874   end if;
4875 --
4876   if g_debug then
4877     hr_utility.trace('end update_assact');
4878     hr_utility.set_location(l_proc,1000);
4879   end if;
4880 --
4881 end transfer_care_med;
4882 --
4883 
4884 -- -------------------------------------------------------------------------
4885 -- transfer_life_pens
4886 -- -------------------------------------------------------------------------
4887 procedure transfer_life_pens(
4888   p_rec in out nocopy pay_jp_isdf_life_pens_v%rowtype,
4889   p_effective_date in date,
4890   p_expire_after_transfer in varchar2)
4891 is
4892 --
4893   l_proc varchar2(80) := c_package||'transfer_entry';
4894   l_effective_date date;
4895 --
4896   cursor csr_aei
4897   is
4898   select *
4899   from   per_assignment_extra_info
4900   where  assignment_extra_info_id = p_rec.assignment_extra_info_id;
4901 --
4902   l_csr_aei csr_aei%rowtype;
4903 --
4904 begin
4905 --
4906   if g_debug then
4907     hr_utility.set_location(l_proc,0);
4908   end if;
4909 --
4910   if p_effective_date is null then
4911     l_effective_date := p_rec.effective_date;
4912   else
4913     l_effective_date := p_effective_date;
4914   end if;
4915 --
4916   -- currently this is not supported that newly inserted data can be transfered.
4917   if p_rec.status = 'I' then
4918   --
4919     -- validation is required
4920     -- to disable insert ins_class and comp_code into action table
4921     -- because those are managed in master Org DF and
4922     -- to disable to insert annual prem even ins_class is LINC
4923     -- because the column should be derived from LINC loading data
4924     -- the field is not for override basically.
4925     hr_assignment_extra_info_api.create_assignment_extra_info(
4926       p_validate                 => false,
4927       p_assignment_id            => p_rec.assignment_id,
4928       p_information_type         => 'JP_ASS_LIP_INFO',
4929       p_aei_information_category => 'JP_ASS_LIP_INFO',
4930       p_aei_information1         => p_rec.pens_ins_class,
4931       p_aei_information2         => p_rec.pens_ins_company_code,
4932       p_aei_information3         => fnd_date.date_to_canonical(l_effective_date),
4933       p_aei_information4         => '',
4934       p_aei_information5         => p_rec.ins_type,
4935       p_aei_information6         => fnd_date.date_to_canonical(p_rec.ins_period_start_date),
4936       p_aei_information7         => p_rec.ins_period,
4937       p_aei_information8         => p_rec.contractor_name,
4938       p_aei_information9         => p_rec.beneficiary_name,
4939       p_aei_information10        => p_rec.beneficiary_relship,
4940       p_aei_information11        => '',
4941       p_aei_information13        => p_rec.pens_ins_class_old_new,
4942       p_assignment_extra_info_id => p_rec.assignment_extra_info_id,
4943       p_object_version_number    => p_rec.aei_object_version_number);
4944   --
4945     p_rec.object_version_number := p_rec.object_version_number + 1;
4946   --
4947     if p_expire_after_transfer = 'Y' then
4948       p_rec.status := 'D';
4949     end if;
4950   --
4951     update pay_jp_isdf_life_pens_dml_v
4952     set    object_version_number = p_rec.object_version_number,
4953            status = p_rec.status,
4954            assignment_extra_info_id = fnd_number.number_to_canonical(p_rec.assignment_extra_info_id),
4955            aei_object_version_number = fnd_number.number_to_canonical(p_rec.aei_object_version_number)
4956     where  row_id = p_rec.row_id;
4957   --
4958   -- currently only support case of update entry data (except for amendment of ins_class and code)
4959   -- additionally not support if eit has been removed at the transferred time
4960   -- even if the eit existed at the archive time.
4961   elsif p_rec.status = 'Q' then
4962   --
4963     open csr_aei;
4964     fetch csr_aei into l_csr_aei;
4965     close csr_aei;
4966     --
4967     -- support only update in case eit exists at the transfer time.
4968     if l_csr_aei.assignment_extra_info_id is not null then
4969       --
4970       if changed(p_rec.ins_type,l_csr_aei.aei_information5)
4971       or changed(fnd_date.date_to_canonical(p_rec.ins_period_start_date),l_csr_aei.aei_information6)
4972       or changed(p_rec.ins_period,l_csr_aei.aei_information7)
4973       or changed(p_rec.contractor_name,l_csr_aei.aei_information8)
4974       or changed(p_rec.beneficiary_name,l_csr_aei.aei_information9)
4975       or changed(p_rec.beneficiary_relship,l_csr_aei.aei_information10)
4976       or changed(p_rec.pens_ins_class_old_new,l_csr_aei.aei_information13) then
4977       --
4978         -- validation is required
4979         -- to disable update ins_class and comp_code into action table
4980         -- because those are managed in master Org DF and
4981         -- to disable to update annual prem even ins_class is LINC
4982         -- because the column should be derived from LINC loading data
4983         -- the field is not for override basically.
4984         hr_assignment_extra_info_api.update_assignment_extra_info(
4985           p_validate                 => false,
4986           p_assignment_extra_info_id => l_csr_aei.assignment_extra_info_id,
4987           p_object_version_number    => l_csr_aei.object_version_number,
4988           p_aei_information_category => 'JP_ASS_LIP_INFO',
4989           p_aei_information1         => l_csr_aei.aei_information1,
4990           p_aei_information2         => l_csr_aei.aei_information2,
4991           p_aei_information3         => l_csr_aei.aei_information3,
4992           p_aei_information4         => l_csr_aei.aei_information4,
4993           p_aei_information5         => p_rec.ins_type,
4994           p_aei_information6         => fnd_date.date_to_canonical(p_rec.ins_period_start_date),
4995           p_aei_information7         => p_rec.ins_period,
4996           p_aei_information8         => p_rec.contractor_name,
4997           p_aei_information9         => p_rec.beneficiary_name,
4998           p_aei_information10        => p_rec.beneficiary_relship,
4999           p_aei_information11        => l_csr_aei.aei_information11,
5000           p_aei_information13        => p_rec.pens_ins_class_old_new);
5001         --
5002         p_rec.object_version_number := p_rec.object_version_number + 1;
5003         --
5004         if p_expire_after_transfer = 'Y' then
5005           p_rec.status := 'D';
5006         end if;
5007         --
5008         -- since no storage for old eit data in view, unnecessary to change like entry.
5009         update pay_jp_isdf_life_pens_dml_v
5010         set    object_version_number = p_rec.object_version_number,
5011                status = p_rec.status,
5012                aei_object_version_number = fnd_number.number_to_canonical(p_rec.aei_object_version_number)
5013         where  row_id = p_rec.row_id;
5014       --
5015       end if;
5016     --
5017     end if;
5018   --
5019   elsif p_rec.status = 'D' then
5020   --
5021     --if p_rec.delete_mode = 'ZAP' then
5022     --  hr_assignment_extra_info_api.delete_assignment_extra_info(
5023     --    p_validate                 => false,
5024     --    p_assignment_extra_info_id => p_rec.assignment_extra_info_id,
5025     --    p_object_version_number    => p_rec.aei_object_version_number);
5026     --else
5027     --
5028       open csr_aei;
5029       fetch csr_aei into l_csr_aei;
5030       close csr_aei;
5031     --
5032     if l_csr_aei.assignment_extra_info_id is not null then
5033     --
5034       hr_assignment_extra_info_api.update_assignment_extra_info(
5035         p_validate                 => false,
5036         p_assignment_extra_info_id => l_csr_aei.assignment_extra_info_id,
5037         p_object_version_number    => l_csr_aei.object_version_number,
5038         p_aei_information_category => 'JP_ASS_LIP_INFO',
5039         p_aei_information1         => l_csr_aei.aei_information1,
5040         p_aei_information2         => l_csr_aei.aei_information2,
5041         p_aei_information3         => l_csr_aei.aei_information3,
5042         p_aei_information4         => fnd_date.date_to_canonical(l_effective_date-1),
5043         p_aei_information5         => p_rec.ins_type,
5044         p_aei_information6         => fnd_date.date_to_canonical(p_rec.ins_period_start_date),
5045         p_aei_information7         => p_rec.ins_period,
5046         p_aei_information8         => p_rec.contractor_name,
5047         p_aei_information9         => p_rec.beneficiary_name,
5048         p_aei_information10        => p_rec.beneficiary_relship,
5049         p_aei_information11        => l_csr_aei.aei_information11,
5050         p_aei_information13        => p_rec.pens_ins_class_old_new);
5051     --
5052       p_rec.object_version_number := p_rec.object_version_number + 1;
5053     --
5054     -- since no storage for old eit data in view, unnecessary to change like entry.
5055       update pay_jp_isdf_life_pens_dml_v
5056       set    object_version_number = p_rec.object_version_number,
5057              aei_object_version_number = fnd_number.number_to_canonical(l_csr_aei.object_version_number)
5058       where  row_id = p_rec.row_id;
5059     --
5060     end if;
5061   --
5062   end if;
5063 --
5064   if g_debug then
5065     hr_utility.trace('end update_assact');
5066     hr_utility.set_location(l_proc,1000);
5067   end if;
5068 --
5069 end transfer_life_pens;
5070 --
5071 -- -------------------------------------------------------------------------
5072 -- transfer_nonlife
5073 -- -------------------------------------------------------------------------
5074 procedure transfer_nonlife(
5075   p_rec in out nocopy pay_jp_isdf_nonlife_v%rowtype,
5076   p_effective_date in date,
5077   p_expire_after_transfer in varchar2)
5078 is
5079 --
5080   l_proc varchar2(80) := c_package||'transfer_entry';
5081   l_effective_date date;
5082 --
5083   cursor csr_aei
5084   is
5085   select *
5086   from   per_assignment_extra_info
5087   where  assignment_extra_info_id = p_rec.assignment_extra_info_id;
5088 --
5089   l_csr_aei csr_aei%rowtype;
5090 --
5091 begin
5092 --
5093   if g_debug then
5094     hr_utility.set_location(l_proc,0);
5095   end if;
5096 --
5097   if p_effective_date is null then
5098     l_effective_date := p_rec.effective_date;
5099   else
5100     l_effective_date := p_effective_date;
5101   end if;
5102 --
5103   -- currently this is not supported that newly inserted data can be transfered.
5104   if p_rec.status = 'I' then
5105   --
5106     -- validation is required
5107     -- to disable insert ins_class and comp_code into action table
5108     -- because those are managed in master Org DF and
5109     -- to disable to insert annual prem
5110     -- because the column should be derived from customer loading data
5111     -- the field is not for override basically.
5112     hr_assignment_extra_info_api.create_assignment_extra_info(
5113       p_validate                 => false,
5114       p_assignment_id            => p_rec.assignment_id,
5115       p_information_type         => 'JP_ASS_AI_INFO',
5116       p_aei_information_category => 'JP_ASS_AI_INFO',
5117       p_aei_information1         => p_rec.nonlife_ins_term_type,
5118       p_aei_information2         => p_rec.nonlife_ins_company_code,
5119       p_aei_information3         => fnd_date.date_to_canonical(l_effective_date),
5120       p_aei_information4         => '',
5121       p_aei_information5         => p_rec.ins_type,
5122       p_aei_information6         => p_rec.ins_period,
5123       p_aei_information7         => p_rec.contractor_name,
5124       p_aei_information8         => p_rec.beneficiary_name,
5125       p_aei_information9         => p_rec.beneficiary_relship,
5126       p_aei_information10        => p_rec.maturity_repayment,
5127       p_aei_information11        => '',
5128       p_aei_information13        => p_rec.nonlife_ins_class,
5129       p_assignment_extra_info_id => p_rec.assignment_extra_info_id,
5130       p_object_version_number    => p_rec.aei_object_version_number);
5131   --
5132     p_rec.object_version_number := p_rec.object_version_number + 1;
5133   --
5134     if p_expire_after_transfer = 'Y' then
5135       p_rec.status := 'D';
5136     end if;
5137   --
5138     update pay_jp_isdf_nonlife_dml_v
5139     set    object_version_number = p_rec.object_version_number,
5140            status = p_rec.status,
5141            assignment_extra_info_id = fnd_number.number_to_canonical(p_rec.assignment_extra_info_id),
5142            aei_object_version_number = fnd_number.number_to_canonical(p_rec.aei_object_version_number)
5143     where  row_id = p_rec.row_id;
5144   --
5145   -- currently only support case of update entry data (except for amendment of ins_class and code)
5146   -- additionally not support if eit has been removed at the transferred time
5147   -- even if the eit existed at the archive time.
5148   elsif p_rec.status = 'Q' then
5149   --
5150     open csr_aei;
5151     fetch csr_aei into l_csr_aei;
5152     close csr_aei;
5153     --
5154     -- support only update in case eit exists at the transfer time.
5155     if l_csr_aei.assignment_extra_info_id is not null then
5156       --
5157       if changed(p_rec.ins_type,l_csr_aei.aei_information5)
5158       or changed(p_rec.ins_period,l_csr_aei.aei_information6)
5159       or changed(p_rec.contractor_name,l_csr_aei.aei_information7)
5160       or changed(p_rec.beneficiary_name,l_csr_aei.aei_information8)
5161       or changed(p_rec.beneficiary_relship,l_csr_aei.aei_information9)
5162       or (l_effective_date < c_st_upd_date_2007 and changed(p_rec.maturity_repayment,l_csr_aei.aei_information10)) then
5163       --
5164         -- validation is required
5165         -- to disable update ins_class and comp_code into action table
5166         -- because those are managed in master Org DF and
5167         -- to disable to update annual prem even ins_class is LINC
5168         -- because the column should be derived from LINC loading data
5169         -- the field is not for override basically.
5170         hr_assignment_extra_info_api.update_assignment_extra_info(
5171           p_validate                 => false,
5172           p_assignment_extra_info_id => l_csr_aei.assignment_extra_info_id,
5173           p_object_version_number    => l_csr_aei.object_version_number,
5174           p_aei_information_category => 'JP_ASS_AI_INFO',
5175           p_aei_information1         => l_csr_aei.aei_information1,
5176           p_aei_information2         => l_csr_aei.aei_information2,
5177           p_aei_information3         => l_csr_aei.aei_information3,
5178           p_aei_information4         => l_csr_aei.aei_information4,
5179           p_aei_information5         => p_rec.ins_type,
5180           p_aei_information6         => p_rec.ins_period,
5181           p_aei_information7         => p_rec.contractor_name,
5182           p_aei_information8         => p_rec.beneficiary_name,
5183           p_aei_information9         => p_rec.beneficiary_relship,
5184           p_aei_information10        => p_rec.maturity_repayment,
5185           p_aei_information11        => l_csr_aei.aei_information11,
5186           p_aei_information13        => l_csr_aei.aei_information13);
5187         --
5188         p_rec.object_version_number := p_rec.object_version_number + 1;
5189         --
5190         if p_expire_after_transfer = 'Y' then
5191           p_rec.status := 'D';
5192         end if;
5193         --
5194         -- since no storage for old eit data in view, unnecessary to change like entry.
5195         update pay_jp_isdf_nonlife_dml_v
5196         set    object_version_number = p_rec.object_version_number,
5197                status = p_rec.status,
5198                aei_object_version_number = fnd_number.number_to_canonical(p_rec.aei_object_version_number)
5199         where  row_id = p_rec.row_id;
5200       --
5201       end if;
5202     --
5203     end if;
5204   --
5205   elsif p_rec.status = 'D' then
5206   --
5207     --if p_rec.delete_mode = 'ZAP' then
5208     --  hr_assignment_extra_info_api.delete_assignment_extra_info(
5209     --    p_validate                 => false,
5210     --    p_assignment_extra_info_id => p_rec.assignment_extra_info_id,
5211     --    p_object_version_number    => p_rec.aei_object_version_number);
5212     --else
5213     --
5214       open csr_aei;
5215       fetch csr_aei into l_csr_aei;
5216       close csr_aei;
5217     --
5218     if l_csr_aei.assignment_extra_info_id is not null then
5219     --
5220       hr_assignment_extra_info_api.update_assignment_extra_info(
5221         p_validate                 => false,
5222         p_assignment_extra_info_id => l_csr_aei.assignment_extra_info_id,
5223         p_object_version_number    => l_csr_aei.object_version_number,
5224         p_aei_information_category => 'JP_ASS_AI_INFO',
5225         p_aei_information1         => l_csr_aei.aei_information1,
5226         p_aei_information2         => l_csr_aei.aei_information2,
5227         p_aei_information3         => l_csr_aei.aei_information3,
5228         p_aei_information4         => fnd_date.date_to_canonical(l_effective_date-1),
5229         p_aei_information5         => p_rec.ins_type,
5230         p_aei_information6         => p_rec.ins_period,
5231         p_aei_information7         => p_rec.contractor_name,
5232         p_aei_information8         => p_rec.beneficiary_name,
5233         p_aei_information9         => p_rec.beneficiary_relship,
5234         p_aei_information10        => p_rec.maturity_repayment,
5235         p_aei_information11        => l_csr_aei.aei_information11,
5236         p_aei_information13        => l_csr_aei.aei_information13);
5237     --
5238       p_rec.object_version_number := p_rec.object_version_number + 1;
5239     --
5240     -- since no storage for old eit data in view, unnecessary to change like entry.
5241       update pay_jp_isdf_nonlife_dml_v
5242       set    object_version_number = p_rec.object_version_number,
5243              aei_object_version_number = fnd_number.number_to_canonical(l_csr_aei.object_version_number)
5244       where  row_id = p_rec.row_id;
5245     --
5246     end if;
5247   --
5248   end if;
5249 --
5250   if g_debug then
5251     hr_utility.trace('end update_assact');
5252     hr_utility.set_location(l_proc,1000);
5253   end if;
5254 --
5255 end transfer_nonlife;
5256 --
5257 -- -------------------------------------------------------------------------
5258 -- do_transfer
5259 -- -------------------------------------------------------------------------
5260 procedure do_transfer(
5261   p_action_information_id in number,
5262   p_object_version_number in out nocopy number,
5263   p_transfer_date         in date,
5264   p_create_session        in boolean default true,
5265   p_expire_after_transfer in varchar2 default 'N')
5266 is
5267 --
5268   l_proc varchar2(80) := c_package||'do_transfer';
5269   l_assact_rec pay_jp_isdf_assact_v%rowtype;
5270   l_effective_date date;
5271   l_year_end_date date;
5272   l_dec_first_date date;
5273 --
5274   cursor csr_entry
5275   is
5276   select *
5277   from   pay_jp_isdf_entry_v
5278   where  assignment_action_id = l_assact_rec.assignment_action_id
5279   and    status <> 'D'
5280   for update nowait;
5281 --
5282   -- ass eit exclude PC data, take only GIP/LINC
5283   cursor csr_life_gen_del
5284   is
5285   select *
5286   from   pay_jp_isdf_life_gen_v
5287   where  assignment_action_id = l_assact_rec.assignment_action_id
5288   and    gen_ins_class <> 'PC'
5289   and    status = 'D'
5290   for update nowait;
5291 --
5292   -- status U is only case when archive was transfered
5293   cursor csr_life_gen_upd
5294   is
5295   select *
5296   from   pay_jp_isdf_life_gen_v
5297   where  assignment_action_id = l_assact_rec.assignment_action_id
5298   and    gen_ins_class <> 'PC'
5299   and    status = 'Q'
5300   for update nowait;
5301 --
5302   cursor csr_life_gen_ins
5303   is
5304   select *
5305   from   pay_jp_isdf_life_gen_v
5306   where  assignment_action_id = l_assact_rec.assignment_action_id
5307   and    gen_ins_class <> 'PC'
5308   and    status = 'I'
5309   for update nowait;
5310 
5311   -- ass eit exclude PC data, take only GIP/LINC
5312   cursor csr_care_med_del
5313   is
5314   select *
5315   from   pay_jp_isdf_care_med_v
5316   where  assignment_action_id = l_assact_rec.assignment_action_id
5317   and    care_ins_class <> 'PC'
5318   and    status = 'D'
5319   for update nowait;
5320 --
5321   -- status U is only case when archive was transfered
5322   cursor csr_care_med_upd
5323   is
5324   select *
5325   from   pay_jp_isdf_care_med_v
5326   where  assignment_action_id = l_assact_rec.assignment_action_id
5327   and    care_ins_class <> 'PC'
5328   and    status = 'Q'
5329   for update nowait;
5330 --
5331   cursor csr_care_med_ins
5332   is
5333   select *
5334   from   pay_jp_isdf_care_med_v
5335   where  assignment_action_id = l_assact_rec.assignment_action_id
5336   and    care_ins_class <> 'PC'
5337   and    status = 'I'
5338   for update nowait;
5339 
5340 --
5341   -- ass eit exclude PC data, take only GIP/LINC
5342   cursor csr_life_pens_del
5343   is
5344   select *
5345   from   pay_jp_isdf_life_pens_v
5346   where  assignment_action_id = l_assact_rec.assignment_action_id
5347   and    pens_ins_class <> 'PC'
5348   and    status = 'D'
5349   for update nowait;
5350 --
5351   -- status U is only case when archive was transfered
5352   cursor csr_life_pens_upd
5353   is
5354   select *
5355   from   pay_jp_isdf_life_pens_v
5356   where  assignment_action_id = l_assact_rec.assignment_action_id
5357   and    pens_ins_class <> 'PC'
5358   and    status = 'Q'
5359   for update nowait;
5360 --
5361   cursor csr_life_pens_ins
5362   is
5363   select *
5364   from   pay_jp_isdf_life_pens_v
5365   where  assignment_action_id = l_assact_rec.assignment_action_id
5366   and    pens_ins_class <> 'PC'
5367   and    status = 'I'
5368   for update nowait;
5369 --
5370   -- ass eit exclude PC data, take only AP
5371   cursor csr_nonlife_del
5372   is
5373   select *
5374   from   pay_jp_isdf_nonlife_v
5375   where  assignment_action_id = l_assact_rec.assignment_action_id
5376   and    nonlife_ins_class <> 'PC'
5377   and    status = 'D'
5378   for update nowait;
5379 --
5380   -- status U is only case when archive was transfered
5381   cursor csr_nonlife_upd
5382   is
5383   select *
5384   from   pay_jp_isdf_nonlife_v
5385   where  assignment_action_id = l_assact_rec.assignment_action_id
5386   and    nonlife_ins_class <> 'PC'
5387   and    status = 'Q'
5388   for update nowait;
5389 --
5390   cursor csr_nonlife_ins
5391   is
5392   select *
5393   from   pay_jp_isdf_nonlife_v
5394   where  assignment_action_id = l_assact_rec.assignment_action_id
5395   and    nonlife_ins_class <> 'PC'
5396   and    status = 'I'
5397   for update nowait;
5398 --
5399 begin
5400 --
5401   if g_debug then
5402     hr_utility.set_location(l_proc,0);
5403   end if;
5404 --
5405   hr_api.mandatory_arg_error(l_proc, 'transfer_date', p_transfer_date);
5406 --
5407   pay_jp_isdf_dml_pkg.lock_assact(p_action_information_id, p_object_version_number, l_assact_rec);
5408 --
5409   if l_assact_rec.transaction_status <> 'A' then
5410     fnd_message.set_name('PAY', 'PAY_JP_DEF_INVALID_TXN_STATUS');
5411     fnd_message.raise_error;
5412   elsif l_assact_rec.transfer_status <> 'U' then
5413     fnd_message.set_name('PAY', 'PAY_JP_DEF_ALREADY_TRANSFERRED');
5414     fnd_message.raise_error;
5415   end if;
5416 --
5417   l_year_end_date := add_months(trunc(l_assact_rec.effective_date, 'YYYY'), 12) - 1;
5418   l_dec_first_date := trunc(l_year_end_date,'MM');
5419 --
5420   if p_transfer_date is null then
5421     l_effective_date := l_assact_rec.effective_date;
5422   else
5423     l_effective_date := p_transfer_date;
5424   end if;
5425 --
5426   -- actually if l_dec_first_date <= p_transfer_date <= l_year_end_date,
5427   -- insert is ok because nonrecurring element (unnecessary to validate transfer_date < effective_date)
5428   -- but basically transfer should be done after archive process date.
5429   if l_effective_date < l_assact_rec.effective_date
5430   or l_effective_date < l_dec_first_date
5431   or l_effective_date > l_year_end_date then
5432     fnd_message.set_name('PAY', 'PAY_JP_ISDF_INVALID_TRANS_DATE');
5433     fnd_message.set_token('EFFECTIVE_DATE', fnd_date.date_to_chardate(l_assact_rec.effective_date));
5434     fnd_message.set_token('DEC_FIRST_DATE', fnd_date.date_to_chardate(l_dec_first_date));
5435     fnd_message.set_token('YEAR_END_DATE',  fnd_date.date_to_chardate(l_year_end_date));
5436     fnd_message.raise_error;
5437   end if;
5438 --
5439   -- for api use
5440   if p_create_session then
5441     insert_session(l_effective_date);
5442     commit;
5443   end if;
5444 --
5445   if g_debug then
5446     hr_utility.set_location(l_proc,20);
5447     hr_utility.trace('action_information_id  : '||p_action_information_id);
5448     hr_utility.trace('object_version_number  : '||p_object_version_number);
5449     hr_utility.trace('assignment_action_id   : '||l_assact_rec.assignment_action_id);
5450     hr_utility.trace('start calc_dct before finalize');
5451   end if;
5452 --
5453   -- Transfer the followings.
5454   --
5455   -- Transfer JP_ISDF_ENTRY to PAY_ELEMENT_ENTRIES_F
5456   --
5457   for l_rec in csr_entry loop
5458   -- boolean is not supported in jrad.
5459     transfer_entry(l_rec,l_effective_date,p_expire_after_transfer);
5460   end loop;
5461 --
5462   -- Transfer the followings.
5463   --
5464   -- Transfer JP_ISDF_LIFE_GEN.GEN_INS_CLASS=GIP/LINC to PER_ASSIGNMENT_EXTRA_INFO.JP_ASS_LIG_INFO
5465   -- Transfer JP_ISDF_LIFE_PENS.PENS_INS_CLASS=GIP/LINC to PER_ASSIGNMENT_EXTRA_INFO.JP_ASS_LIP_INFO
5466 --
5467   -- Disable to delete
5468   -- because GIP and LINC data are relevant to deducted monthly element entry
5469   -- which is used in custom formula for monthly salary
5470   -- so that employer needs to care dependency for deletion of EIT with custom element entry setup.
5471   -- But we allow to delete GIP/LINC archive data on FormPG,
5472   -- it means that makes inconsistence between Report data and EIT data.
5473   -- employee can exclude LINC/GIP data from subjection of deduction,
5474   -- but this action is not same to remove LING/GIP from EIT.
5475   -- delete phase
5476   --for l_life_gen_rec in csr_life_gen_del loop
5477   --  transfer_life_gen(l_life_gen_rec,l_effective_date,p_expire_after_transfer);
5478   --end loop;
5479   --
5480   --for l_life_pens_rec in csr_life_pens_del loop
5481   --  transfer_life_pens(l_life_pens_rec,l_effective_date,p_expire_after_transfer);
5482   --end loop;
5483   --
5484   --for l_nonlife_rec in csr_nonlife_del loop
5485   --  transfer_nonlife(l_nonlife_rec,l_effective_date,p_expire_after_transfer);
5486   --end loop;
5487 --
5488   -- update phase
5489   for l_life_gen_rec in csr_life_gen_upd loop
5490     transfer_life_gen(l_life_gen_rec,l_effective_date,p_expire_after_transfer);
5491   end loop;
5492   --
5493   for l_care_med_rec in csr_care_med_upd loop
5494     transfer_care_med(l_care_med_rec,l_effective_date,p_expire_after_transfer);
5495   end loop;
5496   --
5497   for l_life_pens_rec in csr_life_pens_upd loop
5498     transfer_life_pens(l_life_pens_rec,l_effective_date,p_expire_after_transfer);
5499   end loop;
5500   --
5501   for l_nonlife_rec in csr_nonlife_upd loop
5502     transfer_nonlife(l_nonlife_rec,l_effective_date,p_expire_after_transfer);
5503   end loop;
5504 --
5505   -- Disable to insert
5506   -- because GIP and LINC data are relevant to deducted monthly element entry
5507   -- which is used in custom formula for monthly salary
5508   -- so that employer needs to care dependency for insertion of EIT with custom element entry setup.
5509   -- insert phase
5510   --for l_life_gen_rec in csr_life_gen_ins loop
5511   --  transfer_life_gen(l_life_gen_rec,l_effective_date,p_expire_after_transfer);
5512   --end loop;
5513   --
5514   --for l_life_pens_rec in csr_life_pens_ins loop
5515   --  transfer_life_pens(l_life_pens_rec,l_effective_date,p_expire_after_transfer);
5516   --end loop;
5517   --
5518   --for l_nonlife_rec in csr_nonlife_ins loop
5519   --  transfer_nonlife(l_nonlife_rec,l_effective_date,p_expire_after_transfer);
5520   --end loop;
5521 --
5522   if p_create_session then
5523     delete_session;
5524     commit;
5525   end if;
5526 --
5527   p_object_version_number := l_assact_rec.object_version_number + 1;
5528 --
5529   --api is disable because assact has been locked.
5530   --pay_jp_isdf_dml_pkg.update_assact(
5531   --  p_action_information_id => l_assact_rec.assignment_action_id,
5532   --  p_object_version_number => p_object_version_number,
5533   --  p_transaction_status    => l_assact_rec.transaction_status,
5534   --  p_finalized_date        => l_assact_rec.finalized_date,
5535   --  p_finalized_by          => l_assact_rec.finalized_by,
5536   --  p_user_comments         => l_assact_rec.user_comments,
5537   --  p_admin_comments        => l_assact_rec.admin_comments,
5538   --  p_transfer_status       => 'T',
5539   --  p_transfer_date         => fnd_date.date_to_canonical(l_effective_date),
5540   --  p_expiry_date           => l_assact_rec.expiry_date);
5541   update pay_jp_isdf_assact_dml_v
5542   set    object_version_number = p_object_version_number,
5543          transfer_status    = 'T',
5544          transfer_date         = fnd_date.date_to_canonical(l_effective_date)
5545   where  row_id = l_assact_rec.row_id;
5546 --
5547   if g_debug then
5548     hr_utility.trace('end update_assact');
5549     hr_utility.set_location(l_proc,1000);
5550   end if;
5551 --
5552 end do_transfer;
5553 --
5554 -- -------------------------------------------------------------------------
5555 -- do_expire
5556 -- -------------------------------------------------------------------------
5557 procedure do_expire(
5558   p_action_information_id in number,
5559   p_object_version_number in out nocopy number,
5560   p_expiry_date           in date,
5561   p_create_session        in boolean default true,
5562   p_mode                  in varchar2 default null)
5563 is
5564 --
5565 -- p_mode: DELETE: change archive status to D
5566 --         ZAP   : remove archive data of status D
5567 --         N/A   : nothing to do. (original)
5568 --
5569   l_proc varchar2(80) := c_package||'do_expire';
5570   l_assact_rec pay_jp_isdf_assact_v%rowtype;
5571   l_effective_date date;
5572   l_dec_first_date date;
5573   l_year_end_date date;
5574   l_esd date;
5575   l_eed date;
5576   l_warning boolean;
5577   l_object_version_number number;
5578 --
5579   cursor csr_entry
5580   is
5581   select *
5582   from   pay_jp_isdf_entry_v
5583   where  assignment_action_id = l_assact_rec.assignment_action_id
5584   for update nowait;
5585 --
5586   l_csr_entry csr_entry%rowtype;
5587 --
5588   cursor csr_del
5589   is
5590   select rowid row_id,
5591          action_information_id,
5592          object_version_number,
5593          action_information_category
5594   from   pay_action_information
5595   where  action_context_id = l_assact_rec.assignment_action_id
5596   and    action_context_type = 'AAP'
5597   and    action_information_category <> 'JP_ISDF_ASSACT'
5598   and    action_information1 <> 'D';
5599 --
5600   l_csr_del csr_del%rowtype;
5601 --
5602 begin
5603 --
5604   if g_debug then
5605     hr_utility.set_location(l_proc,0);
5606   end if;
5607 --
5608   hr_api.mandatory_arg_error(l_proc,'expiry_date',p_expiry_date);
5609 --
5610   pay_jp_isdf_dml_pkg.lock_assact(p_action_information_id, p_object_version_number, l_assact_rec);
5611 --
5612   if l_assact_rec.transaction_status = 'U' then
5613     fnd_message.set_name('PAY', 'PAY_JP_DEF_NOT_TRANSFERRED_YET');
5614     fnd_message.raise_error;
5615   elsif l_assact_rec.transfer_status = 'E' then
5616     fnd_message.set_name('PAY', 'PAY_JP_DEF_ALREADY_EXPIRED');
5617     fnd_message.raise_error;
5618   end if;
5619 --
5620   if g_debug then
5621     hr_utility.set_location(l_proc,20);
5622     hr_utility.trace('action_information_id  : '||p_action_information_id);
5623     hr_utility.trace('object_version_number  : '||p_object_version_number);
5624     hr_utility.trace('assignment_action_id   : '||l_assact_rec.assignment_action_id);
5625     hr_utility.trace('start calc_dct before finalize');
5626   end if;
5627 --
5628   l_year_end_date := add_months(trunc(l_assact_rec.effective_date, 'YYYY'), 12) - 1;
5629   l_dec_first_date := trunc(l_year_end_date,'MM');
5630 --
5631   -- actually if l_dec_first_date (first day of l_transfer_date) <= p_expiry_date <= l_year_end_date,
5632   -- delete is ok because nonrecurring element (unnecessary to validate expiry_date < transfer_date)
5633   -- but basically expiry should be done after transfer process date.
5634   -- (transfer_date is always set since transfer_status check has been done)
5635   if p_expiry_date < l_assact_rec.effective_date
5636   or p_expiry_date < l_assact_rec.transfer_date
5637   or p_expiry_date > l_year_end_date then
5638     fnd_message.set_name('PAY', 'PAY_JP_ISDF_INVALID_EXP_DATE');
5639     fnd_message.set_token('TRANSFER_DATE', fnd_date.date_to_chardate(l_assact_rec.transfer_date));
5640     fnd_message.set_token('YEAR_END_DATE', fnd_date.date_to_chardate(l_year_end_date));
5641     fnd_message.raise_error;
5642   end if;
5643 --
5644   -- l_dec_first_date or effective_date <= l_transfer_date <= l_year_end_date
5645   -- l_transfer_date <= l_expirty_date <= l_year_end_date
5646   -- since delete mode is not allowed to delete on the same day of last eev eed,
5647   -- if l_expiry_date is end period of transffered date (= l_year_end_date),
5648   -- set delete validation start_date (p_effective_date) to l_year_end_date - 1.
5649   if p_expiry_date = l_year_end_date then
5650     l_effective_date := l_year_end_date - 1;
5651   else
5652     l_effective_date := p_expiry_date;
5653   end if;
5654 --
5655   -- for api use.
5656   if p_create_session then
5657     insert_session(l_effective_date);
5658   end if;
5659 --
5660   open csr_entry;
5661   loop
5662     fetch csr_entry into l_csr_entry;
5663     exit when csr_entry%notfound;
5664   --
5665     pay_element_entry_api.delete_element_entry(
5666       p_validate              => false,
5667       p_effective_date        => l_effective_date,
5668       p_datetrack_delete_mode => 'DELETE',
5669       p_element_entry_id      => l_csr_entry.ins_element_entry_id,
5670       p_object_version_number => l_csr_entry.ins_ee_object_version_number,
5671       p_effective_start_date  => l_esd,
5672       p_effective_end_date    => l_eed,
5673       p_delete_warning        => l_warning);
5674   --
5675     pay_element_entry_api.delete_element_entry(
5676       p_validate              => false,
5677       p_effective_date        => l_effective_date,
5678       p_datetrack_delete_mode => 'DELETE',
5679       p_element_entry_id      => l_csr_entry.is_element_entry_id,
5680       p_object_version_number => l_csr_entry.is_ee_object_version_number,
5681       p_effective_start_date  => l_esd,
5682       p_effective_end_date    => l_eed,
5683       p_delete_warning        => l_warning);
5684   --
5685     update pay_jp_isdf_entry_dml_v
5686     set    object_version_number        = l_csr_entry.object_version_number + 1,
5687            ins_ee_object_version_number = fnd_number.number_to_canonical(l_csr_entry.ins_ee_object_version_number),
5688            is_ee_object_version_number  = fnd_number.number_to_canonical(l_csr_entry.is_ee_object_version_number)
5689     where  row_id = l_csr_entry.row_id;
5690   --
5691   end loop;
5692   close csr_entry;
5693 --
5694   if p_mode = 'ZAP' then
5695   --
5696     delete
5697     from  pay_action_information
5698     where action_context_id = l_assact_rec.assignment_action_id
5699     and   action_context_type = 'AAP'
5700     and   action_information_category <> 'JP_ISDF_ASSACT';
5701   --
5702   elsif p_mode = 'DELETE' then
5703   --
5704     open csr_del;
5705     loop
5706     --
5707       fetch csr_del into l_csr_del;
5708       exit when csr_del%notfound;
5709     --
5710       -- ovn already updated above.
5711       if l_csr_del.action_information_category = 'JP_ISDF_ENTRY' then
5712         l_object_version_number := l_csr_del.object_version_number;
5713       else
5714         l_object_version_number := l_csr_del.object_version_number + 1;
5715       end if;
5716     --
5717       update pay_action_information
5718       set    object_version_number = l_object_version_number,
5719              action_information1 = 'D'
5720       where  rowid = l_csr_del.row_id;
5721     --
5722     end loop;
5723     close csr_del;
5724   --
5725   end if;
5726 --
5727   if p_create_session then
5728     delete_session;
5729   end if;
5730 --
5731   p_object_version_number := l_assact_rec.object_version_number + 1;
5732 --
5733   --api is disable because assact has been locked.
5734   --pay_jp_isdf_dml_pkg.update_assact(
5735   --  p_action_information_id => l_assact_rec.assignment_action_id,
5736   --  p_object_version_number => p_object_version_number,
5737   --  p_transaction_status    => l_assact_rec.transaction_status,
5738   --  p_finalized_date        => l_assact_rec.finalized_date,
5739   --  p_finalized_by          => l_assact_rec.finalized_by,
5740   --  p_user_comments         => l_assact_rec.user_comments,
5741   --  p_admin_comments        => l_assact_rec.admin_comments,
5742   --  p_transfer_status       => 'E',
5743   --  p_transfer_date         => l_assact_rec.transfer_date,
5744   --  p_expiry_date           => fnd_date.date_to_canonical(p_expiry_date));
5745   update pay_jp_isdf_assact_dml_v
5746   set    object_version_number = p_object_version_number,
5747          transfer_status    = 'E',
5748          expiry_date           = fnd_date.date_to_canonical(p_expiry_date)
5749   where  row_id = l_assact_rec.row_id;
5750 --
5751   if g_debug then
5752     hr_utility.trace('end update_assact');
5753     hr_utility.set_location(l_proc,1000);
5754   end if;
5755 --
5756 end do_expire;
5757 --
5758  -- -------------------------------------------------------------------------
5759 -- get_sqlerrm (use multiple transaction)
5760 -- -------------------------------------------------------------------------
5761 function get_sqlerrm
5762 return varchar2
5763 is
5764 begin
5765 --
5766   if sqlcode = -20001 then
5767   --
5768     declare
5769       l_sqlerrm varchar2(2000) := fnd_message.get;
5770     begin
5771       if l_sqlerrm is not null then
5772         return l_sqlerrm;
5773       else
5774         return sqlerrm;
5775       end if;
5776     end;
5777   --
5778   else
5779     return sqlerrm;
5780   end if;
5781 --
5782 end get_sqlerrm;
5783 --
5784  -- -------------------------------------------------------------------------
5785 -- do_finalize (Multiple Transaction for internal use only)
5786 -- -------------------------------------------------------------------------
5787 procedure do_finalize(
5788   errbuf  out nocopy varchar2,
5789   retcode out nocopy varchar2,
5790   p_payroll_action_id in number,
5791   p_user_comments in varchar2)
5792 is
5793 --
5794   l_effective_date date;
5795 --
5796   cursor csr_assact
5797   is
5798   select /*+ ORDERED */
5799          assact.action_information_id,
5800          assact.object_version_number,
5801          pp.full_name,
5802          pa.assignment_number
5803   from   pay_assignment_actions paa,
5804          pay_jp_isdf_assact_v   assact,
5805          per_all_assignments_f  pa,
5806          per_all_people_f       pp
5807   where  paa.payroll_action_id = p_payroll_action_id
5808   and    paa.action_status = 'C'
5809   and    assact.assignment_action_id = paa.assignment_action_id
5810   and    assact.transaction_status = 'N'
5811   and    pa.assignment_id = assact.assignment_id
5812   and    assact.effective_date
5813          between pa.effective_start_date and pa.effective_end_date
5814   and    pp.person_id = pa.person_id
5815   and    assact.effective_date
5816          between pp.effective_start_date and pp.effective_end_date
5817   order by lpad(pa.assignment_number,10,' '),
5818            pp.full_name;
5819 --
5820 begin
5821 --
5822   select effective_date
5823   into   l_effective_date
5824   from   pay_jp_isdf_pact_v
5825   where  payroll_action_id = p_payroll_action_id;
5826 --
5827   insert_session(l_effective_date);
5828   commit;
5829 --
5830   fnd_file.put_line(fnd_file.output, 'Full Name                                Assignment Number');
5831   fnd_file.put_line(fnd_file.output, '---------------------------------------- ------------------------------');
5832   fnd_file.put_line(fnd_file.log,    'Full Name                                Assignment Number');
5833   fnd_file.put_line(fnd_file.log,    '---------------------------------------- ------------------------------');
5834 --
5835   for l_rec in csr_assact loop
5836   --
5837     begin
5838     --
5839       do_finalize(
5840         p_action_information_id => l_rec.action_information_id,
5841         p_object_version_number => l_rec.object_version_number,
5842         p_user_comments         => p_user_comments);
5843     --
5844       commit;
5845     --
5846       fnd_file.put_line(fnd_file.output, rpad(l_rec.full_name, 40) || ' ' || rpad(l_rec.assignment_number, 30));
5847     --
5848     exception
5849     when others then
5850     --
5851       fnd_file.put_line(fnd_file.log, rpad(l_rec.full_name, 40) || ' ' || rpad(l_rec.assignment_number, 30));
5852       fnd_file.put_line(fnd_file.log, get_sqlerrm);
5853     --
5854     end;
5855   --
5856   end loop;
5857 --
5858   delete_session;
5859   commit;
5860 --
5861   -- retcode
5862   -- 0 : Success
5863   -- 1 : Warning
5864   -- 2 : Error
5865   --
5866   retcode := 0;
5867 --
5868 end do_finalize;
5869 --
5870  -- -------------------------------------------------------------------------
5871 -- do_approve (Multiple Transaction)
5872 -- -------------------------------------------------------------------------
5873 procedure do_approve(
5874   errbuf  out nocopy varchar2,
5875   retcode out nocopy varchar2,
5876   p_payroll_action_id in number)
5877 is
5878 --
5879   l_effective_date date;
5880 --
5881   cursor csr_assact
5882   is
5883   select /*+ ORDERED */
5884          assact.action_information_id,
5885          assact.object_version_number,
5886          pp.full_name,
5887          pa.assignment_number
5888   from   pay_assignment_actions paa,
5889          pay_jp_isdf_assact_v   assact,
5890          per_all_assignments_f  pa,
5891          per_all_people_f       pp
5892   where  paa.payroll_action_id = p_payroll_action_id
5893   and    paa.action_status = 'C'
5894   and    assact.assignment_action_id = paa.assignment_action_id
5895   and    assact.transaction_status = 'F'
5896   and    pa.assignment_id = assact.assignment_id
5897   and    assact.effective_date
5898          between pa.effective_start_date and pa.effective_end_date
5899   and    pp.person_id = pa.person_id
5900   and    assact.effective_date
5901          between pp.effective_start_date and pp.effective_end_date
5902   order by lpad(pa.assignment_number,10,' '),
5903            pp.full_name;
5904 --
5905 begin
5906 --
5907   select effective_date
5908   into   l_effective_date
5909   from   pay_jp_isdf_pact_v
5910   where  payroll_action_id = p_payroll_action_id;
5911 --
5912   insert_session(l_effective_date);
5913   commit;
5914 --
5915   fnd_file.put_line(fnd_file.output, 'Full Name                                Assignment Number');
5916   fnd_file.put_line(fnd_file.output, '---------------------------------------- ------------------------------');
5917   fnd_file.put_line(fnd_file.log,    'Full Name                                Assignment Number');
5918   fnd_file.put_line(fnd_file.log,    '---------------------------------------- ------------------------------');
5919 --
5920   for l_rec in csr_assact loop
5921   --
5922     begin
5923     --
5924       do_approve(
5925         p_action_information_id => l_rec.action_information_id,
5926         p_object_version_number => l_rec.object_version_number);
5927     --
5928       commit;
5929     --
5930       fnd_file.put_line(fnd_file.output, rpad(l_rec.full_name, 40) || ' ' || rpad(l_rec.assignment_number, 30));
5931     --
5932     exception
5933     when others then
5934     --
5935       fnd_file.put_line(fnd_file.log, rpad(l_rec.full_name, 40) || ' ' || rpad(l_rec.assignment_number, 30));
5936       fnd_file.put_line(fnd_file.log, get_sqlerrm);
5937     --
5938     end;
5939   --
5940   end loop;
5941 --
5942   delete_session;
5943   commit;
5944 --
5945   -- retcode
5946   -- 0 : Success
5947   -- 1 : Warning
5948   -- 2 : Error
5949   --
5950   retcode := 0;
5951 --
5952 end do_approve;
5953 --
5954 -- -------------------------------------------------------------------------
5955 -- do_transfer (Multiple Transaction)
5956 -- -------------------------------------------------------------------------
5957 procedure do_transfer(
5958   errbuf  out nocopy varchar2,
5959   retcode out nocopy varchar2,
5960   p_payroll_action_id in number,
5961   p_transfer_date         in varchar2,
5962   p_expire_after_transfer in varchar2 default 'N')
5963 is
5964 --
5965   l_effective_date date;
5966 --
5967   cursor csr_assact
5968   is
5969   select /*+ ORDERED */
5970          assact.action_information_id,
5971          assact.object_version_number,
5972          pp.full_name,
5973          pa.assignment_number
5974   from   pay_assignment_actions paa,
5975          pay_jp_isdf_assact_v   assact,
5976          per_all_assignments_f  pa,
5977          per_all_people_f       pp
5978   where  paa.payroll_action_id = p_payroll_action_id
5979   and    paa.action_status = 'C'
5980   and    assact.assignment_action_id = paa.assignment_action_id
5981   and    assact.transaction_status = 'A'
5982   and    assact.transfer_status = 'U'
5983   and    pa.assignment_id = assact.assignment_id
5984   and    assact.effective_date
5985          between pa.effective_start_date and pa.effective_end_date
5986   and    pp.person_id = pa.person_id
5987   and    assact.effective_date
5988          between pp.effective_start_date and pp.effective_end_date
5989   order by lpad(pa.assignment_number,10,' '),
5990            pp.full_name;
5991 --
5992 begin
5993 --
5994   select effective_date
5995   into   l_effective_date
5996   from   pay_jp_isdf_pact_v
5997   where  payroll_action_id = p_payroll_action_id;
5998 --
5999   if p_transfer_date is not null then
6000     l_effective_date := fnd_date.canonical_to_date(p_transfer_date);
6001   end if;
6002 --
6003   insert_session(l_effective_date);
6004   commit;
6005 --
6006   fnd_file.put_line(fnd_file.output, 'Full Name                                Assignment Number');
6007   fnd_file.put_line(fnd_file.output, '---------------------------------------- ------------------------------');
6008   fnd_file.put_line(fnd_file.log,    'Full Name                                Assignment Number');
6009   fnd_file.put_line(fnd_file.log,    '---------------------------------------- ------------------------------');
6010 --
6011   for l_rec in csr_assact loop
6012   --
6013     begin
6014     --
6015       do_transfer(
6016         p_action_information_id => l_rec.action_information_id,
6017         p_object_version_number => l_rec.object_version_number,
6018         p_transfer_date         => l_effective_date,
6019         p_create_session        => false,
6020         p_expire_after_transfer => p_expire_after_transfer);
6021     --
6022       commit;
6023     --
6024       fnd_file.put_line(fnd_file.output, rpad(l_rec.full_name, 40) || ' ' || rpad(l_rec.assignment_number, 30));
6025     --
6026     exception
6027     when others then
6028     --
6029       fnd_file.put_line(fnd_file.log, rpad(l_rec.full_name, 40) || ' ' || rpad(l_rec.assignment_number, 30));
6030       fnd_file.put_line(fnd_file.log, get_sqlerrm);
6031     --
6032     end;
6033   --
6034   end loop;
6035 --
6036   delete_session;
6037   commit;
6038 --
6039   -- retcode
6040   -- 0 : Success
6041   -- 1 : Warning
6042   -- 2 : Error
6043   --
6044   retcode := 0;
6045 --
6046 end do_transfer;
6047 --
6048 -- -------------------------------------------------------------------------
6049 -- do_expire (Multiple Transaction)
6050 -- -------------------------------------------------------------------------
6051 procedure do_expire(
6052   errbuf  out nocopy varchar2,
6053   retcode out nocopy varchar2,
6054   p_payroll_action_id in number,
6055   p_expiry_date       in varchar2,
6056   p_mode              in varchar2 default null)
6057 is
6058 --
6059   l_effective_date date;
6060 --
6061   cursor csr_assact
6062   is
6063   select /*+ ORDERED */
6064          assact.action_information_id,
6065          assact.object_version_number,
6066          pp.full_name,
6067          pa.assignment_number
6068   from   pay_assignment_actions paa,
6069          pay_jp_isdf_assact_v   assact,
6070          per_all_assignments_f  pa,
6071          per_all_people_f       pp
6072   where  paa.payroll_action_id = p_payroll_action_id
6073   and    paa.action_status = 'C'
6074   and    assact.assignment_action_id = paa.assignment_action_id
6075   and    assact.transaction_status = 'A'
6076   and    assact.transfer_status = 'T'
6077   and    pa.assignment_id = assact.assignment_id
6078   and    assact.effective_date
6079          between pa.effective_start_date and pa.effective_end_date
6080   and    pp.person_id = pa.person_id
6081   and    assact.effective_date
6082          between pp.effective_start_date and pp.effective_end_date
6083   order by lpad(pa.assignment_number,10,' '),
6084            pp.full_name;
6085 --
6086 begin
6087 --
6088   select effective_date
6089   into   l_effective_date
6090   from   pay_jp_isdf_pact_v
6091   where  payroll_action_id = p_payroll_action_id;
6092 --
6093   if p_expiry_date is not null then
6094     l_effective_date := fnd_date.canonical_to_date(p_expiry_date);
6095   end if;
6096 --
6097   insert_session(l_effective_date);
6098   commit;
6099 --
6100   fnd_file.put_line(fnd_file.output, 'Full Name                                Assignment Number');
6101   fnd_file.put_line(fnd_file.output, '---------------------------------------- ------------------------------');
6102   fnd_file.put_line(fnd_file.log,    'Full Name                                Assignment Number');
6103   fnd_file.put_line(fnd_file.log,    '---------------------------------------- ------------------------------');
6104 --
6105   for l_rec in csr_assact loop
6106   --
6107     begin
6108     --
6109       do_expire(
6110         p_action_information_id => l_rec.action_information_id,
6111         p_object_version_number => l_rec.object_version_number,
6112         p_expiry_date           => l_effective_date,
6113         p_create_session        => false,
6114         p_mode                  => p_mode);
6115     --
6116       commit;
6117     --
6118       fnd_file.put_line(fnd_file.output, rpad(l_rec.full_name, 40) || ' ' || rpad(l_rec.assignment_number, 30));
6119     --
6120     exception
6121     when others then
6122     --
6123       fnd_file.put_line(fnd_file.log, rpad(l_rec.full_name, 40) || ' ' || rpad(l_rec.assignment_number, 30));
6124       fnd_file.put_line(fnd_file.log, get_sqlerrm);
6125     --
6126     end;
6127   --
6128   end loop;
6129 --
6130   delete_session;
6131   commit;
6132 --
6133   -- retcode
6134   -- 0 : Success
6135   -- 1 : Warning
6136   -- 2 : Error
6137   --
6138   retcode := 0;
6139 --
6140 end do_expire;
6141 --
6142 end pay_jp_isdf_ss_pkg;