1 PACKAGE BODY ben_derive_part_and_rate_cache AS
2 /* $Header: bendrpac.pkb 120.1 2005/08/05 11:44:59 mmudigon noship $ */
3 --------------------------------------------------------------------------------
4 /*
5 +==============================================================================+
6 | Copyright (c) 1997 Oracle Corporation |
7 | Redwood Shores, California, USA |
8 | All rights reserved. |
9 +==============================================================================+
10 --
11 Name
12 Derive Participation and Rate Cache Routine
13 Purpose
14 This package is used to return or retrieve information that is
15 needed for rates and or factors.
16 History
17 Date Who Version What?
18 ---- --- ------- -----
19 23 Nov 98 G Perry 115.0 Created.
20 20 Dec 98 G Perry 115.1 Support for hours worked.
21 17 Feb 99 G Perry 115.2 Changed hours worked cursor so
22 it selects once_r_cntug_cd.
23 04 May 99 G Perry 115.3 Cache support for PTIP, PLIP.
24 Added in hashing utility.
25 06 May 99 G Perry 115.4 Backport for Fidelity.
26 06 May 99 G Perry 115.5 Leapfrog from 115.3
27 04 Aug 99 T Guy 115.6 Enhanced Base Age calc to take
28 into account spouse/child DOB
29 23 Aug 99 G Perry 115.6 Added nocopy compiler directive.
30 Removed trace messages.
31 Hashing done locally.
32 06 Oct 99 mhoyes 115.8 - Tuned c1 cursors in,
33 - get_age_plip_rate
34 - get_age_ptip_rate
35 10 Jan 00 pbodla 115.9 - Added los_calc_rl to c1 cursor in
36 get_los_pgm_elig, get_los_pl_elig
37 get_los_plip_elig, get_los_ptip_elig,
38 get_los_pgm_elig ,
39 get_los_stated , get_los_pgm_rate ,
40 get_los_pl_rate , get_los_oipl_rate,
41 get_los_plip_rate, get_los_ptip_rate
42 24 Jan 00 lmcdonal 115.10 Add hrs_wkd_calc_rl to hwf and
43 comp_calc_rl to clf. Bugs
44 1118118, 1118113.
45 07 Mar 00 gperry 115.11 Fixes for WWBUG 1195803.
46 31 Mar 00 gperry 115.12 Added oiplip support.
47 13 May 00 mhoyes 115.13 - CBO tuning. Removed business group
48 restrictions from get_age_???_elig
49 get_comp_???_elig cursors.
50 - Replaced all binary_integer datatypes
51 with pls_integer datatyps.
52 26 Jun 00 gperry 115.14 Added age_calc_rl support.
53 03 Aug 00 mhoyes 115.15 - General tuning. Removed business
54 group restrictions.
55 17-jan-01 tilak 115.16 derive factor maximaum validated with < max + 1
56 16-Nov-01 ikasire 115.17 Bug 2101937 - Fixed the error in the ceil
57 condition of version 116.2 in all cursors.
58 08-Oct-02 kmahendr 115.18 Added parameters to get_los_elig,get_los_pgm_elig
59 get_los_ptip_elig, get_los_plip_elig, get_los_pl_elig
60 get_los_oipl_elig and modified cursor c1
61 08-Oct-02 kmahendr 115.19 Added dbdrv lines
62 09-Oct-02 kmahendr 115.20 added parameters in call to get_los_pl_elig,
63 get_los_plip_elig, get_los_ptip_elig
64 18-Oct-02 kmahendr 115.21 Added old_val, new_val parameters to other
65 derived factors
66 22-Oct-02 ikasire 115.22 Bug 2502763 added more parameters to clf routines
67 16-Mar-02 tjesumic 115.23 bug 2853140 age factor changes.
68 18-Mar-02 ikasire 115.24 Bug 2853140 Modifed the cursors to get
69 a row when both old and new values also
70 in the same range.
71 Added validation to update only first time for
72 each comp object with N in exist.
73 19-May-2003 ikasire 115.25 Option Level Rates Enhancements
74 30-Jun-2003 ikasire 115.27 Elpro Vapro Data model changes
75 19-Aug-2003 mmudigon 115.28 gscc fix
76 16-Oct-2003 rpgupta 115.29 Bug 3188198
77 Uncommented 'and p_old_val < lsf.mn_los_num'
78 in cursor c1 at all levels
79 Now the cursor would return only one row and
80 hence the ptnl le would be detected at all
81 stages.
82
83 28-Jul-2004 bmanyam 115.30 Bug 3761038. Split UNIONed queryies into 2.
84 Search Text "PERFNEW".
85 05-Aug-2005 mmudigon 115.31 Bug 4518047. Removed hr_utility
86 statements at lines 305,306 and
87 307
88 */
89 --------------------------------------------------------------------------------
90 --
91 g_package VARCHAR2(80) := 'ben_derive_part_and_rate_cache';
92 g_hash_key NUMBER := ben_hash_utility.get_hash_key;
93 g_hash_jump NUMBER := ben_hash_utility.get_hash_jump;
94 --
95 --Private function to get opt_id from the oipl_id
96 --Option level rates enhancements
97 --
98 FUNCTION get_opt_id(p_oipl_id number,p_effective_date date) return number
99 is
100 --
101 l_opt_id number ;
102 cursor c_opt(p_oipl_id number,p_effective_date date) is
103 select opt_id
104 from ben_oipl_f otp
105 where otp.oipl_id = p_oipl_id
106 and p_effective_date between otp.effective_start_date
107 and otp.effective_end_date ;
108 --
109 begin
110 --
111 open c_opt(p_oipl_id,p_effective_date) ;
112 --
113 fetch c_opt into l_opt_id ;
114 --
115 close c_opt;
116 --
117 return l_opt_id ;
118 --
119 END get_opt_id;
120 --
121 --
122 PROCEDURE get_los_pgm_elig(
123 p_pgm_id IN NUMBER
124 ,p_old_val in number default null
125 ,p_new_val in number default null
126 ,p_business_group_id IN NUMBER
127 ,p_effective_date IN DATE
128 ,p_rec OUT NOCOPY g_cache_los_rec_obj) IS
129 --
130 l_package VARCHAR2(80) := g_package || '.get_los_pgm_elig';
131 --
132 -- Define Cursor
133 --
134 CURSOR c1 IS
135 SELECT p_pgm_id
136 ,'Y'
137 ,lsf.los_det_cd
138 ,lsf.los_dt_to_use_cd
139 ,lsf.use_overid_svc_dt_flag
140 ,lsf.los_uom
141 ,lsf.los_det_rl
142 ,lsf.los_dt_to_use_rl
143 ,lsf.los_calc_rl
144 ,lsf.rndg_cd
145 ,lsf.rndg_rl
146 ,lsf.mn_los_num
147 ,lsf.mx_los_num
148 FROM ben_los_fctr lsf
149 ,ben_elig_los_prte_f els
150 ,ben_eligy_prfl_f elp
151 ,ben_prtn_elig_prfl_f cep
152 ,ben_prtn_elig_f epa
153 WHERE epa.pgm_id = p_pgm_id
154 AND p_effective_date BETWEEN epa.effective_start_date
155 AND epa.effective_end_date
156 AND epa.prtn_elig_id = cep.prtn_elig_id
157 AND p_effective_date BETWEEN cep.effective_start_date
158 AND cep.effective_end_date
159 AND cep.eligy_prfl_id = elp.eligy_prfl_id
160 AND p_effective_date BETWEEN elp.effective_start_date
161 AND elp.effective_end_date
162 AND els.eligy_prfl_id = elp.eligy_prfl_id
163 AND p_effective_date BETWEEN els.effective_start_date
164 AND els.effective_end_date
165 AND els.los_fctr_id = lsf.los_fctr_id
166 AND (
167 (
168 p_new_val IS NOT NULL
169 AND p_old_val IS NOT NULL
170 AND p_new_val >= NVL(lsf.mn_los_num ,p_new_val)
171 and p_new_val < decode(nvl(lsf.mx_los_num,p_new_val) ,
172 trunc(nvl(lsf.mx_los_num,p_new_val))
173 ,decode(nvl(lsf.mn_los_num,p_new_val), trunc(nvl(lsf.mn_los_num,p_new_val)),
174 nvl(lsf.mx_los_num,p_new_val)+1,nvl(lsf.mx_los_num,p_new_val)+0.000000001),
175 nvl(lsf.mx_los_num,p_new_val)+0.000000001 )
176 and p_old_val < lsf.mn_los_num -- uncommented this -- bug 3188198
177 )
178 OR
179 (
180 p_new_val IS NOT NULL
181 AND p_old_val IS NOT NULL
182 AND
183 (
184 p_new_val < NVL(lsf.mn_los_num,p_new_val)
185 OR
186 p_new_val >= decode(nvl(lsf.mx_los_num,p_new_val) ,
187 trunc(nvl(lsf.mx_los_num,p_new_val))
188 ,decode(nvl(lsf.mn_los_num,p_new_val), trunc(nvl(lsf.mn_los_num,p_new_val)),
189 nvl(lsf.mx_los_num,p_new_val)+1,nvl(lsf.mx_los_num,p_new_val)+0.000000001),
190 nvl(lsf.mx_los_num,p_new_val)+0.000000001 )
191 )
192 AND p_old_val >= NVL(lsf.mn_los_num ,p_old_val)
193 and p_old_val < decode(nvl(lsf.mx_los_num,p_old_val) ,
194 trunc(nvl(lsf.mx_los_num,p_old_val))
195 ,decode(nvl(lsf.mn_los_num,p_old_val), trunc(nvl(lsf.mn_los_num,p_old_val)),
196 nvl(lsf.mx_los_num,p_old_val)+1,nvl(lsf.mx_los_num,p_old_val)+0.000000001),
197 nvl(lsf.mx_los_num,p_old_val)+0.000000001 )
198 )
199 OR
200 ( p_new_val IS NULL
201 AND p_old_val IS NULL
202 )
203 ) ;
204 --
205 l_index PLS_INTEGER;
206 l_not_hash_found BOOLEAN;
207 l_prev_index PLS_INTEGER;
208 --
209 BEGIN
210 --
211 hr_utility.set_location ('Entering '||l_package,10);
212 hr_utility.set_location ('p_old_val '||p_old_val,10);
213 hr_utility.set_location ('p_new_val '||p_new_val,10);
214
215 --
216 -- Steps to do process
217 --
218 -- 1) Try and get value from cache
219 -- 2) If can get from cache then copy to output record
220 -- 3) If can't get from cache do db hit and then
221 -- copy to cache record and then copy to output record.
222 --
223 -- Get hashed index value
224 --
225 l_index := MOD(p_pgm_id
226 ,g_hash_key);
227 --
228 IF NOT g_cache_pgm_los_el_rec.EXISTS(l_index) THEN
229 --
230 -- Lets store the hash value in this index
231 hr_utility.set_location ('raise ndf ',10);
232 --
233 RAISE NO_DATA_FOUND;
234 --
235 ELSE
236 --
237 -- If it does exist make sure its the right one
238 --
239 IF g_cache_pgm_los_el_rec(l_index).id <> p_pgm_id THEN
240 --
241 -- Loop through the hash using the jump routine to check further
242 -- indexes
243 --
244 l_not_hash_found := FALSE;
245 --
246 WHILE NOT l_not_hash_found LOOP
247 --
248 l_index := l_index + g_hash_jump;
249 --
250 -- Check if the hash index exists, if not we can use it
251 --
252 IF NOT g_cache_pgm_los_el_rec.EXISTS(l_index) THEN
253 --
254 -- Lets store the hash value in the index
255 hr_utility.set_location ('raise ndf ',20);
256 --
257 RAISE NO_DATA_FOUND;
258 --
259 ELSE
260 --
261 -- Make sure the index is the correct one
262 --
263 IF g_cache_pgm_los_el_rec(l_index).id = p_pgm_id THEN
264 --
265 -- We have a match so the hashed value has been stored before
266 --
267 l_not_hash_found := TRUE;
268 --
269 END IF;
270 --
271 END IF;
272 --
273 END LOOP;
274 --
275 END IF;
276 --
277 END IF;
278 --
279 IF p_old_val IS NOT NULL
280 AND p_new_val IS NOT NULL THEN
281 --
282 hr_utility.set_location ('raise ndf ',30);
283 RAISE NO_DATA_FOUND;
284 --
285 END IF;
286
287 p_rec := g_cache_pgm_los_el_rec(l_index);
288 --
289 hr_utility.set_location ('Leaving '||l_package,10);
290 --
291 EXCEPTION
292 --
293 WHEN NO_DATA_FOUND THEN
294 --
295 -- The record has not been cached yet so lets cache it
296 --
297 OPEN c1;
298 --
299 FETCH c1 INTO g_cache_pgm_los_el_rec(l_index);
300
301 IF c1%NOTFOUND THEN
302 --
303 -- We store the value of the PK in the id so we know that there is
304 -- no value for this PK.
308 --
305 -- Bug 2853140 This needs to be set only called first time.
306 -- If found once with p_old_val and p_new_val both passed as
307 -- null, we should not reset this to N again.
309 if NOT g_cache_pgm_los_el_rec.EXISTS(l_index) then
310 --
311 g_cache_pgm_los_el_rec(l_index).id := p_pgm_id;
312 g_cache_pgm_los_el_rec(l_index).exist := 'N';
313 --
314 end if;
315 --
316 END IF;
317 --
318 p_rec := g_cache_pgm_los_el_rec(l_index);
319 --
320 CLOSE c1;
321 --
322 END get_los_pgm_elig;
323 --
324 PROCEDURE get_los_pl_elig(
325 p_pl_id IN NUMBER
326 ,p_old_val in number default null
327 ,p_new_val in number default null
328 ,p_business_group_id IN NUMBER
329 ,p_effective_date IN DATE
330 ,p_rec OUT NOCOPY g_cache_los_rec_obj) IS
331 --
332 l_package VARCHAR2(80) := g_package || '.get_los_pl_elig';
333 --
334 -- Define Cursor
335 --
336 CURSOR c1 IS
337 SELECT p_pl_id
338 ,'Y'
339 ,lsf.los_det_cd
340 ,lsf.los_dt_to_use_cd
341 ,lsf.use_overid_svc_dt_flag
342 ,lsf.los_uom
343 ,lsf.los_det_rl
344 ,lsf.los_dt_to_use_rl
345 ,lsf.los_calc_rl
346 ,lsf.rndg_cd
347 ,lsf.rndg_rl
348 ,lsf.mn_los_num
349 ,lsf.mx_los_num
350 FROM ben_los_fctr lsf
351 ,ben_elig_los_prte_f els
352 ,ben_eligy_prfl_f elp
353 ,ben_prtn_elig_prfl_f cep
354 ,ben_prtn_elig_f epa
355 WHERE epa.pl_id = p_pl_id
356 AND p_effective_date BETWEEN epa.effective_start_date
357 AND epa.effective_end_date
358 AND epa.prtn_elig_id = cep.prtn_elig_id
359 AND p_effective_date BETWEEN cep.effective_start_date
360 AND cep.effective_end_date
361 AND cep.eligy_prfl_id = elp.eligy_prfl_id
362 AND p_effective_date BETWEEN elp.effective_start_date
363 AND elp.effective_end_date
364 AND els.eligy_prfl_id = elp.eligy_prfl_id
365 AND p_effective_date BETWEEN els.effective_start_date
366 AND els.effective_end_date
367 AND els.los_fctr_id = lsf.los_fctr_id
368 AND (
369 (
370 p_new_val IS NOT NULL
371 AND p_old_val IS NOT NULL
372 AND p_new_val >= NVL(lsf.mn_los_num ,p_new_val)
373 and p_new_val < decode(nvl(lsf.mx_los_num,p_new_val) ,
374 trunc(nvl(lsf.mx_los_num,p_new_val))
375 ,decode(nvl(lsf.mn_los_num,p_new_val), trunc(nvl(lsf.mn_los_num,p_new_val)),
376 nvl(lsf.mx_los_num,p_new_val)+1,nvl(lsf.mx_los_num,p_new_val)+0.000000001),
377 nvl(lsf.mx_los_num,p_new_val)+0.000000001 )
378 and p_old_val < lsf.mn_los_num -- uncommented this -- bug 3188198
379 )
380 OR
381 (
382 p_new_val IS NOT NULL
383 AND p_old_val IS NOT NULL
384 AND
385 (
386 p_new_val < NVL(lsf.mn_los_num,p_new_val)
387 OR
388 p_new_val >= decode(nvl(lsf.mx_los_num,p_new_val) ,
389 trunc(nvl(lsf.mx_los_num,p_new_val))
390 ,decode(nvl(lsf.mn_los_num,p_new_val), trunc(nvl(lsf.mn_los_num,p_new_val)),
391 nvl(lsf.mx_los_num,p_new_val)+1,nvl(lsf.mx_los_num,p_new_val)+0.000000001),
392 nvl(lsf.mx_los_num,p_new_val)+0.000000001 )
393 )
394 AND p_old_val >= NVL(lsf.mn_los_num ,p_old_val)
395 and p_old_val < decode(nvl(lsf.mx_los_num,p_old_val) ,
396 trunc(nvl(lsf.mx_los_num,p_old_val))
397 ,decode(nvl(lsf.mn_los_num,p_old_val), trunc(nvl(lsf.mn_los_num,p_old_val)),
398 nvl(lsf.mx_los_num,p_old_val)+1,nvl(lsf.mx_los_num,p_old_val)+0.000000001),
399 nvl(lsf.mx_los_num,p_old_val)+0.000000001 )
400 )
401 OR
402 ( p_new_val IS NULL
403 AND p_old_val IS NULL
404 )
405 ) ;
406 --
407 l_index PLS_INTEGER;
408 l_not_hash_found BOOLEAN;
409 --
410 BEGIN
411 --
412 -- hr_utility.set_location ('Entering '||l_package,10);
413 --
414 -- Steps to do process
415 --
416 -- 1) Try and get value from cache
417 -- 2) If can get from cache then copy to output record
418 -- 3) If can't get from cache do db hit and then
419 -- copy to cache record and then copy to output record.
420 --
421 -- Get hashed index value
422 --
423 l_index := MOD(p_pl_id
424 ,g_hash_key);
425 --
426 IF NOT g_cache_pl_los_el_rec.EXISTS(l_index) THEN
427 --
428 -- Lets store the hash value in this index
432 ELSE
429 --
430 RAISE NO_DATA_FOUND;
431 --
433 --
434 -- If it does exist make sure its the right one
435 --
436 IF g_cache_pl_los_el_rec(l_index).id <> p_pl_id THEN
437 --
438 -- Loop through the hash using the jump routine to check further
439 -- indexes
440 --
441 l_not_hash_found := FALSE;
442 --
443 WHILE NOT l_not_hash_found LOOP
444 --
445 l_index := l_index + g_hash_jump;
446 --
447 -- Check if the hash index exists, if not we can use it
448 --
449 IF NOT g_cache_pl_los_el_rec.EXISTS(l_index) THEN
450 --
451 -- Lets store the hash value in the index
452 --
453 RAISE NO_DATA_FOUND;
454 --
455 ELSE
456 --
457 -- Make sure the index is the correct one
458 --
459 IF g_cache_pl_los_el_rec(l_index).id = p_pl_id THEN
460 --
461 -- We have a match so the hashed value has been stored before
462 --
463 l_not_hash_found := TRUE;
464 --
465 END IF;
466 --
467 END IF;
468 --
469 END LOOP;
470 --
471 END IF;
472 --
473 END IF;
474 --
475 IF p_old_val IS NOT NULL
476 AND p_new_val IS NOT NULL THEN
477 --
478 RAISE NO_DATA_FOUND;
479 --
480 END IF;
481 p_rec := g_cache_pl_los_el_rec(l_index);
482 --
483 -- hr_utility.set_location ('Leaving '||l_package,10);
484 --
485 EXCEPTION
486 --
487 WHEN NO_DATA_FOUND THEN
488 --
489 -- The record has not been cached yet so lets cache it
490 --
491 OPEN c1;
492 --
493 FETCH c1 INTO g_cache_pl_los_el_rec(l_index);
494 IF c1%NOTFOUND THEN
495 --
496 -- Bug 2853140 This needs to be set only called first time.
497 -- If found once with p_old_val and p_new_val both passed as
498 -- null, we should not reset this to N again.
499 if NOT g_cache_pl_los_el_rec.EXISTS(l_index) then
500 --
501 g_cache_pl_los_el_rec(l_index).id := p_pl_id;
502 g_cache_pl_los_el_rec(l_index).exist := 'N';
503 --
504 end if ;
505 --
506 END IF;
507 --
508 p_rec := g_cache_pl_los_el_rec(l_index);
509 --
510 CLOSE c1;
511 --
512 END get_los_pl_elig;
513 --
514 PROCEDURE get_los_oipl_elig(
515 p_oipl_id IN NUMBER
516 ,p_old_val in number default null
517 ,p_new_val in number default null
518 ,p_business_group_id IN NUMBER
519 ,p_effective_date IN DATE
520 ,p_rec OUT NOCOPY g_cache_los_rec_obj) IS
521 --
522 l_package VARCHAR2(80) := g_package || '.get_los_oipl_elig';
523 --
524 -- Define Cursor
525 --
526 CURSOR c1 IS
527 SELECT p_oipl_id
528 ,'Y'
529 ,lsf.los_det_cd
530 ,lsf.los_dt_to_use_cd
531 ,lsf.use_overid_svc_dt_flag
532 ,lsf.los_uom
533 ,lsf.los_det_rl
534 ,lsf.los_dt_to_use_rl
535 ,lsf.los_calc_rl
536 ,lsf.rndg_cd
537 ,lsf.rndg_rl
538 ,lsf.mn_los_num
539 ,lsf.mx_los_num
540 FROM ben_los_fctr lsf
541 ,ben_elig_los_prte_f els
542 ,ben_eligy_prfl_f elp
543 ,ben_prtn_elig_prfl_f cep
544 ,ben_prtn_elig_f epa
545 WHERE epa.oipl_id = p_oipl_id
546 AND p_effective_date BETWEEN epa.effective_start_date
547 AND epa.effective_end_date
548 AND epa.prtn_elig_id = cep.prtn_elig_id
549 AND p_effective_date BETWEEN cep.effective_start_date
550 AND cep.effective_end_date
551 AND cep.eligy_prfl_id = elp.eligy_prfl_id
552 AND p_effective_date BETWEEN elp.effective_start_date
553 AND elp.effective_end_date
554 AND els.eligy_prfl_id = elp.eligy_prfl_id
555 AND p_effective_date BETWEEN els.effective_start_date
556 AND els.effective_end_date
557 AND els.los_fctr_id = lsf.los_fctr_id
558 AND (
559 (
560 p_new_val IS NOT NULL
561 AND p_old_val IS NOT NULL
562 AND p_new_val >= NVL(lsf.mn_los_num ,p_new_val)
563 and p_new_val < decode(nvl(lsf.mx_los_num,p_new_val) ,
564 trunc(nvl(lsf.mx_los_num,p_new_val))
565 ,decode(nvl(lsf.mn_los_num,p_new_val), trunc(nvl(lsf.mn_los_num,p_new_val)),
566 nvl(lsf.mx_los_num,p_new_val)+1,nvl(lsf.mx_los_num,p_new_val)+0.000000001),
567 nvl(lsf.mx_los_num,p_new_val)+0.000000001 )
568 and p_old_val < lsf.mn_los_num -- uncommented this -- bug 3188198
569 )
570 OR
571 (
572 p_new_val IS NOT NULL
576 p_new_val < NVL(lsf.mn_los_num,p_new_val)
573 AND p_old_val IS NOT NULL
574 AND
575 (
577 OR
578 p_new_val >= decode(nvl(lsf.mx_los_num,p_new_val) ,
579 trunc(nvl(lsf.mx_los_num,p_new_val))
580 ,decode(nvl(lsf.mn_los_num,p_new_val), trunc(nvl(lsf.mn_los_num,p_new_val)),
581 nvl(lsf.mx_los_num,p_new_val)+1,nvl(lsf.mx_los_num,p_new_val)+0.000000001),
582 nvl(lsf.mx_los_num,p_new_val)+0.000000001 )
583 )
584 AND p_old_val >= NVL(lsf.mn_los_num ,p_old_val)
585 and p_old_val < decode(nvl(lsf.mx_los_num,p_old_val) ,
586 trunc(nvl(lsf.mx_los_num,p_old_val))
587 ,decode(nvl(lsf.mn_los_num,p_old_val), trunc(nvl(lsf.mn_los_num,p_old_val)),
588 nvl(lsf.mx_los_num,p_old_val)+1,nvl(lsf.mx_los_num,p_old_val)+0.000000001),
589 nvl(lsf.mx_los_num,p_old_val)+0.000000001 )
590 )
591 OR
592 ( p_new_val IS NULL
593 AND p_old_val IS NULL
594 )
595 ) ;
596 --
597 l_index PLS_INTEGER;
598 l_not_hash_found BOOLEAN;
599 --
600 BEGIN
601 --
602 -- hr_utility.set_location ('Entering '||l_package,10);
603 --
604 -- Steps to do process
605 --
606 -- 1) Try and get value from cache
607 -- 2) If can get from cache then copy to output record
608 -- 3) If can't get from cache do db hit and then
609 -- copy to cache record and then copy to output record.
610 --
611 -- Get hashed index value
612 --
613 l_index := MOD(p_oipl_id
614 ,g_hash_key);
615 --
616 IF NOT g_cache_oipl_los_el_rec.EXISTS(l_index) THEN
617 --
618 -- Lets store the hash value in this index
619 --
620 RAISE NO_DATA_FOUND;
621 --
622 ELSE
623 --
624 -- If it does exist make sure its the right one
625 --
626 IF g_cache_oipl_los_el_rec(l_index).id <> p_oipl_id THEN
627 --
628 -- Loop through the hash using the jump routine to check further
629 -- indexes
630 --
631 l_not_hash_found := FALSE;
632 --
633 WHILE NOT l_not_hash_found LOOP
634 --
635 l_index := l_index + g_hash_jump;
636 --
637 -- Check if the hash index exists, if not we can use it
638 --
639 IF NOT g_cache_oipl_los_el_rec.EXISTS(l_index) THEN
640 --
641 -- Lets store the hash value in the index
642 --
643 RAISE NO_DATA_FOUND;
644 --
645 ELSE
646 --
647 -- Make sure the index is the correct one
648 --
649 IF g_cache_oipl_los_el_rec(l_index).id = p_oipl_id THEN
650 --
651 -- We have a match so the hashed value has been stored before
652 --
653 l_not_hash_found := TRUE;
654 --
655 END IF;
656 --
657 END IF;
658 --
659 END LOOP;
660 --
661 END IF;
662 --
663 END IF;
664 --
665 IF p_old_val IS NOT NULL
666 AND p_new_val IS NOT NULL THEN
667 --
668 RAISE NO_DATA_FOUND;
669 --
670 END IF;
671
672 p_rec := g_cache_oipl_los_el_rec(l_index);
673 --
674 -- hr_utility.set_location ('Leaving '||l_package,10);
675 --
676 EXCEPTION
677 --
678 WHEN NO_DATA_FOUND THEN
679 --
680 -- The record has not been cached yet so lets cache it
681 --
682 OPEN c1;
683 --
684 FETCH c1 INTO g_cache_oipl_los_el_rec(l_index);
685 IF c1%NOTFOUND THEN
686 --
687 -- We store the value of the PK in the id so we know that there is
688 -- no value for this PK.
689 --
690 -- Bug 2853140 This needs to be set only called first time.
691 -- If found once with p_old_val and p_new_val both passed as
692 -- null, we should not reset this to N again.
693 if NOT g_cache_oipl_los_el_rec.EXISTS(l_index) then
694 --
695 g_cache_oipl_los_el_rec(l_index).id := p_oipl_id;
696 g_cache_oipl_los_el_rec(l_index).exist := 'N';
697 --
698 end if;
699 --
700 END IF;
701 --
702 p_rec := g_cache_oipl_los_el_rec(l_index);
703 --
704 CLOSE c1;
705 --
706 END get_los_oipl_elig;
707 --
708 PROCEDURE get_los_plip_elig(
709 p_plip_id IN NUMBER
710 ,p_old_val in number default null
711 ,p_new_val in number default null
712 ,p_business_group_id IN NUMBER
713 ,p_effective_date IN DATE
714 ,p_rec OUT NOCOPY g_cache_los_rec_obj) IS
715 --
719 --
716 l_package VARCHAR2(80) := g_package || '.get_los_plip_elig';
717 --
718 -- Define Cursor
720 CURSOR c1 IS
721 SELECT p_plip_id
722 ,'Y'
723 ,lsf.los_det_cd
724 ,lsf.los_dt_to_use_cd
725 ,lsf.use_overid_svc_dt_flag
726 ,lsf.los_uom
727 ,lsf.los_det_rl
728 ,lsf.los_dt_to_use_rl
729 ,lsf.los_calc_rl
730 ,lsf.rndg_cd
731 ,lsf.rndg_rl
732 ,lsf.mn_los_num
733 ,lsf.mx_los_num
734 FROM ben_los_fctr lsf
735 ,ben_elig_los_prte_f els
736 ,ben_eligy_prfl_f elp
737 ,ben_prtn_elig_prfl_f cep
738 ,ben_prtn_elig_f epa
739 WHERE epa.plip_id = p_plip_id
740 AND p_effective_date BETWEEN epa.effective_start_date
741 AND epa.effective_end_date
742 AND epa.prtn_elig_id = cep.prtn_elig_id
743 AND p_effective_date BETWEEN cep.effective_start_date
744 AND cep.effective_end_date
745 AND cep.eligy_prfl_id = elp.eligy_prfl_id
746 AND p_effective_date BETWEEN elp.effective_start_date
747 AND elp.effective_end_date
748 AND els.eligy_prfl_id = elp.eligy_prfl_id
749 AND p_effective_date BETWEEN els.effective_start_date
750 AND els.effective_end_date
751 AND els.los_fctr_id = lsf.los_fctr_id
752 AND (
753 (
754 p_new_val IS NOT NULL
755 AND p_old_val IS NOT NULL
756 AND p_new_val >= NVL(lsf.mn_los_num ,p_new_val)
757 and p_new_val < decode(nvl(lsf.mx_los_num,p_new_val) ,
758 trunc(nvl(lsf.mx_los_num,p_new_val))
759 ,decode(nvl(lsf.mn_los_num,p_new_val), trunc(nvl(lsf.mn_los_num,p_new_val)),
760 nvl(lsf.mx_los_num,p_new_val)+1,nvl(lsf.mx_los_num,p_new_val)+0.000000001),
761 nvl(lsf.mx_los_num,p_new_val)+0.000000001 )
762 and p_old_val < lsf.mn_los_num -- uncommented this -- bug 3188198
763 )
764 OR
765 (
766 p_new_val IS NOT NULL
767 AND p_old_val IS NOT NULL
768 AND
769 (
770 p_new_val < NVL(lsf.mn_los_num,p_new_val)
771 OR
772 p_new_val >= decode(nvl(lsf.mx_los_num,p_new_val) ,
773 trunc(nvl(lsf.mx_los_num,p_new_val))
774 ,decode(nvl(lsf.mn_los_num,p_new_val), trunc(nvl(lsf.mn_los_num,p_new_val)),
775 nvl(lsf.mx_los_num,p_new_val)+1,nvl(lsf.mx_los_num,p_new_val)+0.000000001),
776 nvl(lsf.mx_los_num,p_new_val)+0.000000001 )
777 )
778 AND p_old_val >= NVL(lsf.mn_los_num ,p_old_val)
779 and p_old_val < decode(nvl(lsf.mx_los_num,p_old_val) ,
780 trunc(nvl(lsf.mx_los_num,p_old_val))
781 ,decode(nvl(lsf.mn_los_num,p_old_val), trunc(nvl(lsf.mn_los_num,p_old_val)),
782 nvl(lsf.mx_los_num,p_old_val)+1,nvl(lsf.mx_los_num,p_old_val)+0.000000001),
783 nvl(lsf.mx_los_num,p_old_val)+0.000000001 )
784 )
785 OR
786 ( p_new_val IS NULL
787 AND p_old_val IS NULL
788 )
789 );
790
791 --
792 l_index PLS_INTEGER;
793 l_not_hash_found BOOLEAN;
794 --
795 BEGIN
796 --
797 -- hr_utility.set_location ('Entering '||l_package,10);
798 --
799 -- Steps to do process
800 --
801 -- 1) Try and get value from cache
802 -- 2) If can get from cache then copy to output record
803 -- 3) If can't get from cache do db hit and then
804 -- copy to cache record and then copy to output record.
805 --
806 -- Get hashed index value
807 --
808 l_index := MOD(p_plip_id
809 ,g_hash_key);
810 --
811 IF NOT g_cache_plip_los_el_rec.EXISTS(l_index) THEN
812 --
813 -- Lets store the hash value in this index
814 --
815 RAISE NO_DATA_FOUND;
816 --
817 ELSE
818 --
819 -- If it does exist make sure its the right one
820 --
821 IF g_cache_plip_los_el_rec(l_index).id <> p_plip_id THEN
822 --
823 -- Loop through the hash using the jump routine to check further
824 -- indexes
825 --
826 l_not_hash_found := FALSE;
827 --
828 WHILE NOT l_not_hash_found LOOP
829 --
830 l_index := l_index + g_hash_jump;
831 --
832 -- Check if the hash index exists, if not we can use it
833 --
834 IF NOT g_cache_plip_los_el_rec.EXISTS(l_index) THEN
835 --
836 -- Lets store the hash value in the index
837 --
838 RAISE NO_DATA_FOUND;
839 --
840 ELSE
841 --
842 -- Make sure the index is the correct one
843 --
847 --
844 IF g_cache_plip_los_el_rec(l_index).id = p_plip_id THEN
845 --
846 -- We have a match so the hashed value has been stored before
848 l_not_hash_found := TRUE;
849 --
850 END IF;
851 --
852 END IF;
853 --
854 END LOOP;
855 --
856 END IF;
857 --
858 END IF;
859 --
860 IF p_old_val IS NOT NULL
861 AND p_new_val IS NOT NULL THEN
862 --
863 RAISE NO_DATA_FOUND;
864 --
865 END IF;
866 p_rec := g_cache_plip_los_el_rec(l_index);
867 --
868 -- hr_utility.set_location ('Leaving '||l_package,10);
869 --
870 EXCEPTION
871 --
872 WHEN NO_DATA_FOUND THEN
873 --
874 -- The record has not been cached yet so lets cache it
875 --
876 OPEN c1;
877 --
878 FETCH c1 INTO g_cache_plip_los_el_rec(l_index);
879 IF c1%NOTFOUND THEN
880 --
881 -- Bug 2853140 This needs to be set only called first time.
882 -- If found once with p_old_val and p_new_val both passed as
883 -- null, we should not reset this to N again.
884 if NOT g_cache_plip_los_el_rec.EXISTS(l_index) then
885 g_cache_plip_los_el_rec(l_index).id := p_plip_id;
886 g_cache_plip_los_el_rec(l_index).exist := 'N';
887 end if;
888 --
889 END IF;
890 --
891 p_rec := g_cache_plip_los_el_rec(l_index);
892 --
893 CLOSE c1;
894 --
895 END get_los_plip_elig;
896 --
897 PROCEDURE get_los_ptip_elig(
898 p_ptip_id IN NUMBER
899 ,p_old_val in number default null
900 ,p_new_val in number default null
901 ,p_business_group_id IN NUMBER
902 ,p_effective_date IN DATE
903 ,p_rec OUT NOCOPY g_cache_los_rec_obj) IS
904 --
905 l_package VARCHAR2(80) := g_package || '.get_los_ptip_elig';
906 --
907 -- Define Cursor
908 --
909 CURSOR c1 IS
910 SELECT p_ptip_id
911 ,'Y'
912 ,lsf.los_det_cd
913 ,lsf.los_dt_to_use_cd
914 ,lsf.use_overid_svc_dt_flag
915 ,lsf.los_uom
916 ,lsf.los_det_rl
917 ,lsf.los_dt_to_use_rl
918 ,lsf.los_calc_rl
919 ,lsf.rndg_cd
920 ,lsf.rndg_rl
921 ,lsf.mn_los_num
922 ,lsf.mx_los_num
923 FROM ben_los_fctr lsf
924 ,ben_elig_los_prte_f els
925 ,ben_eligy_prfl_f elp
926 ,ben_prtn_elig_prfl_f cep
927 ,ben_prtn_elig_f epa
928 WHERE epa.ptip_id = p_ptip_id
929 AND p_effective_date BETWEEN epa.effective_start_date
930 AND epa.effective_end_date
931 AND epa.prtn_elig_id = cep.prtn_elig_id
932 AND p_effective_date BETWEEN cep.effective_start_date
933 AND cep.effective_end_date
934 AND cep.eligy_prfl_id = elp.eligy_prfl_id
935 AND p_effective_date BETWEEN elp.effective_start_date
936 AND elp.effective_end_date
937 AND els.eligy_prfl_id = elp.eligy_prfl_id
938 AND p_effective_date BETWEEN els.effective_start_date
939 AND els.effective_end_date
940 AND els.los_fctr_id = lsf.los_fctr_id
941 AND (
942 (
943 p_new_val IS NOT NULL
944 AND p_old_val IS NOT NULL
945 AND p_new_val >= NVL(lsf.mn_los_num ,p_new_val)
946 and p_new_val < decode(nvl(lsf.mx_los_num,p_new_val) ,
947 trunc(nvl(lsf.mx_los_num,p_new_val))
948 ,decode(nvl(lsf.mn_los_num,p_new_val), trunc(nvl(lsf.mn_los_num,p_new_val)),
949 nvl(lsf.mx_los_num,p_new_val)+1,nvl(lsf.mx_los_num,p_new_val)+0.000000001),
950 nvl(lsf.mx_los_num,p_new_val)+0.000000001 )
951 and p_old_val < lsf.mn_los_num -- uncommented this -- bug 3188198
952 )
953 OR
954 (
955 p_new_val IS NOT NULL
956 AND p_old_val IS NOT NULL
957 AND
958 (
959 p_new_val < NVL(lsf.mn_los_num,p_new_val)
960 OR
961 p_new_val >= decode(nvl(lsf.mx_los_num,p_new_val) ,
962 trunc(nvl(lsf.mx_los_num,p_new_val))
963 ,decode(nvl(lsf.mn_los_num,p_new_val), trunc(nvl(lsf.mn_los_num,p_new_val)),
964 nvl(lsf.mx_los_num,p_new_val)+1,nvl(lsf.mx_los_num,p_new_val)+0.000000001),
965 nvl(lsf.mx_los_num,p_new_val)+0.000000001 )
966 )
967 AND p_old_val >= NVL(lsf.mn_los_num ,p_old_val)
968 and p_old_val < decode(nvl(lsf.mx_los_num,p_old_val) ,
969 trunc(nvl(lsf.mx_los_num,p_old_val))
970 ,decode(nvl(lsf.mn_los_num,p_old_val), trunc(nvl(lsf.mn_los_num,p_old_val)),
974 OR
971 nvl(lsf.mx_los_num,p_old_val)+1,nvl(lsf.mx_los_num,p_old_val)+0.000000001),
972 nvl(lsf.mx_los_num,p_old_val)+0.000000001 )
973 )
975 ( p_new_val IS NULL
976 AND p_old_val IS NULL
977 )
978 );
979
980 --
981 l_index PLS_INTEGER;
982 l_not_hash_found BOOLEAN;
983 --
984 BEGIN
985 --
986 -- hr_utility.set_location ('Entering '||l_package,10);
987 --
988 -- Steps to do process
989 --
990 -- 1) Try and get value from cache
991 -- 2) If can get from cache then copy to output record
992 -- 3) If can't get from cache do db hit and then
993 -- copy to cache record and then copy to output record.
994 --
995 -- Get hashed index value
996 --
997 l_index := MOD(p_ptip_id
998 ,g_hash_key);
999 --
1000 IF NOT g_cache_ptip_los_el_rec.EXISTS(l_index) THEN
1001 --
1002 -- Lets store the hash value in this index
1003 --
1004 RAISE NO_DATA_FOUND;
1005 --
1006 ELSE
1007 --
1008 -- If it does exist make sure its the right one
1009 --
1010 IF g_cache_ptip_los_el_rec(l_index).id <> p_ptip_id THEN
1011 --
1012 -- Loop through the hash using the jump routine to check further
1013 -- indexes
1014 --
1015 l_not_hash_found := FALSE;
1016 --
1017 WHILE NOT l_not_hash_found LOOP
1018 --
1019 l_index := l_index + g_hash_jump;
1020 --
1021 -- Check if the hash index exists, if not we can use it
1022 --
1023 IF NOT g_cache_ptip_los_el_rec.EXISTS(l_index) THEN
1024 --
1025 -- Lets store the hash value in the index
1026 --
1027 RAISE NO_DATA_FOUND;
1028 --
1029 ELSE
1030 --
1031 -- Make sure the index is the correct one
1032 --
1033 IF g_cache_ptip_los_el_rec(l_index).id = p_ptip_id THEN
1034 --
1035 -- We have a match so the hashed value has been stored before
1036 --
1037 l_not_hash_found := TRUE;
1038 --
1039 END IF;
1040 --
1041 END IF;
1042 --
1043 END LOOP;
1044 --
1045 END IF;
1046 --
1047 END IF;
1048 --
1049 IF p_old_val IS NOT NULL
1050 AND p_new_val IS NOT NULL THEN
1051 --
1052 RAISE NO_DATA_FOUND;
1053 --
1054 END IF;
1055 p_rec := g_cache_ptip_los_el_rec(l_index);
1056 --
1057 -- hr_utility.set_location ('Leaving '||l_package,10);
1058 --
1059 EXCEPTION
1060 --
1061 WHEN NO_DATA_FOUND THEN
1062 --
1063 -- The record has not been cached yet so lets cache it
1064 --
1065 OPEN c1;
1066 --
1067 FETCH c1 INTO g_cache_ptip_los_el_rec(l_index);
1068 IF c1%NOTFOUND THEN
1069 --
1070 -- Bug 2853140 This needs to be set only called first time.
1071 -- If found once with p_old_val and p_new_val both passed as
1072 -- null, we should not reset this to N again.
1073 if NOT g_cache_ptip_los_el_rec.EXISTS(l_index) then
1074 g_cache_ptip_los_el_rec(l_index).id := p_ptip_id;
1075 g_cache_ptip_los_el_rec(l_index).exist := 'N';
1076 end if;
1077 --
1078 END IF;
1079 --
1080 p_rec := g_cache_ptip_los_el_rec(l_index);
1081 --
1082 CLOSE c1;
1083 --
1084 END get_los_ptip_elig;
1085 --
1086 PROCEDURE get_los_elig(
1087 p_pgm_id IN NUMBER
1088 ,p_pl_id IN NUMBER
1089 ,p_oipl_id IN NUMBER
1090 ,p_plip_id IN NUMBER
1091 ,p_ptip_id IN NUMBER
1092 ,p_old_val in number
1093 ,p_new_val in number
1094 ,p_business_group_id IN NUMBER
1095 ,p_effective_date IN DATE
1096 ,p_rec OUT NOCOPY g_cache_los_rec_obj) IS
1097 --
1098 l_package VARCHAR2(80) := g_package || '.get_los_elig';
1099 --
1100 BEGIN
1101 --
1102 -- hr_utility.set_location ('Entering '||l_package,10);
1103 --
1104 -- Derive which data type we are dealing with
1105 --
1106 IF p_pgm_id IS NOT NULL THEN
1107 --
1108 get_los_pgm_elig(p_pgm_id=> p_pgm_id
1109 ,p_old_val => p_old_val
1110 ,p_new_val => p_new_val
1111 ,p_business_group_id => p_business_group_id
1112 ,p_effective_date => p_effective_date
1113 ,p_rec => p_rec);
1114 --
1115 ELSIF p_pl_id IS NOT NULL THEN
1116 --
1117 get_los_pl_elig(p_pl_id=> p_pl_id
1118 ,p_old_val => p_old_val
1119 ,p_new_val => p_new_val
1120 ,p_business_group_id => p_business_group_id
1121 ,p_effective_date => p_effective_date
1125 --
1122 ,p_rec => p_rec);
1123 --
1124 ELSIF p_oipl_id IS NOT NULL THEN
1126 get_los_oipl_elig(p_oipl_id=> p_oipl_id
1127 ,p_old_val => p_old_val
1128 ,p_new_val => p_new_val
1129 ,p_business_group_id => p_business_group_id
1130 ,p_effective_date => p_effective_date
1131 ,p_rec => p_rec);
1132 --
1133 ELSIF p_plip_id IS NOT NULL THEN
1134 --
1135 get_los_plip_elig(p_plip_id=> p_plip_id
1136 ,p_old_val => p_old_val
1137 ,p_new_val => p_new_val
1138 ,p_business_group_id => p_business_group_id
1139 ,p_effective_date => p_effective_date
1140 ,p_rec => p_rec);
1141 --
1142 ELSIF p_ptip_id IS NOT NULL THEN
1143 --
1144 get_los_ptip_elig(p_ptip_id=> p_ptip_id
1145 ,p_old_val => p_old_val
1146 ,p_new_val => p_new_val
1147 ,p_business_group_id => p_business_group_id
1148 ,p_effective_date => p_effective_date
1149 ,p_rec => p_rec);
1150 --
1151 END IF;
1152 --
1153 -- hr_utility.set_location ('Leaving '||l_package,10);
1154 --
1155 END get_los_elig;
1156 --
1157 PROCEDURE get_los_stated(
1158 p_los_fctr_id IN NUMBER
1159 ,p_business_group_id IN NUMBER
1160 ,p_rec OUT NOCOPY g_cache_los_rec_obj) IS
1161 --
1162 l_package VARCHAR2(80) := g_package || '.get_los_stated';
1163 --
1164 CURSOR c1 IS
1165 SELECT p_los_fctr_id
1166 ,'Y'
1167 ,lsf.los_det_cd
1168 ,lsf.los_dt_to_use_cd
1169 ,lsf.use_overid_svc_dt_flag
1170 ,lsf.los_uom
1171 ,lsf.los_det_rl
1172 ,lsf.los_dt_to_use_rl
1173 ,lsf.los_calc_rl
1174 ,lsf.rndg_cd
1175 ,lsf.rndg_rl
1176 ,lsf.mn_los_num
1177 ,lsf.mx_los_num
1178 FROM ben_los_fctr lsf
1179 WHERE lsf.los_fctr_id = p_los_fctr_id;
1180 --
1181 l_index PLS_INTEGER;
1182 l_not_hash_found BOOLEAN;
1183 --
1184 BEGIN
1185 --
1186 -- hr_utility.set_location ('Entering '||l_package,10);
1187 --
1188 -- Steps to do process
1189 --
1190 -- 1) Try and get value from cache
1191 -- 2) If can get from cache then copy to output record
1192 -- 3) If can't get from cache do db hit and then
1193 -- copy to cache record and then copy to output record.
1194 --
1195 -- Get hashed index value
1196 --
1197 l_index := MOD(p_los_fctr_id
1198 ,g_hash_key);
1199 --
1200 IF NOT g_cache_stated_los_rec.EXISTS(l_index) THEN
1201 --
1202 -- Lets store the hash value in this index
1203 --
1204 RAISE NO_DATA_FOUND;
1205 --
1206 ELSE
1207 --
1208 -- If it does exist make sure its the right one
1209 --
1210 IF g_cache_stated_los_rec(l_index).id <> p_los_fctr_id THEN
1211 --
1212 -- Loop through the hash using the jump routine to check further
1213 -- indexes
1214 --
1215 l_not_hash_found := FALSE;
1216 --
1217 WHILE NOT l_not_hash_found LOOP
1218 --
1219 l_index := l_index + g_hash_jump;
1220 --
1221 -- Check if the hash index exists, if not we can use it
1222 --
1223 IF NOT g_cache_stated_los_rec.EXISTS(l_index) THEN
1224 --
1225 -- Lets store the hash value in the index
1226 --
1227 RAISE NO_DATA_FOUND;
1228 --
1229 ELSE
1230 --
1231 -- Make sure the index is the correct one
1232 --
1233 IF g_cache_stated_los_rec(l_index).id = p_los_fctr_id THEN
1234 --
1235 -- We have a match so the hashed value has been stored before
1236 --
1237 l_not_hash_found := TRUE;
1238 --
1239 END IF;
1240 --
1241 END IF;
1242 --
1243 END LOOP;
1244 --
1245 END IF;
1246 --
1247 END IF;
1248 --
1249 p_rec := g_cache_stated_los_rec(l_index);
1250 --
1251 -- hr_utility.set_location ('Leaving '||l_package,10);
1252 --
1253 EXCEPTION
1254 --
1255 WHEN NO_DATA_FOUND THEN
1256 --
1257 -- The record has not been cached yet so lets cache it
1258 --
1259 OPEN c1;
1260 --
1261 FETCH c1 INTO g_cache_stated_los_rec(l_index);
1262 IF c1%NOTFOUND THEN
1263 --
1264 if NOT g_cache_stated_los_rec.EXISTS(l_index) then
1265 g_cache_stated_los_rec(l_index).id := p_los_fctr_id;
1266 g_cache_stated_los_rec(l_index).exist := 'N';
1267 end if;
1268 --
1269 END IF;
1270 --
1271 p_rec := g_cache_stated_los_rec(l_index);
1272 --
1273 CLOSE c1;
1274 --
1275 END get_los_stated;
1276 --
1277 PROCEDURE get_los_pgm_rate(
1278 p_pgm_id IN NUMBER
1282 ,p_effective_date IN DATE
1279 ,p_old_val IN NUMBER DEFAULT NULL
1280 ,p_new_val IN NUMBER DEFAULT NULL
1281 ,p_business_group_id IN NUMBER
1283 ,p_rec OUT NOCOPY g_cache_los_rec_obj) IS
1284 --
1285 l_package VARCHAR2(80) := g_package || '.get_los_pgm_rate';
1286 --
1287 l_old_val_1 NUMBER := p_old_val + 1;
1288 l_new_val_1 NUMBER := p_new_val + 1;
1289 --
1290 -- Define Cursor
1291 --
1292 CURSOR c1 IS
1293 SELECT p_pgm_id
1294 ,'Y'
1295 ,lsf.los_det_cd
1296 ,lsf.los_dt_to_use_cd
1297 ,lsf.use_overid_svc_dt_flag
1298 ,lsf.los_uom
1299 ,lsf.los_det_rl
1300 ,lsf.los_dt_to_use_rl
1301 ,lsf.los_calc_rl
1302 ,lsf.rndg_cd
1303 ,lsf.rndg_rl
1304 ,lsf.mn_los_num
1305 ,lsf.mx_los_num
1306 FROM ben_los_fctr lsf
1307 ,ben_los_rt_f lsr
1308 ,ben_vrbl_rt_prfl_f vpf
1309 ,ben_acty_vrbl_rt_f avr
1310 ,ben_acty_base_rt_f abr
1311 WHERE abr.pgm_id = p_pgm_id
1312 AND p_effective_date BETWEEN abr.effective_start_date
1313 AND abr.effective_end_date
1314 AND abr.acty_base_rt_id = avr.acty_base_rt_id
1315 AND p_effective_date BETWEEN avr.effective_start_date
1316 AND avr.effective_end_date
1317 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
1318 AND p_effective_date BETWEEN vpf.effective_start_date
1319 AND vpf.effective_end_date
1320 AND vpf.vrbl_rt_prfl_id = lsr.vrbl_rt_prfl_id
1321 AND p_effective_date BETWEEN lsr.effective_start_date
1322 AND lsr.effective_end_date
1323 AND lsr.los_fctr_id = lsf.los_fctr_id
1324 AND (
1325 (
1326 p_new_val IS NOT NULL
1327 AND p_old_val IS NOT NULL
1328 AND p_new_val >= NVL(lsf.mn_los_num
1329 ,p_new_val)
1330 -- AND p_new_val < ceil( NVL(lsf.mx_los_num ,p_new_val) + 0.001)
1331 and p_new_val < decode(nvl(lsf.mx_los_num,p_new_val) ,
1332 trunc(nvl(lsf.mx_los_num,p_new_val))
1333 ,decode(nvl(lsf.mn_los_num,p_new_val), trunc(nvl(lsf.mn_los_num,p_new_val)),
1334 nvl(lsf.mx_los_num,p_new_val)+1,nvl(lsf.mx_los_num,p_new_val)+0.000000001),
1335 nvl(lsf.mx_los_num,p_new_val)+0.000000001 ) )
1336 OR (
1337 p_new_val IS NOT NULL
1338 AND p_old_val IS NOT NULL
1339 AND (
1340 p_new_val < NVL(lsf.mn_los_num
1341 ,p_new_val)
1342 -- OR p_new_val >= ceil( NVL(lsf.mx_los_num
1343 -- ,p_new_val )) + 0.001 )
1344 OR p_new_val >= decode(nvl(lsf.mx_los_num,p_new_val) ,
1345 trunc(nvl(lsf.mx_los_num,p_new_val))
1346 ,decode(nvl(lsf.mn_los_num,p_new_val), trunc(nvl(lsf.mn_los_num,p_new_val)),
1347 nvl(lsf.mx_los_num,p_new_val)+1,nvl(lsf.mx_los_num,p_new_val)+0.000000001),
1348 nvl(lsf.mx_los_num,p_new_val)+0.000000001 ) )
1349 AND p_old_val >= NVL(lsf.mn_los_num
1350 ,p_old_val)
1351 -- AND p_old_val < ceil( NVL(lsf.mx_los_num
1352 -- ,p_old_val)) + 0.001 )
1353 and p_old_val < decode(nvl(lsf.mx_los_num,p_old_val) ,
1354 trunc(nvl(lsf.mx_los_num,p_old_val))
1355 ,decode(nvl(lsf.mn_los_num,p_old_val), trunc(nvl(lsf.mn_los_num,p_old_val)),
1356 nvl(lsf.mx_los_num,p_old_val)+1,nvl(lsf.mx_los_num,p_old_val)+0.000000001),
1357 nvl(lsf.mx_los_num,p_old_val)+0.000000001 ) )
1358 OR ( p_new_val IS NULL
1359 AND p_old_val IS NULL));
1360 /* UNION ALL PERFNEW - Following part should become the cursor c2 */
1361 CURSOR c2 IS
1362 SELECT p_pgm_id
1363 ,'Y'
1364 ,lsf.los_det_cd
1365 ,lsf.los_dt_to_use_cd
1366 ,lsf.use_overid_svc_dt_flag
1367 ,lsf.los_uom
1368 ,lsf.los_det_rl
1369 ,lsf.los_dt_to_use_rl
1370 ,lsf.los_calc_rl
1374 ,lsf.mx_los_num
1371 ,lsf.rndg_cd
1372 ,lsf.rndg_rl
1373 ,lsf.mn_los_num
1375 FROM ben_los_fctr lsf
1376 --NEW
1377 --,ben_los_rt_f lsr
1378 ,ben_elig_los_prte_f els
1379 ,ben_eligy_prfl_f elp
1380 ,ben_vrbl_rt_elig_prfl_f vep
1381 --NEW
1382 ,ben_vrbl_rt_prfl_f vpf
1383 ,ben_acty_vrbl_rt_f avr
1384 ,ben_acty_base_rt_f abr
1385 WHERE abr.pgm_id = p_pgm_id
1386 AND p_effective_date BETWEEN abr.effective_start_date
1387 AND abr.effective_end_date
1388 AND abr.acty_base_rt_id = avr.acty_base_rt_id
1389 AND p_effective_date BETWEEN avr.effective_start_date
1390 AND avr.effective_end_date
1391 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
1392 AND p_effective_date BETWEEN vpf.effective_start_date
1393 AND vpf.effective_end_date
1394 AND vpf.vrbl_rt_prfl_id = vep.vrbl_rt_prfl_id
1395 AND p_effective_date BETWEEN vep.effective_start_date
1396 AND vep.effective_end_date
1397 AND vep.eligy_prfl_id = elp.eligy_prfl_id
1398 AND p_effective_date BETWEEN elp.effective_start_date
1399 AND elp.effective_end_date
1400 AND els.eligy_prfl_id = elp.eligy_prfl_id
1401 AND p_effective_date BETWEEN els.effective_start_date
1402 AND els.effective_end_date
1403 AND els.los_fctr_id = lsf.los_fctr_id
1404 AND (
1405 (
1406 p_new_val IS NOT NULL
1407 AND p_old_val IS NOT NULL
1408 AND p_new_val >= NVL(lsf.mn_los_num
1409 ,p_new_val)
1410 -- AND p_new_val < ceil( NVL(lsf.mx_los_num ,p_new_val) + 0.001)
1411 and p_new_val < decode(nvl(lsf.mx_los_num,p_new_val) ,
1412 trunc(nvl(lsf.mx_los_num,p_new_val))
1413 ,decode(nvl(lsf.mn_los_num,p_new_val), trunc(nvl(lsf.mn_los_num,p_new_val)),
1414 nvl(lsf.mx_los_num,p_new_val)+1,nvl(lsf.mx_los_num,p_new_val)+0.000000001),
1415 nvl(lsf.mx_los_num,p_new_val)+0.000000001 ) )
1416 OR (
1417 p_new_val IS NOT NULL
1418 AND p_old_val IS NOT NULL
1419 AND (
1420 p_new_val < NVL(lsf.mn_los_num
1421 ,p_new_val)
1422 -- OR p_new_val >= ceil( NVL(lsf.mx_los_num
1423 -- ,p_new_val )) + 0.001 )
1424 OR p_new_val >= decode(nvl(lsf.mx_los_num,p_new_val) ,
1425 trunc(nvl(lsf.mx_los_num,p_new_val))
1426 ,decode(nvl(lsf.mn_los_num,p_new_val), trunc(nvl(lsf.mn_los_num,p_new_val)),
1427 nvl(lsf.mx_los_num,p_new_val)+1,nvl(lsf.mx_los_num,p_new_val)+0.000000001),
1428 nvl(lsf.mx_los_num,p_new_val)+0.000000001 ) )
1429 AND p_old_val >= NVL(lsf.mn_los_num
1430 ,p_old_val)
1431 -- AND p_old_val < ceil( NVL(lsf.mx_los_num
1432 -- ,p_old_val)) + 0.001 )
1433 and p_old_val < decode(nvl(lsf.mx_los_num,p_old_val) ,
1434 trunc(nvl(lsf.mx_los_num,p_old_val))
1435 ,decode(nvl(lsf.mn_los_num,p_old_val), trunc(nvl(lsf.mn_los_num,p_old_val)),
1436 nvl(lsf.mx_los_num,p_old_val)+1,nvl(lsf.mx_los_num,p_old_val)+0.000000001),
1437 nvl(lsf.mx_los_num,p_old_val)+0.000000001 ) )
1438 OR ( p_new_val IS NULL
1439 AND p_old_val IS NULL));
1440 --
1441 l_index PLS_INTEGER;
1442 l_not_hash_found BOOLEAN;
1443 l_c2notfound BOOLEAN;
1444 --
1445 BEGIN
1446 --
1447 -- hr_utility.set_location ('Entering '||l_package,10);
1448 --
1449 -- Steps to do process
1450 --
1451 -- 1) Try and get value from cache
1452 -- 2) If can get from cache then copy to output record
1453 -- 3) If can't get from cache do db hit and then
1454 -- copy to cache record and then copy to output record.
1455 --
1456 -- Get hashed index value
1457 --
1458 l_index := MOD(p_pgm_id
1459 ,g_hash_key);
1460 --
1461 IF NOT g_cache_pgm_los_rt_rec.EXISTS(l_index) THEN
1462 --
1463 -- Lets store the hash value in this index
1464 --
1465 RAISE NO_DATA_FOUND;
1466 --
1467 ELSE
1468 --
1469 -- If it does exist make sure its the right one
1470 --
1471 IF g_cache_pgm_los_rt_rec(l_index).id <> p_pgm_id THEN
1472 --
1473 -- Loop through the hash using the jump routine to check further
1474 -- indexes
1475 --
1476 l_not_hash_found := FALSE;
1477 --
1478 WHILE NOT l_not_hash_found LOOP
1479 --
1480 l_index := l_index + g_hash_jump;
1481 --
1482 -- Check if the hash index exists, if not we can use it
1483 --
1484 IF NOT g_cache_pgm_los_rt_rec.EXISTS(l_index) THEN
1485 --
1489 --
1486 -- Lets store the hash value in the index
1487 --
1488 RAISE NO_DATA_FOUND;
1490 ELSE
1491 --
1492 -- Make sure the index is the correct one
1493 --
1494 IF g_cache_pgm_los_rt_rec(l_index).id = p_pgm_id THEN
1495 --
1496 -- We have a match so the hashed value has been stored before
1497 --
1498 l_not_hash_found := TRUE;
1499 --
1500 END IF;
1501 --
1502 END IF;
1503 --
1504 END LOOP;
1505 --
1506 END IF;
1507 --
1508 END IF;
1509 --
1510 -- If p_new_val and p_old_val set this means we are trying to retrieve
1511 -- the correct rate for the calculated value. Previously we just cached
1512 -- the first rate we found since we needed the determination code, the
1513 -- correct age,los code,etc
1514 -- By killing the cache and forcing the value to be removed we cache the
1515 -- correct rate profile for the case we need.
1516 --
1517 IF p_old_val IS NOT NULL
1518 AND p_new_val IS NOT NULL THEN
1519 --
1520 RAISE NO_DATA_FOUND;
1521 --
1522 END IF;
1523 --
1524 p_rec := g_cache_pgm_los_rt_rec(l_index);
1525 --
1526 -- hr_utility.set_location ('Leaving '||l_package,10);
1527 --
1528 EXCEPTION
1529 --
1530 WHEN NO_DATA_FOUND THEN
1531 --
1532 -- The record has not been cached yet so lets cache it
1533 --
1534 OPEN c1;
1535 --
1536 FETCH c1 INTO g_cache_pgm_los_rt_rec(l_index);
1537 -- PERFNEW
1538 IF c1%NOTFOUND THEN
1539 --
1540 l_c2notfound := false;
1541 OPEN c2;
1542 FETCH c2 INTO g_cache_pgm_los_rt_rec(l_index);
1543 IF c2%NOTFOUND THEN
1544 --
1545 l_c2notfound := true;
1546 --
1547 END IF;
1548 CLOSE c2;
1549 --
1550 END IF;
1551 -- PERFNEW
1552 IF p_old_val IS NULL
1553 AND p_new_val IS NULL THEN
1554 --
1555 IF c1%NOTFOUND and l_c2notfound THEN -- PERFNEW
1556 --
1557 if NOT g_cache_pgm_los_rt_rec.EXISTS(l_index) then
1558 g_cache_pgm_los_rt_rec(l_index).id := p_pgm_id;
1559 g_cache_pgm_los_rt_rec(l_index).exist := 'N';
1560 end if;
1561 --
1562 END IF;
1563 --
1564 END IF;
1565 --
1566 p_rec := g_cache_pgm_los_rt_rec(l_index);
1567 --
1568 CLOSE c1;
1569 --
1570 END get_los_pgm_rate;
1571 --
1572 PROCEDURE get_los_pl_rate(
1573 p_pl_id IN NUMBER
1574 ,p_old_val IN NUMBER DEFAULT NULL
1575 ,p_new_val IN NUMBER DEFAULT NULL
1576 ,p_business_group_id IN NUMBER
1577 ,p_effective_date IN DATE
1578 ,p_rec OUT NOCOPY g_cache_los_rec_obj) IS
1579 --
1583 l_new_val_1 NUMBER := p_new_val + 1;
1580 l_package VARCHAR2(80) := g_package || '.get_los_pl_rate';
1581 --
1582 l_old_val_1 NUMBER := p_old_val + 1;
1584 --
1585 -- Define Cursor
1586 --
1587 CURSOR c1 IS
1588 SELECT p_pl_id
1589 ,'Y'
1590 ,lsf.los_det_cd
1591 ,lsf.los_dt_to_use_cd
1592 ,lsf.use_overid_svc_dt_flag
1593 ,lsf.los_uom
1594 ,lsf.los_det_rl
1595 ,lsf.los_dt_to_use_rl
1596 ,lsf.los_calc_rl
1597 ,lsf.rndg_cd
1598 ,lsf.rndg_rl
1599 ,lsf.mn_los_num
1600 ,lsf.mx_los_num
1601 FROM ben_los_fctr lsf
1602 ,ben_los_rt_f lsr
1603 ,ben_vrbl_rt_prfl_f vpf
1604 ,ben_acty_vrbl_rt_f avr
1605 ,ben_acty_base_rt_f abr
1606 WHERE abr.pl_id = p_pl_id
1607 AND p_effective_date BETWEEN abr.effective_start_date
1608 AND abr.effective_end_date
1609 AND abr.acty_base_rt_id = avr.acty_base_rt_id
1610 AND p_effective_date BETWEEN avr.effective_start_date
1611 AND avr.effective_end_date
1612 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
1613 AND p_effective_date BETWEEN vpf.effective_start_date
1614 AND vpf.effective_end_date
1615 AND vpf.vrbl_rt_prfl_id = lsr.vrbl_rt_prfl_id
1616 AND p_effective_date BETWEEN lsr.effective_start_date
1617 AND lsr.effective_end_date
1618 AND lsr.los_fctr_id = lsf.los_fctr_id
1619 AND (
1620 (
1621 p_new_val IS NOT NULL
1622 AND p_old_val IS NOT NULL
1623 AND p_new_val >= NVL(lsf.mn_los_num
1624 ,p_new_val)
1625 -- AND p_new_val < ceil( NVL(lsf.mx_los_num
1626 -- ,p_new_val ) + 0.001) )
1627 and p_new_val < decode(nvl(lsf.mx_los_num,p_new_val) ,
1628 trunc(nvl(lsf.mx_los_num,p_new_val))
1629 ,decode(nvl(lsf.mn_los_num,p_new_val), trunc(nvl(lsf.mn_los_num,p_new_val)),
1630 nvl(lsf.mx_los_num,p_new_val)+1,nvl(lsf.mx_los_num,p_new_val)+0.000000001),
1631 nvl(lsf.mx_los_num,p_new_val)+0.000000001 ) )
1632
1633 OR (
1634 p_new_val IS NOT NULL
1635 AND p_old_val IS NOT NULL
1636 AND (
1637 p_new_val < NVL(lsf.mn_los_num
1638 ,p_new_val)
1639 -- OR p_new_val >= ceil( NVL(lsf.mx_los_num
1640 -- , p_new_val )) + 0.001 )
1641 OR p_new_val >= decode(nvl(lsf.mx_los_num,p_new_val) ,
1642 trunc(nvl(lsf.mx_los_num,p_new_val))
1643 ,decode(nvl(lsf.mn_los_num,p_new_val), trunc(nvl(lsf.mn_los_num,p_new_val)),
1644 nvl(lsf.mx_los_num,p_new_val)+1,nvl(lsf.mx_los_num,p_new_val)+0.000000001),
1645 nvl(lsf.mx_los_num,p_new_val)+0.000000001 ) )
1646
1647 AND p_old_val >= NVL(lsf.mn_los_num
1648 ,p_old_val)
1649 -- AND p_old_val < ceil( NVL(lsf.mx_los_num
1650 -- ,p_old_val)) + 0.001 )
1651 and p_old_val < decode(nvl(lsf.mx_los_num,p_old_val) ,
1652 trunc(nvl(lsf.mx_los_num,p_old_val))
1653 ,decode(nvl(lsf.mn_los_num,p_old_val), trunc(nvl(lsf.mn_los_num,p_old_val)),
1654 nvl(lsf.mx_los_num,p_old_val)+1,nvl(lsf.mx_los_num,p_old_val)+0.000000001),
1655 nvl(lsf.mx_los_num,p_old_val)+0.000000001 ) )
1656
1657 OR ( p_new_val IS NULL
1658 AND p_old_val IS NULL));
1659 -- PERFNEW. SPLIT TO 2 CURSORS C1 and C2.
1663 ,'Y'
1660 -- UNION ALL
1661 CURSOR c2 IS
1662 SELECT p_pl_id
1664 ,lsf.los_det_cd
1665 ,lsf.los_dt_to_use_cd
1666 ,lsf.use_overid_svc_dt_flag
1667 ,lsf.los_uom
1668 ,lsf.los_det_rl
1669 ,lsf.los_dt_to_use_rl
1670 ,lsf.los_calc_rl
1671 ,lsf.rndg_cd
1672 ,lsf.rndg_rl
1673 ,lsf.mn_los_num
1674 ,lsf.mx_los_num
1675 FROM ben_los_fctr lsf
1676 -- ,ben_los_rt_f lsr
1677 ,ben_elig_los_prte_f els
1678 ,ben_eligy_prfl_f elp
1679 ,ben_vrbl_rt_elig_prfl_f vep
1680 --
1681 ,ben_vrbl_rt_prfl_f vpf
1682 ,ben_acty_vrbl_rt_f avr
1683 ,ben_acty_base_rt_f abr
1684 WHERE abr.pl_id = p_pl_id
1685 AND p_effective_date BETWEEN abr.effective_start_date
1686 AND abr.effective_end_date
1687 AND abr.acty_base_rt_id = avr.acty_base_rt_id
1688 AND p_effective_date BETWEEN avr.effective_start_date
1689 AND avr.effective_end_date
1690 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
1691 AND p_effective_date BETWEEN vpf.effective_start_date
1692 AND vpf.effective_end_date
1693 AND vpf.vrbl_rt_prfl_id = vep.vrbl_rt_prfl_id
1694 AND p_effective_date BETWEEN vep.effective_start_date
1695 AND vep.effective_end_date
1696 AND vep.eligy_prfl_id = elp.eligy_prfl_id
1697 AND p_effective_date BETWEEN elp.effective_start_date
1698 AND elp.effective_end_date
1699 AND els.eligy_prfl_id = elp.eligy_prfl_id
1700 AND p_effective_date BETWEEN els.effective_start_date
1701 AND els.effective_end_date
1702 AND els.los_fctr_id = lsf.los_fctr_id
1703 AND (
1704 (
1705 p_new_val IS NOT NULL
1706 AND p_old_val IS NOT NULL
1707 AND p_new_val >= NVL(lsf.mn_los_num
1708 ,p_new_val)
1709 -- AND p_new_val < ceil( NVL(lsf.mx_los_num
1710 -- ,p_new_val ) + 0.001) )
1711 and p_new_val < decode(nvl(lsf.mx_los_num,p_new_val) ,
1712 trunc(nvl(lsf.mx_los_num,p_new_val))
1713 ,decode(nvl(lsf.mn_los_num,p_new_val), trunc(nvl(lsf.mn_los_num,p_new_val)),
1714 nvl(lsf.mx_los_num,p_new_val)+1,nvl(lsf.mx_los_num,p_new_val)+0.000000001),
1715 nvl(lsf.mx_los_num,p_new_val)+0.000000001 ) )
1716
1717 OR (
1718 p_new_val IS NOT NULL
1719 AND p_old_val IS NOT NULL
1720 AND (
1721 p_new_val < NVL(lsf.mn_los_num
1722 ,p_new_val)
1723 -- OR p_new_val >= ceil( NVL(lsf.mx_los_num
1724 -- , p_new_val )) + 0.001 )
1725 OR p_new_val >= decode(nvl(lsf.mx_los_num,p_new_val) ,
1726 trunc(nvl(lsf.mx_los_num,p_new_val))
1730
1727 ,decode(nvl(lsf.mn_los_num,p_new_val), trunc(nvl(lsf.mn_los_num,p_new_val)),
1728 nvl(lsf.mx_los_num,p_new_val)+1,nvl(lsf.mx_los_num,p_new_val)+0.000000001),
1729 nvl(lsf.mx_los_num,p_new_val)+0.000000001 ) )
1731 AND p_old_val >= NVL(lsf.mn_los_num
1732 ,p_old_val)
1733 -- AND p_old_val < ceil( NVL(lsf.mx_los_num
1734 -- ,p_old_val)) + 0.001 )
1735 and p_old_val < decode(nvl(lsf.mx_los_num,p_old_val) ,
1736 trunc(nvl(lsf.mx_los_num,p_old_val))
1737 ,decode(nvl(lsf.mn_los_num,p_old_val), trunc(nvl(lsf.mn_los_num,p_old_val)),
1738 nvl(lsf.mx_los_num,p_old_val)+1,nvl(lsf.mx_los_num,p_old_val)+0.000000001),
1739 nvl(lsf.mx_los_num,p_old_val)+0.000000001 ) )
1740
1741 OR ( p_new_val IS NULL
1742 AND p_old_val IS NULL));
1743 --
1744 l_index PLS_INTEGER;
1745 l_not_hash_found BOOLEAN;
1746 l_c2notfound BOOLEAN;
1747
1748 --
1749 BEGIN
1750 --
1751 -- hr_utility.set_location ('Entering '||l_package,10);
1752 --
1753 -- Steps to do process
1754 --
1755 -- 1) Try and get value from cache
1756 -- 2) If can get from cache then copy to output record
1757 -- 3) If can't get from cache do db hit and then
1758 -- copy to cache record and then copy to output record.
1759 --
1760 -- Get hashed index value
1761 --
1762 l_index := MOD(p_pl_id
1763 ,g_hash_key);
1764 --
1765 IF NOT g_cache_pl_los_rt_rec.EXISTS(l_index) THEN
1766 --
1767 -- Lets store the hash value in this index
1768 --
1769 RAISE NO_DATA_FOUND;
1770 --
1771 ELSE
1772 --
1773 -- If it does exist make sure its the right one
1774 --
1775 IF g_cache_pl_los_rt_rec(l_index).id <> p_pl_id THEN
1776 --
1777 -- Loop through the hash using the jump routine to check further
1778 -- indexes
1779 --
1780 l_not_hash_found := FALSE;
1781 --
1782 WHILE NOT l_not_hash_found LOOP
1783 --
1784 l_index := l_index + g_hash_jump;
1785 --
1786 -- Check if the hash index exists, if not we can use it
1787 --
1788 IF NOT g_cache_pl_los_rt_rec.EXISTS(l_index) THEN
1789 --
1790 -- Lets store the hash value in the index
1791 --
1792 RAISE NO_DATA_FOUND;
1793 --
1794 ELSE
1795 --
1796 -- Make sure the index is the correct one
1797 --
1798 IF g_cache_pl_los_rt_rec(l_index).id = p_pl_id THEN
1799 --
1803 --
1800 -- We have a match so the hashed value has been stored before
1801 --
1802 l_not_hash_found := TRUE;
1804 END IF;
1805 --
1806 END IF;
1807 --
1808 END LOOP;
1809 --
1810 END IF;
1811 --
1812 END IF;
1813 --
1814 -- If p_old_val and p_new_val is set this means we are trying to retrieve
1815 -- the correct rate for the calculated value.
1816 -- Previously we just cached the first rate we
1817 -- found since we needed the determination code, the correct age,los code,etc
1818 -- By killing the cache and forcing the value to be removed we cache the
1819 -- correct rate profile for the case we need.
1820 --
1821 IF p_old_val IS NOT NULL
1822 AND p_new_val IS NOT NULL THEN
1823 --
1824 RAISE NO_DATA_FOUND;
1825 --
1826 END IF;
1827 --
1828 p_rec := g_cache_pl_los_rt_rec(l_index);
1829 --
1830 EXCEPTION
1831 --
1832 WHEN NO_DATA_FOUND THEN
1833 --
1834 -- The record has not been cached yet so lets cache it
1835 --
1836 OPEN c1;
1837 --
1838 FETCH c1 INTO g_cache_pl_los_rt_rec(l_index);
1839 -- PERFNEW
1840 IF c1%NOTFOUND THEN
1841 --
1842 l_c2notfound := false;
1843 OPEN c2;
1844 FETCH c2 INTO g_cache_pl_los_rt_rec(l_index);
1845 IF c2%NOTFOUND THEN
1846 --
1847 l_c2notfound := true;
1848 --
1849 END IF;
1850 CLOSE c2;
1851 --
1852 END IF;
1853 -- PERFNEW
1854 IF p_old_val IS NULL
1855 AND p_new_val IS NULL THEN
1856 --
1857 IF c1%NOTFOUND and l_c2notfound THEN -- PERFNEW
1858 --
1859 if NOT g_cache_pl_los_rt_rec.EXISTS(l_index) then
1860 g_cache_pl_los_rt_rec(l_index).id := p_pl_id;
1861 g_cache_pl_los_rt_rec(l_index).exist := 'N';
1862 end if;
1863 --
1864 END IF;
1865 --
1866 END IF;
1867 --
1868 p_rec := g_cache_pl_los_rt_rec(l_index);
1869 --
1870 CLOSE c1;
1871 --
1872 END get_los_pl_rate;
1873 --
1874 PROCEDURE get_los_oipl_rate(
1875 p_oipl_id IN NUMBER
1876 ,p_old_val IN NUMBER DEFAULT NULL
1877 ,p_new_val IN NUMBER DEFAULT NULL
1878 ,p_business_group_id IN NUMBER
1879 ,p_effective_date IN DATE
1880 ,p_rec OUT NOCOPY g_cache_los_rec_obj) IS
1881 --
1882 l_package VARCHAR2(80) := g_package || '.get_los_oipl_rate';
1883 --
1884 l_old_val_1 NUMBER := p_old_val + 1;
1885 l_new_val_1 NUMBER := p_new_val + 1;
1886 --
1887 l_opt_id NUMBER;
1888 -- Define Cursor
1889 --
1890 CURSOR c1 IS
1891 SELECT p_oipl_id
1892 ,'Y'
1893 ,lsf.los_det_cd
1894 ,lsf.los_dt_to_use_cd
1895 ,lsf.use_overid_svc_dt_flag
1896 ,lsf.los_uom
1897 ,lsf.los_det_rl
1898 ,lsf.los_dt_to_use_rl
1899 ,lsf.los_calc_rl
1900 ,lsf.rndg_cd
1901 ,lsf.rndg_rl
1902 ,lsf.mn_los_num
1903 ,lsf.mx_los_num
1904 FROM ben_los_fctr lsf
1905 ,ben_los_rt_f lsr
1906 ,ben_vrbl_rt_prfl_f vpf
1907 ,ben_acty_vrbl_rt_f avr
1908 ,ben_acty_base_rt_f abr
1909 WHERE ( abr.oipl_id = p_oipl_id
1910 --
1911 --START Option level Rates Enhancements
1912 or ( abr.opt_id = l_opt_id and
1913 not exists (select null from ben_acty_base_rt_f abr1
1914 where abr1.oipl_id = p_oipl_id )))
1915 --END Option level Rates Enhancements
1916 --
1917 AND p_effective_date BETWEEN abr.effective_start_date
1918 AND abr.effective_end_date
1919 AND abr.acty_base_rt_id = avr.acty_base_rt_id
1920 AND p_effective_date BETWEEN avr.effective_start_date
1924 AND vpf.effective_end_date
1921 AND avr.effective_end_date
1922 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
1923 AND p_effective_date BETWEEN vpf.effective_start_date
1925 AND vpf.vrbl_rt_prfl_id = lsr.vrbl_rt_prfl_id
1926 AND p_effective_date BETWEEN lsr.effective_start_date
1927 AND lsr.effective_end_date
1928 AND lsr.los_fctr_id = lsf.los_fctr_id
1929 AND (
1930 (
1931 p_new_val IS NOT NULL
1932 AND p_old_val IS NOT NULL
1933 AND p_new_val >= NVL(lsf.mn_los_num
1934 ,p_new_val)
1935 -- AND p_new_val < ceil( NVL(lsf.mx_los_num
1936 -- ,p_new_val) + 0.001 ))
1937 and p_new_val < decode(nvl(lsf.mx_los_num,p_new_val) ,
1938 trunc(nvl(lsf.mx_los_num,p_new_val))
1939 ,decode(nvl(lsf.mn_los_num,p_new_val), trunc(nvl(lsf.mn_los_num,p_new_val)),
1940 nvl(lsf.mx_los_num,p_new_val)+1,nvl(lsf.mx_los_num,p_new_val)+0.000000001),
1941 nvl(lsf.mx_los_num,p_new_val)+0.000000001 ) )
1942 OR (
1943 p_new_val IS NOT NULL
1944 AND p_old_val IS NOT NULL
1945 AND (
1946 p_new_val < NVL(lsf.mn_los_num
1947 ,p_new_val)
1948 -- OR p_new_val >= ceil( NVL(lsf.mx_los_num
1949 -- , p_new_val)) + 0.001)
1950 OR p_new_val >= decode(nvl(lsf.mx_los_num,p_new_val) ,
1951 trunc(nvl(lsf.mx_los_num,p_new_val))
1952 ,decode(nvl(lsf.mn_los_num,p_new_val), trunc(nvl(lsf.mn_los_num,p_new_val)),
1953 nvl(lsf.mx_los_num,p_new_val)+1,nvl(lsf.mx_los_num,p_new_val)+0.000000001),
1954 nvl(lsf.mx_los_num,p_new_val)+0.000000001 ) )
1955 AND p_old_val >= NVL(lsf.mn_los_num
1956 ,p_old_val)
1957 -- AND p_old_val < ceil( NVL(lsf.mx_los_num
1958 -- ,p_old_val)) + 0.001)
1959 and p_old_val < decode(nvl(lsf.mx_los_num,p_old_val) ,
1960 trunc(nvl(lsf.mx_los_num,p_old_val))
1961 ,decode(nvl(lsf.mn_los_num,p_old_val), trunc(nvl(lsf.mn_los_num,p_old_val)),
1962 nvl(lsf.mx_los_num,p_old_val)+1,nvl(lsf.mx_los_num,p_old_val)+0.000000001),
1963 nvl(lsf.mx_los_num,p_old_val)+0.000000001 ) )
1964 OR ( p_new_val IS NULL
1965 AND p_old_val IS NULL));
1966 -- PERFNEW. SPLIT TO 2 CURSORS C1 and C2.
1967 --UNION ALL
1968 CURSOR c2 IS
1969 SELECT p_oipl_id
1970 ,'Y'
1971 ,lsf.los_det_cd
1972 ,lsf.los_dt_to_use_cd
1973 ,lsf.use_overid_svc_dt_flag
1974 ,lsf.los_uom
1975 ,lsf.los_det_rl
1976 ,lsf.los_dt_to_use_rl
1977 ,lsf.los_calc_rl
1978 ,lsf.rndg_cd
1979 ,lsf.rndg_rl
1980 ,lsf.mn_los_num
1981 ,lsf.mx_los_num
1982 FROM ben_los_fctr lsf
1983 --,ben_los_rt_f lsr
1984 ,ben_elig_los_prte_f els
1985 ,ben_eligy_prfl_f elp
1986 ,ben_vrbl_rt_elig_prfl_f vep
1987 ,ben_vrbl_rt_prfl_f vpf
1988 ,ben_acty_vrbl_rt_f avr
1989 ,ben_acty_base_rt_f abr
1990 WHERE ( abr.oipl_id = p_oipl_id
1991 --
1992 --START Option level Rates Enhancements
1993 or ( abr.opt_id = l_opt_id and
1994 not exists (select null from ben_acty_base_rt_f abr1
1995 where abr1.oipl_id = p_oipl_id )))
1996 --END Option level Rates Enhancements
1997 --
1998 AND p_effective_date BETWEEN abr.effective_start_date
1999 AND abr.effective_end_date
2000 AND abr.acty_base_rt_id = avr.acty_base_rt_id
2001 AND p_effective_date BETWEEN avr.effective_start_date
2002 AND avr.effective_end_date
2003 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
2004 AND p_effective_date BETWEEN vpf.effective_start_date
2005 AND vpf.effective_end_date
2006 AND vpf.vrbl_rt_prfl_id = vep.vrbl_rt_prfl_id
2007 AND p_effective_date BETWEEN vep.effective_start_date
2008 AND vep.effective_end_date
2009 AND vep.eligy_prfl_id = elp.eligy_prfl_id
2010 AND p_effective_date BETWEEN elp.effective_start_date
2011 AND elp.effective_end_date
2012 AND els.eligy_prfl_id = elp.eligy_prfl_id
2013 AND p_effective_date BETWEEN els.effective_start_date
2014 AND els.effective_end_date
2015 -- AND vpf.vrbl_rt_prfl_id = els.vrbl_rt_prfl_id
2016 AND p_effective_date BETWEEN els.effective_start_date
2017 AND els.effective_end_date
2018 AND els.los_fctr_id = lsf.los_fctr_id
2019 AND (
2020 (
2021 p_new_val IS NOT NULL
2022 AND p_old_val IS NOT NULL
2026 -- ,p_new_val) + 0.001 ))
2023 AND p_new_val >= NVL(lsf.mn_los_num
2024 ,p_new_val)
2025 -- AND p_new_val < ceil( NVL(lsf.mx_los_num
2027 and p_new_val < decode(nvl(lsf.mx_los_num,p_new_val) ,
2028 trunc(nvl(lsf.mx_los_num,p_new_val))
2029 ,decode(nvl(lsf.mn_los_num,p_new_val), trunc(nvl(lsf.mn_los_num,p_new_val)),
2030 nvl(lsf.mx_los_num,p_new_val)+1,nvl(lsf.mx_los_num,p_new_val)+0.000000001),
2031 nvl(lsf.mx_los_num,p_new_val)+0.000000001 ) )
2032 OR (
2033 p_new_val IS NOT NULL
2034 AND p_old_val IS NOT NULL
2035 AND (
2036 p_new_val < NVL(lsf.mn_los_num
2037 ,p_new_val)
2038 -- OR p_new_val >= ceil( NVL(lsf.mx_los_num
2039 -- , p_new_val)) + 0.001)
2040 OR p_new_val >= decode(nvl(lsf.mx_los_num,p_new_val) ,
2041 trunc(nvl(lsf.mx_los_num,p_new_val))
2042 ,decode(nvl(lsf.mn_los_num,p_new_val), trunc(nvl(lsf.mn_los_num,p_new_val)),
2043 nvl(lsf.mx_los_num,p_new_val)+1,nvl(lsf.mx_los_num,p_new_val)+0.000000001),
2044 nvl(lsf.mx_los_num,p_new_val)+0.000000001 ) )
2045 AND p_old_val >= NVL(lsf.mn_los_num
2046 ,p_old_val)
2047 -- AND p_old_val < ceil( NVL(lsf.mx_los_num
2048 -- ,p_old_val)) + 0.001)
2049 and p_old_val < decode(nvl(lsf.mx_los_num,p_old_val) ,
2050 trunc(nvl(lsf.mx_los_num,p_old_val))
2051 ,decode(nvl(lsf.mn_los_num,p_old_val), trunc(nvl(lsf.mn_los_num,p_old_val)),
2052 nvl(lsf.mx_los_num,p_old_val)+1,nvl(lsf.mx_los_num,p_old_val)+0.000000001),
2053 nvl(lsf.mx_los_num,p_old_val)+0.000000001 ) )
2054 OR ( p_new_val IS NULL
2055 AND p_old_val IS NULL));
2056 --
2057 --
2058 l_index PLS_INTEGER;
2059 l_not_hash_found BOOLEAN;
2060 l_c2notfound BOOLEAN;
2061 --
2062 BEGIN
2063 --
2064 -- hr_utility.set_location ('Entering '||l_package,10);
2065 --
2066 -- Steps to do process
2067 --
2068 -- 1) Try and get value from cache
2069 -- 2) If can get from cache then copy to output record
2070 -- 3) If can't get from cache do db hit and then
2071 -- copy to cache record and then copy to output record.
2072 --
2073 -- Get hashed index value
2074 --
2075 l_index := MOD(p_oipl_id
2076 ,g_hash_key);
2077 --
2078 IF NOT g_cache_oipl_los_rt_rec.EXISTS(l_index) THEN
2079 --
2080 -- Lets store the hash value in this index
2081 --
2082 RAISE NO_DATA_FOUND;
2083 --
2084 ELSE
2085 --
2086 -- If it does exist make sure its the right one
2087 --
2088 IF g_cache_oipl_los_rt_rec(l_index).id <> p_oipl_id THEN
2089 --
2090 -- Loop through the hash using the jump routine to check further
2091 -- indexes
2092 --
2093 l_not_hash_found := FALSE;
2094 --
2095 WHILE NOT l_not_hash_found LOOP
2096 --
2097 l_index := l_index + g_hash_jump;
2098 --
2099 -- Check if the hash index exists, if not we can use it
2100 --
2101 IF NOT g_cache_oipl_los_rt_rec.EXISTS(l_index) THEN
2102 --
2106 --
2103 -- Lets store the hash value in the index
2104 --
2105 RAISE NO_DATA_FOUND;
2107 ELSE
2108 --
2109 -- Make sure the index is the correct one
2110 --
2111 IF g_cache_oipl_los_rt_rec(l_index).id = p_oipl_id THEN
2112 --
2113 -- We have a match so the hashed value has been stored before
2114 --
2115 l_not_hash_found := TRUE;
2116 --
2117 END IF;
2118 --
2119 END IF;
2120 --
2121 END LOOP;
2122 --
2123 END IF;
2124 --
2125 END IF;
2126 --
2127 -- If p_old_val and p_new_val is set this means we are trying to retrieve
2128 -- the correct rate for the calculated value.
2129 -- Previously we just cached the first rate we
2130 -- found since we needed the determination code, the correct age,los code,etc
2131 -- By killing the cache and forcing the value to be removed we cache the
2132 -- correct rate profile for the case we need.
2133 --
2134 IF p_old_val IS NOT NULL
2135 AND p_new_val IS NOT NULL THEN
2136 --
2137 RAISE NO_DATA_FOUND;
2138 --
2139 END IF;
2140 --
2141 p_rec := g_cache_oipl_los_rt_rec(l_index);
2142 --
2143 -- hr_utility.set_location ('Leaving '||l_package,10);
2144 --
2145 EXCEPTION
2146 --
2147 WHEN NO_DATA_FOUND THEN
2148 --
2149 -- The record has not been cached yet so lets cache it
2150 -- Option level rates enhancement
2151 l_opt_id := get_opt_id(p_oipl_id,p_effective_date);
2152 --
2153 OPEN c1;
2154 --
2155 FETCH c1 INTO g_cache_oipl_los_rt_rec(l_index);
2156 -- PERFNEW
2157 IF c1%NOTFOUND THEN
2158 --
2159 l_c2notfound := false;
2160 OPEN c2;
2161 FETCH c2 INTO g_cache_oipl_los_rt_rec(l_index);
2162 IF c2%NOTFOUND THEN
2163 --
2164 l_c2notfound := true;
2165 --
2166 END IF;
2167 CLOSE c2;
2168 --
2169 END IF;
2170 -- PERFNEW
2171 IF p_old_val IS NULL
2172 AND p_new_val IS NULL THEN
2173 --
2174 IF c1%NOTFOUND and l_c2notfound THEN -- PERFNEW
2175 --
2176 if NOT g_cache_oipl_los_rt_rec.EXISTS(l_index) then
2177 g_cache_oipl_los_rt_rec(l_index).id := p_oipl_id;
2178 g_cache_oipl_los_rt_rec(l_index).exist := 'N';
2179 end if;
2180 --
2181 END IF;
2182 --
2183 END IF;
2184 --
2185 p_rec := g_cache_oipl_los_rt_rec(l_index);
2186 --
2187 CLOSE c1;
2188 --
2189 END get_los_oipl_rate;
2190 --
2191 PROCEDURE get_los_plip_rate(
2192 p_plip_id IN NUMBER
2193 ,p_old_val IN NUMBER DEFAULT NULL
2194 ,p_new_val IN NUMBER DEFAULT NULL
2195 ,p_business_group_id IN NUMBER
2196 ,p_effective_date IN DATE
2197 ,p_rec OUT NOCOPY g_cache_los_rec_obj) IS
2198 --
2199 l_package VARCHAR2(80) := g_package || '.get_los_plip_rate';
2200 l_old_val_1 NUMBER := p_old_val + 1;
2204 --
2201 l_new_val_1 NUMBER := p_new_val + 1;
2202 --
2203 -- Define Cursor
2205 CURSOR c1 IS
2206 SELECT p_plip_id
2207 ,'Y'
2208 ,lsf.los_det_cd
2209 ,lsf.los_dt_to_use_cd
2210 ,lsf.use_overid_svc_dt_flag
2211 ,lsf.los_uom
2212 ,lsf.los_det_rl
2213 ,lsf.los_dt_to_use_rl
2214 ,lsf.los_calc_rl
2215 ,lsf.rndg_cd
2216 ,lsf.rndg_rl
2217 ,lsf.mn_los_num
2218 ,lsf.mx_los_num
2219 FROM ben_los_fctr lsf
2220 ,ben_los_rt_f lsr
2221 ,ben_vrbl_rt_prfl_f vpf
2222 ,ben_acty_vrbl_rt_f avr
2223 ,ben_acty_base_rt_f abr
2224 WHERE abr.plip_id = p_plip_id
2225 AND p_effective_date BETWEEN abr.effective_start_date
2226 AND abr.effective_end_date
2227 AND abr.acty_base_rt_id = avr.acty_base_rt_id
2228 AND p_effective_date BETWEEN avr.effective_start_date
2229 AND avr.effective_end_date
2230 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
2231 AND p_effective_date BETWEEN vpf.effective_start_date
2232 AND vpf.effective_end_date
2233 AND vpf.vrbl_rt_prfl_id = lsr.vrbl_rt_prfl_id
2234 AND p_effective_date BETWEEN lsr.effective_start_date
2235 AND lsr.effective_end_date
2236 AND lsr.los_fctr_id = lsf.los_fctr_id
2237 AND (
2238 (
2239 p_new_val IS NOT NULL
2240 AND p_old_val IS NOT NULL
2241 AND p_new_val >= NVL(lsf.mn_los_num
2242 ,p_new_val)
2243 -- AND p_new_val < ceil( NVL(lsf.mx_los_num
2244 -- ,p_new_val) + 0.001))
2245 and p_new_val < decode(nvl(lsf.mx_los_num,p_new_val) ,
2246 trunc(nvl(lsf.mx_los_num,p_new_val))
2247 ,decode(nvl(lsf.mn_los_num,p_new_val), trunc(nvl(lsf.mn_los_num,p_new_val)),
2248 nvl(lsf.mx_los_num,p_new_val)+1,nvl(lsf.mx_los_num,p_new_val)+0.000000001),
2249 nvl(lsf.mx_los_num,p_new_val)+0.000000001 ) )
2250 OR (
2251 p_new_val IS NOT NULL
2252 AND p_old_val IS NOT NULL
2253 AND (
2254 p_new_val < NVL(lsf.mn_los_num
2255 ,p_new_val)
2256 -- OR p_new_val >= ceil( NVL(lsf.mx_los_num
2257 -- ,p_new_val )) + 0.001 )
2258 OR p_new_val >= decode(nvl(lsf.mx_los_num,p_new_val) ,
2259 trunc(nvl(lsf.mx_los_num,p_new_val))
2260 ,decode(nvl(lsf.mn_los_num,p_new_val), trunc(nvl(lsf.mn_los_num,p_new_val)),
2261 nvl(lsf.mx_los_num,p_new_val)+1,nvl(lsf.mx_los_num,p_new_val)+0.000000001),
2262 nvl(lsf.mx_los_num,p_new_val)+0.000000001 ) )
2263 AND p_old_val >= NVL(lsf.mn_los_num
2264 ,p_old_val)
2265 -- AND p_old_val < ceil( NVL(lsf.mx_los_num
2266 -- ,p_old_val)) + 0.001 )
2267 and p_old_val < decode(nvl(lsf.mx_los_num,p_old_val) ,
2268 trunc(nvl(lsf.mx_los_num,p_old_val))
2269 ,decode(nvl(lsf.mn_los_num,p_old_val), trunc(nvl(lsf.mn_los_num,p_old_val)),
2270 nvl(lsf.mx_los_num,p_old_val)+1,nvl(lsf.mx_los_num,p_old_val)+0.000000001),
2271 nvl(lsf.mx_los_num,p_old_val)+0.000000001 ) )
2272 OR ( p_new_val IS NULL
2273 AND p_old_val IS NULL));
2274 -- PERFNEW. SPLIT TO 2 CURSORS C1 and C2.
2275 --UNION ALL
2276 CURSOR c2 IS
2277 SELECT p_plip_id
2278 ,'Y'
2279 ,lsf.los_det_cd
2280 ,lsf.los_dt_to_use_cd
2281 ,lsf.use_overid_svc_dt_flag
2282 ,lsf.los_uom
2283 ,lsf.los_det_rl
2284 ,lsf.los_dt_to_use_rl
2285 ,lsf.los_calc_rl
2289 ,lsf.mx_los_num
2286 ,lsf.rndg_cd
2287 ,lsf.rndg_rl
2288 ,lsf.mn_los_num
2290 FROM ben_los_fctr lsf
2291 --,ben_los_rt_f lsr
2292 ,ben_elig_los_prte_f els
2293 ,ben_eligy_prfl_f elp
2294 ,ben_vrbl_rt_elig_prfl_f vep
2295 ,ben_vrbl_rt_prfl_f vpf
2296 ,ben_acty_vrbl_rt_f avr
2297 ,ben_acty_base_rt_f abr
2298 WHERE abr.plip_id = p_plip_id
2299 AND p_effective_date BETWEEN abr.effective_start_date
2300 AND abr.effective_end_date
2301 AND abr.acty_base_rt_id = avr.acty_base_rt_id
2302 AND p_effective_date BETWEEN avr.effective_start_date
2303 AND avr.effective_end_date
2304 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
2305 AND p_effective_date BETWEEN vpf.effective_start_date
2306 AND vpf.effective_end_date
2307 -- AND vpf.vrbl_rt_prfl_id = els.vrbl_rt_prfl_id
2308 AND vpf.vrbl_rt_prfl_id = vep.vrbl_rt_prfl_id
2309 AND p_effective_date BETWEEN vep.effective_start_date
2310 AND vep.effective_end_date
2311 AND vep.eligy_prfl_id = elp.eligy_prfl_id
2312 AND p_effective_date BETWEEN elp.effective_start_date
2313 AND elp.effective_end_date
2314 AND els.eligy_prfl_id = elp.eligy_prfl_id
2315 AND p_effective_date BETWEEN els.effective_start_date
2316 AND els.effective_end_date
2317 AND p_effective_date BETWEEN els.effective_start_date
2318 AND els.effective_end_date
2319 AND els.los_fctr_id = lsf.los_fctr_id
2320 AND (
2321 (
2322 p_new_val IS NOT NULL
2323 AND p_old_val IS NOT NULL
2324 AND p_new_val >= NVL(lsf.mn_los_num
2325 ,p_new_val)
2326 -- AND p_new_val < ceil( NVL(lsf.mx_los_num
2327 -- ,p_new_val) + 0.001))
2328 and p_new_val < decode(nvl(lsf.mx_los_num,p_new_val) ,
2329 trunc(nvl(lsf.mx_los_num,p_new_val))
2330 ,decode(nvl(lsf.mn_los_num,p_new_val), trunc(nvl(lsf.mn_los_num,p_new_val)),
2331 nvl(lsf.mx_los_num,p_new_val)+1,nvl(lsf.mx_los_num,p_new_val)+0.000000001),
2332 nvl(lsf.mx_los_num,p_new_val)+0.000000001 ) )
2333 OR (
2334 p_new_val IS NOT NULL
2335 AND p_old_val IS NOT NULL
2336 AND (
2337 p_new_val < NVL(lsf.mn_los_num
2338 ,p_new_val)
2339 -- OR p_new_val >= ceil( NVL(lsf.mx_los_num
2340 -- ,p_new_val )) + 0.001 )
2341 OR p_new_val >= decode(nvl(lsf.mx_los_num,p_new_val) ,
2342 trunc(nvl(lsf.mx_los_num,p_new_val))
2343 ,decode(nvl(lsf.mn_los_num,p_new_val), trunc(nvl(lsf.mn_los_num,p_new_val)),
2344 nvl(lsf.mx_los_num,p_new_val)+1,nvl(lsf.mx_los_num,p_new_val)+0.000000001),
2345 nvl(lsf.mx_los_num,p_new_val)+0.000000001 ) )
2346 AND p_old_val >= NVL(lsf.mn_los_num
2347 ,p_old_val)
2348 -- AND p_old_val < ceil( NVL(lsf.mx_los_num
2349 -- ,p_old_val)) + 0.001 )
2350 and p_old_val < decode(nvl(lsf.mx_los_num,p_old_val) ,
2351 trunc(nvl(lsf.mx_los_num,p_old_val))
2352 ,decode(nvl(lsf.mn_los_num,p_old_val), trunc(nvl(lsf.mn_los_num,p_old_val)),
2353 nvl(lsf.mx_los_num,p_old_val)+1,nvl(lsf.mx_los_num,p_old_val)+0.000000001),
2354 nvl(lsf.mx_los_num,p_old_val)+0.000000001 ) )
2355 OR ( p_new_val IS NULL
2356 AND p_old_val IS NULL));
2357 --
2358 --
2359 l_index PLS_INTEGER;
2360 l_not_hash_found BOOLEAN;
2361 l_c2notfound BOOLEAN;
2362 --
2363 BEGIN
2364 --
2365 -- hr_utility.set_location ('Entering '||l_package,10);
2366 --
2367 -- Steps to do process
2368 --
2369 -- 1) Try and get value from cache
2370 -- 2) If can get from cache then copy to output record
2371 -- 3) If can't get from cache do db hit and then
2372 -- copy to cache record and then copy to output record.
2373 --
2374 -- Get hashed index value
2375 --
2376 l_index := MOD(p_plip_id
2377 ,g_hash_key);
2378 --
2379 IF NOT g_cache_plip_los_rt_rec.EXISTS(l_index) THEN
2380 --
2381 -- Lets store the hash value in this index
2382 --
2383 RAISE NO_DATA_FOUND;
2384 --
2385 ELSE
2386 --
2387 -- If it does exist make sure its the right one
2388 --
2389 IF g_cache_plip_los_rt_rec(l_index).id <> p_plip_id THEN
2390 --
2391 -- Loop through the hash using the jump routine to check further
2392 -- indexes
2393 --
2394 l_not_hash_found := FALSE;
2395 --
2396 WHILE NOT l_not_hash_found LOOP
2397 --
2398 l_index := l_index + g_hash_jump;
2399 --
2400 -- Check if the hash index exists, if not we can use it
2401 --
2405 --
2402 IF NOT g_cache_plip_los_rt_rec.EXISTS(l_index) THEN
2403 --
2404 -- Lets store the hash value in the index
2406 RAISE NO_DATA_FOUND;
2407 --
2408 ELSE
2409 --
2410 -- Make sure the index is the correct one
2411 --
2412 IF g_cache_plip_los_rt_rec(l_index).id = p_plip_id THEN
2413 --
2414 -- We have a match so the hashed value has been stored before
2415 --
2416 l_not_hash_found := TRUE;
2417 --
2418 END IF;
2419 --
2420 END IF;
2421 --
2422 END LOOP;
2423 --
2424 END IF;
2425 --
2426 END IF;
2427 --
2428 -- If p_old_val and p_new_val is set this means we are trying to retrieve
2429 -- the correct rate for the calculated value.
2430 -- Previously we just cached the first rate we
2431 -- found since we needed the determination code, the correct age,los code,etc
2432 -- By killing the cache and forcing the value to be removed we cache the
2433 -- correct rate profile for the case we need.
2434 --
2435 IF p_old_val IS NOT NULL
2436 AND p_new_val IS NOT NULL THEN
2437 --
2438 RAISE NO_DATA_FOUND;
2439 --
2440 END IF;
2441 --
2442 p_rec := g_cache_plip_los_rt_rec(l_index);
2443 --
2444 -- hr_utility.set_location ('Leaving '||l_package,10);
2445 --
2446 EXCEPTION
2447 --
2448 WHEN NO_DATA_FOUND THEN
2449 --
2450 -- The record has not been cached yet so lets cache it
2451 --
2452 OPEN c1;
2453 --
2454 FETCH c1 INTO g_cache_plip_los_rt_rec(l_index);
2455 -- PERFNEW
2456 IF c1%NOTFOUND THEN
2457 --
2458 l_c2notfound := false;
2459 OPEN c2;
2460 FETCH c2 INTO g_cache_plip_los_rt_rec(l_index);
2461 IF c2%NOTFOUND THEN
2462 --
2463 l_c2notfound := true;
2464 --
2465 END IF;
2466 CLOSE c2;
2467 --
2468 END IF;
2469 -- PERFNEW
2470 IF p_old_val IS NULL
2471 AND p_new_val IS NULL THEN
2472 --
2473 IF c1%NOTFOUND and l_c2notfound THEN -- PERFNEW
2474 --
2475 if NOT g_cache_plip_los_rt_rec.EXISTS(l_index) then
2476 g_cache_plip_los_rt_rec(l_index).id := p_plip_id;
2477 g_cache_plip_los_rt_rec(l_index).exist := 'N';
2478 end if;
2479 --
2480 END IF;
2481 --
2482 END IF;
2483 --
2484 p_rec := g_cache_plip_los_rt_rec(l_index);
2485 --
2486 CLOSE c1;
2487 --
2488 END get_los_plip_rate;
2489 --
2490 PROCEDURE get_los_ptip_rate(
2491 p_ptip_id IN NUMBER
2492 ,p_old_val IN NUMBER DEFAULT NULL
2493 ,p_new_val IN NUMBER DEFAULT NULL
2494 ,p_business_group_id IN NUMBER
2495 ,p_effective_date IN DATE
2496 ,p_rec OUT NOCOPY g_cache_los_rec_obj) IS
2497 --
2498 l_package VARCHAR2(80) := g_package || '.get_los_ptip_rate';
2499 l_old_val_1 NUMBER := p_old_val + 1;
2500 l_new_val_1 NUMBER := p_new_val + 1;
2501 --
2502 -- Define Cursor
2503 --
2504 CURSOR c1 IS
2505 SELECT p_ptip_id
2506 ,'Y'
2507 ,lsf.los_det_cd
2508 ,lsf.los_dt_to_use_cd
2509 ,lsf.use_overid_svc_dt_flag
2510 ,lsf.los_uom
2511 ,lsf.los_det_rl
2512 ,lsf.los_dt_to_use_rl
2513 ,lsf.los_calc_rl
2514 ,lsf.rndg_cd
2515 ,lsf.rndg_rl
2516 ,lsf.mn_los_num
2517 ,lsf.mx_los_num
2518 FROM ben_los_fctr lsf
2519 ,ben_los_rt_f lsr
2520 ,ben_vrbl_rt_prfl_f vpf
2521 ,ben_acty_vrbl_rt_f avr
2522 ,ben_acty_base_rt_f abr
2523 WHERE abr.ptip_id = p_ptip_id
2524 AND p_effective_date BETWEEN abr.effective_start_date
2525 AND abr.effective_end_date
2526 AND abr.acty_base_rt_id = avr.acty_base_rt_id
2527 AND p_effective_date BETWEEN avr.effective_start_date
2528 AND avr.effective_end_date
2529 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
2530 AND p_effective_date BETWEEN vpf.effective_start_date
2531 AND vpf.effective_end_date
2535 AND lsr.los_fctr_id = lsf.los_fctr_id
2532 AND vpf.vrbl_rt_prfl_id = lsr.vrbl_rt_prfl_id
2533 AND p_effective_date BETWEEN lsr.effective_start_date
2534 AND lsr.effective_end_date
2536 AND (
2537 (
2538 p_new_val IS NOT NULL
2539 AND p_old_val IS NOT NULL
2540 AND p_new_val >= NVL(lsf.mn_los_num
2541 ,p_new_val)
2542 -- AND p_new_val < ceil( NVL(lsf.mx_los_num
2543 -- ,p_new_val) + 0.001) )
2544 and p_new_val < decode(nvl(lsf.mx_los_num,p_new_val) ,
2545 trunc(nvl(lsf.mx_los_num,p_new_val))
2546 ,decode(nvl(lsf.mn_los_num,p_new_val), trunc(nvl(lsf.mn_los_num,p_new_val)),
2547 nvl(lsf.mx_los_num,p_new_val)+1,nvl(lsf.mx_los_num,p_new_val)+0.000000001),
2548 nvl(lsf.mx_los_num,p_new_val)+0.000000001 ) )
2549 OR (
2550 p_new_val IS NOT NULL
2551 AND p_old_val IS NOT NULL
2552 AND (
2553 p_new_val < NVL(lsf.mn_los_num
2554 ,p_new_val)
2555 -- OR p_new_val >= ceil( NVL(lsf.mx_los_num
2556 -- ,p_new_val)) + 0.001 )
2557 OR p_new_val >= decode(nvl(lsf.mx_los_num,p_new_val) ,
2558 trunc(nvl(lsf.mx_los_num,p_new_val))
2559 ,decode(nvl(lsf.mn_los_num,p_new_val), trunc(nvl(lsf.mn_los_num,p_new_val)),
2560 nvl(lsf.mx_los_num,p_new_val)+1,nvl(lsf.mx_los_num,p_new_val)+0.000000001),
2561 nvl(lsf.mx_los_num,p_new_val)+0.000000001 ) )
2562 AND p_old_val >= NVL(lsf.mn_los_num
2563 ,p_old_val)
2564 -- AND p_old_val < ceil( NVL(lsf.mx_los_num
2565 -- ,p_old_val )) + 0.001 )
2566 and p_old_val < decode(nvl(lsf.mx_los_num,p_old_val) ,
2567 trunc(nvl(lsf.mx_los_num,p_old_val))
2568 ,decode(nvl(lsf.mn_los_num,p_old_val), trunc(nvl(lsf.mn_los_num,p_old_val)),
2569 nvl(lsf.mx_los_num,p_old_val)+1,nvl(lsf.mx_los_num,p_old_val)+0.000000001),
2570 nvl(lsf.mx_los_num,p_old_val)+0.000000001 ) )
2571 OR ( p_new_val IS NULL
2572 AND p_old_val IS NULL));
2573 -- PERFNEW. SPLIT TO 2 CURSORS C1 and C2.
2574 --UNION ALL
2575 CURSOR c2 IS
2576 SELECT p_ptip_id
2577 ,'Y'
2578 ,lsf.los_det_cd
2579 ,lsf.los_dt_to_use_cd
2580 ,lsf.use_overid_svc_dt_flag
2581 ,lsf.los_uom
2582 ,lsf.los_det_rl
2583 ,lsf.los_dt_to_use_rl
2584 ,lsf.los_calc_rl
2585 ,lsf.rndg_cd
2586 ,lsf.rndg_rl
2587 ,lsf.mn_los_num
2588 ,lsf.mx_los_num
2589 FROM ben_los_fctr lsf
2590 --,ben_los_rt_f lsr
2591 ,ben_elig_los_prte_f els
2592 ,ben_eligy_prfl_f elp
2593 ,ben_vrbl_rt_elig_prfl_f vep
2594 ,ben_vrbl_rt_prfl_f vpf
2595 ,ben_acty_vrbl_rt_f avr
2596 ,ben_acty_base_rt_f abr
2597 WHERE abr.ptip_id = p_ptip_id
2598 AND p_effective_date BETWEEN abr.effective_start_date
2599 AND abr.effective_end_date
2600 AND abr.acty_base_rt_id = avr.acty_base_rt_id
2601 AND p_effective_date BETWEEN avr.effective_start_date
2602 AND avr.effective_end_date
2603 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
2604 AND p_effective_date BETWEEN vpf.effective_start_date
2605 AND vpf.effective_end_date
2606 -- AND vpf.vrbl_rt_prfl_id = els.vrbl_rt_prfl_id
2607 AND vpf.vrbl_rt_prfl_id = vep.vrbl_rt_prfl_id
2608 AND p_effective_date BETWEEN vep.effective_start_date
2609 AND vep.effective_end_date
2610 AND vep.eligy_prfl_id = elp.eligy_prfl_id
2611 AND p_effective_date BETWEEN elp.effective_start_date
2612 AND elp.effective_end_date
2613 AND els.eligy_prfl_id = elp.eligy_prfl_id
2614 AND p_effective_date BETWEEN els.effective_start_date
2615 AND els.effective_end_date
2616 AND p_effective_date BETWEEN els.effective_start_date
2617 AND els.effective_end_date
2618 AND els.los_fctr_id = lsf.los_fctr_id
2619 AND (
2620 (
2621 p_new_val IS NOT NULL
2622 AND p_old_val IS NOT NULL
2623 AND p_new_val >= NVL(lsf.mn_los_num
2624 ,p_new_val)
2625 -- AND p_new_val < ceil( NVL(lsf.mx_los_num
2626 -- ,p_new_val) + 0.001) )
2627 and p_new_val < decode(nvl(lsf.mx_los_num,p_new_val) ,
2628 trunc(nvl(lsf.mx_los_num,p_new_val))
2629 ,decode(nvl(lsf.mn_los_num,p_new_val), trunc(nvl(lsf.mn_los_num,p_new_val)),
2630 nvl(lsf.mx_los_num,p_new_val)+1,nvl(lsf.mx_los_num,p_new_val)+0.000000001),
2631 nvl(lsf.mx_los_num,p_new_val)+0.000000001 ) )
2632 OR (
2633 p_new_val IS NOT NULL
2634 AND p_old_val IS NOT NULL
2638 -- OR p_new_val >= ceil( NVL(lsf.mx_los_num
2635 AND (
2636 p_new_val < NVL(lsf.mn_los_num
2637 ,p_new_val)
2639 -- ,p_new_val)) + 0.001 )
2640 OR p_new_val >= decode(nvl(lsf.mx_los_num,p_new_val) ,
2641 trunc(nvl(lsf.mx_los_num,p_new_val))
2642 ,decode(nvl(lsf.mn_los_num,p_new_val), trunc(nvl(lsf.mn_los_num,p_new_val)),
2643 nvl(lsf.mx_los_num,p_new_val)+1,nvl(lsf.mx_los_num,p_new_val)+0.000000001),
2644 nvl(lsf.mx_los_num,p_new_val)+0.000000001 ) )
2645 AND p_old_val >= NVL(lsf.mn_los_num
2646 ,p_old_val)
2647 -- AND p_old_val < ceil( NVL(lsf.mx_los_num
2648 -- ,p_old_val )) + 0.001 )
2649 and p_old_val < decode(nvl(lsf.mx_los_num,p_old_val) ,
2650 trunc(nvl(lsf.mx_los_num,p_old_val))
2651 ,decode(nvl(lsf.mn_los_num,p_old_val), trunc(nvl(lsf.mn_los_num,p_old_val)),
2652 nvl(lsf.mx_los_num,p_old_val)+1,nvl(lsf.mx_los_num,p_old_val)+0.000000001),
2653 nvl(lsf.mx_los_num,p_old_val)+0.000000001 ) )
2654 OR ( p_new_val IS NULL
2655 AND p_old_val IS NULL));
2656 --
2657 --
2658 l_index PLS_INTEGER;
2659 l_not_hash_found BOOLEAN;
2660 l_c2notfound BOOLEAN;
2661 --
2662 BEGIN
2663 --
2664 -- hr_utility.set_location ('Entering '||l_package,10);
2665 --
2666 -- Steps to do process
2667 --
2668 -- 1) Try and get value from cache
2669 -- 2) If can get from cache then copy to output record
2670 -- 3) If can't get from cache do db hit and then
2671 -- copy to cache record and then copy to output record.
2672 --
2673 -- Get hashed index value
2674 --
2675 l_index := MOD(p_ptip_id
2676 ,g_hash_key);
2677 --
2678 IF NOT g_cache_ptip_los_rt_rec.EXISTS(l_index) THEN
2679 --
2680 -- Lets store the hash value in this index
2681 --
2682 RAISE NO_DATA_FOUND;
2683 --
2684 ELSE
2685 --
2686 -- If it does exist make sure its the right one
2687 --
2688 IF g_cache_ptip_los_rt_rec(l_index).id <> p_ptip_id THEN
2689 --
2690 -- Loop through the hash using the jump routine to check further
2691 -- indexes
2692 --
2693 l_not_hash_found := FALSE;
2694 --
2695 WHILE NOT l_not_hash_found LOOP
2696 --
2697 l_index := l_index + g_hash_jump;
2698 --
2699 -- Check if the hash index exists, if not we can use it
2700 --
2701 IF NOT g_cache_ptip_los_rt_rec.EXISTS(l_index) THEN
2702 --
2703 -- Lets store the hash value in the index
2704 --
2705 RAISE NO_DATA_FOUND;
2706 --
2707 ELSE
2708 --
2709 -- Make sure the index is the correct one
2710 --
2711 IF g_cache_ptip_los_rt_rec(l_index).id = p_ptip_id THEN
2712 --
2713 -- We have a match so the hashed value has been stored before
2714 --
2715 l_not_hash_found := TRUE;
2716 --
2717 END IF;
2718 --
2719 END IF;
2720 --
2721 END LOOP;
2722 --
2723 END IF;
2724 --
2725 END IF;
2726 --
2727 -- If p_old_val and p_new_val is set this means we are trying to retrieve
2728 -- the correct rate for the calculated value.
2729 -- Previously we just cached the first rate we
2730 -- found since we needed the determination code, the correct age,los code,etc
2731 -- By killing the cache and forcing the value to be removed we cache the
2732 -- correct rate profile for the case we need.
2733 --
2734 IF p_old_val IS NOT NULL
2735 AND p_new_val IS NOT NULL THEN
2736 --
2737 RAISE NO_DATA_FOUND;
2738 --
2739 END IF;
2740 --
2741 p_rec := g_cache_ptip_los_rt_rec(l_index);
2742 --
2743 -- hr_utility.set_location ('Leaving '||l_package,10);
2744 --
2745 EXCEPTION
2746 --
2747 WHEN NO_DATA_FOUND THEN
2748 --
2749 -- The record has not been cached yet so lets cache it
2750 --
2751 OPEN c1;
2752 --
2753 FETCH c1 INTO g_cache_ptip_los_rt_rec(l_index);
2754 -- PERFNEW
2755 IF c1%NOTFOUND THEN
2756 --
2757 l_c2notfound := false;
2758 OPEN c2;
2759 FETCH c2 INTO g_cache_ptip_los_rt_rec(l_index);
2760 IF c2%NOTFOUND THEN
2761 --
2762 l_c2notfound := true;
2763 --
2764 END IF;
2765 CLOSE c2;
2766 --
2767 END IF;
2768 -- PERFNEW
2769 IF p_old_val IS NULL
2770 AND p_new_val IS NULL THEN
2771 --
2772 IF c1%NOTFOUND and l_c2notfound THEN -- PERFNEW
2773 --
2774 if NOT g_cache_ptip_los_rt_rec.EXISTS(l_index) then
2775 g_cache_ptip_los_rt_rec(l_index).id := p_ptip_id;
2779 END IF;
2776 g_cache_ptip_los_rt_rec(l_index).exist := 'N';
2777 end if;
2778 --
2780 --
2781 END IF;
2782 --
2783 p_rec := g_cache_ptip_los_rt_rec(l_index);
2784 --
2785 CLOSE c1;
2786 --
2787 END get_los_ptip_rate;
2788 --
2789 PROCEDURE get_los_oiplip_rate(
2790 p_oiplip_id IN NUMBER
2791 ,p_old_val IN NUMBER DEFAULT NULL
2792 ,p_new_val IN NUMBER DEFAULT NULL
2793 ,p_business_group_id IN NUMBER
2794 ,p_effective_date IN DATE
2795 ,p_rec OUT NOCOPY g_cache_los_rec_obj) IS
2796 --
2797 l_package VARCHAR2(80) := g_package || '.get_los_oiplip_rate';
2798 l_old_val_1 NUMBER := p_old_val + 1;
2799 l_new_val_1 NUMBER := p_new_val + 1;
2800 --
2801 -- Define Cursor
2802 --
2803 CURSOR c1 IS
2804 SELECT p_oiplip_id
2805 ,'Y'
2806 ,lsf.los_det_cd
2807 ,lsf.los_dt_to_use_cd
2808 ,lsf.use_overid_svc_dt_flag
2809 ,lsf.los_uom
2810 ,lsf.los_det_rl
2811 ,lsf.los_dt_to_use_rl
2812 ,lsf.los_calc_rl
2813 ,lsf.rndg_cd
2814 ,lsf.rndg_rl
2815 ,lsf.mn_los_num
2816 ,lsf.mx_los_num
2817 FROM ben_los_fctr lsf
2818 ,ben_los_rt_f lsr
2819 ,ben_vrbl_rt_prfl_f vpf
2820 ,ben_acty_vrbl_rt_f avr
2821 ,ben_acty_base_rt_f abr
2822 WHERE abr.oiplip_id = p_oiplip_id
2823 AND p_effective_date BETWEEN abr.effective_start_date
2824 AND abr.effective_end_date
2825 AND abr.acty_base_rt_id = avr.acty_base_rt_id
2826 AND p_effective_date BETWEEN avr.effective_start_date
2827 AND avr.effective_end_date
2828 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
2829 AND p_effective_date BETWEEN vpf.effective_start_date
2830 AND vpf.effective_end_date
2831 AND vpf.vrbl_rt_prfl_id = lsr.vrbl_rt_prfl_id
2832 AND p_effective_date BETWEEN lsr.effective_start_date
2833 AND lsr.effective_end_date
2834 AND lsr.los_fctr_id = lsf.los_fctr_id
2835 AND (
2836 (
2837 p_new_val IS NOT NULL
2838 AND p_old_val IS NOT NULL
2839 AND p_new_val >= NVL(lsf.mn_los_num
2840 ,p_new_val)
2841 -- AND p_new_val < ceil( NVL(lsf.mx_los_num
2842 -- ,p_new_val) + 0.001) )
2843 and p_new_val < decode(nvl(lsf.mx_los_num,p_new_val) ,
2844 trunc(nvl(lsf.mx_los_num,p_new_val))
2845 ,decode(nvl(lsf.mn_los_num,p_new_val), trunc(nvl(lsf.mn_los_num,p_new_val)),
2846 nvl(lsf.mx_los_num,p_new_val)+1,nvl(lsf.mx_los_num,p_new_val)+0.000000001),
2847 nvl(lsf.mx_los_num,p_new_val)+0.000000001 ) )
2848 OR (
2849 p_new_val IS NOT NULL
2850 AND p_old_val IS NOT NULL
2851 AND (
2852 p_new_val < NVL(lsf.mn_los_num
2853 ,p_new_val)
2854 -- OR p_new_val >= ceil( NVL(lsf.mx_los_num
2855 -- ,p_new_val))+ 0.001)
2856 OR p_new_val >= decode(nvl(lsf.mx_los_num,p_new_val) ,
2857 trunc(nvl(lsf.mx_los_num,p_new_val))
2858 ,decode(nvl(lsf.mn_los_num,p_new_val), trunc(nvl(lsf.mn_los_num,p_new_val)),
2859 nvl(lsf.mx_los_num,p_new_val)+1,nvl(lsf.mx_los_num,p_new_val)+0.000000001),
2860 nvl(lsf.mx_los_num,p_new_val)+0.000000001 ) )
2861 AND p_old_val >= NVL(lsf.mn_los_num
2862 ,p_old_val)
2863 -- AND p_old_val < ceil( NVL(lsf.mx_los_num
2864 -- ,p_old_val)) + 0.001 )
2865 and p_old_val < decode(nvl(lsf.mx_los_num,p_old_val) ,
2866 trunc(nvl(lsf.mx_los_num,p_old_val))
2867 ,decode(nvl(lsf.mn_los_num,p_old_val), trunc(nvl(lsf.mn_los_num,p_old_val)),
2868 nvl(lsf.mx_los_num,p_old_val)+1,nvl(lsf.mx_los_num,p_old_val)+0.000000001),
2869 nvl(lsf.mx_los_num,p_old_val)+0.000000001 ) )
2870 OR ( p_new_val IS NULL
2871 AND p_old_val IS NULL));
2872 -- PERFNEW. SPLIT TO 2 CURSORS C1 and C2.
2873 --UNION ALL
2874 CURSOR c2 IS
2875 SELECT p_oiplip_id
2876 ,'Y'
2877 ,lsf.los_det_cd
2878 ,lsf.los_dt_to_use_cd
2879 ,lsf.use_overid_svc_dt_flag
2880 ,lsf.los_uom
2881 ,lsf.los_det_rl
2882 ,lsf.los_dt_to_use_rl
2883 ,lsf.los_calc_rl
2884 ,lsf.rndg_cd
2885 ,lsf.rndg_rl
2886 ,lsf.mn_los_num
2887 ,lsf.mx_los_num
2888 FROM ben_los_fctr lsf
2889 --,ben_los_rt_f lsr
2893 ,ben_vrbl_rt_prfl_f vpf
2890 ,ben_elig_los_prte_f els
2891 ,ben_eligy_prfl_f elp
2892 ,ben_vrbl_rt_elig_prfl_f vep
2894 ,ben_acty_vrbl_rt_f avr
2895 ,ben_acty_base_rt_f abr
2896 WHERE abr.oiplip_id = p_oiplip_id
2897 AND p_effective_date BETWEEN abr.effective_start_date
2898 AND abr.effective_end_date
2899 AND abr.acty_base_rt_id = avr.acty_base_rt_id
2900 AND p_effective_date BETWEEN avr.effective_start_date
2901 AND avr.effective_end_date
2902 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
2903 AND p_effective_date BETWEEN vpf.effective_start_date
2904 AND vpf.effective_end_date
2905 -- AND vpf.vrbl_rt_prfl_id = els.vrbl_rt_prfl_id
2906 AND vpf.vrbl_rt_prfl_id = vep.vrbl_rt_prfl_id
2907 AND p_effective_date BETWEEN vep.effective_start_date
2908 AND vep.effective_end_date
2909 AND vep.eligy_prfl_id = elp.eligy_prfl_id
2910 AND p_effective_date BETWEEN elp.effective_start_date
2911 AND elp.effective_end_date
2912 AND els.eligy_prfl_id = elp.eligy_prfl_id
2913 AND p_effective_date BETWEEN els.effective_start_date
2914 AND els.effective_end_date
2915 AND p_effective_date BETWEEN els.effective_start_date
2916 AND els.effective_end_date
2917 AND els.los_fctr_id = lsf.los_fctr_id
2918 AND (
2919 (
2920 p_new_val IS NOT NULL
2921 AND p_old_val IS NOT NULL
2922 AND p_new_val >= NVL(lsf.mn_los_num
2923 ,p_new_val)
2924 -- AND p_new_val < ceil( NVL(lsf.mx_los_num
2925 -- ,p_new_val) + 0.001) )
2926 and p_new_val < decode(nvl(lsf.mx_los_num,p_new_val) ,
2927 trunc(nvl(lsf.mx_los_num,p_new_val))
2928 ,decode(nvl(lsf.mn_los_num,p_new_val), trunc(nvl(lsf.mn_los_num,p_new_val)),
2929 nvl(lsf.mx_los_num,p_new_val)+1,nvl(lsf.mx_los_num,p_new_val)+0.000000001),
2930 nvl(lsf.mx_los_num,p_new_val)+0.000000001 ) )
2931 OR (
2932 p_new_val IS NOT NULL
2933 AND p_old_val IS NOT NULL
2934 AND (
2935 p_new_val < NVL(lsf.mn_los_num
2936 ,p_new_val)
2937 -- OR p_new_val >= ceil( NVL(lsf.mx_los_num
2938 -- ,p_new_val))+ 0.001)
2939 OR p_new_val >= decode(nvl(lsf.mx_los_num,p_new_val) ,
2940 trunc(nvl(lsf.mx_los_num,p_new_val))
2941 ,decode(nvl(lsf.mn_los_num,p_new_val), trunc(nvl(lsf.mn_los_num,p_new_val)),
2942 nvl(lsf.mx_los_num,p_new_val)+1,nvl(lsf.mx_los_num,p_new_val)+0.000000001),
2943 nvl(lsf.mx_los_num,p_new_val)+0.000000001 ) )
2944 AND p_old_val >= NVL(lsf.mn_los_num
2945 ,p_old_val)
2946 -- AND p_old_val < ceil( NVL(lsf.mx_los_num
2947 -- ,p_old_val)) + 0.001 )
2948 and p_old_val < decode(nvl(lsf.mx_los_num,p_old_val) ,
2949 trunc(nvl(lsf.mx_los_num,p_old_val))
2950 ,decode(nvl(lsf.mn_los_num,p_old_val), trunc(nvl(lsf.mn_los_num,p_old_val)),
2951 nvl(lsf.mx_los_num,p_old_val)+1,nvl(lsf.mx_los_num,p_old_val)+0.000000001),
2952 nvl(lsf.mx_los_num,p_old_val)+0.000000001 ) )
2953 OR ( p_new_val IS NULL
2954 AND p_old_val IS NULL));
2955 --
2956 --
2957 l_index PLS_INTEGER;
2958 l_not_hash_found BOOLEAN;
2962 --
2959 l_c2notfound BOOLEAN;
2960 --
2961 BEGIN
2963 -- hr_utility.set_location ('Entering '||l_package,10);
2964 --
2965 -- Steps to do process
2966 --
2967 -- 1) Try and get value from cache
2968 -- 2) If can get from cache then copy to output record
2969 -- 3) If can't get from cache do db hit and then
2970 -- copy to cache record and then copy to output record.
2971 --
2972 -- Get hashed index value
2973 --
2974 l_index := MOD(p_oiplip_id
2975 ,g_hash_key);
2976 --
2977 IF NOT g_cache_oiplip_los_rt_rec.EXISTS(l_index) THEN
2978 --
2979 -- Lets store the hash value in this index
2980 --
2981 RAISE NO_DATA_FOUND;
2982 --
2983 ELSE
2984 --
2985 -- If it does exist make sure its the right one
2986 --
2987 IF g_cache_oiplip_los_rt_rec(l_index).id <> p_oiplip_id THEN
2988 --
2989 -- Loop through the hash using the jump routine to check further
2990 -- indexes
2991 --
2992 l_not_hash_found := FALSE;
2993 --
2994 WHILE NOT l_not_hash_found LOOP
2995 --
2996 l_index := l_index + g_hash_jump;
2997 --
2998 -- Check if the hash index exists, if not we can use it
2999 --
3000 IF NOT g_cache_oiplip_los_rt_rec.EXISTS(l_index) THEN
3001 --
3002 -- Lets store the hash value in the index
3003 --
3004 RAISE NO_DATA_FOUND;
3005 --
3006 ELSE
3007 --
3008 -- Make sure the index is the correct one
3009 --
3010 IF g_cache_oiplip_los_rt_rec(l_index).id = p_oiplip_id THEN
3011 --
3012 -- We have a match so the hashed value has been stored before
3013 --
3014 l_not_hash_found := TRUE;
3015 --
3016 END IF;
3017 --
3018 END IF;
3019 --
3020 END LOOP;
3021 --
3022 END IF;
3023 --
3024 END IF;
3025 --
3026 -- If p_old_val and p_new_val is set this means we are trying to retrieve
3027 -- the correct rate for the calculated value.
3028 -- Previously we just cached the first rate we
3029 -- found since we needed the determination code, the correct age,los code,etc
3030 -- By killing the cache and forcing the value to be removed we cache the
3031 -- correct rate profile for the case we need.
3032 --
3033 IF p_old_val IS NOT NULL
3034 AND p_new_val IS NOT NULL THEN
3035 --
3036 RAISE NO_DATA_FOUND;
3037 --
3038 END IF;
3039 --
3040 p_rec := g_cache_oiplip_los_rt_rec(l_index);
3041 --
3042 -- hr_utility.set_location ('Leaving '||l_package,10);
3043 --
3044 EXCEPTION
3045 --
3046 WHEN NO_DATA_FOUND THEN
3047 --
3048 -- The record has not been cached yet so lets cache it
3049 --
3050 OPEN c1;
3051 --
3052 FETCH c1 INTO g_cache_oiplip_los_rt_rec(l_index);
3053 -- PERFNEW
3054 IF c1%NOTFOUND THEN
3055 --
3056 l_c2notfound := false;
3057 OPEN c2;
3058 FETCH c2 INTO g_cache_oiplip_los_rt_rec(l_index);
3059 IF c2%NOTFOUND THEN
3060 --
3061 l_c2notfound := true;
3062 --
3063 END IF;
3064 CLOSE c2;
3065 --
3066 END IF;
3067 -- PERFNEW
3068 IF p_old_val IS NULL
3069 AND p_new_val IS NULL THEN
3070 --
3071 IF c1%NOTFOUND and l_c2notfound THEN -- PERFNEW
3072 --
3073 if NOT g_cache_oiplip_los_rt_rec.EXISTS(l_index) then
3074 g_cache_oiplip_los_rt_rec(l_index).id := p_oiplip_id;
3075 g_cache_oiplip_los_rt_rec(l_index).exist := 'N';
3076 end if;
3077 --
3078 END IF;
3079 --
3080 END IF;
3081 --
3082 p_rec := g_cache_oiplip_los_rt_rec(l_index);
3083 --
3084 CLOSE c1;
3085 --
3086 END get_los_oiplip_rate;
3087 --
3088 PROCEDURE get_los_rate(
3089 p_pgm_id IN NUMBER
3093 ,p_ptip_id IN NUMBER
3090 ,p_pl_id IN NUMBER
3091 ,p_oipl_id IN NUMBER
3092 ,p_plip_id IN NUMBER
3094 ,p_oiplip_id IN NUMBER
3095 ,p_old_val IN NUMBER DEFAULT NULL
3096 ,p_new_val IN NUMBER DEFAULT NULL
3097 ,p_business_group_id IN NUMBER
3098 ,p_effective_date IN DATE
3099 ,p_rec OUT NOCOPY g_cache_los_rec_obj) IS
3100 --
3101 l_package VARCHAR2(80) := g_package || '.get_los_rate';
3102 --
3103 BEGIN
3104 --
3105 -- hr_utility.set_location ('Entering '||l_package,10);
3106 --
3107 -- Derive which data type we are dealing with
3108 --
3109 IF p_pgm_id IS NOT NULL THEN
3110 --
3111 get_los_pgm_rate(p_pgm_id=> p_pgm_id
3112 ,p_old_val => p_old_val
3113 ,p_new_val => p_new_val
3114 ,p_business_group_id => p_business_group_id
3115 ,p_effective_date => p_effective_date
3116 ,p_rec => p_rec);
3117 --
3118 ELSIF p_pl_id IS NOT NULL THEN
3119 --
3120 get_los_pl_rate(p_pl_id=> p_pl_id
3121 ,p_old_val => p_old_val
3122 ,p_new_val => p_new_val
3123 ,p_business_group_id => p_business_group_id
3124 ,p_effective_date => p_effective_date
3125 ,p_rec => p_rec);
3126 --
3127 ELSIF p_oipl_id IS NOT NULL THEN
3128 --
3129 get_los_oipl_rate(p_oipl_id=> p_oipl_id
3130 ,p_old_val => p_old_val
3131 ,p_new_val => p_new_val
3132 ,p_business_group_id => p_business_group_id
3133 ,p_effective_date => p_effective_date
3134 ,p_rec => p_rec);
3135 --
3136 ELSIF p_plip_id IS NOT NULL THEN
3137 --
3138 get_los_plip_rate(p_plip_id=> p_plip_id
3139 ,p_old_val => p_old_val
3140 ,p_new_val => p_new_val
3141 ,p_business_group_id => p_business_group_id
3142 ,p_effective_date => p_effective_date
3143 ,p_rec => p_rec);
3144 --
3145 ELSIF p_ptip_id IS NOT NULL THEN
3146 --
3147 get_los_ptip_rate(p_ptip_id=> p_ptip_id
3148 ,p_old_val => p_old_val
3149 ,p_new_val => p_new_val
3150 ,p_business_group_id => p_business_group_id
3151 ,p_effective_date => p_effective_date
3152 ,p_rec => p_rec);
3153 --
3154 ELSIF p_oiplip_id IS NOT NULL THEN
3155 --
3156 get_los_oiplip_rate(p_oiplip_id=> p_oiplip_id
3157 ,p_old_val => p_old_val
3158 ,p_new_val => p_new_val
3159 ,p_business_group_id => p_business_group_id
3160 ,p_effective_date => p_effective_date
3161 ,p_rec => p_rec);
3162 --
3163 END IF;
3164 --
3165 -- hr_utility.set_location ('Leaving '||l_package,10);
3166 --
3167 END get_los_rate;
3168 --
3169 PROCEDURE get_age_pgm_elig(
3170 p_pgm_id IN NUMBER
3174 ,p_effective_date IN DATE
3171 ,p_old_val in number default null
3172 ,p_new_val in number default null
3173 ,p_business_group_id IN NUMBER
3175 ,p_rec OUT NOCOPY g_cache_age_rec_obj) IS
3176 --
3177 l_package VARCHAR2(80) := g_package || '.get_age_pgm_elig';
3178 --
3179 -- Define Cursor
3180 --
3181 CURSOR c1 IS
3182 SELECT p_pgm_id
3183 ,'Y'
3184 ,agf.age_det_cd
3185 ,agf.age_to_use_cd
3186 ,agf.age_uom
3187 ,agf.age_det_rl
3188 ,agf.rndg_cd
3189 ,agf.rndg_rl
3190 ,agf.age_calc_rl
3191 ,agf.mn_age_num
3192 ,agf.mx_age_num
3193 FROM ben_age_fctr agf
3194 ,ben_elig_age_prte_f eap
3195 ,ben_eligy_prfl_f elp
3196 ,ben_prtn_elig_prfl_f cep
3197 ,ben_prtn_elig_f epa
3198 WHERE epa.pgm_id = p_pgm_id
3199 AND p_effective_date BETWEEN epa.effective_start_date
3200 AND epa.effective_end_date
3201 AND epa.prtn_elig_id = cep.prtn_elig_id
3202 AND p_effective_date BETWEEN cep.effective_start_date
3203 AND cep.effective_end_date
3204 AND cep.eligy_prfl_id = elp.eligy_prfl_id
3205 AND p_effective_date BETWEEN elp.effective_start_date
3206 AND elp.effective_end_date
3207 AND eap.eligy_prfl_id = elp.eligy_prfl_id
3208 AND p_effective_date BETWEEN eap.effective_start_date
3209 AND eap.effective_end_date
3210 AND eap.age_fctr_id = agf.age_fctr_id
3211 AND (
3212 (
3213 p_new_val IS NOT NULL
3214 AND p_old_val IS NOT NULL
3215 AND p_new_val >= NVL(agf.mn_age_num ,p_new_val)
3216 and p_new_val < decode(nvl(agf.mx_age_num,p_new_val) ,
3217 trunc(nvl(agf.mx_age_num,p_new_val))
3218 ,decode(nvl(agf.mn_age_num,p_new_val), trunc(nvl(agf.mn_age_num,p_new_val)),
3219 nvl(agf.mx_age_num,p_new_val)+1,nvl(agf.mx_age_num,p_new_val)+0.000000001),
3220 nvl(agf.mx_age_num,p_new_val)+0.000000001 )
3221 -- and p_old_val < agf.mn_age_num
3222 )
3223 OR
3224 (
3225 p_new_val IS NOT NULL
3226 AND p_old_val IS NOT NULL
3227 AND
3228 (
3229 p_new_val < NVL(agf.mn_age_num,p_new_val)
3230 OR
3231 p_new_val >= decode(nvl(agf.mx_age_num,p_new_val) ,
3232 trunc(nvl(agf.mx_age_num,p_new_val))
3233 ,decode(nvl(agf.mn_age_num,p_new_val), trunc(nvl(agf.mn_age_num,p_new_val)),
3234 nvl(agf.mx_age_num,p_new_val)+1,nvl(agf.mx_age_num,p_new_val)+0.000000001),
3235 nvl(agf.mx_age_num,p_new_val)+0.000000001 )
3236 )
3237 AND p_old_val >= NVL(agf.mn_age_num ,p_old_val)
3238 and p_old_val < decode(nvl(agf.mx_age_num,p_old_val) ,
3239 trunc(nvl(agf.mx_age_num,p_old_val))
3240 ,decode(nvl(agf.mn_age_num,p_old_val), trunc(nvl(agf.mn_age_num,p_old_val)),
3241 nvl(agf.mx_age_num,p_old_val)+1,nvl(agf.mx_age_num,p_old_val)+0.000000001),
3242 nvl(agf.mx_age_num,p_old_val)+0.000000001 )
3243 )
3244 OR
3245 ( p_new_val IS NULL
3246 AND p_old_val IS NULL
3247 )
3248 );
3249
3250 --
3251 l_index PLS_INTEGER;
3252 l_not_hash_found BOOLEAN;
3253 --
3254 BEGIN
3255 --
3256 -- hr_utility.set_location ('Entering '||l_package,10);
3257 --
3258 -- Steps to do process
3259 --
3260 -- 1) Try and get value from cache
3261 -- 2) If can get from cache then copy to output record
3262 -- 3) If can't get from cache do db hit and then
3263 -- copy to cache record and then copy to output record.
3264 --
3265 -- Get hashed index value
3266 --
3267 l_index := MOD(p_pgm_id
3268 ,g_hash_key);
3269 --
3270 IF NOT g_cache_pgm_age_el_rec.EXISTS(l_index) THEN
3271 --
3272 -- Lets store the hash value in this index
3273 --
3274 RAISE NO_DATA_FOUND;
3275 --
3276 ELSE
3277 --
3278 -- If it does exist make sure its the right one
3279 --
3280 IF g_cache_pgm_age_el_rec(l_index).id <> p_pgm_id THEN
3281 --
3282 -- Loop through the hash using the jump routine to check further
3283 -- indexes
3284 --
3285 l_not_hash_found := FALSE;
3286 --
3287 WHILE NOT l_not_hash_found LOOP
3288 --
3289 l_index := l_index + g_hash_jump;
3290 --
3291 -- Check if the hash index exists, if not we can use it
3292 --
3293 IF NOT g_cache_pgm_age_el_rec.EXISTS(l_index) THEN
3294 --
3298 --
3295 -- Lets store the hash value in the index
3296 --
3297 RAISE NO_DATA_FOUND;
3299 ELSE
3300 --
3301 -- Make sure the index is the correct one
3302 --
3303 IF g_cache_pgm_age_el_rec(l_index).id = p_pgm_id THEN
3304 --
3305 -- We have a match so the hashed value has been stored before
3306 --
3307 l_not_hash_found := TRUE;
3308 --
3309 END IF;
3310 --
3311 END IF;
3312 --
3313 END LOOP;
3314 --
3315 END IF;
3316 --
3317 END IF;
3318 --
3319 IF p_old_val IS NOT NULL
3320 AND p_new_val IS NOT NULL THEN
3321 --
3322 RAISE NO_DATA_FOUND;
3323 --
3324 END IF;
3325
3326 p_rec := g_cache_pgm_age_el_rec(l_index);
3327 --
3328 -- hr_utility.set_location ('Leaving '||l_package,10);
3329 --
3330 EXCEPTION
3331 --
3332 WHEN NO_DATA_FOUND THEN
3333 --
3334 -- The record has not been cached yet so lets cache it
3335 --
3336 OPEN c1;
3337 --
3338 FETCH c1 INTO g_cache_pgm_age_el_rec(l_index);
3339 IF c1%NOTFOUND THEN
3340 --
3341 if NOT g_cache_pgm_age_el_rec.EXISTS(l_index) then
3342 g_cache_pgm_age_el_rec(l_index).id := p_pgm_id;
3343 g_cache_pgm_age_el_rec(l_index).exist := 'N';
3344 end if;
3345 --
3346 END IF;
3347 --
3348 p_rec := g_cache_pgm_age_el_rec(l_index);
3349 --
3350 CLOSE c1;
3351 --
3352 END get_age_pgm_elig;
3353 --
3354 PROCEDURE get_age_pl_elig(
3355 p_pl_id IN NUMBER
3356 ,p_old_val in number default null
3357 ,p_new_val in number default null
3358 ,p_business_group_id IN NUMBER
3359 ,p_effective_date IN DATE
3360 ,p_rec OUT NOCOPY g_cache_age_rec_obj) IS
3361 --
3362 l_package VARCHAR2(80) := g_package || '.get_age_pl_elig';
3363 --
3364 -- Define Cursor
3365 --
3366 CURSOR c1 IS
3367 SELECT p_pl_id
3368 ,'Y'
3369 ,agf.age_det_cd
3370 ,agf.age_to_use_cd
3371 ,agf.age_uom
3372 ,agf.age_det_rl
3373 ,agf.rndg_cd
3374 ,agf.rndg_rl
3375 ,agf.age_calc_rl
3376 ,agf.mn_age_num
3377 ,agf.mx_age_num
3378 FROM ben_age_fctr agf
3379 ,ben_elig_age_prte_f eap
3380 ,ben_eligy_prfl_f elp
3381 ,ben_prtn_elig_prfl_f cep
3382 ,ben_prtn_elig_f epa
3383 WHERE epa.pl_id = p_pl_id
3384 AND p_effective_date BETWEEN epa.effective_start_date
3385 AND epa.effective_end_date
3386 AND epa.prtn_elig_id = cep.prtn_elig_id
3387 AND p_effective_date BETWEEN cep.effective_start_date
3388 AND cep.effective_end_date
3389 AND cep.eligy_prfl_id = elp.eligy_prfl_id
3390 AND p_effective_date BETWEEN elp.effective_start_date
3391 AND elp.effective_end_date
3392 AND eap.eligy_prfl_id = elp.eligy_prfl_id
3393 AND p_effective_date BETWEEN eap.effective_start_date
3394 AND eap.effective_end_date
3395 AND eap.age_fctr_id = agf.age_fctr_id
3396 AND (
3397 (
3398 p_new_val IS NOT NULL
3399 AND p_old_val IS NOT NULL
3400 AND p_new_val >= NVL(agf.mn_age_num ,p_new_val)
3401 and p_new_val < decode(nvl(agf.mx_age_num,p_new_val) ,
3402 trunc(nvl(agf.mx_age_num,p_new_val))
3403 ,decode(nvl(agf.mn_age_num,p_new_val), trunc(nvl(agf.mn_age_num,p_new_val)),
3404 nvl(agf.mx_age_num,p_new_val)+1,nvl(agf.mx_age_num,p_new_val)+0.000000001),
3405 nvl(agf.mx_age_num,p_new_val)+0.000000001 )
3406 -- and p_old_val < agf.mn_age_num
3407 )
3408 OR
3409 (
3410 p_new_val IS NOT NULL
3411 AND p_old_val IS NOT NULL
3412 AND
3413 (
3414 p_new_val < NVL(agf.mn_age_num,p_new_val)
3415 OR
3416 p_new_val >= decode(nvl(agf.mx_age_num,p_new_val) ,
3417 trunc(nvl(agf.mx_age_num,p_new_val))
3418 ,decode(nvl(agf.mn_age_num,p_new_val), trunc(nvl(agf.mn_age_num,p_new_val)),
3419 nvl(agf.mx_age_num,p_new_val)+1,nvl(agf.mx_age_num,p_new_val)+0.000000001),
3420 nvl(agf.mx_age_num,p_new_val)+0.000000001 )
3421 )
3422 AND p_old_val >= NVL(agf.mn_age_num ,p_old_val)
3423 and p_old_val < decode(nvl(agf.mx_age_num,p_old_val) ,
3424 trunc(nvl(agf.mx_age_num,p_old_val))
3425 ,decode(nvl(agf.mn_age_num,p_old_val), trunc(nvl(agf.mn_age_num,p_old_val)),
3426 nvl(agf.mx_age_num,p_old_val)+1,nvl(agf.mx_age_num,p_old_val)+0.000000001),
3430 ( p_new_val IS NULL
3427 nvl(agf.mx_age_num,p_old_val)+0.000000001 )
3428 )
3429 OR
3431 AND p_old_val IS NULL
3432 )
3433 );
3434
3435 --
3436 l_index PLS_INTEGER;
3437 l_not_hash_found BOOLEAN;
3438 --
3439 BEGIN
3440 --
3441 -- hr_utility.set_location ('Entering '||l_package,10);
3442 --
3443 -- Steps to do process
3444 --
3445 -- 1) Try and get value from cache
3446 -- 2) If can get from cache then copy to output record
3447 -- 3) If can't get from cache do db hit and then
3448 -- copy to cache record and then copy to output record.
3449 --
3450 -- Get hashed index value
3451 --
3452 l_index := MOD(p_pl_id
3453 ,g_hash_key);
3454 --
3455 IF NOT g_cache_pl_age_el_rec.EXISTS(l_index) THEN
3456 --
3457 -- Lets store the hash value in this index
3458 --
3459 RAISE NO_DATA_FOUND;
3460 --
3461 ELSE
3462 --
3463 -- If it does exist make sure its the right one
3464 --
3465 IF g_cache_pl_age_el_rec(l_index).id <> p_pl_id THEN
3466 --
3467 -- Loop through the hash using the jump routine to check further
3468 -- indexes
3469 --
3470 l_not_hash_found := FALSE;
3471 --
3472 WHILE NOT l_not_hash_found LOOP
3473 --
3474 l_index := l_index + g_hash_jump;
3475 --
3476 -- Check if the hash index exists, if not we can use it
3477 --
3478 IF NOT g_cache_pl_age_el_rec.EXISTS(l_index) THEN
3479 --
3480 -- Lets store the hash value in the index
3481 --
3482 RAISE NO_DATA_FOUND;
3483 --
3484 ELSE
3485 --
3486 -- Make sure the index is the correct one
3487 --
3488 IF g_cache_pl_age_el_rec(l_index).id = p_pl_id THEN
3489 --
3490 -- We have a match so the hashed value has been stored before
3491 --
3492 l_not_hash_found := TRUE;
3493 --
3494 END IF;
3495 --
3496 END IF;
3497 --
3498 END LOOP;
3499 --
3500 END IF;
3501 --
3502 END IF;
3503 --
3504 IF p_old_val IS NOT NULL
3505 AND p_new_val IS NOT NULL THEN
3506 --
3507 RAISE NO_DATA_FOUND;
3508 --
3509 END IF;
3510 p_rec := g_cache_pl_age_el_rec(l_index);
3511 --
3512 -- hr_utility.set_location ('Leaving '||l_package,10);
3513 --
3514 EXCEPTION
3515 --
3516 WHEN NO_DATA_FOUND THEN
3517 --
3518 -- The record has not been cached yet so lets cache it
3519 --
3520 OPEN c1;
3521 --
3522 FETCH c1 INTO g_cache_pl_age_el_rec(l_index);
3523 IF c1%NOTFOUND THEN
3524 --
3525 if NOT g_cache_pl_age_el_rec.EXISTS(l_index) then
3526 g_cache_pl_age_el_rec(l_index).id := p_pl_id;
3527 g_cache_pl_age_el_rec(l_index).exist := 'N';
3528 end if;
3529 --
3530 END IF;
3531 --
3532 p_rec := g_cache_pl_age_el_rec(l_index);
3533 --
3534 CLOSE c1;
3535 --
3536 END get_age_pl_elig;
3537 --
3538 PROCEDURE get_age_oipl_elig(
3539 p_oipl_id IN NUMBER
3540 ,p_old_val in number default null
3541 ,p_new_val in number default null
3542 ,p_business_group_id IN NUMBER
3543 ,p_effective_date IN DATE
3544 ,p_rec OUT NOCOPY g_cache_age_rec_obj) IS
3545 --
3546 l_package VARCHAR2(80) := g_package || '.get_age_oipl_elig';
3547 --
3548 -- Define Cursor
3549 --
3550 CURSOR c1 IS
3551 SELECT p_oipl_id
3552 ,'Y'
3553 ,agf.age_det_cd
3554 ,agf.age_to_use_cd
3555 ,agf.age_uom
3556 ,agf.age_det_rl
3557 ,agf.rndg_cd
3558 ,agf.rndg_rl
3559 ,agf.age_calc_rl
3560 ,agf.mn_age_num
3561 ,agf.mx_age_num
3562 FROM ben_age_fctr agf
3563 ,ben_elig_age_prte_f eap
3564 ,ben_eligy_prfl_f elp
3565 ,ben_prtn_elig_prfl_f cep
3566 ,ben_prtn_elig_f epa
3567 WHERE epa.oipl_id = p_oipl_id
3568 AND p_effective_date BETWEEN epa.effective_start_date
3569 AND epa.effective_end_date
3570 AND epa.prtn_elig_id = cep.prtn_elig_id
3571 AND p_effective_date BETWEEN cep.effective_start_date
3572 AND cep.effective_end_date
3573 AND cep.eligy_prfl_id = elp.eligy_prfl_id
3574 AND p_effective_date BETWEEN elp.effective_start_date
3575 AND elp.effective_end_date
3576 AND eap.eligy_prfl_id = elp.eligy_prfl_id
3577 AND p_effective_date BETWEEN eap.effective_start_date
3581 (
3578 AND eap.effective_end_date
3579 AND eap.age_fctr_id = agf.age_fctr_id
3580 AND (
3582 p_new_val IS NOT NULL
3583 AND p_old_val IS NOT NULL
3584 AND p_new_val >= NVL(agf.mn_age_num ,p_new_val)
3585 and p_new_val < decode(nvl(agf.mx_age_num,p_new_val) ,
3586 trunc(nvl(agf.mx_age_num,p_new_val))
3587 ,decode(nvl(agf.mn_age_num,p_new_val), trunc(nvl(agf.mn_age_num,p_new_val)),
3588 nvl(agf.mx_age_num,p_new_val)+1,nvl(agf.mx_age_num,p_new_val)+0.000000001),
3589 nvl(agf.mx_age_num,p_new_val)+0.000000001 )
3590 -- and p_old_val < agf.mn_age_num
3591 )
3592 OR
3593 (
3594 p_new_val IS NOT NULL
3595 AND p_old_val IS NOT NULL
3596 AND
3597 (
3598 p_new_val < NVL(agf.mn_age_num,p_new_val)
3599 OR
3600 p_new_val >= decode(nvl(agf.mx_age_num,p_new_val) ,
3601 trunc(nvl(agf.mx_age_num,p_new_val))
3602 ,decode(nvl(agf.mn_age_num,p_new_val), trunc(nvl(agf.mn_age_num,p_new_val)),
3603 nvl(agf.mx_age_num,p_new_val)+1,nvl(agf.mx_age_num,p_new_val)+0.000000001),
3604 nvl(agf.mx_age_num,p_new_val)+0.000000001 )
3605 )
3606 AND p_old_val >= NVL(agf.mn_age_num ,p_old_val)
3607 and p_old_val < decode(nvl(agf.mx_age_num,p_old_val) ,
3608 trunc(nvl(agf.mx_age_num,p_old_val))
3609 ,decode(nvl(agf.mn_age_num,p_old_val), trunc(nvl(agf.mn_age_num,p_old_val)),
3610 nvl(agf.mx_age_num,p_old_val)+1,nvl(agf.mx_age_num,p_old_val)+0.000000001),
3611 nvl(agf.mx_age_num,p_old_val)+0.000000001 )
3612 )
3613 OR
3614 ( p_new_val IS NULL
3615 AND p_old_val IS NULL
3616 )
3617 );
3618
3619 --
3620 l_index PLS_INTEGER;
3621 l_not_hash_found BOOLEAN;
3622 --
3623 BEGIN
3624 --
3625 -- hr_utility.set_location ('Entering '||l_package,10);
3626 --
3627 -- Steps to do process
3628 --
3629 -- 1) Try and get value from cache
3630 -- 2) If can get from cache then copy to output record
3631 -- 3) If can't get from cache do db hit and then
3632 -- copy to cache record and then copy to output record.
3633 --
3634 -- Get hashed index value
3635 --
3636 l_index := MOD(p_oipl_id
3637 ,g_hash_key);
3638 --
3639 IF NOT g_cache_oipl_age_el_rec.EXISTS(l_index) THEN
3640 --
3641 -- Lets store the hash value in this index
3642 --
3643 RAISE NO_DATA_FOUND;
3644 --
3645 ELSE
3646 --
3647 -- If it does exist make sure its the right one
3648 --
3649 IF g_cache_oipl_age_el_rec(l_index).id <> p_oipl_id THEN
3650 --
3651 -- Loop through the hash using the jump routine to check further
3652 -- indexes
3653 --
3654 l_not_hash_found := FALSE;
3655 --
3656 WHILE NOT l_not_hash_found LOOP
3657 --
3658 l_index := l_index + g_hash_jump;
3659 --
3660 -- Check if the hash index exists, if not we can use it
3661 --
3662 IF NOT g_cache_oipl_age_el_rec.EXISTS(l_index) THEN
3663 --
3664 -- Lets store the hash value in the index
3665 --
3666 RAISE NO_DATA_FOUND;
3667 --
3668 ELSE
3669 --
3670 -- Make sure the index is the correct one
3671 --
3672 IF g_cache_oipl_age_el_rec(l_index).id = p_oipl_id THEN
3673 --
3674 -- We have a match so the hashed value has been stored before
3675 --
3676 l_not_hash_found := TRUE;
3677 --
3678 END IF;
3679 --
3680 END IF;
3681 --
3682 END LOOP;
3683 --
3684 END IF;
3685 --
3686 END IF;
3687 --
3688 IF p_old_val IS NOT NULL
3689 AND p_new_val IS NOT NULL THEN
3690 --
3691 RAISE NO_DATA_FOUND;
3692 --
3693 END IF;
3694 p_rec := g_cache_oipl_age_el_rec(l_index);
3695 --
3696 -- hr_utility.set_location ('Leaving '||l_package,10);
3697 --
3698 EXCEPTION
3699 --
3700 WHEN NO_DATA_FOUND THEN
3701 --
3702 -- The record has not been cached yet so lets cache it
3703 --
3704 OPEN c1;
3705 --
3706 FETCH c1 INTO g_cache_oipl_age_el_rec(l_index);
3707 IF c1%NOTFOUND THEN
3708 --
3709 if NOT g_cache_oipl_age_el_rec.EXISTS(l_index) then
3710 g_cache_oipl_age_el_rec(l_index).id := p_oipl_id;
3711 g_cache_oipl_age_el_rec(l_index).exist := 'N';
3712 end if;
3713 --
3714 END IF;
3715 --
3719 --
3716 p_rec := g_cache_oipl_age_el_rec(l_index);
3717 --
3718 CLOSE c1;
3720 END get_age_oipl_elig;
3721 --
3722 PROCEDURE get_age_plip_elig(
3723 p_plip_id IN NUMBER
3724 ,p_old_val in number default null
3725 ,p_new_val in number default null
3726 ,p_business_group_id IN NUMBER
3727 ,p_effective_date IN DATE
3728 ,p_rec OUT NOCOPY g_cache_age_rec_obj) IS
3729 --
3730 l_package VARCHAR2(80) := g_package || '.get_age_plip_elig';
3731 --
3732 -- Define Cursor
3733 --
3734 CURSOR c1 IS
3735 SELECT p_plip_id
3736 ,'Y'
3737 ,agf.age_det_cd
3738 ,agf.age_to_use_cd
3739 ,agf.age_uom
3740 ,agf.age_det_rl
3741 ,agf.rndg_cd
3742 ,agf.rndg_rl
3743 ,agf.age_calc_rl
3744 ,agf.mn_age_num
3745 ,agf.mx_age_num
3746 FROM ben_age_fctr agf
3747 ,ben_elig_age_prte_f eap
3748 ,ben_eligy_prfl_f elp
3749 ,ben_prtn_elig_prfl_f cep
3750 ,ben_prtn_elig_f epa
3751 WHERE epa.plip_id = p_plip_id
3752 AND p_effective_date BETWEEN epa.effective_start_date
3753 AND epa.effective_end_date
3754 AND epa.prtn_elig_id = cep.prtn_elig_id
3755 AND p_effective_date BETWEEN cep.effective_start_date
3756 AND cep.effective_end_date
3757 AND cep.eligy_prfl_id = elp.eligy_prfl_id
3758 AND p_effective_date BETWEEN elp.effective_start_date
3759 AND elp.effective_end_date
3760 AND eap.eligy_prfl_id = elp.eligy_prfl_id
3761 AND p_effective_date BETWEEN eap.effective_start_date
3762 AND eap.effective_end_date
3763 AND eap.age_fctr_id = agf.age_fctr_id
3764 AND (
3765 (
3766 p_new_val IS NOT NULL
3767 AND p_old_val IS NOT NULL
3768 AND p_new_val >= NVL(agf.mn_age_num ,p_new_val)
3769 and p_new_val < decode(nvl(agf.mx_age_num,p_new_val) ,
3770 trunc(nvl(agf.mx_age_num,p_new_val))
3771 ,decode(nvl(agf.mn_age_num,p_new_val), trunc(nvl(agf.mn_age_num,p_new_val)),
3772 nvl(agf.mx_age_num,p_new_val)+1,nvl(agf.mx_age_num,p_new_val)+0.000000001),
3773 nvl(agf.mx_age_num,p_new_val)+0.000000001 )
3774 -- and p_old_val < agf.mn_age_num
3775 )
3776 OR
3777 (
3778 p_new_val IS NOT NULL
3779 AND p_old_val IS NOT NULL
3780 AND
3781 (
3782 p_new_val < NVL(agf.mn_age_num,p_new_val)
3783 OR
3784 p_new_val >= decode(nvl(agf.mx_age_num,p_new_val) ,
3785 trunc(nvl(agf.mx_age_num,p_new_val))
3786 ,decode(nvl(agf.mn_age_num,p_new_val), trunc(nvl(agf.mn_age_num,p_new_val)),
3787 nvl(agf.mx_age_num,p_new_val)+1,nvl(agf.mx_age_num,p_new_val)+0.000000001),
3788 nvl(agf.mx_age_num,p_new_val)+0.000000001 )
3789 )
3790 AND p_old_val >= NVL(agf.mn_age_num ,p_old_val)
3791 and p_old_val < decode(nvl(agf.mx_age_num,p_old_val) ,
3792 trunc(nvl(agf.mx_age_num,p_old_val))
3793 ,decode(nvl(agf.mn_age_num,p_old_val), trunc(nvl(agf.mn_age_num,p_old_val)),
3794 nvl(agf.mx_age_num,p_old_val)+1,nvl(agf.mx_age_num,p_old_val)+0.000000001),
3795 nvl(agf.mx_age_num,p_old_val)+0.000000001 )
3796 )
3797 OR
3798 ( p_new_val IS NULL
3799 AND p_old_val IS NULL
3800 )
3801 );
3802
3803 --
3804 l_index PLS_INTEGER;
3805 l_not_hash_found BOOLEAN;
3806 --
3807 BEGIN
3808 --
3809 -- hr_utility.set_location ('Entering '||l_package,10);
3810 --
3811 -- Steps to do process
3812 --
3813 -- 1) Try and get value from cache
3814 -- 2) If can get from cache then copy to output record
3815 -- 3) If can't get from cache do db hit and then
3816 -- copy to cache record and then copy to output record.
3817 --
3818 -- Get hashed index value
3819 --
3820 l_index := MOD(p_plip_id
3821 ,g_hash_key);
3822 --
3823 IF NOT g_cache_plip_age_el_rec.EXISTS(l_index) THEN
3824 --
3825 -- Lets store the hash value in this index
3826 --
3827 RAISE NO_DATA_FOUND;
3828 --
3829 ELSE
3830 --
3831 -- If it does exist make sure its the right one
3832 --
3833 IF g_cache_plip_age_el_rec(l_index).id <> p_plip_id THEN
3834 --
3835 -- Loop through the hash using the jump routine to check further
3836 -- indexes
3837 --
3838 l_not_hash_found := FALSE;
3839 --
3840 WHILE NOT l_not_hash_found LOOP
3844 -- Check if the hash index exists, if not we can use it
3841 --
3842 l_index := l_index + g_hash_jump;
3843 --
3845 --
3846 IF NOT g_cache_plip_age_el_rec.EXISTS(l_index) THEN
3847 --
3848 -- Lets store the hash value in the index
3849 --
3850 RAISE NO_DATA_FOUND;
3851 --
3852 ELSE
3853 --
3854 -- Make sure the index is the correct one
3855 --
3856 IF g_cache_plip_age_el_rec(l_index).id = p_plip_id THEN
3857 --
3858 -- We have a match so the hashed value has been stored before
3859 --
3860 l_not_hash_found := TRUE;
3861 --
3862 END IF;
3863 --
3864 END IF;
3865 --
3866 END LOOP;
3867 --
3868 END IF;
3869 --
3870 END IF;
3871 --
3872 IF p_old_val IS NOT NULL
3873 AND p_new_val IS NOT NULL THEN
3874 --
3875 RAISE NO_DATA_FOUND;
3876 --
3877 END IF;
3878 p_rec := g_cache_plip_age_el_rec(l_index);
3879 --
3880 -- hr_utility.set_location ('Leaving '||l_package,10);
3881 --
3882 EXCEPTION
3883 --
3884 WHEN NO_DATA_FOUND THEN
3885 --
3886 -- The record has not been cached yet so lets cache it
3887 --
3888 OPEN c1;
3889 --
3890 FETCH c1 INTO g_cache_plip_age_el_rec(l_index);
3891 IF c1%NOTFOUND THEN
3892 --
3893 if NOT g_cache_plip_age_el_rec.EXISTS(l_index) then
3894 g_cache_plip_age_el_rec(l_index).id := p_plip_id;
3895 g_cache_plip_age_el_rec(l_index).exist := 'N';
3896 end if;
3897 --
3898 END IF;
3899 --
3900 p_rec := g_cache_plip_age_el_rec(l_index);
3901 --
3902 CLOSE c1;
3903 --
3904 END get_age_plip_elig;
3905 --
3906 PROCEDURE get_age_ptip_elig(
3907 p_ptip_id IN NUMBER
3908 ,p_old_val in number default null
3909 ,p_new_val in number default null
3910 ,p_business_group_id IN NUMBER
3911 ,p_effective_date IN DATE
3912 ,p_rec OUT NOCOPY g_cache_age_rec_obj) IS
3913 --
3914 l_package VARCHAR2(80) := g_package || '.get_age_ptip_elig';
3915 --
3916 -- Define Cursor
3917 --
3918 CURSOR c1 IS
3919 SELECT p_ptip_id
3920 ,'Y'
3921 ,agf.age_det_cd
3922 ,agf.age_to_use_cd
3923 ,agf.age_uom
3924 ,agf.age_det_rl
3925 ,agf.rndg_cd
3926 ,agf.rndg_rl
3927 ,agf.age_calc_rl
3928 ,agf.mn_age_num
3929 ,agf.mx_age_num
3930 FROM ben_age_fctr agf
3931 ,ben_elig_age_prte_f eap
3932 ,ben_eligy_prfl_f elp
3933 ,ben_prtn_elig_prfl_f cep
3934 ,ben_prtn_elig_f epa
3935 WHERE epa.ptip_id = p_ptip_id
3936 AND p_effective_date BETWEEN epa.effective_start_date
3937 AND epa.effective_end_date
3938 AND epa.prtn_elig_id = cep.prtn_elig_id
3939 AND p_effective_date BETWEEN cep.effective_start_date
3940 AND cep.effective_end_date
3941 AND cep.eligy_prfl_id = elp.eligy_prfl_id
3942 AND p_effective_date BETWEEN elp.effective_start_date
3943 AND elp.effective_end_date
3944 AND eap.eligy_prfl_id = elp.eligy_prfl_id
3945 AND p_effective_date BETWEEN eap.effective_start_date
3946 AND eap.effective_end_date
3947 AND eap.age_fctr_id = agf.age_fctr_id
3948 AND (
3949 (
3950 p_new_val IS NOT NULL
3951 AND p_old_val IS NOT NULL
3952 AND p_new_val >= NVL(agf.mn_age_num ,p_new_val)
3953 and p_new_val < decode(nvl(agf.mx_age_num,p_new_val) ,
3954 trunc(nvl(agf.mx_age_num,p_new_val))
3955 ,decode(nvl(agf.mn_age_num,p_new_val), trunc(nvl(agf.mn_age_num,p_new_val)),
3956 nvl(agf.mx_age_num,p_new_val)+1,nvl(agf.mx_age_num,p_new_val)+0.000000001),
3957 nvl(agf.mx_age_num,p_new_val)+0.000000001 )
3958 -- and p_old_val < agf.mn_age_num
3959 )
3960 OR
3961 (
3962 p_new_val IS NOT NULL
3963 AND p_old_val IS NOT NULL
3964 AND
3965 (
3966 p_new_val < NVL(agf.mn_age_num,p_new_val)
3967 OR
3968 p_new_val >= decode(nvl(agf.mx_age_num,p_new_val) ,
3969 trunc(nvl(agf.mx_age_num,p_new_val))
3970 ,decode(nvl(agf.mn_age_num,p_new_val), trunc(nvl(agf.mn_age_num,p_new_val)),
3971 nvl(agf.mx_age_num,p_new_val)+1,nvl(agf.mx_age_num,p_new_val)+0.000000001),
3972 nvl(agf.mx_age_num,p_new_val)+0.000000001 )
3973 )
3974 AND p_old_val >= NVL(agf.mn_age_num ,p_old_val)
3978 nvl(agf.mx_age_num,p_old_val)+1,nvl(agf.mx_age_num,p_old_val)+0.000000001),
3975 and p_old_val < decode(nvl(agf.mx_age_num,p_old_val) ,
3976 trunc(nvl(agf.mx_age_num,p_old_val))
3977 ,decode(nvl(agf.mn_age_num,p_old_val), trunc(nvl(agf.mn_age_num,p_old_val)),
3979 nvl(agf.mx_age_num,p_old_val)+0.000000001 )
3980 )
3981 OR
3982 ( p_new_val IS NULL
3983 AND p_old_val IS NULL
3984 )
3985 );
3986
3987 --
3988 l_index PLS_INTEGER;
3989 l_not_hash_found BOOLEAN;
3990 --
3991 BEGIN
3992 --
3993 -- hr_utility.set_location ('Entering '||l_package,10);
3994 --
3995 -- Steps to do process
3996 --
3997 -- 1) Try and get value from cache
3998 -- 2) If can get from cache then copy to output record
3999 -- 3) If can't get from cache do db hit and then
4000 -- copy to cache record and then copy to output record.
4001 --
4002 -- Get hashed index value
4003 --
4004 l_index := MOD(p_ptip_id
4005 ,g_hash_key);
4006 --
4007 IF NOT g_cache_ptip_age_el_rec.EXISTS(l_index) THEN
4008 --
4009 -- Lets store the hash value in this index
4010 --
4011 RAISE NO_DATA_FOUND;
4012 --
4013 ELSE
4014 --
4015 -- If it does exist make sure its the right one
4016 --
4017 IF g_cache_ptip_age_el_rec(l_index).id <> p_ptip_id THEN
4018 --
4019 -- Loop through the hash using the jump routine to check further
4020 -- indexes
4021 --
4022 l_not_hash_found := FALSE;
4023 --
4024 WHILE NOT l_not_hash_found LOOP
4025 --
4026 l_index := l_index + g_hash_jump;
4027 --
4028 -- Check if the hash index exists, if not we can use it
4029 --
4030 IF NOT g_cache_ptip_age_el_rec.EXISTS(l_index) THEN
4031 --
4032 -- Lets store the hash value in the index
4033 --
4034 RAISE NO_DATA_FOUND;
4035 --
4036 ELSE
4037 --
4038 -- Make sure the index is the correct one
4039 --
4040 IF g_cache_ptip_age_el_rec(l_index).id = p_ptip_id THEN
4041 --
4042 -- We have a match so the hashed value has been stored before
4043 --
4044 l_not_hash_found := TRUE;
4045 --
4046 END IF;
4047 --
4048 END IF;
4049 --
4050 END LOOP;
4051 --
4052 END IF;
4053 --
4054 END IF;
4055 --
4056 IF p_old_val IS NOT NULL
4057 AND p_new_val IS NOT NULL THEN
4058 --
4059 RAISE NO_DATA_FOUND;
4060 --
4061 END IF;
4062 p_rec := g_cache_ptip_age_el_rec(l_index);
4063 --
4064 -- hr_utility.set_location ('Leaving '||l_package,10);
4065 --
4066 EXCEPTION
4067 --
4068 WHEN NO_DATA_FOUND THEN
4069 --
4070 -- The record has not been cached yet so lets cache it
4071 --
4072 OPEN c1;
4073 --
4074 FETCH c1 INTO g_cache_ptip_age_el_rec(l_index);
4075 IF c1%NOTFOUND THEN
4076 --
4077 if NOT g_cache_ptip_age_el_rec.EXISTS(l_index) then
4078 g_cache_ptip_age_el_rec(l_index).id := p_ptip_id;
4079 g_cache_ptip_age_el_rec(l_index).exist := 'N';
4080 end if;
4081 --
4082 END IF;
4083 --
4084 p_rec := g_cache_ptip_age_el_rec(l_index);
4085 --
4086 CLOSE c1;
4087 --
4088 END get_age_ptip_elig;
4089 --
4090 PROCEDURE get_age_stated(
4091 p_age_fctr_id IN NUMBER
4092 ,p_business_group_id IN NUMBER
4093 ,p_rec OUT NOCOPY g_cache_age_rec_obj) IS
4094 --
4095 l_package VARCHAR2(80) := g_package || '.get_age_stated';
4096 --
4097 CURSOR c1 IS
4098 SELECT p_age_fctr_id
4099 ,'Y'
4100 ,agf.age_det_cd
4101 ,agf.age_to_use_cd
4102 ,agf.age_uom
4103 ,agf.age_det_rl
4104 ,agf.rndg_cd
4105 ,agf.rndg_rl
4106 ,agf.age_calc_rl
4107 ,agf.mn_age_num
4108 ,agf.mx_age_num
4109 FROM ben_age_fctr agf
4110 WHERE agf.age_fctr_id = p_age_fctr_id;
4111 --
4112 l_index PLS_INTEGER;
4113 l_not_hash_found BOOLEAN;
4114 --
4115 BEGIN
4116 --
4117 -- hr_utility.set_location ('Entering '||l_package,10);
4118 --
4119 -- Steps to do process
4120 --
4121 -- 1) Try and get value from cache
4122 -- 2) If can get from cache then copy to output record
4123 -- 3) If can't get from cache do db hit and then
4124 -- copy to cache record and then copy to output record.
4125 --
4126 -- Get hashed index value
4127 --
4128 l_index := MOD(p_age_fctr_id
4129 ,g_hash_key);
4130 --
4134 --
4131 IF NOT g_cache_stated_age_rec.EXISTS(l_index) THEN
4132 --
4133 -- Lets store the hash value in this index
4135 RAISE NO_DATA_FOUND;
4136 --
4137 ELSE
4138 --
4139 -- If it does exist make sure its the right one
4140 --
4141 IF g_cache_stated_age_rec(l_index).id <> p_age_fctr_id THEN
4142 --
4143 -- Loop through the hash using the jump routine to check further
4144 -- indexes
4145 --
4146 l_not_hash_found := FALSE;
4147 --
4148 WHILE NOT l_not_hash_found LOOP
4149 --
4150 l_index := l_index + g_hash_jump;
4151 --
4152 -- Check if the hash index exists, if not we can use it
4153 --
4154 IF NOT g_cache_stated_age_rec.EXISTS(l_index) THEN
4155 --
4156 -- Lets store the hash value in the index
4157 --
4158 RAISE NO_DATA_FOUND;
4159 --
4160 ELSE
4161 --
4162 -- Make sure the index is the correct one
4163 --
4164 IF g_cache_stated_age_rec(l_index).id = p_age_fctr_id THEN
4165 --
4166 -- We have a match so the hashed value has been stored before
4167 --
4168 l_not_hash_found := TRUE;
4169 --
4170 END IF;
4171 --
4172 END IF;
4173 --
4174 END LOOP;
4175 --
4176 END IF;
4177 --
4178 END IF;
4179 --
4180 p_rec := g_cache_stated_age_rec(l_index);
4181 --
4182 -- hr_utility.set_location ('Leaving '||l_package,10);
4183 --
4184 EXCEPTION
4185 --
4186 WHEN NO_DATA_FOUND THEN
4187 --
4188 -- The record has not been cached yet so lets cache it
4189 --
4190 OPEN c1;
4191 --
4192 FETCH c1 INTO g_cache_stated_age_rec(l_index);
4193 IF c1%NOTFOUND THEN
4194 --
4195 if NOT g_cache_stated_age_rec.EXISTS(l_index) then
4196 g_cache_stated_age_rec(l_index).id := p_age_fctr_id;
4197 g_cache_stated_age_rec(l_index).exist := 'N';
4198 end if;
4199 --
4200 END IF;
4201 --
4202 p_rec := g_cache_stated_age_rec(l_index);
4203 --
4204 CLOSE c1;
4205 --
4206 END get_age_stated;
4207 --
4208 PROCEDURE get_age_elig(
4209 p_pgm_id IN NUMBER
4210 ,p_pl_id IN NUMBER
4211 ,p_oipl_id IN NUMBER
4212 ,p_plip_id IN NUMBER
4213 ,p_ptip_id IN NUMBER
4214 ,p_old_val in number default null
4215 ,p_new_val in number default null
4216 ,p_business_group_id IN NUMBER
4217 ,p_effective_date IN DATE
4218 ,p_rec OUT NOCOPY g_cache_age_rec_obj) IS
4219 --
4220 l_package VARCHAR2(80) := g_package || '.get_age_elig';
4221 --
4222 BEGIN
4223 --
4224 -- hr_utility.set_location ('Entering '||l_package,10);
4225 --
4226 -- Derive which data type we are dealing with
4227 --
4228 IF p_pgm_id IS NOT NULL THEN
4229 --
4230 get_age_pgm_elig(p_pgm_id=> p_pgm_id
4231 ,p_old_val => p_old_val
4232 ,p_new_val => p_new_val
4233 ,p_business_group_id => p_business_group_id
4234 ,p_effective_date => p_effective_date
4235 ,p_rec => p_rec);
4236 --
4237 ELSIF p_pl_id IS NOT NULL THEN
4238 --
4239 get_age_pl_elig(p_pl_id=> p_pl_id
4240 ,p_old_val => p_old_val
4241 ,p_new_val => p_new_val
4242 ,p_business_group_id => p_business_group_id
4243 ,p_effective_date => p_effective_date
4244 ,p_rec => p_rec);
4245 --
4246 ELSIF p_oipl_id IS NOT NULL THEN
4247 --
4248 get_age_oipl_elig(p_oipl_id=> p_oipl_id
4249 ,p_old_val => p_old_val
4250 ,p_new_val => p_new_val
4251 ,p_business_group_id => p_business_group_id
4252 ,p_effective_date => p_effective_date
4253 ,p_rec => p_rec);
4254 --
4255 ELSIF p_plip_id IS NOT NULL THEN
4256 --
4257 get_age_plip_elig(p_plip_id=> p_plip_id
4258 ,p_old_val => p_old_val
4259 ,p_new_val => p_new_val
4260 ,p_business_group_id => p_business_group_id
4261 ,p_effective_date => p_effective_date
4262 ,p_rec => p_rec);
4263 --
4264 ELSIF p_ptip_id IS NOT NULL THEN
4265 --
4266 get_age_ptip_elig(p_ptip_id=> p_ptip_id
4267 ,p_old_val => p_old_val
4268 ,p_new_val => p_new_val
4269 ,p_business_group_id => p_business_group_id
4270 ,p_effective_date => p_effective_date
4271 ,p_rec => p_rec);
4272 --
4273 END IF;
4274 --
4275 -- hr_utility.set_location ('Leaving '||l_package,10);
4276 --
4277 END get_age_elig;
4278 --
4279 PROCEDURE get_age_pgm_rate(
4283 ,p_business_group_id IN NUMBER
4280 p_pgm_id IN NUMBER
4281 ,p_old_val IN NUMBER DEFAULT NULL
4282 ,p_new_val IN NUMBER DEFAULT NULL
4284 ,p_effective_date IN DATE
4285 ,p_rec OUT NOCOPY g_cache_age_rec_obj) IS
4286 --
4287 l_package VARCHAR2(80) := g_package || '.get_age_pgm_rate';
4288 l_old_val_1 NUMBER := p_old_val + 1;
4289 l_new_val_1 NUMBER := p_new_val + 1;
4290 --
4291 -- Define Cursor
4292 --
4293 CURSOR c1 IS
4294 SELECT p_pgm_id
4295 ,'Y'
4296 ,agf.age_det_cd
4297 ,agf.age_to_use_cd
4298 ,agf.age_uom
4299 ,agf.age_det_rl
4300 ,agf.rndg_cd
4301 ,agf.rndg_rl
4302 ,agf.age_calc_rl
4303 ,agf.mn_age_num
4304 ,agf.mx_age_num
4305 FROM ben_age_fctr agf
4306 ,ben_age_rt_f art
4307 ,ben_vrbl_rt_prfl_f vpf
4308 ,ben_acty_vrbl_rt_f avr
4309 ,ben_acty_base_rt_f abr
4310 WHERE abr.pgm_id = p_pgm_id
4311 AND p_effective_date BETWEEN abr.effective_start_date
4312 AND abr.effective_end_date
4313 AND abr.acty_base_rt_id = avr.acty_base_rt_id
4314 AND p_effective_date BETWEEN avr.effective_start_date
4315 AND avr.effective_end_date
4316 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
4317 AND p_effective_date BETWEEN vpf.effective_start_date
4318 AND vpf.effective_end_date
4319 AND vpf.vrbl_rt_prfl_id = art.vrbl_rt_prfl_id
4320 AND p_effective_date BETWEEN art.effective_start_date
4321 AND art.effective_end_date
4322 AND art.age_fctr_id = agf.age_fctr_id
4323 AND (
4324 (
4325 p_new_val IS NOT NULL
4326 AND p_old_val IS NOT NULL
4327 AND p_new_val >= NVL(agf.mn_age_num
4328 ,p_new_val)
4329 -- AND p_new_val < ceil( NVL(agf.mx_age_num
4330 -- ,p_new_val ) + 0.001))
4331 and p_new_val < decode(nvl(agf.mx_age_num,p_new_val) ,
4332 trunc(nvl(agf.mx_age_num,p_new_val))
4333 ,decode(nvl(agf.mn_age_num,p_new_val), trunc(nvl(agf.mn_age_num,p_new_val)),
4334 nvl(agf.mx_age_num,p_new_val)+1,nvl(agf.mx_age_num,p_new_val)+0.000000001),
4335 nvl(agf.mx_age_num,p_new_val)+0.000000001 ) )
4336 OR (
4337 p_new_val IS NOT NULL
4338 AND p_old_val IS NOT NULL
4339 AND (
4340 p_new_val < NVL(agf.mn_age_num
4341 ,p_new_val)
4342 -- OR p_new_val >= ceil( NVL(agf.mx_age_num
4343 -- ,p_new_val)) + 0.001)
4344 OR p_new_val >= decode(nvl(agf.mx_age_num,p_new_val) ,
4345 trunc(nvl(agf.mx_age_num,p_new_val))
4346 ,decode(nvl(agf.mn_age_num,p_new_val), trunc(nvl(agf.mn_age_num,p_new_val)),
4347 nvl(agf.mx_age_num,p_new_val)+1,nvl(agf.mx_age_num,p_new_val)+0.000000001),
4348 nvl(agf.mx_age_num,p_new_val)+0.000000001 ) )
4349 AND p_old_val >= NVL(agf.mn_age_num
4350 ,p_old_val)
4351 -- AND p_old_val < ceil( NVL(agf.mx_age_num
4352 -- ,p_old_val)) + 0.001 )
4353 and p_old_val < decode(nvl(agf.mx_age_num,p_old_val) ,
4354 trunc(nvl(agf.mx_age_num,p_old_val))
4355 ,decode(nvl(agf.mn_age_num,p_old_val), trunc(nvl(agf.mn_age_num,p_old_val)),
4356 nvl(agf.mx_age_num,p_old_val)+1,nvl(agf.mx_age_num,p_old_val)+0.000000001),
4357 nvl(agf.mx_age_num,p_old_val)+0.000000001 ) )
4358 OR ( p_new_val IS NULL
4359 AND p_old_val IS NULL));
4360 -- PERFNEW. SPLIT TO 2 CURSORS C1 and C2.
4361 --UNION ALL
4362 CURSOR c2 IS
4363 SELECT p_pgm_id
4364 ,'Y'
4365 ,agf.age_det_cd
4366 ,agf.age_to_use_cd
4367 ,agf.age_uom
4368 ,agf.age_det_rl
4369 ,agf.rndg_cd
4370 ,agf.rndg_rl
4371 ,agf.age_calc_rl
4372 ,agf.mn_age_num
4373 ,agf.mx_age_num
4374 FROM ben_age_fctr agf
4375 --,ben_age_rt_f art
4376 ,ben_elig_age_prte_f eap
4377 ,ben_eligy_prfl_f elp
4378 ,ben_vrbl_rt_elig_prfl_f vep
4379 ,ben_vrbl_rt_prfl_f vpf
4380 ,ben_acty_vrbl_rt_f avr
4381 ,ben_acty_base_rt_f abr
4382 WHERE abr.pgm_id = p_pgm_id
4383 AND p_effective_date BETWEEN abr.effective_start_date
4384 AND abr.effective_end_date
4385 AND abr.acty_base_rt_id = avr.acty_base_rt_id
4389 AND p_effective_date BETWEEN vpf.effective_start_date
4386 AND p_effective_date BETWEEN avr.effective_start_date
4387 AND avr.effective_end_date
4388 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
4390 AND vpf.effective_end_date
4391 -- AND vpf.vrbl_rt_prfl_id = eap.vrbl_rt_prfl_id
4392 AND vpf.vrbl_rt_prfl_id = vep.vrbl_rt_prfl_id
4393 AND p_effective_date BETWEEN vep.effective_start_date
4394 AND vep.effective_end_date
4395 AND vep.eligy_prfl_id = elp.eligy_prfl_id
4396 AND p_effective_date BETWEEN elp.effective_start_date
4397 AND elp.effective_end_date
4398 AND eap.eligy_prfl_id = elp.eligy_prfl_id
4399 AND p_effective_date BETWEEN eap.effective_start_date
4400 AND eap.effective_end_date
4401 AND eap.age_fctr_id = agf.age_fctr_id
4402 AND (
4403 (
4404 p_new_val IS NOT NULL
4405 AND p_old_val IS NOT NULL
4406 AND p_new_val >= NVL(agf.mn_age_num
4407 ,p_new_val)
4408 -- AND p_new_val < ceil( NVL(agf.mx_age_num
4409 -- ,p_new_val ) + 0.001))
4410 and p_new_val < decode(nvl(agf.mx_age_num,p_new_val) ,
4411 trunc(nvl(agf.mx_age_num,p_new_val))
4412 ,decode(nvl(agf.mn_age_num,p_new_val), trunc(nvl(agf.mn_age_num,p_new_val)),
4413 nvl(agf.mx_age_num,p_new_val)+1,nvl(agf.mx_age_num,p_new_val)+0.000000001),
4414 nvl(agf.mx_age_num,p_new_val)+0.000000001 ) )
4415 OR (
4416 p_new_val IS NOT NULL
4417 AND p_old_val IS NOT NULL
4418 AND (
4419 p_new_val < NVL(agf.mn_age_num
4420 ,p_new_val)
4421 -- OR p_new_val >= ceil( NVL(agf.mx_age_num
4422 -- ,p_new_val)) + 0.001)
4423 OR p_new_val >= decode(nvl(agf.mx_age_num,p_new_val) ,
4424 trunc(nvl(agf.mx_age_num,p_new_val))
4425 ,decode(nvl(agf.mn_age_num,p_new_val), trunc(nvl(agf.mn_age_num,p_new_val)),
4426 nvl(agf.mx_age_num,p_new_val)+1,nvl(agf.mx_age_num,p_new_val)+0.000000001),
4427 nvl(agf.mx_age_num,p_new_val)+0.000000001 ) )
4428 AND p_old_val >= NVL(agf.mn_age_num
4429 ,p_old_val)
4430 -- AND p_old_val < ceil( NVL(agf.mx_age_num
4431 -- ,p_old_val)) + 0.001 )
4432 and p_old_val < decode(nvl(agf.mx_age_num,p_old_val) ,
4433 trunc(nvl(agf.mx_age_num,p_old_val))
4434 ,decode(nvl(agf.mn_age_num,p_old_val), trunc(nvl(agf.mn_age_num,p_old_val)),
4435 nvl(agf.mx_age_num,p_old_val)+1,nvl(agf.mx_age_num,p_old_val)+0.000000001),
4436 nvl(agf.mx_age_num,p_old_val)+0.000000001 ) )
4437 OR ( p_new_val IS NULL
4438 AND p_old_val IS NULL));
4439 --
4440 --
4441 l_index PLS_INTEGER;
4442 l_not_hash_found BOOLEAN;
4443 l_c2notfound BOOLEAN;
4444 --
4445 BEGIN
4446 --
4447 -- hr_utility.set_location ('Entering '||l_package,10);
4448 --
4449 -- Steps to do process
4450 --
4451 -- 1) Try and get value from cache
4452 -- 2) If can get from cache then copy to output record
4453 -- 3) If can't get from cache do db hit and then
4454 -- copy to cache record and then copy to output record.
4455 --
4456 -- Get hashed index value
4457 --
4458 l_index := MOD(p_pgm_id
4459 ,g_hash_key);
4460 --
4461 IF NOT g_cache_pgm_age_rt_rec.EXISTS(l_index) THEN
4462 --
4463 -- Lets store the hash value in this index
4464 --
4465 RAISE NO_DATA_FOUND;
4466 --
4467 ELSE
4468 --
4469 -- If it does exist make sure its the right one
4470 --
4471 IF g_cache_pgm_age_rt_rec(l_index).id <> p_pgm_id THEN
4472 --
4473 -- Loop through the hash using the jump routine to check further
4474 -- indexes
4475 --
4476 l_not_hash_found := FALSE;
4477 --
4478 WHILE NOT l_not_hash_found LOOP
4479 --
4480 l_index := l_index + g_hash_jump;
4481 --
4482 -- Check if the hash index exists, if not we can use it
4483 --
4484 IF NOT g_cache_pgm_age_rt_rec.EXISTS(l_index) THEN
4485 --
4486 -- Lets store the hash value in the index
4487 --
4488 RAISE NO_DATA_FOUND;
4489 --
4490 ELSE
4491 --
4492 -- Make sure the index is the correct one
4493 --
4494 IF g_cache_pgm_age_rt_rec(l_index).id = p_pgm_id THEN
4495 --
4496 -- We have a match so the hashed value has been stored before
4497 --
4498 l_not_hash_found := TRUE;
4499 --
4500 END IF;
4501 --
4502 END IF;
4503 --
4507 --
4504 END LOOP;
4505 --
4506 END IF;
4508 END IF;
4509 --
4510 -- If p_old_val iand p_new_val is set this means we are trying to retrieve
4511 -- the correct rate for the calculated value.
4512 -- Previously we just cached the first rate we
4513 -- found since we needed the determination code, the correct age,los code,etc
4514 -- By killing the cache and forcing the value to be removed we cache the
4515 -- correct rate profile for the case we need.
4516 --
4517 IF p_old_val IS NOT NULL
4518 AND p_new_val IS NOT NULL THEN
4519 --
4520 RAISE NO_DATA_FOUND;
4521 --
4522 END IF;
4523 --
4524 p_rec := g_cache_pgm_age_rt_rec(l_index);
4525 --
4526 -- hr_utility.set_location ('Leaving '||l_package,10);
4527 --
4528 EXCEPTION
4529 --
4530 WHEN NO_DATA_FOUND THEN
4531 --
4532 -- The record has not been cached yet so lets cache it
4533 --
4534 OPEN c1;
4535 --
4536 FETCH c1 INTO g_cache_pgm_age_rt_rec(l_index);
4537 -- PERFNEW
4538 IF c1%NOTFOUND THEN
4539 --
4540 l_c2notfound := false;
4541 OPEN c2;
4542 FETCH c2 INTO g_cache_pgm_age_rt_rec(l_index);
4543 IF c2%NOTFOUND THEN
4544 --
4545 l_c2notfound := true;
4546 --
4547 END IF;
4548 CLOSE c2;
4549 --
4550 END IF;
4551 -- PERFNEW
4552 IF p_old_val IS NULL
4553 AND p_new_val IS NULL THEN
4554 --
4555 IF c1%NOTFOUND and l_c2notfound THEN -- PERFNEW
4556 --
4557 if NOT g_cache_pgm_age_rt_rec.EXISTS(l_index) then
4558 g_cache_pgm_age_rt_rec(l_index).id := p_pgm_id;
4559 g_cache_pgm_age_rt_rec(l_index).exist := 'N';
4560 end if;
4561 --
4562 END IF;
4563 --
4564 END IF;
4565 --
4566 p_rec := g_cache_pgm_age_rt_rec(l_index);
4567 --
4568 CLOSE c1;
4569 --
4570 END get_age_pgm_rate;
4571 --
4572 PROCEDURE get_age_pl_rate(
4573 p_pl_id IN NUMBER
4574 ,p_old_val IN NUMBER DEFAULT NULL
4575 ,p_new_val IN NUMBER DEFAULT NULL
4576 ,p_business_group_id IN NUMBER
4577 ,p_effective_date IN DATE
4578 ,p_rec OUT NOCOPY g_cache_age_rec_obj) IS
4579 --
4580 l_package VARCHAR2(80) := g_package || '.get_age_pl_rate';
4581 l_old_val_1 NUMBER := p_old_val + 1;
4582 l_new_val_1 NUMBER := p_new_val + 1;
4583 --
4584 -- Define Cursor
4585 --
4586 CURSOR c1 IS
4587 SELECT p_pl_id
4588 ,'Y'
4589 ,agf.age_det_cd
4590 ,agf.age_to_use_cd
4591 ,agf.age_uom
4592 ,agf.age_det_rl
4593 ,agf.rndg_cd
4594 ,agf.rndg_rl
4595 ,agf.age_calc_rl
4596 ,agf.mn_age_num
4597 ,agf.mx_age_num
4598 FROM ben_age_fctr agf
4599 ,ben_age_rt_f art
4600 ,ben_vrbl_rt_prfl_f vpf
4601 ,ben_acty_vrbl_rt_f avr
4602 ,ben_acty_base_rt_f abr
4603 WHERE abr.pl_id = p_pl_id
4604 AND p_effective_date BETWEEN abr.effective_start_date
4605 AND abr.effective_end_date
4606 AND abr.acty_base_rt_id = avr.acty_base_rt_id
4607 AND p_effective_date BETWEEN avr.effective_start_date
4608 AND avr.effective_end_date
4609 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
4610 AND p_effective_date BETWEEN vpf.effective_start_date
4611 AND vpf.effective_end_date
4612 AND vpf.vrbl_rt_prfl_id = art.vrbl_rt_prfl_id
4613 AND p_effective_date BETWEEN art.effective_start_date
4614 AND art.effective_end_date
4615 AND art.age_fctr_id = agf.age_fctr_id
4616 AND (
4617 (
4618 p_new_val IS NOT NULL
4619 AND p_old_val IS NOT NULL
4620 AND p_new_val >= NVL(agf.mn_age_num
4621 ,p_new_val)
4622 -- AND p_new_val < ceil( NVL(agf.mx_age_num
4623 -- ,p_new_val)+ 0.001 ))
4624 and p_new_val < decode(nvl(agf.mx_age_num,p_new_val) ,
4625 trunc(nvl(agf.mx_age_num,p_new_val))
4626 ,decode(nvl(agf.mn_age_num,p_new_val), trunc(nvl(agf.mn_age_num,p_new_val)),
4627 nvl(agf.mx_age_num,p_new_val)+1,nvl(agf.mx_age_num,p_new_val)+0.000000001),
4628 nvl(agf.mx_age_num,p_new_val)+0.000000001 ) )
4629 OR (
4630 p_new_val IS NOT NULL
4631 AND p_old_val IS NOT NULL
4632 AND (
4633 p_new_val < NVL(agf.mn_age_num
4634 ,p_new_val)
4635 -- OR p_new_val >= ceil( NVL(agf.mx_age_num
4639 ,decode(nvl(agf.mn_age_num,p_new_val), trunc(nvl(agf.mn_age_num,p_new_val)),
4636 -- ,p_new_val)) + 0.001)
4637 OR p_new_val >= decode(nvl(agf.mx_age_num,p_new_val) ,
4638 trunc(nvl(agf.mx_age_num,p_new_val))
4640 nvl(agf.mx_age_num,p_new_val)+1,nvl(agf.mx_age_num,p_new_val)+0.000000001),
4641 nvl(agf.mx_age_num,p_new_val)+0.000000001 ) )
4642 AND p_old_val >= NVL(agf.mn_age_num
4643 ,p_old_val)
4644 -- AND p_old_val < ceil( NVL(agf.mx_age_num
4645 -- ,p_old_val)) + 0.001)
4646 and p_old_val < decode(nvl(agf.mx_age_num,p_old_val) ,
4647 trunc(nvl(agf.mx_age_num,p_old_val))
4648 ,decode(nvl(agf.mn_age_num,p_old_val), trunc(nvl(agf.mn_age_num,p_old_val)),
4649 nvl(agf.mx_age_num,p_old_val)+1,nvl(agf.mx_age_num,p_old_val)+0.000000001),
4650 nvl(agf.mx_age_num,p_old_val)+0.000000001 ) )
4651 OR ( p_new_val IS NULL
4652 AND p_old_val IS NULL));
4653 -- PERFNEW. SPLIT TO 2 CURSORS C1 and C2.
4654 --UNION ALL
4655 CURSOR c2 IS
4656 SELECT p_pl_id
4657 ,'Y'
4658 ,agf.age_det_cd
4659 ,agf.age_to_use_cd
4660 ,agf.age_uom
4661 ,agf.age_det_rl
4662 ,agf.rndg_cd
4663 ,agf.rndg_rl
4664 ,agf.age_calc_rl
4665 ,agf.mn_age_num
4666 ,agf.mx_age_num
4667 FROM ben_age_fctr agf
4668 --,ben_age_rt_f art
4669 ,ben_elig_age_prte_f eap
4670 ,ben_eligy_prfl_f elp
4671 ,ben_vrbl_rt_elig_prfl_f vep
4672 ,ben_vrbl_rt_prfl_f vpf
4673 ,ben_acty_vrbl_rt_f avr
4674 ,ben_acty_base_rt_f abr
4675 WHERE abr.pl_id = p_pl_id
4676 AND p_effective_date BETWEEN abr.effective_start_date
4677 AND abr.effective_end_date
4678 AND abr.acty_base_rt_id = avr.acty_base_rt_id
4679 AND p_effective_date BETWEEN avr.effective_start_date
4680 AND avr.effective_end_date
4681 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
4682 AND p_effective_date BETWEEN vpf.effective_start_date
4683 AND vpf.effective_end_date
4684 -- AND vpf.vrbl_rt_prfl_id = eap.vrbl_rt_prfl_id
4685 AND vpf.vrbl_rt_prfl_id = vep.vrbl_rt_prfl_id
4686 AND p_effective_date BETWEEN vep.effective_start_date
4687 AND vep.effective_end_date
4688 AND vep.eligy_prfl_id = elp.eligy_prfl_id
4689 AND p_effective_date BETWEEN elp.effective_start_date
4690 AND elp.effective_end_date
4691 AND eap.eligy_prfl_id = elp.eligy_prfl_id
4692 AND p_effective_date BETWEEN eap.effective_start_date
4693 AND eap.effective_end_date
4694 AND eap.age_fctr_id = agf.age_fctr_id
4695 AND (
4696 (
4697 p_new_val IS NOT NULL
4698 AND p_old_val IS NOT NULL
4699 AND p_new_val >= NVL(agf.mn_age_num
4700 ,p_new_val)
4701 -- AND p_new_val < ceil( NVL(agf.mx_age_num
4702 -- ,p_new_val)+ 0.001 ))
4703 and p_new_val < decode(nvl(agf.mx_age_num,p_new_val) ,
4704 trunc(nvl(agf.mx_age_num,p_new_val))
4705 ,decode(nvl(agf.mn_age_num,p_new_val), trunc(nvl(agf.mn_age_num,p_new_val)),
4706 nvl(agf.mx_age_num,p_new_val)+1,nvl(agf.mx_age_num,p_new_val)+0.000000001),
4707 nvl(agf.mx_age_num,p_new_val)+0.000000001 ) )
4708 OR (
4709 p_new_val IS NOT NULL
4710 AND p_old_val IS NOT NULL
4711 AND (
4712 p_new_val < NVL(agf.mn_age_num
4713 ,p_new_val)
4714 -- OR p_new_val >= ceil( NVL(agf.mx_age_num
4715 -- ,p_new_val)) + 0.001)
4716 OR p_new_val >= decode(nvl(agf.mx_age_num,p_new_val) ,
4717 trunc(nvl(agf.mx_age_num,p_new_val))
4718 ,decode(nvl(agf.mn_age_num,p_new_val), trunc(nvl(agf.mn_age_num,p_new_val)),
4719 nvl(agf.mx_age_num,p_new_val)+1,nvl(agf.mx_age_num,p_new_val)+0.000000001),
4720 nvl(agf.mx_age_num,p_new_val)+0.000000001 ) )
4721 AND p_old_val >= NVL(agf.mn_age_num
4722 ,p_old_val)
4723 -- AND p_old_val < ceil( NVL(agf.mx_age_num
4724 -- ,p_old_val)) + 0.001)
4725 and p_old_val < decode(nvl(agf.mx_age_num,p_old_val) ,
4726 trunc(nvl(agf.mx_age_num,p_old_val))
4727 ,decode(nvl(agf.mn_age_num,p_old_val), trunc(nvl(agf.mn_age_num,p_old_val)),
4728 nvl(agf.mx_age_num,p_old_val)+1,nvl(agf.mx_age_num,p_old_val)+0.000000001),
4729 nvl(agf.mx_age_num,p_old_val)+0.000000001 ) )
4730 OR ( p_new_val IS NULL
4731 AND p_old_val IS NULL));
4732 --
4733 --
4734 l_index PLS_INTEGER;
4738 BEGIN
4735 l_not_hash_found BOOLEAN;
4736 l_c2notfound BOOLEAN;
4737 --
4739 --
4740 -- hr_utility.set_location ('Entering '||l_package,10);
4741 --
4742 -- Steps to do process
4743 --
4744 -- 1) Try and get value from cache
4745 -- 2) If can get from cache then copy to output record
4746 -- 3) If can't get from cache do db hit and then
4747 -- copy to cache record and then copy to output record.
4748 --
4749 -- Get hashed index value
4750 --
4751 l_index := MOD(p_pl_id
4752 ,g_hash_key);
4753 --
4754 IF NOT g_cache_pl_age_rt_rec.EXISTS(l_index) THEN
4755 --
4756 -- Lets store the hash value in this index
4757 --
4758 RAISE NO_DATA_FOUND;
4759 --
4760 ELSE
4761 --
4762 -- If it does exist make sure its the right one
4763 --
4764 IF g_cache_pl_age_rt_rec(l_index).id <> p_pl_id THEN
4765 --
4766 -- Loop through the hash using the jump routine to check further
4767 -- indexes
4768 --
4769 l_not_hash_found := FALSE;
4770 --
4771 WHILE NOT l_not_hash_found LOOP
4772 --
4773 l_index := l_index + g_hash_jump;
4774 --
4775 -- Check if the hash index exists, if not we can use it
4776 --
4777 IF NOT g_cache_pl_age_rt_rec.EXISTS(l_index) THEN
4778 --
4779 -- Lets store the hash value in the index
4780 --
4781 RAISE NO_DATA_FOUND;
4782 --
4783 ELSE
4784 --
4785 -- Make sure the index is the correct one
4786 --
4787 IF g_cache_pl_age_rt_rec(l_index).id = p_pl_id THEN
4788 --
4789 -- We have a match so the hashed value has been stored before
4790 --
4791 l_not_hash_found := TRUE;
4792 --
4793 END IF;
4794 --
4795 END IF;
4796 --
4797 END LOOP;
4798 --
4799 END IF;
4800 --
4801 END IF;
4802 --
4803 -- If p_old_val ind p_new_val is set this means we are trying to retrieve
4804 -- the correct rate for the calculated value.
4805 -- Previously we just cached the first rate we
4806 -- found since we needed the determination code, the correct age,los code,etc
4807 -- By killing the cache and forcing the value to be removed we cache the
4808 -- correct rate profile for the case we need.
4809 --
4810 IF p_old_val IS NOT NULL
4811 AND p_new_val IS NOT NULL THEN
4812 --
4813 RAISE NO_DATA_FOUND;
4814 --
4815 END IF;
4816 --
4817 p_rec := g_cache_pl_age_rt_rec(l_index);
4818 --
4819 -- hr_utility.set_location ('Leaving '||l_package,10);
4820 --
4821 EXCEPTION
4822 --
4823 WHEN NO_DATA_FOUND THEN
4824 --
4825 -- The record has not been cached yet so lets cache it
4826 --
4827 OPEN c1;
4828 --
4829 FETCH c1 INTO g_cache_pl_age_rt_rec(l_index);
4830 -- PERFNEW
4831 IF c1%NOTFOUND THEN
4832 --
4833 l_c2notfound := false;
4834 OPEN c2;
4835 FETCH c2 INTO g_cache_pl_age_rt_rec(l_index);
4836 IF c2%NOTFOUND THEN
4837 --
4838 l_c2notfound := true;
4839 --
4840 END IF;
4841 CLOSE c2;
4842 --
4843 END IF;
4844 -- PERFNEW
4845 IF p_old_val IS NULL
4846 AND p_new_val IS NULL THEN
4847 --
4848 IF c1%NOTFOUND and l_c2notfound THEN -- PERFNEW
4849 --
4850 if NOT g_cache_pl_age_rt_rec.EXISTS(l_index) then
4851 g_cache_pl_age_rt_rec(l_index).id := p_pl_id;
4852 g_cache_pl_age_rt_rec(l_index).exist := 'N';
4853 end if;
4854 --
4855 END IF;
4856 --
4857 END IF;
4858 --
4859 p_rec := g_cache_pl_age_rt_rec(l_index);
4860 --
4861 CLOSE c1;
4862 --
4863 END get_age_pl_rate;
4864 --
4865 PROCEDURE get_age_oipl_rate(
4866 p_oipl_id IN NUMBER
4867 ,p_old_val IN NUMBER DEFAULT NULL
4868 ,p_new_val IN NUMBER DEFAULT NULL
4869 ,p_business_group_id IN NUMBER
4870 ,p_effective_date IN DATE
4871 ,p_rec OUT NOCOPY g_cache_age_rec_obj) IS
4872 --
4873 l_package VARCHAR2(80) := g_package || '.get_age_oipl_rate';
4874 l_old_val_1 NUMBER := p_old_val + 1;
4875 l_new_val_1 NUMBER := p_new_val + 1;
4876 --
4877 l_opt_id number ;
4878 -- Define Cursor
4879 --
4880 CURSOR c1 IS
4881 SELECT p_oipl_id
4882 ,'Y'
4883 ,agf.age_det_cd
4884 ,agf.age_to_use_cd
4885 ,agf.age_uom
4886 ,agf.age_det_rl
4887 ,agf.rndg_cd
4888 ,agf.rndg_rl
4889 ,agf.age_calc_rl
4890 ,agf.mn_age_num
4891 ,agf.mx_age_num
4892 FROM ben_age_fctr agf
4896 ,ben_acty_base_rt_f abr
4893 ,ben_age_rt_f art
4894 ,ben_vrbl_rt_prfl_f vpf
4895 ,ben_acty_vrbl_rt_f avr
4897 WHERE ( abr.oipl_id = p_oipl_id
4898 --
4899 --START Option level Rates Enhancements
4900 or ( abr.opt_id = l_opt_id and
4901 not exists (select null from ben_acty_base_rt_f abr1
4902 where abr1.oipl_id = p_oipl_id )))
4903 --END Option level Rates Enhancements
4904 --
4905 AND p_effective_date BETWEEN abr.effective_start_date
4906 AND abr.effective_end_date
4907 AND abr.acty_base_rt_id = avr.acty_base_rt_id
4908 AND p_effective_date BETWEEN avr.effective_start_date
4909 AND avr.effective_end_date
4910 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
4911 AND p_effective_date BETWEEN vpf.effective_start_date
4912 AND vpf.effective_end_date
4913 AND vpf.vrbl_rt_prfl_id = art.vrbl_rt_prfl_id
4914 AND p_effective_date BETWEEN art.effective_start_date
4915 AND art.effective_end_date
4916 AND art.age_fctr_id = agf.age_fctr_id
4917 AND (
4918 (
4919 p_new_val IS NOT NULL
4920 AND p_old_val IS NOT NULL
4921 AND p_new_val >= NVL(agf.mn_age_num
4922 ,p_new_val)
4923 -- AND p_new_val < ceil( NVL(agf.mx_age_num
4924 -- ,p_new_val)+ 0.001 ))
4925 and p_new_val < decode(nvl(agf.mx_age_num,p_new_val) ,
4926 trunc(nvl(agf.mx_age_num,p_new_val))
4927 ,decode(nvl(agf.mn_age_num,p_new_val), trunc(nvl(agf.mn_age_num,p_new_val)),
4928 nvl(agf.mx_age_num,p_new_val)+1,nvl(agf.mx_age_num,p_new_val)+0.000000001),
4929 nvl(agf.mx_age_num,p_new_val)+0.000000001 ) )
4930 OR (
4931 p_new_val IS NOT NULL
4932 AND p_old_val IS NOT NULL
4933 AND (
4934 p_new_val < NVL(agf.mn_age_num
4935 ,p_new_val)
4936 -- OR p_new_val >= ceil( NVL(agf.mx_age_num
4937 -- ,p_new_val)) + 0.001 )
4938 OR p_new_val >= decode(nvl(agf.mx_age_num,p_new_val) ,
4939 trunc(nvl(agf.mx_age_num,p_new_val))
4940 ,decode(nvl(agf.mn_age_num,p_new_val), trunc(nvl(agf.mn_age_num,p_new_val)),
4941 nvl(agf.mx_age_num,p_new_val)+1,nvl(agf.mx_age_num,p_new_val)+0.000000001),
4942 nvl(agf.mx_age_num,p_new_val)+0.000000001 ) )
4943 AND p_old_val >= NVL(agf.mn_age_num
4944 ,p_old_val)
4945 -- AND p_old_val < ceil( NVL(agf.mx_age_num
4946 -- ,p_old_val)) + 0.001 )
4947 and p_old_val < decode(nvl(agf.mx_age_num,p_old_val) ,
4948 trunc(nvl(agf.mx_age_num,p_old_val))
4949 ,decode(nvl(agf.mn_age_num,p_old_val), trunc(nvl(agf.mn_age_num,p_old_val)),
4950 nvl(agf.mx_age_num,p_old_val)+1,nvl(agf.mx_age_num,p_old_val)+0.000000001),
4951 nvl(agf.mx_age_num,p_old_val)+0.000000001 ) )
4952 OR ( p_new_val IS NULL
4953 AND p_old_val IS NULL));
4954 -- PERFNEW. SPLIT TO 2 CURSORS C1 and C2.
4955 --UNION ALL
4956 CURSOR c2 IS
4957 SELECT p_oipl_id
4958 ,'Y'
4959 ,agf.age_det_cd
4960 ,agf.age_to_use_cd
4961 ,agf.age_uom
4962 ,agf.age_det_rl
4963 ,agf.rndg_cd
4964 ,agf.rndg_rl
4965 ,agf.age_calc_rl
4966 ,agf.mn_age_num
4967 ,agf.mx_age_num
4968 FROM ben_age_fctr agf
4969 --,ben_age_rt_f art
4970 ,ben_elig_age_prte_f eap
4971 ,ben_eligy_prfl_f elp
4972 ,ben_vrbl_rt_elig_prfl_f vep
4973 ,ben_vrbl_rt_prfl_f vpf
4974 ,ben_acty_vrbl_rt_f avr
4975 ,ben_acty_base_rt_f abr
4976 WHERE ( abr.oipl_id = p_oipl_id
4977 --
4978 --START Option level Rates Enhancements
4979 or ( abr.opt_id = l_opt_id and
4980 not exists (select null from ben_acty_base_rt_f abr1
4981 where abr1.oipl_id = p_oipl_id )))
4982 --END Option level Rates Enhancements
4983 --
4984 AND p_effective_date BETWEEN abr.effective_start_date
4985 AND abr.effective_end_date
4986 AND abr.acty_base_rt_id = avr.acty_base_rt_id
4987 AND p_effective_date BETWEEN avr.effective_start_date
4988 AND avr.effective_end_date
4989 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
4990 AND p_effective_date BETWEEN vpf.effective_start_date
4991 AND vpf.effective_end_date
4992 -- AND vpf.vrbl_rt_prfl_id = eap.vrbl_rt_prfl_id
4993 AND vpf.vrbl_rt_prfl_id = vep.vrbl_rt_prfl_id
4994 AND p_effective_date BETWEEN vep.effective_start_date
4995 AND vep.effective_end_date
4996 AND vep.eligy_prfl_id = elp.eligy_prfl_id
5000 AND p_effective_date BETWEEN eap.effective_start_date
4997 AND p_effective_date BETWEEN elp.effective_start_date
4998 AND elp.effective_end_date
4999 AND eap.eligy_prfl_id = elp.eligy_prfl_id
5001 AND eap.effective_end_date
5002 AND eap.age_fctr_id = agf.age_fctr_id
5003 AND (
5004 (
5005 p_new_val IS NOT NULL
5006 AND p_old_val IS NOT NULL
5007 AND p_new_val >= NVL(agf.mn_age_num
5008 ,p_new_val)
5009 -- AND p_new_val < ceil( NVL(agf.mx_age_num
5010 -- ,p_new_val)+ 0.001 ))
5011 and p_new_val < decode(nvl(agf.mx_age_num,p_new_val) ,
5012 trunc(nvl(agf.mx_age_num,p_new_val))
5013 ,decode(nvl(agf.mn_age_num,p_new_val), trunc(nvl(agf.mn_age_num,p_new_val)),
5014 nvl(agf.mx_age_num,p_new_val)+1,nvl(agf.mx_age_num,p_new_val)+0.000000001),
5015 nvl(agf.mx_age_num,p_new_val)+0.000000001 ) )
5016 OR (
5017 p_new_val IS NOT NULL
5018 AND p_old_val IS NOT NULL
5019 AND (
5020 p_new_val < NVL(agf.mn_age_num
5021 ,p_new_val)
5022 -- OR p_new_val >= ceil( NVL(agf.mx_age_num
5023 -- ,p_new_val)) + 0.001 )
5024 OR p_new_val >= decode(nvl(agf.mx_age_num,p_new_val) ,
5025 trunc(nvl(agf.mx_age_num,p_new_val))
5026 ,decode(nvl(agf.mn_age_num,p_new_val), trunc(nvl(agf.mn_age_num,p_new_val)),
5027 nvl(agf.mx_age_num,p_new_val)+1,nvl(agf.mx_age_num,p_new_val)+0.000000001),
5028 nvl(agf.mx_age_num,p_new_val)+0.000000001 ) )
5029 AND p_old_val >= NVL(agf.mn_age_num
5030 ,p_old_val)
5031 -- AND p_old_val < ceil( NVL(agf.mx_age_num
5032 -- ,p_old_val)) + 0.001 )
5033 and p_old_val < decode(nvl(agf.mx_age_num,p_old_val) ,
5034 trunc(nvl(agf.mx_age_num,p_old_val))
5035 ,decode(nvl(agf.mn_age_num,p_old_val), trunc(nvl(agf.mn_age_num,p_old_val)),
5036 nvl(agf.mx_age_num,p_old_val)+1,nvl(agf.mx_age_num,p_old_val)+0.000000001),
5037 nvl(agf.mx_age_num,p_old_val)+0.000000001 ) )
5038 OR ( p_new_val IS NULL
5039 AND p_old_val IS NULL));
5040 --
5041 --
5042 l_index PLS_INTEGER;
5043 l_not_hash_found BOOLEAN;
5044 l_c2notfound BOOLEAN;
5045 --
5046 BEGIN
5047 --
5048 -- hr_utility.set_location ('Entering '||l_package,10);
5049 --
5050 -- Steps to do process
5051 --
5052 -- 1) Try and get value from cache
5053 -- 2) If can get from cache then copy to output record
5054 -- 3) If can't get from cache do db hit and then
5055 -- copy to cache record and then copy to output record.
5056 --
5057 -- Get hashed index value
5058 --
5059 l_index := MOD(p_oipl_id
5060 ,g_hash_key);
5061 --
5062 IF NOT g_cache_oipl_age_rt_rec.EXISTS(l_index) THEN
5063 --
5064 -- Lets store the hash value in this index
5065 --
5066 RAISE NO_DATA_FOUND;
5067 --
5068 ELSE
5069 --
5070 -- If it does exist make sure its the right one
5071 --
5072 IF g_cache_oipl_age_rt_rec(l_index).id <> p_oipl_id THEN
5073 --
5074 -- Loop through the hash using the jump routine to check further
5075 -- indexes
5076 --
5077 l_not_hash_found := FALSE;
5078 --
5079 WHILE NOT l_not_hash_found LOOP
5080 --
5081 l_index := l_index + g_hash_jump;
5082 --
5083 -- Check if the hash index exists, if not we can use it
5084 --
5085 IF NOT g_cache_oipl_age_rt_rec.EXISTS(l_index) THEN
5086 --
5087 -- Lets store the hash value in the index
5088 --
5089 RAISE NO_DATA_FOUND;
5090 --
5091 ELSE
5092 --
5093 -- Make sure the index is the correct one
5094 --
5095 IF g_cache_oipl_age_rt_rec(l_index).id = p_oipl_id THEN
5096 --
5097 -- We have a match so the hashed value has been stored before
5098 --
5099 l_not_hash_found := TRUE;
5100 --
5101 END IF;
5102 --
5103 END IF;
5104 --
5105 END LOOP;
5106 --
5107 END IF;
5108 --
5109 END IF;
5110 --
5111 -- If p_old_val and p_new_val is set this means we are trying to retrieve
5112 -- the correct rate for the calculated value.
5113 -- Previously we just cached the first rate we
5114 -- found since we needed the determination code, the correct age,los code,etc
5115 -- By killing the cache and forcing the value to be removed we cache the
5116 -- correct rate profile for the case we need.
5117 --
5118 IF p_old_val IS NOT NULL
5119 AND p_new_val IS NOT NULL THEN
5120 --
5124 --
5121 RAISE NO_DATA_FOUND;
5122 --
5123 END IF;
5125 p_rec := g_cache_oipl_age_rt_rec(l_index);
5126 --
5127 -- hr_utility.set_location ('Leaving '||l_package,10);
5128 --
5129 EXCEPTION
5130 --
5131 WHEN NO_DATA_FOUND THEN
5132 --
5133 -- The record has not been cached yet so lets cache it
5134 -- Option level rates enhancement
5135 l_opt_id := get_opt_id(p_oipl_id,p_effective_date);
5136 --
5137 OPEN c1;
5138 --
5139 FETCH c1 INTO g_cache_oipl_age_rt_rec(l_index);
5140 -- PERFNEW
5141 IF c1%NOTFOUND THEN
5142 --
5143 l_c2notfound := false;
5144 OPEN c2;
5145 FETCH c2 INTO g_cache_oipl_age_rt_rec(l_index);
5146 IF c2%NOTFOUND THEN
5147 --
5148 l_c2notfound := true;
5149 --
5150 END IF;
5151 CLOSE c2;
5152 --
5153 END IF;
5154 -- PERFNEW
5155 IF p_old_val IS NULL
5156 AND p_new_val IS NULL THEN
5157 --
5158 IF c1%NOTFOUND and l_c2notfound THEN -- PERFNEW
5159 --
5160 if NOT g_cache_oipl_age_rt_rec.EXISTS(l_index) then
5161 g_cache_oipl_age_rt_rec(l_index).id := p_oipl_id;
5162 g_cache_oipl_age_rt_rec(l_index).exist := 'N';
5163 end if;
5164 --
5165 END IF;
5166 --
5167 END IF;
5168 --
5169 p_rec := g_cache_oipl_age_rt_rec(l_index);
5170 --
5171 CLOSE c1;
5172 --
5173 END get_age_oipl_rate;
5174 --
5175 PROCEDURE get_age_plip_rate(
5176 p_plip_id IN NUMBER
5177 ,p_old_val IN NUMBER DEFAULT NULL
5178 ,p_new_val IN NUMBER DEFAULT NULL
5179 ,p_business_group_id IN NUMBER
5180 ,p_effective_date IN DATE
5181 ,p_rec OUT NOCOPY g_cache_age_rec_obj) IS
5182 --
5183 l_package VARCHAR2(80) := g_package || '.get_age_plip_rate';
5184 l_old_val_1 NUMBER := p_old_val + 1;
5185 l_new_val_1 NUMBER := p_new_val + 1;
5186 --
5187 -- Define Cursor
5188 --
5189 CURSOR c1 IS
5190 SELECT p_plip_id
5191 ,'Y'
5192 ,agf.age_det_cd
5193 ,agf.age_to_use_cd
5194 ,agf.age_uom
5195 ,agf.age_det_rl
5196 ,agf.rndg_cd
5197 ,agf.rndg_rl
5198 ,agf.age_calc_rl
5199 ,agf.mn_age_num
5200 ,agf.mx_age_num
5201 FROM ben_acty_base_rt_f abr
5202 ,ben_acty_vrbl_rt_f avr
5203 ,ben_vrbl_rt_prfl_f vpf
5204 ,ben_age_rt_f art
5205 ,ben_age_fctr agf
5206 WHERE abr.plip_id = p_plip_id
5207 AND p_effective_date BETWEEN abr.effective_start_date
5208 AND abr.effective_end_date
5209 AND abr.acty_base_rt_id = avr.acty_base_rt_id
5210 AND p_effective_date BETWEEN avr.effective_start_date
5211 AND avr.effective_end_date
5212 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
5213 AND p_effective_date BETWEEN vpf.effective_start_date
5214 AND vpf.effective_end_date
5215 AND vpf.vrbl_rt_prfl_id = art.vrbl_rt_prfl_id
5216 AND p_effective_date BETWEEN art.effective_start_date
5217 AND art.effective_end_date
5218 AND art.age_fctr_id = agf.age_fctr_id
5219 AND (
5220 (
5221 p_new_val IS NOT NULL
5222 AND p_old_val IS NOT NULL
5223 AND p_new_val >= NVL(agf.mn_age_num
5224 ,p_new_val)
5225 AND p_new_val < decode(nvl(agf.mx_age_num,p_new_val) ,
5226 trunc(nvl(agf.mx_age_num,p_new_val))
5227 ,decode(nvl(agf.mn_age_num,p_new_val), trunc(nvl(agf.mn_age_num,p_new_val)),
5228 nvl(agf.mx_age_num,p_new_val)+1,nvl(agf.mx_age_num,p_new_val)+0.000000001),
5229 nvl(agf.mx_age_num,p_new_val)+0.000000001 ) )
5230 -- ceil( NVL(agf.mx_age_num
5231 -- ,p_new_val) + 0.001 ))
5232 OR (
5233 p_new_val IS NOT NULL
5234 AND p_old_val IS NOT NULL
5235 AND (
5236 p_new_val < NVL(agf.mn_age_num
5237 ,p_new_val)
5238 OR p_new_val >= decode(nvl(agf.mx_age_num,p_new_val) ,
5239 trunc(nvl(agf.mx_age_num,p_new_val))
5240 ,decode(nvl(agf.mn_age_num,p_new_val), trunc(nvl(agf.mn_age_num,p_new_val)),
5241 nvl(agf.mx_age_num,p_new_val)+1,nvl(agf.mx_age_num,p_new_val)+0.000000001),
5242 nvl(agf.mx_age_num,p_new_val)+0.000000001 ) )
5243
5244 -- ceil( NVL(agf.mx_age_num
5245 -- , p_new_val)) + 0.001 )
5246 AND p_old_val >= NVL(agf.mn_age_num
5250 ,decode(nvl(agf.mn_age_num,p_old_val), trunc(nvl(agf.mn_age_num,p_old_val)),
5247 ,p_old_val)
5248 AND p_old_val < decode(nvl(agf.mx_age_num,p_old_val) ,
5249 trunc(nvl(agf.mx_age_num,p_old_val))
5251 nvl(agf.mx_age_num,p_old_val)+1,nvl(agf.mx_age_num,p_old_val)+0.000000001),
5252 nvl(agf.mx_age_num,p_old_val)+0.000000001 ) )
5253 --ceil( NVL(agf.mx_age_num
5254 -- ,p_old_val)) + 0.001 )
5255 OR ( p_new_val IS NULL
5256 AND p_old_val IS NULL));
5257 -- PERFNEW. SPLIT TO 2 CURSORS C1 and C2.
5258 --UNION ALL
5259 CURSOR c2 IS
5260 SELECT p_plip_id
5261 ,'Y'
5262 ,agf.age_det_cd
5263 ,agf.age_to_use_cd
5264 ,agf.age_uom
5265 ,agf.age_det_rl
5266 ,agf.rndg_cd
5267 ,agf.rndg_rl
5268 ,agf.age_calc_rl
5269 ,agf.mn_age_num
5270 ,agf.mx_age_num
5271 FROM ben_acty_base_rt_f abr
5272 ,ben_acty_vrbl_rt_f avr
5273 ,ben_eligy_prfl_f elp
5274 ,ben_vrbl_rt_elig_prfl_f vep
5275 ,ben_vrbl_rt_prfl_f vpf
5276 ,ben_elig_age_prte_f eap
5277 --,ben_age_rt_f art
5278 ,ben_age_fctr agf
5279 WHERE abr.plip_id = p_plip_id
5280 AND p_effective_date BETWEEN abr.effective_start_date
5281 AND abr.effective_end_date
5282 AND abr.acty_base_rt_id = avr.acty_base_rt_id
5283 AND p_effective_date BETWEEN avr.effective_start_date
5284 AND avr.effective_end_date
5285 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
5286 AND p_effective_date BETWEEN vpf.effective_start_date
5287 AND vpf.effective_end_date
5288 -- AND vpf.vrbl_rt_prfl_id = eap.vrbl_rt_prfl_id
5289 AND vpf.vrbl_rt_prfl_id = vep.vrbl_rt_prfl_id
5290 AND p_effective_date BETWEEN vep.effective_start_date
5291 AND vep.effective_end_date
5292 AND vep.eligy_prfl_id = elp.eligy_prfl_id
5293 AND p_effective_date BETWEEN elp.effective_start_date
5294 AND elp.effective_end_date
5295 AND eap.eligy_prfl_id = elp.eligy_prfl_id
5296 AND p_effective_date BETWEEN eap.effective_start_date
5297 AND eap.effective_end_date
5298 AND eap.age_fctr_id = agf.age_fctr_id
5299 AND (
5300 (
5301 p_new_val IS NOT NULL
5302 AND p_old_val IS NOT NULL
5303 AND p_new_val >= NVL(agf.mn_age_num
5304 ,p_new_val)
5305 AND p_new_val < decode(nvl(agf.mx_age_num,p_new_val) ,
5306 trunc(nvl(agf.mx_age_num,p_new_val))
5307 ,decode(nvl(agf.mn_age_num,p_new_val), trunc(nvl(agf.mn_age_num,p_new_val)),
5308 nvl(agf.mx_age_num,p_new_val)+1,nvl(agf.mx_age_num,p_new_val)+0.000000001),
5309 nvl(agf.mx_age_num,p_new_val)+0.000000001 ) )
5310 -- ceil( NVL(agf.mx_age_num
5311 -- ,p_new_val) + 0.001 ))
5312 OR (
5313 p_new_val IS NOT NULL
5314 AND p_old_val IS NOT NULL
5315 AND (
5316 p_new_val < NVL(agf.mn_age_num
5317 ,p_new_val)
5318 OR p_new_val >= decode(nvl(agf.mx_age_num,p_new_val) ,
5319 trunc(nvl(agf.mx_age_num,p_new_val))
5320 ,decode(nvl(agf.mn_age_num,p_new_val), trunc(nvl(agf.mn_age_num,p_new_val)),
5321 nvl(agf.mx_age_num,p_new_val)+1,nvl(agf.mx_age_num,p_new_val)+0.000000001),
5322 nvl(agf.mx_age_num,p_new_val)+0.000000001 ) )
5323
5324 -- ceil( NVL(agf.mx_age_num
5325 -- , p_new_val)) + 0.001 )
5326 AND p_old_val >= NVL(agf.mn_age_num
5327 ,p_old_val)
5328 AND p_old_val < decode(nvl(agf.mx_age_num,p_old_val) ,
5329 trunc(nvl(agf.mx_age_num,p_old_val))
5330 ,decode(nvl(agf.mn_age_num,p_old_val), trunc(nvl(agf.mn_age_num,p_old_val)),
5331 nvl(agf.mx_age_num,p_old_val)+1,nvl(agf.mx_age_num,p_old_val)+0.000000001),
5332 nvl(agf.mx_age_num,p_old_val)+0.000000001 ) )
5333 --ceil( NVL(agf.mx_age_num
5334 -- ,p_old_val)) + 0.001 )
5335 OR ( p_new_val IS NULL
5336 AND p_old_val IS NULL));
5337 --
5338 --
5339 l_index PLS_INTEGER;
5340 l_not_hash_found BOOLEAN;
5341 l_c2notfound BOOLEAN;
5342 --
5343 BEGIN
5344 --
5345 -- hr_utility.set_location ('Entering '||l_package,10);
5346 --
5347 -- Steps to do process
5348 --
5349 -- 1) Try and get value from cache
5350 -- 2) If can get from cache then copy to output record
5351 -- 3) If can't get from cache do db hit and then
5352 -- copy to cache record and then copy to output record.
5353 --
5354 -- Get hashed index value
5358 --
5355 --
5356 l_index := MOD(p_plip_id
5357 ,g_hash_key);
5359 IF NOT g_cache_plip_age_rt_rec.EXISTS(l_index) THEN
5360 --
5361 -- Lets store the hash value in this index
5362 --
5363 RAISE NO_DATA_FOUND;
5364 --
5365 ELSE
5366 --
5367 -- If it does exist make sure its the right one
5368 --
5369 IF g_cache_plip_age_rt_rec(l_index).id <> p_plip_id THEN
5370 --
5371 -- Loop through the hash using the jump routine to check further
5372 -- indexes
5373 --
5374 l_not_hash_found := FALSE;
5375 --
5376 WHILE NOT l_not_hash_found LOOP
5377 --
5378 l_index := l_index + g_hash_jump;
5379 --
5380 -- Check if the hash index exists, if not we can use it
5381 --
5382 IF NOT g_cache_plip_age_rt_rec.EXISTS(l_index) THEN
5383 --
5384 -- Lets store the hash value in the index
5385 --
5386 RAISE NO_DATA_FOUND;
5387 --
5388 ELSE
5389 --
5390 -- Make sure the index is the correct one
5391 --
5392 IF g_cache_plip_age_rt_rec(l_index).id = p_plip_id THEN
5393 --
5394 -- We have a match so the hashed value has been stored before
5395 --
5396 l_not_hash_found := TRUE;
5397 --
5398 END IF;
5399 --
5400 END IF;
5401 --
5402 END LOOP;
5403 --
5404 END IF;
5405 --
5406 END IF;
5407 --
5408 -- If p_old_val and p_new_val is set this means we are trying to retrieve
5409 -- the correct rate for the calculated value.
5410 -- Previously we just cached the first rate we
5411 -- found since we needed the determination code, the correct age,los code,etc
5412 -- By killing the cache and forcing the value to be removed we cache the
5413 -- correct rate profile for the case we need.
5414 --
5415 IF p_old_val IS NOT NULL
5416 AND p_new_val IS NOT NULL THEN
5417 --
5418 RAISE NO_DATA_FOUND;
5419 --
5420 END IF;
5421 --
5422 p_rec := g_cache_plip_age_rt_rec(l_index);
5423 --
5424 -- hr_utility.set_location ('Leaving '||l_package,10);
5425 --
5426 EXCEPTION
5427 --
5428 WHEN NO_DATA_FOUND THEN
5429 --
5430 -- The record has not been cached yet so lets cache it
5431 --
5432 OPEN c1;
5433 --
5434 FETCH c1 INTO g_cache_plip_age_rt_rec(l_index);
5435 -- PERFNEW
5436 IF c1%NOTFOUND THEN
5437 --
5438 l_c2notfound := false;
5439 OPEN c2;
5440 FETCH c2 INTO g_cache_plip_age_rt_rec(l_index);
5441 IF c2%NOTFOUND THEN
5442 --
5443 l_c2notfound := true;
5444 --
5445 END IF;
5446 CLOSE c2;
5447 --
5448 END IF;
5449 -- PERFNEW
5450 IF p_old_val IS NULL
5451 AND p_new_val IS NULL THEN
5452 --
5453 IF c1%NOTFOUND and l_c2notfound THEN -- PERFNEW
5454 --
5455 if NOT g_cache_plip_age_rt_rec.EXISTS(l_index) then
5456 g_cache_plip_age_rt_rec(l_index).id := p_plip_id;
5457 g_cache_plip_age_rt_rec(l_index).exist := 'N';
5458 end if;
5459 --
5460 END IF;
5461 --
5462 END IF;
5463 --
5464 p_rec := g_cache_plip_age_rt_rec(l_index);
5465 --
5466 CLOSE c1;
5467 --
5468 END get_age_plip_rate;
5469 --
5470 PROCEDURE get_age_ptip_rate(
5471 p_ptip_id IN NUMBER
5472 ,p_old_val IN NUMBER DEFAULT NULL
5473 ,p_new_val IN NUMBER DEFAULT NULL
5474 ,p_business_group_id IN NUMBER
5475 ,p_effective_date IN DATE
5476 ,p_rec OUT NOCOPY g_cache_age_rec_obj) IS
5477 --
5478 l_package VARCHAR2(80) := g_package || '.get_age_ptip_rate';
5479 l_old_val_1 NUMBER := p_old_val + 1;
5480 l_new_val_1 NUMBER := p_new_val + 1;
5481 --
5482 -- Define Cursor
5483 --
5484 CURSOR c1 IS
5485 SELECT p_ptip_id
5486 ,'Y'
5487 ,agf.age_det_cd
5488 ,agf.age_to_use_cd
5489 ,agf.age_uom
5490 ,agf.age_det_rl
5491 ,agf.rndg_cd
5492 ,agf.rndg_rl
5493 ,agf.age_calc_rl
5494 ,agf.mn_age_num
5495 ,agf.mx_age_num
5496 FROM ben_acty_base_rt_f abr
5497 ,ben_acty_vrbl_rt_f avr
5498 ,ben_vrbl_rt_prfl_f vpf
5499 ,ben_age_rt_f art
5500 ,ben_age_fctr agf
5501 WHERE abr.ptip_id = p_ptip_id
5502 AND p_effective_date BETWEEN abr.effective_start_date
5503 AND abr.effective_end_date
5504 AND abr.acty_base_rt_id = avr.acty_base_rt_id
5505 AND p_effective_date BETWEEN avr.effective_start_date
5506 AND avr.effective_end_date
5510 AND vpf.vrbl_rt_prfl_id = art.vrbl_rt_prfl_id
5507 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
5508 AND p_effective_date BETWEEN vpf.effective_start_date
5509 AND vpf.effective_end_date
5511 AND p_effective_date BETWEEN art.effective_start_date
5512 AND art.effective_end_date
5513 AND art.age_fctr_id = agf.age_fctr_id
5514 AND (
5515 (
5516 p_new_val IS NOT NULL
5517 AND p_old_val IS NOT NULL
5518 AND p_new_val >= NVL(agf.mn_age_num
5519 ,p_new_val)
5520 AND p_new_val < decode(nvl(agf.mx_age_num,p_new_val) ,
5521 trunc(nvl(agf.mx_age_num,p_new_val))
5522 ,decode(nvl(agf.mn_age_num,p_new_val), trunc(nvl(agf.mn_age_num,p_new_val)),
5523 nvl(agf.mx_age_num,p_new_val)+1,nvl(agf.mx_age_num,p_new_val)+0.000000001),
5524 nvl(agf.mx_age_num,p_new_val)+0.000000001 ) )
5525 -- ceil( NVL(agf.mx_age_num
5526 -- ,p_new_val) + 0.001 ))
5527 OR (
5528 p_new_val IS NOT NULL
5529 AND p_old_val IS NOT NULL
5530 AND (
5531 p_new_val < NVL(agf.mn_age_num
5532 ,p_new_val)
5533 OR p_new_val >= decode(nvl(agf.mx_age_num,p_new_val) ,
5534 trunc(nvl(agf.mx_age_num,p_new_val))
5535 ,decode(nvl(agf.mn_age_num,p_new_val), trunc(nvl(agf.mn_age_num,p_new_val)),
5536 nvl(agf.mx_age_num,p_new_val)+1,nvl(agf.mx_age_num,p_new_val)+0.000000001),
5537 nvl(agf.mx_age_num,p_new_val)+0.000000001 ) )
5538 -- ceil( NVL(agf.mx_age_num
5539 -- ,p_new_val)) + 0.001)
5540 AND p_old_val >= NVL(agf.mn_age_num
5541 ,p_old_val)
5542 AND p_old_val < decode(nvl(agf.mx_age_num,p_old_val) ,
5543 trunc(nvl(agf.mx_age_num,p_old_val))
5544 ,decode(nvl(agf.mn_age_num,p_old_val), trunc(nvl(agf.mn_age_num,p_old_val)),
5545 nvl(agf.mx_age_num,p_old_val)+1,nvl(agf.mx_age_num,p_old_val)+0.000000001),
5546 nvl(agf.mx_age_num,p_old_val)+0.000000001 ) )
5547 -- ceil( NVL(agf.mx_age_num
5548 -- ,p_old_val)) + 0.001)
5549 OR ( p_new_val IS NULL
5550 AND p_old_val IS NULL));
5551 -- PERFNEW. SPLIT TO 2 CURSORS C1 and C2.
5552 --UNION ALL
5553 CURSOR c2 IS
5554 SELECT p_ptip_id
5555 ,'Y'
5556 ,agf.age_det_cd
5557 ,agf.age_to_use_cd
5558 ,agf.age_uom
5559 ,agf.age_det_rl
5560 ,agf.rndg_cd
5561 ,agf.rndg_rl
5562 ,agf.age_calc_rl
5563 ,agf.mn_age_num
5564 ,agf.mx_age_num
5565 FROM ben_acty_base_rt_f abr
5566 ,ben_acty_vrbl_rt_f avr
5567 ,ben_eligy_prfl_f elp
5568 ,ben_vrbl_rt_elig_prfl_f vep
5569 ,ben_vrbl_rt_prfl_f vpf
5570 ,ben_elig_age_prte_f eap
5571 --,ben_age_rt_f art
5572 ,ben_age_fctr agf
5573 WHERE abr.ptip_id = p_ptip_id
5574 AND p_effective_date BETWEEN abr.effective_start_date
5575 AND abr.effective_end_date
5576 AND abr.acty_base_rt_id = avr.acty_base_rt_id
5577 AND p_effective_date BETWEEN avr.effective_start_date
5578 AND avr.effective_end_date
5579 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
5580 AND p_effective_date BETWEEN vpf.effective_start_date
5581 AND vpf.effective_end_date
5582 -- AND vpf.vrbl_rt_prfl_id = eap.vrbl_rt_prfl_id
5583 AND vpf.vrbl_rt_prfl_id = vep.vrbl_rt_prfl_id
5584 AND p_effective_date BETWEEN vep.effective_start_date
5585 AND vep.effective_end_date
5586 AND vep.eligy_prfl_id = elp.eligy_prfl_id
5587 AND p_effective_date BETWEEN elp.effective_start_date
5588 AND elp.effective_end_date
5589 AND eap.eligy_prfl_id = elp.eligy_prfl_id
5590 AND p_effective_date BETWEEN eap.effective_start_date
5591 AND eap.effective_end_date
5592 AND eap.age_fctr_id = agf.age_fctr_id
5593 AND (
5594 (
5595 p_new_val IS NOT NULL
5596 AND p_old_val IS NOT NULL
5597 AND p_new_val >= NVL(agf.mn_age_num
5598 ,p_new_val)
5599 AND p_new_val < decode(nvl(agf.mx_age_num,p_new_val) ,
5600 trunc(nvl(agf.mx_age_num,p_new_val))
5601 ,decode(nvl(agf.mn_age_num,p_new_val), trunc(nvl(agf.mn_age_num,p_new_val)),
5602 nvl(agf.mx_age_num,p_new_val)+1,nvl(agf.mx_age_num,p_new_val)+0.000000001),
5603 nvl(agf.mx_age_num,p_new_val)+0.000000001 ) )
5604 -- ceil( NVL(agf.mx_age_num
5605 -- ,p_new_val) + 0.001 ))
5606 OR (
5610 p_new_val < NVL(agf.mn_age_num
5607 p_new_val IS NOT NULL
5608 AND p_old_val IS NOT NULL
5609 AND (
5611 ,p_new_val)
5612 OR p_new_val >= decode(nvl(agf.mx_age_num,p_new_val) ,
5613 trunc(nvl(agf.mx_age_num,p_new_val))
5614 ,decode(nvl(agf.mn_age_num,p_new_val), trunc(nvl(agf.mn_age_num,p_new_val)),
5615 nvl(agf.mx_age_num,p_new_val)+1,nvl(agf.mx_age_num,p_new_val)+0.000000001),
5616 nvl(agf.mx_age_num,p_new_val)+0.000000001 ) )
5617 -- ceil( NVL(agf.mx_age_num
5618 -- ,p_new_val)) + 0.001)
5619 AND p_old_val >= NVL(agf.mn_age_num
5620 ,p_old_val)
5621 AND p_old_val < decode(nvl(agf.mx_age_num,p_old_val) ,
5622 trunc(nvl(agf.mx_age_num,p_old_val))
5623 ,decode(nvl(agf.mn_age_num,p_old_val), trunc(nvl(agf.mn_age_num,p_old_val)),
5624 nvl(agf.mx_age_num,p_old_val)+1,nvl(agf.mx_age_num,p_old_val)+0.000000001),
5625 nvl(agf.mx_age_num,p_old_val)+0.000000001 ) )
5626 -- ceil( NVL(agf.mx_age_num
5627 -- ,p_old_val)) + 0.001)
5628 OR ( p_new_val IS NULL
5629 AND p_old_val IS NULL));
5630 --
5631 --
5632 l_index PLS_INTEGER;
5633 l_not_hash_found BOOLEAN;
5634 l_c2notfound BOOLEAN;
5635 --
5636 BEGIN
5637 --
5638 -- hr_utility.set_location ('Entering '||l_package,10);
5639 --
5640 -- Steps to do process
5641 --
5642 -- 1) Try and get value from cache
5643 -- 2) If can get from cache then copy to output record
5644 -- 3) If can't get from cache do db hit and then
5645 -- copy to cache record and then copy to output record.
5646 --
5647 -- Get hashed index value
5648 --
5649 l_index := MOD(p_ptip_id
5650 ,g_hash_key);
5651 --
5652 IF NOT g_cache_ptip_age_rt_rec.EXISTS(l_index) THEN
5653 --
5654 -- Lets store the hash value in this index
5655 --
5656 RAISE NO_DATA_FOUND;
5657 --
5658 ELSE
5659 --
5660 -- If it does exist make sure its the right one
5661 --
5662 IF g_cache_ptip_age_rt_rec(l_index).id <> p_ptip_id THEN
5663 --
5664 -- Loop through the hash using the jump routine to check further
5665 -- indexes
5666 --
5667 l_not_hash_found := FALSE;
5668 --
5669 WHILE NOT l_not_hash_found LOOP
5670 --
5671 l_index := l_index + g_hash_jump;
5672 --
5673 -- Check if the hash index exists, if not we can use it
5674 --
5675 IF NOT g_cache_ptip_age_rt_rec.EXISTS(l_index) THEN
5676 --
5677 -- Lets store the hash value in the index
5678 --
5679 RAISE NO_DATA_FOUND;
5680 --
5681 ELSE
5682 --
5683 -- Make sure the index is the correct one
5684 --
5685 IF g_cache_ptip_age_rt_rec(l_index).id = p_ptip_id THEN
5686 --
5687 -- We have a match so the hashed value has been stored before
5688 --
5689 l_not_hash_found := TRUE;
5690 --
5691 END IF;
5692 --
5693 END IF;
5694 --
5695 END LOOP;
5696 --
5697 END IF;
5698 --
5699 END IF;
5700 --
5701 -- If p_old_val and p_new_val is set this means we are trying to retrieve
5702 -- the correct rate for the calculated value.
5703 -- Previously we just cached the first rate we
5704 -- found since we needed the determination code, the correct age,los code,etc
5705 -- By killing the cache and forcing the value to be removed we cache the
5706 -- correct rate profile for the case we need.
5707 --
5708 IF p_old_val IS NOT NULL
5709 AND p_new_val IS NOT NULL THEN
5710 --
5711 RAISE NO_DATA_FOUND;
5712 --
5713 END IF;
5714 --
5715 p_rec := g_cache_ptip_age_rt_rec(l_index);
5716 --
5717 -- hr_utility.set_location ('Leaving '||l_package,10);
5718 --
5719 EXCEPTION
5720 --
5721 WHEN NO_DATA_FOUND THEN
5722 --
5723 -- The record has not been cached yet so lets cache it
5724 --
5725 OPEN c1;
5726 --
5727 FETCH c1 INTO g_cache_ptip_age_rt_rec(l_index);
5728 -- PERFNEW
5729 IF c1%NOTFOUND THEN
5730 --
5731 l_c2notfound := false;
5732 OPEN c2;
5733 FETCH c2 INTO g_cache_ptip_age_rt_rec(l_index);
5734 IF c2%NOTFOUND THEN
5735 --
5736 l_c2notfound := true;
5737 --
5738 END IF;
5739 CLOSE c2;
5740 --
5741 END IF;
5742 -- PERFNEW
5743 IF p_old_val IS NULL
5744 AND p_new_val IS NULL THEN
5745 --
5746 IF c1%NOTFOUND and l_c2notfound THEN -- PERFNEW
5747 --
5751 end if;
5748 if NOT g_cache_ptip_age_rt_rec.EXISTS(l_index) then
5749 g_cache_ptip_age_rt_rec(l_index).id := p_ptip_id;
5750 g_cache_ptip_age_rt_rec(l_index).exist := 'N';
5752 --
5753 END IF;
5754 --
5755 END IF;
5756 --
5757 p_rec := g_cache_ptip_age_rt_rec(l_index);
5758 --
5759 CLOSE c1;
5760 --
5761 END get_age_ptip_rate;
5762 --
5763 PROCEDURE get_age_oiplip_rate(
5764 p_oiplip_id IN NUMBER
5765 ,p_old_val IN NUMBER DEFAULT NULL
5766 ,p_new_val IN NUMBER DEFAULT NULL
5767 ,p_business_group_id IN NUMBER
5768 ,p_effective_date IN DATE
5769 ,p_rec OUT NOCOPY g_cache_age_rec_obj) IS
5770 --
5771 l_package VARCHAR2(80) := g_package || '.get_age_oiplip_rate';
5772 l_old_val_1 NUMBER := p_old_val + 1;
5773 l_new_val_1 NUMBER := p_new_val + 1;
5774 --
5775 -- Define Cursor
5776 --
5777 CURSOR c1 IS
5778 SELECT p_oiplip_id
5779 ,'Y'
5780 ,agf.age_det_cd
5781 ,agf.age_to_use_cd
5782 ,agf.age_uom
5783 ,agf.age_det_rl
5784 ,agf.rndg_cd
5785 ,agf.rndg_rl
5786 ,agf.age_calc_rl
5787 ,agf.mn_age_num
5788 ,agf.mx_age_num
5789 FROM ben_acty_base_rt_f abr
5790 ,ben_acty_vrbl_rt_f avr
5791 ,ben_vrbl_rt_prfl_f vpf
5792 ,ben_age_rt_f art
5793 ,ben_age_fctr agf
5794 WHERE abr.oiplip_id = p_oiplip_id
5795 AND p_effective_date BETWEEN abr.effective_start_date
5796 AND abr.effective_end_date
5797 AND abr.acty_base_rt_id = avr.acty_base_rt_id
5798 AND p_effective_date BETWEEN avr.effective_start_date
5799 AND avr.effective_end_date
5800 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
5801 AND p_effective_date BETWEEN vpf.effective_start_date
5802 AND vpf.effective_end_date
5803 AND vpf.vrbl_rt_prfl_id = art.vrbl_rt_prfl_id
5804 AND p_effective_date BETWEEN art.effective_start_date
5805 AND art.effective_end_date
5806 AND art.age_fctr_id = agf.age_fctr_id
5807 AND (
5808 (
5809 p_new_val IS NOT NULL
5810 AND p_old_val IS NOT NULL
5811 AND p_new_val >= NVL(agf.mn_age_num
5812 ,p_new_val)
5813 AND p_new_val < decode(nvl(agf.mx_age_num,p_new_val) ,
5814 trunc(nvl(agf.mx_age_num,p_new_val))
5815 ,decode(nvl(agf.mn_age_num,p_new_val), trunc(nvl(agf.mn_age_num,p_new_val)),
5816 nvl(agf.mx_age_num,p_new_val)+1,nvl(agf.mx_age_num,p_new_val)+0.000000001),
5817 nvl(agf.mx_age_num,p_new_val)+0.000000001 ) )
5818 -- ceil( NVL(agf.mx_age_num
5819 -- , p_new_val) + 0.001 ))
5820 OR (
5821 p_new_val IS NOT NULL
5822 AND p_old_val IS NOT NULL
5823 AND (
5824 p_new_val < NVL(agf.mn_age_num
5825 ,p_new_val)
5826 OR p_new_val >= decode(nvl(agf.mx_age_num,p_new_val) ,
5827 trunc(nvl(agf.mx_age_num,p_new_val))
5828 ,decode(nvl(agf.mn_age_num,p_new_val), trunc(nvl(agf.mn_age_num,p_new_val)),
5829 nvl(agf.mx_age_num,p_new_val)+1,nvl(agf.mx_age_num,p_new_val)+0.000000001),
5830 nvl(agf.mx_age_num,p_new_val)+0.000000001 ) )
5831 -- ceil( NVL(agf.mx_age_num
5832 -- ,p_new_val)) + 0.001 )
5833 AND p_old_val >= NVL(agf.mn_age_num
5834 ,p_old_val)
5835 AND p_old_val < decode(nvl(agf.mx_age_num,p_old_val) ,
5836 trunc(nvl(agf.mx_age_num,p_old_val))
5837 ,decode(nvl(agf.mn_age_num,p_old_val), trunc(nvl(agf.mn_age_num,p_old_val)),
5838 nvl(agf.mx_age_num,p_old_val)+1,nvl(agf.mx_age_num,p_old_val)+0.000000001),
5839 nvl(agf.mx_age_num,p_old_val)+0.000000001 ) )
5840 -- ceil( NVL(agf.mx_age_num
5841 -- ,p_old_val)) + 0.001 )
5842 OR ( p_new_val IS NULL
5843 AND p_old_val IS NULL));
5844 -- PERFNEW. SPLIT TO 2 CURSORS C1 and C2.
5845 --UNION ALL
5846 CURSOR c2 IS
5847 SELECT p_oiplip_id
5848 ,'Y'
5849 ,agf.age_det_cd
5850 ,agf.age_to_use_cd
5851 ,agf.age_uom
5852 ,agf.age_det_rl
5853 ,agf.rndg_cd
5854 ,agf.rndg_rl
5855 ,agf.age_calc_rl
5856 ,agf.mn_age_num
5857 ,agf.mx_age_num
5858 FROM ben_acty_base_rt_f abr
5862 ,ben_vrbl_rt_prfl_f vpf
5859 ,ben_acty_vrbl_rt_f avr
5860 ,ben_eligy_prfl_f elp
5861 ,ben_vrbl_rt_elig_prfl_f vep
5863 ,ben_elig_age_prte_f eap
5864 --,ben_age_rt_f art
5865 ,ben_age_fctr agf
5866 WHERE abr.oiplip_id = p_oiplip_id
5867 AND p_effective_date BETWEEN abr.effective_start_date
5868 AND abr.effective_end_date
5869 AND abr.acty_base_rt_id = avr.acty_base_rt_id
5870 AND p_effective_date BETWEEN avr.effective_start_date
5871 AND avr.effective_end_date
5872 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
5873 AND p_effective_date BETWEEN vpf.effective_start_date
5874 AND vpf.effective_end_date
5875 -- AND vpf.vrbl_rt_prfl_id = eap.vrbl_rt_prfl_id
5876 AND vpf.vrbl_rt_prfl_id = vep.vrbl_rt_prfl_id
5877 AND p_effective_date BETWEEN vep.effective_start_date
5878 AND vep.effective_end_date
5879 AND vep.eligy_prfl_id = elp.eligy_prfl_id
5880 AND p_effective_date BETWEEN elp.effective_start_date
5881 AND elp.effective_end_date
5882 AND eap.eligy_prfl_id = elp.eligy_prfl_id
5883 AND p_effective_date BETWEEN eap.effective_start_date
5884 AND eap.effective_end_date
5885 AND eap.age_fctr_id = agf.age_fctr_id
5886 AND (
5887 (
5888 p_new_val IS NOT NULL
5889 AND p_old_val IS NOT NULL
5890 AND p_new_val >= NVL(agf.mn_age_num
5891 ,p_new_val)
5892 AND p_new_val < decode(nvl(agf.mx_age_num,p_new_val) ,
5893 trunc(nvl(agf.mx_age_num,p_new_val))
5894 ,decode(nvl(agf.mn_age_num,p_new_val), trunc(nvl(agf.mn_age_num,p_new_val)),
5895 nvl(agf.mx_age_num,p_new_val)+1,nvl(agf.mx_age_num,p_new_val)+0.000000001),
5896 nvl(agf.mx_age_num,p_new_val)+0.000000001 ) )
5897 -- ceil( NVL(agf.mx_age_num
5898 -- , p_new_val) + 0.001 ))
5899 OR (
5900 p_new_val IS NOT NULL
5901 AND p_old_val IS NOT NULL
5902 AND (
5903 p_new_val < NVL(agf.mn_age_num
5904 ,p_new_val)
5905 OR p_new_val >= decode(nvl(agf.mx_age_num,p_new_val) ,
5906 trunc(nvl(agf.mx_age_num,p_new_val))
5907 ,decode(nvl(agf.mn_age_num,p_new_val), trunc(nvl(agf.mn_age_num,p_new_val)),
5908 nvl(agf.mx_age_num,p_new_val)+1,nvl(agf.mx_age_num,p_new_val)+0.000000001),
5909 nvl(agf.mx_age_num,p_new_val)+0.000000001 ) )
5910 -- ceil( NVL(agf.mx_age_num
5911 -- ,p_new_val)) + 0.001 )
5912 AND p_old_val >= NVL(agf.mn_age_num
5913 ,p_old_val)
5914 AND p_old_val < decode(nvl(agf.mx_age_num,p_old_val) ,
5915 trunc(nvl(agf.mx_age_num,p_old_val))
5916 ,decode(nvl(agf.mn_age_num,p_old_val), trunc(nvl(agf.mn_age_num,p_old_val)),
5917 nvl(agf.mx_age_num,p_old_val)+1,nvl(agf.mx_age_num,p_old_val)+0.000000001),
5918 nvl(agf.mx_age_num,p_old_val)+0.000000001 ) )
5919 -- ceil( NVL(agf.mx_age_num
5920 -- ,p_old_val)) + 0.001 )
5921 OR ( p_new_val IS NULL
5922 AND p_old_val IS NULL));
5923 --
5924 --
5925 l_index PLS_INTEGER;
5926 l_not_hash_found BOOLEAN;
5927 l_c2notfound BOOLEAN;
5928 --
5929 BEGIN
5930 --
5931 -- hr_utility.set_location ('Entering '||l_package,10);
5932 --
5933 -- Steps to do process
5934 --
5935 -- 1) Try and get value from cache
5936 -- 2) If can get from cache then copy to output record
5937 -- 3) If can't get from cache do db hit and then
5938 -- copy to cache record and then copy to output record.
5939 --
5940 -- Get hashed index value
5941 --
5942 l_index := MOD(p_oiplip_id
5943 ,g_hash_key);
5944 --
5945 IF NOT g_cache_oiplip_age_rt_rec.EXISTS(l_index) THEN
5946 --
5947 -- Lets store the hash value in this index
5948 --
5949 RAISE NO_DATA_FOUND;
5950 --
5951 ELSE
5952 --
5953 -- If it does exist make sure its the right one
5954 --
5955 IF g_cache_oiplip_age_rt_rec(l_index).id <> p_oiplip_id THEN
5956 --
5957 -- Loop through the hash using the jump routine to check further
5958 -- indexes
5959 --
5960 l_not_hash_found := FALSE;
5961 --
5962 WHILE NOT l_not_hash_found LOOP
5963 --
5964 l_index := l_index + g_hash_jump;
5965 --
5966 -- Check if the hash index exists, if not we can use it
5967 --
5968 IF NOT g_cache_oiplip_age_rt_rec.EXISTS(l_index) THEN
5969 --
5970 -- Lets store the hash value in the index
5971 --
5972 RAISE NO_DATA_FOUND;
5973 --
5974 ELSE
5975 --
5979 --
5976 -- Make sure the index is the correct one
5977 --
5978 IF g_cache_oiplip_age_rt_rec(l_index).id = p_oiplip_id THEN
5980 -- We have a match so the hashed value has been stored before
5981 --
5982 l_not_hash_found := TRUE;
5983 --
5984 END IF;
5985 --
5986 END IF;
5987 --
5988 END LOOP;
5989 --
5990 END IF;
5991 --
5992 END IF;
5993 --
5994 -- If p_old_val and p_new_val is set this means we are trying to retrieve
5995 -- the correct rate for the calculated value.
5996 -- Previously we just cached the first rate we
5997 -- found since we needed the determination code, the correct age,los code,etc
5998 -- By killing the cache and forcing the value to be removed we cache the
5999 -- correct rate profile for the case we need.
6000 --
6001 IF p_old_val IS NOT NULL
6002 AND p_new_val IS NOT NULL THEN
6003 --
6004 RAISE NO_DATA_FOUND;
6005 --
6006 END IF;
6007 --
6008 p_rec := g_cache_oiplip_age_rt_rec(l_index);
6009 --
6010 -- hr_utility.set_location ('Leaving '||l_package,10);
6011 --
6012 EXCEPTION
6013 --
6014 WHEN NO_DATA_FOUND THEN
6015 --
6016 -- The record has not been cached yet so lets cache it
6017 --
6018 OPEN c1;
6019 --
6020 FETCH c1 INTO g_cache_oiplip_age_rt_rec(l_index);
6021 -- PERFNEW
6022 IF c1%NOTFOUND THEN
6023 --
6024 l_c2notfound := false;
6025 OPEN c2;
6026 FETCH c2 INTO g_cache_oiplip_age_rt_rec(l_index);
6027 IF c2%NOTFOUND THEN
6028 --
6029 l_c2notfound := true;
6030 --
6031 END IF;
6032 CLOSE c2;
6033 --
6034 END IF;
6035 -- PERFNEW
6036 IF p_old_val IS NULL
6037 AND p_new_val IS NULL THEN
6038 --
6039 IF c1%NOTFOUND and l_c2notfound THEN -- PERFNEW
6040 --
6041 if NOT g_cache_oiplip_age_rt_rec.EXISTS(l_index) then
6042 g_cache_oiplip_age_rt_rec(l_index).id := p_oiplip_id;
6043 g_cache_oiplip_age_rt_rec(l_index).exist := 'N';
6044 end if;
6045 --
6046 END IF;
6047 --
6048 END IF;
6049 --
6050 p_rec := g_cache_oiplip_age_rt_rec(l_index);
6051 --
6052 CLOSE c1;
6053 --
6054 END get_age_oiplip_rate;
6055 --
6056 PROCEDURE get_age_rate(
6057 p_pgm_id IN NUMBER
6058 ,p_pl_id IN NUMBER
6059 ,p_oipl_id IN NUMBER
6060 ,p_plip_id IN NUMBER
6061 ,p_ptip_id IN NUMBER
6062 ,p_oiplip_id IN NUMBER
6063 ,p_old_val IN NUMBER DEFAULT NULL
6064 ,p_new_val IN NUMBER DEFAULT NULL
6065 ,p_business_group_id IN NUMBER
6066 ,p_effective_date IN DATE
6067 ,p_rec OUT NOCOPY g_cache_age_rec_obj) IS
6068 --
6069 l_package VARCHAR2(80) := g_package || '.get_age_rate';
6070 --
6071 BEGIN
6072 --
6073 -- hr_utility.set_location ('Entering '||l_package,10);
6074 --
6075 -- Derive which data type we are dealing with
6076 --
6077 IF p_pgm_id IS NOT NULL THEN
6078 --
6079 get_age_pgm_rate(p_pgm_id=> p_pgm_id
6080 ,p_old_val => p_old_val
6081 ,p_new_val => p_new_val
6082 ,p_business_group_id => p_business_group_id
6083 ,p_effective_date => p_effective_date
6084 ,p_rec => p_rec);
6085 --
6086 ELSIF p_pl_id IS NOT NULL THEN
6087 --
6088 get_age_pl_rate(p_pl_id=> p_pl_id
6089 ,p_old_val => p_old_val
6090 ,p_new_val => p_new_val
6091 ,p_business_group_id => p_business_group_id
6092 ,p_effective_date => p_effective_date
6093 ,p_rec => p_rec);
6094 --
6095 ELSIF p_oipl_id IS NOT NULL THEN
6096 --
6097 get_age_oipl_rate(p_oipl_id=> p_oipl_id
6098 ,p_old_val => p_old_val
6099 ,p_new_val => p_new_val
6100 ,p_business_group_id => p_business_group_id
6101 ,p_effective_date => p_effective_date
6102 ,p_rec => p_rec);
6103 --
6104 ELSIF p_plip_id IS NOT NULL THEN
6105 --
6106 get_age_plip_rate(p_plip_id=> p_plip_id
6107 ,p_old_val => p_old_val
6108 ,p_new_val => p_new_val
6109 ,p_business_group_id => p_business_group_id
6110 ,p_effective_date => p_effective_date
6111 ,p_rec => p_rec);
6112 --
6113 ELSIF p_ptip_id IS NOT NULL THEN
6114 --
6115 get_age_ptip_rate(p_ptip_id=> p_ptip_id
6116 ,p_old_val => p_old_val
6117 ,p_new_val => p_new_val
6118 ,p_business_group_id => p_business_group_id
6119 ,p_effective_date => p_effective_date
6120 ,p_rec => p_rec);
6121 --
6122 ELSIF p_oiplip_id IS NOT NULL THEN
6123 --
6127 ,p_business_group_id => p_business_group_id
6124 get_age_oiplip_rate(p_oiplip_id=> p_oiplip_id
6125 ,p_old_val => p_old_val
6126 ,p_new_val => p_new_val
6128 ,p_effective_date => p_effective_date
6129 ,p_rec => p_rec);
6130 --
6131 END IF;
6132 --
6133 -- hr_utility.set_location ('Leaving '||l_package,10);
6134 --
6135 END get_age_rate;
6136 --
6137 PROCEDURE get_comp_pgm_elig(
6138 p_pgm_id IN NUMBER
6139 ,p_old_val in number default null
6140 ,p_new_val in number default null
6141 ,p_business_group_id IN NUMBER
6142 ,p_effective_date IN DATE
6143 ,p_rec OUT NOCOPY g_cache_clf_rec_obj) IS
6144 --
6145 l_package VARCHAR2(80) := g_package || '.get_comp_pgm_elig';
6146 --
6147 -- Define Cursor
6148 --
6149 CURSOR c1 IS
6150 SELECT p_pgm_id
6151 ,'Y'
6152 ,clf.comp_lvl_uom
6153 ,clf.comp_src_cd
6154 ,clf.comp_lvl_det_cd
6155 ,clf.comp_lvl_det_rl
6156 ,clf.rndg_cd
6157 ,clf.rndg_rl
6158 ,clf.mn_comp_val
6159 ,clf.mx_comp_val
6160 ,clf.bnfts_bal_id
6161 ,clf.defined_balance_id
6162 ,clf.sttd_sal_prdcty_cd
6163 ,clf.comp_lvl_fctr_id
6164 ,clf.comp_calc_rl
6165 FROM ben_comp_lvl_fctr clf
6166 ,ben_elig_comp_lvl_prte_f ecl
6167 ,ben_eligy_prfl_f elp
6168 ,ben_prtn_elig_prfl_f cep
6169 ,ben_prtn_elig_f epa
6170 WHERE epa.pgm_id = p_pgm_id
6171 AND p_effective_date BETWEEN epa.effective_start_date
6172 AND epa.effective_end_date
6173 AND epa.prtn_elig_id = cep.prtn_elig_id
6174 AND p_effective_date BETWEEN cep.effective_start_date
6175 AND cep.effective_end_date
6176 AND cep.eligy_prfl_id = elp.eligy_prfl_id
6177 AND p_effective_date BETWEEN elp.effective_start_date
6178 AND elp.effective_end_date
6179 AND ecl.eligy_prfl_id = elp.eligy_prfl_id
6180 AND p_effective_date BETWEEN ecl.effective_start_date
6181 AND ecl.effective_end_date
6182 AND ecl.comp_lvl_fctr_id = clf.comp_lvl_fctr_id
6183 AND (
6184 (
6185 p_new_val IS NOT NULL
6186 AND p_old_val IS NOT NULL
6187 AND p_new_val >= NVL(clf.mn_comp_val ,p_new_val)
6188 and p_new_val < decode(nvl(clf.mx_comp_val,p_new_val) ,
6189 trunc(nvl(clf.mx_comp_val,p_new_val))
6190 ,decode(nvl(clf.mn_comp_val,p_new_val), trunc(nvl(clf.mn_comp_val,p_new_val)),
6191 nvl(clf.mx_comp_val,p_new_val)+1,nvl(clf.mx_comp_val,p_new_val)+0.000000001),
6192 nvl(clf.mx_comp_val,p_new_val)+0.000000001 )
6193 -- and p_old_val < clf.mn_comp_val
6194 )
6195 OR
6196 (
6197 p_new_val IS NOT NULL
6198 AND p_old_val IS NOT NULL
6199 AND
6200 (
6201 p_new_val < NVL(clf.mn_comp_val,p_new_val)
6202 OR
6203 p_new_val >= decode(nvl(clf.mx_comp_val,p_new_val) ,
6204 trunc(nvl(clf.mx_comp_val,p_new_val))
6205 ,decode(nvl(clf.mn_comp_val,p_new_val), trunc(nvl(clf.mn_comp_val,p_new_val)),
6206 nvl(clf.mx_comp_val,p_new_val)+1,nvl(clf.mx_comp_val,p_new_val)+0.000000001),
6207 nvl(clf.mx_comp_val,p_new_val)+0.000000001 )
6208 )
6209 AND p_old_val >= NVL(clf.mn_comp_val ,p_old_val)
6210 and p_old_val < decode(nvl(clf.mx_comp_val,p_old_val) ,
6211 trunc(nvl(clf.mx_comp_val,p_old_val))
6212 ,decode(nvl(clf.mn_comp_val,p_old_val), trunc(nvl(clf.mn_comp_val,p_old_val)),
6213 nvl(clf.mx_comp_val,p_old_val)+1,nvl(clf.mx_comp_val,p_old_val)+0.000000001),
6214 nvl(clf.mx_comp_val,p_old_val)+0.000000001 )
6215 )
6216 OR
6217 ( p_new_val IS NULL
6218 AND p_old_val IS NULL
6219 )
6220 );
6221
6222 --
6223 l_index PLS_INTEGER;
6224 l_not_hash_found BOOLEAN;
6225 --
6226 BEGIN
6227 --
6228 -- hr_utility.set_location ('Entering '||l_package,10);
6229 --
6230 -- Steps to do process
6231 --
6232 -- 1) Try and get value from cache
6233 -- 2) If can get from cache then copy to output record
6234 -- 3) If can't get from cache do db hit and then
6235 -- copy to cache record and then copy to output record.
6236 --
6237 -- Get hashed index value
6238 --
6239 l_index := MOD(p_pgm_id
6240 ,g_hash_key);
6241 --
6242 IF NOT g_cache_pgm_clf_el_rec.EXISTS(l_index) THEN
6243 --
6244 -- Lets store the hash value in this index
6245 --
6246 RAISE NO_DATA_FOUND;
6247 --
6248 ELSE
6249 --
6253 --
6250 -- If it does exist make sure its the right one
6251 --
6252 IF g_cache_pgm_clf_el_rec(l_index).id <> p_pgm_id THEN
6254 -- Loop through the hash using the jump routine to check further
6255 -- indexes
6256 --
6257 l_not_hash_found := FALSE;
6258 --
6259 WHILE NOT l_not_hash_found LOOP
6260 --
6261 l_index := l_index + g_hash_jump;
6262 --
6263 -- Check if the hash index exists, if not we can use it
6264 --
6265 IF NOT g_cache_pgm_clf_el_rec.EXISTS(l_index) THEN
6266 --
6267 -- Lets store the hash value in the index
6268 --
6269 RAISE NO_DATA_FOUND;
6270 --
6271 ELSE
6272 --
6273 -- Make sure the index is the correct one
6274 --
6275 IF g_cache_pgm_clf_el_rec(l_index).id = p_pgm_id THEN
6276 --
6277 -- We have a match so the hashed value has been stored before
6278 --
6279 l_not_hash_found := TRUE;
6280 --
6281 END IF;
6282 --
6283 END IF;
6284 --
6285 END LOOP;
6286 --
6287 END IF;
6288 --
6289 END IF;
6290 --
6291 IF p_old_val IS NOT NULL
6292 AND p_new_val IS NOT NULL THEN
6293 --
6294 RAISE NO_DATA_FOUND;
6295 --
6296 END IF;
6297
6298 p_rec := g_cache_pgm_clf_el_rec(l_index);
6299 --
6300 -- hr_utility.set_location ('Leaving '||l_package,10);
6301 --
6302 EXCEPTION
6303 --
6304 WHEN NO_DATA_FOUND THEN
6305 --
6306 -- The record has not been cached yet so lets cache it
6307 --
6308 OPEN c1;
6309 --
6310 FETCH c1 INTO g_cache_pgm_clf_el_rec(l_index);
6311 IF c1%NOTFOUND THEN
6312 --
6313 if NOT g_cache_pgm_clf_el_rec.EXISTS(l_index) then
6314 g_cache_pgm_clf_el_rec(l_index).id := p_pgm_id;
6315 g_cache_pgm_clf_el_rec(l_index).exist := 'N';
6316 end if;
6317 --
6318 END IF;
6319 --
6320 p_rec := g_cache_pgm_clf_el_rec(l_index);
6321 --
6322 CLOSE c1;
6323 --
6324 END get_comp_pgm_elig;
6325 --
6326 PROCEDURE get_comp_pl_elig(
6327 p_pl_id IN NUMBER
6328 ,p_old_val in number default null
6329 ,p_new_val in number default null
6330 ,p_business_group_id IN NUMBER
6331 ,p_effective_date IN DATE
6332 ,p_rec OUT NOCOPY g_cache_clf_rec_obj) IS
6333 --
6334 l_package VARCHAR2(80) := g_package || '.get_comp_pl_elig';
6335 --
6336 -- Define Cursor
6337 --
6338 CURSOR c1 IS
6339 SELECT p_pl_id
6340 ,'Y'
6341 ,clf.comp_lvl_uom
6342 ,clf.comp_src_cd
6343 ,clf.comp_lvl_det_cd
6344 ,clf.comp_lvl_det_rl
6345 ,clf.rndg_cd
6346 ,clf.rndg_rl
6347 ,clf.mn_comp_val
6348 ,clf.mx_comp_val
6349 ,clf.bnfts_bal_id
6350 ,clf.defined_balance_id
6351 ,clf.sttd_sal_prdcty_cd
6352 ,clf.comp_lvl_fctr_id
6353 ,clf.comp_calc_rl
6354 FROM ben_comp_lvl_fctr clf
6355 ,ben_elig_comp_lvl_prte_f ecl
6356 ,ben_eligy_prfl_f elp
6357 ,ben_prtn_elig_prfl_f cep
6358 ,ben_prtn_elig_f epa
6359 WHERE epa.pl_id = p_pl_id
6360 AND p_effective_date BETWEEN epa.effective_start_date
6361 AND epa.effective_end_date
6362 AND epa.prtn_elig_id = cep.prtn_elig_id
6363 AND p_effective_date BETWEEN cep.effective_start_date
6364 AND cep.effective_end_date
6365 AND cep.eligy_prfl_id = elp.eligy_prfl_id
6366 AND p_effective_date BETWEEN elp.effective_start_date
6367 AND elp.effective_end_date
6368 AND ecl.eligy_prfl_id = elp.eligy_prfl_id
6369 AND p_effective_date BETWEEN ecl.effective_start_date
6370 AND ecl.effective_end_date
6371 AND ecl.comp_lvl_fctr_id = clf.comp_lvl_fctr_id
6372 AND (
6373 (
6374 p_new_val IS NOT NULL
6375 AND p_old_val IS NOT NULL
6376 AND p_new_val >= NVL(clf.mn_comp_val ,p_new_val)
6377 and p_new_val < decode(nvl(clf.mx_comp_val,p_new_val) ,
6378 trunc(nvl(clf.mx_comp_val,p_new_val))
6379 ,decode(nvl(clf.mn_comp_val,p_new_val), trunc(nvl(clf.mn_comp_val,p_new_val)),
6380 nvl(clf.mx_comp_val,p_new_val)+1,nvl(clf.mx_comp_val,p_new_val)+0.000000001),
6381 nvl(clf.mx_comp_val,p_new_val)+0.000000001 )
6382 -- and p_old_val < clf.mn_comp_val
6383 )
6384 OR
6385 (
6386 p_new_val IS NOT NULL
6387 AND p_old_val IS NOT NULL
6388 AND
6389 (
6390 p_new_val < NVL(clf.mn_comp_val,p_new_val)
6391 OR
6395 nvl(clf.mx_comp_val,p_new_val)+1,nvl(clf.mx_comp_val,p_new_val)+0.000000001),
6392 p_new_val >= decode(nvl(clf.mx_comp_val,p_new_val) ,
6393 trunc(nvl(clf.mx_comp_val,p_new_val))
6394 ,decode(nvl(clf.mn_comp_val,p_new_val), trunc(nvl(clf.mn_comp_val,p_new_val)),
6396 nvl(clf.mx_comp_val,p_new_val)+0.000000001 )
6397 )
6398 AND p_old_val >= NVL(clf.mn_comp_val ,p_old_val)
6399 and p_old_val < decode(nvl(clf.mx_comp_val,p_old_val) ,
6400 trunc(nvl(clf.mx_comp_val,p_old_val))
6401 ,decode(nvl(clf.mn_comp_val,p_old_val), trunc(nvl(clf.mn_comp_val,p_old_val)),
6402 nvl(clf.mx_comp_val,p_old_val)+1,nvl(clf.mx_comp_val,p_old_val)+0.000000001),
6403 nvl(clf.mx_comp_val,p_old_val)+0.000000001 )
6404 )
6405 OR
6406 ( p_new_val IS NULL
6407 AND p_old_val IS NULL
6408 )
6409 );
6410
6411 --
6412 l_index PLS_INTEGER;
6413 l_not_hash_found BOOLEAN;
6414 --
6415 BEGIN
6416 --
6417 -- hr_utility.set_location ('Entering '||l_package,10);
6418 --
6419 -- Steps to do process
6420 --
6421 -- 1) Try and get value from cache
6422 -- 2) If can get from cache then copy to output record
6423 -- 3) If can't get from cache do db hit and then
6424 -- copy to cache record and then copy to output record.
6425 --
6426 -- Get hashed index value
6427 --
6428 l_index := MOD(p_pl_id
6429 ,g_hash_key);
6430 --
6431 IF NOT g_cache_pl_clf_el_rec.EXISTS(l_index) THEN
6432 --
6433 -- Lets store the hash value in this index
6434 --
6435 RAISE NO_DATA_FOUND;
6436 --
6437 ELSE
6438 --
6439 -- If it does exist make sure its the right one
6440 --
6441 IF g_cache_pl_clf_el_rec(l_index).id <> p_pl_id THEN
6442 --
6443 -- Loop through the hash using the jump routine to check further
6444 -- indexes
6445 --
6446 l_not_hash_found := FALSE;
6447 --
6448 WHILE NOT l_not_hash_found LOOP
6449 --
6450 l_index := l_index + g_hash_jump;
6451 --
6452 -- Check if the hash index exists, if not we can use it
6453 --
6454 IF NOT g_cache_pl_clf_el_rec.EXISTS(l_index) THEN
6455 --
6456 -- Lets store the hash value in the index
6457 --
6458 RAISE NO_DATA_FOUND;
6459 --
6460 ELSE
6461 --
6462 -- Make sure the index is the correct one
6463 --
6464 IF g_cache_pl_clf_el_rec(l_index).id = p_pl_id THEN
6465 --
6466 -- We have a match so the hashed value has been stored before
6467 --
6468 l_not_hash_found := TRUE;
6469 --
6470 END IF;
6471 --
6472 END IF;
6473 --
6474 END LOOP;
6475 --
6476 END IF;
6477 --
6478 END IF;
6479 --
6480 IF p_old_val IS NOT NULL
6481 AND p_new_val IS NOT NULL THEN
6482 --
6483 RAISE NO_DATA_FOUND;
6484 --
6485 END IF;
6486 p_rec := g_cache_pl_clf_el_rec(l_index);
6487 --
6488 -- hr_utility.set_location ('Leaving '||l_package,10);
6489 --
6490 EXCEPTION
6491 --
6492 WHEN NO_DATA_FOUND THEN
6493 --
6494 -- The record has not been cached yet so lets cache it
6495 --
6496 OPEN c1;
6497 --
6498 FETCH c1 INTO g_cache_pl_clf_el_rec(l_index);
6499 IF c1%NOTFOUND THEN
6500 --
6501 if NOT g_cache_pl_clf_el_rec.EXISTS(l_index) then
6502 g_cache_pl_clf_el_rec(l_index).id := p_pl_id;
6503 g_cache_pl_clf_el_rec(l_index).exist := 'N';
6504 end if;
6505 --
6506 END IF;
6507 --
6508 p_rec := g_cache_pl_clf_el_rec(l_index);
6509 --
6510 CLOSE c1;
6511 --
6512 END get_comp_pl_elig;
6513 --
6514 PROCEDURE get_comp_oipl_elig(
6515 p_oipl_id IN NUMBER
6516 ,p_old_val in number default null
6517 ,p_new_val in number default null
6518 ,p_business_group_id IN NUMBER
6519 ,p_effective_date IN DATE
6520 ,p_rec OUT NOCOPY g_cache_clf_rec_obj) IS
6521 --
6522 l_package VARCHAR2(80) := g_package || '.get_comp_oipl_elig';
6523 --
6524 -- Define Cursor
6525 --
6526 CURSOR c1 IS
6527 SELECT p_oipl_id
6528 ,'Y'
6529 ,clf.comp_lvl_uom
6530 ,clf.comp_src_cd
6531 ,clf.comp_lvl_det_cd
6532 ,clf.comp_lvl_det_rl
6533 ,clf.rndg_cd
6534 ,clf.rndg_rl
6535 ,clf.mn_comp_val
6536 ,clf.mx_comp_val
6537 ,clf.bnfts_bal_id
6541 ,clf.comp_calc_rl
6538 ,clf.defined_balance_id
6539 ,clf.sttd_sal_prdcty_cd
6540 ,clf.comp_lvl_fctr_id
6542 FROM ben_comp_lvl_fctr clf
6543 ,ben_elig_comp_lvl_prte_f ecl
6544 ,ben_eligy_prfl_f elp
6545 ,ben_prtn_elig_prfl_f cep
6546 ,ben_prtn_elig_f epa
6547 WHERE epa.oipl_id = p_oipl_id
6548 AND p_effective_date BETWEEN epa.effective_start_date
6549 AND epa.effective_end_date
6550 AND epa.prtn_elig_id = cep.prtn_elig_id
6551 AND p_effective_date BETWEEN cep.effective_start_date
6552 AND cep.effective_end_date
6553 AND cep.eligy_prfl_id = elp.eligy_prfl_id
6554 AND p_effective_date BETWEEN elp.effective_start_date
6555 AND elp.effective_end_date
6556 AND ecl.eligy_prfl_id = elp.eligy_prfl_id
6557 AND p_effective_date BETWEEN ecl.effective_start_date
6558 AND ecl.effective_end_date
6559 AND ecl.comp_lvl_fctr_id = clf.comp_lvl_fctr_id
6560 AND (
6561 (
6562 p_new_val IS NOT NULL
6563 AND p_old_val IS NOT NULL
6564 AND p_new_val >= NVL(clf.mn_comp_val ,p_new_val)
6565 and p_new_val < decode(nvl(clf.mx_comp_val,p_new_val) ,
6566 trunc(nvl(clf.mx_comp_val,p_new_val))
6567 ,decode(nvl(clf.mn_comp_val,p_new_val), trunc(nvl(clf.mn_comp_val,p_new_val)),
6568 nvl(clf.mx_comp_val,p_new_val)+1,nvl(clf.mx_comp_val,p_new_val)+0.000000001),
6569 nvl(clf.mx_comp_val,p_new_val)+0.000000001 )
6570 -- and p_old_val < clf.mn_comp_val
6571 )
6572 OR
6573 (
6574 p_new_val IS NOT NULL
6575 AND p_old_val IS NOT NULL
6576 AND
6577 (
6578 p_new_val < NVL(clf.mn_comp_val,p_new_val)
6579 OR
6580 p_new_val >= decode(nvl(clf.mx_comp_val,p_new_val) ,
6581 trunc(nvl(clf.mx_comp_val,p_new_val))
6582 ,decode(nvl(clf.mn_comp_val,p_new_val), trunc(nvl(clf.mn_comp_val,p_new_val)),
6583 nvl(clf.mx_comp_val,p_new_val)+1,nvl(clf.mx_comp_val,p_new_val)+0.000000001),
6584 nvl(clf.mx_comp_val,p_new_val)+0.000000001 )
6585 )
6586 AND p_old_val >= NVL(clf.mn_comp_val ,p_old_val)
6587 and p_old_val < decode(nvl(clf.mx_comp_val,p_old_val) ,
6588 trunc(nvl(clf.mx_comp_val,p_old_val))
6589 ,decode(nvl(clf.mn_comp_val,p_old_val), trunc(nvl(clf.mn_comp_val,p_old_val)),
6590 nvl(clf.mx_comp_val,p_old_val)+1,nvl(clf.mx_comp_val,p_old_val)+0.000000001),
6591 nvl(clf.mx_comp_val,p_old_val)+0.000000001 )
6592 )
6593 OR
6594 ( p_new_val IS NULL
6595 AND p_old_val IS NULL
6596 )
6597 );
6598
6599 --
6600 l_index PLS_INTEGER;
6601 l_not_hash_found BOOLEAN;
6602 --
6603 BEGIN
6604 --
6605 -- hr_utility.set_location ('Entering '||l_package,10);
6606 --
6607 -- Steps to do process
6608 --
6609 -- 1) Try and get value from cache
6610 -- 2) If can get from cache then copy to output record
6611 -- 3) If can't get from cache do db hit and then
6612 -- copy to cache record and then copy to output record.
6613 --
6614 -- Get hashed index value
6615 --
6616 l_index := MOD(p_oipl_id
6617 ,g_hash_key);
6618 --
6619 IF NOT g_cache_oipl_clf_el_rec.EXISTS(l_index) THEN
6620 --
6621 -- Lets store the hash value in this index
6622 --
6623 RAISE NO_DATA_FOUND;
6624 --
6625 ELSE
6626 --
6627 -- If it does exist make sure its the right one
6628 --
6629 IF g_cache_oipl_clf_el_rec(l_index).id <> p_oipl_id THEN
6630 --
6631 -- Loop through the hash using the jump routine to check further
6632 -- indexes
6633 --
6634 l_not_hash_found := FALSE;
6635 --
6636 WHILE NOT l_not_hash_found LOOP
6637 --
6638 l_index := l_index + g_hash_jump;
6639 --
6640 -- Check if the hash index exists, if not we can use it
6641 --
6642 IF NOT g_cache_oipl_clf_el_rec.EXISTS(l_index) THEN
6643 --
6644 -- Lets store the hash value in the index
6645 --
6646 RAISE NO_DATA_FOUND;
6647 --
6648 ELSE
6649 --
6650 -- Make sure the index is the correct one
6651 --
6652 IF g_cache_oipl_clf_el_rec(l_index).id = p_oipl_id THEN
6653 --
6654 -- We have a match so the hashed value has been stored before
6655 --
6656 l_not_hash_found := TRUE;
6657 --
6658 END IF;
6659 --
6660 END IF;
6661 --
6662 END LOOP;
6663 --
6664 END IF;
6665 --
6666 END IF;
6670 --
6667 --
6668 IF p_old_val IS NOT NULL
6669 AND p_new_val IS NOT NULL THEN
6671 RAISE NO_DATA_FOUND;
6672 --
6673 END IF;
6674 p_rec := g_cache_oipl_clf_el_rec(l_index);
6675 --
6676 -- hr_utility.set_location ('Leaving '||l_package,10);
6677 --
6678 EXCEPTION
6679 --
6680 WHEN NO_DATA_FOUND THEN
6681 --
6682 -- The record has not been cached yet so lets cache it
6683 --
6684 OPEN c1;
6685 --
6686 FETCH c1 INTO g_cache_oipl_clf_el_rec(l_index);
6687 IF c1%NOTFOUND THEN
6688 --
6689 if NOT g_cache_oipl_clf_el_rec.EXISTS(l_index) then
6690 g_cache_oipl_clf_el_rec(l_index).id := p_oipl_id;
6691 g_cache_oipl_clf_el_rec(l_index).exist := 'N';
6692 end if;
6693 --
6694 END IF;
6695 --
6696 p_rec := g_cache_oipl_clf_el_rec(l_index);
6697 --
6698 CLOSE c1;
6699 --
6700 END get_comp_oipl_elig;
6701 --
6702 PROCEDURE get_comp_plip_elig(
6703 p_plip_id IN NUMBER
6704 ,p_old_val in number default null
6705 ,p_new_val in number default null
6706 ,p_business_group_id IN NUMBER
6707 ,p_effective_date IN DATE
6708 ,p_rec OUT NOCOPY g_cache_clf_rec_obj) IS
6709 --
6710 l_package VARCHAR2(80) := g_package || '.get_comp_plip_elig';
6711 --
6712 -- Define Cursor
6713 --
6714 CURSOR c1 IS
6715 SELECT p_plip_id
6716 ,'Y'
6717 ,clf.comp_lvl_uom
6718 ,clf.comp_src_cd
6719 ,clf.comp_lvl_det_cd
6720 ,clf.comp_lvl_det_rl
6721 ,clf.rndg_cd
6722 ,clf.rndg_rl
6723 ,clf.mn_comp_val
6724 ,clf.mx_comp_val
6725 ,clf.bnfts_bal_id
6726 ,clf.defined_balance_id
6727 ,clf.sttd_sal_prdcty_cd
6728 ,clf.comp_lvl_fctr_id
6729 ,clf.comp_calc_rl
6730 FROM ben_comp_lvl_fctr clf
6731 ,ben_elig_comp_lvl_prte_f ecl
6732 ,ben_eligy_prfl_f elp
6733 ,ben_prtn_elig_prfl_f cep
6734 ,ben_prtn_elig_f epa
6735 WHERE epa.plip_id = p_plip_id
6736 AND p_effective_date BETWEEN epa.effective_start_date
6737 AND epa.effective_end_date
6738 AND epa.prtn_elig_id = cep.prtn_elig_id
6739 AND p_effective_date BETWEEN cep.effective_start_date
6740 AND cep.effective_end_date
6741 AND cep.eligy_prfl_id = elp.eligy_prfl_id
6742 AND p_effective_date BETWEEN elp.effective_start_date
6743 AND elp.effective_end_date
6744 AND ecl.eligy_prfl_id = elp.eligy_prfl_id
6745 AND p_effective_date BETWEEN ecl.effective_start_date
6746 AND ecl.effective_end_date
6747 AND ecl.comp_lvl_fctr_id = clf.comp_lvl_fctr_id
6748 AND (
6749 (
6750 p_new_val IS NOT NULL
6751 AND p_old_val IS NOT NULL
6752 AND p_new_val >= NVL(clf.mn_comp_val ,p_new_val)
6753 and p_new_val < decode(nvl(clf.mx_comp_val,p_new_val) ,
6754 trunc(nvl(clf.mx_comp_val,p_new_val))
6755 ,decode(nvl(clf.mn_comp_val,p_new_val), trunc(nvl(clf.mn_comp_val,p_new_val)),
6756 nvl(clf.mx_comp_val,p_new_val)+1,nvl(clf.mx_comp_val,p_new_val)+0.000000001),
6757 nvl(clf.mx_comp_val,p_new_val)+0.000000001 )
6758 -- and p_old_val < clf.mn_comp_val
6759 )
6760 OR
6761 (
6762 p_new_val IS NOT NULL
6763 AND p_old_val IS NOT NULL
6764 AND
6765 (
6766 p_new_val < NVL(clf.mn_comp_val,p_new_val)
6767 OR
6768 p_new_val >= decode(nvl(clf.mx_comp_val,p_new_val) ,
6769 trunc(nvl(clf.mx_comp_val,p_new_val))
6770 ,decode(nvl(clf.mn_comp_val,p_new_val), trunc(nvl(clf.mn_comp_val,p_new_val)),
6771 nvl(clf.mx_comp_val,p_new_val)+1,nvl(clf.mx_comp_val,p_new_val)+0.000000001),
6772 nvl(clf.mx_comp_val,p_new_val)+0.000000001 )
6773 )
6774 AND p_old_val >= NVL(clf.mn_comp_val ,p_old_val)
6775 and p_old_val < decode(nvl(clf.mx_comp_val,p_old_val) ,
6776 trunc(nvl(clf.mx_comp_val,p_old_val))
6777 ,decode(nvl(clf.mn_comp_val,p_old_val), trunc(nvl(clf.mn_comp_val,p_old_val)),
6778 nvl(clf.mx_comp_val,p_old_val)+1,nvl(clf.mx_comp_val,p_old_val)+0.000000001),
6779 nvl(clf.mx_comp_val,p_old_val)+0.000000001 )
6780 )
6781 OR
6782 ( p_new_val IS NULL
6783 AND p_old_val IS NULL
6784 )
6785 );
6786
6787 --
6788 l_index PLS_INTEGER;
6789 l_not_hash_found BOOLEAN;
6790 --
6791 BEGIN
6792 --
6793 -- hr_utility.set_location ('Entering '||l_package,10);
6797 -- 1) Try and get value from cache
6794 --
6795 -- Steps to do process
6796 --
6798 -- 2) If can get from cache then copy to output record
6799 -- 3) If can't get from cache do db hit and then
6800 -- copy to cache record and then copy to output record.
6801 --
6802 -- Get hashed index value
6803 --
6804 l_index := MOD(p_plip_id
6805 ,g_hash_key);
6806 --
6807 IF NOT g_cache_plip_clf_el_rec.EXISTS(l_index) THEN
6808 --
6809 -- Lets store the hash value in this index
6810 --
6811 RAISE NO_DATA_FOUND;
6812 --
6813 ELSE
6814 --
6815 -- If it does exist make sure its the right one
6816 --
6817 IF g_cache_plip_clf_el_rec(l_index).id <> p_plip_id THEN
6818 --
6819 -- Loop through the hash using the jump routine to check further
6820 -- indexes
6821 --
6822 l_not_hash_found := FALSE;
6823 --
6824 WHILE NOT l_not_hash_found LOOP
6825 --
6826 l_index := l_index + g_hash_jump;
6827 --
6828 -- Check if the hash index exists, if not we can use it
6829 --
6830 IF NOT g_cache_plip_clf_el_rec.EXISTS(l_index) THEN
6831 --
6832 -- Lets store the hash value in the index
6833 --
6834 RAISE NO_DATA_FOUND;
6835 --
6836 ELSE
6837 --
6838 -- Make sure the index is the correct one
6839 --
6840 IF g_cache_plip_clf_el_rec(l_index).id = p_plip_id THEN
6841 --
6842 -- We have a match so the hashed value has been stored before
6843 --
6844 l_not_hash_found := TRUE;
6845 --
6846 END IF;
6847 --
6848 END IF;
6849 --
6850 END LOOP;
6851 --
6852 END IF;
6853 --
6854 END IF;
6855 --
6856 IF p_old_val IS NOT NULL
6857 AND p_new_val IS NOT NULL THEN
6858 --
6859 RAISE NO_DATA_FOUND;
6860 --
6861 END IF;
6862 p_rec := g_cache_plip_clf_el_rec(l_index);
6863 --
6864 -- hr_utility.set_location ('Leaving '||l_package,10);
6865 --
6866 EXCEPTION
6867 --
6868 WHEN NO_DATA_FOUND THEN
6869 --
6870 -- The record has not been cached yet so lets cache it
6871 --
6872 OPEN c1;
6873 --
6874 FETCH c1 INTO g_cache_plip_clf_el_rec(l_index);
6875 IF c1%NOTFOUND THEN
6876 --
6877 if NOT g_cache_plip_clf_el_rec.EXISTS(l_index) then
6878 g_cache_plip_clf_el_rec(l_index).id := p_plip_id;
6879 g_cache_plip_clf_el_rec(l_index).exist := 'N';
6880 end if;
6881 --
6882 END IF;
6883 --
6884 p_rec := g_cache_plip_clf_el_rec(l_index);
6885 --
6886 CLOSE c1;
6887 --
6888 END get_comp_plip_elig;
6889 --
6890 PROCEDURE get_comp_ptip_elig(
6891 p_ptip_id IN NUMBER
6892 ,p_old_val in number default null
6893 ,p_new_val in number default null
6894 ,p_business_group_id IN NUMBER
6895 ,p_effective_date IN DATE
6896 ,p_rec OUT NOCOPY g_cache_clf_rec_obj) IS
6897 --
6898 l_package VARCHAR2(80) := g_package || '.get_comp_ptip_elig';
6899 --
6900 -- Define Cursor
6901 --
6902 CURSOR c1 IS
6903 SELECT p_ptip_id
6904 ,'Y'
6905 ,clf.comp_lvl_uom
6906 ,clf.comp_src_cd
6907 ,clf.comp_lvl_det_cd
6908 ,clf.comp_lvl_det_rl
6909 ,clf.rndg_cd
6910 ,clf.rndg_rl
6911 ,clf.mn_comp_val
6912 ,clf.mx_comp_val
6913 ,clf.bnfts_bal_id
6914 ,clf.defined_balance_id
6915 ,clf.sttd_sal_prdcty_cd
6916 ,clf.comp_lvl_fctr_id
6917 ,clf.comp_calc_rl
6918 FROM ben_comp_lvl_fctr clf
6919 ,ben_elig_comp_lvl_prte_f ecl
6920 ,ben_eligy_prfl_f elp
6921 ,ben_prtn_elig_prfl_f cep
6922 ,ben_prtn_elig_f epa
6923 WHERE epa.ptip_id = p_ptip_id
6924 AND p_effective_date BETWEEN epa.effective_start_date
6925 AND epa.effective_end_date
6926 AND epa.prtn_elig_id = cep.prtn_elig_id
6927 AND p_effective_date BETWEEN cep.effective_start_date
6928 AND cep.effective_end_date
6929 AND cep.eligy_prfl_id = elp.eligy_prfl_id
6930 AND p_effective_date BETWEEN elp.effective_start_date
6931 AND elp.effective_end_date
6932 AND ecl.eligy_prfl_id = elp.eligy_prfl_id
6933 AND p_effective_date BETWEEN ecl.effective_start_date
6934 AND ecl.effective_end_date
6935 AND ecl.comp_lvl_fctr_id = clf.comp_lvl_fctr_id
6936 AND (
6937 (
6938 p_new_val IS NOT NULL
6939 AND p_old_val IS NOT NULL
6943 ,decode(nvl(clf.mn_comp_val,p_new_val), trunc(nvl(clf.mn_comp_val,p_new_val)),
6940 AND p_new_val >= NVL(clf.mn_comp_val ,p_new_val)
6941 and p_new_val < decode(nvl(clf.mx_comp_val,p_new_val) ,
6942 trunc(nvl(clf.mx_comp_val,p_new_val))
6944 nvl(clf.mx_comp_val,p_new_val)+1,nvl(clf.mx_comp_val,p_new_val)+0.000000001),
6945 nvl(clf.mx_comp_val,p_new_val)+0.000000001 )
6946 -- and p_old_val < clf.mn_comp_val
6947 )
6948 OR
6949 (
6950 p_new_val IS NOT NULL
6951 AND p_old_val IS NOT NULL
6952 AND
6953 (
6954 p_new_val < NVL(clf.mn_comp_val,p_new_val)
6955 OR
6956 p_new_val >= decode(nvl(clf.mx_comp_val,p_new_val) ,
6957 trunc(nvl(clf.mx_comp_val,p_new_val))
6958 ,decode(nvl(clf.mn_comp_val,p_new_val), trunc(nvl(clf.mn_comp_val,p_new_val)),
6959 nvl(clf.mx_comp_val,p_new_val)+1,nvl(clf.mx_comp_val,p_new_val)+0.000000001),
6960 nvl(clf.mx_comp_val,p_new_val)+0.000000001 )
6961 )
6962 AND p_old_val >= NVL(clf.mn_comp_val ,p_old_val)
6963 and p_old_val < decode(nvl(clf.mx_comp_val,p_old_val) ,
6964 trunc(nvl(clf.mx_comp_val,p_old_val))
6965 ,decode(nvl(clf.mn_comp_val,p_old_val), trunc(nvl(clf.mn_comp_val,p_old_val)),
6966 nvl(clf.mx_comp_val,p_old_val)+1,nvl(clf.mx_comp_val,p_old_val)+0.000000001),
6967 nvl(clf.mx_comp_val,p_old_val)+0.000000001 )
6968 )
6969 OR
6970 ( p_new_val IS NULL
6971 AND p_old_val IS NULL
6972 )
6973 );
6974
6975 --
6976 l_index PLS_INTEGER;
6977 l_not_hash_found BOOLEAN;
6978 --
6979 BEGIN
6980 --
6981 -- hr_utility.set_location ('Entering '||l_package,10);
6982 --
6983 -- Steps to do process
6984 --
6985 -- 1) Try and get value from cache
6986 -- 2) If can get from cache then copy to output record
6987 -- 3) If can't get from cache do db hit and then
6988 -- copy to cache record and then copy to output record.
6989 --
6990 -- Get hashed index value
6991 --
6992 l_index := MOD(p_ptip_id
6993 ,g_hash_key);
6994 --
6995 IF NOT g_cache_ptip_clf_el_rec.EXISTS(l_index) THEN
6996 --
6997 -- Lets store the hash value in this index
6998 --
6999 RAISE NO_DATA_FOUND;
7000 --
7001 ELSE
7002 --
7003 -- If it does exist make sure its the right one
7004 --
7005 IF g_cache_ptip_clf_el_rec(l_index).id <> p_ptip_id THEN
7006 --
7007 -- Loop through the hash using the jump routine to check further
7008 -- indexes
7009 --
7010 l_not_hash_found := FALSE;
7011 --
7012 WHILE NOT l_not_hash_found LOOP
7013 --
7014 l_index := l_index + g_hash_jump;
7015 --
7016 -- Check if the hash index exists, if not we can use it
7017 --
7018 IF NOT g_cache_ptip_clf_el_rec.EXISTS(l_index) THEN
7019 --
7020 -- Lets store the hash value in the index
7021 --
7022 RAISE NO_DATA_FOUND;
7023 --
7024 ELSE
7025 --
7026 -- Make sure the index is the correct one
7027 --
7028 IF g_cache_ptip_clf_el_rec(l_index).id = p_ptip_id THEN
7029 --
7030 -- We have a match so the hashed value has been stored before
7031 --
7032 l_not_hash_found := TRUE;
7033 --
7034 END IF;
7035 --
7036 END IF;
7037 --
7038 END LOOP;
7039 --
7040 END IF;
7041 --
7042 END IF;
7043 --
7044 IF p_old_val IS NOT NULL
7045 AND p_new_val IS NOT NULL THEN
7046 --
7047 RAISE NO_DATA_FOUND;
7048 --
7049 END IF;
7050 p_rec := g_cache_ptip_clf_el_rec(l_index);
7051 --
7052 -- hr_utility.set_location ('Leaving '||l_package,10);
7053 --
7054 EXCEPTION
7055 --
7056 WHEN NO_DATA_FOUND THEN
7057 --
7058 -- The record has not been cached yet so lets cache it
7059 --
7060 OPEN c1;
7061 --
7062 FETCH c1 INTO g_cache_ptip_clf_el_rec(l_index);
7063 IF c1%NOTFOUND THEN
7064 --
7065 if NOT g_cache_ptip_clf_el_rec.EXISTS(l_index) then
7066 g_cache_ptip_clf_el_rec(l_index).id := p_ptip_id;
7067 g_cache_ptip_clf_el_rec(l_index).exist := 'N';
7068 end if;
7069 --
7070 END IF;
7071 --
7072 p_rec := g_cache_ptip_clf_el_rec(l_index);
7073 --
7074 CLOSE c1;
7075 --
7076 END get_comp_ptip_elig;
7077 --
7078 PROCEDURE get_comp_elig(
7079 p_pgm_id IN NUMBER
7083 ,p_ptip_id IN NUMBER
7080 ,p_pl_id IN NUMBER
7081 ,p_oipl_id IN NUMBER
7082 ,p_plip_id IN NUMBER
7084 ,p_old_val in number default null
7085 ,p_new_val in number default null
7086 ,p_business_group_id IN NUMBER
7087 ,p_effective_date IN DATE
7088 ,p_rec OUT NOCOPY g_cache_clf_rec_obj) IS
7089 --
7090 l_package VARCHAR2(80) := g_package || '.get_comp_elig';
7091 --
7092 BEGIN
7093 --
7094 -- hr_utility.set_location ('Entering '||l_package,10);
7095 --
7096 -- Derive which data type we are dealing with
7097 --
7098 IF p_pgm_id IS NOT NULL THEN
7099 --
7100 get_comp_pgm_elig(p_pgm_id=> p_pgm_id
7101 ,p_old_val => p_old_val
7102 ,p_new_val => p_new_val
7103 ,p_business_group_id => p_business_group_id
7104 ,p_effective_date => p_effective_date
7105 ,p_rec => p_rec);
7106 --
7107 ELSIF p_pl_id IS NOT NULL THEN
7108 --
7109 get_comp_pl_elig(p_pl_id=> p_pl_id
7110 ,p_old_val => p_old_val
7111 ,p_new_val => p_new_val
7112 ,p_business_group_id => p_business_group_id
7113 ,p_effective_date => p_effective_date
7114 ,p_rec => p_rec);
7115 --
7116 ELSIF p_oipl_id IS NOT NULL THEN
7117 --
7118 get_comp_oipl_elig(p_oipl_id=> p_oipl_id
7119 ,p_old_val => p_old_val
7120 ,p_new_val => p_new_val
7121 ,p_business_group_id => p_business_group_id
7122 ,p_effective_date => p_effective_date
7123 ,p_rec => p_rec);
7124 --
7125 ELSIF p_plip_id IS NOT NULL THEN
7126 --
7127 get_comp_plip_elig(p_plip_id=> p_plip_id
7128 ,p_old_val => p_old_val
7129 ,p_new_val => p_new_val
7130 ,p_business_group_id => p_business_group_id
7131 ,p_effective_date => p_effective_date
7132 ,p_rec => p_rec);
7133 --
7134 ELSIF p_ptip_id IS NOT NULL THEN
7135 --
7136 get_comp_ptip_elig(p_ptip_id=> p_ptip_id
7137 ,p_old_val => p_old_val
7138 ,p_new_val => p_new_val
7139 ,p_business_group_id => p_business_group_id
7140 ,p_effective_date => p_effective_date
7141 ,p_rec => p_rec);
7142 --
7143 END IF;
7144 --
7145 -- hr_utility.set_location ('Leaving '||l_package,10);
7146 --
7147 END get_comp_elig;
7148 --
7149 PROCEDURE get_comp_pgm_rate(
7150 p_pgm_id IN NUMBER
7151 ,p_old_val IN NUMBER DEFAULT NULL
7152 ,p_new_val IN NUMBER DEFAULT NULL
7153 ,p_business_group_id IN NUMBER
7154 ,p_effective_date IN DATE
7155 ,p_rec OUT NOCOPY g_cache_clf_rec_obj) IS
7156 --
7157 l_package VARCHAR2(80) := g_package || '.get_comp_pgm_rate';
7158 l_old_val_1 NUMBER := p_old_val + 1;
7159 l_new_val_1 NUMBER := p_new_val + 1;
7160 --
7161 -- Define Cursor
7162 --
7163 CURSOR c1 IS
7164 SELECT p_pgm_id
7165 ,'Y'
7166 ,clf.comp_lvl_uom
7167 ,clf.comp_src_cd
7168 ,clf.comp_lvl_det_cd
7169 ,clf.comp_lvl_det_rl
7170 ,clf.rndg_cd
7171 ,clf.rndg_rl
7172 ,clf.mn_comp_val
7173 ,clf.mx_comp_val
7174 ,clf.bnfts_bal_id
7175 ,clf.defined_balance_id
7176 ,clf.sttd_sal_prdcty_cd
7177 ,clf.comp_lvl_fctr_id
7178 ,clf.comp_calc_rl
7179 FROM ben_comp_lvl_fctr clf
7180 ,ben_comp_lvl_rt_f clr
7181 ,ben_vrbl_rt_prfl_f vpf
7182 ,ben_acty_vrbl_rt_f avr
7183 ,ben_acty_base_rt_f abr
7184 WHERE abr.pgm_id = p_pgm_id
7185 AND p_effective_date BETWEEN abr.effective_start_date
7186 AND abr.effective_end_date
7187 AND abr.acty_base_rt_id = avr.acty_base_rt_id
7188 AND p_effective_date BETWEEN avr.effective_start_date
7189 AND avr.effective_end_date
7190 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
7191 AND p_effective_date BETWEEN vpf.effective_start_date
7192 AND vpf.effective_end_date
7193 AND vpf.vrbl_rt_prfl_id = clr.vrbl_rt_prfl_id
7194 AND p_effective_date BETWEEN clr.effective_start_date
7195 AND clr.effective_end_date
7196 AND clr.comp_lvl_fctr_id = clf.comp_lvl_fctr_id
7197 AND (
7198 (
7199 p_new_val IS NOT NULL
7200 AND p_old_val IS NOT NULL
7201 AND p_new_val >= NVL(clf.mn_comp_val
7202 ,p_new_val)
7203 AND p_new_val < decode(nvl(clf.mx_comp_val,p_new_val) ,
7204 trunc(nvl(clf.mx_comp_val,p_new_val))
7205 ,decode(nvl(clf.mn_comp_val,p_new_val), trunc(nvl(clf.mn_comp_val,p_new_val)),
7206 nvl(clf.mx_comp_val,p_new_val)+1,nvl(clf.mx_comp_val,p_new_val)+0.000000001),
7210 OR (
7207 nvl(clf.mx_comp_val,p_new_val)+0.000000001 ) )
7208 -- ceil( NVL(clf.mx_comp_val
7209 -- ,p_new_val) + 0.001 ))
7211 p_new_val IS NOT NULL
7212 AND p_old_val IS NOT NULL
7213 AND (
7214 p_new_val < NVL(clf.mn_comp_val
7215 ,p_new_val)
7216 OR p_new_val >= decode(nvl(clf.mx_comp_val,p_new_val) ,
7217 trunc(nvl(clf.mx_comp_val,p_new_val))
7218 ,decode(nvl(clf.mn_comp_val,p_new_val), trunc(nvl(clf.mn_comp_val,p_new_val)),
7219 nvl(clf.mx_comp_val,p_new_val)+1,nvl(clf.mx_comp_val,p_new_val)+0.000000001),
7220 nvl(clf.mx_comp_val,p_new_val)+0.000000001 ) )
7221 -- ceil( NVL(clf.mx_comp_val
7222 -- ,p_new_val)) + 0.001 )
7223 AND p_old_val >= NVL(clf.mn_comp_val
7224 ,p_old_val)
7225 AND p_old_val < decode(nvl(clf.mx_comp_val,p_old_val) ,
7226 trunc(nvl(clf.mx_comp_val,p_old_val))
7227 ,decode(nvl(clf.mn_comp_val,p_old_val), trunc(nvl(clf.mn_comp_val,p_old_val)),
7228 nvl(clf.mx_comp_val,p_old_val)+1,nvl(clf.mx_comp_val,p_old_val)+0.000000001),
7229 nvl(clf.mx_comp_val,p_old_val)+0.000000001 ) )
7230 -- ceil( NVL(clf.mx_comp_val
7231 -- ,p_old_val)) + 0.001 )
7232 OR ( p_new_val IS NULL
7233 AND p_old_val IS NULL));
7234 -- PERFNEW. SPLIT TO 2 CURSORS C1 and C2.
7235 --UNION ALL
7236 CURSOR c2 IS
7237 SELECT p_pgm_id
7238 ,'Y'
7239 ,clf.comp_lvl_uom
7240 ,clf.comp_src_cd
7241 ,clf.comp_lvl_det_cd
7242 ,clf.comp_lvl_det_rl
7243 ,clf.rndg_cd
7244 ,clf.rndg_rl
7245 ,clf.mn_comp_val
7246 ,clf.mx_comp_val
7247 ,clf.bnfts_bal_id
7248 ,clf.defined_balance_id
7249 ,clf.sttd_sal_prdcty_cd
7250 ,clf.comp_lvl_fctr_id
7251 ,clf.comp_calc_rl
7252 FROM ben_comp_lvl_fctr clf
7253 --,ben_comp_lvl_rt_f clr
7254 ,ben_elig_comp_lvl_prte_f ecl
7255 ,ben_eligy_prfl_f elp
7256 ,ben_vrbl_rt_elig_prfl_f vep
7257 ,ben_vrbl_rt_prfl_f vpf
7258 ,ben_acty_vrbl_rt_f avr
7259 ,ben_acty_base_rt_f abr
7260 WHERE abr.pgm_id = p_pgm_id
7261 AND p_effective_date BETWEEN abr.effective_start_date
7262 AND abr.effective_end_date
7263 AND abr.acty_base_rt_id = avr.acty_base_rt_id
7264 AND p_effective_date BETWEEN avr.effective_start_date
7265 AND avr.effective_end_date
7266 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
7267 AND p_effective_date BETWEEN vpf.effective_start_date
7268 AND vpf.effective_end_date
7269 -- AND vpf.vrbl_rt_prfl_id = ecl.vrbl_rt_prfl_id
7270 AND vpf.vrbl_rt_prfl_id = vep.vrbl_rt_prfl_id
7271 AND p_effective_date BETWEEN vep.effective_start_date
7272 AND vep.effective_end_date
7273 AND vep.eligy_prfl_id = elp.eligy_prfl_id
7274 AND p_effective_date BETWEEN elp.effective_start_date
7275 AND elp.effective_end_date
7276 AND ecl.eligy_prfl_id = elp.eligy_prfl_id
7277 AND p_effective_date BETWEEN ecl.effective_start_date
7278 AND ecl.effective_end_date
7279 AND ecl.comp_lvl_fctr_id = clf.comp_lvl_fctr_id
7280 AND (
7281 (
7282 p_new_val IS NOT NULL
7283 AND p_old_val IS NOT NULL
7284 AND p_new_val >= NVL(clf.mn_comp_val
7285 ,p_new_val)
7286 AND p_new_val < decode(nvl(clf.mx_comp_val,p_new_val) ,
7287 trunc(nvl(clf.mx_comp_val,p_new_val))
7288 ,decode(nvl(clf.mn_comp_val,p_new_val), trunc(nvl(clf.mn_comp_val,p_new_val)),
7289 nvl(clf.mx_comp_val,p_new_val)+1,nvl(clf.mx_comp_val,p_new_val)+0.000000001),
7290 nvl(clf.mx_comp_val,p_new_val)+0.000000001 ) )
7291 -- ceil( NVL(clf.mx_comp_val
7292 -- ,p_new_val) + 0.001 ))
7293 OR (
7294 p_new_val IS NOT NULL
7295 AND p_old_val IS NOT NULL
7296 AND (
7297 p_new_val < NVL(clf.mn_comp_val
7298 ,p_new_val)
7299 OR p_new_val >= decode(nvl(clf.mx_comp_val,p_new_val) ,
7300 trunc(nvl(clf.mx_comp_val,p_new_val))
7301 ,decode(nvl(clf.mn_comp_val,p_new_val), trunc(nvl(clf.mn_comp_val,p_new_val)),
7302 nvl(clf.mx_comp_val,p_new_val)+1,nvl(clf.mx_comp_val,p_new_val)+0.000000001),
7306 AND p_old_val >= NVL(clf.mn_comp_val
7303 nvl(clf.mx_comp_val,p_new_val)+0.000000001 ) )
7304 -- ceil( NVL(clf.mx_comp_val
7305 -- ,p_new_val)) + 0.001 )
7307 ,p_old_val)
7308 AND p_old_val < decode(nvl(clf.mx_comp_val,p_old_val) ,
7309 trunc(nvl(clf.mx_comp_val,p_old_val))
7310 ,decode(nvl(clf.mn_comp_val,p_old_val), trunc(nvl(clf.mn_comp_val,p_old_val)),
7311 nvl(clf.mx_comp_val,p_old_val)+1,nvl(clf.mx_comp_val,p_old_val)+0.000000001),
7312 nvl(clf.mx_comp_val,p_old_val)+0.000000001 ) )
7313 -- ceil( NVL(clf.mx_comp_val
7314 -- ,p_old_val)) + 0.001 )
7315 OR ( p_new_val IS NULL
7316 AND p_old_val IS NULL));
7317 --
7318 --
7319 l_index PLS_INTEGER;
7320 l_not_hash_found BOOLEAN;
7321 l_c2notfound BOOLEAN;
7322 --
7323 BEGIN
7324 --
7325 -- hr_utility.set_location ('Entering '||l_package,10);
7326 --
7327 -- Steps to do process
7328 --
7329 -- 1) Try and get value from cache
7330 -- 2) If can get from cache then copy to output record
7331 -- 3) If can't get from cache do db hit and then
7332 -- copy to cache record and then copy to output record.
7333 --
7334 -- Get hashed index value
7335 --
7336 l_index := MOD(p_pgm_id
7337 ,g_hash_key);
7338 --
7339 IF NOT g_cache_pgm_clf_rt_rec.EXISTS(l_index) THEN
7340 --
7341 -- Lets store the hash value in this index
7342 --
7343 RAISE NO_DATA_FOUND;
7344 --
7345 ELSE
7346 --
7347 -- If it does exist make sure its the right one
7348 --
7349 IF g_cache_pgm_clf_rt_rec(l_index).id <> p_pgm_id THEN
7350 --
7351 -- Loop through the hash using the jump routine to check further
7352 -- indexes
7353 --
7354 l_not_hash_found := FALSE;
7355 --
7356 WHILE NOT l_not_hash_found LOOP
7357 --
7358 l_index := l_index + g_hash_jump;
7359 --
7360 -- Check if the hash index exists, if not we can use it
7361 --
7362 IF NOT g_cache_pgm_clf_rt_rec.EXISTS(l_index) THEN
7363 --
7364 -- Lets store the hash value in the index
7365 --
7366 RAISE NO_DATA_FOUND;
7367 --
7368 ELSE
7369 --
7370 -- Make sure the index is the correct one
7371 --
7372 IF g_cache_pgm_clf_rt_rec(l_index).id = p_pgm_id THEN
7373 --
7374 -- We have a match so the hashed value has been stored before
7375 --
7376 l_not_hash_found := TRUE;
7377 --
7378 END IF;
7379 --
7380 END IF;
7381 --
7382 END LOOP;
7383 --
7384 END IF;
7385 --
7386 END IF;
7387 --
7388 -- If p_old_val and p_new_val is set this means we are trying to retrieve
7389 -- the correct rate for the calculated value.
7390 -- Previously we just cached the first rate we
7391 -- found since we needed the determination code, the correct age,los code,etc
7392 -- By killing the cache and forcing the value to be removed we cache the
7393 -- correct rate profile for the case we need.
7394 --
7395 IF p_old_val IS NOT NULL
7396 AND p_new_val IS NOT NULL THEN
7397 --
7398 RAISE NO_DATA_FOUND;
7399 --
7400 END IF;
7401 --
7402 p_rec := g_cache_pgm_clf_rt_rec(l_index);
7403 --
7404 -- hr_utility.set_location ('Leaving '||l_package,10);
7405 --
7406 EXCEPTION
7407 --
7408 WHEN NO_DATA_FOUND THEN
7409 --
7410 -- The record has not been cached yet so lets cache it
7411 --
7412 OPEN c1;
7413 --
7414 FETCH c1 INTO g_cache_pgm_clf_rt_rec(l_index);
7415 -- PERFNEW
7416 IF c1%NOTFOUND THEN
7417 --
7418 l_c2notfound := false;
7419 OPEN c2;
7420 FETCH c2 INTO g_cache_pgm_clf_rt_rec(l_index);
7421 IF c2%NOTFOUND THEN
7422 --
7423 l_c2notfound := true;
7424 --
7425 END IF;
7426 CLOSE c2;
7427 --
7428 END IF;
7429 -- PERFNEW
7430 IF p_old_val IS NULL
7431 AND p_new_val IS NULL THEN
7432 --
7433 IF c1%NOTFOUND and l_c2notfound THEN -- PERFNEW
7434 --
7435 if NOT g_cache_pgm_clf_rt_rec.EXISTS(l_index) then
7436 g_cache_pgm_clf_rt_rec(l_index).id := p_pgm_id;
7437 g_cache_pgm_clf_rt_rec(l_index).exist := 'N';
7438 end if;
7439 --
7440 END IF;
7441 --
7442 END IF;
7443 --
7444 p_rec := g_cache_pgm_clf_rt_rec(l_index);
7445 --
7446 CLOSE c1;
7447 --
7448 END get_comp_pgm_rate;
7449 --
7453 ,p_new_val IN NUMBER DEFAULT NULL
7450 PROCEDURE get_comp_pl_rate(
7451 p_pl_id IN NUMBER
7452 ,p_old_val IN NUMBER DEFAULT NULL
7454 ,p_business_group_id IN NUMBER
7455 ,p_effective_date IN DATE
7456 ,p_rec OUT NOCOPY g_cache_clf_rec_obj) IS
7457 --
7458 l_package VARCHAR2(80) := g_package || '.get_comp_pl_rate';
7459 l_old_val_1 NUMBER := p_old_val + 1;
7460 l_new_val_1 NUMBER := p_new_val + 1;
7461 --
7462 -- Define Cursor
7463 --
7464 CURSOR c1 IS
7465 SELECT p_pl_id
7466 ,'Y'
7467 ,clf.comp_lvl_uom
7468 ,clf.comp_src_cd
7469 ,clf.comp_lvl_det_cd
7470 ,clf.comp_lvl_det_rl
7471 ,clf.rndg_cd
7472 ,clf.rndg_rl
7473 ,clf.mn_comp_val
7474 ,clf.mx_comp_val
7475 ,clf.bnfts_bal_id
7476 ,clf.defined_balance_id
7477 ,clf.sttd_sal_prdcty_cd
7478 ,clf.comp_lvl_fctr_id
7479 ,clf.comp_calc_rl
7480 FROM ben_comp_lvl_fctr clf
7481 ,ben_comp_lvl_rt_f clr
7482 ,ben_vrbl_rt_prfl_f vpf
7483 ,ben_acty_vrbl_rt_f avr
7484 ,ben_acty_base_rt_f abr
7485 WHERE abr.pl_id = p_pl_id
7486 AND p_effective_date BETWEEN abr.effective_start_date
7487 AND abr.effective_end_date
7488 AND abr.acty_base_rt_id = avr.acty_base_rt_id
7489 AND p_effective_date BETWEEN avr.effective_start_date
7490 AND avr.effective_end_date
7491 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
7492 AND p_effective_date BETWEEN vpf.effective_start_date
7493 AND vpf.effective_end_date
7494 AND vpf.vrbl_rt_prfl_id = clr.vrbl_rt_prfl_id
7495 AND p_effective_date BETWEEN clr.effective_start_date
7496 AND clr.effective_end_date
7497 AND clr.comp_lvl_fctr_id = clf.comp_lvl_fctr_id
7498 AND (
7499 (
7500 p_new_val IS NOT NULL
7501 AND p_old_val IS NOT NULL
7502 AND p_new_val >= NVL(clf.mn_comp_val
7503 ,p_new_val)
7504 AND p_new_val < decode(nvl(clf.mx_comp_val,p_new_val) ,
7505 trunc(nvl(clf.mx_comp_val,p_new_val))
7506 ,decode(nvl(clf.mn_comp_val,p_new_val), trunc(nvl(clf.mn_comp_val,p_new_val)),
7507 nvl(clf.mx_comp_val,p_new_val)+1,nvl(clf.mx_comp_val,p_new_val)+0.000000001),
7508 nvl(clf.mx_comp_val,p_new_val)+0.000000001 ) )
7509 -- ceil( NVL(clf.mx_comp_val
7510 -- ,p_new_val) + 0.001 ))
7511 OR (
7512 p_new_val IS NOT NULL
7513 AND p_old_val IS NOT NULL
7514 AND (
7515 p_new_val < NVL(clf.mn_comp_val
7516 ,p_new_val)
7517 OR p_new_val >= decode(nvl(clf.mx_comp_val,p_new_val) ,
7518 trunc(nvl(clf.mx_comp_val,p_new_val))
7519 ,decode(nvl(clf.mn_comp_val,p_new_val), trunc(nvl(clf.mn_comp_val,p_new_val)),
7520 nvl(clf.mx_comp_val,p_new_val)+1,nvl(clf.mx_comp_val,p_new_val)+0.000000001),
7521 nvl(clf.mx_comp_val,p_new_val)+0.000000001 ) )
7522 -- ceil( NVL(clf.mx_comp_val
7523 -- ,p_new_val)) + 0.001)
7524 AND p_old_val >= NVL(clf.mn_comp_val
7525 ,p_old_val)
7526 AND p_old_val < decode(nvl(clf.mx_comp_val,p_old_val) ,
7527 trunc(nvl(clf.mx_comp_val,p_old_val))
7528 ,decode(nvl(clf.mn_comp_val,p_old_val), trunc(nvl(clf.mn_comp_val,p_old_val)),
7529 nvl(clf.mx_comp_val,p_old_val)+1,nvl(clf.mx_comp_val,p_old_val)+0.000000001),
7530 nvl(clf.mx_comp_val,p_old_val)+0.000000001 ) )
7531 -- ceil( NVL(clf.mx_comp_val
7532 -- ,p_old_val))+ 0.001)
7533 OR ( p_new_val IS NULL
7534 AND p_old_val IS NULL));
7535 -- PERFNEW. SPLIT TO 2 CURSORS C1 and C2.
7536 --UNION ALL
7537 CURSOR c2 IS
7538 SELECT p_pl_id
7539 ,'Y'
7540 ,clf.comp_lvl_uom
7541 ,clf.comp_src_cd
7542 ,clf.comp_lvl_det_cd
7543 ,clf.comp_lvl_det_rl
7544 ,clf.rndg_cd
7545 ,clf.rndg_rl
7546 ,clf.mn_comp_val
7547 ,clf.mx_comp_val
7548 ,clf.bnfts_bal_id
7549 ,clf.defined_balance_id
7550 ,clf.sttd_sal_prdcty_cd
7551 ,clf.comp_lvl_fctr_id
7552 ,clf.comp_calc_rl
7553 FROM ben_comp_lvl_fctr clf
7554 --,ben_comp_lvl_rt_f clr
7555 ,ben_elig_comp_lvl_prte_f ecl
7556 ,ben_eligy_prfl_f elp
7557 ,ben_vrbl_rt_elig_prfl_f vep
7558 ,ben_vrbl_rt_prfl_f vpf
7562 AND p_effective_date BETWEEN abr.effective_start_date
7559 ,ben_acty_vrbl_rt_f avr
7560 ,ben_acty_base_rt_f abr
7561 WHERE abr.pl_id = p_pl_id
7563 AND abr.effective_end_date
7564 AND abr.acty_base_rt_id = avr.acty_base_rt_id
7565 AND p_effective_date BETWEEN avr.effective_start_date
7566 AND avr.effective_end_date
7567 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
7568 AND p_effective_date BETWEEN vpf.effective_start_date
7569 AND vpf.effective_end_date
7570 -- AND vpf.vrbl_rt_prfl_id = ecl.vrbl_rt_prfl_id
7571 AND vpf.vrbl_rt_prfl_id = vep.vrbl_rt_prfl_id
7572 AND p_effective_date BETWEEN vep.effective_start_date
7573 AND vep.effective_end_date
7574 AND vep.eligy_prfl_id = elp.eligy_prfl_id
7575 AND p_effective_date BETWEEN elp.effective_start_date
7576 AND elp.effective_end_date
7577 AND ecl.eligy_prfl_id = elp.eligy_prfl_id
7578 AND p_effective_date BETWEEN ecl.effective_start_date
7579 AND ecl.effective_end_date
7580 AND ecl.comp_lvl_fctr_id = clf.comp_lvl_fctr_id
7581 AND (
7582 (
7583 p_new_val IS NOT NULL
7584 AND p_old_val IS NOT NULL
7585 AND p_new_val >= NVL(clf.mn_comp_val
7586 ,p_new_val)
7587 AND p_new_val < decode(nvl(clf.mx_comp_val,p_new_val) ,
7588 trunc(nvl(clf.mx_comp_val,p_new_val))
7589 ,decode(nvl(clf.mn_comp_val,p_new_val), trunc(nvl(clf.mn_comp_val,p_new_val)),
7590 nvl(clf.mx_comp_val,p_new_val)+1,nvl(clf.mx_comp_val,p_new_val)+0.000000001),
7591 nvl(clf.mx_comp_val,p_new_val)+0.000000001 ) )
7592 -- ceil( NVL(clf.mx_comp_val
7593 -- ,p_new_val) + 0.001 ))
7594 OR (
7595 p_new_val IS NOT NULL
7596 AND p_old_val IS NOT NULL
7597 AND (
7598 p_new_val < NVL(clf.mn_comp_val
7599 ,p_new_val)
7600 OR p_new_val >= decode(nvl(clf.mx_comp_val,p_new_val) ,
7601 trunc(nvl(clf.mx_comp_val,p_new_val))
7602 ,decode(nvl(clf.mn_comp_val,p_new_val), trunc(nvl(clf.mn_comp_val,p_new_val)),
7603 nvl(clf.mx_comp_val,p_new_val)+1,nvl(clf.mx_comp_val,p_new_val)+0.000000001),
7604 nvl(clf.mx_comp_val,p_new_val)+0.000000001 ) )
7605 -- ceil( NVL(clf.mx_comp_val
7606 -- ,p_new_val)) + 0.001)
7607 AND p_old_val >= NVL(clf.mn_comp_val
7608 ,p_old_val)
7609 AND p_old_val < decode(nvl(clf.mx_comp_val,p_old_val) ,
7610 trunc(nvl(clf.mx_comp_val,p_old_val))
7611 ,decode(nvl(clf.mn_comp_val,p_old_val), trunc(nvl(clf.mn_comp_val,p_old_val)),
7612 nvl(clf.mx_comp_val,p_old_val)+1,nvl(clf.mx_comp_val,p_old_val)+0.000000001),
7613 nvl(clf.mx_comp_val,p_old_val)+0.000000001 ) )
7614 -- ceil( NVL(clf.mx_comp_val
7615 -- ,p_old_val))+ 0.001)
7616 OR ( p_new_val IS NULL
7617 AND p_old_val IS NULL));
7618 --
7619 --
7620 l_index PLS_INTEGER;
7621 l_not_hash_found BOOLEAN;
7622 l_c2notfound BOOLEAN;
7623 --
7624 BEGIN
7625 --
7626 -- hr_utility.set_location ('Entering '||l_package,10);
7627 --
7628 -- Steps to do process
7629 --
7630 -- 1) Try and get value from cache
7631 -- 2) If can get from cache then copy to output record
7632 -- 3) If can't get from cache do db hit and then
7633 -- copy to cache record and then copy to output record.
7634 --
7635 -- Get hashed index value
7636 --
7637 l_index := MOD(p_pl_id
7638 ,g_hash_key);
7639 --
7640 IF NOT g_cache_pl_clf_rt_rec.EXISTS(l_index) THEN
7641 --
7642 -- Lets store the hash value in this index
7643 --
7644 RAISE NO_DATA_FOUND;
7645 --
7646 ELSE
7647 --
7648 -- If it does exist make sure its the right one
7649 --
7650 IF g_cache_pl_clf_rt_rec(l_index).id <> p_pl_id THEN
7651 --
7652 -- Loop through the hash using the jump routine to check further
7653 -- indexes
7654 --
7655 l_not_hash_found := FALSE;
7656 --
7657 WHILE NOT l_not_hash_found LOOP
7658 --
7659 l_index := l_index + g_hash_jump;
7660 --
7661 -- Check if the hash index exists, if not we can use it
7662 --
7663 IF NOT g_cache_pl_clf_rt_rec.EXISTS(l_index) THEN
7664 --
7665 -- Lets store the hash value in the index
7666 --
7667 RAISE NO_DATA_FOUND;
7668 --
7669 ELSE
7670 --
7671 -- Make sure the index is the correct one
7672 --
7673 IF g_cache_pl_clf_rt_rec(l_index).id = p_pl_id THEN
7674 --
7678 --
7675 -- We have a match so the hashed value has been stored before
7676 --
7677 l_not_hash_found := TRUE;
7679 END IF;
7680 --
7681 END IF;
7682 --
7683 END LOOP;
7684 --
7685 END IF;
7686 --
7687 END IF;
7688 --
7689 -- If p_old_val and p_new_val is set this means we are trying to retrieve
7690 -- the correct rate for the calculated value.
7691 -- Previously we just cached the first rate we
7692 -- found since we needed the determination code, the correct age,los code,etc
7693 -- By killing the cache and forcing the value to be removed we cache the
7694 -- correct rate profile for the case we need.
7695 --
7696 IF p_old_val IS NOT NULL
7697 AND p_new_val IS NOT NULL THEN
7698 --
7699 RAISE NO_DATA_FOUND;
7700 --
7701 END IF;
7702 --
7703 p_rec := g_cache_pl_clf_rt_rec(l_index);
7704 --
7705 -- hr_utility.set_location ('Leaving '||l_package,10);
7706 --
7707 EXCEPTION
7708 --
7709 WHEN NO_DATA_FOUND THEN
7710 --
7711 -- The record has not been cached yet so lets cache it
7712 --
7713 OPEN c1;
7714 --
7715 FETCH c1 INTO g_cache_pl_clf_rt_rec(l_index);
7716 -- PERFNEW
7717 IF c1%NOTFOUND THEN
7718 --
7719 l_c2notfound := false;
7720 OPEN c2;
7721 FETCH c2 INTO g_cache_pl_clf_rt_rec(l_index);
7722 IF c2%NOTFOUND THEN
7723 --
7724 l_c2notfound := true;
7725 --
7726 END IF;
7727 CLOSE c2;
7728 --
7729 END IF;
7730 -- PERFNEW
7731 IF p_old_val IS NULL
7732 AND p_new_val IS NULL THEN
7733 --
7734 IF c1%NOTFOUND and l_c2notfound THEN -- PERFNEW
7735 --
7736 if NOT g_cache_pl_clf_rt_rec.EXISTS(l_index) then
7737 g_cache_pl_clf_rt_rec(l_index).id := p_pl_id;
7738 g_cache_pl_clf_rt_rec(l_index).exist := 'N';
7739 end if;
7740 --
7741 END IF;
7742 --
7743 END IF;
7744 --
7745 p_rec := g_cache_pl_clf_rt_rec(l_index);
7746 --
7747 CLOSE c1;
7748 --
7749 END get_comp_pl_rate;
7750 --
7751 PROCEDURE get_comp_oipl_rate(
7752 p_oipl_id IN NUMBER
7753 ,p_old_val IN NUMBER DEFAULT NULL
7754 ,p_new_val IN NUMBER DEFAULT NULL
7755 ,p_business_group_id IN NUMBER
7756 ,p_effective_date IN DATE
7757 ,p_rec OUT NOCOPY g_cache_clf_rec_obj) IS
7758 --
7759 l_package VARCHAR2(80) := g_package || '.get_comp_oipl_rate';
7760 l_old_val_1 NUMBER := p_old_val + 1;
7761 l_new_val_1 NUMBER := p_new_val + 1;
7762 --
7763 l_opt_id NUMBER;
7764 --
7765 -- Define Cursor
7766 --
7767 CURSOR c1 IS
7768 SELECT p_oipl_id
7769 ,'Y'
7770 ,clf.comp_lvl_uom
7771 ,clf.comp_src_cd
7772 ,clf.comp_lvl_det_cd
7773 ,clf.comp_lvl_det_rl
7774 ,clf.rndg_cd
7775 ,clf.rndg_rl
7776 ,clf.mn_comp_val
7777 ,clf.mx_comp_val
7778 ,clf.bnfts_bal_id
7779 ,clf.defined_balance_id
7780 ,clf.sttd_sal_prdcty_cd
7781 ,clf.comp_lvl_fctr_id
7782 ,clf.comp_calc_rl
7783 FROM ben_comp_lvl_fctr clf
7784 ,ben_comp_lvl_rt_f clr
7785 ,ben_vrbl_rt_prfl_f vpf
7786 ,ben_acty_vrbl_rt_f avr
7787 ,ben_acty_base_rt_f abr
7788 WHERE ( abr.oipl_id = p_oipl_id
7789 --
7790 --START Option level Rates Enhancements
7791 or ( abr.opt_id = l_opt_id and
7792 not exists (select null from ben_acty_base_rt_f abr1
7793 where abr1.oipl_id = p_oipl_id )))
7794 --END Option level Rates Enhancements
7795 --
7796 AND p_effective_date BETWEEN abr.effective_start_date
7797 AND abr.effective_end_date
7798 AND abr.acty_base_rt_id = avr.acty_base_rt_id
7799 AND p_effective_date BETWEEN avr.effective_start_date
7800 AND avr.effective_end_date
7801 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
7802 AND p_effective_date BETWEEN vpf.effective_start_date
7803 AND vpf.effective_end_date
7804 AND vpf.vrbl_rt_prfl_id = clr.vrbl_rt_prfl_id
7805 AND p_effective_date BETWEEN clr.effective_start_date
7806 AND clr.effective_end_date
7807 AND clr.comp_lvl_fctr_id = clf.comp_lvl_fctr_id
7808 AND (
7809 (
7810 p_new_val IS NOT NULL
7811 AND p_old_val IS NOT NULL
7812 AND p_new_val >= NVL(clf.mn_comp_val
7813 ,p_new_val)
7814 AND p_new_val < decode(nvl(clf.mx_comp_val,p_new_val) ,
7818 nvl(clf.mx_comp_val,p_new_val)+0.000000001 ) )
7815 trunc(nvl(clf.mx_comp_val,p_new_val))
7816 ,decode(nvl(clf.mn_comp_val,p_new_val), trunc(nvl(clf.mn_comp_val,p_new_val)),
7817 nvl(clf.mx_comp_val,p_new_val)+1,nvl(clf.mx_comp_val,p_new_val)+0.000000001),
7819 -- ceil( NVL(clf.mx_comp_val
7820 -- ,p_new_val) + 0.001 ))
7821 OR (
7822 p_new_val IS NOT NULL
7823 AND p_old_val IS NOT NULL
7824 AND (
7825 p_new_val < NVL(clf.mn_comp_val
7826 ,p_new_val)
7827 OR p_new_val >= decode(nvl(clf.mx_comp_val,p_new_val) ,
7828 trunc(nvl(clf.mx_comp_val,p_new_val))
7829 ,decode(nvl(clf.mn_comp_val,p_new_val), trunc(nvl(clf.mn_comp_val,p_new_val)),
7830 nvl(clf.mx_comp_val,p_new_val)+1,nvl(clf.mx_comp_val,p_new_val)+0.000000001),
7831 nvl(clf.mx_comp_val,p_new_val)+0.000000001 ) )
7832 -- ceil( NVL(clf.mx_comp_val
7833 -- ,p_new_val))+ 0.001 )
7834 AND p_old_val >= NVL(clf.mn_comp_val
7835 ,p_old_val)
7836 AND p_old_val < decode(nvl(clf.mx_comp_val,p_old_val) ,
7837 trunc(nvl(clf.mx_comp_val,p_old_val))
7838 ,decode(nvl(clf.mn_comp_val,p_old_val), trunc(nvl(clf.mn_comp_val,p_old_val)),
7839 nvl(clf.mx_comp_val,p_old_val)+1,nvl(clf.mx_comp_val,p_old_val)+0.000000001),
7840 nvl(clf.mx_comp_val,p_old_val)+0.000000001 ) )
7841 -- ceil( NVL(clf.mx_comp_val
7842 -- ,p_old_val)) + 0.001 )
7843 OR ( p_new_val IS NULL
7844 AND p_old_val IS NULL));
7845 -- PERFNEW. SPLIT TO 2 CURSORS C1 and C2.
7846 --UNION ALL
7847 CURSOR c2 IS
7848 SELECT p_oipl_id
7849 ,'Y'
7850 ,clf.comp_lvl_uom
7851 ,clf.comp_src_cd
7852 ,clf.comp_lvl_det_cd
7853 ,clf.comp_lvl_det_rl
7854 ,clf.rndg_cd
7855 ,clf.rndg_rl
7856 ,clf.mn_comp_val
7857 ,clf.mx_comp_val
7858 ,clf.bnfts_bal_id
7859 ,clf.defined_balance_id
7860 ,clf.sttd_sal_prdcty_cd
7861 ,clf.comp_lvl_fctr_id
7862 ,clf.comp_calc_rl
7863 FROM ben_comp_lvl_fctr clf
7864 --,ben_comp_lvl_rt_f clr
7865 ,ben_elig_comp_lvl_prte_f ecl
7866 ,ben_eligy_prfl_f elp
7867 ,ben_vrbl_rt_elig_prfl_f vep
7868 ,ben_vrbl_rt_prfl_f vpf
7869 ,ben_acty_vrbl_rt_f avr
7870 ,ben_acty_base_rt_f abr
7871 WHERE ( abr.oipl_id = p_oipl_id
7872 --
7873 --START Option level Rates Enhancements
7874 or ( abr.opt_id = l_opt_id and
7875 not exists (select null from ben_acty_base_rt_f abr1
7876 where abr1.oipl_id = p_oipl_id )))
7877 --END Option level Rates Enhancements
7878 --
7879 AND p_effective_date BETWEEN abr.effective_start_date
7880 AND abr.effective_end_date
7881 AND abr.acty_base_rt_id = avr.acty_base_rt_id
7882 AND p_effective_date BETWEEN avr.effective_start_date
7883 AND avr.effective_end_date
7884 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
7885 AND p_effective_date BETWEEN vpf.effective_start_date
7886 AND vpf.effective_end_date
7887 -- AND vpf.vrbl_rt_prfl_id = ecl.vrbl_rt_prfl_id
7888 AND vpf.vrbl_rt_prfl_id = vep.vrbl_rt_prfl_id
7889 AND p_effective_date BETWEEN vep.effective_start_date
7890 AND vep.effective_end_date
7891 AND vep.eligy_prfl_id = elp.eligy_prfl_id
7892 AND p_effective_date BETWEEN elp.effective_start_date
7893 AND elp.effective_end_date
7894 AND ecl.eligy_prfl_id = elp.eligy_prfl_id
7895 AND p_effective_date BETWEEN ecl.effective_start_date
7896 AND ecl.effective_end_date
7897 AND ecl.comp_lvl_fctr_id = clf.comp_lvl_fctr_id
7898 AND (
7899 (
7900 p_new_val IS NOT NULL
7901 AND p_old_val IS NOT NULL
7902 AND p_new_val >= NVL(clf.mn_comp_val
7903 ,p_new_val)
7904 AND p_new_val < decode(nvl(clf.mx_comp_val,p_new_val) ,
7905 trunc(nvl(clf.mx_comp_val,p_new_val))
7906 ,decode(nvl(clf.mn_comp_val,p_new_val), trunc(nvl(clf.mn_comp_val,p_new_val)),
7907 nvl(clf.mx_comp_val,p_new_val)+1,nvl(clf.mx_comp_val,p_new_val)+0.000000001),
7908 nvl(clf.mx_comp_val,p_new_val)+0.000000001 ) )
7909 -- ceil( NVL(clf.mx_comp_val
7910 -- ,p_new_val) + 0.001 ))
7911 OR (
7912 p_new_val IS NOT NULL
7913 AND p_old_val IS NOT NULL
7914 AND (
7915 p_new_val < NVL(clf.mn_comp_val
7919 ,decode(nvl(clf.mn_comp_val,p_new_val), trunc(nvl(clf.mn_comp_val,p_new_val)),
7916 ,p_new_val)
7917 OR p_new_val >= decode(nvl(clf.mx_comp_val,p_new_val) ,
7918 trunc(nvl(clf.mx_comp_val,p_new_val))
7920 nvl(clf.mx_comp_val,p_new_val)+1,nvl(clf.mx_comp_val,p_new_val)+0.000000001),
7921 nvl(clf.mx_comp_val,p_new_val)+0.000000001 ) )
7922 -- ceil( NVL(clf.mx_comp_val
7923 -- ,p_new_val))+ 0.001 )
7924 AND p_old_val >= NVL(clf.mn_comp_val
7925 ,p_old_val)
7926 AND p_old_val < decode(nvl(clf.mx_comp_val,p_old_val) ,
7927 trunc(nvl(clf.mx_comp_val,p_old_val))
7928 ,decode(nvl(clf.mn_comp_val,p_old_val), trunc(nvl(clf.mn_comp_val,p_old_val)),
7929 nvl(clf.mx_comp_val,p_old_val)+1,nvl(clf.mx_comp_val,p_old_val)+0.000000001),
7930 nvl(clf.mx_comp_val,p_old_val)+0.000000001 ) )
7931 -- ceil( NVL(clf.mx_comp_val
7932 -- ,p_old_val)) + 0.001 )
7933 OR ( p_new_val IS NULL
7934 AND p_old_val IS NULL));
7935 --
7936 --
7937 l_index PLS_INTEGER;
7938 l_not_hash_found BOOLEAN;
7939 l_c2notfound BOOLEAN;
7940 --
7941 BEGIN
7942 --
7943 -- hr_utility.set_location ('Entering '||l_package,10);
7944 --
7945 -- Steps to do process
7946 --
7947 -- 1) Try and get value from cache
7948 -- 2) If can get from cache then copy to output record
7949 -- 3) If can't get from cache do db hit and then
7950 -- copy to cache record and then copy to output record.
7951 --
7952 -- Get hashed index value
7953 --
7954 l_index := MOD(p_oipl_id
7955 ,g_hash_key);
7956 --
7957 IF NOT g_cache_oipl_clf_rt_rec.EXISTS(l_index) THEN
7958 --
7959 -- Lets store the hash value in this index
7960 --
7961 RAISE NO_DATA_FOUND;
7962 --
7963 ELSE
7964 --
7965 -- If it does exist make sure its the right one
7966 --
7967 IF g_cache_oipl_clf_rt_rec(l_index).id <> p_oipl_id THEN
7968 --
7969 -- Loop through the hash using the jump routine to check further
7970 -- indexes
7971 --
7972 l_not_hash_found := FALSE;
7973 --
7974 WHILE NOT l_not_hash_found LOOP
7975 --
7976 l_index := l_index + g_hash_jump;
7977 --
7978 -- Check if the hash index exists, if not we can use it
7979 --
7980 IF NOT g_cache_oipl_clf_rt_rec.EXISTS(l_index) THEN
7981 --
7982 -- Lets store the hash value in the index
7983 --
7984 RAISE NO_DATA_FOUND;
7985 --
7986 ELSE
7987 --
7988 -- Make sure the index is the correct one
7989 --
7990 IF g_cache_oipl_clf_rt_rec(l_index).id = p_oipl_id THEN
7991 --
7992 -- We have a match so the hashed value has been stored before
7993 --
7994 l_not_hash_found := TRUE;
7995 --
7996 END IF;
7997 --
7998 END IF;
7999 --
8000 END LOOP;
8001 --
8002 END IF;
8003 --
8004 END IF;
8005 --
8006 -- If p_old_val and p_new_val is set this means we are trying to retrieve
8007 -- the correct rate for the calculated value.
8008 -- Previously we just cached the first rate we
8009 -- found since we needed the determination code, the correct age,los code,etc
8010 -- By killing the cache and forcing the value to be removed we cache the
8011 -- correct rate profile for the case we need.
8012 --
8013 IF p_old_val IS NOT NULL
8014 AND p_new_val IS NOT NULL THEN
8015 --
8016 RAISE NO_DATA_FOUND;
8017 --
8018 END IF;
8019 --
8020 p_rec := g_cache_oipl_clf_rt_rec(l_index);
8021 --
8022 -- hr_utility.set_location ('Leaving '||l_package,10);
8023 --
8024 EXCEPTION
8025 --
8026 WHEN NO_DATA_FOUND THEN
8027 --
8028 -- The record has not been cached yet so lets cache it
8029 -- Option level rates enhancement
8030 l_opt_id := get_opt_id(p_oipl_id,p_effective_date);
8031 --
8032 OPEN c1;
8033 --
8034 FETCH c1 INTO g_cache_oipl_clf_rt_rec(l_index);
8035 -- PERFNEW
8036 IF c1%NOTFOUND THEN
8037 --
8038 l_c2notfound := false;
8039 OPEN c2;
8040 FETCH c2 INTO g_cache_oipl_clf_rt_rec(l_index);
8041 IF c2%NOTFOUND THEN
8042 --
8043 l_c2notfound := true;
8044 --
8045 END IF;
8046 CLOSE c2;
8047 --
8048 END IF;
8049 -- PERFNEW
8050 IF p_old_val IS NULL
8051 AND p_new_val IS NULL THEN
8052 --
8053 IF c1%NOTFOUND and l_c2notfound THEN -- PERFNEW
8054 --
8058 end if;
8055 if NOT g_cache_oipl_clf_rt_rec.EXISTS(l_index) then
8056 g_cache_oipl_clf_rt_rec(l_index).id := p_oipl_id;
8057 g_cache_oipl_clf_rt_rec(l_index).exist := 'N';
8059 --
8060 END IF;
8061 --
8062 END IF;
8063 --
8064 p_rec := g_cache_oipl_clf_rt_rec(l_index);
8065 --
8066 CLOSE c1;
8067 --
8068 END get_comp_oipl_rate;
8069 --
8070 PROCEDURE get_comp_plip_rate(
8071 p_plip_id IN NUMBER
8072 ,p_old_val IN NUMBER DEFAULT NULL
8073 ,p_new_val IN NUMBER DEFAULT NULL
8074 ,p_business_group_id IN NUMBER
8075 ,p_effective_date IN DATE
8076 ,p_rec OUT NOCOPY g_cache_clf_rec_obj) IS
8077 --
8078 l_package VARCHAR2(80) := g_package || '.get_comp_plip_rate';
8079 l_old_val_1 NUMBER := p_old_val + 1;
8080 l_new_val_1 NUMBER := p_new_val + 1;
8081 --
8082 -- Define Cursor
8083 --
8084 CURSOR c1 IS
8085 SELECT p_plip_id
8086 ,'Y'
8087 ,clf.comp_lvl_uom
8088 ,clf.comp_src_cd
8089 ,clf.comp_lvl_det_cd
8090 ,clf.comp_lvl_det_rl
8091 ,clf.rndg_cd
8092 ,clf.rndg_rl
8093 ,clf.mn_comp_val
8094 ,clf.mx_comp_val
8095 ,clf.bnfts_bal_id
8096 ,clf.defined_balance_id
8097 ,clf.sttd_sal_prdcty_cd
8098 ,clf.comp_lvl_fctr_id
8099 ,clf.comp_calc_rl
8100 FROM ben_comp_lvl_fctr clf
8101 ,ben_comp_lvl_rt_f clr
8102 ,ben_vrbl_rt_prfl_f vpf
8103 ,ben_acty_vrbl_rt_f avr
8104 ,ben_acty_base_rt_f abr
8105 WHERE abr.plip_id = p_plip_id
8106 AND p_effective_date BETWEEN abr.effective_start_date
8107 AND abr.effective_end_date
8108 AND abr.acty_base_rt_id = avr.acty_base_rt_id
8109 AND p_effective_date BETWEEN avr.effective_start_date
8110 AND avr.effective_end_date
8111 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
8112 AND p_effective_date BETWEEN vpf.effective_start_date
8113 AND vpf.effective_end_date
8114 AND vpf.vrbl_rt_prfl_id = clr.vrbl_rt_prfl_id
8115 AND p_effective_date BETWEEN clr.effective_start_date
8116 AND clr.effective_end_date
8117 AND clr.comp_lvl_fctr_id = clf.comp_lvl_fctr_id
8118 AND (
8119 (
8120 p_new_val IS NOT NULL
8121 AND p_old_val IS NOT NULL
8122 AND p_new_val >= NVL(clf.mn_comp_val
8123 ,p_new_val)
8124 AND p_new_val < decode(nvl(clf.mx_comp_val,p_new_val) ,
8125 trunc(nvl(clf.mx_comp_val,p_new_val))
8126 ,decode(nvl(clf.mn_comp_val,p_new_val), trunc(nvl(clf.mn_comp_val,p_new_val)),
8127 nvl(clf.mx_comp_val,p_new_val)+1,nvl(clf.mx_comp_val,p_new_val)+0.000000001),
8128 nvl(clf.mx_comp_val,p_new_val)+0.000000001 ) )
8129 -- ceil( NVL(clf.mx_comp_val
8130 -- ,p_new_val) + 0.001))
8131 OR (
8132 p_new_val IS NOT NULL
8133 AND p_old_val IS NOT NULL
8134 AND (
8135 p_new_val < NVL(clf.mn_comp_val
8136 ,p_new_val)
8137 OR p_new_val >= decode(nvl(clf.mx_comp_val,p_new_val) ,
8138 trunc(nvl(clf.mx_comp_val,p_new_val))
8139 ,decode(nvl(clf.mn_comp_val,p_new_val), trunc(nvl(clf.mn_comp_val,p_new_val)),
8140 nvl(clf.mx_comp_val,p_new_val)+1,nvl(clf.mx_comp_val,p_new_val)+0.000000001),
8141 nvl(clf.mx_comp_val,p_new_val)+0.000000001 ) )
8142 -- ceil( NVL(clf.mx_comp_val
8143 -- ,p_new_val)) + 0.001)
8144 AND p_old_val >= NVL(clf.mn_comp_val
8145 ,p_old_val)
8146 AND p_old_val < decode(nvl(clf.mx_comp_val,p_old_val) ,
8147 trunc(nvl(clf.mx_comp_val,p_old_val))
8148 ,decode(nvl(clf.mn_comp_val,p_old_val), trunc(nvl(clf.mn_comp_val,p_old_val)),
8149 nvl(clf.mx_comp_val,p_old_val)+1,nvl(clf.mx_comp_val,p_old_val)+0.000000001),
8150 nvl(clf.mx_comp_val,p_old_val)+0.000000001 ) )
8151 --ceil( NVL(clf.mx_comp_val
8152 -- ,p_old_val)) + 0.001)
8153 OR ( p_new_val IS NULL
8154 AND p_old_val IS NULL));
8155 -- PERFNEW. SPLIT TO 2 CURSORS C1 and C2.
8156 --UNION ALL
8157 CURSOR c2 IS
8158 SELECT p_plip_id
8159 ,'Y'
8160 ,clf.comp_lvl_uom
8161 ,clf.comp_src_cd
8162 ,clf.comp_lvl_det_cd
8163 ,clf.comp_lvl_det_rl
8164 ,clf.rndg_cd
8165 ,clf.rndg_rl
8166 ,clf.mn_comp_val
8170 ,clf.sttd_sal_prdcty_cd
8167 ,clf.mx_comp_val
8168 ,clf.bnfts_bal_id
8169 ,clf.defined_balance_id
8171 ,clf.comp_lvl_fctr_id
8172 ,clf.comp_calc_rl
8173 FROM ben_comp_lvl_fctr clf
8174 --,ben_comp_lvl_rt_f clr
8175 ,ben_elig_comp_lvl_prte_f ecl
8176 ,ben_eligy_prfl_f elp
8177 ,ben_vrbl_rt_elig_prfl_f vep
8178 ,ben_vrbl_rt_prfl_f vpf
8179 ,ben_acty_vrbl_rt_f avr
8180 ,ben_acty_base_rt_f abr
8181 WHERE abr.plip_id = p_plip_id
8182 AND p_effective_date BETWEEN abr.effective_start_date
8183 AND abr.effective_end_date
8184 AND abr.acty_base_rt_id = avr.acty_base_rt_id
8185 AND p_effective_date BETWEEN avr.effective_start_date
8186 AND avr.effective_end_date
8187 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
8188 AND p_effective_date BETWEEN vpf.effective_start_date
8189 AND vpf.effective_end_date
8190 -- AND vpf.vrbl_rt_prfl_id = ecl.vrbl_rt_prfl_id
8191 AND vpf.vrbl_rt_prfl_id = vep.vrbl_rt_prfl_id
8192 AND p_effective_date BETWEEN vep.effective_start_date
8193 AND vep.effective_end_date
8194 AND vep.eligy_prfl_id = elp.eligy_prfl_id
8195 AND p_effective_date BETWEEN elp.effective_start_date
8196 AND elp.effective_end_date
8197 AND ecl.eligy_prfl_id = elp.eligy_prfl_id
8198 AND p_effective_date BETWEEN ecl.effective_start_date
8199 AND ecl.effective_end_date
8200 AND ecl.comp_lvl_fctr_id = clf.comp_lvl_fctr_id
8201 AND (
8202 (
8203 p_new_val IS NOT NULL
8204 AND p_old_val IS NOT NULL
8205 AND p_new_val >= NVL(clf.mn_comp_val
8206 ,p_new_val)
8207 AND p_new_val < decode(nvl(clf.mx_comp_val,p_new_val) ,
8208 trunc(nvl(clf.mx_comp_val,p_new_val))
8209 ,decode(nvl(clf.mn_comp_val,p_new_val), trunc(nvl(clf.mn_comp_val,p_new_val)),
8210 nvl(clf.mx_comp_val,p_new_val)+1,nvl(clf.mx_comp_val,p_new_val)+0.000000001),
8211 nvl(clf.mx_comp_val,p_new_val)+0.000000001 ) )
8212 -- ceil( NVL(clf.mx_comp_val
8213 -- ,p_new_val) + 0.001))
8214 OR (
8215 p_new_val IS NOT NULL
8216 AND p_old_val IS NOT NULL
8217 AND (
8218 p_new_val < NVL(clf.mn_comp_val
8219 ,p_new_val)
8220 OR p_new_val >= decode(nvl(clf.mx_comp_val,p_new_val) ,
8221 trunc(nvl(clf.mx_comp_val,p_new_val))
8222 ,decode(nvl(clf.mn_comp_val,p_new_val), trunc(nvl(clf.mn_comp_val,p_new_val)),
8223 nvl(clf.mx_comp_val,p_new_val)+1,nvl(clf.mx_comp_val,p_new_val)+0.000000001),
8224 nvl(clf.mx_comp_val,p_new_val)+0.000000001 ) )
8225 -- ceil( NVL(clf.mx_comp_val
8226 -- ,p_new_val)) + 0.001)
8227 AND p_old_val >= NVL(clf.mn_comp_val
8228 ,p_old_val)
8229 AND p_old_val < decode(nvl(clf.mx_comp_val,p_old_val) ,
8230 trunc(nvl(clf.mx_comp_val,p_old_val))
8231 ,decode(nvl(clf.mn_comp_val,p_old_val), trunc(nvl(clf.mn_comp_val,p_old_val)),
8232 nvl(clf.mx_comp_val,p_old_val)+1,nvl(clf.mx_comp_val,p_old_val)+0.000000001),
8233 nvl(clf.mx_comp_val,p_old_val)+0.000000001 ) )
8234 --ceil( NVL(clf.mx_comp_val
8235 -- ,p_old_val)) + 0.001)
8236 OR ( p_new_val IS NULL
8237 AND p_old_val IS NULL));
8238 --
8239 --
8240 l_index PLS_INTEGER;
8241 l_not_hash_found BOOLEAN;
8242 l_c2notfound BOOLEAN;
8243 --
8244 BEGIN
8245 --
8246 -- hr_utility.set_location ('Entering '||l_package,10);
8247 --
8248 -- Steps to do process
8249 --
8250 -- 1) Try and get value from cache
8251 -- 2) If can get from cache then copy to output record
8252 -- 3) If can't get from cache do db hit and then
8253 -- copy to cache record and then copy to output record.
8254 --
8255 -- Get hashed index value
8256 --
8257 l_index := MOD(p_plip_id
8258 ,g_hash_key);
8259 --
8260 IF NOT g_cache_plip_clf_rt_rec.EXISTS(l_index) THEN
8261 --
8262 -- Lets store the hash value in this index
8263 --
8264 RAISE NO_DATA_FOUND;
8265 --
8266 ELSE
8267 --
8268 -- If it does exist make sure its the right one
8269 --
8270 IF g_cache_plip_clf_rt_rec(l_index).id <> p_plip_id THEN
8271 --
8272 -- Loop through the hash using the jump routine to check further
8273 -- indexes
8274 --
8275 l_not_hash_found := FALSE;
8276 --
8277 WHILE NOT l_not_hash_found LOOP
8278 --
8279 l_index := l_index + g_hash_jump;
8283 IF NOT g_cache_plip_clf_rt_rec.EXISTS(l_index) THEN
8280 --
8281 -- Check if the hash index exists, if not we can use it
8282 --
8284 --
8285 -- Lets store the hash value in the index
8286 --
8287 RAISE NO_DATA_FOUND;
8288 --
8289 ELSE
8290 --
8291 -- Make sure the index is the correct one
8292 --
8293 IF g_cache_plip_clf_rt_rec(l_index).id = p_plip_id THEN
8294 --
8295 -- We have a match so the hashed value has been stored before
8296 --
8297 l_not_hash_found := TRUE;
8298 --
8299 END IF;
8300 --
8301 END IF;
8302 --
8303 END LOOP;
8304 --
8305 END IF;
8306 --
8307 END IF;
8308 --
8309 -- If p_old_val and p_new_val is set this means we are trying to retrieve
8310 -- the correct rate for the calculated value.
8311 -- Previously we just cached the first rate we
8312 -- found since we needed the determination code, the correct age,los code,etc
8313 -- By killing the cache and forcing the value to be removed we cache the
8314 -- correct rate profile for the case we need.
8315 --
8316 IF p_old_val IS NOT NULL
8317 AND p_new_val IS NOT NULL THEN
8318 --
8319 RAISE NO_DATA_FOUND;
8320 --
8321 END IF;
8322 --
8323 p_rec := g_cache_plip_clf_rt_rec(l_index);
8324 --
8325 -- hr_utility.set_location ('Leaving '||l_package,10);
8326 --
8327 EXCEPTION
8328 --
8329 WHEN NO_DATA_FOUND THEN
8330 --
8331 -- The record has not been cached yet so lets cache it
8332 --
8333 OPEN c1;
8334 --
8335 FETCH c1 INTO g_cache_plip_clf_rt_rec(l_index);
8336 -- PERFNEW
8337 IF c1%NOTFOUND THEN
8338 --
8339 l_c2notfound := false;
8340 OPEN c2;
8341 FETCH c2 INTO g_cache_plip_clf_rt_rec(l_index);
8342 IF c2%NOTFOUND THEN
8343 --
8344 l_c2notfound := true;
8345 --
8346 END IF;
8347 CLOSE c2;
8348 --
8349 END IF;
8350 -- PERFNEW
8351 IF p_old_val IS NULL
8352 AND p_new_val IS NULL THEN
8353 --
8354 IF c1%NOTFOUND and l_c2notfound THEN -- PERFNEW
8355 --
8356 if NOT g_cache_plip_clf_rt_rec.EXISTS(l_index) then
8357 g_cache_plip_clf_rt_rec(l_index).id := p_plip_id;
8358 g_cache_plip_clf_rt_rec(l_index).exist := 'N';
8359 end if;
8360 --
8361 END IF;
8362 --
8363 END IF;
8364 --
8365 p_rec := g_cache_plip_clf_rt_rec(l_index);
8366 --
8367 CLOSE c1;
8368 --
8369 END get_comp_plip_rate;
8370 --
8371 PROCEDURE get_comp_ptip_rate(
8372 p_ptip_id IN NUMBER
8373 ,p_old_val IN NUMBER DEFAULT NULL
8374 ,p_new_val IN NUMBER DEFAULT NULL
8375 ,p_business_group_id IN NUMBER
8376 ,p_effective_date IN DATE
8377 ,p_rec OUT NOCOPY g_cache_clf_rec_obj) IS
8378 --
8379 l_package VARCHAR2(80) := g_package || '.get_comp_ptip_rate';
8380 l_old_val_1 NUMBER := p_old_val + 1;
8381 l_new_val_1 NUMBER := p_new_val + 1;
8382 --
8383 -- Define Cursor
8384 --
8385 CURSOR c1 IS
8386 SELECT p_ptip_id
8387 ,'Y'
8388 ,clf.comp_lvl_uom
8389 ,clf.comp_src_cd
8390 ,clf.comp_lvl_det_cd
8391 ,clf.comp_lvl_det_rl
8392 ,clf.rndg_cd
8393 ,clf.rndg_rl
8394 ,clf.mn_comp_val
8395 ,clf.mx_comp_val
8396 ,clf.bnfts_bal_id
8397 ,clf.defined_balance_id
8398 ,clf.sttd_sal_prdcty_cd
8399 ,clf.comp_lvl_fctr_id
8400 ,clf.comp_calc_rl
8401 FROM ben_comp_lvl_fctr clf
8402 ,ben_comp_lvl_rt_f clr
8403 ,ben_vrbl_rt_prfl_f vpf
8404 ,ben_acty_vrbl_rt_f avr
8405 ,ben_acty_base_rt_f abr
8406 WHERE abr.ptip_id = p_ptip_id
8407 AND p_effective_date BETWEEN abr.effective_start_date
8408 AND abr.effective_end_date
8409 AND abr.acty_base_rt_id = avr.acty_base_rt_id
8410 AND p_effective_date BETWEEN avr.effective_start_date
8411 AND avr.effective_end_date
8412 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
8413 AND p_effective_date BETWEEN vpf.effective_start_date
8414 AND vpf.effective_end_date
8415 AND vpf.vrbl_rt_prfl_id = clr.vrbl_rt_prfl_id
8416 AND p_effective_date BETWEEN clr.effective_start_date
8417 AND clr.effective_end_date
8418 AND clr.comp_lvl_fctr_id = clf.comp_lvl_fctr_id
8419 AND (
8420 (
8421 p_new_val IS NOT NULL
8422 AND p_old_val IS NOT NULL
8426 trunc(nvl(clf.mx_comp_val,p_new_val))
8423 AND p_new_val >= NVL(clf.mn_comp_val
8424 ,p_new_val)
8425 AND p_new_val < decode(nvl(clf.mx_comp_val,p_new_val) ,
8427 ,decode(nvl(clf.mn_comp_val,p_new_val), trunc(nvl(clf.mn_comp_val,p_new_val)),
8428 nvl(clf.mx_comp_val,p_new_val)+1,nvl(clf.mx_comp_val,p_new_val)+0.000000001),
8429 nvl(clf.mx_comp_val,p_new_val)+0.000000001 ) )
8430 -- ceil( NVL(clf.mx_comp_val
8431 -- ,p_new_val) + 0.001 ))
8432 OR (
8433 p_new_val IS NOT NULL
8434 AND p_old_val IS NOT NULL
8435 AND (
8436 p_new_val < NVL(clf.mn_comp_val
8437 ,p_new_val)
8438 OR p_new_val >= decode(nvl(clf.mx_comp_val,p_new_val) ,
8439 trunc(nvl(clf.mx_comp_val,p_new_val))
8440 ,decode(nvl(clf.mn_comp_val,p_new_val), trunc(nvl(clf.mn_comp_val,p_new_val)),
8441 nvl(clf.mx_comp_val,p_new_val)+1,nvl(clf.mx_comp_val,p_new_val)+0.000000001),
8442 nvl(clf.mx_comp_val,p_new_val)+0.000000001 ) )
8443 -- ceil( NVL(clf.mx_comp_val
8444 -- ,p_new_val)) + 0.001 )
8445 AND p_old_val >= NVL(clf.mn_comp_val
8446 ,p_old_val)
8447 AND p_old_val < decode(nvl(clf.mx_comp_val,p_old_val) ,
8448 trunc(nvl(clf.mx_comp_val,p_old_val))
8449 ,decode(nvl(clf.mn_comp_val,p_old_val), trunc(nvl(clf.mn_comp_val,p_old_val)),
8450 nvl(clf.mx_comp_val,p_old_val)+1,nvl(clf.mx_comp_val,p_old_val)+0.000000001),
8451 nvl(clf.mx_comp_val,p_old_val)+0.000000001 ) )
8452 -- ceil( NVL(clf.mx_comp_val
8453 -- ,p_old_val)) + 0.001 )
8454 OR ( p_new_val IS NULL
8455 AND p_old_val IS NULL));
8456 -- PERFNEW. SPLIT TO 2 CURSORS C1 and C2.
8457 --UNION ALL
8458 CURSOR c2 IS
8459 SELECT p_ptip_id
8460 ,'Y'
8461 ,clf.comp_lvl_uom
8462 ,clf.comp_src_cd
8463 ,clf.comp_lvl_det_cd
8464 ,clf.comp_lvl_det_rl
8465 ,clf.rndg_cd
8466 ,clf.rndg_rl
8467 ,clf.mn_comp_val
8468 ,clf.mx_comp_val
8469 ,clf.bnfts_bal_id
8470 ,clf.defined_balance_id
8471 ,clf.sttd_sal_prdcty_cd
8472 ,clf.comp_lvl_fctr_id
8473 ,clf.comp_calc_rl
8474 FROM ben_comp_lvl_fctr clf
8475 --,ben_comp_lvl_rt_f clr
8476 ,ben_elig_comp_lvl_prte_f ecl
8477 ,ben_eligy_prfl_f elp
8478 ,ben_vrbl_rt_elig_prfl_f vep
8479 ,ben_vrbl_rt_prfl_f vpf
8480 ,ben_acty_vrbl_rt_f avr
8481 ,ben_acty_base_rt_f abr
8482 WHERE abr.ptip_id = p_ptip_id
8483 AND p_effective_date BETWEEN abr.effective_start_date
8484 AND abr.effective_end_date
8485 AND abr.acty_base_rt_id = avr.acty_base_rt_id
8486 AND p_effective_date BETWEEN avr.effective_start_date
8487 AND avr.effective_end_date
8488 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
8489 AND p_effective_date BETWEEN vpf.effective_start_date
8490 AND vpf.effective_end_date
8491 -- AND vpf.vrbl_rt_prfl_id = ecl.vrbl_rt_prfl_id
8492 AND vpf.vrbl_rt_prfl_id = vep.vrbl_rt_prfl_id
8493 AND p_effective_date BETWEEN vep.effective_start_date
8494 AND vep.effective_end_date
8495 AND vep.eligy_prfl_id = elp.eligy_prfl_id
8496 AND p_effective_date BETWEEN elp.effective_start_date
8497 AND elp.effective_end_date
8498 AND ecl.eligy_prfl_id = elp.eligy_prfl_id
8499 AND p_effective_date BETWEEN ecl.effective_start_date
8500 AND ecl.effective_end_date
8501 AND ecl.comp_lvl_fctr_id = clf.comp_lvl_fctr_id
8502 AND (
8503 (
8504 p_new_val IS NOT NULL
8505 AND p_old_val IS NOT NULL
8506 AND p_new_val >= NVL(clf.mn_comp_val
8507 ,p_new_val)
8508 AND p_new_val < decode(nvl(clf.mx_comp_val,p_new_val) ,
8509 trunc(nvl(clf.mx_comp_val,p_new_val))
8510 ,decode(nvl(clf.mn_comp_val,p_new_val), trunc(nvl(clf.mn_comp_val,p_new_val)),
8511 nvl(clf.mx_comp_val,p_new_val)+1,nvl(clf.mx_comp_val,p_new_val)+0.000000001),
8512 nvl(clf.mx_comp_val,p_new_val)+0.000000001 ) )
8513 -- ceil( NVL(clf.mx_comp_val
8514 -- ,p_new_val) + 0.001 ))
8515 OR (
8516 p_new_val IS NOT NULL
8517 AND p_old_val IS NOT NULL
8518 AND (
8519 p_new_val < NVL(clf.mn_comp_val
8520 ,p_new_val)
8524 nvl(clf.mx_comp_val,p_new_val)+1,nvl(clf.mx_comp_val,p_new_val)+0.000000001),
8521 OR p_new_val >= decode(nvl(clf.mx_comp_val,p_new_val) ,
8522 trunc(nvl(clf.mx_comp_val,p_new_val))
8523 ,decode(nvl(clf.mn_comp_val,p_new_val), trunc(nvl(clf.mn_comp_val,p_new_val)),
8525 nvl(clf.mx_comp_val,p_new_val)+0.000000001 ) )
8526 -- ceil( NVL(clf.mx_comp_val
8527 -- ,p_new_val)) + 0.001 )
8528 AND p_old_val >= NVL(clf.mn_comp_val
8529 ,p_old_val)
8530 AND p_old_val < decode(nvl(clf.mx_comp_val,p_old_val) ,
8531 trunc(nvl(clf.mx_comp_val,p_old_val))
8532 ,decode(nvl(clf.mn_comp_val,p_old_val), trunc(nvl(clf.mn_comp_val,p_old_val)),
8533 nvl(clf.mx_comp_val,p_old_val)+1,nvl(clf.mx_comp_val,p_old_val)+0.000000001),
8534 nvl(clf.mx_comp_val,p_old_val)+0.000000001 ) )
8535 -- ceil( NVL(clf.mx_comp_val
8536 -- ,p_old_val)) + 0.001 )
8537 OR ( p_new_val IS NULL
8538 AND p_old_val IS NULL));
8539 --
8540 --
8541 l_index PLS_INTEGER;
8542 l_not_hash_found BOOLEAN;
8543 l_c2notfound BOOLEAN;
8544 --
8545 BEGIN
8546 --
8547 -- hr_utility.set_location ('Entering '||l_package,10);
8548 --
8549 -- Steps to do process
8550 --
8551 -- 1) Try and get value from cache
8552 -- 2) If can get from cache then copy to output record
8553 -- 3) If can't get from cache do db hit and then
8554 -- copy to cache record and then copy to output record.
8555 --
8556 -- Get hashed index value
8557 --
8558 l_index := MOD(p_ptip_id
8559 ,g_hash_key);
8560 --
8561 IF NOT g_cache_ptip_clf_rt_rec.EXISTS(l_index) THEN
8562 --
8563 -- Lets store the hash value in this index
8564 --
8565 RAISE NO_DATA_FOUND;
8566 --
8567 ELSE
8568 --
8569 -- If it does exist make sure its the right one
8570 --
8571 IF g_cache_ptip_clf_rt_rec(l_index).id <> p_ptip_id THEN
8572 --
8573 -- Loop through the hash using the jump routine to check further
8574 -- indexes
8575 --
8576 l_not_hash_found := FALSE;
8577 --
8578 WHILE NOT l_not_hash_found LOOP
8579 --
8580 l_index := l_index + g_hash_jump;
8581 --
8582 -- Check if the hash index exists, if not we can use it
8583 --
8584 IF NOT g_cache_ptip_clf_rt_rec.EXISTS(l_index) THEN
8585 --
8586 -- Lets store the hash value in the index
8587 --
8588 RAISE NO_DATA_FOUND;
8589 --
8590 ELSE
8591 --
8592 -- Make sure the index is the correct one
8593 --
8594 IF g_cache_ptip_clf_rt_rec(l_index).id = p_ptip_id THEN
8595 --
8596 -- We have a match so the hashed value has been stored before
8597 --
8598 l_not_hash_found := TRUE;
8599 --
8600 END IF;
8601 --
8602 END IF;
8603 --
8604 END LOOP;
8605 --
8606 END IF;
8607 --
8608 END IF;
8609 --
8610 -- If p_old_val and p_new_val is set this means we are trying to retrieve
8611 -- the correct rate for the calculated value.
8612 -- Previously we just cached the first rate we
8613 -- found since we needed the determination code, the correct age,los code,etc
8614 -- By killing the cache and forcing the value to be removed we cache the
8615 -- correct rate profile for the case we need.
8616 --
8617 IF p_old_val IS NOT NULL
8618 AND p_new_val IS NOT NULL THEN
8619 --
8620 RAISE NO_DATA_FOUND;
8621 --
8622 END IF;
8623 --
8624 p_rec := g_cache_ptip_clf_rt_rec(l_index);
8625 --
8626 -- hr_utility.set_location ('Leaving '||l_package,10);
8627 --
8628 EXCEPTION
8629 --
8630 WHEN NO_DATA_FOUND THEN
8631 --
8632 -- The record has not been cached yet so lets cache it
8633 --
8634 OPEN c1;
8635 --
8636 FETCH c1 INTO g_cache_ptip_clf_rt_rec(l_index);
8637 -- PERFNEW
8638 IF c1%NOTFOUND THEN
8639 --
8640 l_c2notfound := false;
8641 OPEN c2;
8642 FETCH c2 INTO g_cache_ptip_clf_rt_rec(l_index);
8643 IF c2%NOTFOUND THEN
8644 --
8645 l_c2notfound := true;
8646 --
8647 END IF;
8648 CLOSE c2;
8649 --
8650 END IF;
8651 -- PERFNEW
8652 IF p_old_val IS NULL
8653 AND p_new_val IS NULL THEN
8654 --
8655 IF c1%NOTFOUND and l_c2notfound THEN -- PERFNEW
8656 --
8657 if NOT g_cache_ptip_clf_rt_rec.EXISTS(l_index) then
8658 g_cache_ptip_clf_rt_rec(l_index).id := p_ptip_id;
8659 g_cache_ptip_clf_rt_rec(l_index).exist := 'N';
8660 end if;
8661 --
8665 --
8662 END IF;
8663 --
8664 END IF;
8666 p_rec := g_cache_ptip_clf_rt_rec(l_index);
8667 --
8668 CLOSE c1;
8669 --
8670 END get_comp_ptip_rate;
8671 --
8672 PROCEDURE get_comp_oiplip_rate(
8673 p_oiplip_id IN NUMBER
8674 ,p_old_val IN NUMBER DEFAULT NULL
8675 ,p_new_val IN NUMBER DEFAULT NULL
8676 ,p_business_group_id IN NUMBER
8677 ,p_effective_date IN DATE
8678 ,p_rec OUT NOCOPY g_cache_clf_rec_obj) IS
8679 --
8680 l_package VARCHAR2(80) := g_package || '.get_comp_oiplip_rate';
8681 l_old_val_1 NUMBER := p_old_val + 1;
8682 l_new_val_1 NUMBER := p_new_val + 1;
8683 --
8684 -- Define Cursor
8685 --
8686 CURSOR c1 IS
8687 SELECT p_oiplip_id
8688 ,'Y'
8689 ,clf.comp_lvl_uom
8690 ,clf.comp_src_cd
8691 ,clf.comp_lvl_det_cd
8692 ,clf.comp_lvl_det_rl
8693 ,clf.rndg_cd
8694 ,clf.rndg_rl
8695 ,clf.mn_comp_val
8696 ,clf.mx_comp_val
8697 ,clf.bnfts_bal_id
8698 ,clf.defined_balance_id
8699 ,clf.sttd_sal_prdcty_cd
8700 ,clf.comp_lvl_fctr_id
8701 ,clf.comp_calc_rl
8702 FROM ben_comp_lvl_fctr clf
8703 ,ben_comp_lvl_rt_f clr
8704 ,ben_vrbl_rt_prfl_f vpf
8705 ,ben_acty_vrbl_rt_f avr
8706 ,ben_acty_base_rt_f abr
8707 WHERE abr.oiplip_id = p_oiplip_id
8708 AND p_effective_date BETWEEN abr.effective_start_date
8709 AND abr.effective_end_date
8710 AND abr.acty_base_rt_id = avr.acty_base_rt_id
8711 AND p_effective_date BETWEEN avr.effective_start_date
8712 AND avr.effective_end_date
8713 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
8714 AND p_effective_date BETWEEN vpf.effective_start_date
8715 AND vpf.effective_end_date
8716 AND vpf.vrbl_rt_prfl_id = clr.vrbl_rt_prfl_id
8717 AND p_effective_date BETWEEN clr.effective_start_date
8718 AND clr.effective_end_date
8719 AND clr.comp_lvl_fctr_id = clf.comp_lvl_fctr_id
8720 AND (
8721 (
8722 p_new_val IS NOT NULL
8723 AND p_old_val IS NOT NULL
8724 AND p_new_val >= NVL(clf.mn_comp_val
8725 ,p_new_val)
8726 AND p_new_val < decode(nvl(clf.mx_comp_val,p_new_val) ,
8727 trunc(nvl(clf.mx_comp_val,p_new_val))
8728 ,decode(nvl(clf.mn_comp_val,p_new_val), trunc(nvl(clf.mn_comp_val,p_new_val)),
8729 nvl(clf.mx_comp_val,p_new_val)+1,nvl(clf.mx_comp_val,p_new_val)+0.000000001),
8730 nvl(clf.mx_comp_val,p_new_val)+0.000000001 ) )
8731 -- ceil( NVL(clf.mx_comp_val
8732 -- ,p_new_val) + 0.001 ))
8733 OR (
8734 p_new_val IS NOT NULL
8735 AND p_old_val IS NOT NULL
8736 AND (
8737 p_new_val < NVL(clf.mn_comp_val
8738 ,p_new_val)
8739 OR p_new_val >= decode(nvl(clf.mx_comp_val,p_new_val) ,
8740 trunc(nvl(clf.mx_comp_val,p_new_val))
8741 ,decode(nvl(clf.mn_comp_val,p_new_val), trunc(nvl(clf.mn_comp_val,p_new_val)),
8742 nvl(clf.mx_comp_val,p_new_val)+1,nvl(clf.mx_comp_val,p_new_val)+0.000000001),
8743 nvl(clf.mx_comp_val,p_new_val)+0.000000001 ) )
8744 -- ceil( NVL(clf.mx_comp_val
8745 -- , p_new_val))+ 0.001 )
8746 AND p_old_val >= NVL(clf.mn_comp_val
8747 ,p_old_val)
8748 AND p_old_val < decode(nvl(clf.mx_comp_val,p_old_val) ,
8749 trunc(nvl(clf.mx_comp_val,p_old_val))
8750 ,decode(nvl(clf.mn_comp_val,p_old_val), trunc(nvl(clf.mn_comp_val,p_old_val)),
8751 nvl(clf.mx_comp_val,p_old_val)+1,nvl(clf.mx_comp_val,p_old_val)+0.000000001),
8752 nvl(clf.mx_comp_val,p_old_val)+0.000000001 ) )
8753 -- ceil( NVL(clf.mx_comp_val
8754 -- ,p_old_val)) + 0.001 )
8755 OR ( p_new_val IS NULL
8756 AND p_old_val IS NULL));
8757 -- PERFNEW. SPLIT TO 2 CURSORS C1 and C2.
8758 --UNION ALL
8759 CURSOR c2 IS
8760 SELECT p_oiplip_id
8761 ,'Y'
8762 ,clf.comp_lvl_uom
8763 ,clf.comp_src_cd
8764 ,clf.comp_lvl_det_cd
8765 ,clf.comp_lvl_det_rl
8766 ,clf.rndg_cd
8767 ,clf.rndg_rl
8768 ,clf.mn_comp_val
8769 ,clf.mx_comp_val
8770 ,clf.bnfts_bal_id
8771 ,clf.defined_balance_id
8772 ,clf.sttd_sal_prdcty_cd
8776 --,ben_comp_lvl_rt_f clr
8773 ,clf.comp_lvl_fctr_id
8774 ,clf.comp_calc_rl
8775 FROM ben_comp_lvl_fctr clf
8777 ,ben_elig_comp_lvl_prte_f ecl
8778 ,ben_eligy_prfl_f elp
8779 ,ben_vrbl_rt_elig_prfl_f vep
8780 ,ben_vrbl_rt_prfl_f vpf
8781 ,ben_acty_vrbl_rt_f avr
8782 ,ben_acty_base_rt_f abr
8783 WHERE abr.oiplip_id = p_oiplip_id
8784 AND p_effective_date BETWEEN abr.effective_start_date
8785 AND abr.effective_end_date
8786 AND abr.acty_base_rt_id = avr.acty_base_rt_id
8787 AND p_effective_date BETWEEN avr.effective_start_date
8788 AND avr.effective_end_date
8789 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
8790 AND p_effective_date BETWEEN vpf.effective_start_date
8791 AND vpf.effective_end_date
8792 -- AND vpf.vrbl_rt_prfl_id = ecl.vrbl_rt_prfl_id
8793 AND vpf.vrbl_rt_prfl_id = vep.vrbl_rt_prfl_id
8794 AND p_effective_date BETWEEN vep.effective_start_date
8795 AND vep.effective_end_date
8796 AND vep.eligy_prfl_id = elp.eligy_prfl_id
8797 AND p_effective_date BETWEEN elp.effective_start_date
8798 AND elp.effective_end_date
8799 AND ecl.eligy_prfl_id = elp.eligy_prfl_id
8800 AND p_effective_date BETWEEN ecl.effective_start_date
8801 AND ecl.effective_end_date
8802 AND ecl.comp_lvl_fctr_id = clf.comp_lvl_fctr_id
8803 AND (
8804 (
8805 p_new_val IS NOT NULL
8806 AND p_old_val IS NOT NULL
8807 AND p_new_val >= NVL(clf.mn_comp_val
8808 ,p_new_val)
8809 AND p_new_val < decode(nvl(clf.mx_comp_val,p_new_val) ,
8810 trunc(nvl(clf.mx_comp_val,p_new_val))
8811 ,decode(nvl(clf.mn_comp_val,p_new_val), trunc(nvl(clf.mn_comp_val,p_new_val)),
8812 nvl(clf.mx_comp_val,p_new_val)+1,nvl(clf.mx_comp_val,p_new_val)+0.000000001),
8813 nvl(clf.mx_comp_val,p_new_val)+0.000000001 ) )
8814 -- ceil( NVL(clf.mx_comp_val
8815 -- ,p_new_val) + 0.001 ))
8816 OR (
8817 p_new_val IS NOT NULL
8818 AND p_old_val IS NOT NULL
8819 AND (
8820 p_new_val < NVL(clf.mn_comp_val
8821 ,p_new_val)
8822 OR p_new_val >= decode(nvl(clf.mx_comp_val,p_new_val) ,
8823 trunc(nvl(clf.mx_comp_val,p_new_val))
8824 ,decode(nvl(clf.mn_comp_val,p_new_val), trunc(nvl(clf.mn_comp_val,p_new_val)),
8825 nvl(clf.mx_comp_val,p_new_val)+1,nvl(clf.mx_comp_val,p_new_val)+0.000000001),
8826 nvl(clf.mx_comp_val,p_new_val)+0.000000001 ) )
8827 -- ceil( NVL(clf.mx_comp_val
8828 -- , p_new_val))+ 0.001 )
8829 AND p_old_val >= NVL(clf.mn_comp_val
8830 ,p_old_val)
8831 AND p_old_val < decode(nvl(clf.mx_comp_val,p_old_val) ,
8832 trunc(nvl(clf.mx_comp_val,p_old_val))
8833 ,decode(nvl(clf.mn_comp_val,p_old_val), trunc(nvl(clf.mn_comp_val,p_old_val)),
8834 nvl(clf.mx_comp_val,p_old_val)+1,nvl(clf.mx_comp_val,p_old_val)+0.000000001),
8835 nvl(clf.mx_comp_val,p_old_val)+0.000000001 ) )
8836 -- ceil( NVL(clf.mx_comp_val
8837 -- ,p_old_val)) + 0.001 )
8838 OR ( p_new_val IS NULL
8839 AND p_old_val IS NULL));
8840 --
8841 --
8842 l_index PLS_INTEGER;
8843 l_not_hash_found BOOLEAN;
8844 l_c2notfound BOOLEAN;
8845 --
8846 BEGIN
8847 --
8848 -- hr_utility.set_location ('Entering '||l_package,10);
8849 --
8850 -- Steps to do process
8851 --
8852 -- 1) Try and get value from cache
8853 -- 2) If can get from cache then copy to output record
8854 -- 3) If can't get from cache do db hit and then
8855 -- copy to cache record and then copy to output record.
8856 --
8857 -- Get hashed index value
8858 --
8859 l_index := MOD(p_oiplip_id
8860 ,g_hash_key);
8861 --
8862 IF NOT g_cache_oiplip_clf_rt_rec.EXISTS(l_index) THEN
8863 --
8864 -- Lets store the hash value in this index
8865 --
8866 RAISE NO_DATA_FOUND;
8867 --
8868 ELSE
8869 --
8870 -- If it does exist make sure its the right one
8871 --
8872 IF g_cache_oiplip_clf_rt_rec(l_index).id <> p_oiplip_id THEN
8873 --
8874 -- Loop through the hash using the jump routine to check further
8875 -- indexes
8876 --
8877 l_not_hash_found := FALSE;
8878 --
8879 WHILE NOT l_not_hash_found LOOP
8880 --
8881 l_index := l_index + g_hash_jump;
8882 --
8883 -- Check if the hash index exists, if not we can use it
8884 --
8885 IF NOT g_cache_oiplip_clf_rt_rec.EXISTS(l_index) THEN
8886 --
8890 --
8887 -- Lets store the hash value in the index
8888 --
8889 RAISE NO_DATA_FOUND;
8891 ELSE
8892 --
8893 -- Make sure the index is the correct one
8894 --
8895 IF g_cache_oiplip_clf_rt_rec(l_index).id = p_oiplip_id THEN
8896 --
8897 -- We have a match so the hashed value has been stored before
8898 --
8899 l_not_hash_found := TRUE;
8900 --
8901 END IF;
8902 --
8903 END IF;
8904 --
8905 END LOOP;
8906 --
8907 END IF;
8908 --
8909 END IF;
8910 --
8911 -- If p_old_val and p_new_val is set this means we are trying to retrieve
8912 -- the correct rate for the calculated value.
8913 -- Previously we just cached the first rate we
8914 -- found since we needed the determination code, the correct age,los code,etc
8915 -- By killing the cache and forcing the value to be removed we cache the
8916 -- correct rate profile for the case we need.
8917 --
8918 IF p_old_val IS NOT NULL
8919 AND p_new_val IS NOT NULL THEN
8920 --
8921 RAISE NO_DATA_FOUND;
8922 --
8923 END IF;
8924 --
8925 p_rec := g_cache_oiplip_clf_rt_rec(l_index);
8926 --
8927 -- hr_utility.set_location ('Leaving '||l_package,10);
8928 --
8929 EXCEPTION
8930 --
8931 WHEN NO_DATA_FOUND THEN
8932 --
8933 -- The record has not been cached yet so lets cache it
8934 --
8935 OPEN c1;
8936 --
8937 FETCH c1 INTO g_cache_oiplip_clf_rt_rec(l_index);
8938 -- PERFNEW
8939 IF c1%NOTFOUND THEN
8940 --
8941 l_c2notfound := false;
8942 OPEN c2;
8943 FETCH c2 INTO g_cache_oiplip_clf_rt_rec(l_index);
8944 IF c2%NOTFOUND THEN
8945 --
8946 l_c2notfound := true;
8947 --
8948 END IF;
8949 CLOSE c2;
8950 --
8951 END IF;
8952 -- PERFNEW
8953 IF p_old_val IS NULL
8954 AND p_new_val IS NULL THEN
8955 --
8956 IF c1%NOTFOUND and l_c2notfound THEN -- PERFNEW
8957 --
8958 if NOT g_cache_oiplip_clf_rt_rec.EXISTS(l_index) then
8959 g_cache_oiplip_clf_rt_rec(l_index).id := p_oiplip_id;
8960 g_cache_oiplip_clf_rt_rec(l_index).exist := 'N';
8961 end if;
8962 --
8963 END IF;
8964 --
8965 END IF;
8966 --
8967 p_rec := g_cache_oiplip_clf_rt_rec(l_index);
8968 --
8969 CLOSE c1;
8970 --
8971 END get_comp_oiplip_rate;
8972 --
8973 PROCEDURE get_comp_rate(
8974 p_pgm_id IN NUMBER
8975 ,p_pl_id IN NUMBER
8976 ,p_oipl_id IN NUMBER
8977 ,p_plip_id IN NUMBER
8978 ,p_ptip_id IN NUMBER
8979 ,p_oiplip_id IN NUMBER
8980 ,p_old_val IN NUMBER DEFAULT NULL
8981 ,p_new_val IN NUMBER DEFAULT NULL
8982 ,p_business_group_id IN NUMBER
8983 ,p_effective_date IN DATE
8984 ,p_rec OUT NOCOPY g_cache_clf_rec_obj) IS
8985 --
8986 l_package VARCHAR2(80) := g_package || '.get_comp_rate';
8987 --
8988 BEGIN
8989 --
8990 -- hr_utility.set_location ('Entering '||l_package,10);
8991 --
8992 -- Derive which data type we are dealing with
8993 --
8994 IF p_pgm_id IS NOT NULL THEN
8995 --
8996 get_comp_pgm_rate(p_pgm_id=> p_pgm_id
8997 ,p_old_val => p_old_val
8998 ,p_new_val => p_new_val
8999 ,p_business_group_id => p_business_group_id
9000 ,p_effective_date => p_effective_date
9001 ,p_rec => p_rec);
9002 --
9003 ELSIF p_pl_id IS NOT NULL THEN
9004 --
9005 get_comp_pl_rate(p_pl_id=> p_pl_id
9006 ,p_old_val => p_old_val
9007 ,p_new_val => p_new_val
9008 ,p_business_group_id => p_business_group_id
9009 ,p_effective_date => p_effective_date
9010 ,p_rec => p_rec);
9011 --
9012 ELSIF p_oipl_id IS NOT NULL THEN
9013 --
9014 get_comp_oipl_rate(p_oipl_id=> p_oipl_id
9015 ,p_old_val => p_old_val
9016 ,p_new_val => p_new_val
9017 ,p_business_group_id => p_business_group_id
9018 ,p_effective_date => p_effective_date
9019 ,p_rec => p_rec);
9020 --
9021 ELSIF p_plip_id IS NOT NULL THEN
9022 --
9023 get_comp_plip_rate(p_plip_id=> p_plip_id
9024 ,p_old_val => p_old_val
9025 ,p_new_val => p_new_val
9026 ,p_business_group_id => p_business_group_id
9027 ,p_effective_date => p_effective_date
9028 ,p_rec => p_rec);
9029 --
9030 ELSIF p_ptip_id IS NOT NULL THEN
9031 --
9032 get_comp_ptip_rate(p_ptip_id=> p_ptip_id
9033 ,p_old_val => p_old_val
9037 ,p_rec => p_rec);
9034 ,p_new_val => p_new_val
9035 ,p_business_group_id => p_business_group_id
9036 ,p_effective_date => p_effective_date
9038 --
9039 ELSIF p_oiplip_id IS NOT NULL THEN
9040 --
9041 get_comp_oiplip_rate(p_oiplip_id=> p_oiplip_id
9042 ,p_old_val => p_old_val
9043 ,p_new_val => p_new_val
9044 ,p_business_group_id => p_business_group_id
9045 ,p_effective_date => p_effective_date
9046 ,p_rec => p_rec);
9047 --
9048 END IF;
9049 --
9050 -- hr_utility.set_location ('Leaving '||l_package,10);
9051 --
9052 END get_comp_rate;
9053 --
9054 PROCEDURE get_comb_pgm_elig(
9055 p_pgm_id IN NUMBER
9056 ,p_old_val in number default null
9057 ,p_new_val in number default null
9058 ,p_business_group_id IN NUMBER
9059 ,p_effective_date IN DATE
9060 ,p_rec OUT NOCOPY g_cache_cla_rec_obj) IS
9061 --
9062 l_package VARCHAR2(80) := g_package || '.get_comb_pgm_elig';
9063 --
9064 -- Define Cursor
9065 --
9066 CURSOR c1 IS
9067 SELECT p_pgm_id
9068 ,'Y'
9069 ,cla.los_fctr_id
9070 ,cla.age_fctr_id
9071 ,cla.cmbnd_min_val
9072 ,cla.cmbnd_max_val
9073 FROM ben_cmbn_age_los_fctr cla
9074 ,ben_elig_cmbn_age_los_prte_f ecp
9075 ,ben_eligy_prfl_f elp
9076 ,ben_prtn_elig_prfl_f cep
9077 ,ben_prtn_elig_f epa
9078 WHERE epa.pgm_id = p_pgm_id
9079 AND p_effective_date BETWEEN epa.effective_start_date
9080 AND epa.effective_end_date
9081 AND epa.prtn_elig_id = cep.prtn_elig_id
9082 AND p_effective_date BETWEEN cep.effective_start_date
9083 AND cep.effective_end_date
9084 AND cep.eligy_prfl_id = elp.eligy_prfl_id
9085 AND p_effective_date BETWEEN ecp.effective_start_date
9086 AND ecp.effective_end_date
9087 AND ecp.eligy_prfl_id = elp.eligy_prfl_id
9088 AND p_effective_date BETWEEN ecp.effective_start_date
9089 AND ecp.effective_end_date
9090 AND ecp.cmbn_age_los_fctr_id = cla.cmbn_age_los_fctr_id
9091 AND (
9092 (
9093 p_new_val IS NOT NULL
9094 AND p_old_val IS NOT NULL
9095 AND p_new_val >= NVL(cla.cmbnd_min_val ,p_new_val)
9096 and p_new_val < decode(nvl(cla.cmbnd_max_val,p_new_val) ,
9097 trunc(nvl(cla.cmbnd_max_val,p_new_val))
9098 ,decode(nvl(cla.cmbnd_min_val,p_new_val), trunc(nvl(cla.cmbnd_min_val,p_new_val)),
9099 nvl(cla.cmbnd_max_val,p_new_val)+1,nvl(cla.cmbnd_max_val,p_new_val)+0.000000001),
9100 nvl(cla.cmbnd_max_val,p_new_val)+0.000000001 )
9101 -- and p_old_val < cla.cmbnd_min_val
9102 )
9103 OR
9104 (
9105 p_new_val IS NOT NULL
9106 AND p_old_val IS NOT NULL
9107 AND
9108 (
9109 p_new_val < NVL(cla.cmbnd_min_val,p_new_val)
9110 OR
9111 p_new_val >= decode(nvl(cla.cmbnd_max_val,p_new_val) ,
9112 trunc(nvl(cla.cmbnd_max_val,p_new_val))
9113 ,decode(nvl(cla.cmbnd_min_val,p_new_val), trunc(nvl(cla.cmbnd_min_val,p_new_val)),
9114 nvl(cla.cmbnd_max_val,p_new_val)+1,nvl(cla.cmbnd_max_val,p_new_val)+0.000000001),
9115 nvl(cla.cmbnd_max_val,p_new_val)+0.000000001 )
9116 )
9117 AND p_old_val >= NVL(cla.cmbnd_min_val ,p_old_val)
9118 and p_old_val < decode(nvl(cla.cmbnd_max_val,p_old_val) ,
9119 trunc(nvl(cla.cmbnd_max_val,p_old_val))
9120 ,decode(nvl(cla.cmbnd_min_val,p_old_val), trunc(nvl(cla.cmbnd_min_val,p_old_val)),
9121 nvl(cla.cmbnd_max_val,p_old_val)+1,nvl(cla.cmbnd_max_val,p_old_val)+0.000000001),
9122 nvl(cla.cmbnd_max_val,p_old_val)+0.000000001 )
9123 )
9124 OR
9125 ( p_new_val IS NULL
9126 AND p_old_val IS NULL
9127 )
9128 );
9129
9130 --
9131 l_index PLS_INTEGER;
9132 l_not_hash_found BOOLEAN;
9133 --
9134 BEGIN
9135 --
9136 -- hr_utility.set_location ('Entering '||l_package,10);
9137 --
9138 -- Steps to do process
9139 --
9140 -- 1) Try and get value from cache
9141 -- 2) If can get from cache then copy to output record
9142 -- 3) If can't get from cache do db hit and then
9143 -- copy to cache record and then copy to output record.
9144 --
9145 -- Get hashed index value
9146 --
9147 l_index := MOD(p_pgm_id
9148 ,g_hash_key);
9149 --
9150 IF NOT g_cache_pgm_cla_el_rec.EXISTS(l_index) THEN
9151 --
9152 -- Lets store the hash value in this index
9153 --
9154 RAISE NO_DATA_FOUND;
9155 --
9156 ELSE
9157 --
9161 --
9158 -- If it does exist make sure its the right one
9159 --
9160 IF g_cache_pgm_cla_el_rec(l_index).id <> p_pgm_id THEN
9162 -- Loop through the hash using the jump routine to check further
9163 -- indexes
9164 --
9165 l_not_hash_found := FALSE;
9166 --
9167 WHILE NOT l_not_hash_found LOOP
9168 --
9169 l_index := l_index + g_hash_jump;
9170 --
9171 -- Check if the hash index exists, if not we can use it
9172 --
9173 IF NOT g_cache_pgm_cla_el_rec.EXISTS(l_index) THEN
9174 --
9175 -- Lets store the hash value in the index
9176 --
9177 RAISE NO_DATA_FOUND;
9178 --
9179 ELSE
9180 --
9181 -- Make sure the index is the correct one
9182 --
9183 IF g_cache_pgm_cla_el_rec(l_index).id = p_pgm_id THEN
9184 --
9185 -- We have a match so the hashed value has been stored before
9186 --
9187 l_not_hash_found := TRUE;
9188 --
9189 END IF;
9190 --
9191 END IF;
9192 --
9193 END LOOP;
9194 --
9195 END IF;
9196 --
9197 END IF;
9198 --
9199 IF p_old_val IS NOT NULL
9200 AND p_new_val IS NOT NULL THEN
9201 --
9202 RAISE NO_DATA_FOUND;
9203 --
9204 END IF;
9205
9206 p_rec := g_cache_pgm_cla_el_rec(l_index);
9207 --
9208 -- hr_utility.set_location ('Leaving '||l_package,10);
9209 --
9210 EXCEPTION
9211 --
9212 WHEN NO_DATA_FOUND THEN
9213 --
9214 -- The record has not been cached yet so lets cache it
9215 --
9216 OPEN c1;
9217 --
9218 FETCH c1 INTO g_cache_pgm_cla_el_rec(l_index);
9219 IF c1%NOTFOUND THEN
9220 --
9221 if NOT g_cache_pgm_cla_el_rec.EXISTS(l_index) then
9222 g_cache_pgm_cla_el_rec(l_index).id := p_pgm_id;
9223 g_cache_pgm_cla_el_rec(l_index).exist := 'N';
9224 end if;
9225 --
9226 END IF;
9227 --
9228 p_rec := g_cache_pgm_cla_el_rec(l_index);
9229 --
9230 CLOSE c1;
9231 --
9232 END get_comb_pgm_elig;
9233 --
9234 PROCEDURE get_comb_pl_elig(
9235 p_pl_id IN NUMBER
9236 ,p_old_val in number default null
9237 ,p_new_val in number default null
9238 ,p_business_group_id IN NUMBER
9239 ,p_effective_date IN DATE
9240 ,p_rec OUT NOCOPY g_cache_cla_rec_obj) IS
9241 --
9242 l_package VARCHAR2(80) := g_package || '.get_comb_pl_elig';
9243 --
9244 -- Define Cursor
9245 --
9246 CURSOR c1 IS
9247 SELECT p_pl_id
9248 ,'Y'
9249 ,cla.los_fctr_id
9250 ,cla.age_fctr_id
9251 ,cla.cmbnd_min_val
9252 ,cla.cmbnd_max_val
9253 FROM ben_cmbn_age_los_fctr cla
9254 ,ben_elig_cmbn_age_los_prte_f ecp
9255 ,ben_eligy_prfl_f elp
9256 ,ben_prtn_elig_prfl_f cep
9257 ,ben_prtn_elig_f epa
9258 WHERE epa.pl_id = p_pl_id
9259 AND p_effective_date BETWEEN epa.effective_start_date
9260 AND epa.effective_end_date
9261 AND epa.prtn_elig_id = cep.prtn_elig_id
9262 AND p_effective_date BETWEEN cep.effective_start_date
9263 AND cep.effective_end_date
9264 AND cep.eligy_prfl_id = elp.eligy_prfl_id
9265 AND p_effective_date BETWEEN ecp.effective_start_date
9266 AND ecp.effective_end_date
9267 AND ecp.eligy_prfl_id = elp.eligy_prfl_id
9268 AND p_effective_date BETWEEN ecp.effective_start_date
9269 AND ecp.effective_end_date
9270 AND ecp.cmbn_age_los_fctr_id = cla.cmbn_age_los_fctr_id
9271 AND (
9272 (
9273 p_new_val IS NOT NULL
9274 AND p_old_val IS NOT NULL
9275 AND p_new_val >= NVL(cla.cmbnd_min_val ,p_new_val)
9276 and p_new_val < decode(nvl(cla.cmbnd_max_val,p_new_val) ,
9277 trunc(nvl(cla.cmbnd_max_val,p_new_val))
9278 ,decode(nvl(cla.cmbnd_min_val,p_new_val), trunc(nvl(cla.cmbnd_min_val,p_new_val)),
9279 nvl(cla.cmbnd_max_val,p_new_val)+1,nvl(cla.cmbnd_max_val,p_new_val)+0.000000001),
9280 nvl(cla.cmbnd_max_val,p_new_val)+0.000000001 )
9281 -- and p_old_val < cla.cmbnd_min_val
9282 )
9283 OR
9284 (
9285 p_new_val IS NOT NULL
9286 AND p_old_val IS NOT NULL
9287 AND
9288 (
9289 p_new_val < NVL(cla.cmbnd_min_val,p_new_val)
9290 OR
9291 p_new_val >= decode(nvl(cla.cmbnd_max_val,p_new_val) ,
9292 trunc(nvl(cla.cmbnd_max_val,p_new_val))
9293 ,decode(nvl(cla.cmbnd_min_val,p_new_val), trunc(nvl(cla.cmbnd_min_val,p_new_val)),
9297 AND p_old_val >= NVL(cla.cmbnd_min_val ,p_old_val)
9294 nvl(cla.cmbnd_max_val,p_new_val)+1,nvl(cla.cmbnd_max_val,p_new_val)+0.000000001),
9295 nvl(cla.cmbnd_max_val,p_new_val)+0.000000001 )
9296 )
9298 and p_old_val < decode(nvl(cla.cmbnd_max_val,p_old_val) ,
9299 trunc(nvl(cla.cmbnd_max_val,p_old_val))
9300 ,decode(nvl(cla.cmbnd_min_val,p_old_val), trunc(nvl(cla.cmbnd_min_val,p_old_val)),
9301 nvl(cla.cmbnd_max_val,p_old_val)+1,nvl(cla.cmbnd_max_val,p_old_val)+0.000000001),
9302 nvl(cla.cmbnd_max_val,p_old_val)+0.000000001 )
9303 )
9304 OR
9305 ( p_new_val IS NULL
9306 AND p_old_val IS NULL
9307 )
9308 );
9309
9310 --
9311 --
9312 l_index PLS_INTEGER;
9313 l_not_hash_found BOOLEAN;
9314 --
9315 BEGIN
9316 --
9317 -- hr_utility.set_location ('Entering '||l_package,10);
9318 --
9319 -- Steps to do process
9320 --
9321 -- 1) Try and get value from cache
9322 -- 2) If can get from cache then copy to output record
9323 -- 3) If can't get from cache do db hit and then
9324 -- copy to cache record and then copy to output record.
9325 --
9326 -- Get hashed index value
9327 --
9328 l_index := MOD(p_pl_id
9329 ,g_hash_key);
9330 --
9331 IF NOT g_cache_pl_cla_el_rec.EXISTS(l_index) THEN
9332 --
9333 -- Lets store the hash value in this index
9334 --
9335 RAISE NO_DATA_FOUND;
9336 --
9337 ELSE
9338 --
9339 -- If it does exist make sure its the right one
9340 --
9341 IF g_cache_pl_cla_el_rec(l_index).id <> p_pl_id THEN
9342 --
9343 -- Loop through the hash using the jump routine to check further
9344 -- indexes
9345 --
9346 l_not_hash_found := FALSE;
9347 --
9348 WHILE NOT l_not_hash_found LOOP
9349 --
9350 l_index := l_index + g_hash_jump;
9351 --
9352 -- Check if the hash index exists, if not we can use it
9353 --
9354 IF NOT g_cache_pl_cla_el_rec.EXISTS(l_index) THEN
9355 --
9356 -- Lets store the hash value in the index
9357 --
9358 RAISE NO_DATA_FOUND;
9359 --
9360 ELSE
9361 --
9362 -- Make sure the index is the correct one
9363 --
9364 IF g_cache_pl_cla_el_rec(l_index).id = p_pl_id THEN
9365 --
9366 -- We have a match so the hashed value has been stored before
9367 --
9368 l_not_hash_found := TRUE;
9369 --
9370 END IF;
9371 --
9372 END IF;
9373 --
9374 END LOOP;
9375 --
9376 END IF;
9377 --
9378 END IF;
9379 --
9380 IF p_old_val IS NOT NULL
9381 AND p_new_val IS NOT NULL THEN
9382 --
9383 RAISE NO_DATA_FOUND;
9384 --
9385 END IF;
9386 p_rec := g_cache_pl_cla_el_rec(l_index);
9387 --
9388 -- hr_utility.set_location ('Leaving '||l_package,10);
9389 --
9390 EXCEPTION
9391 --
9392 WHEN NO_DATA_FOUND THEN
9393 --
9394 -- The record has not been cached yet so lets cache it
9395 --
9396 OPEN c1;
9397 --
9398 FETCH c1 INTO g_cache_pl_cla_el_rec(l_index);
9399 IF c1%NOTFOUND THEN
9400 --
9401 if NOT g_cache_pl_cla_el_rec.EXISTS(l_index) then
9402 g_cache_pl_cla_el_rec(l_index).id := p_pl_id;
9403 g_cache_pl_cla_el_rec(l_index).exist := 'N';
9404 end if;
9405 --
9406 END IF;
9407 --
9408 p_rec := g_cache_pl_cla_el_rec(l_index);
9409 --
9410 CLOSE c1;
9411 --
9412 END get_comb_pl_elig;
9413 --
9414 PROCEDURE get_comb_oipl_elig(
9415 p_oipl_id IN NUMBER
9416 ,p_old_val in number default null
9417 ,p_new_val in number default null
9418 ,p_business_group_id IN NUMBER
9419 ,p_effective_date IN DATE
9420 ,p_rec OUT NOCOPY g_cache_cla_rec_obj) IS
9421 --
9422 l_package VARCHAR2(80) := g_package || '.get_comb_oipl_elig';
9423 --
9424 -- Define Cursor
9425 --
9426 CURSOR c1 IS
9427 SELECT p_oipl_id
9428 ,'Y'
9429 ,cla.los_fctr_id
9430 ,cla.age_fctr_id
9431 ,cla.cmbnd_min_val
9432 ,cla.cmbnd_max_val
9433 FROM ben_cmbn_age_los_fctr cla
9434 ,ben_elig_cmbn_age_los_prte_f ecp
9435 ,ben_eligy_prfl_f elp
9436 ,ben_prtn_elig_prfl_f cep
9437 ,ben_prtn_elig_f epa
9438 WHERE epa.oipl_id = p_oipl_id
9439 AND p_effective_date BETWEEN epa.effective_start_date
9443 AND cep.effective_end_date
9440 AND epa.effective_end_date
9441 AND epa.prtn_elig_id = cep.prtn_elig_id
9442 AND p_effective_date BETWEEN cep.effective_start_date
9444 AND cep.eligy_prfl_id = elp.eligy_prfl_id
9445 AND p_effective_date BETWEEN ecp.effective_start_date
9446 AND ecp.effective_end_date
9447 AND ecp.eligy_prfl_id = elp.eligy_prfl_id
9448 AND p_effective_date BETWEEN ecp.effective_start_date
9449 AND ecp.effective_end_date
9450 AND ecp.cmbn_age_los_fctr_id = cla.cmbn_age_los_fctr_id
9451 AND (
9452 (
9453 p_new_val IS NOT NULL
9454 AND p_old_val IS NOT NULL
9455 AND p_new_val >= NVL(cla.cmbnd_min_val ,p_new_val)
9456 and p_new_val < decode(nvl(cla.cmbnd_max_val,p_new_val) ,
9457 trunc(nvl(cla.cmbnd_max_val,p_new_val))
9458 ,decode(nvl(cla.cmbnd_min_val,p_new_val), trunc(nvl(cla.cmbnd_min_val,p_new_val)),
9459 nvl(cla.cmbnd_max_val,p_new_val)+1,nvl(cla.cmbnd_max_val,p_new_val)+0.000000001),
9460 nvl(cla.cmbnd_max_val,p_new_val)+0.000000001 )
9461 -- and p_old_val < cla.cmbnd_min_val
9462 )
9463 OR
9464 (
9465 p_new_val IS NOT NULL
9466 AND p_old_val IS NOT NULL
9467 AND
9468 (
9469 p_new_val < NVL(cla.cmbnd_min_val,p_new_val)
9470 OR
9471 p_new_val >= decode(nvl(cla.cmbnd_max_val,p_new_val) ,
9472 trunc(nvl(cla.cmbnd_max_val,p_new_val))
9473 ,decode(nvl(cla.cmbnd_min_val,p_new_val), trunc(nvl(cla.cmbnd_min_val,p_new_val)),
9474 nvl(cla.cmbnd_max_val,p_new_val)+1,nvl(cla.cmbnd_max_val,p_new_val)+0.000000001),
9475 nvl(cla.cmbnd_max_val,p_new_val)+0.000000001 )
9476 )
9477 AND p_old_val >= NVL(cla.cmbnd_min_val ,p_old_val)
9478 and p_old_val < decode(nvl(cla.cmbnd_max_val,p_old_val) ,
9479 trunc(nvl(cla.cmbnd_max_val,p_old_val))
9480 ,decode(nvl(cla.cmbnd_min_val,p_old_val), trunc(nvl(cla.cmbnd_min_val,p_old_val)),
9481 nvl(cla.cmbnd_max_val,p_old_val)+1,nvl(cla.cmbnd_max_val,p_old_val)+0.000000001),
9482 nvl(cla.cmbnd_max_val,p_old_val)+0.000000001 )
9483 )
9484 OR
9485 ( p_new_val IS NULL
9486 AND p_old_val IS NULL
9487 )
9488 );
9489
9490 --
9491 --
9492 l_index PLS_INTEGER;
9493 l_not_hash_found BOOLEAN;
9494 --
9495 BEGIN
9496 --
9497 -- hr_utility.set_location ('Entering '||l_package,10);
9498 --
9499 -- Steps to do process
9500 --
9501 -- 1) Try and get value from cache
9502 -- 2) If can get from cache then copy to output record
9503 -- 3) If can't get from cache do db hit and then
9504 -- copy to cache record and then copy to output record.
9505 --
9506 -- Get hashed index value
9507 --
9508 l_index := MOD(p_oipl_id
9509 ,g_hash_key);
9510 --
9511 IF NOT g_cache_oipl_cla_el_rec.EXISTS(l_index) THEN
9512 --
9513 -- Lets store the hash value in this index
9514 --
9515 RAISE NO_DATA_FOUND;
9516 --
9517 ELSE
9518 --
9519 -- If it does exist make sure its the right one
9520 --
9521 IF g_cache_oipl_cla_el_rec(l_index).id <> p_oipl_id THEN
9522 --
9523 -- Loop through the hash using the jump routine to check further
9524 -- indexes
9525 --
9526 l_not_hash_found := FALSE;
9527 --
9528 WHILE NOT l_not_hash_found LOOP
9529 --
9530 l_index := l_index + g_hash_jump;
9531 --
9532 -- Check if the hash index exists, if not we can use it
9533 --
9534 IF NOT g_cache_oipl_cla_el_rec.EXISTS(l_index) THEN
9535 --
9536 -- Lets store the hash value in the index
9537 --
9538 RAISE NO_DATA_FOUND;
9539 --
9540 ELSE
9541 --
9542 -- Make sure the index is the correct one
9543 --
9544 IF g_cache_oipl_cla_el_rec(l_index).id = p_oipl_id THEN
9545 --
9546 -- We have a match so the hashed value has been stored before
9547 --
9548 l_not_hash_found := TRUE;
9549 --
9550 END IF;
9551 --
9552 END IF;
9553 --
9554 END LOOP;
9555 --
9556 END IF;
9557 --
9558 END IF;
9559 --
9560 IF p_old_val IS NOT NULL
9561 AND p_new_val IS NOT NULL THEN
9562 --
9563 RAISE NO_DATA_FOUND;
9564 --
9565 END IF;
9566 p_rec := g_cache_oipl_cla_el_rec(l_index);
9567 --
9568 -- hr_utility.set_location ('Leaving '||l_package,10);
9569 --
9570 EXCEPTION
9571 --
9575 --
9572 WHEN NO_DATA_FOUND THEN
9573 --
9574 -- The record has not been cached yet so lets cache it
9576 OPEN c1;
9577 --
9578 FETCH c1 INTO g_cache_oipl_cla_el_rec(l_index);
9579 IF c1%NOTFOUND THEN
9580 --
9581 if NOT g_cache_oipl_cla_el_rec.EXISTS(l_index) then
9582 g_cache_oipl_cla_el_rec(l_index).id := p_oipl_id;
9583 g_cache_oipl_cla_el_rec(l_index).exist := 'N';
9584 end if;
9585 --
9586 END IF;
9587 --
9588 p_rec := g_cache_oipl_cla_el_rec(l_index);
9589 --
9590 CLOSE c1;
9591 --
9592 END get_comb_oipl_elig;
9593 --
9594 PROCEDURE get_comb_plip_elig(
9595 p_plip_id IN NUMBER
9596 ,p_old_val in number default null
9597 ,p_new_val in number default null
9598 ,p_business_group_id IN NUMBER
9599 ,p_effective_date IN DATE
9600 ,p_rec OUT NOCOPY g_cache_cla_rec_obj) IS
9601 --
9602 l_package VARCHAR2(80) := g_package || '.get_comb_plip_elig';
9603 --
9604 -- Define Cursor
9605 --
9606 CURSOR c1 IS
9607 SELECT p_plip_id
9608 ,'Y'
9609 ,cla.los_fctr_id
9610 ,cla.age_fctr_id
9611 ,cla.cmbnd_min_val
9612 ,cla.cmbnd_max_val
9613 FROM ben_cmbn_age_los_fctr cla
9614 ,ben_elig_cmbn_age_los_prte_f ecp
9615 ,ben_eligy_prfl_f elp
9616 ,ben_prtn_elig_prfl_f cep
9617 ,ben_prtn_elig_f epa
9618 WHERE epa.plip_id = p_plip_id
9619 AND p_effective_date BETWEEN epa.effective_start_date
9620 AND epa.effective_end_date
9621 AND epa.prtn_elig_id = cep.prtn_elig_id
9622 AND p_effective_date BETWEEN cep.effective_start_date
9623 AND cep.effective_end_date
9624 AND cep.eligy_prfl_id = elp.eligy_prfl_id
9625 AND p_effective_date BETWEEN ecp.effective_start_date
9626 AND ecp.effective_end_date
9627 AND ecp.eligy_prfl_id = elp.eligy_prfl_id
9628 AND p_effective_date BETWEEN ecp.effective_start_date
9629 AND ecp.effective_end_date
9630 AND ecp.cmbn_age_los_fctr_id = cla.cmbn_age_los_fctr_id
9631 AND (
9632 (
9633 p_new_val IS NOT NULL
9634 AND p_old_val IS NOT NULL
9635 AND p_new_val >= NVL(cla.cmbnd_min_val ,p_new_val)
9636 and p_new_val < decode(nvl(cla.cmbnd_max_val,p_new_val) ,
9637 trunc(nvl(cla.cmbnd_max_val,p_new_val))
9638 ,decode(nvl(cla.cmbnd_min_val,p_new_val), trunc(nvl(cla.cmbnd_min_val,p_new_val)),
9639 nvl(cla.cmbnd_max_val,p_new_val)+1,nvl(cla.cmbnd_max_val,p_new_val)+0.000000001),
9640 nvl(cla.cmbnd_max_val,p_new_val)+0.000000001 )
9641 -- and p_old_val < cla.cmbnd_min_val
9642 )
9643 OR
9644 (
9645 p_new_val IS NOT NULL
9646 AND p_old_val IS NOT NULL
9647 AND
9648 (
9649 p_new_val < NVL(cla.cmbnd_min_val,p_new_val)
9650 OR
9651 p_new_val >= decode(nvl(cla.cmbnd_max_val,p_new_val) ,
9652 trunc(nvl(cla.cmbnd_max_val,p_new_val))
9653 ,decode(nvl(cla.cmbnd_min_val,p_new_val), trunc(nvl(cla.cmbnd_min_val,p_new_val)),
9654 nvl(cla.cmbnd_max_val,p_new_val)+1,nvl(cla.cmbnd_max_val,p_new_val)+0.000000001),
9655 nvl(cla.cmbnd_max_val,p_new_val)+0.000000001 )
9656 )
9657 AND p_old_val >= NVL(cla.cmbnd_min_val ,p_old_val)
9658 and p_old_val < decode(nvl(cla.cmbnd_max_val,p_old_val) ,
9659 trunc(nvl(cla.cmbnd_max_val,p_old_val))
9660 ,decode(nvl(cla.cmbnd_min_val,p_old_val), trunc(nvl(cla.cmbnd_min_val,p_old_val)),
9661 nvl(cla.cmbnd_max_val,p_old_val)+1,nvl(cla.cmbnd_max_val,p_old_val)+0.000000001),
9662 nvl(cla.cmbnd_max_val,p_old_val)+0.000000001 )
9663 )
9664 OR
9665 ( p_new_val IS NULL
9666 AND p_old_val IS NULL
9667 )
9668 );
9669
9670 --
9671 --
9672 l_index PLS_INTEGER;
9673 l_not_hash_found BOOLEAN;
9674 --
9675 BEGIN
9676 --
9677 -- hr_utility.set_location ('Entering '||l_package,10);
9678 --
9679 -- Steps to do process
9680 --
9681 -- 1) Try and get value from cache
9682 -- 2) If can get from cache then copy to output record
9683 -- 3) If can't get from cache do db hit and then
9684 -- copy to cache record and then copy to output record.
9685 --
9686 -- Get hashed index value
9687 --
9688 l_index := MOD(p_plip_id
9689 ,g_hash_key);
9690 --
9691 IF NOT g_cache_plip_cla_el_rec.EXISTS(l_index) THEN
9692 --
9693 -- Lets store the hash value in this index
9694 --
9695 RAISE NO_DATA_FOUND;
9696 --
9700 --
9697 ELSE
9698 --
9699 -- If it does exist make sure its the right one
9701 IF g_cache_plip_cla_el_rec(l_index).id <> p_plip_id THEN
9702 --
9703 -- Loop through the hash using the jump routine to check further
9704 -- indexes
9705 --
9706 l_not_hash_found := FALSE;
9707 --
9708 WHILE NOT l_not_hash_found LOOP
9709 --
9710 l_index := l_index + g_hash_jump;
9711 --
9712 -- Check if the hash index exists, if not we can use it
9713 --
9714 IF NOT g_cache_plip_cla_el_rec.EXISTS(l_index) THEN
9715 --
9716 -- Lets store the hash value in the index
9717 --
9718 RAISE NO_DATA_FOUND;
9719 --
9720 ELSE
9721 --
9722 -- Make sure the index is the correct one
9723 --
9724 IF g_cache_plip_cla_el_rec(l_index).id = p_plip_id THEN
9725 --
9726 -- We have a match so the hashed value has been stored before
9727 --
9728 l_not_hash_found := TRUE;
9729 --
9730 END IF;
9731 --
9732 END IF;
9733 --
9734 END LOOP;
9735 --
9736 END IF;
9737 --
9738 END IF;
9739 --
9740 IF p_old_val IS NOT NULL
9741 AND p_new_val IS NOT NULL THEN
9742 --
9743 RAISE NO_DATA_FOUND;
9744 --
9745 END IF;
9746 p_rec := g_cache_plip_cla_el_rec(l_index);
9747 --
9748 -- hr_utility.set_location ('Leaving '||l_package,10);
9749 --
9750 EXCEPTION
9751 --
9752 WHEN NO_DATA_FOUND THEN
9753 --
9754 -- The record has not been cached yet so lets cache it
9755 --
9756 OPEN c1;
9757 --
9758 FETCH c1 INTO g_cache_plip_cla_el_rec(l_index);
9759 IF c1%NOTFOUND THEN
9760 --
9761 if NOT g_cache_plip_cla_el_rec.EXISTS(l_index) then
9762 g_cache_plip_cla_el_rec(l_index).id := p_plip_id;
9763 g_cache_plip_cla_el_rec(l_index).exist := 'N';
9764 end if;
9765 --
9766 END IF;
9767 --
9768 p_rec := g_cache_plip_cla_el_rec(l_index);
9769 --
9770 CLOSE c1;
9771 --
9772 END get_comb_plip_elig;
9773 --
9774 PROCEDURE get_comb_ptip_elig(
9775 p_ptip_id IN NUMBER
9776 ,p_old_val in number default null
9777 ,p_new_val in number default null
9778 ,p_business_group_id IN NUMBER
9779 ,p_effective_date IN DATE
9780 ,p_rec OUT NOCOPY g_cache_cla_rec_obj) IS
9781 --
9782 l_package VARCHAR2(80) := g_package || '.get_comb_ptip_elig';
9783 --
9784 -- Define Cursor
9785 --
9786 CURSOR c1 IS
9787 SELECT p_ptip_id
9788 ,'Y'
9789 ,cla.los_fctr_id
9790 ,cla.age_fctr_id
9791 ,cla.cmbnd_min_val
9792 ,cla.cmbnd_max_val
9793 FROM ben_cmbn_age_los_fctr cla
9794 ,ben_elig_cmbn_age_los_prte_f ecp
9795 ,ben_eligy_prfl_f elp
9796 ,ben_prtn_elig_prfl_f cep
9797 ,ben_prtn_elig_f epa
9798 WHERE epa.ptip_id = p_ptip_id
9799 AND p_effective_date BETWEEN epa.effective_start_date
9800 AND epa.effective_end_date
9801 AND epa.prtn_elig_id = cep.prtn_elig_id
9802 AND p_effective_date BETWEEN cep.effective_start_date
9803 AND cep.effective_end_date
9804 AND cep.eligy_prfl_id = elp.eligy_prfl_id
9805 AND p_effective_date BETWEEN ecp.effective_start_date
9806 AND ecp.effective_end_date
9807 AND ecp.eligy_prfl_id = elp.eligy_prfl_id
9808 AND p_effective_date BETWEEN ecp.effective_start_date
9809 AND ecp.effective_end_date
9810 AND ecp.cmbn_age_los_fctr_id = cla.cmbn_age_los_fctr_id
9811 AND (
9812 (
9813 p_new_val IS NOT NULL
9814 AND p_old_val IS NOT NULL
9815 AND p_new_val >= NVL(cla.cmbnd_min_val ,p_new_val)
9816 and p_new_val < decode(nvl(cla.cmbnd_max_val,p_new_val) ,
9817 trunc(nvl(cla.cmbnd_max_val,p_new_val))
9818 ,decode(nvl(cla.cmbnd_min_val,p_new_val), trunc(nvl(cla.cmbnd_min_val,p_new_val)),
9819 nvl(cla.cmbnd_max_val,p_new_val)+1,nvl(cla.cmbnd_max_val,p_new_val)+0.000000001),
9820 nvl(cla.cmbnd_max_val,p_new_val)+0.000000001 )
9821 -- and p_old_val < cla.cmbnd_min_val
9822 )
9823 OR
9824 (
9825 p_new_val IS NOT NULL
9826 AND p_old_val IS NOT NULL
9827 AND
9828 (
9829 p_new_val < NVL(cla.cmbnd_min_val,p_new_val)
9830 OR
9831 p_new_val >= decode(nvl(cla.cmbnd_max_val,p_new_val) ,
9832 trunc(nvl(cla.cmbnd_max_val,p_new_val))
9836 )
9833 ,decode(nvl(cla.cmbnd_min_val,p_new_val), trunc(nvl(cla.cmbnd_min_val,p_new_val)),
9834 nvl(cla.cmbnd_max_val,p_new_val)+1,nvl(cla.cmbnd_max_val,p_new_val)+0.000000001),
9835 nvl(cla.cmbnd_max_val,p_new_val)+0.000000001 )
9837 AND p_old_val >= NVL(cla.cmbnd_min_val ,p_old_val)
9838 and p_old_val < decode(nvl(cla.cmbnd_max_val,p_old_val) ,
9839 trunc(nvl(cla.cmbnd_max_val,p_old_val))
9840 ,decode(nvl(cla.cmbnd_min_val,p_old_val), trunc(nvl(cla.cmbnd_min_val,p_old_val)),
9841 nvl(cla.cmbnd_max_val,p_old_val)+1,nvl(cla.cmbnd_max_val,p_old_val)+0.000000001),
9842 nvl(cla.cmbnd_max_val,p_old_val)+0.000000001 )
9843 )
9844 OR
9845 ( p_new_val IS NULL
9846 AND p_old_val IS NULL
9847 )
9848 );
9849
9850 --
9851 --
9852 l_index PLS_INTEGER;
9853 l_not_hash_found BOOLEAN;
9854 --
9855 BEGIN
9856 --
9857 -- hr_utility.set_location ('Entering '||l_package,10);
9858 --
9859 -- Steps to do process
9860 --
9861 -- 1) Try and get value from cache
9862 -- 2) If can get from cache then copy to output record
9863 -- 3) If can't get from cache do db hit and then
9864 -- copy to cache record and then copy to output record.
9865 --
9866 -- Get hashed index value
9867 --
9868 l_index := MOD(p_ptip_id
9869 ,g_hash_key);
9870 --
9871 IF NOT g_cache_ptip_cla_el_rec.EXISTS(l_index) THEN
9872 --
9873 -- Lets store the hash value in this index
9874 --
9875 RAISE NO_DATA_FOUND;
9876 --
9877 ELSE
9878 --
9879 -- If it does exist make sure its the right one
9880 --
9881 IF g_cache_ptip_cla_el_rec(l_index).id <> p_ptip_id THEN
9882 --
9883 -- Loop through the hash using the jump routine to check further
9884 -- indexes
9885 --
9886 l_not_hash_found := FALSE;
9887 --
9888 WHILE NOT l_not_hash_found LOOP
9889 --
9890 l_index := l_index + g_hash_jump;
9891 --
9892 -- Check if the hash index exists, if not we can use it
9893 --
9894 IF NOT g_cache_ptip_cla_el_rec.EXISTS(l_index) THEN
9895 --
9896 -- Lets store the hash value in the index
9897 --
9898 RAISE NO_DATA_FOUND;
9899 --
9900 ELSE
9901 --
9902 -- Make sure the index is the correct one
9903 --
9904 IF g_cache_ptip_cla_el_rec(l_index).id = p_ptip_id THEN
9905 --
9906 -- We have a match so the hashed value has been stored before
9907 --
9908 l_not_hash_found := TRUE;
9909 --
9910 END IF;
9911 --
9912 END IF;
9913 --
9914 END LOOP;
9915 --
9916 END IF;
9917 --
9918 END IF;
9919 --
9920 IF p_old_val IS NOT NULL
9921 AND p_new_val IS NOT NULL THEN
9922 --
9923 RAISE NO_DATA_FOUND;
9924 --
9925 END IF;
9926 p_rec := g_cache_ptip_cla_el_rec(l_index);
9927 --
9928 -- hr_utility.set_location ('Leaving '||l_package,10);
9929 --
9930 EXCEPTION
9931 --
9932 WHEN NO_DATA_FOUND THEN
9933 --
9934 -- The record has not been cached yet so lets cache it
9935 --
9936 OPEN c1;
9937 --
9938 FETCH c1 INTO g_cache_ptip_cla_el_rec(l_index);
9939 IF c1%NOTFOUND THEN
9940 --
9941 if NOT g_cache_ptip_cla_el_rec.EXISTS(l_index) then
9942 g_cache_ptip_cla_el_rec(l_index).id := p_ptip_id;
9943 g_cache_ptip_cla_el_rec(l_index).exist := 'N';
9944 end if;
9945 --
9946 END IF;
9947 --
9948 p_rec := g_cache_ptip_cla_el_rec(l_index);
9949 --
9950 CLOSE c1;
9951 --
9952 END get_comb_ptip_elig;
9953 --
9954 PROCEDURE get_comb_elig(
9955 p_pgm_id IN NUMBER
9956 ,p_pl_id IN NUMBER
9957 ,p_oipl_id IN NUMBER
9958 ,p_plip_id IN NUMBER
9959 ,p_ptip_id IN NUMBER
9960 ,p_old_val in number default null
9961 ,p_new_val in number default null
9962 ,p_business_group_id IN NUMBER
9963 ,p_effective_date IN DATE
9964 ,p_rec OUT NOCOPY g_cache_cla_rec_obj) IS
9965 --
9966 l_package VARCHAR2(80) := g_package || '.get_comb_elig';
9967 --
9968 BEGIN
9969 --
9970 -- hr_utility.set_location ('Entering '||l_package,10);
9971 --
9972 -- Derive which data type we are dealing with
9973 --
9974 IF p_pgm_id IS NOT NULL THEN
9975 --
9976 get_comb_pgm_elig(p_pgm_id=> p_pgm_id
9977 ,p_old_val => p_old_val
9978 ,p_new_val => p_new_val
9982 --
9979 ,p_business_group_id => p_business_group_id
9980 ,p_effective_date => p_effective_date
9981 ,p_rec => p_rec);
9983 ELSIF p_pl_id IS NOT NULL THEN
9984 --
9985 get_comb_pl_elig(p_pl_id=> p_pl_id
9986 ,p_old_val => p_old_val
9987 ,p_new_val => p_new_val
9988 ,p_business_group_id => p_business_group_id
9989 ,p_effective_date => p_effective_date
9990 ,p_rec => p_rec);
9991 --
9992 ELSIF p_oipl_id IS NOT NULL THEN
9993 --
9994 get_comb_oipl_elig(p_oipl_id=> p_oipl_id
9995 ,p_old_val => p_old_val
9996 ,p_new_val => p_new_val
9997 ,p_business_group_id => p_business_group_id
9998 ,p_effective_date => p_effective_date
9999 ,p_rec => p_rec);
10000 --
10001 ELSIF p_plip_id IS NOT NULL THEN
10002 --
10003 get_comb_plip_elig(p_plip_id=> p_plip_id
10004 ,p_old_val => p_old_val
10005 ,p_new_val => p_new_val
10006 ,p_business_group_id => p_business_group_id
10007 ,p_effective_date => p_effective_date
10008 ,p_rec => p_rec);
10009 --
10010 ELSIF p_ptip_id IS NOT NULL THEN
10011 --
10012 get_comb_ptip_elig(p_ptip_id=> p_ptip_id
10013 ,p_old_val => p_old_val
10014 ,p_new_val => p_new_val
10015 ,p_business_group_id => p_business_group_id
10016 ,p_effective_date => p_effective_date
10017 ,p_rec => p_rec);
10018 --
10019 END IF;
10020 --
10021 -- hr_utility.set_location ('Leaving '||l_package,10);
10022 --
10023 END get_comb_elig;
10024 --
10025 PROCEDURE get_comb_pgm_rate(
10026 p_pgm_id IN NUMBER
10027 ,p_old_val IN NUMBER DEFAULT NULL
10028 ,p_new_val IN NUMBER DEFAULT NULL
10029 ,p_business_group_id IN NUMBER
10030 ,p_effective_date IN DATE
10031 ,p_rec OUT NOCOPY g_cache_cla_rec_obj) IS
10032 --
10033 l_package VARCHAR2(80) := g_package || '.get_comb_pgm_rate';
10034 l_old_val_1 NUMBER := p_old_val + 1;
10035 l_new_val_1 NUMBER := p_new_val + 1;
10036 --
10037 -- Define Cursor
10038 --
10039 CURSOR c1 IS
10040 SELECT p_pgm_id
10041 ,'Y'
10042 ,cla.los_fctr_id
10043 ,cla.age_fctr_id
10044 ,cla.cmbnd_min_val
10045 ,cla.cmbnd_max_val
10046 FROM ben_cmbn_age_los_fctr cla
10047 ,ben_cmbn_age_los_rt_f cmr
10048 ,ben_vrbl_rt_prfl_f vpf
10049 ,ben_acty_vrbl_rt_f avr
10050 ,ben_acty_base_rt_f abr
10051 WHERE abr.pgm_id = p_pgm_id
10052 AND p_effective_date BETWEEN abr.effective_start_date
10053 AND abr.effective_end_date
10054 AND abr.acty_base_rt_id = avr.acty_base_rt_id
10055 AND p_effective_date BETWEEN avr.effective_start_date
10056 AND avr.effective_end_date
10057 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
10058 AND p_effective_date BETWEEN vpf.effective_start_date
10059 AND vpf.effective_end_date
10060 AND vpf.vrbl_rt_prfl_id = cmr.vrbl_rt_prfl_id
10061 AND p_effective_date BETWEEN cmr.effective_start_date
10062 AND cmr.effective_end_date
10063 AND cmr.cmbn_age_los_fctr_id = cla.cmbn_age_los_fctr_id
10064 AND (
10065 (
10066 p_new_val IS NOT NULL
10067 AND p_old_val IS NOT NULL
10068 AND p_new_val >= NVL(cla.cmbnd_min_val
10069 ,p_new_val)
10070 AND p_new_val < decode(nvl(cla.cmbnd_max_val,p_new_val) ,
10071 trunc(nvl(cla.cmbnd_max_val,p_new_val))
10072 ,decode(nvl(cla.cmbnd_min_val,p_new_val), trunc(nvl(cla.cmbnd_min_val,p_new_val)),
10073 nvl(cla.cmbnd_max_val,p_new_val)+1,nvl(cla.cmbnd_max_val,p_new_val)+0.000000001),
10074 nvl(cla.cmbnd_max_val,p_new_val)+0.000000001 ) )
10075 -- ceil( NVL(cla.cmbnd_max_val
10076 -- ,p_new_val) + 0.001 ))
10077 OR (
10078 p_new_val IS NOT NULL
10079 AND p_old_val IS NOT NULL
10080 AND (
10081 p_new_val < NVL(cla.cmbnd_min_val
10082 ,p_new_val)
10083 OR p_new_val >= decode(nvl(cla.cmbnd_max_val,p_new_val) ,
10084 trunc(nvl(cla.cmbnd_max_val,p_new_val))
10085 ,decode(nvl(cla.cmbnd_min_val,p_new_val), trunc(nvl(cla.cmbnd_min_val,p_new_val)),
10086 nvl(cla.cmbnd_max_val,p_new_val)+1,nvl(cla.cmbnd_max_val,p_new_val)+0.000000001),
10087 nvl(cla.cmbnd_max_val,p_new_val)+0.000000001 ) )
10088 -- ceil( NVL(cla.cmbnd_max_val
10089 -- , p_new_val)) + 0.001 )
10090 AND p_old_val >= NVL(cla.cmbnd_min_val
10091 ,p_old_val)
10095 nvl(cla.cmbnd_max_val,p_old_val)+1,nvl(cla.cmbnd_max_val,p_old_val)+0.000000001),
10092 AND p_old_val < decode(nvl(cla.cmbnd_max_val,p_old_val) ,
10093 trunc(nvl(cla.cmbnd_max_val,p_old_val))
10094 ,decode(nvl(cla.cmbnd_min_val,p_old_val), trunc(nvl(cla.cmbnd_min_val,p_old_val)),
10096 nvl(cla.cmbnd_max_val,p_old_val)+0.000000001 ) )
10097 -- ceil( NVL(cla.cmbnd_max_val
10098 -- ,p_old_val)) + 0.001 )
10099 OR ( p_new_val IS NULL
10100 AND p_old_val IS NULL));
10101 -- PERFNEW. SPLIT TO 2 CURSORS C1 and C2.
10102 --UNION ALL
10103 CURSOR c2 IS
10104 SELECT p_pgm_id
10105 ,'Y'
10106 ,cla.los_fctr_id
10107 ,cla.age_fctr_id
10108 ,cla.cmbnd_min_val
10109 ,cla.cmbnd_max_val
10110 FROM ben_cmbn_age_los_fctr cla
10111 --,ben_cmbn_age_los_rt_f cmr
10112 ,ben_elig_cmbn_age_los_prte_f ecp
10113 ,ben_eligy_prfl_f elp
10114 ,ben_vrbl_rt_elig_prfl_f vep
10115 ,ben_vrbl_rt_prfl_f vpf
10116 ,ben_acty_vrbl_rt_f avr
10117 ,ben_acty_base_rt_f abr
10118 WHERE abr.pgm_id = p_pgm_id
10119 AND p_effective_date BETWEEN abr.effective_start_date
10120 AND abr.effective_end_date
10121 AND abr.acty_base_rt_id = avr.acty_base_rt_id
10122 AND p_effective_date BETWEEN avr.effective_start_date
10123 AND avr.effective_end_date
10124 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
10125 AND p_effective_date BETWEEN vpf.effective_start_date
10126 AND vpf.effective_end_date
10127 -- AND vpf.vrbl_rt_prfl_id = ecp.vrbl_rt_prfl_id
10128 AND vpf.vrbl_rt_prfl_id = vep.vrbl_rt_prfl_id
10129 AND p_effective_date BETWEEN vep.effective_start_date
10130 AND vep.effective_end_date
10131 AND vep.eligy_prfl_id = elp.eligy_prfl_id
10132 AND p_effective_date BETWEEN elp.effective_start_date
10133 AND elp.effective_end_date
10134 AND ecp.eligy_prfl_id = elp.eligy_prfl_id
10135 AND p_effective_date BETWEEN ecp.effective_start_date
10136 AND ecp.effective_end_date
10137 AND ecp.cmbn_age_los_fctr_id = cla.cmbn_age_los_fctr_id
10138 AND (
10139 (
10140 p_new_val IS NOT NULL
10141 AND p_old_val IS NOT NULL
10142 AND p_new_val >= NVL(cla.cmbnd_min_val
10143 ,p_new_val)
10144 AND p_new_val < decode(nvl(cla.cmbnd_max_val,p_new_val) ,
10145 trunc(nvl(cla.cmbnd_max_val,p_new_val))
10146 ,decode(nvl(cla.cmbnd_min_val,p_new_val), trunc(nvl(cla.cmbnd_min_val,p_new_val)),
10147 nvl(cla.cmbnd_max_val,p_new_val)+1,nvl(cla.cmbnd_max_val,p_new_val)+0.000000001),
10148 nvl(cla.cmbnd_max_val,p_new_val)+0.000000001 ) )
10149 -- ceil( NVL(cla.cmbnd_max_val
10150 -- ,p_new_val) + 0.001 ))
10151 OR (
10152 p_new_val IS NOT NULL
10153 AND p_old_val IS NOT NULL
10154 AND (
10155 p_new_val < NVL(cla.cmbnd_min_val
10156 ,p_new_val)
10157 OR p_new_val >= decode(nvl(cla.cmbnd_max_val,p_new_val) ,
10158 trunc(nvl(cla.cmbnd_max_val,p_new_val))
10159 ,decode(nvl(cla.cmbnd_min_val,p_new_val), trunc(nvl(cla.cmbnd_min_val,p_new_val)),
10160 nvl(cla.cmbnd_max_val,p_new_val)+1,nvl(cla.cmbnd_max_val,p_new_val)+0.000000001),
10161 nvl(cla.cmbnd_max_val,p_new_val)+0.000000001 ) )
10162 -- ceil( NVL(cla.cmbnd_max_val
10163 -- , p_new_val)) + 0.001 )
10164 AND p_old_val >= NVL(cla.cmbnd_min_val
10165 ,p_old_val)
10166 AND p_old_val < decode(nvl(cla.cmbnd_max_val,p_old_val) ,
10167 trunc(nvl(cla.cmbnd_max_val,p_old_val))
10168 ,decode(nvl(cla.cmbnd_min_val,p_old_val), trunc(nvl(cla.cmbnd_min_val,p_old_val)),
10169 nvl(cla.cmbnd_max_val,p_old_val)+1,nvl(cla.cmbnd_max_val,p_old_val)+0.000000001),
10170 nvl(cla.cmbnd_max_val,p_old_val)+0.000000001 ) )
10171 -- ceil( NVL(cla.cmbnd_max_val
10172 -- ,p_old_val)) + 0.001 )
10173 OR ( p_new_val IS NULL
10174 AND p_old_val IS NULL));
10175 --
10176 --
10177 l_index PLS_INTEGER;
10178 l_not_hash_found BOOLEAN;
10179 l_c2notfound BOOLEAN;
10180 --
10181 BEGIN
10182 --
10183 -- hr_utility.set_location ('Entering '||l_package,10);
10184 --
10185 -- Steps to do process
10186 --
10187 -- 1) Try and get value from cache
10188 -- 2) If can get from cache then copy to output record
10189 -- 3) If can't get from cache do db hit and then
10193 --
10190 -- copy to cache record and then copy to output record.
10191 --
10192 -- Get hashed index value
10194 l_index := MOD(p_pgm_id
10195 ,g_hash_key);
10196 --
10197 IF NOT g_cache_pgm_cla_rt_rec.EXISTS(l_index) THEN
10198 --
10199 -- Lets store the hash value in this index
10200 --
10201 RAISE NO_DATA_FOUND;
10202 --
10203 ELSE
10204 --
10205 -- If it does exist make sure its the right one
10206 --
10207 IF g_cache_pgm_cla_rt_rec(l_index).id <> p_pgm_id THEN
10208 --
10209 -- Loop through the hash using the jump routine to check further
10210 -- indexes
10211 --
10212 l_not_hash_found := FALSE;
10213 --
10214 WHILE NOT l_not_hash_found LOOP
10215 --
10216 l_index := l_index + g_hash_jump;
10217 --
10218 -- Check if the hash index exists, if not we can use it
10219 --
10220 IF NOT g_cache_pgm_cla_rt_rec.EXISTS(l_index) THEN
10221 --
10222 -- Lets store the hash value in the index
10223 --
10224 RAISE NO_DATA_FOUND;
10225 --
10226 ELSE
10227 --
10228 -- Make sure the index is the correct one
10229 --
10230 IF g_cache_pgm_cla_rt_rec(l_index).id = p_pgm_id THEN
10231 --
10232 -- We have a match so the hashed value has been stored before
10233 --
10234 l_not_hash_found := TRUE;
10235 --
10236 END IF;
10237 --
10238 END IF;
10239 --
10240 END LOOP;
10241 --
10242 END IF;
10243 --
10244 END IF;
10245 --
10246 -- If p_old_val and p_new_val is set this means we are trying to retrieve
10247 -- the correct rate for the calculated value.
10248 -- Previously we just cached the first rate we
10249 -- found since we needed the determination code, the correct age,los code,etc
10250 -- By killing the cache and forcing the value to be removed we cache the
10251 -- correct rate profile for the case we need.
10252 --
10253 IF p_old_val IS NOT NULL
10254 AND p_new_val IS NOT NULL THEN
10255 --
10256 RAISE NO_DATA_FOUND;
10257 --
10258 END IF;
10259 --
10260 p_rec := g_cache_pgm_cla_rt_rec(l_index);
10261 --
10262 -- hr_utility.set_location ('Leaving '||l_package,10);
10263 --
10264 EXCEPTION
10265 --
10266 WHEN NO_DATA_FOUND THEN
10267 --
10268 -- The record has not been cached yet so lets cache it
10269 --
10270 OPEN c1;
10271 --
10272 FETCH c1 INTO g_cache_pgm_cla_rt_rec(l_index);
10273 -- PERFNEW
10274 IF c1%NOTFOUND THEN
10275 --
10276 l_c2notfound := false;
10277 OPEN c2;
10278 FETCH c2 INTO g_cache_pgm_cla_rt_rec(l_index);
10279 IF c2%NOTFOUND THEN
10280 --
10281 l_c2notfound := true;
10282 --
10283 END IF;
10284 CLOSE c2;
10285 --
10286 END IF;
10287 -- PERFNEW
10288 IF p_old_val IS NULL
10289 AND p_new_val IS NULL THEN
10290 --
10291 IF c1%NOTFOUND and l_c2notfound THEN -- PERFNEW
10292 --
10293 if NOT g_cache_pgm_cla_rt_rec.EXISTS(l_index) then
10294 g_cache_pgm_cla_rt_rec(l_index).id := p_pgm_id;
10295 g_cache_pgm_cla_rt_rec(l_index).exist := 'N';
10296 end if;
10297 --
10298 END IF;
10299 --
10300 END IF;
10301 --
10302 p_rec := g_cache_pgm_cla_rt_rec(l_index);
10303 --
10304 CLOSE c1;
10305 --
10306 END get_comb_pgm_rate;
10307 --
10308 PROCEDURE get_comb_pl_rate(
10309 p_pl_id IN NUMBER
10310 ,p_old_val IN NUMBER DEFAULT NULL
10311 ,p_new_val IN NUMBER DEFAULT NULL
10312 ,p_business_group_id IN NUMBER
10313 ,p_effective_date IN DATE
10314 ,p_rec OUT NOCOPY g_cache_cla_rec_obj) IS
10315 --
10316 l_package VARCHAR2(80) := g_package || '.get_comb_pl_rate';
10317 l_old_val_1 NUMBER := p_old_val + 1;
10318 l_new_val_1 NUMBER := p_new_val + 1;
10319 --
10320 -- Define Cursor
10321 --
10322 CURSOR c1 IS
10323 SELECT p_pl_id
10324 ,'Y'
10325 ,cla.los_fctr_id
10326 ,cla.age_fctr_id
10327 ,cla.cmbnd_min_val
10328 ,cla.cmbnd_max_val
10329 FROM ben_cmbn_age_los_fctr cla
10330 ,ben_cmbn_age_los_rt_f cmr
10331 ,ben_vrbl_rt_prfl_f vpf
10332 ,ben_acty_vrbl_rt_f avr
10333 ,ben_acty_base_rt_f abr
10334 WHERE abr.pl_id = p_pl_id
10335 AND p_effective_date BETWEEN abr.effective_start_date
10336 AND abr.effective_end_date
10337 AND abr.acty_base_rt_id = avr.acty_base_rt_id
10338 AND p_effective_date BETWEEN avr.effective_start_date
10342 AND vpf.effective_end_date
10339 AND avr.effective_end_date
10340 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
10341 AND p_effective_date BETWEEN vpf.effective_start_date
10343 AND vpf.vrbl_rt_prfl_id = cmr.vrbl_rt_prfl_id
10344 AND p_effective_date BETWEEN cmr.effective_start_date
10345 AND cmr.effective_end_date
10346 AND cmr.cmbn_age_los_fctr_id = cla.cmbn_age_los_fctr_id
10347 AND (
10348 (
10349 p_new_val IS NOT NULL
10350 AND p_old_val IS NOT NULL
10351 AND p_new_val >= NVL(cla.cmbnd_min_val
10352 ,p_new_val)
10353 AND p_new_val < decode(nvl(cla.cmbnd_max_val,p_new_val) ,
10354 trunc(nvl(cla.cmbnd_max_val,p_new_val))
10355 ,decode(nvl(cla.cmbnd_min_val,p_new_val), trunc(nvl(cla.cmbnd_min_val,p_new_val)),
10356 nvl(cla.cmbnd_max_val,p_new_val)+1,nvl(cla.cmbnd_max_val,p_new_val)+0.000000001),
10357 nvl(cla.cmbnd_max_val,p_new_val)+0.000000001 ) )
10358 -- ceil( NVL(cla.cmbnd_max_val
10359 -- ,p_new_val) + 0.001 ))
10360 OR (
10361 p_new_val IS NOT NULL
10362 AND p_old_val IS NOT NULL
10363 AND (
10364 p_new_val < NVL(cla.cmbnd_min_val
10365 ,p_new_val)
10366 OR p_new_val >= decode(nvl(cla.cmbnd_max_val,p_new_val) ,
10367 trunc(nvl(cla.cmbnd_max_val,p_new_val))
10368 ,decode(nvl(cla.cmbnd_min_val,p_new_val), trunc(nvl(cla.cmbnd_min_val,p_new_val)),
10369 nvl(cla.cmbnd_max_val,p_new_val)+1,nvl(cla.cmbnd_max_val,p_new_val)+0.000000001),
10370 nvl(cla.cmbnd_max_val,p_new_val)+0.000000001 ) )
10371 -- ceil( NVL(cla.cmbnd_max_val
10372 -- ,p_new_val )) + 0.001 )
10373 AND p_old_val >= NVL(cla.cmbnd_min_val
10374 ,p_old_val)
10375 AND p_old_val < decode(nvl(cla.cmbnd_max_val,p_old_val) ,
10376 trunc(nvl(cla.cmbnd_max_val,p_old_val))
10377 ,decode(nvl(cla.cmbnd_min_val,p_old_val), trunc(nvl(cla.cmbnd_min_val,p_old_val)),
10378 nvl(cla.cmbnd_max_val,p_old_val)+1,nvl(cla.cmbnd_max_val,p_old_val)+0.000000001),
10379 nvl(cla.cmbnd_max_val,p_old_val)+0.000000001 ) )
10380 -- ceil( NVL(cla.cmbnd_max_val
10381 -- ,p_old_val)) + 0.001 )
10382 OR ( p_new_val IS NULL
10383 AND p_old_val IS NULL));
10384 -- PERFNEW. SPLIT TO 2 CURSORS C1 and C2.
10385 --UNION ALL
10386 CURSOR c2 IS
10387 SELECT p_pl_id
10388 ,'Y'
10389 ,cla.los_fctr_id
10390 ,cla.age_fctr_id
10391 ,cla.cmbnd_min_val
10392 ,cla.cmbnd_max_val
10393 FROM ben_cmbn_age_los_fctr cla
10394 --,ben_cmbn_age_los_rt_f cmr
10395 ,ben_elig_cmbn_age_los_prte_f ecp
10396 ,ben_eligy_prfl_f elp
10397 ,ben_vrbl_rt_elig_prfl_f vep
10398 ,ben_vrbl_rt_prfl_f vpf
10399 ,ben_acty_vrbl_rt_f avr
10400 ,ben_acty_base_rt_f abr
10401 WHERE abr.pl_id = p_pl_id
10402 AND p_effective_date BETWEEN abr.effective_start_date
10403 AND abr.effective_end_date
10404 AND abr.acty_base_rt_id = avr.acty_base_rt_id
10405 AND p_effective_date BETWEEN avr.effective_start_date
10406 AND avr.effective_end_date
10407 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
10408 AND p_effective_date BETWEEN vpf.effective_start_date
10409 AND vpf.effective_end_date
10410 -- AND vpf.vrbl_rt_prfl_id = ecp.vrbl_rt_prfl_id
10411 AND vpf.vrbl_rt_prfl_id = vep.vrbl_rt_prfl_id
10412 AND p_effective_date BETWEEN vep.effective_start_date
10413 AND vep.effective_end_date
10414 AND vep.eligy_prfl_id = elp.eligy_prfl_id
10415 AND p_effective_date BETWEEN elp.effective_start_date
10416 AND elp.effective_end_date
10417 AND ecp.eligy_prfl_id = elp.eligy_prfl_id
10418 AND p_effective_date BETWEEN ecp.effective_start_date
10419 AND ecp.effective_end_date
10420 AND ecp.cmbn_age_los_fctr_id = cla.cmbn_age_los_fctr_id
10421 AND (
10422 (
10423 p_new_val IS NOT NULL
10424 AND p_old_val IS NOT NULL
10425 AND p_new_val >= NVL(cla.cmbnd_min_val
10426 ,p_new_val)
10427 AND p_new_val < decode(nvl(cla.cmbnd_max_val,p_new_val) ,
10428 trunc(nvl(cla.cmbnd_max_val,p_new_val))
10429 ,decode(nvl(cla.cmbnd_min_val,p_new_val), trunc(nvl(cla.cmbnd_min_val,p_new_val)),
10430 nvl(cla.cmbnd_max_val,p_new_val)+1,nvl(cla.cmbnd_max_val,p_new_val)+0.000000001),
10434 OR (
10431 nvl(cla.cmbnd_max_val,p_new_val)+0.000000001 ) )
10432 -- ceil( NVL(cla.cmbnd_max_val
10433 -- ,p_new_val) + 0.001 ))
10435 p_new_val IS NOT NULL
10436 AND p_old_val IS NOT NULL
10437 AND (
10438 p_new_val < NVL(cla.cmbnd_min_val
10439 ,p_new_val)
10440 OR p_new_val >= decode(nvl(cla.cmbnd_max_val,p_new_val) ,
10441 trunc(nvl(cla.cmbnd_max_val,p_new_val))
10442 ,decode(nvl(cla.cmbnd_min_val,p_new_val), trunc(nvl(cla.cmbnd_min_val,p_new_val)),
10443 nvl(cla.cmbnd_max_val,p_new_val)+1,nvl(cla.cmbnd_max_val,p_new_val)+0.000000001),
10444 nvl(cla.cmbnd_max_val,p_new_val)+0.000000001 ) )
10445 -- ceil( NVL(cla.cmbnd_max_val
10446 -- ,p_new_val )) + 0.001 )
10447 AND p_old_val >= NVL(cla.cmbnd_min_val
10448 ,p_old_val)
10449 AND p_old_val < decode(nvl(cla.cmbnd_max_val,p_old_val) ,
10450 trunc(nvl(cla.cmbnd_max_val,p_old_val))
10451 ,decode(nvl(cla.cmbnd_min_val,p_old_val), trunc(nvl(cla.cmbnd_min_val,p_old_val)),
10452 nvl(cla.cmbnd_max_val,p_old_val)+1,nvl(cla.cmbnd_max_val,p_old_val)+0.000000001),
10453 nvl(cla.cmbnd_max_val,p_old_val)+0.000000001 ) )
10454 -- ceil( NVL(cla.cmbnd_max_val
10455 -- ,p_old_val)) + 0.001 )
10456 OR ( p_new_val IS NULL
10457 AND p_old_val IS NULL));
10458 --
10459 --
10460 l_index PLS_INTEGER;
10461 l_not_hash_found BOOLEAN;
10462 l_c2notfound BOOLEAN;
10463 --
10464 BEGIN
10465 --
10466 -- hr_utility.set_location ('Entering '||l_package,10);
10467 --
10468 -- Steps to do process
10469 --
10470 -- 1) Try and get value from cache
10471 -- 2) If can get from cache then copy to output record
10472 -- 3) If can't get from cache do db hit and then
10473 -- copy to cache record and then copy to output record.
10474 --
10475 -- Get hashed index value
10476 --
10477 l_index := MOD(p_pl_id
10478 ,g_hash_key);
10479 --
10480 IF NOT g_cache_pl_cla_rt_rec.EXISTS(l_index) THEN
10481 --
10482 -- Lets store the hash value in this index
10483 --
10484 RAISE NO_DATA_FOUND;
10485 --
10486 ELSE
10487 --
10488 -- If it does exist make sure its the right one
10489 --
10490 IF g_cache_pl_cla_rt_rec(l_index).id <> p_pl_id THEN
10491 --
10492 -- Loop through the hash using the jump routine to check further
10493 -- indexes
10494 --
10495 l_not_hash_found := FALSE;
10496 --
10497 WHILE NOT l_not_hash_found LOOP
10498 --
10499 l_index := l_index + g_hash_jump;
10500 --
10501 -- Check if the hash index exists, if not we can use it
10502 --
10503 IF NOT g_cache_pl_cla_rt_rec.EXISTS(l_index) THEN
10504 --
10505 -- Lets store the hash value in the index
10506 --
10507 RAISE NO_DATA_FOUND;
10508 --
10509 ELSE
10510 --
10511 -- Make sure the index is the correct one
10512 --
10513 IF g_cache_pl_cla_rt_rec(l_index).id = p_pl_id THEN
10514 --
10515 -- We have a match so the hashed value has been stored before
10516 --
10517 l_not_hash_found := TRUE;
10518 --
10519 END IF;
10520 --
10521 END IF;
10522 --
10523 END LOOP;
10524 --
10525 END IF;
10526 --
10527 END IF;
10528 --
10529 -- If p_old_val and p_new_val is set this means we are trying to retrieve
10530 -- the correct rate for the calculated value.
10531 -- Previously we just cached the first rate we
10532 -- found since we needed the determination code, the correct age,los code,etc
10533 -- By killing the cache and forcing the value to be removed we cache the
10534 -- correct rate profile for the case we need.
10535 --
10536 IF p_old_val IS NOT NULL
10537 AND p_new_val IS NOT NULL THEN
10538 --
10539 RAISE NO_DATA_FOUND;
10540 --
10541 END IF;
10542 --
10543 p_rec := g_cache_pl_cla_rt_rec(l_index);
10544 --
10545 -- hr_utility.set_location ('Leaving '||l_package,10);
10546 --
10547 EXCEPTION
10548 --
10549 WHEN NO_DATA_FOUND THEN
10550 --
10551 -- The record has not been cached yet so lets cache it
10552 --
10553 OPEN c1;
10554 --
10555 FETCH c1 INTO g_cache_pl_cla_rt_rec(l_index);
10556 -- PERFNEW
10557 IF c1%NOTFOUND THEN
10558 --
10559 l_c2notfound := false;
10560 OPEN c2;
10561 FETCH c2 INTO g_cache_pl_cla_rt_rec(l_index);
10562 IF c2%NOTFOUND THEN
10563 --
10564 l_c2notfound := true;
10568 --
10565 --
10566 END IF;
10567 CLOSE c2;
10569 END IF;
10570 -- PERFNEW
10571 IF p_old_val IS NULL
10572 AND p_new_val IS NULL THEN
10573 --
10574 IF c1%NOTFOUND and l_c2notfound THEN -- PERFNEW
10575 --
10576 if NOT g_cache_pl_cla_rt_rec.EXISTS(l_index) then
10577 g_cache_pl_cla_rt_rec(l_index).id := p_pl_id;
10578 g_cache_pl_cla_rt_rec(l_index).exist := 'N';
10579 end if;
10580 --
10581 END IF;
10582 --
10583 END IF;
10584 --
10585 p_rec := g_cache_pl_cla_rt_rec(l_index);
10586 --
10587 CLOSE c1;
10588 --
10589 END get_comb_pl_rate;
10590 --
10591 PROCEDURE get_comb_oipl_rate(
10592 p_oipl_id IN NUMBER
10593 ,p_old_val IN NUMBER DEFAULT NULL
10594 ,p_new_val IN NUMBER DEFAULT NULL
10595 ,p_business_group_id IN NUMBER
10596 ,p_effective_date IN DATE
10597 ,p_rec OUT NOCOPY g_cache_cla_rec_obj) IS
10598 --
10599 l_package VARCHAR2(80) := g_package || '.get_comb_oipl_rate';
10600 l_old_val_1 NUMBER := p_old_val + 1;
10601 l_new_val_1 NUMBER := p_new_val + 1;
10602 --
10603 l_opt_id NUMBER;
10604 --
10605 -- Define Cursor
10606 --
10607 CURSOR c1 IS
10608 SELECT p_oipl_id
10609 ,'Y'
10610 ,cla.los_fctr_id
10611 ,cla.age_fctr_id
10612 ,cla.cmbnd_min_val
10613 ,cla.cmbnd_max_val
10614 FROM ben_cmbn_age_los_fctr cla
10615 ,ben_cmbn_age_los_rt_f cmr
10616 ,ben_vrbl_rt_prfl_f vpf
10617 ,ben_acty_vrbl_rt_f avr
10618 ,ben_acty_base_rt_f abr
10619 WHERE ( abr.oipl_id = p_oipl_id
10620 --
10621 --START Option level Rates Enhancements
10622 or ( abr.opt_id = l_opt_id and
10623 not exists (select null from ben_acty_base_rt_f abr1
10624 where abr1.oipl_id = p_oipl_id )))
10625 --END Option level Rates Enhancements
10626 --
10627 AND p_effective_date BETWEEN abr.effective_start_date
10628 AND abr.effective_end_date
10629 AND abr.acty_base_rt_id = avr.acty_base_rt_id
10630 AND p_effective_date BETWEEN avr.effective_start_date
10631 AND avr.effective_end_date
10632 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
10633 AND p_effective_date BETWEEN vpf.effective_start_date
10634 AND vpf.effective_end_date
10635 AND vpf.vrbl_rt_prfl_id = cmr.vrbl_rt_prfl_id
10636 AND p_effective_date BETWEEN cmr.effective_start_date
10637 AND cmr.effective_end_date
10638 AND cmr.cmbn_age_los_fctr_id = cla.cmbn_age_los_fctr_id
10639 AND (
10640 (
10641 p_new_val IS NOT NULL
10642 AND p_old_val IS NOT NULL
10643 AND p_new_val >= NVL(cla.cmbnd_min_val
10644 ,p_new_val)
10645 AND p_new_val < decode(nvl(cla.cmbnd_max_val,p_new_val) ,
10646 trunc(nvl(cla.cmbnd_max_val,p_new_val))
10647 ,decode(nvl(cla.cmbnd_min_val,p_new_val), trunc(nvl(cla.cmbnd_min_val,p_new_val)),
10648 nvl(cla.cmbnd_max_val,p_new_val)+1,nvl(cla.cmbnd_max_val,p_new_val)+0.000000001),
10649 nvl(cla.cmbnd_max_val,p_new_val)+0.000000001 ) )
10650 -- ceil( NVL(cla.cmbnd_max_val
10651 -- ,p_new_val) + 0.001 ))
10652 OR (
10653 p_new_val IS NOT NULL
10654 AND p_old_val IS NOT NULL
10655 AND (
10656 p_new_val < NVL(cla.cmbnd_min_val
10657 ,p_new_val)
10658 OR p_new_val >= decode(nvl(cla.cmbnd_max_val,p_new_val) ,
10659 trunc(nvl(cla.cmbnd_max_val,p_new_val))
10660 ,decode(nvl(cla.cmbnd_min_val,p_new_val), trunc(nvl(cla.cmbnd_min_val,p_new_val)),
10661 nvl(cla.cmbnd_max_val,p_new_val)+1,nvl(cla.cmbnd_max_val,p_new_val)+0.000000001),
10662 nvl(cla.cmbnd_max_val,p_new_val)+0.000000001 ) )
10663 -- ceil( NVL(cla.cmbnd_max_val
10664 -- ,p_new_val)) + 0.001 )
10665 AND p_old_val >= NVL(cla.cmbnd_min_val
10666 ,p_old_val)
10667 AND p_old_val < decode(nvl(cla.cmbnd_max_val,p_old_val) ,
10668 trunc(nvl(cla.cmbnd_max_val,p_old_val))
10669 ,decode(nvl(cla.cmbnd_min_val,p_old_val), trunc(nvl(cla.cmbnd_min_val,p_old_val)),
10670 nvl(cla.cmbnd_max_val,p_old_val)+1,nvl(cla.cmbnd_max_val,p_old_val)+0.000000001),
10671 nvl(cla.cmbnd_max_val,p_old_val)+0.000000001 ) )
10672 -- ceil(NVL(cla.cmbnd_max_val
10673 -- ,l_old_val_1)) + 0.001 )
10677 --UNION ALL
10674 OR ( p_new_val IS NULL
10675 AND p_old_val IS NULL));
10676 -- PERFNEW. SPLIT TO 2 CURSORS C1 and C2.
10678 CURSOR c2 IS
10679 SELECT p_oipl_id
10680 ,'Y'
10681 ,cla.los_fctr_id
10682 ,cla.age_fctr_id
10683 ,cla.cmbnd_min_val
10684 ,cla.cmbnd_max_val
10685 FROM ben_cmbn_age_los_fctr cla
10686 --,ben_cmbn_age_los_rt_f cmr
10687 ,ben_elig_cmbn_age_los_prte_f ecp
10688 ,ben_eligy_prfl_f elp
10689 ,ben_vrbl_rt_elig_prfl_f vep
10690 ,ben_vrbl_rt_prfl_f vpf
10691 ,ben_acty_vrbl_rt_f avr
10692 ,ben_acty_base_rt_f abr
10693 WHERE ( abr.oipl_id = p_oipl_id
10694 --
10695 --START Option level Rates Enhancements
10696 or ( abr.opt_id = l_opt_id and
10697 not exists (select null from ben_acty_base_rt_f abr1
10698 where abr1.oipl_id = p_oipl_id )))
10699 --END Option level Rates Enhancements
10700 --
10701 AND p_effective_date BETWEEN abr.effective_start_date
10702 AND abr.effective_end_date
10703 AND abr.acty_base_rt_id = avr.acty_base_rt_id
10704 AND p_effective_date BETWEEN avr.effective_start_date
10705 AND avr.effective_end_date
10706 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
10707 AND p_effective_date BETWEEN vpf.effective_start_date
10708 AND vpf.effective_end_date
10709 -- AND vpf.vrbl_rt_prfl_id = ecp.vrbl_rt_prfl_id
10710 AND vpf.vrbl_rt_prfl_id = vep.vrbl_rt_prfl_id
10711 AND p_effective_date BETWEEN vep.effective_start_date
10712 AND vep.effective_end_date
10713 AND vep.eligy_prfl_id = elp.eligy_prfl_id
10714 AND p_effective_date BETWEEN elp.effective_start_date
10715 AND elp.effective_end_date
10716 AND ecp.eligy_prfl_id = elp.eligy_prfl_id
10717 AND p_effective_date BETWEEN ecp.effective_start_date
10718 AND ecp.effective_end_date
10719 AND ecp.cmbn_age_los_fctr_id = cla.cmbn_age_los_fctr_id
10720 AND (
10721 (
10722 p_new_val IS NOT NULL
10723 AND p_old_val IS NOT NULL
10724 AND p_new_val >= NVL(cla.cmbnd_min_val
10725 ,p_new_val)
10726 AND p_new_val < decode(nvl(cla.cmbnd_max_val,p_new_val) ,
10727 trunc(nvl(cla.cmbnd_max_val,p_new_val))
10728 ,decode(nvl(cla.cmbnd_min_val,p_new_val), trunc(nvl(cla.cmbnd_min_val,p_new_val)),
10729 nvl(cla.cmbnd_max_val,p_new_val)+1,nvl(cla.cmbnd_max_val,p_new_val)+0.000000001),
10730 nvl(cla.cmbnd_max_val,p_new_val)+0.000000001 ) )
10731 -- ceil( NVL(cla.cmbnd_max_val
10732 -- ,p_new_val) + 0.001 ))
10733 OR (
10734 p_new_val IS NOT NULL
10735 AND p_old_val IS NOT NULL
10736 AND (
10737 p_new_val < NVL(cla.cmbnd_min_val
10738 ,p_new_val)
10739 OR p_new_val >= decode(nvl(cla.cmbnd_max_val,p_new_val) ,
10740 trunc(nvl(cla.cmbnd_max_val,p_new_val))
10741 ,decode(nvl(cla.cmbnd_min_val,p_new_val), trunc(nvl(cla.cmbnd_min_val,p_new_val)),
10742 nvl(cla.cmbnd_max_val,p_new_val)+1,nvl(cla.cmbnd_max_val,p_new_val)+0.000000001),
10743 nvl(cla.cmbnd_max_val,p_new_val)+0.000000001 ) )
10744 -- ceil( NVL(cla.cmbnd_max_val
10745 -- ,p_new_val)) + 0.001 )
10746 AND p_old_val >= NVL(cla.cmbnd_min_val
10747 ,p_old_val)
10748 AND p_old_val < decode(nvl(cla.cmbnd_max_val,p_old_val) ,
10749 trunc(nvl(cla.cmbnd_max_val,p_old_val))
10750 ,decode(nvl(cla.cmbnd_min_val,p_old_val), trunc(nvl(cla.cmbnd_min_val,p_old_val)),
10751 nvl(cla.cmbnd_max_val,p_old_val)+1,nvl(cla.cmbnd_max_val,p_old_val)+0.000000001),
10752 nvl(cla.cmbnd_max_val,p_old_val)+0.000000001 ) )
10753 -- ceil(NVL(cla.cmbnd_max_val
10754 -- ,l_old_val_1)) + 0.001 )
10755 OR ( p_new_val IS NULL
10756 AND p_old_val IS NULL));
10757 --
10758 --
10759 l_index PLS_INTEGER;
10760 l_not_hash_found BOOLEAN;
10761 l_c2notfound BOOLEAN;
10762 --
10763 BEGIN
10764 --
10765 -- hr_utility.set_location ('Entering '||l_package,10);
10766 --
10767 -- Steps to do process
10768 --
10769 -- 1) Try and get value from cache
10770 -- 2) If can get from cache then copy to output record
10771 -- 3) If can't get from cache do db hit and then
10772 -- copy to cache record and then copy to output record.
10773 --
10774 -- Get hashed index value
10775 --
10776 l_index := MOD(p_oipl_id
10777 ,g_hash_key);
10778 --
10782 --
10779 IF NOT g_cache_oipl_cla_rt_rec.EXISTS(l_index) THEN
10780 --
10781 -- Lets store the hash value in this index
10783 RAISE NO_DATA_FOUND;
10784 --
10785 ELSE
10786 --
10787 -- If it does exist make sure its the right one
10788 --
10789 IF g_cache_oipl_cla_rt_rec(l_index).id <> p_oipl_id THEN
10790 --
10791 -- Loop through the hash using the jump routine to check further
10792 -- indexes
10793 --
10794 l_not_hash_found := FALSE;
10795 --
10796 WHILE NOT l_not_hash_found LOOP
10797 --
10798 l_index := l_index + g_hash_jump;
10799 --
10800 -- Check if the hash index exists, if not we can use it
10801 --
10802 IF NOT g_cache_oipl_cla_rt_rec.EXISTS(l_index) THEN
10803 --
10804 -- Lets store the hash value in the index
10805 --
10806 RAISE NO_DATA_FOUND;
10807 --
10808 ELSE
10809 --
10810 -- Make sure the index is the correct one
10811 --
10812 IF g_cache_oipl_cla_rt_rec(l_index).id = p_oipl_id THEN
10813 --
10814 -- We have a match so the hashed value has been stored before
10815 --
10816 l_not_hash_found := TRUE;
10817 --
10818 END IF;
10819 --
10820 END IF;
10821 --
10822 END LOOP;
10823 --
10824 END IF;
10825 --
10826 END IF;
10827 --
10828 -- If p_old_val and p_new_val is set this means we are trying to retrieve
10829 -- the correct rate for the calculated value.
10830 -- Previously we just cached the first rate we
10831 -- found since we needed the determination code, the correct age,los code,etc
10832 -- By killing the cache and forcing the value to be removed we cache the
10833 -- correct rate profile for the case we need.
10834 --
10835 IF p_old_val IS NOT NULL
10836 AND p_new_val IS NOT NULL THEN
10837 --
10838 RAISE NO_DATA_FOUND;
10839 --
10840 END IF;
10841 --
10842 p_rec := g_cache_oipl_cla_rt_rec(l_index);
10843 --
10844 -- hr_utility.set_location ('Leaving '||l_package,10);
10845 --
10846 EXCEPTION
10847 --
10848 WHEN NO_DATA_FOUND THEN
10849 --
10850 -- The record has not been cached yet so lets cache it
10851 -- Option level rates enhancement
10852 l_opt_id := get_opt_id(p_oipl_id,p_effective_date);
10853 --
10854 OPEN c1;
10855 --
10856 FETCH c1 INTO g_cache_oipl_cla_rt_rec(l_index);
10857 -- PERFNEW
10858 IF c1%NOTFOUND THEN
10859 --
10860 l_c2notfound := false;
10861 OPEN c2;
10862 FETCH c2 INTO g_cache_oipl_cla_rt_rec(l_index);
10863 IF c2%NOTFOUND THEN
10864 --
10865 l_c2notfound := true;
10866 --
10867 END IF;
10868 CLOSE c2;
10869 --
10870 END IF;
10871 -- PERFNEW
10872 IF p_old_val IS NULL
10873 AND p_new_val IS NULL THEN
10874 --
10875 IF c1%NOTFOUND and l_c2notfound THEN -- PERFNEW
10876 --
10877 if NOT g_cache_plip_cla_rt_rec.EXISTS(l_index) then
10878 g_cache_oipl_cla_rt_rec(l_index).id := p_oipl_id;
10879 g_cache_oipl_cla_rt_rec(l_index).exist := 'N';
10880 end if;
10881 --
10882 END IF;
10883 --
10884 END IF;
10885 --
10886 p_rec := g_cache_oipl_cla_rt_rec(l_index);
10887 --
10888 CLOSE c1;
10889 --
10890 END get_comb_oipl_rate;
10891 --
10892 PROCEDURE get_comb_plip_rate(
10893 p_plip_id IN NUMBER
10894 ,p_old_val IN NUMBER DEFAULT NULL
10895 ,p_new_val IN NUMBER DEFAULT NULL
10896 ,p_business_group_id IN NUMBER
10897 ,p_effective_date IN DATE
10898 ,p_rec OUT NOCOPY g_cache_cla_rec_obj) IS
10899 --
10900 l_package VARCHAR2(80) := g_package || '.get_comb_plip_rate';
10901 l_old_val_1 NUMBER := p_old_val + 1;
10902 l_new_val_1 NUMBER := p_new_val + 1;
10903 --
10904 -- Define Cursor
10905 --
10906 CURSOR c1 IS
10907 SELECT p_plip_id
10908 ,'Y'
10909 ,cla.los_fctr_id
10910 ,cla.age_fctr_id
10911 ,cla.cmbnd_min_val
10912 ,cla.cmbnd_max_val
10913 FROM ben_cmbn_age_los_fctr cla
10914 ,ben_cmbn_age_los_rt_f cmr
10915 ,ben_vrbl_rt_prfl_f vpf
10916 ,ben_acty_vrbl_rt_f avr
10917 ,ben_acty_base_rt_f abr
10918 WHERE abr.plip_id = p_plip_id
10919 AND p_effective_date BETWEEN abr.effective_start_date
10920 AND abr.effective_end_date
10921 AND abr.acty_base_rt_id = avr.acty_base_rt_id
10922 AND p_effective_date BETWEEN avr.effective_start_date
10923 AND avr.effective_end_date
10924 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
10925 AND p_effective_date BETWEEN vpf.effective_start_date
10929 AND cmr.effective_end_date
10926 AND vpf.effective_end_date
10927 AND vpf.vrbl_rt_prfl_id = cmr.vrbl_rt_prfl_id
10928 AND p_effective_date BETWEEN cmr.effective_start_date
10930 AND cmr.cmbn_age_los_fctr_id = cla.cmbn_age_los_fctr_id
10931 AND (
10932 (
10933 p_new_val IS NOT NULL
10934 AND p_old_val IS NOT NULL
10935 AND p_new_val >= NVL(cla.cmbnd_min_val
10936 ,p_new_val)
10937 AND p_new_val < decode(nvl(cla.cmbnd_max_val,p_new_val) ,
10938 trunc(nvl(cla.cmbnd_max_val,p_new_val))
10939 ,decode(nvl(cla.cmbnd_min_val,p_new_val), trunc(nvl(cla.cmbnd_min_val,p_new_val)),
10940 nvl(cla.cmbnd_max_val,p_new_val)+1,nvl(cla.cmbnd_max_val,p_new_val)+0.000000001),
10941 nvl(cla.cmbnd_max_val,p_new_val)+0.000000001 ) )
10942 -- ceil( NVL(cla.cmbnd_max_val
10943 -- ,l_new_val_1) + 0.001 ))
10944 OR (
10945 p_new_val IS NOT NULL
10946 AND p_old_val IS NOT NULL
10947 AND (
10948 p_new_val < NVL(cla.cmbnd_min_val
10949 ,p_new_val)
10950 OR p_new_val >= decode(nvl(cla.cmbnd_max_val,p_new_val) ,
10951 trunc(nvl(cla.cmbnd_max_val,p_new_val))
10952 ,decode(nvl(cla.cmbnd_min_val,p_new_val), trunc(nvl(cla.cmbnd_min_val,p_new_val)),
10953 nvl(cla.cmbnd_max_val,p_new_val)+1,nvl(cla.cmbnd_max_val,p_new_val)+0.000000001),
10954 nvl(cla.cmbnd_max_val,p_new_val)+0.000000001 ) )
10955 -- ceil(NVL(cla.cmbnd_max_val
10956 -- ,l_new_val_1)) + 0.001 )
10957 AND p_old_val >= NVL(cla.cmbnd_min_val
10958 ,p_old_val)
10959 AND p_old_val < decode(nvl(cla.cmbnd_max_val,p_old_val) ,
10960 trunc(nvl(cla.cmbnd_max_val,p_old_val))
10961 ,decode(nvl(cla.cmbnd_min_val,p_old_val), trunc(nvl(cla.cmbnd_min_val,p_old_val)),
10962 nvl(cla.cmbnd_max_val,p_old_val)+1,nvl(cla.cmbnd_max_val,p_old_val)+0.000000001),
10963 nvl(cla.cmbnd_max_val,p_old_val)+0.000000001 ) )
10964 -- ceil( NVL(cla.cmbnd_max_val
10965 -- ,l_old_val_1)) + 0.001 )
10966 OR ( p_new_val IS NULL
10967 AND p_old_val IS NULL));
10968 -- PERFNEW. SPLIT TO 2 CURSORS C1 and C2.
10969 --UNION ALL
10970 CURSOR c2 IS
10971 SELECT p_plip_id
10972 ,'Y'
10973 ,cla.los_fctr_id
10974 ,cla.age_fctr_id
10975 ,cla.cmbnd_min_val
10976 ,cla.cmbnd_max_val
10977 FROM ben_cmbn_age_los_fctr cla
10978 --,ben_cmbn_age_los_rt_f cmr
10979 ,ben_elig_cmbn_age_los_prte_f ecp
10980 ,ben_eligy_prfl_f elp
10981 ,ben_vrbl_rt_elig_prfl_f vep
10982 ,ben_vrbl_rt_prfl_f vpf
10983 ,ben_acty_vrbl_rt_f avr
10984 ,ben_acty_base_rt_f abr
10985 WHERE abr.plip_id = p_plip_id
10986 AND p_effective_date BETWEEN abr.effective_start_date
10987 AND abr.effective_end_date
10988 AND abr.acty_base_rt_id = avr.acty_base_rt_id
10989 AND p_effective_date BETWEEN avr.effective_start_date
10990 AND avr.effective_end_date
10991 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
10992 AND p_effective_date BETWEEN vpf.effective_start_date
10993 AND vpf.effective_end_date
10994 -- AND vpf.vrbl_rt_prfl_id = ecp.vrbl_rt_prfl_id
10995 AND vpf.vrbl_rt_prfl_id = vep.vrbl_rt_prfl_id
10996 AND p_effective_date BETWEEN vep.effective_start_date
10997 AND vep.effective_end_date
10998 AND vep.eligy_prfl_id = elp.eligy_prfl_id
10999 AND p_effective_date BETWEEN elp.effective_start_date
11000 AND elp.effective_end_date
11001 AND ecp.eligy_prfl_id = elp.eligy_prfl_id
11002 AND p_effective_date BETWEEN ecp.effective_start_date
11003 AND ecp.effective_end_date
11004 AND ecp.cmbn_age_los_fctr_id = cla.cmbn_age_los_fctr_id
11005 AND (
11006 (
11007 p_new_val IS NOT NULL
11008 AND p_old_val IS NOT NULL
11009 AND p_new_val >= NVL(cla.cmbnd_min_val
11010 ,p_new_val)
11011 AND p_new_val < decode(nvl(cla.cmbnd_max_val,p_new_val) ,
11012 trunc(nvl(cla.cmbnd_max_val,p_new_val))
11013 ,decode(nvl(cla.cmbnd_min_val,p_new_val), trunc(nvl(cla.cmbnd_min_val,p_new_val)),
11014 nvl(cla.cmbnd_max_val,p_new_val)+1,nvl(cla.cmbnd_max_val,p_new_val)+0.000000001),
11015 nvl(cla.cmbnd_max_val,p_new_val)+0.000000001 ) )
11016 -- ceil( NVL(cla.cmbnd_max_val
11017 -- ,l_new_val_1) + 0.001 ))
11021 AND (
11018 OR (
11019 p_new_val IS NOT NULL
11020 AND p_old_val IS NOT NULL
11022 p_new_val < NVL(cla.cmbnd_min_val
11023 ,p_new_val)
11024 OR p_new_val >= decode(nvl(cla.cmbnd_max_val,p_new_val) ,
11025 trunc(nvl(cla.cmbnd_max_val,p_new_val))
11026 ,decode(nvl(cla.cmbnd_min_val,p_new_val), trunc(nvl(cla.cmbnd_min_val,p_new_val)),
11027 nvl(cla.cmbnd_max_val,p_new_val)+1,nvl(cla.cmbnd_max_val,p_new_val)+0.000000001),
11028 nvl(cla.cmbnd_max_val,p_new_val)+0.000000001 ) )
11029 -- ceil(NVL(cla.cmbnd_max_val
11030 -- ,l_new_val_1)) + 0.001 )
11031 AND p_old_val >= NVL(cla.cmbnd_min_val
11032 ,p_old_val)
11033 AND p_old_val < decode(nvl(cla.cmbnd_max_val,p_old_val) ,
11034 trunc(nvl(cla.cmbnd_max_val,p_old_val))
11035 ,decode(nvl(cla.cmbnd_min_val,p_old_val), trunc(nvl(cla.cmbnd_min_val,p_old_val)),
11036 nvl(cla.cmbnd_max_val,p_old_val)+1,nvl(cla.cmbnd_max_val,p_old_val)+0.000000001),
11037 nvl(cla.cmbnd_max_val,p_old_val)+0.000000001 ) )
11038 -- ceil( NVL(cla.cmbnd_max_val
11039 -- ,l_old_val_1)) + 0.001 )
11040 OR ( p_new_val IS NULL
11041 AND p_old_val IS NULL));
11042 --
11043 l_index PLS_INTEGER;
11044 l_not_hash_found BOOLEAN;
11045 l_c2notfound BOOLEAN;
11046 --
11047 BEGIN
11048 --
11049 -- hr_utility.set_location ('Entering '||l_package,10);
11050 --
11051 -- Steps to do process
11052 --
11053 -- 1) Try and get value from cache
11054 -- 2) If can get from cache then copy to output record
11055 -- 3) If can't get from cache do db hit and then
11056 -- copy to cache record and then copy to output record.
11057 --
11058 -- Get hashed index value
11059 --
11060 l_index := MOD(p_plip_id
11061 ,g_hash_key);
11062 --
11063 IF NOT g_cache_plip_cla_rt_rec.EXISTS(l_index) THEN
11064 --
11065 -- Lets store the hash value in this index
11066 --
11067 RAISE NO_DATA_FOUND;
11068 --
11069 ELSE
11070 --
11071 -- If it does exist make sure its the right one
11072 --
11073 IF g_cache_plip_cla_rt_rec(l_index).id <> p_plip_id THEN
11074 --
11075 -- Loop through the hash using the jump routine to check further
11076 -- indexes
11077 --
11078 l_not_hash_found := FALSE;
11079 --
11080 WHILE NOT l_not_hash_found LOOP
11081 --
11082 l_index := l_index + g_hash_jump;
11083 --
11084 -- Check if the hash index exists, if not we can use it
11085 --
11086 IF NOT g_cache_plip_cla_rt_rec.EXISTS(l_index) THEN
11087 --
11088 -- Lets store the hash value in the index
11089 --
11090 RAISE NO_DATA_FOUND;
11091 --
11092 ELSE
11093 --
11094 -- Make sure the index is the correct one
11095 --
11096 IF g_cache_plip_cla_rt_rec(l_index).id = p_plip_id THEN
11097 --
11098 -- We have a match so the hashed value has been stored before
11099 --
11100 l_not_hash_found := TRUE;
11101 --
11102 END IF;
11103 --
11104 END IF;
11105 --
11106 END LOOP;
11107 --
11108 END IF;
11109 --
11110 END IF;
11111 --
11112 -- If p_old_val and p_new_val is set this means we are trying to retrieve
11113 -- the correct rate for the calculated value.
11114 -- Previously we just cached the first rate we
11115 -- found since we needed the determination code, the correct age,los code,etc
11116 -- By killing the cache and forcing the value to be removed we cache the
11117 -- correct rate profile for the case we need.
11118 --
11119 IF p_old_val IS NOT NULL
11120 AND p_new_val IS NOT NULL THEN
11121 --
11122 RAISE NO_DATA_FOUND;
11123 --
11124 END IF;
11125 --
11126 p_rec := g_cache_plip_cla_rt_rec(l_index);
11127 --
11128 -- hr_utility.set_location ('Leaving '||l_package,10);
11129 --
11130 EXCEPTION
11131 --
11132 WHEN NO_DATA_FOUND THEN
11133 --
11134 -- The record has not been cached yet so lets cache it
11135 --
11136 OPEN c1;
11137 --
11138 FETCH c1 INTO g_cache_plip_cla_rt_rec(l_index);
11139 -- PERFNEW
11140 IF c1%NOTFOUND THEN
11141 --
11142 l_c2notfound := false;
11143 OPEN c2;
11144 FETCH c2 INTO g_cache_plip_cla_rt_rec(l_index);
11145 IF c2%NOTFOUND THEN
11146 --
11147 l_c2notfound := true;
11148 --
11149 END IF;
11150 CLOSE c2;
11151 --
11152 END IF;
11153 -- PERFNEW
11154 IF p_old_val IS NULL
11158 --
11155 AND p_new_val IS NULL THEN
11156 --
11157 IF c1%NOTFOUND and l_c2notfound THEN -- PERFNEW
11159 if NOT g_cache_plip_cla_rt_rec.EXISTS(l_index) then
11160 g_cache_plip_cla_rt_rec(l_index).id := p_plip_id;
11161 g_cache_plip_cla_rt_rec(l_index).exist := 'N';
11162 end if;
11163 --
11164 END IF;
11165 --
11166 END IF;
11167 --
11168 p_rec := g_cache_plip_cla_rt_rec(l_index);
11169 --
11170 CLOSE c1;
11171 --
11172 END get_comb_plip_rate;
11173 --
11174 PROCEDURE get_comb_ptip_rate(
11175 p_ptip_id IN NUMBER
11176 ,p_old_val IN NUMBER DEFAULT NULL
11177 ,p_new_val IN NUMBER DEFAULT NULL
11178 ,p_business_group_id IN NUMBER
11179 ,p_effective_date IN DATE
11180 ,p_rec OUT NOCOPY g_cache_cla_rec_obj) IS
11181 --
11182 l_package VARCHAR2(80) := g_package || '.get_comb_ptip_rate';
11183 l_old_val_1 NUMBER := p_old_val + 1;
11184 l_new_val_1 NUMBER := p_new_val + 1;
11185 --
11186 -- Define Cursor
11187 --
11188 CURSOR c1 IS
11189 SELECT p_ptip_id
11190 ,'Y'
11191 ,cla.los_fctr_id
11192 ,cla.age_fctr_id
11193 ,cla.cmbnd_min_val
11194 ,cla.cmbnd_max_val
11195 FROM ben_cmbn_age_los_fctr cla
11196 ,ben_cmbn_age_los_rt_f cmr
11197 ,ben_vrbl_rt_prfl_f vpf
11198 ,ben_acty_vrbl_rt_f avr
11199 ,ben_acty_base_rt_f abr
11200 WHERE abr.ptip_id = p_ptip_id
11201 AND p_effective_date BETWEEN abr.effective_start_date
11202 AND abr.effective_end_date
11203 AND abr.acty_base_rt_id = avr.acty_base_rt_id
11204 AND p_effective_date BETWEEN avr.effective_start_date
11205 AND avr.effective_end_date
11206 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
11207 AND p_effective_date BETWEEN vpf.effective_start_date
11208 AND vpf.effective_end_date
11209 AND vpf.vrbl_rt_prfl_id = cmr.vrbl_rt_prfl_id
11210 AND p_effective_date BETWEEN cmr.effective_start_date
11211 AND cmr.effective_end_date
11212 AND cmr.cmbn_age_los_fctr_id = cla.cmbn_age_los_fctr_id
11213 AND (
11214 (
11215 p_new_val IS NOT NULL
11216 AND p_old_val IS NOT NULL
11217 AND p_new_val >= NVL(cla.cmbnd_min_val
11218 ,p_new_val)
11219 AND p_new_val < decode(nvl(cla.cmbnd_max_val,p_new_val) ,
11220 trunc(nvl(cla.cmbnd_max_val,p_new_val))
11221 ,decode(nvl(cla.cmbnd_min_val,p_new_val), trunc(nvl(cla.cmbnd_min_val,p_new_val)),
11222 nvl(cla.cmbnd_max_val,p_new_val)+1,nvl(cla.cmbnd_max_val,p_new_val)+0.000000001),
11223 nvl(cla.cmbnd_max_val,p_new_val)+0.000000001 ) )
11224 -- ceil( NVL(cla.cmbnd_max_val
11225 -- ,p_new_val) + 0.001 ))
11226 OR (
11227 p_new_val IS NOT NULL
11228 AND p_old_val IS NOT NULL
11229 AND (
11230 p_new_val < NVL(cla.cmbnd_min_val
11231 ,p_new_val)
11232 OR p_new_val >= decode(nvl(cla.cmbnd_max_val,p_new_val) ,
11233 trunc(nvl(cla.cmbnd_max_val,p_new_val))
11234 ,decode(nvl(cla.cmbnd_min_val,p_new_val), trunc(nvl(cla.cmbnd_min_val,p_new_val)),
11235 nvl(cla.cmbnd_max_val,p_new_val)+1,nvl(cla.cmbnd_max_val,p_new_val)+0.000000001),
11236 nvl(cla.cmbnd_max_val,p_new_val)+0.000000001 ) )
11237 -- ceil( NVL(cla.cmbnd_max_val
11238 -- ,p_new_val)) + 0.001 )
11239 AND p_old_val >= NVL(cla.cmbnd_min_val
11240 ,p_old_val)
11241 AND p_old_val < decode(nvl(cla.cmbnd_max_val,p_old_val) ,
11242 trunc(nvl(cla.cmbnd_max_val,p_old_val))
11243 ,decode(nvl(cla.cmbnd_min_val,p_old_val), trunc(nvl(cla.cmbnd_min_val,p_old_val)),
11244 nvl(cla.cmbnd_max_val,p_old_val)+1,nvl(cla.cmbnd_max_val,p_old_val)+0.000000001),
11245 nvl(cla.cmbnd_max_val,p_old_val)+0.000000001 ) )
11246 -- ceil( NVL(cla.cmbnd_max_val
11247 -- ,p_old_val)) + 0.001 )
11248 OR ( p_new_val IS NULL
11249 AND p_old_val IS NULL));
11250 -- PERFNEW. SPLIT TO 2 CURSORS C1 and C2.
11251 --UNION ALL
11252 CURSOR c2 IS
11253 SELECT p_ptip_id
11254 ,'Y'
11255 ,cla.los_fctr_id
11256 ,cla.age_fctr_id
11257 ,cla.cmbnd_min_val
11258 ,cla.cmbnd_max_val
11259 FROM ben_cmbn_age_los_fctr cla
11260 --,ben_cmbn_age_los_rt_f cmr
11264 ,ben_vrbl_rt_prfl_f vpf
11261 ,ben_elig_cmbn_age_los_prte_f ecp
11262 ,ben_eligy_prfl_f elp
11263 ,ben_vrbl_rt_elig_prfl_f vep
11265 ,ben_acty_vrbl_rt_f avr
11266 ,ben_acty_base_rt_f abr
11267 WHERE abr.ptip_id = p_ptip_id
11268 AND p_effective_date BETWEEN abr.effective_start_date
11269 AND abr.effective_end_date
11270 AND abr.acty_base_rt_id = avr.acty_base_rt_id
11271 AND p_effective_date BETWEEN avr.effective_start_date
11272 AND avr.effective_end_date
11273 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
11274 AND p_effective_date BETWEEN vpf.effective_start_date
11275 AND vpf.effective_end_date
11276 -- AND vpf.vrbl_rt_prfl_id = ecp.vrbl_rt_prfl_id
11277 AND vpf.vrbl_rt_prfl_id = vep.vrbl_rt_prfl_id
11278 AND p_effective_date BETWEEN vep.effective_start_date
11279 AND vep.effective_end_date
11280 AND vep.eligy_prfl_id = elp.eligy_prfl_id
11281 AND p_effective_date BETWEEN elp.effective_start_date
11282 AND elp.effective_end_date
11283 AND ecp.eligy_prfl_id = elp.eligy_prfl_id
11284 AND p_effective_date BETWEEN ecp.effective_start_date
11285 AND ecp.effective_end_date
11286 AND ecp.cmbn_age_los_fctr_id = cla.cmbn_age_los_fctr_id
11287 AND (
11288 (
11289 p_new_val IS NOT NULL
11290 AND p_old_val IS NOT NULL
11291 AND p_new_val >= NVL(cla.cmbnd_min_val
11292 ,p_new_val)
11293 AND p_new_val < decode(nvl(cla.cmbnd_max_val,p_new_val) ,
11294 trunc(nvl(cla.cmbnd_max_val,p_new_val))
11295 ,decode(nvl(cla.cmbnd_min_val,p_new_val), trunc(nvl(cla.cmbnd_min_val,p_new_val)),
11296 nvl(cla.cmbnd_max_val,p_new_val)+1,nvl(cla.cmbnd_max_val,p_new_val)+0.000000001),
11297 nvl(cla.cmbnd_max_val,p_new_val)+0.000000001 ) )
11298 -- ceil( NVL(cla.cmbnd_max_val
11299 -- ,p_new_val) + 0.001 ))
11300 OR (
11301 p_new_val IS NOT NULL
11302 AND p_old_val IS NOT NULL
11303 AND (
11304 p_new_val < NVL(cla.cmbnd_min_val
11305 ,p_new_val)
11306 OR p_new_val >= decode(nvl(cla.cmbnd_max_val,p_new_val) ,
11307 trunc(nvl(cla.cmbnd_max_val,p_new_val))
11308 ,decode(nvl(cla.cmbnd_min_val,p_new_val), trunc(nvl(cla.cmbnd_min_val,p_new_val)),
11309 nvl(cla.cmbnd_max_val,p_new_val)+1,nvl(cla.cmbnd_max_val,p_new_val)+0.000000001),
11310 nvl(cla.cmbnd_max_val,p_new_val)+0.000000001 ) )
11311 -- ceil( NVL(cla.cmbnd_max_val
11312 -- ,p_new_val)) + 0.001 )
11313 AND p_old_val >= NVL(cla.cmbnd_min_val
11314 ,p_old_val)
11315 AND p_old_val < decode(nvl(cla.cmbnd_max_val,p_old_val) ,
11316 trunc(nvl(cla.cmbnd_max_val,p_old_val))
11317 ,decode(nvl(cla.cmbnd_min_val,p_old_val), trunc(nvl(cla.cmbnd_min_val,p_old_val)),
11318 nvl(cla.cmbnd_max_val,p_old_val)+1,nvl(cla.cmbnd_max_val,p_old_val)+0.000000001),
11319 nvl(cla.cmbnd_max_val,p_old_val)+0.000000001 ) )
11320 -- ceil( NVL(cla.cmbnd_max_val
11321 -- ,p_old_val)) + 0.001 )
11322 OR ( p_new_val IS NULL
11323 AND p_old_val IS NULL));
11324 --
11325 --
11326 l_index PLS_INTEGER;
11327 l_not_hash_found BOOLEAN;
11328 l_c2notfound BOOLEAN;
11329 --
11330 BEGIN
11331 --
11332 -- hr_utility.set_location ('Entering '||l_package,10);
11333 --
11334 -- Steps to do process
11335 --
11336 -- 1) Try and get value from cache
11337 -- 2) If can get from cache then copy to output record
11338 -- 3) If can't get from cache do db hit and then
11339 -- copy to cache record and then copy to output record.
11340 --
11341 -- Get hashed index value
11342 --
11343 l_index := MOD(p_ptip_id
11344 ,g_hash_key);
11345 --
11346 IF NOT g_cache_ptip_cla_rt_rec.EXISTS(l_index) THEN
11347 --
11348 -- Lets store the hash value in this index
11349 --
11350 RAISE NO_DATA_FOUND;
11351 --
11352 ELSE
11353 --
11354 -- If it does exist make sure its the right one
11355 --
11356 IF g_cache_ptip_cla_rt_rec(l_index).id <> p_ptip_id THEN
11357 --
11358 -- Loop through the hash using the jump routine to check further
11359 -- indexes
11360 --
11361 l_not_hash_found := FALSE;
11362 --
11363 WHILE NOT l_not_hash_found LOOP
11364 --
11365 l_index := l_index + g_hash_jump;
11366 --
11367 -- Check if the hash index exists, if not we can use it
11368 --
11369 IF NOT g_cache_ptip_cla_rt_rec.EXISTS(l_index) THEN
11373 RAISE NO_DATA_FOUND;
11370 --
11371 -- Lets store the hash value in the index
11372 --
11374 --
11375 ELSE
11376 --
11377 -- Make sure the index is the correct one
11378 --
11379 IF g_cache_ptip_cla_rt_rec(l_index).id = p_ptip_id THEN
11380 --
11381 -- We have a match so the hashed value has been stored before
11382 --
11383 l_not_hash_found := TRUE;
11384 --
11385 END IF;
11386 --
11387 END IF;
11388 --
11389 END LOOP;
11390 --
11391 END IF;
11392 --
11393 END IF;
11394 --
11395 -- If p_old_val and p_new_val is set this means we are trying to retrieve
11396 -- the correct rate for the calculated value.
11397 -- Previously we just cached the first rate we
11398 -- found since we needed the determination code, the correct age,los code,etc
11399 -- By killing the cache and forcing the value to be removed we cache the
11400 -- correct rate profile for the case we need.
11401 --
11402 IF p_old_val IS NOT NULL
11403 AND p_new_val IS NOT NULL THEN
11404 --
11405 RAISE NO_DATA_FOUND;
11406 --
11407 END IF;
11408 --
11409 p_rec := g_cache_ptip_cla_rt_rec(l_index);
11410 --
11411 -- hr_utility.set_location ('Leaving '||l_package,10);
11412 --
11413 EXCEPTION
11414 --
11415 WHEN NO_DATA_FOUND THEN
11416 --
11417 -- The record has not been cached yet so lets cache it
11418 --
11419 OPEN c1;
11420 --
11421 FETCH c1 INTO g_cache_ptip_cla_rt_rec(l_index);
11422 -- PERFNEW
11423 IF c1%NOTFOUND THEN
11424 --
11425 l_c2notfound := false;
11426 OPEN c2;
11427 FETCH c2 INTO g_cache_ptip_cla_rt_rec(l_index);
11428 IF c2%NOTFOUND THEN
11429 --
11430 l_c2notfound := true;
11431 --
11432 END IF;
11433 CLOSE c2;
11434 --
11435 END IF;
11436 -- PERFNEW
11437 IF p_old_val IS NULL
11438 AND p_new_val IS NULL THEN
11439 --
11440 IF c1%NOTFOUND and l_c2notfound THEN -- PERFNEW
11441 --
11442 if NOT g_cache_ptip_cla_rt_rec.EXISTS(l_index) then
11443 g_cache_ptip_cla_rt_rec(l_index).id := p_ptip_id;
11444 g_cache_ptip_cla_rt_rec(l_index).exist := 'N';
11445 end if;
11446 --
11447 END IF;
11448 --
11449 END IF;
11450 --
11451 p_rec := g_cache_ptip_cla_rt_rec(l_index);
11452 --
11453 CLOSE c1;
11454 --
11455 END get_comb_ptip_rate;
11456 --
11457 PROCEDURE get_comb_oiplip_rate(
11458 p_oiplip_id IN NUMBER
11459 ,p_old_val IN NUMBER DEFAULT NULL
11460 ,p_new_val IN NUMBER DEFAULT NULL
11461 ,p_business_group_id IN NUMBER
11462 ,p_effective_date IN DATE
11463 ,p_rec OUT NOCOPY g_cache_cla_rec_obj) IS
11464 --
11465 l_package VARCHAR2(80) := g_package || '.get_comb_oiplip_rate';
11466 l_old_val_1 NUMBER := p_old_val + 1;
11467 l_new_val_1 NUMBER := p_new_val + 1;
11468 --
11469 -- Define Cursor
11470 --
11471 CURSOR c1 IS
11472 SELECT p_oiplip_id
11473 ,'Y'
11474 ,cla.los_fctr_id
11475 ,cla.age_fctr_id
11476 ,cla.cmbnd_min_val
11477 ,cla.cmbnd_max_val
11478 FROM ben_cmbn_age_los_fctr cla
11479 ,ben_cmbn_age_los_rt_f cmr
11480 ,ben_vrbl_rt_prfl_f vpf
11481 ,ben_acty_vrbl_rt_f avr
11482 ,ben_acty_base_rt_f abr
11483 WHERE abr.oiplip_id = p_oiplip_id
11484 AND p_effective_date BETWEEN abr.effective_start_date
11485 AND abr.effective_end_date
11486 AND abr.acty_base_rt_id = avr.acty_base_rt_id
11487 AND p_effective_date BETWEEN avr.effective_start_date
11488 AND avr.effective_end_date
11489 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
11490 AND p_effective_date BETWEEN vpf.effective_start_date
11491 AND vpf.effective_end_date
11492 AND vpf.vrbl_rt_prfl_id = cmr.vrbl_rt_prfl_id
11493 AND p_effective_date BETWEEN cmr.effective_start_date
11494 AND cmr.effective_end_date
11495 AND cmr.cmbn_age_los_fctr_id = cla.cmbn_age_los_fctr_id
11496 AND (
11497 (
11498 p_new_val IS NOT NULL
11499 AND p_old_val IS NOT NULL
11500 AND p_new_val >= NVL(cla.cmbnd_min_val
11501 ,p_new_val)
11502 AND p_new_val < decode(nvl(cla.cmbnd_max_val,p_new_val) ,
11503 trunc(nvl(cla.cmbnd_max_val,p_new_val))
11504 ,decode(nvl(cla.cmbnd_min_val,p_new_val), trunc(nvl(cla.cmbnd_min_val,p_new_val)),
11505 nvl(cla.cmbnd_max_val,p_new_val)+1,nvl(cla.cmbnd_max_val,p_new_val)+0.000000001),
11509 OR (
11506 nvl(cla.cmbnd_max_val,p_new_val)+0.000000001 ) )
11507 -- ceil( NVL(cla.cmbnd_max_val
11508 -- ,p_new_val) + 0.001 ))
11510 p_new_val IS NOT NULL
11511 AND p_old_val IS NOT NULL
11512 AND (
11513 p_new_val < NVL(cla.cmbnd_min_val
11514 ,p_new_val)
11515 OR p_new_val >= decode(nvl(cla.cmbnd_max_val,p_new_val) ,
11516 trunc(nvl(cla.cmbnd_max_val,p_new_val))
11517 ,decode(nvl(cla.cmbnd_min_val,p_new_val), trunc(nvl(cla.cmbnd_min_val,p_new_val)),
11518 nvl(cla.cmbnd_max_val,p_new_val)+1,nvl(cla.cmbnd_max_val,p_new_val)+0.000000001),
11519 nvl(cla.cmbnd_max_val,p_new_val)+0.000000001 ) )
11520 -- ceil( NVL(cla.cmbnd_max_val
11521 -- ,p_new_val)) + 0.001 )
11522 AND p_old_val >= NVL(cla.cmbnd_min_val
11523 ,p_old_val)
11524 AND p_old_val < decode(nvl(cla.cmbnd_max_val,p_old_val) ,
11525 trunc(nvl(cla.cmbnd_max_val,p_old_val))
11526 ,decode(nvl(cla.cmbnd_min_val,p_old_val), trunc(nvl(cla.cmbnd_min_val,p_old_val)),
11527 nvl(cla.cmbnd_max_val,p_old_val)+1,nvl(cla.cmbnd_max_val,p_old_val)+0.000000001),
11528 nvl(cla.cmbnd_max_val,p_old_val)+0.000000001 ) )
11529 -- ceil( NVL(cla.cmbnd_max_val
11530 -- ,p_old_val)) + 0.001 )
11531 OR ( p_new_val IS NULL
11532 AND p_old_val IS NULL));
11533 -- PERFNEW. SPLIT TO 2 CURSORS C1 and C2.
11534 --UNION ALL
11535 CURSOR c2 IS
11536 SELECT p_oiplip_id
11537 ,'Y'
11538 ,cla.los_fctr_id
11539 ,cla.age_fctr_id
11540 ,cla.cmbnd_min_val
11541 ,cla.cmbnd_max_val
11542 FROM ben_cmbn_age_los_fctr cla
11543 --,ben_cmbn_age_los_rt_f cmr
11544 ,ben_elig_cmbn_age_los_prte_f ecp
11545 ,ben_eligy_prfl_f elp
11546 ,ben_vrbl_rt_elig_prfl_f vep
11547 ,ben_vrbl_rt_prfl_f vpf
11548 ,ben_acty_vrbl_rt_f avr
11549 ,ben_acty_base_rt_f abr
11550 WHERE abr.oiplip_id = p_oiplip_id
11551 AND p_effective_date BETWEEN abr.effective_start_date
11552 AND abr.effective_end_date
11553 AND abr.acty_base_rt_id = avr.acty_base_rt_id
11554 AND p_effective_date BETWEEN avr.effective_start_date
11555 AND avr.effective_end_date
11556 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
11557 AND p_effective_date BETWEEN vpf.effective_start_date
11558 AND vpf.effective_end_date
11559 -- AND vpf.vrbl_rt_prfl_id = ecp.vrbl_rt_prfl_id
11560 AND vpf.vrbl_rt_prfl_id = vep.vrbl_rt_prfl_id
11561 AND p_effective_date BETWEEN vep.effective_start_date
11562 AND vep.effective_end_date
11563 AND vep.eligy_prfl_id = elp.eligy_prfl_id
11564 AND p_effective_date BETWEEN elp.effective_start_date
11565 AND elp.effective_end_date
11566 AND ecp.eligy_prfl_id = elp.eligy_prfl_id
11567 AND p_effective_date BETWEEN ecp.effective_start_date
11568 AND ecp.effective_end_date
11569 AND ecp.cmbn_age_los_fctr_id = cla.cmbn_age_los_fctr_id
11570 AND (
11571 (
11572 p_new_val IS NOT NULL
11573 AND p_old_val IS NOT NULL
11574 AND p_new_val >= NVL(cla.cmbnd_min_val
11575 ,p_new_val)
11576 AND p_new_val < decode(nvl(cla.cmbnd_max_val,p_new_val) ,
11577 trunc(nvl(cla.cmbnd_max_val,p_new_val))
11578 ,decode(nvl(cla.cmbnd_min_val,p_new_val), trunc(nvl(cla.cmbnd_min_val,p_new_val)),
11579 nvl(cla.cmbnd_max_val,p_new_val)+1,nvl(cla.cmbnd_max_val,p_new_val)+0.000000001),
11580 nvl(cla.cmbnd_max_val,p_new_val)+0.000000001 ) )
11581 -- ceil( NVL(cla.cmbnd_max_val
11582 -- ,p_new_val) + 0.001 ))
11583 OR (
11584 p_new_val IS NOT NULL
11585 AND p_old_val IS NOT NULL
11586 AND (
11587 p_new_val < NVL(cla.cmbnd_min_val
11588 ,p_new_val)
11589 OR p_new_val >= decode(nvl(cla.cmbnd_max_val,p_new_val) ,
11590 trunc(nvl(cla.cmbnd_max_val,p_new_val))
11591 ,decode(nvl(cla.cmbnd_min_val,p_new_val), trunc(nvl(cla.cmbnd_min_val,p_new_val)),
11592 nvl(cla.cmbnd_max_val,p_new_val)+1,nvl(cla.cmbnd_max_val,p_new_val)+0.000000001),
11593 nvl(cla.cmbnd_max_val,p_new_val)+0.000000001 ) )
11594 -- ceil( NVL(cla.cmbnd_max_val
11595 -- ,p_new_val)) + 0.001 )
11596 AND p_old_val >= NVL(cla.cmbnd_min_val
11600 ,decode(nvl(cla.cmbnd_min_val,p_old_val), trunc(nvl(cla.cmbnd_min_val,p_old_val)),
11597 ,p_old_val)
11598 AND p_old_val < decode(nvl(cla.cmbnd_max_val,p_old_val) ,
11599 trunc(nvl(cla.cmbnd_max_val,p_old_val))
11601 nvl(cla.cmbnd_max_val,p_old_val)+1,nvl(cla.cmbnd_max_val,p_old_val)+0.000000001),
11602 nvl(cla.cmbnd_max_val,p_old_val)+0.000000001 ) )
11603 -- ceil( NVL(cla.cmbnd_max_val
11604 -- ,p_old_val)) + 0.001 )
11605 OR ( p_new_val IS NULL
11606 AND p_old_val IS NULL));
11607 --
11608 --
11609 l_index PLS_INTEGER;
11610 l_not_hash_found BOOLEAN;
11611 l_c2notfound BOOLEAN;
11612 --
11613 BEGIN
11614 --
11615 -- hr_utility.set_location ('Entering '||l_package,10);
11616 --
11617 -- Steps to do process
11618 --
11619 -- 1) Try and get value from cache
11620 -- 2) If can get from cache then copy to output record
11621 -- 3) If can't get from cache do db hit and then
11622 -- copy to cache record and then copy to output record.
11623 --
11624 -- Get hashed index value
11625 --
11626 l_index := MOD(p_oiplip_id
11627 ,g_hash_key);
11628 --
11629 IF NOT g_cache_oiplip_cla_rt_rec.EXISTS(l_index) THEN
11630 --
11631 -- Lets store the hash value in this index
11632 --
11633 RAISE NO_DATA_FOUND;
11634 --
11635 ELSE
11636 --
11637 -- If it does exist make sure its the right one
11638 --
11639 IF g_cache_oiplip_cla_rt_rec(l_index).id <> p_oiplip_id THEN
11640 --
11641 -- Loop through the hash using the jump routine to check further
11642 -- indexes
11643 --
11644 l_not_hash_found := FALSE;
11645 --
11646 WHILE NOT l_not_hash_found LOOP
11647 --
11648 l_index := l_index + g_hash_jump;
11649 --
11650 -- Check if the hash index exists, if not we can use it
11651 --
11652 IF NOT g_cache_oiplip_cla_rt_rec.EXISTS(l_index) THEN
11653 --
11654 -- Lets store the hash value in the index
11655 --
11656 RAISE NO_DATA_FOUND;
11657 --
11658 ELSE
11659 --
11660 -- Make sure the index is the correct one
11661 --
11662 IF g_cache_oiplip_cla_rt_rec(l_index).id = p_oiplip_id THEN
11663 --
11664 -- We have a match so the hashed value has been stored before
11665 --
11666 l_not_hash_found := TRUE;
11667 --
11668 END IF;
11669 --
11670 END IF;
11671 --
11672 END LOOP;
11673 --
11674 END IF;
11675 --
11676 END IF;
11677 --
11678 -- If p_old_val and p_new_val is set this means we are trying to retrieve
11679 -- the correct rate for the calculated value.
11680 -- Previously we just cached the first rate we
11681 -- found since we needed the determination code, the correct age,los code,etc
11682 -- By killing the cache and forcing the value to be removed we cache the
11683 -- correct rate profile for the case we need.
11684 --
11685 IF p_old_val IS NOT NULL
11686 AND p_new_val IS NOT NULL THEN
11687 --
11688 RAISE NO_DATA_FOUND;
11689 --
11690 END IF;
11691 --
11692 p_rec := g_cache_oiplip_cla_rt_rec(l_index);
11693 --
11694 -- hr_utility.set_location ('Leaving '||l_package,10);
11695 --
11696 EXCEPTION
11697 --
11698 WHEN NO_DATA_FOUND THEN
11699 --
11700 -- The record has not been cached yet so lets cache it
11701 --
11702 OPEN c1;
11703 --
11704 FETCH c1 INTO g_cache_oiplip_cla_rt_rec(l_index);
11705 -- PERFNEW
11706 IF c1%NOTFOUND THEN
11707 --
11708 l_c2notfound := false;
11709 OPEN c2;
11710 FETCH c2 INTO g_cache_oiplip_cla_rt_rec(l_index);
11711 IF c2%NOTFOUND THEN
11712 --
11713 l_c2notfound := true;
11714 --
11715 END IF;
11716 CLOSE c2;
11717 --
11718 END IF;
11719 -- PERFNEW
11720 IF p_old_val IS NULL
11721 AND p_new_val IS NULL THEN
11722 --
11723 IF c1%NOTFOUND and l_c2notfound THEN -- PERFNEW
11724 --
11725 if NOT g_cache_oiplip_cla_rt_rec.EXISTS(l_index) then
11726 g_cache_oiplip_cla_rt_rec(l_index).id := p_oiplip_id;
11727 g_cache_oiplip_cla_rt_rec(l_index).exist := 'N';
11728 end if;
11729 --
11730 END IF;
11731 --
11732 END IF;
11733 --
11734 p_rec := g_cache_oiplip_cla_rt_rec(l_index);
11735 --
11736 CLOSE c1;
11737 --
11738 END get_comb_oiplip_rate;
11739 --
11740 PROCEDURE get_comb_rate(
11741 p_pgm_id IN NUMBER
11742 ,p_pl_id IN NUMBER
11743 ,p_oipl_id IN NUMBER
11747 ,p_old_val IN NUMBER DEFAULT NULL
11744 ,p_plip_id IN NUMBER
11745 ,p_ptip_id IN NUMBER
11746 ,p_oiplip_id IN NUMBER
11748 ,p_new_val IN NUMBER DEFAULT NULL
11749 ,p_business_group_id IN NUMBER
11750 ,p_effective_date IN DATE
11751 ,p_rec OUT NOCOPY g_cache_cla_rec_obj) IS
11752 --
11753 l_package VARCHAR2(80) := g_package || '.get_comb_rate';
11754 --
11755 BEGIN
11756 --
11757 -- hr_utility.set_location ('Entering '||l_package,10);
11758 --
11759 -- Derive which data type we are dealing with
11760 --
11761 IF p_pgm_id IS NOT NULL THEN
11762 --
11763 get_comb_pgm_rate(p_pgm_id=> p_pgm_id
11764 ,p_old_val => p_old_val
11765 ,p_new_val => p_new_val
11766 ,p_business_group_id => p_business_group_id
11767 ,p_effective_date => p_effective_date
11768 ,p_rec => p_rec);
11769 --
11770 ELSIF p_pl_id IS NOT NULL THEN
11771 --
11772 get_comb_pl_rate(p_pl_id=> p_pl_id
11773 ,p_old_val => p_old_val
11774 ,p_new_val => p_new_val
11775 ,p_business_group_id => p_business_group_id
11776 ,p_effective_date => p_effective_date
11777 ,p_rec => p_rec);
11778 --
11779 ELSIF p_oipl_id IS NOT NULL THEN
11780 --
11781 get_comb_oipl_rate(p_oipl_id=> p_oipl_id
11782 ,p_old_val => p_old_val
11783 ,p_new_val => p_new_val
11784 ,p_business_group_id => p_business_group_id
11785 ,p_effective_date => p_effective_date
11786 ,p_rec => p_rec);
11787 --
11788 ELSIF p_plip_id IS NOT NULL THEN
11789 --
11790 get_comb_plip_rate(p_plip_id=> p_plip_id
11791 ,p_old_val => p_old_val
11792 ,p_new_val => p_new_val
11793 ,p_business_group_id => p_business_group_id
11794 ,p_effective_date => p_effective_date
11795 ,p_rec => p_rec);
11796 --
11797 ELSIF p_ptip_id IS NOT NULL THEN
11798 --
11799 get_comb_ptip_rate(p_ptip_id=> p_ptip_id
11800 ,p_old_val => p_old_val
11801 ,p_new_val => p_new_val
11802 ,p_business_group_id => p_business_group_id
11803 ,p_effective_date => p_effective_date
11804 ,p_rec => p_rec);
11805 --
11806 ELSIF p_oiplip_id IS NOT NULL THEN
11807 --
11808 get_comb_oiplip_rate(p_oiplip_id=> p_oiplip_id
11809 ,p_old_val => p_old_val
11810 ,p_new_val => p_new_val
11811 ,p_business_group_id => p_business_group_id
11812 ,p_effective_date => p_effective_date
11813 ,p_rec => p_rec);
11814 --
11815 END IF;
11816 --
11817 -- hr_utility.set_location ('Leaving '||l_package,10);
11818 --
11819 END get_comb_rate;
11820 --
11821 PROCEDURE get_pct_pgm_elig(
11822 p_pgm_id IN NUMBER
11823 ,p_old_val in number default null
11824 ,p_new_val in number default null
11825 ,p_business_group_id IN NUMBER
11826 ,p_effective_date IN DATE
11827 ,p_rec OUT NOCOPY g_cache_pff_rec_obj) IS
11828 --
11829 l_package VARCHAR2(80) := g_package || '.get_pct_pgm_elig';
11830 --
11831 -- Define Cursor
11832 --
11833 CURSOR c1 IS
11834 SELECT p_pgm_id
11835 ,'Y'
11836 ,pff.use_prmry_asnt_only_flag
11837 ,pff.use_sum_of_all_asnts_flag
11838 ,pff.rndg_cd
11839 ,pff.rndg_rl
11840 ,pff.mn_pct_val
11841 ,pff.mx_pct_val
11842 FROM ben_pct_fl_tm_fctr pff
11843 ,ben_elig_pct_fl_tm_prte_f epf
11844 ,ben_eligy_prfl_f elp
11845 ,ben_prtn_elig_prfl_f cep
11846 ,ben_prtn_elig_f epa
11847 WHERE epa.pgm_id = p_pgm_id
11848 AND p_effective_date BETWEEN epa.effective_start_date
11849 AND epa.effective_end_date
11850 AND epa.prtn_elig_id = cep.prtn_elig_id
11851 AND p_effective_date BETWEEN cep.effective_start_date
11852 AND cep.effective_end_date
11853 AND cep.eligy_prfl_id = elp.eligy_prfl_id
11854 AND p_effective_date BETWEEN elp.effective_start_date
11855 AND elp.effective_end_date
11856 AND epf.eligy_prfl_id = elp.eligy_prfl_id
11857 AND p_effective_date BETWEEN epf.effective_start_date
11858 AND epf.effective_end_date
11859 AND epf.pct_fl_tm_fctr_id = pff.pct_fl_tm_fctr_id
11860 AND (
11861 (
11862 p_new_val IS NOT NULL
11863 AND p_old_val IS NOT NULL
11864 AND p_new_val >= NVL(pff.mn_pct_val ,p_new_val)
11865 and p_new_val < decode(nvl(pff.mx_pct_val,p_new_val) ,
11866 trunc(nvl(pff.mx_pct_val,p_new_val))
11867 ,decode(nvl(pff.mn_pct_val,p_new_val), trunc(nvl(pff.mn_pct_val,p_new_val)),
11871 )
11868 nvl(pff.mx_pct_val,p_new_val)+1,nvl(pff.mx_pct_val,p_new_val)+0.000000001),
11869 nvl(pff.mx_pct_val,p_new_val)+0.000000001 )
11870 -- and p_old_val < pff.mn_pct_val
11872 OR
11873 (
11874 p_new_val IS NOT NULL
11875 AND p_old_val IS NOT NULL
11876 AND
11877 (
11878 p_new_val < NVL(pff.mn_pct_val,p_new_val)
11879 OR
11880 p_new_val >= decode(nvl(pff.mx_pct_val,p_new_val) ,
11881 trunc(nvl(pff.mx_pct_val,p_new_val))
11882 ,decode(nvl(pff.mn_pct_val,p_new_val), trunc(nvl(pff.mn_pct_val,p_new_val)),
11883 nvl(pff.mx_pct_val,p_new_val)+1,nvl(pff.mx_pct_val,p_new_val)+0.000000001),
11884 nvl(pff.mx_pct_val,p_new_val)+0.000000001 )
11885 )
11886 AND p_old_val >= NVL(pff.mn_pct_val ,p_old_val)
11887 and p_old_val < decode(nvl(pff.mx_pct_val,p_old_val) ,
11888 trunc(nvl(pff.mx_pct_val,p_old_val))
11889 ,decode(nvl(pff.mn_pct_val,p_old_val), trunc(nvl(pff.mn_pct_val,p_old_val)),
11890 nvl(pff.mx_pct_val,p_old_val)+1,nvl(pff.mx_pct_val,p_old_val)+0.000000001),
11891 nvl(pff.mx_pct_val,p_old_val)+0.000000001 )
11892 )
11893 OR
11894 ( p_new_val IS NULL
11895 AND p_old_val IS NULL
11896 )
11897 );
11898
11899 --
11900 l_index PLS_INTEGER;
11901 l_not_hash_found BOOLEAN;
11902 --
11903 BEGIN
11904 --
11905 -- hr_utility.set_location ('Entering '||l_package,10);
11906 --
11907 -- Steps to do process
11908 --
11909 -- 1) Try and get value from cache
11910 -- 2) If can get from cache then copy to output record
11911 -- 3) If can't get from cache do db hit and then
11912 -- copy to cache record and then copy to output record.
11913 --
11914 -- Get hashed index value
11915 --
11916 l_index := MOD(p_pgm_id
11917 ,g_hash_key);
11918 --
11919 IF NOT g_cache_pgm_pff_el_rec.EXISTS(l_index) THEN
11920 --
11921 -- Lets store the hash value in this index
11922 --
11923 RAISE NO_DATA_FOUND;
11924 --
11925 ELSE
11926 --
11927 -- If it does exist make sure its the right one
11928 --
11929 IF g_cache_pgm_pff_el_rec(l_index).id <> p_pgm_id THEN
11930 --
11931 -- Loop through the hash using the jump routine to check further
11932 -- indexes
11933 --
11934 l_not_hash_found := FALSE;
11935 --
11936 WHILE NOT l_not_hash_found LOOP
11937 --
11938 l_index := l_index + g_hash_jump;
11939 --
11940 -- Check if the hash index exists, if not we can use it
11941 --
11942 IF NOT g_cache_pgm_pff_el_rec.EXISTS(l_index) THEN
11943 --
11944 -- Lets store the hash value in the index
11945 --
11946 RAISE NO_DATA_FOUND;
11947 --
11948 ELSE
11949 --
11950 -- Make sure the index is the correct one
11951 --
11952 IF g_cache_pgm_pff_el_rec(l_index).id = p_pgm_id THEN
11953 --
11954 -- We have a match so the hashed value has been stored before
11955 --
11956 l_not_hash_found := TRUE;
11957 --
11958 END IF;
11959 --
11960 END IF;
11961 --
11962 END LOOP;
11963 --
11964 END IF;
11965 --
11966 END IF;
11967 --
11968 IF p_old_val IS NOT NULL
11969 AND p_new_val IS NOT NULL THEN
11970 --
11971 RAISE NO_DATA_FOUND;
11972 --
11973 END IF;
11974
11975 p_rec := g_cache_pgm_pff_el_rec(l_index);
11976 --
11977 -- hr_utility.set_location ('Leaving '||l_package,10);
11978 --
11979 EXCEPTION
11980 --
11981 WHEN NO_DATA_FOUND THEN
11982 --
11983 -- The record has not been cached yet so lets cache it
11984 --
11985 OPEN c1;
11986 --
11987 FETCH c1 INTO g_cache_pgm_pff_el_rec(l_index);
11988 --
11989 IF c1%NOTFOUND THEN
11990 --
11991 if NOT g_cache_pgm_pff_el_rec.EXISTS(l_index) then
11992 g_cache_pgm_pff_el_rec(l_index).id := p_pgm_id;
11993 g_cache_pgm_pff_el_rec(l_index).exist := 'N';
11994 end if;
11995 --
11996 END IF;
11997 --
11998 p_rec := g_cache_pgm_pff_el_rec(l_index);
11999 --
12000 CLOSE c1;
12001 --
12002 END get_pct_pgm_elig;
12003 --
12004 PROCEDURE get_pct_pl_elig(
12005 p_pl_id IN NUMBER
12006 ,p_old_val in number default null
12007 ,p_new_val in number default null
12008 ,p_business_group_id IN NUMBER
12009 ,p_effective_date IN DATE
12010 ,p_rec OUT NOCOPY g_cache_pff_rec_obj) IS
12011 --
12015 --
12012 l_package VARCHAR2(80) := g_package || '.get_pct_pl_elig';
12013 --
12014 -- Define Cursor
12016 CURSOR c1 IS
12017 SELECT p_pl_id
12018 ,'Y'
12019 ,pff.use_prmry_asnt_only_flag
12020 ,pff.use_sum_of_all_asnts_flag
12021 ,pff.rndg_cd
12022 ,pff.rndg_rl
12023 ,pff.mn_pct_val
12024 ,pff.mx_pct_val
12025 FROM ben_pct_fl_tm_fctr pff
12026 ,ben_elig_pct_fl_tm_prte_f epf
12027 ,ben_eligy_prfl_f elp
12028 ,ben_prtn_elig_prfl_f cep
12029 ,ben_prtn_elig_f epa
12030 WHERE epa.pl_id = p_pl_id
12031 AND p_effective_date BETWEEN epa.effective_start_date
12032 AND epa.effective_end_date
12033 AND epa.prtn_elig_id = cep.prtn_elig_id
12034 AND p_effective_date BETWEEN cep.effective_start_date
12035 AND cep.effective_end_date
12036 AND cep.eligy_prfl_id = elp.eligy_prfl_id
12037 AND p_effective_date BETWEEN elp.effective_start_date
12038 AND elp.effective_end_date
12039 AND epf.eligy_prfl_id = elp.eligy_prfl_id
12040 AND p_effective_date BETWEEN epf.effective_start_date
12041 AND epf.effective_end_date
12042 AND epf.pct_fl_tm_fctr_id = pff.pct_fl_tm_fctr_id
12043 AND (
12044 (
12045 p_new_val IS NOT NULL
12046 AND p_old_val IS NOT NULL
12047 AND p_new_val >= NVL(pff.mn_pct_val ,p_new_val)
12048 and p_new_val < decode(nvl(pff.mx_pct_val,p_new_val) ,
12049 trunc(nvl(pff.mx_pct_val,p_new_val))
12050 ,decode(nvl(pff.mn_pct_val,p_new_val), trunc(nvl(pff.mn_pct_val,p_new_val)),
12051 nvl(pff.mx_pct_val,p_new_val)+1,nvl(pff.mx_pct_val,p_new_val)+0.000000001),
12052 nvl(pff.mx_pct_val,p_new_val)+0.000000001 )
12053 -- and p_old_val < pff.mn_pct_val
12054 )
12055 OR
12056 (
12057 p_new_val IS NOT NULL
12058 AND p_old_val IS NOT NULL
12059 AND
12060 (
12061 p_new_val < NVL(pff.mn_pct_val,p_new_val)
12062 OR
12063 p_new_val >= decode(nvl(pff.mx_pct_val,p_new_val) ,
12064 trunc(nvl(pff.mx_pct_val,p_new_val))
12065 ,decode(nvl(pff.mn_pct_val,p_new_val), trunc(nvl(pff.mn_pct_val,p_new_val)),
12066 nvl(pff.mx_pct_val,p_new_val)+1,nvl(pff.mx_pct_val,p_new_val)+0.000000001),
12067 nvl(pff.mx_pct_val,p_new_val)+0.000000001 )
12068 )
12069 AND p_old_val >= NVL(pff.mn_pct_val ,p_old_val)
12070 and p_old_val < decode(nvl(pff.mx_pct_val,p_old_val) ,
12071 trunc(nvl(pff.mx_pct_val,p_old_val))
12072 ,decode(nvl(pff.mn_pct_val,p_old_val), trunc(nvl(pff.mn_pct_val,p_old_val)),
12073 nvl(pff.mx_pct_val,p_old_val)+1,nvl(pff.mx_pct_val,p_old_val)+0.000000001),
12074 nvl(pff.mx_pct_val,p_old_val)+0.000000001 )
12075 )
12076 OR
12077 ( p_new_val IS NULL
12078 AND p_old_val IS NULL
12079 )
12080 );
12081
12082 --
12083 --
12084 l_index PLS_INTEGER;
12085 l_not_hash_found BOOLEAN;
12086 --
12087 BEGIN
12088 --
12089 -- hr_utility.set_location ('Entering '||l_package,10);
12090 --
12091 -- Steps to do process
12092 --
12093 -- 1) Try and get value from cache
12094 -- 2) If can get from cache then copy to output record
12095 -- 3) If can't get from cache do db hit and then
12096 -- copy to cache record and then copy to output record.
12097 --
12098 -- Get hashed index value
12099 --
12100 l_index := MOD(p_pl_id
12101 ,g_hash_key);
12102 --
12103 IF NOT g_cache_pl_pff_el_rec.EXISTS(l_index) THEN
12104 --
12105 -- Lets store the hash value in this index
12106 --
12107 RAISE NO_DATA_FOUND;
12108 --
12109 ELSE
12110 --
12111 -- If it does exist make sure its the right one
12112 --
12113 IF g_cache_pl_pff_el_rec(l_index).id <> p_pl_id THEN
12114 --
12115 -- Loop through the hash using the jump routine to check further
12116 -- indexes
12117 --
12118 l_not_hash_found := FALSE;
12119 --
12120 WHILE NOT l_not_hash_found LOOP
12121 --
12122 l_index := l_index + g_hash_jump;
12123 --
12124 -- Check if the hash index exists, if not we can use it
12125 --
12126 IF NOT g_cache_pl_pff_el_rec.EXISTS(l_index) THEN
12127 --
12128 -- Lets store the hash value in the index
12129 --
12130 RAISE NO_DATA_FOUND;
12131 --
12132 ELSE
12133 --
12134 -- Make sure the index is the correct one
12135 --
12136 IF g_cache_pl_pff_el_rec(l_index).id = p_pl_id THEN
12140 l_not_hash_found := TRUE;
12137 --
12138 -- We have a match so the hashed value has been stored before
12139 --
12141 --
12142 END IF;
12143 --
12144 END IF;
12145 --
12146 END LOOP;
12147 --
12148 END IF;
12149 --
12150 END IF;
12151 --
12152 IF p_old_val IS NOT NULL
12153 AND p_new_val IS NOT NULL THEN
12154 --
12155 RAISE NO_DATA_FOUND;
12156 --
12157 END IF;
12158 p_rec := g_cache_pl_pff_el_rec(l_index);
12159 --
12160 -- hr_utility.set_location ('Leaving '||l_package,10);
12161 --
12162 EXCEPTION
12163 --
12164 WHEN NO_DATA_FOUND THEN
12165 --
12166 -- The record has not been cached yet so lets cache it
12167 --
12168 OPEN c1;
12169 --
12170 FETCH c1 INTO g_cache_pl_pff_el_rec(l_index);
12171 IF c1%NOTFOUND THEN
12172 --
12173 if NOT g_cache_pl_pff_el_rec.EXISTS(l_index) then
12174 g_cache_pl_pff_el_rec(l_index).id := p_pl_id;
12175 g_cache_pl_pff_el_rec(l_index).exist := 'N';
12176 end if;
12177 --
12178 END IF;
12179 --
12180 p_rec := g_cache_pl_pff_el_rec(l_index);
12181 --
12182 CLOSE c1;
12183 --
12184 END get_pct_pl_elig;
12185 --
12186 PROCEDURE get_pct_oipl_elig(
12187 p_oipl_id IN NUMBER
12188 ,p_old_val in number default null
12189 ,p_new_val in number default null
12190 ,p_business_group_id IN NUMBER
12191 ,p_effective_date IN DATE
12192 ,p_rec OUT NOCOPY g_cache_pff_rec_obj) IS
12193 --
12194 l_package VARCHAR2(80) := g_package || '.get_pct_oipl_elig';
12195 --
12196 -- Define Cursor
12197 --
12198 CURSOR c1 IS
12199 SELECT p_oipl_id
12200 ,'Y'
12201 ,pff.use_prmry_asnt_only_flag
12202 ,pff.use_sum_of_all_asnts_flag
12203 ,pff.rndg_cd
12204 ,pff.rndg_rl
12205 ,pff.mn_pct_val
12206 ,pff.mx_pct_val
12207 FROM ben_pct_fl_tm_fctr pff
12208 ,ben_elig_pct_fl_tm_prte_f epf
12209 ,ben_eligy_prfl_f elp
12210 ,ben_prtn_elig_prfl_f cep
12211 ,ben_prtn_elig_f epa
12212 WHERE epa.oipl_id = p_oipl_id
12213 AND p_effective_date BETWEEN epa.effective_start_date
12214 AND epa.effective_end_date
12215 AND epa.prtn_elig_id = cep.prtn_elig_id
12216 AND p_effective_date BETWEEN cep.effective_start_date
12217 AND cep.effective_end_date
12218 AND cep.eligy_prfl_id = elp.eligy_prfl_id
12219 AND p_effective_date BETWEEN elp.effective_start_date
12220 AND elp.effective_end_date
12221 AND epf.eligy_prfl_id = elp.eligy_prfl_id
12222 AND p_effective_date BETWEEN epf.effective_start_date
12223 AND epf.effective_end_date
12224 AND epf.pct_fl_tm_fctr_id = pff.pct_fl_tm_fctr_id
12225 AND (
12226 (
12227 p_new_val IS NOT NULL
12228 AND p_old_val IS NOT NULL
12229 AND p_new_val >= NVL(pff.mn_pct_val ,p_new_val)
12230 and p_new_val < decode(nvl(pff.mx_pct_val,p_new_val) ,
12231 trunc(nvl(pff.mx_pct_val,p_new_val))
12232 ,decode(nvl(pff.mn_pct_val,p_new_val), trunc(nvl(pff.mn_pct_val,p_new_val)),
12233 nvl(pff.mx_pct_val,p_new_val)+1,nvl(pff.mx_pct_val,p_new_val)+0.000000001),
12234 nvl(pff.mx_pct_val,p_new_val)+0.000000001 )
12235 -- and p_old_val < pff.mn_pct_val
12236 )
12237 OR
12238 (
12239 p_new_val IS NOT NULL
12240 AND p_old_val IS NOT NULL
12241 AND
12242 (
12243 p_new_val < NVL(pff.mn_pct_val,p_new_val)
12244 OR
12245 p_new_val >= decode(nvl(pff.mx_pct_val,p_new_val) ,
12246 trunc(nvl(pff.mx_pct_val,p_new_val))
12247 ,decode(nvl(pff.mn_pct_val,p_new_val), trunc(nvl(pff.mn_pct_val,p_new_val)),
12248 nvl(pff.mx_pct_val,p_new_val)+1,nvl(pff.mx_pct_val,p_new_val)+0.000000001),
12249 nvl(pff.mx_pct_val,p_new_val)+0.000000001 )
12250 )
12251 AND p_old_val >= NVL(pff.mn_pct_val ,p_old_val)
12252 and p_old_val < decode(nvl(pff.mx_pct_val,p_old_val) ,
12253 trunc(nvl(pff.mx_pct_val,p_old_val))
12254 ,decode(nvl(pff.mn_pct_val,p_old_val), trunc(nvl(pff.mn_pct_val,p_old_val)),
12255 nvl(pff.mx_pct_val,p_old_val)+1,nvl(pff.mx_pct_val,p_old_val)+0.000000001),
12256 nvl(pff.mx_pct_val,p_old_val)+0.000000001 )
12257 )
12258 OR
12259 ( p_new_val IS NULL
12263
12260 AND p_old_val IS NULL
12261 )
12262 );
12264 --
12265 --
12266 l_index PLS_INTEGER;
12267 l_not_hash_found BOOLEAN;
12268 --
12269 BEGIN
12270 --
12271 -- hr_utility.set_location ('Entering '||l_package,10);
12272 --
12273 -- Steps to do process
12274 --
12275 -- 1) Try and get value from cache
12276 -- 2) If can get from cache then copy to output record
12277 -- 3) If can't get from cache do db hit and then
12278 -- copy to cache record and then copy to output record.
12279 --
12280 -- Get hashed index value
12281 --
12282 l_index := MOD(p_oipl_id
12283 ,g_hash_key);
12284 --
12285 IF NOT g_cache_oipl_pff_el_rec.EXISTS(l_index) THEN
12286 --
12287 -- Lets store the hash value in this index
12288 --
12289 RAISE NO_DATA_FOUND;
12290 --
12291 ELSE
12292 --
12293 -- If it does exist make sure its the right one
12294 --
12295 IF g_cache_oipl_pff_el_rec(l_index).id <> p_oipl_id THEN
12296 --
12297 -- Loop through the hash using the jump routine to check further
12298 -- indexes
12299 --
12300 l_not_hash_found := FALSE;
12301 --
12302 WHILE NOT l_not_hash_found LOOP
12303 --
12304 l_index := l_index + g_hash_jump;
12305 --
12306 -- Check if the hash index exists, if not we can use it
12307 --
12308 IF NOT g_cache_oipl_pff_el_rec.EXISTS(l_index) THEN
12309 --
12310 -- Lets store the hash value in the index
12311 --
12312 RAISE NO_DATA_FOUND;
12313 --
12314 ELSE
12315 --
12316 -- Make sure the index is the correct one
12317 --
12318 IF g_cache_oipl_pff_el_rec(l_index).id = p_oipl_id THEN
12319 --
12320 -- We have a match so the hashed value has been stored before
12321 --
12322 l_not_hash_found := TRUE;
12323 --
12324 END IF;
12325 --
12326 END IF;
12327 --
12328 END LOOP;
12329 --
12330 END IF;
12331 --
12332 END IF;
12333 --
12334 IF p_old_val IS NOT NULL
12335 AND p_new_val IS NOT NULL THEN
12336 --
12337 RAISE NO_DATA_FOUND;
12338 --
12339 END IF;
12340 p_rec := g_cache_oipl_pff_el_rec(l_index);
12341 --
12342 -- hr_utility.set_location ('Leaving '||l_package,10);
12343 --
12344 EXCEPTION
12345 --
12346 WHEN NO_DATA_FOUND THEN
12347 --
12348 -- The record has not been cached yet so lets cache it
12349 --
12350 OPEN c1;
12351 --
12352 FETCH c1 INTO g_cache_oipl_pff_el_rec(l_index);
12353 IF c1%NOTFOUND THEN
12354 --
12355 if NOT g_cache_oipl_pff_el_rec.EXISTS(l_index) then
12356 g_cache_oipl_pff_el_rec(l_index).id := p_oipl_id;
12357 g_cache_oipl_pff_el_rec(l_index).exist := 'N';
12358 end if;
12359 --
12360 END IF;
12361 --
12362 p_rec := g_cache_oipl_pff_el_rec(l_index);
12363 --
12364 CLOSE c1;
12365 --
12366 END get_pct_oipl_elig;
12367 --
12368 PROCEDURE get_pct_plip_elig(
12369 p_plip_id IN NUMBER
12370 ,p_old_val in number default null
12371 ,p_new_val in number default null
12372 ,p_business_group_id IN NUMBER
12373 ,p_effective_date IN DATE
12374 ,p_rec OUT NOCOPY g_cache_pff_rec_obj) IS
12375 --
12376 l_package VARCHAR2(80) := g_package || '.get_pct_plip_elig';
12377 --
12378 -- Define Cursor
12379 --
12380 CURSOR c1 IS
12381 SELECT p_plip_id
12382 ,'Y'
12383 ,pff.use_prmry_asnt_only_flag
12384 ,pff.use_sum_of_all_asnts_flag
12385 ,pff.rndg_cd
12386 ,pff.rndg_rl
12387 ,pff.mn_pct_val
12388 ,pff.mx_pct_val
12389 FROM ben_pct_fl_tm_fctr pff
12390 ,ben_elig_pct_fl_tm_prte_f epf
12391 ,ben_eligy_prfl_f elp
12392 ,ben_prtn_elig_prfl_f cep
12393 ,ben_prtn_elig_f epa
12394 WHERE epa.plip_id = p_plip_id
12395 AND p_effective_date BETWEEN epa.effective_start_date
12396 AND epa.effective_end_date
12397 AND epa.prtn_elig_id = cep.prtn_elig_id
12398 AND p_effective_date BETWEEN cep.effective_start_date
12399 AND cep.effective_end_date
12400 AND cep.eligy_prfl_id = elp.eligy_prfl_id
12401 AND p_effective_date BETWEEN elp.effective_start_date
12402 AND elp.effective_end_date
12403 AND epf.eligy_prfl_id = elp.eligy_prfl_id
12404 AND p_effective_date BETWEEN epf.effective_start_date
12405 AND epf.effective_end_date
12406 AND epf.pct_fl_tm_fctr_id = pff.pct_fl_tm_fctr_id
12407 AND (
12408 (
12412 and p_new_val < decode(nvl(pff.mx_pct_val,p_new_val) ,
12409 p_new_val IS NOT NULL
12410 AND p_old_val IS NOT NULL
12411 AND p_new_val >= NVL(pff.mn_pct_val ,p_new_val)
12413 trunc(nvl(pff.mx_pct_val,p_new_val))
12414 ,decode(nvl(pff.mn_pct_val,p_new_val), trunc(nvl(pff.mn_pct_val,p_new_val)),
12415 nvl(pff.mx_pct_val,p_new_val)+1,nvl(pff.mx_pct_val,p_new_val)+0.000000001),
12416 nvl(pff.mx_pct_val,p_new_val)+0.000000001 )
12417 -- and p_old_val < pff.mn_pct_val
12418 )
12419 OR
12420 (
12421 p_new_val IS NOT NULL
12422 AND p_old_val IS NOT NULL
12423 AND
12424 (
12425 p_new_val < NVL(pff.mn_pct_val,p_new_val)
12426 OR
12427 p_new_val >= decode(nvl(pff.mx_pct_val,p_new_val) ,
12428 trunc(nvl(pff.mx_pct_val,p_new_val))
12429 ,decode(nvl(pff.mn_pct_val,p_new_val), trunc(nvl(pff.mn_pct_val,p_new_val)),
12430 nvl(pff.mx_pct_val,p_new_val)+1,nvl(pff.mx_pct_val,p_new_val)+0.000000001),
12431 nvl(pff.mx_pct_val,p_new_val)+0.000000001 )
12432 )
12433 AND p_old_val >= NVL(pff.mn_pct_val ,p_old_val)
12434 and p_old_val < decode(nvl(pff.mx_pct_val,p_old_val) ,
12435 trunc(nvl(pff.mx_pct_val,p_old_val))
12436 ,decode(nvl(pff.mn_pct_val,p_old_val), trunc(nvl(pff.mn_pct_val,p_old_val)),
12437 nvl(pff.mx_pct_val,p_old_val)+1,nvl(pff.mx_pct_val,p_old_val)+0.000000001),
12438 nvl(pff.mx_pct_val,p_old_val)+0.000000001 )
12439 )
12440 OR
12441 ( p_new_val IS NULL
12442 AND p_old_val IS NULL
12443 )
12444 );
12445
12446 --
12447 --
12448 l_index PLS_INTEGER;
12449 l_not_hash_found BOOLEAN;
12450 --
12451 BEGIN
12452 --
12453 -- hr_utility.set_location ('Entering '||l_package,10);
12454 --
12455 -- Steps to do process
12456 --
12457 -- 1) Try and get value from cache
12458 -- 2) If can get from cache then copy to output record
12459 -- 3) If can't get from cache do db hit and then
12460 -- copy to cache record and then copy to output record.
12461 --
12462 -- Get hashed index value
12463 --
12464 l_index := MOD(p_plip_id
12465 ,g_hash_key);
12466 --
12467 IF NOT g_cache_plip_pff_el_rec.EXISTS(l_index) THEN
12468 --
12469 -- Lets store the hash value in this index
12470 --
12471 RAISE NO_DATA_FOUND;
12472 --
12473 ELSE
12474 --
12475 -- If it does exist make sure its the right one
12476 --
12477 IF g_cache_plip_pff_el_rec(l_index).id <> p_plip_id THEN
12478 --
12479 -- Loop through the hash using the jump routine to check further
12480 -- indexes
12481 --
12482 l_not_hash_found := FALSE;
12483 --
12484 WHILE NOT l_not_hash_found LOOP
12485 --
12486 l_index := l_index + g_hash_jump;
12487 --
12488 -- Check if the hash index exists, if not we can use it
12489 --
12490 IF NOT g_cache_plip_pff_el_rec.EXISTS(l_index) THEN
12491 --
12492 -- Lets store the hash value in the index
12493 --
12494 RAISE NO_DATA_FOUND;
12495 --
12496 ELSE
12497 --
12498 -- Make sure the index is the correct one
12499 --
12500 IF g_cache_plip_pff_el_rec(l_index).id = p_plip_id THEN
12501 --
12502 -- We have a match so the hashed value has been stored before
12503 --
12504 l_not_hash_found := TRUE;
12505 --
12506 END IF;
12507 --
12508 END IF;
12509 --
12510 END LOOP;
12511 --
12512 END IF;
12513 --
12514 END IF;
12515 --
12516 IF p_old_val IS NOT NULL
12517 AND p_new_val IS NOT NULL THEN
12518 --
12519 RAISE NO_DATA_FOUND;
12520 --
12521 END IF;
12522 p_rec := g_cache_plip_pff_el_rec(l_index);
12523 --
12524 -- hr_utility.set_location ('Leaving '||l_package,10);
12525 --
12526 EXCEPTION
12527 --
12528 WHEN NO_DATA_FOUND THEN
12529 --
12530 -- The record has not been cached yet so lets cache it
12531 --
12532 OPEN c1;
12533 --
12534 FETCH c1 INTO g_cache_plip_pff_el_rec(l_index);
12535 IF c1%NOTFOUND THEN
12536 --
12537 if NOT g_cache_plip_pff_el_rec.EXISTS(l_index) then
12538 g_cache_plip_pff_el_rec(l_index).id := p_plip_id;
12539 g_cache_plip_pff_el_rec(l_index).exist := 'N';
12540 end if;
12541 --
12542 END IF;
12543 --
12547 --
12544 p_rec := g_cache_plip_pff_el_rec(l_index);
12545 --
12546 CLOSE c1;
12548 END get_pct_plip_elig;
12549 --
12550 PROCEDURE get_pct_ptip_elig(
12551 p_ptip_id IN NUMBER
12552 ,p_old_val in number default null
12553 ,p_new_val in number default null
12554 ,p_business_group_id IN NUMBER
12555 ,p_effective_date IN DATE
12556 ,p_rec OUT NOCOPY g_cache_pff_rec_obj) IS
12557 --
12558 l_package VARCHAR2(80) := g_package || '.get_pct_ptip_elig';
12559 --
12560 -- Define Cursor
12561 --
12562 CURSOR c1 IS
12563 SELECT p_ptip_id
12564 ,'Y'
12565 ,pff.use_prmry_asnt_only_flag
12566 ,pff.use_sum_of_all_asnts_flag
12567 ,pff.rndg_cd
12568 ,pff.rndg_rl
12569 ,pff.mn_pct_val
12570 ,pff.mx_pct_val
12571 FROM ben_pct_fl_tm_fctr pff
12572 ,ben_elig_pct_fl_tm_prte_f epf
12573 ,ben_eligy_prfl_f elp
12574 ,ben_prtn_elig_prfl_f cep
12575 ,ben_prtn_elig_f epa
12576 WHERE epa.ptip_id = p_ptip_id
12577 AND p_effective_date BETWEEN epa.effective_start_date
12578 AND epa.effective_end_date
12579 AND epa.prtn_elig_id = cep.prtn_elig_id
12580 AND p_effective_date BETWEEN cep.effective_start_date
12581 AND cep.effective_end_date
12582 AND cep.eligy_prfl_id = elp.eligy_prfl_id
12583 AND p_effective_date BETWEEN elp.effective_start_date
12584 AND elp.effective_end_date
12585 AND epf.eligy_prfl_id = elp.eligy_prfl_id
12586 AND p_effective_date BETWEEN epf.effective_start_date
12587 AND epf.effective_end_date
12588 AND epf.pct_fl_tm_fctr_id = pff.pct_fl_tm_fctr_id
12589 AND (
12590 (
12591 p_new_val IS NOT NULL
12592 AND p_old_val IS NOT NULL
12593 AND p_new_val >= NVL(pff.mn_pct_val ,p_new_val)
12594 and p_new_val < decode(nvl(pff.mx_pct_val,p_new_val) ,
12595 trunc(nvl(pff.mx_pct_val,p_new_val))
12596 ,decode(nvl(pff.mn_pct_val,p_new_val), trunc(nvl(pff.mn_pct_val,p_new_val)),
12597 nvl(pff.mx_pct_val,p_new_val)+1,nvl(pff.mx_pct_val,p_new_val)+0.000000001),
12598 nvl(pff.mx_pct_val,p_new_val)+0.000000001 )
12599 -- and p_old_val < pff.mn_pct_val
12600 )
12601 OR
12602 (
12603 p_new_val IS NOT NULL
12604 AND p_old_val IS NOT NULL
12605 AND
12606 (
12607 p_new_val < NVL(pff.mn_pct_val,p_new_val)
12608 OR
12609 p_new_val >= decode(nvl(pff.mx_pct_val,p_new_val) ,
12610 trunc(nvl(pff.mx_pct_val,p_new_val))
12611 ,decode(nvl(pff.mn_pct_val,p_new_val), trunc(nvl(pff.mn_pct_val,p_new_val)),
12612 nvl(pff.mx_pct_val,p_new_val)+1,nvl(pff.mx_pct_val,p_new_val)+0.000000001),
12613 nvl(pff.mx_pct_val,p_new_val)+0.000000001 )
12614 )
12615 AND p_old_val >= NVL(pff.mn_pct_val ,p_old_val)
12616 and p_old_val < decode(nvl(pff.mx_pct_val,p_old_val) ,
12617 trunc(nvl(pff.mx_pct_val,p_old_val))
12618 ,decode(nvl(pff.mn_pct_val,p_old_val), trunc(nvl(pff.mn_pct_val,p_old_val)),
12619 nvl(pff.mx_pct_val,p_old_val)+1,nvl(pff.mx_pct_val,p_old_val)+0.000000001),
12620 nvl(pff.mx_pct_val,p_old_val)+0.000000001 )
12621 )
12622 OR
12623 ( p_new_val IS NULL
12624 AND p_old_val IS NULL
12625 )
12626 );
12627
12628 --
12629 --
12630 l_index PLS_INTEGER;
12631 l_not_hash_found BOOLEAN;
12632 --
12633 BEGIN
12634 --
12635 -- hr_utility.set_location ('Entering '||l_package,10);
12636 --
12637 -- Steps to do process
12638 --
12639 -- 1) Try and get value from cache
12640 -- 2) If can get from cache then copy to output record
12641 -- 3) If can't get from cache do db hit and then
12642 -- copy to cache record and then copy to output record.
12643 --
12644 -- Get hashed index value
12645 --
12646 l_index := MOD(p_ptip_id
12647 ,g_hash_key);
12648 --
12649 IF NOT g_cache_ptip_pff_el_rec.EXISTS(l_index) THEN
12650 --
12651 -- Lets store the hash value in this index
12652 --
12653 RAISE NO_DATA_FOUND;
12654 --
12655 ELSE
12656 --
12657 -- If it does exist make sure its the right one
12658 --
12659 IF g_cache_ptip_pff_el_rec(l_index).id <> p_ptip_id THEN
12660 --
12661 -- Loop through the hash using the jump routine to check further
12662 -- indexes
12663 --
12664 l_not_hash_found := FALSE;
12665 --
12666 WHILE NOT l_not_hash_found LOOP
12670 -- Check if the hash index exists, if not we can use it
12667 --
12668 l_index := l_index + g_hash_jump;
12669 --
12671 --
12672 IF NOT g_cache_ptip_pff_el_rec.EXISTS(l_index) THEN
12673 --
12674 -- Lets store the hash value in the index
12675 --
12676 RAISE NO_DATA_FOUND;
12677 --
12678 ELSE
12679 --
12680 -- Make sure the index is the correct one
12681 --
12682 IF g_cache_ptip_pff_el_rec(l_index).id = p_ptip_id THEN
12683 --
12684 -- We have a match so the hashed value has been stored before
12685 --
12686 l_not_hash_found := TRUE;
12687 --
12688 END IF;
12689 --
12690 END IF;
12691 --
12692 END LOOP;
12693 --
12694 END IF;
12695 --
12696 END IF;
12697 --
12698 IF p_old_val IS NOT NULL
12699 AND p_new_val IS NOT NULL THEN
12700 --
12701 RAISE NO_DATA_FOUND;
12702 --
12703 END IF;
12704 p_rec := g_cache_ptip_pff_el_rec(l_index);
12705 --
12706 -- hr_utility.set_location ('Leaving '||l_package,10);
12707 --
12708 EXCEPTION
12709 --
12710 WHEN NO_DATA_FOUND THEN
12711 --
12712 -- The record has not been cached yet so lets cache it
12713 --
12714 OPEN c1;
12715 --
12716 FETCH c1 INTO g_cache_ptip_pff_el_rec(l_index);
12717 IF c1%NOTFOUND THEN
12718 --
12719 if NOT g_cache_ptip_pff_el_rec.EXISTS(l_index) then
12720 g_cache_ptip_pff_el_rec(l_index).id := p_ptip_id;
12721 g_cache_ptip_pff_el_rec(l_index).exist := 'N';
12722 end if;
12723 --
12724 END IF;
12725 --
12726 p_rec := g_cache_ptip_pff_el_rec(l_index);
12727 --
12728 CLOSE c1;
12729 --
12730 END get_pct_ptip_elig;
12731 --
12732 PROCEDURE get_pct_elig(
12733 p_pgm_id IN NUMBER
12734 ,p_pl_id IN NUMBER
12735 ,p_oipl_id IN NUMBER
12736 ,p_plip_id IN NUMBER
12737 ,p_ptip_id IN NUMBER
12738 ,p_old_val in number default null
12739 ,p_new_val in number default null
12740 ,p_business_group_id IN NUMBER
12741 ,p_effective_date IN DATE
12742 ,p_rec OUT NOCOPY g_cache_pff_rec_obj) IS
12743 --
12744 l_package VARCHAR2(80) := g_package || '.get_pct_elig';
12745 --
12746 BEGIN
12747 --
12748 -- hr_utility.set_location ('Entering '||l_package,10);
12749 --
12750 -- Derive which data type we are dealing with
12751 --
12752 IF p_pgm_id IS NOT NULL THEN
12753 --
12754 get_pct_pgm_elig(p_pgm_id=> p_pgm_id
12755 ,p_old_val => p_old_val
12756 ,p_new_val => p_new_val
12757 ,p_business_group_id => p_business_group_id
12758 ,p_effective_date => p_effective_date
12759 ,p_rec => p_rec);
12760 --
12761 ELSIF p_pl_id IS NOT NULL THEN
12762 --
12763 get_pct_pl_elig(p_pl_id=> p_pl_id
12764 ,p_old_val => p_old_val
12765 ,p_new_val => p_new_val
12766 ,p_business_group_id => p_business_group_id
12767 ,p_effective_date => p_effective_date
12768 ,p_rec => p_rec);
12769 --
12770 ELSIF p_oipl_id IS NOT NULL THEN
12771 --
12772 get_pct_oipl_elig(p_oipl_id=> p_oipl_id
12773 ,p_old_val => p_old_val
12774 ,p_new_val => p_new_val
12775 ,p_business_group_id => p_business_group_id
12776 ,p_effective_date => p_effective_date
12777 ,p_rec => p_rec);
12778 --
12779 ELSIF p_plip_id IS NOT NULL THEN
12780 --
12781 get_pct_plip_elig(p_plip_id=> p_plip_id
12782 ,p_old_val => p_old_val
12783 ,p_new_val => p_new_val
12784 ,p_business_group_id => p_business_group_id
12785 ,p_effective_date => p_effective_date
12786 ,p_rec => p_rec);
12787 --
12788 ELSIF p_ptip_id IS NOT NULL THEN
12789 --
12790 get_pct_ptip_elig(p_ptip_id=> p_ptip_id
12791 ,p_old_val => p_old_val
12792 ,p_new_val => p_new_val
12793 ,p_business_group_id => p_business_group_id
12794 ,p_effective_date => p_effective_date
12795 ,p_rec => p_rec);
12796 --
12797 END IF;
12798 --
12799 -- hr_utility.set_location ('Leaving '||l_package,10);
12800 --
12801 END get_pct_elig;
12802 --
12803 PROCEDURE get_pct_pgm_rate(
12804 p_pgm_id IN NUMBER
12805 ,p_old_val IN NUMBER DEFAULT NULL
12806 ,p_new_val IN NUMBER DEFAULT NULL
12807 ,p_business_group_id IN NUMBER
12808 ,p_effective_date IN DATE
12809 ,p_rec OUT NOCOPY g_cache_pff_rec_obj) IS
12810 --
12814 --
12811 l_package VARCHAR2(80) := g_package || '.get_pct_pgm_rate';
12812 l_old_val_1 NUMBER := p_old_val + 1;
12813 l_new_val_1 NUMBER := p_new_val + 1;
12815 -- Define Cursor
12816 --
12817 CURSOR c1 IS
12818 SELECT p_pgm_id
12819 ,'Y'
12820 ,pff.use_prmry_asnt_only_flag
12821 ,pff.use_sum_of_all_asnts_flag
12822 ,pff.rndg_cd
12823 ,pff.rndg_rl
12824 ,pff.mn_pct_val
12825 ,pff.mx_pct_val
12826 FROM ben_pct_fl_tm_fctr pff
12827 ,ben_pct_fl_tm_rt_f pfr
12828 ,ben_vrbl_rt_prfl_f vpf
12829 ,ben_acty_vrbl_rt_f avr
12830 ,ben_acty_base_rt_f abr
12831 WHERE abr.pgm_id = p_pgm_id
12832 AND p_effective_date BETWEEN abr.effective_start_date
12833 AND abr.effective_end_date
12834 AND abr.acty_base_rt_id = avr.acty_base_rt_id
12835 AND p_effective_date BETWEEN avr.effective_start_date
12836 AND avr.effective_end_date
12837 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
12838 AND p_effective_date BETWEEN vpf.effective_start_date
12839 AND vpf.effective_end_date
12840 AND vpf.vrbl_rt_prfl_id = pfr.vrbl_rt_prfl_id
12841 AND p_effective_date BETWEEN pfr.effective_start_date
12842 AND pfr.effective_end_date
12843 AND pfr.pct_fl_tm_fctr_id = pff.pct_fl_tm_fctr_id
12844 AND (
12845 (
12846 p_new_val IS NOT NULL
12847 AND p_old_val IS NOT NULL
12848 AND p_new_val >= NVL(pff.mn_pct_val
12849 ,p_new_val)
12850 AND (p_new_val*100) < (NVL(pff.mx_pct_val
12851 ,p_new_val)*100)+1 )
12852 OR (
12853 p_new_val IS NOT NULL
12854 AND p_old_val IS NOT NULL
12855 AND (
12856 p_new_val < NVL(pff.mn_pct_val
12857 ,p_new_val)
12858 OR (p_new_val*100) >= ( NVL(pff.mx_pct_val
12859 ,p_new_val)*100)+1 )
12860 AND p_old_val >= NVL(pff.mn_pct_val
12861 ,p_old_val)
12862 AND (p_old_val*100) < (NVL(pff.mx_pct_val
12863 ,p_old_val)*100)+1 )
12864 OR ( p_new_val IS NULL
12865 AND p_old_val IS NULL));
12866 -- PERFNEW. SPLIT TO 2 CURSORS C1 and C2.
12867 --UNION ALL
12868 CURSOR c2 IS
12869 SELECT p_pgm_id
12870 ,'Y'
12871 ,pff.use_prmry_asnt_only_flag
12872 ,pff.use_sum_of_all_asnts_flag
12873 ,pff.rndg_cd
12874 ,pff.rndg_rl
12875 ,pff.mn_pct_val
12876 ,pff.mx_pct_val
12877 FROM ben_pct_fl_tm_fctr pff
12878 --,ben_pct_fl_tm_rt_f pfr
12879 ,ben_elig_pct_fl_tm_prte_f epf
12880 ,ben_eligy_prfl_f elp
12881 ,ben_vrbl_rt_elig_prfl_f vep
12882 ,ben_vrbl_rt_prfl_f vpf
12883 ,ben_acty_vrbl_rt_f avr
12884 ,ben_acty_base_rt_f abr
12885 WHERE abr.pgm_id = p_pgm_id
12886 AND p_effective_date BETWEEN abr.effective_start_date
12887 AND abr.effective_end_date
12888 AND abr.acty_base_rt_id = avr.acty_base_rt_id
12889 AND p_effective_date BETWEEN avr.effective_start_date
12890 AND avr.effective_end_date
12891 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
12892 AND p_effective_date BETWEEN vpf.effective_start_date
12893 AND vpf.effective_end_date
12894 -- AND vpf.vrbl_rt_prfl_id = epf.vrbl_rt_prfl_id
12895 AND vpf.vrbl_rt_prfl_id = vep.vrbl_rt_prfl_id
12896 AND p_effective_date BETWEEN vep.effective_start_date
12897 AND vep.effective_end_date
12898 AND vep.eligy_prfl_id = elp.eligy_prfl_id
12899 AND p_effective_date BETWEEN elp.effective_start_date
12900 AND elp.effective_end_date
12901 AND epf.eligy_prfl_id = elp.eligy_prfl_id
12902 AND p_effective_date BETWEEN epf.effective_start_date
12903 AND epf.effective_end_date
12904 AND epf.pct_fl_tm_fctr_id = pff.pct_fl_tm_fctr_id
12905 AND (
12906 (
12907 p_new_val IS NOT NULL
12908 AND p_old_val IS NOT NULL
12909 AND p_new_val >= NVL(pff.mn_pct_val
12910 ,p_new_val)
12911 AND (p_new_val*100) < (NVL(pff.mx_pct_val
12912 ,p_new_val)*100)+1 )
12913 OR (
12914 p_new_val IS NOT NULL
12915 AND p_old_val IS NOT NULL
12916 AND (
12917 p_new_val < NVL(pff.mn_pct_val
12918 ,p_new_val)
12919 OR (p_new_val*100) >= ( NVL(pff.mx_pct_val
12923 AND (p_old_val*100) < (NVL(pff.mx_pct_val
12920 ,p_new_val)*100)+1 )
12921 AND p_old_val >= NVL(pff.mn_pct_val
12922 ,p_old_val)
12924 ,p_old_val)*100)+1 )
12925 OR ( p_new_val IS NULL
12926 AND p_old_val IS NULL));
12927 --
12928 --
12929 l_index PLS_INTEGER;
12930 l_not_hash_found BOOLEAN;
12931 l_c2notfound BOOLEAN;
12932 --
12933 BEGIN
12934 --
12935 -- hr_utility.set_location ('Entering '||l_package,10);
12936 --
12937 -- Steps to do process
12938 --
12939 -- 1) Try and get value from cache
12940 -- 2) If can get from cache then copy to output record
12941 -- 3) If can't get from cache do db hit and then
12942 -- copy to cache record and then copy to output record.
12943 --
12944 -- Get hashed index value
12945 --
12946 l_index := MOD(p_pgm_id
12947 ,g_hash_key);
12948 --
12949 IF NOT g_cache_pgm_pff_rt_rec.EXISTS(l_index) THEN
12950 --
12951 -- Lets store the hash value in this index
12952 --
12953 RAISE NO_DATA_FOUND;
12954 --
12955 ELSE
12956 --
12957 -- If it does exist make sure its the right one
12958 --
12959 IF g_cache_pgm_pff_rt_rec(l_index).id <> p_pgm_id THEN
12960 --
12961 -- Loop through the hash using the jump routine to check further
12962 -- indexes
12963 --
12964 l_not_hash_found := FALSE;
12965 --
12966 WHILE NOT l_not_hash_found LOOP
12967 --
12968 l_index := l_index + g_hash_jump;
12969 --
12970 -- Check if the hash index exists, if not we can use it
12971 --
12972 IF NOT g_cache_pgm_pff_rt_rec.EXISTS(l_index) THEN
12973 --
12974 -- Lets store the hash value in the index
12975 --
12976 RAISE NO_DATA_FOUND;
12977 --
12978 ELSE
12979 --
12980 -- Make sure the index is the correct one
12981 --
12982 IF g_cache_pgm_pff_rt_rec(l_index).id = p_pgm_id THEN
12983 --
12984 -- We have a match so the hashed value has been stored before
12985 --
12986 l_not_hash_found := TRUE;
12987 --
12988 END IF;
12989 --
12990 END IF;
12991 --
12992 END LOOP;
12993 --
12994 END IF;
12995 --
12996 END IF;
12997 --
12998 -- If p_old_val and p_new_val is set this means we are trying to retrieve
12999 -- the correct rate for the calculated value.
13000 -- Previously we just cached the first rate we
13001 -- found since we needed the determination code, the correct age,los code,etc
13002 -- By killing the cache and forcing the value to be removed we cache the
13003 -- correct rate profile for the case we need.
13004 --
13005 IF p_old_val IS NOT NULL
13006 AND p_new_val IS NOT NULL THEN
13007 --
13008 RAISE NO_DATA_FOUND;
13009 --
13010 END IF;
13011 --
13012 p_rec := g_cache_pgm_pff_rt_rec(l_index);
13013 --
13014 -- hr_utility.set_location ('Leaving '||l_package,10);
13015 --
13016 EXCEPTION
13017 --
13018 WHEN NO_DATA_FOUND THEN
13019 --
13020 -- The record has not been cached yet so lets cache it
13021 --
13022 OPEN c1;
13023 --
13024 FETCH c1 INTO g_cache_pgm_pff_rt_rec(l_index);
13025 -- PERFNEW
13026 IF c1%NOTFOUND THEN
13027 --
13028 l_c2notfound := false;
13029 OPEN c2;
13030 FETCH c2 INTO g_cache_pgm_pff_rt_rec(l_index);
13031 IF c2%NOTFOUND THEN
13032 --
13033 l_c2notfound := true;
13034 --
13035 END IF;
13036 CLOSE c2;
13037 --
13038 END IF;
13039 -- PERFNEW
13040 IF p_old_val IS NULL
13041 AND p_new_val IS NULL THEN
13042 --
13043 IF c1%NOTFOUND and l_c2notfound THEN -- PERFNEW
13044 --
13045 if NOT g_cache_pgm_pff_rt_rec.EXISTS(l_index) then
13046 g_cache_pgm_pff_rt_rec(l_index).id := p_pgm_id;
13047 g_cache_pgm_pff_rt_rec(l_index).exist := 'N';
13048 end if;
13049 --
13050 END IF;
13051 --
13052 END IF;
13053 --
13054 p_rec := g_cache_pgm_pff_rt_rec(l_index);
13055 --
13056 CLOSE c1;
13057 --
13058 END get_pct_pgm_rate;
13059 --
13060 PROCEDURE get_pct_pl_rate(
13061 p_pl_id IN NUMBER
13062 ,p_old_val IN NUMBER DEFAULT NULL
13063 ,p_new_val IN NUMBER DEFAULT NULL
13064 ,p_business_group_id IN NUMBER
13065 ,p_effective_date IN DATE
13066 ,p_rec OUT NOCOPY g_cache_pff_rec_obj) IS
13067 --
13071 --
13068 l_package VARCHAR2(80) := g_package || '.get_pct_pl_rate';
13069 l_old_val_1 NUMBER := p_old_val + 1;
13070 l_new_val_1 NUMBER := p_new_val + 1;
13072 -- Define Cursor
13073 --
13074 CURSOR c1 IS
13075 SELECT p_pl_id
13076 ,'Y'
13077 ,pff.use_prmry_asnt_only_flag
13078 ,pff.use_sum_of_all_asnts_flag
13079 ,pff.rndg_cd
13080 ,pff.rndg_rl
13081 ,pff.mn_pct_val
13082 ,pff.mx_pct_val
13083 FROM ben_pct_fl_tm_fctr pff
13084 ,ben_pct_fl_tm_rt_f pfr
13085 ,ben_vrbl_rt_prfl_f vpf
13086 ,ben_acty_vrbl_rt_f avr
13087 ,ben_acty_base_rt_f abr
13088 WHERE abr.pl_id = p_pl_id
13089 AND p_effective_date BETWEEN abr.effective_start_date
13090 AND abr.effective_end_date
13091 AND abr.acty_base_rt_id = avr.acty_base_rt_id
13092 AND p_effective_date BETWEEN avr.effective_start_date
13093 AND avr.effective_end_date
13094 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
13095 AND p_effective_date BETWEEN vpf.effective_start_date
13096 AND vpf.effective_end_date
13097 AND vpf.vrbl_rt_prfl_id = pfr.vrbl_rt_prfl_id
13098 AND p_effective_date BETWEEN pfr.effective_start_date
13099 AND pfr.effective_end_date
13100 AND pfr.pct_fl_tm_fctr_id = pff.pct_fl_tm_fctr_id
13101 AND (
13102 (
13103 p_new_val IS NOT NULL
13104 AND p_old_val IS NOT NULL
13105 AND p_new_val >= NVL(pff.mn_pct_val
13106 ,p_new_val)
13107 AND (p_new_val*100) < ( NVL(pff.mx_pct_val
13108 ,p_new_val)*100)+1 )
13109 OR (
13110 p_new_val IS NOT NULL
13111 AND p_old_val IS NOT NULL
13112 AND (
13113 p_new_val < NVL(pff.mn_pct_val
13114 ,p_new_val)
13115 OR (p_new_val*100) >= (NVL(pff.mx_pct_val
13116 ,p_new_val)*100)+1 )
13117 AND p_old_val >= NVL(pff.mn_pct_val
13118 ,p_old_val)
13119 AND (p_old_val*100) < ( NVL(pff.mx_pct_val
13120 ,p_old_val)*100)+1 )
13121 OR ( p_new_val IS NULL
13122 AND p_old_val IS NULL));
13123 -- PERFNEW. SPLIT TO 2 CURSORS C1 and C2.
13124 --UNION ALL
13125 CURSOR c2 IS
13126 SELECT p_pl_id
13127 ,'Y'
13128 ,pff.use_prmry_asnt_only_flag
13129 ,pff.use_sum_of_all_asnts_flag
13130 ,pff.rndg_cd
13131 ,pff.rndg_rl
13132 ,pff.mn_pct_val
13133 ,pff.mx_pct_val
13134 FROM ben_pct_fl_tm_fctr pff
13135 --,ben_pct_fl_tm_rt_f pfr
13136 ,ben_elig_pct_fl_tm_prte_f epf
13137 ,ben_eligy_prfl_f elp
13138 ,ben_vrbl_rt_elig_prfl_f vep
13139 ,ben_vrbl_rt_prfl_f vpf
13140 ,ben_acty_vrbl_rt_f avr
13141 ,ben_acty_base_rt_f abr
13142 WHERE abr.pl_id = p_pl_id
13143 AND p_effective_date BETWEEN abr.effective_start_date
13144 AND abr.effective_end_date
13145 AND abr.acty_base_rt_id = avr.acty_base_rt_id
13146 AND p_effective_date BETWEEN avr.effective_start_date
13147 AND avr.effective_end_date
13148 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
13149 AND p_effective_date BETWEEN vpf.effective_start_date
13150 AND vpf.effective_end_date
13151 -- AND vpf.vrbl_rt_prfl_id = epf.vrbl_rt_prfl_id
13152 AND vpf.vrbl_rt_prfl_id = vep.vrbl_rt_prfl_id
13153 AND p_effective_date BETWEEN vep.effective_start_date
13154 AND vep.effective_end_date
13155 AND vep.eligy_prfl_id = elp.eligy_prfl_id
13156 AND p_effective_date BETWEEN elp.effective_start_date
13157 AND elp.effective_end_date
13158 AND epf.eligy_prfl_id = elp.eligy_prfl_id
13159 AND p_effective_date BETWEEN epf.effective_start_date
13160 AND epf.effective_end_date
13161 AND epf.pct_fl_tm_fctr_id = pff.pct_fl_tm_fctr_id
13162 AND (
13163 (
13164 p_new_val IS NOT NULL
13165 AND p_old_val IS NOT NULL
13166 AND p_new_val >= NVL(pff.mn_pct_val
13167 ,p_new_val)
13168 AND (p_new_val*100) < ( NVL(pff.mx_pct_val
13169 ,p_new_val)*100)+1 )
13170 OR (
13171 p_new_val IS NOT NULL
13172 AND p_old_val IS NOT NULL
13173 AND (
13174 p_new_val < NVL(pff.mn_pct_val
13175 ,p_new_val)
13176 OR (p_new_val*100) >= (NVL(pff.mx_pct_val
13177 ,p_new_val)*100)+1 )
13181 ,p_old_val)*100)+1 )
13178 AND p_old_val >= NVL(pff.mn_pct_val
13179 ,p_old_val)
13180 AND (p_old_val*100) < ( NVL(pff.mx_pct_val
13182 OR ( p_new_val IS NULL
13183 AND p_old_val IS NULL));
13184 --
13185 --
13186 l_index PLS_INTEGER;
13187 l_not_hash_found BOOLEAN;
13188 l_c2notfound BOOLEAN;
13189 --
13190 BEGIN
13191 --
13192 -- hr_utility.set_location ('Entering '||l_package,10);
13193 --
13194 -- Steps to do process
13195 --
13196 -- 1) Try and get value from cache
13197 -- 2) If can get from cache then copy to output record
13198 -- 3) If can't get from cache do db hit and then
13199 -- copy to cache record and then copy to output record.
13200 --
13201 -- Get hashed index value
13202 --
13203 l_index := MOD(p_pl_id
13204 ,g_hash_key);
13205 --
13206 IF NOT g_cache_pl_pff_rt_rec.EXISTS(l_index) THEN
13207 --
13208 -- Lets store the hash value in this index
13209 --
13210 RAISE NO_DATA_FOUND;
13211 --
13212 ELSE
13213 --
13214 -- If it does exist make sure its the right one
13215 --
13216 IF g_cache_pl_pff_rt_rec(l_index).id <> p_pl_id THEN
13217 --
13218 -- Loop through the hash using the jump routine to check further
13219 -- indexes
13220 --
13221 l_not_hash_found := FALSE;
13222 --
13223 WHILE NOT l_not_hash_found LOOP
13224 --
13225 l_index := l_index + g_hash_jump;
13226 --
13227 -- Check if the hash index exists, if not we can use it
13228 --
13229 IF NOT g_cache_pl_pff_rt_rec.EXISTS(l_index) THEN
13230 --
13231 -- Lets store the hash value in the index
13232 --
13233 RAISE NO_DATA_FOUND;
13234 --
13235 ELSE
13236 --
13237 -- Make sure the index is the correct one
13238 --
13239 IF g_cache_pl_pff_rt_rec(l_index).id = p_pl_id THEN
13240 --
13241 -- We have a match so the hashed value has been stored before
13242 --
13243 l_not_hash_found := TRUE;
13244 --
13245 END IF;
13246 --
13247 END IF;
13248 --
13249 END LOOP;
13250 --
13251 END IF;
13252 --
13253 END IF;
13254 --
13255 -- If p_old_val and p_new_val is set this means we are trying to retrieve
13256 -- the correct rate for the calculated value.
13257 -- Previously we just cached the first rate we
13258 -- found since we needed the determination code, the correct age,los code,etc
13259 -- By killing the cache and forcing the value to be removed we cache the
13260 -- correct rate profile for the case we need.
13261 --
13262 IF p_old_val IS NOT NULL
13263 AND p_new_val IS NOT NULL THEN
13264 --
13265 RAISE NO_DATA_FOUND;
13266 --
13267 END IF;
13268 --
13269 p_rec := g_cache_pl_pff_rt_rec(l_index);
13270 --
13271 -- hr_utility.set_location ('Leaving '||l_package,10);
13272 --
13273 EXCEPTION
13274 --
13275 WHEN NO_DATA_FOUND THEN
13276 --
13277 -- The record has not been cached yet so lets cache it
13278 --
13279 OPEN c1;
13280 --
13281 FETCH c1 INTO g_cache_pl_pff_rt_rec(l_index);
13282 -- PERFNEW
13283 IF c1%NOTFOUND THEN
13284 --
13285 l_c2notfound := false;
13286 OPEN c2;
13287 FETCH c2 INTO g_cache_pl_pff_rt_rec(l_index);
13288 IF c2%NOTFOUND THEN
13289 --
13290 l_c2notfound := true;
13291 --
13292 END IF;
13293 CLOSE c2;
13294 --
13295 END IF;
13296 -- PERFNEW
13297 IF p_old_val IS NULL
13298 AND p_new_val IS NULL THEN
13299 --
13300 IF c1%NOTFOUND and l_c2notfound THEN -- PERFNEW
13301 --
13302 if NOT g_cache_pl_pff_rt_rec.EXISTS(l_index) then
13303 g_cache_pl_pff_rt_rec(l_index).id := p_pl_id;
13304 g_cache_pl_pff_rt_rec(l_index).exist := 'N';
13305 end if;
13306 --
13307 END IF;
13308 --
13309 END IF;
13310 --
13311 p_rec := g_cache_pl_pff_rt_rec(l_index);
13312 --
13313 CLOSE c1;
13314 --
13315 END get_pct_pl_rate;
13316 --
13317 PROCEDURE get_pct_oipl_rate(
13318 p_oipl_id IN NUMBER
13319 ,p_old_val IN NUMBER DEFAULT NULL
13320 ,p_new_val IN NUMBER DEFAULT NULL
13321 ,p_business_group_id IN NUMBER
13322 ,p_effective_date IN DATE
13323 ,p_rec OUT NOCOPY g_cache_pff_rec_obj) IS
13324 --
13325 l_package VARCHAR2(80) := g_package || '.get_pct_oipl_rate';
13329 l_opt_id NUMBER;
13326 l_old_val_1 NUMBER := p_old_val + 1;
13327 l_new_val_1 NUMBER := p_new_val + 1;
13328 --
13330 --
13331 -- Define Cursor
13332 --
13333 CURSOR c1 IS
13334 SELECT p_oipl_id
13335 ,'Y'
13336 ,pff.use_prmry_asnt_only_flag
13337 ,pff.use_sum_of_all_asnts_flag
13338 ,pff.rndg_cd
13339 ,pff.rndg_rl
13340 ,pff.mn_pct_val
13341 ,pff.mx_pct_val
13342 FROM ben_pct_fl_tm_fctr pff
13343 ,ben_pct_fl_tm_rt_f pfr
13344 ,ben_vrbl_rt_prfl_f vpf
13345 ,ben_acty_vrbl_rt_f avr
13346 ,ben_acty_base_rt_f abr
13347 WHERE ( abr.oipl_id = p_oipl_id
13348 --
13349 --START Option level Rates Enhancements
13350 or ( abr.opt_id = l_opt_id and
13351 not exists (select null from ben_acty_base_rt_f abr1
13352 where abr1.oipl_id = p_oipl_id )))
13353 --END Option level Rates Enhancements
13354 --
13355 AND p_effective_date BETWEEN abr.effective_start_date
13356 AND abr.effective_end_date
13357 AND abr.acty_base_rt_id = avr.acty_base_rt_id
13358 AND p_effective_date BETWEEN avr.effective_start_date
13359 AND avr.effective_end_date
13360 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
13361 AND p_effective_date BETWEEN vpf.effective_start_date
13362 AND vpf.effective_end_date
13363 AND vpf.vrbl_rt_prfl_id = pfr.vrbl_rt_prfl_id
13364 AND p_effective_date BETWEEN pfr.effective_start_date
13365 AND pfr.effective_end_date
13366 AND pfr.pct_fl_tm_fctr_id = pff.pct_fl_tm_fctr_id
13367 AND (
13368 (
13369 p_new_val IS NOT NULL
13370 AND p_old_val IS NOT NULL
13371 AND p_new_val >= NVL(pff.mn_pct_val
13372 ,p_new_val)
13373 AND (p_new_val*100) < ( NVL(pff.mx_pct_val
13374 ,p_new_val)*100)+1)
13375 OR (
13376 p_new_val IS NOT NULL
13377 AND p_old_val IS NOT NULL
13378 AND (
13379 p_new_val < NVL(pff.mn_pct_val
13380 ,p_new_val)
13381 OR (p_new_val*100) >= (NVL(pff.mx_pct_val
13382 ,p_new_val)*100)+1)
13383 AND p_old_val >= NVL(pff.mn_pct_val
13384 ,p_old_val)
13385 AND (p_old_val*100) <( NVL(pff.mx_pct_val
13386 ,p_old_val)*100)+1)
13387 OR ( p_new_val IS NULL
13388 AND p_old_val IS NULL));
13389 -- PERFNEW. SPLIT TO 2 CURSORS C1 and C2.
13390 --UNION ALL
13391 CURSOR c2 IS
13392 SELECT p_oipl_id
13393 ,'Y'
13394 ,pff.use_prmry_asnt_only_flag
13395 ,pff.use_sum_of_all_asnts_flag
13396 ,pff.rndg_cd
13397 ,pff.rndg_rl
13398 ,pff.mn_pct_val
13399 ,pff.mx_pct_val
13400 FROM ben_pct_fl_tm_fctr pff
13401 --,ben_pct_fl_tm_rt_f pfr
13402 ,ben_elig_pct_fl_tm_prte_f epf
13403 ,ben_eligy_prfl_f elp
13404 ,ben_vrbl_rt_elig_prfl_f vep
13405 ,ben_vrbl_rt_prfl_f vpf
13406 ,ben_acty_vrbl_rt_f avr
13407 ,ben_acty_base_rt_f abr
13408 WHERE ( abr.oipl_id = p_oipl_id
13409 --
13410 --START Option level Rates Enhancements
13411 or ( abr.opt_id = l_opt_id and
13412 not exists (select null from ben_acty_base_rt_f abr1
13413 where abr1.oipl_id = p_oipl_id )))
13414 --END Option level Rates Enhancements
13415 --
13416 AND p_effective_date BETWEEN abr.effective_start_date
13417 AND abr.effective_end_date
13418 AND abr.acty_base_rt_id = avr.acty_base_rt_id
13419 AND p_effective_date BETWEEN avr.effective_start_date
13420 AND avr.effective_end_date
13421 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
13422 AND p_effective_date BETWEEN vpf.effective_start_date
13423 AND vpf.effective_end_date
13424 -- AND vpf.vrbl_rt_prfl_id = epf.vrbl_rt_prfl_id
13425 AND vpf.vrbl_rt_prfl_id = vep.vrbl_rt_prfl_id
13426 AND p_effective_date BETWEEN vep.effective_start_date
13427 AND vep.effective_end_date
13428 AND vep.eligy_prfl_id = elp.eligy_prfl_id
13429 AND p_effective_date BETWEEN elp.effective_start_date
13430 AND elp.effective_end_date
13431 AND epf.eligy_prfl_id = elp.eligy_prfl_id
13432 AND p_effective_date BETWEEN epf.effective_start_date
13433 AND epf.effective_end_date
13434 AND epf.pct_fl_tm_fctr_id = pff.pct_fl_tm_fctr_id
13435 AND (
13436 (
13437 p_new_val IS NOT NULL
13438 AND p_old_val IS NOT NULL
13439 AND p_new_val >= NVL(pff.mn_pct_val
13440 ,p_new_val)
13444 p_new_val IS NOT NULL
13441 AND (p_new_val*100) < ( NVL(pff.mx_pct_val
13442 ,p_new_val)*100)+1)
13443 OR (
13445 AND p_old_val IS NOT NULL
13446 AND (
13447 p_new_val < NVL(pff.mn_pct_val
13448 ,p_new_val)
13449 OR (p_new_val*100) >= (NVL(pff.mx_pct_val
13450 ,p_new_val)*100)+1)
13451 AND p_old_val >= NVL(pff.mn_pct_val
13452 ,p_old_val)
13453 AND (p_old_val*100) <( NVL(pff.mx_pct_val
13454 ,p_old_val)*100)+1)
13455 OR ( p_new_val IS NULL
13456 AND p_old_val IS NULL));
13457 --
13458 --
13459 l_index PLS_INTEGER;
13460 l_not_hash_found BOOLEAN;
13461 l_c2notfound BOOLEAN;
13462 --
13463 BEGIN
13464 --
13465 -- hr_utility.set_location ('Entering '||l_package,10);
13466 --
13467 -- Steps to do process
13468 --
13469 -- 1) Try and get value from cache
13470 -- 2) If can get from cache then copy to output record
13471 -- 3) If can't get from cache do db hit and then
13472 -- copy to cache record and then copy to output record.
13473 --
13474 -- Get hashed index value
13475 --
13476 l_index := MOD(p_oipl_id
13477 ,g_hash_key);
13478 --
13479 IF NOT g_cache_oipl_pff_rt_rec.EXISTS(l_index) THEN
13480 --
13481 -- Lets store the hash value in this index
13482 --
13483 RAISE NO_DATA_FOUND;
13484 --
13485 ELSE
13486 --
13487 -- If it does exist make sure its the right one
13488 --
13489 IF g_cache_oipl_pff_rt_rec(l_index).id <> p_oipl_id THEN
13490 --
13491 -- Loop through the hash using the jump routine to check further
13492 -- indexes
13493 --
13494 l_not_hash_found := FALSE;
13495 --
13496 WHILE NOT l_not_hash_found LOOP
13497 --
13498 l_index := l_index + g_hash_jump;
13499 --
13500 -- Check if the hash index exists, if not we can use it
13501 --
13502 IF NOT g_cache_oipl_pff_rt_rec.EXISTS(l_index) THEN
13503 --
13504 -- Lets store the hash value in the index
13505 --
13506 RAISE NO_DATA_FOUND;
13507 --
13508 ELSE
13509 --
13510 -- Make sure the index is the correct one
13511 --
13512 IF g_cache_oipl_pff_rt_rec(l_index).id = p_oipl_id THEN
13513 --
13514 -- We have a match so the hashed value has been stored before
13515 --
13516 l_not_hash_found := TRUE;
13517 --
13518 END IF;
13519 --
13520 END IF;
13521 --
13522 END LOOP;
13523 --
13524 END IF;
13525 --
13526 END IF;
13527 --
13528 -- If p_old_val and p_new_val is set this means we are trying to retrieve
13529 -- the correct rate for the calculated value.
13530 -- Previously we just cached the first rate we
13531 -- found since we needed the determination code, the correct age,los code,etc
13532 -- By killing the cache and forcing the value to be removed we cache the
13533 -- correct rate profile for the case we need.
13534 --
13535 IF p_old_val IS NOT NULL
13536 AND p_new_val IS NOT NULL THEN
13537 --
13538 RAISE NO_DATA_FOUND;
13539 --
13540 END IF;
13541 --
13542 p_rec := g_cache_oipl_pff_rt_rec(l_index);
13543 --
13544 -- hr_utility.set_location ('Leaving '||l_package,10);
13545 --
13546 EXCEPTION
13547 --
13548 WHEN NO_DATA_FOUND THEN
13549 --
13550 -- The record has not been cached yet so lets cache it
13551 -- Option level rates enhancement
13552 l_opt_id := get_opt_id(p_oipl_id,p_effective_date);
13553 --
13554 OPEN c1;
13555 --
13556 FETCH c1 INTO g_cache_oipl_pff_rt_rec(l_index);
13557 -- PERFNEW
13558 IF c1%NOTFOUND THEN
13559 --
13560 l_c2notfound := false;
13561 OPEN c2;
13562 FETCH c2 INTO g_cache_oipl_pff_rt_rec(l_index);
13563 IF c2%NOTFOUND THEN
13564 --
13565 l_c2notfound := true;
13566 --
13567 END IF;
13568 CLOSE c2;
13569 --
13570 END IF;
13571 -- PERFNEW
13572 IF p_old_val IS NULL
13573 AND p_new_val IS NULL THEN
13574 --
13575 IF c1%NOTFOUND and l_c2notfound THEN -- PERFNEW
13576 --
13577 if NOT g_cache_oipl_pff_rt_rec.EXISTS(l_index) then
13578 g_cache_oipl_pff_rt_rec(l_index).id := p_oipl_id;
13579 g_cache_oipl_pff_rt_rec(l_index).exist := 'N';
13580 end if;
13581 --
13582 END IF;
13583 --
13584 END IF;
13585 --
13589 --
13586 p_rec := g_cache_oipl_pff_rt_rec(l_index);
13587 --
13588 CLOSE c1;
13590 END get_pct_oipl_rate;
13591 --
13592 PROCEDURE get_pct_plip_rate(
13593 p_plip_id IN NUMBER
13594 ,p_old_val IN NUMBER DEFAULT NULL
13595 ,p_new_val IN NUMBER DEFAULT NULL
13596 ,p_business_group_id IN NUMBER
13597 ,p_effective_date IN DATE
13598 ,p_rec OUT NOCOPY g_cache_pff_rec_obj) IS
13599 --
13600 l_package VARCHAR2(80) := g_package || '.get_pct_plip_rate';
13601 l_old_val_1 NUMBER := p_old_val + 1;
13602 l_new_val_1 NUMBER := p_new_val + 1;
13603 --
13604 -- Define Cursor
13605 --
13606 CURSOR c1 IS
13607 SELECT p_plip_id
13608 ,'Y'
13609 ,pff.use_prmry_asnt_only_flag
13610 ,pff.use_sum_of_all_asnts_flag
13611 ,pff.rndg_cd
13612 ,pff.rndg_rl
13613 ,pff.mn_pct_val
13614 ,pff.mx_pct_val
13615 FROM ben_pct_fl_tm_fctr pff
13616 ,ben_pct_fl_tm_rt_f pfr
13617 ,ben_vrbl_rt_prfl_f vpf
13618 ,ben_acty_vrbl_rt_f avr
13619 ,ben_acty_base_rt_f abr
13620 WHERE abr.plip_id = p_plip_id
13621 AND p_effective_date BETWEEN abr.effective_start_date
13622 AND abr.effective_end_date
13623 AND abr.acty_base_rt_id = avr.acty_base_rt_id
13624 AND p_effective_date BETWEEN avr.effective_start_date
13625 AND avr.effective_end_date
13626 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
13627 AND p_effective_date BETWEEN vpf.effective_start_date
13628 AND vpf.effective_end_date
13629 AND vpf.vrbl_rt_prfl_id = pfr.vrbl_rt_prfl_id
13630 AND p_effective_date BETWEEN pfr.effective_start_date
13631 AND pfr.effective_end_date
13632 AND pfr.pct_fl_tm_fctr_id = pff.pct_fl_tm_fctr_id
13633 AND (
13634 (
13635 p_new_val IS NOT NULL
13636 AND p_old_val IS NOT NULL
13637 AND p_new_val >= NVL(pff.mn_pct_val
13638 ,p_new_val)
13639 AND (p_new_val*100) < (NVL(pff.mx_pct_val
13640 ,p_new_val)*100)+1)
13641 OR (
13642 p_new_val IS NOT NULL
13643 AND p_old_val IS NOT NULL
13644 AND (
13645 p_new_val < NVL(pff.mn_pct_val
13646 ,p_new_val)
13647 OR (p_new_val*100) >= ( NVL(pff.mx_pct_val
13648 ,p_new_val)*100)+1)
13649 AND p_old_val >= NVL(pff.mn_pct_val
13650 ,p_old_val)
13651 AND (p_old_val*100) < (NVL(pff.mx_pct_val
13652 ,p_old_val)*100)+1)
13653 OR ( p_new_val IS NULL
13654 AND p_old_val IS NULL));
13655 -- PERFNEW. SPLIT TO 2 CURSORS C1 and C2.
13656 --UNION ALL
13657 CURSOR c2 IS
13658 SELECT p_plip_id
13659 ,'Y'
13660 ,pff.use_prmry_asnt_only_flag
13661 ,pff.use_sum_of_all_asnts_flag
13662 ,pff.rndg_cd
13663 ,pff.rndg_rl
13664 ,pff.mn_pct_val
13665 ,pff.mx_pct_val
13666 FROM ben_pct_fl_tm_fctr pff
13667 --,ben_pct_fl_tm_rt_f pfr
13668 ,ben_elig_pct_fl_tm_prte_f epf
13669 ,ben_eligy_prfl_f elp
13670 ,ben_vrbl_rt_elig_prfl_f vep
13671 ,ben_vrbl_rt_prfl_f vpf
13672 ,ben_acty_vrbl_rt_f avr
13673 ,ben_acty_base_rt_f abr
13674 WHERE abr.plip_id = p_plip_id
13675 AND p_effective_date BETWEEN abr.effective_start_date
13676 AND abr.effective_end_date
13677 AND abr.acty_base_rt_id = avr.acty_base_rt_id
13678 AND p_effective_date BETWEEN avr.effective_start_date
13679 AND avr.effective_end_date
13680 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
13681 AND p_effective_date BETWEEN vpf.effective_start_date
13682 AND vpf.effective_end_date
13683 -- AND vpf.vrbl_rt_prfl_id = epf.vrbl_rt_prfl_id
13684 AND vpf.vrbl_rt_prfl_id = vep.vrbl_rt_prfl_id
13685 AND p_effective_date BETWEEN vep.effective_start_date
13686 AND vep.effective_end_date
13687 AND vep.eligy_prfl_id = elp.eligy_prfl_id
13688 AND p_effective_date BETWEEN elp.effective_start_date
13689 AND elp.effective_end_date
13690 AND epf.eligy_prfl_id = elp.eligy_prfl_id
13691 AND p_effective_date BETWEEN epf.effective_start_date
13692 AND epf.effective_end_date
13693 AND epf.pct_fl_tm_fctr_id = pff.pct_fl_tm_fctr_id
13694 AND (
13695 (
13696 p_new_val IS NOT NULL
13697 AND p_old_val IS NOT NULL
13698 AND p_new_val >= NVL(pff.mn_pct_val
13699 ,p_new_val)
13703 p_new_val IS NOT NULL
13700 AND (p_new_val*100) < (NVL(pff.mx_pct_val
13701 ,p_new_val)*100)+1)
13702 OR (
13704 AND p_old_val IS NOT NULL
13705 AND (
13706 p_new_val < NVL(pff.mn_pct_val
13707 ,p_new_val)
13708 OR (p_new_val*100) >= ( NVL(pff.mx_pct_val
13709 ,p_new_val)*100)+1)
13710 AND p_old_val >= NVL(pff.mn_pct_val
13711 ,p_old_val)
13712 AND (p_old_val*100) < (NVL(pff.mx_pct_val
13713 ,p_old_val)*100)+1)
13714 OR ( p_new_val IS NULL
13715 AND p_old_val IS NULL));
13716 --
13717 --
13718 l_index PLS_INTEGER;
13719 l_not_hash_found BOOLEAN;
13720 l_c2notfound BOOLEAN;
13721 --
13722 BEGIN
13723 --
13724 -- hr_utility.set_location ('Entering '||l_package,10);
13725 --
13726 -- Steps to do process
13727 --
13728 -- 1) Try and get value from cache
13729 -- 2) If can get from cache then copy to output record
13730 -- 3) If can't get from cache do db hit and then
13731 -- copy to cache record and then copy to output record.
13732 --
13733 -- Get hashed index value
13734 --
13735 l_index := MOD(p_plip_id
13736 ,g_hash_key);
13737 --
13738 IF NOT g_cache_plip_pff_rt_rec.EXISTS(l_index) THEN
13739 --
13740 -- Lets store the hash value in this index
13741 --
13742 RAISE NO_DATA_FOUND;
13743 --
13744 ELSE
13745 --
13746 -- If it does exist make sure its the right one
13747 --
13748 IF g_cache_plip_pff_rt_rec(l_index).id <> p_plip_id THEN
13749 --
13750 -- Loop through the hash using the jump routine to check further
13751 -- indexes
13752 --
13753 l_not_hash_found := FALSE;
13754 --
13755 WHILE NOT l_not_hash_found LOOP
13756 --
13757 l_index := l_index + g_hash_jump;
13758 --
13759 -- Check if the hash index exists, if not we can use it
13760 --
13761 IF NOT g_cache_plip_pff_rt_rec.EXISTS(l_index) THEN
13762 --
13763 -- Lets store the hash value in the index
13764 --
13765 RAISE NO_DATA_FOUND;
13766 --
13767 ELSE
13768 --
13769 -- Make sure the index is the correct one
13770 --
13771 IF g_cache_plip_pff_rt_rec(l_index).id = p_plip_id THEN
13772 --
13773 -- We have a match so the hashed value has been stored before
13774 --
13775 l_not_hash_found := TRUE;
13776 --
13777 END IF;
13778 --
13779 END IF;
13780 --
13781 END LOOP;
13782 --
13783 END IF;
13784 --
13785 END IF;
13786 --
13787 -- If p_old_val and p_new_val is set this means we are trying to retrieve
13788 -- the correct rate for the calculated value.
13789 -- Previously we just cached the first rate we
13790 -- found since we needed the determination code, the correct age,los code,etc
13791 -- By killing the cache and forcing the value to be removed we cache the
13792 -- correct rate profile for the case we need.
13793 --
13794 IF p_old_val IS NOT NULL
13795 AND p_new_val IS NOT NULL THEN
13796 --
13797 RAISE NO_DATA_FOUND;
13798 --
13799 END IF;
13800 --
13801 p_rec := g_cache_plip_pff_rt_rec(l_index);
13802 --
13803 -- hr_utility.set_location ('Leaving '||l_package,10);
13804 --
13805 EXCEPTION
13806 --
13807 WHEN NO_DATA_FOUND THEN
13808 --
13809 -- The record has not been cached yet so lets cache it
13810 --
13811 OPEN c1;
13812 --
13813 FETCH c1 INTO g_cache_plip_pff_rt_rec(l_index);
13814 -- PERFNEW
13815 IF c1%NOTFOUND THEN
13816 --
13817 l_c2notfound := false;
13818 OPEN c2;
13819 FETCH c2 INTO g_cache_plip_pff_rt_rec(l_index);
13820 IF c2%NOTFOUND THEN
13821 --
13822 l_c2notfound := true;
13823 --
13824 END IF;
13825 CLOSE c2;
13826 --
13827 END IF;
13828 -- PERFNEW
13829 IF p_old_val IS NULL
13830 AND p_new_val IS NULL THEN
13831 --
13832 IF c1%NOTFOUND and l_c2notfound THEN -- PERFNEW
13833 --
13834 if NOT g_cache_plip_pff_rt_rec.EXISTS(l_index) then
13835 g_cache_plip_pff_rt_rec(l_index).id := p_plip_id;
13836 g_cache_plip_pff_rt_rec(l_index).exist := 'N';
13837 end if;
13838 --
13839 END IF;
13840 --
13841 END IF;
13842 --
13843 p_rec := g_cache_plip_pff_rt_rec(l_index);
13844 --
13845 CLOSE c1;
13846 --
13847 END get_pct_plip_rate;
13848 --
13849 PROCEDURE get_pct_ptip_rate(
13853 ,p_business_group_id IN NUMBER
13850 p_ptip_id IN NUMBER
13851 ,p_old_val IN NUMBER DEFAULT NULL
13852 ,p_new_val IN NUMBER DEFAULT NULL
13854 ,p_effective_date IN DATE
13855 ,p_rec OUT NOCOPY g_cache_pff_rec_obj) IS
13856 --
13857 l_package VARCHAR2(80) := g_package || '.get_pct_ptip_rate';
13858 l_old_val_1 NUMBER := p_old_val + 1;
13859 l_new_val_1 NUMBER := p_new_val + 1;
13860 --
13861 -- Define Cursor
13862 --
13863 CURSOR c1 IS
13864 SELECT p_ptip_id
13865 ,'Y'
13866 ,pff.use_prmry_asnt_only_flag
13867 ,pff.use_sum_of_all_asnts_flag
13868 ,pff.rndg_cd
13869 ,pff.rndg_rl
13870 ,pff.mn_pct_val
13871 ,pff.mx_pct_val
13872 FROM ben_pct_fl_tm_fctr pff
13873 ,ben_pct_fl_tm_rt_f pfr
13874 ,ben_vrbl_rt_prfl_f vpf
13875 ,ben_acty_vrbl_rt_f avr
13876 ,ben_acty_base_rt_f abr
13877 WHERE abr.ptip_id = p_ptip_id
13878 AND p_effective_date BETWEEN abr.effective_start_date
13879 AND abr.effective_end_date
13880 AND abr.acty_base_rt_id = avr.acty_base_rt_id
13881 AND p_effective_date BETWEEN avr.effective_start_date
13882 AND avr.effective_end_date
13883 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
13884 AND p_effective_date BETWEEN vpf.effective_start_date
13885 AND vpf.effective_end_date
13886 AND vpf.vrbl_rt_prfl_id = pfr.vrbl_rt_prfl_id
13887 AND p_effective_date BETWEEN pfr.effective_start_date
13888 AND pfr.effective_end_date
13889 AND pfr.pct_fl_tm_fctr_id = pff.pct_fl_tm_fctr_id
13890 AND (
13891 (
13892 p_new_val IS NOT NULL
13893 AND p_old_val IS NOT NULL
13894 AND p_new_val >= NVL(pff.mn_pct_val
13895 ,p_new_val)
13896 AND (p_new_val*100) < (NVL(pff.mx_pct_val
13897 ,p_new_val)*100)+1)
13898 OR (
13899 p_new_val IS NOT NULL
13900 AND p_old_val IS NOT NULL
13901 AND (
13902 p_new_val < NVL(pff.mn_pct_val
13903 ,p_new_val)
13904 OR (p_new_val*100) >= (NVL(pff.mx_pct_val
13905 ,p_new_val)*100)+1)
13906 AND p_old_val >= NVL(pff.mn_pct_val
13907 ,p_old_val)
13908 AND (p_old_val*100) < ( NVL(pff.mx_pct_val
13909 ,p_old_val)*100)+1)
13910 OR ( p_new_val IS NULL
13911 AND p_old_val IS NULL));
13912 -- PERFNEW. SPLIT TO 2 CURSORS C1 and C2.
13913 --UNION ALL
13914 CURSOR c2 IS
13915 SELECT p_ptip_id
13916 ,'Y'
13917 ,pff.use_prmry_asnt_only_flag
13918 ,pff.use_sum_of_all_asnts_flag
13919 ,pff.rndg_cd
13920 ,pff.rndg_rl
13921 ,pff.mn_pct_val
13922 ,pff.mx_pct_val
13923 FROM ben_pct_fl_tm_fctr pff
13924 --,ben_pct_fl_tm_rt_f pfr
13925 ,ben_elig_pct_fl_tm_prte_f epf
13926 ,ben_eligy_prfl_f elp
13927 ,ben_vrbl_rt_elig_prfl_f vep
13928 ,ben_vrbl_rt_prfl_f vpf
13929 ,ben_acty_vrbl_rt_f avr
13930 ,ben_acty_base_rt_f abr
13931 WHERE abr.ptip_id = p_ptip_id
13932 AND p_effective_date BETWEEN abr.effective_start_date
13933 AND abr.effective_end_date
13934 AND abr.acty_base_rt_id = avr.acty_base_rt_id
13935 AND p_effective_date BETWEEN avr.effective_start_date
13936 AND avr.effective_end_date
13937 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
13938 AND p_effective_date BETWEEN vpf.effective_start_date
13939 AND vpf.effective_end_date
13940 -- AND vpf.vrbl_rt_prfl_id = epf.vrbl_rt_prfl_id
13941 AND vpf.vrbl_rt_prfl_id = vep.vrbl_rt_prfl_id
13942 AND p_effective_date BETWEEN vep.effective_start_date
13943 AND vep.effective_end_date
13944 AND vep.eligy_prfl_id = elp.eligy_prfl_id
13945 AND p_effective_date BETWEEN elp.effective_start_date
13946 AND elp.effective_end_date
13947 AND epf.eligy_prfl_id = elp.eligy_prfl_id
13948 AND p_effective_date BETWEEN epf.effective_start_date
13949 AND epf.effective_end_date
13950 AND epf.pct_fl_tm_fctr_id = pff.pct_fl_tm_fctr_id
13951 AND (
13952 (
13953 p_new_val IS NOT NULL
13954 AND p_old_val IS NOT NULL
13955 AND p_new_val >= NVL(pff.mn_pct_val
13956 ,p_new_val)
13957 AND (p_new_val*100) < (NVL(pff.mx_pct_val
13958 ,p_new_val)*100)+1)
13959 OR (
13963 p_new_val < NVL(pff.mn_pct_val
13960 p_new_val IS NOT NULL
13961 AND p_old_val IS NOT NULL
13962 AND (
13964 ,p_new_val)
13965 OR (p_new_val*100) >= (NVL(pff.mx_pct_val
13966 ,p_new_val)*100)+1)
13967 AND p_old_val >= NVL(pff.mn_pct_val
13968 ,p_old_val)
13969 AND (p_old_val*100) < ( NVL(pff.mx_pct_val
13970 ,p_old_val)*100)+1)
13971 OR ( p_new_val IS NULL
13972 AND p_old_val IS NULL));
13973 --
13974 --
13975 l_index PLS_INTEGER;
13976 l_not_hash_found BOOLEAN;
13977 l_c2notfound BOOLEAN;
13978 --
13979 BEGIN
13980 --
13981 -- hr_utility.set_location ('Entering '||l_package,10);
13982 --
13983 -- Steps to do process
13984 --
13985 -- 1) Try and get value from cache
13986 -- 2) If can get from cache then copy to output record
13987 -- 3) If can't get from cache do db hit and then
13988 -- copy to cache record and then copy to output record.
13989 --
13990 -- Get hashed index value
13991 --
13992 l_index := MOD(p_ptip_id
13993 ,g_hash_key);
13994 --
13995 IF NOT g_cache_ptip_pff_rt_rec.EXISTS(l_index) THEN
13996 --
13997 -- Lets store the hash value in this index
13998 --
13999 RAISE NO_DATA_FOUND;
14000 --
14001 ELSE
14002 --
14003 -- If it does exist make sure its the right one
14004 --
14005 IF g_cache_ptip_pff_rt_rec(l_index).id <> p_ptip_id THEN
14006 --
14007 -- Loop through the hash using the jump routine to check further
14008 -- indexes
14009 --
14010 l_not_hash_found := FALSE;
14011 --
14012 WHILE NOT l_not_hash_found LOOP
14013 --
14014 l_index := l_index + g_hash_jump;
14015 --
14016 -- Check if the hash index exists, if not we can use it
14017 --
14018 IF NOT g_cache_ptip_pff_rt_rec.EXISTS(l_index) THEN
14019 --
14020 -- Lets store the hash value in the index
14021 --
14022 RAISE NO_DATA_FOUND;
14023 --
14024 ELSE
14025 --
14026 -- Make sure the index is the correct one
14027 --
14028 IF g_cache_ptip_pff_rt_rec(l_index).id = p_ptip_id THEN
14029 --
14030 -- We have a match so the hashed value has been stored before
14031 --
14032 l_not_hash_found := TRUE;
14033 --
14034 END IF;
14035 --
14036 END IF;
14037 --
14038 END LOOP;
14039 --
14040 END IF;
14041 --
14042 END IF;
14043 --
14044 -- If p_old_val and p_new_val is set this means we are trying to retrieve
14045 -- the correct rate for the calculated value.
14046 -- Previously we just cached the first rate we
14047 -- found since we needed the determination code, the correct age,los code,etc
14048 -- By killing the cache and forcing the value to be removed we cache the
14049 -- correct rate profile for the case we need.
14050 --
14051 IF p_old_val IS NOT NULL
14052 AND p_new_val IS NOT NULL THEN
14053 --
14054 RAISE NO_DATA_FOUND;
14055 --
14056 END IF;
14057 --
14058 p_rec := g_cache_ptip_pff_rt_rec(l_index);
14059 --
14060 -- hr_utility.set_location ('Leaving '||l_package,10);
14061 --
14062 EXCEPTION
14063 --
14064 WHEN NO_DATA_FOUND THEN
14065 --
14066 -- The record has not been cached yet so lets cache it
14067 --
14068 OPEN c1;
14069 --
14070 FETCH c1 INTO g_cache_ptip_pff_rt_rec(l_index);
14071 -- PERFNEW
14072 IF c1%NOTFOUND THEN
14073 --
14074 l_c2notfound := false;
14075 OPEN c2;
14076 FETCH c2 INTO g_cache_ptip_pff_rt_rec(l_index);
14077 IF c2%NOTFOUND THEN
14078 --
14079 l_c2notfound := true;
14080 --
14081 END IF;
14082 CLOSE c2;
14083 --
14084 END IF;
14085 -- PERFNEW
14086 IF p_old_val IS NULL
14087 AND p_new_val IS NULL THEN
14088 --
14089 IF c1%NOTFOUND and l_c2notfound THEN -- PERFNEW
14090 --
14091 if NOT g_cache_ptip_pff_rt_rec.EXISTS(l_index) then
14092 g_cache_ptip_pff_rt_rec(l_index).id := p_ptip_id;
14093 g_cache_ptip_pff_rt_rec(l_index).exist := 'N';
14094 end if;
14095 --
14096 END IF;
14097 --
14098 END IF;
14099 --
14100 p_rec := g_cache_ptip_pff_rt_rec(l_index);
14101 --
14102 CLOSE c1;
14103 --
14104 END get_pct_ptip_rate;
14105 --
14106 PROCEDURE get_pct_oiplip_rate(
14107 p_oiplip_id IN NUMBER
14108 ,p_old_val IN NUMBER DEFAULT NULL
14109 ,p_new_val IN NUMBER DEFAULT NULL
14113 --
14110 ,p_business_group_id IN NUMBER
14111 ,p_effective_date IN DATE
14112 ,p_rec OUT NOCOPY g_cache_pff_rec_obj) IS
14114 l_package VARCHAR2(80) := g_package || '.get_pct_oiplip_rate';
14115 l_old_val_1 NUMBER := p_old_val + 1;
14116 l_new_val_1 NUMBER := p_new_val + 1;
14117 --
14118 -- Define Cursor
14119 --
14120 CURSOR c1 IS
14121 SELECT p_oiplip_id
14122 ,'Y'
14123 ,pff.use_prmry_asnt_only_flag
14124 ,pff.use_sum_of_all_asnts_flag
14125 ,pff.rndg_cd
14126 ,pff.rndg_rl
14127 ,pff.mn_pct_val
14128 ,pff.mx_pct_val
14129 FROM ben_pct_fl_tm_fctr pff
14130 ,ben_pct_fl_tm_rt_f pfr
14131 ,ben_vrbl_rt_prfl_f vpf
14132 ,ben_acty_vrbl_rt_f avr
14133 ,ben_acty_base_rt_f abr
14134 WHERE abr.oiplip_id = p_oiplip_id
14135 AND p_effective_date BETWEEN abr.effective_start_date
14136 AND abr.effective_end_date
14137 AND abr.acty_base_rt_id = avr.acty_base_rt_id
14138 AND p_effective_date BETWEEN avr.effective_start_date
14139 AND avr.effective_end_date
14140 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
14141 AND p_effective_date BETWEEN vpf.effective_start_date
14142 AND vpf.effective_end_date
14143 AND vpf.vrbl_rt_prfl_id = pfr.vrbl_rt_prfl_id
14144 AND p_effective_date BETWEEN pfr.effective_start_date
14145 AND pfr.effective_end_date
14146 AND pfr.pct_fl_tm_fctr_id = pff.pct_fl_tm_fctr_id
14147 AND (
14148 (
14149 p_new_val IS NOT NULL
14150 AND p_old_val IS NOT NULL
14151 AND p_new_val >= NVL(pff.mn_pct_val
14152 ,p_new_val)
14153 AND (p_new_val*100) < (NVL(pff.mx_pct_val
14154 ,p_new_val)*100)+1)
14155 OR (
14156 p_new_val IS NOT NULL
14157 AND p_old_val IS NOT NULL
14158 AND (
14159 p_new_val < NVL(pff.mn_pct_val
14160 ,p_new_val)
14161 OR (p_new_val*100) >= ( NVL(pff.mx_pct_val
14162 ,p_new_val)*100)+1)
14163 AND p_old_val >= NVL(pff.mn_pct_val
14164 ,p_old_val)
14165 AND (p_old_val*100) < (NVL(pff.mx_pct_val
14166 ,p_old_val)*100)+1)
14167 OR ( p_new_val IS NULL
14168 AND p_old_val IS NULL));
14169 -- PERFNEW. SPLIT TO 2 CURSORS C1 and C2.
14170 --UNION ALL
14171 CURSOR c2 IS
14172 SELECT p_oiplip_id
14173 ,'Y'
14174 ,pff.use_prmry_asnt_only_flag
14175 ,pff.use_sum_of_all_asnts_flag
14176 ,pff.rndg_cd
14177 ,pff.rndg_rl
14178 ,pff.mn_pct_val
14179 ,pff.mx_pct_val
14180 FROM ben_pct_fl_tm_fctr pff
14181 --,ben_pct_fl_tm_rt_f pfr
14182 ,ben_elig_pct_fl_tm_prte_f epf
14183 ,ben_eligy_prfl_f elp
14184 ,ben_vrbl_rt_elig_prfl_f vep
14185 ,ben_vrbl_rt_prfl_f vpf
14186 ,ben_acty_vrbl_rt_f avr
14187 ,ben_acty_base_rt_f abr
14188 WHERE abr.oiplip_id = p_oiplip_id
14189 AND p_effective_date BETWEEN abr.effective_start_date
14190 AND abr.effective_end_date
14191 AND abr.acty_base_rt_id = avr.acty_base_rt_id
14192 AND p_effective_date BETWEEN avr.effective_start_date
14193 AND avr.effective_end_date
14194 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
14195 AND p_effective_date BETWEEN vpf.effective_start_date
14196 AND vpf.effective_end_date
14197 -- AND vpf.vrbl_rt_prfl_id = epf.vrbl_rt_prfl_id
14198 AND vpf.vrbl_rt_prfl_id = vep.vrbl_rt_prfl_id
14199 AND p_effective_date BETWEEN vep.effective_start_date
14200 AND vep.effective_end_date
14201 AND vep.eligy_prfl_id = elp.eligy_prfl_id
14202 AND p_effective_date BETWEEN elp.effective_start_date
14203 AND elp.effective_end_date
14204 AND epf.eligy_prfl_id = elp.eligy_prfl_id
14205 AND p_effective_date BETWEEN epf.effective_start_date
14206 AND epf.effective_end_date
14207 AND epf.pct_fl_tm_fctr_id = pff.pct_fl_tm_fctr_id
14208 AND (
14209 (
14210 p_new_val IS NOT NULL
14211 AND p_old_val IS NOT NULL
14212 AND p_new_val >= NVL(pff.mn_pct_val
14213 ,p_new_val)
14214 AND (p_new_val*100) < (NVL(pff.mx_pct_val
14215 ,p_new_val)*100)+1)
14216 OR (
14217 p_new_val IS NOT NULL
14218 AND p_old_val IS NOT NULL
14219 AND (
14223 ,p_new_val)*100)+1)
14220 p_new_val < NVL(pff.mn_pct_val
14221 ,p_new_val)
14222 OR (p_new_val*100) >= ( NVL(pff.mx_pct_val
14224 AND p_old_val >= NVL(pff.mn_pct_val
14225 ,p_old_val)
14226 AND (p_old_val*100) < (NVL(pff.mx_pct_val
14227 ,p_old_val)*100)+1)
14228 OR ( p_new_val IS NULL
14229 AND p_old_val IS NULL));
14230 --
14231 --
14232 l_index PLS_INTEGER;
14233 l_not_hash_found BOOLEAN;
14234 l_c2notfound BOOLEAN;
14235 --
14236 BEGIN
14237 --
14238 -- hr_utility.set_location ('Entering '||l_package,10);
14239 --
14240 -- Steps to do process
14241 --
14242 -- 1) Try and get value from cache
14243 -- 2) If can get from cache then copy to output record
14244 -- 3) If can't get from cache do db hit and then
14245 -- copy to cache record and then copy to output record.
14246 --
14247 -- Get hashed index value
14248 --
14249 l_index := MOD(p_oiplip_id
14250 ,g_hash_key);
14251 --
14252 IF NOT g_cache_oiplip_pff_rt_rec.EXISTS(l_index) THEN
14253 --
14254 -- Lets store the hash value in this index
14255 --
14256 RAISE NO_DATA_FOUND;
14257 --
14258 ELSE
14259 --
14260 -- If it does exist make sure its the right one
14261 --
14262 IF g_cache_oiplip_pff_rt_rec(l_index).id <> p_oiplip_id THEN
14263 --
14264 -- Loop through the hash using the jump routine to check further
14265 -- indexes
14266 --
14267 l_not_hash_found := FALSE;
14268 --
14269 WHILE NOT l_not_hash_found LOOP
14270 --
14271 l_index := l_index + g_hash_jump;
14272 --
14273 -- Check if the hash index exists, if not we can use it
14274 --
14275 IF NOT g_cache_oiplip_pff_rt_rec.EXISTS(l_index) THEN
14276 --
14277 -- Lets store the hash value in the index
14278 --
14279 RAISE NO_DATA_FOUND;
14280 --
14281 ELSE
14282 --
14283 -- Make sure the index is the correct one
14284 --
14285 IF g_cache_oiplip_pff_rt_rec(l_index).id = p_oiplip_id THEN
14286 --
14287 -- We have a match so the hashed value has been stored before
14288 --
14289 l_not_hash_found := TRUE;
14290 --
14291 END IF;
14292 --
14293 END IF;
14294 --
14295 END LOOP;
14296 --
14297 END IF;
14298 --
14299 END IF;
14300 --
14301 -- If p_old_val and p_new_val is set this means we are trying to retrieve
14302 -- the correct rate for the calculated value.
14303 -- Previously we just cached the first rate we
14304 -- found since we needed the determination code, the correct age,los code,etc
14305 -- By killing the cache and forcing the value to be removed we cache the
14306 -- correct rate profile for the case we need.
14307 --
14308 IF p_old_val IS NOT NULL
14309 AND p_new_val IS NOT NULL THEN
14310 --
14311 RAISE NO_DATA_FOUND;
14312 --
14313 END IF;
14314 --
14315 p_rec := g_cache_oiplip_pff_rt_rec(l_index);
14316 --
14317 -- hr_utility.set_location ('Leaving '||l_package,10);
14318 --
14319 EXCEPTION
14320 --
14321 WHEN NO_DATA_FOUND THEN
14322 --
14323 -- The record has not been cached yet so lets cache it
14324 --
14325 OPEN c1;
14326 --
14327 FETCH c1 INTO g_cache_oiplip_pff_rt_rec(l_index);
14328 -- PERFNEW
14329 IF c1%NOTFOUND THEN
14330 --
14331 l_c2notfound := false;
14332 OPEN c2;
14333 FETCH c2 INTO g_cache_oiplip_pff_rt_rec(l_index);
14334 IF c2%NOTFOUND THEN
14335 --
14336 l_c2notfound := true;
14337 --
14338 END IF;
14339 CLOSE c2;
14340 --
14341 END IF;
14342 -- PERFNEW
14343 IF p_old_val IS NULL
14344 AND p_new_val IS NULL THEN
14345 --
14346 IF c1%NOTFOUND and l_c2notfound THEN -- PERFNEW
14347 --
14348 if NOT g_cache_oiplip_pff_rt_rec.EXISTS(l_index) then
14349 g_cache_oiplip_pff_rt_rec(l_index).id := p_oiplip_id;
14350 g_cache_oiplip_pff_rt_rec(l_index).exist := 'N';
14351 end if;
14352 --
14353 END IF;
14354 --
14355 END IF;
14356 --
14357 p_rec := g_cache_oiplip_pff_rt_rec(l_index);
14358 --
14359 CLOSE c1;
14360 --
14361 END get_pct_oiplip_rate;
14362 --
14363 PROCEDURE get_pct_rate(
14364 p_pgm_id IN NUMBER
14365 ,p_pl_id IN NUMBER
14366 ,p_oipl_id IN NUMBER
14367 ,p_plip_id IN NUMBER
14368 ,p_ptip_id IN NUMBER
14372 ,p_business_group_id IN NUMBER
14369 ,p_oiplip_id IN NUMBER
14370 ,p_old_val IN NUMBER DEFAULT NULL
14371 ,p_new_val IN NUMBER DEFAULT NULL
14373 ,p_effective_date IN DATE
14374 ,p_rec OUT NOCOPY g_cache_pff_rec_obj) IS
14375 --
14376 l_package VARCHAR2(80) := g_package || '.get_pct_rate';
14377 --
14378 BEGIN
14379 --
14380 -- hr_utility.set_location ('Entering '||l_package,10);
14381 --
14382 -- Derive which data type we are dealing with
14383 --
14384 IF p_pgm_id IS NOT NULL THEN
14385 --
14386 get_pct_pgm_rate(p_pgm_id=> p_pgm_id
14387 ,p_old_val => p_old_val
14388 ,p_new_val => p_new_val
14389 ,p_business_group_id => p_business_group_id
14390 ,p_effective_date => p_effective_date
14391 ,p_rec => p_rec);
14392 --
14393 ELSIF p_pl_id IS NOT NULL THEN
14394 --
14395 get_pct_pl_rate(p_pl_id=> p_pl_id
14396 ,p_old_val => p_old_val
14397 ,p_new_val => p_new_val
14398 ,p_business_group_id => p_business_group_id
14399 ,p_effective_date => p_effective_date
14400 ,p_rec => p_rec);
14401 --
14402 ELSIF p_oipl_id IS NOT NULL THEN
14403 --
14404 get_pct_oipl_rate(p_oipl_id=> p_oipl_id
14405 ,p_old_val => p_old_val
14406 ,p_new_val => p_new_val
14407 ,p_business_group_id => p_business_group_id
14408 ,p_effective_date => p_effective_date
14409 ,p_rec => p_rec);
14410 --
14411 ELSIF p_plip_id IS NOT NULL THEN
14412 --
14413 get_pct_plip_rate(p_plip_id=> p_plip_id
14414 ,p_old_val => p_old_val
14415 ,p_new_val => p_new_val
14416 ,p_business_group_id => p_business_group_id
14417 ,p_effective_date => p_effective_date
14418 ,p_rec => p_rec);
14419 --
14420 ELSIF p_ptip_id IS NOT NULL THEN
14421 --
14422 get_pct_ptip_rate(p_ptip_id=> p_ptip_id
14423 ,p_old_val => p_old_val
14424 ,p_new_val => p_new_val
14425 ,p_business_group_id => p_business_group_id
14426 ,p_effective_date => p_effective_date
14427 ,p_rec => p_rec);
14428 --
14429 ELSIF p_oiplip_id IS NOT NULL THEN
14430 --
14431 get_pct_oiplip_rate(p_oiplip_id=> p_oiplip_id
14432 ,p_old_val => p_old_val
14433 ,p_new_val => p_new_val
14434 ,p_business_group_id => p_business_group_id
14435 ,p_effective_date => p_effective_date
14436 ,p_rec => p_rec);
14437 --
14438 END IF;
14439 --
14440 -- hr_utility.set_location ('Leaving '||l_package,10);
14441 --
14442 END get_pct_rate;
14443 --
14444 PROCEDURE get_hours_pgm_elig(
14445 p_pgm_id IN NUMBER
14446 ,p_old_val in number default null
14447 ,p_new_val in number default null
14448 ,p_business_group_id IN NUMBER
14449 ,p_effective_date IN DATE
14450 ,p_rec OUT NOCOPY g_cache_hwf_rec_obj) IS
14451 --
14452 l_package VARCHAR2(80) := g_package || '.get_hours_pgm_elig';
14453 --
14454 -- Define Cursor
14455 --
14456 CURSOR c1 IS
14457 SELECT p_pgm_id
14458 ,'Y'
14459 ,hwf.hrs_src_cd
14460 ,hwf.hrs_wkd_det_cd
14461 ,hwf.hrs_wkd_det_rl
14462 ,hwf.rndg_cd
14463 ,hwf.rndg_rl
14464 ,hwf.defined_balance_id
14465 ,hwf.bnfts_bal_id
14466 ,hwf.mn_hrs_num
14467 ,hwf.mx_hrs_num
14468 ,hwf.once_r_cntug_cd
14469 ,hwf.hrs_wkd_calc_rl
14470 FROM ben_hrs_wkd_in_perd_fctr hwf
14471 ,ben_elig_hrs_wkd_prte_f ehw
14472 ,ben_eligy_prfl_f elp
14473 ,ben_prtn_elig_prfl_f cep
14474 ,ben_prtn_elig_f epa
14475 WHERE epa.pgm_id = p_pgm_id
14476 AND p_effective_date BETWEEN epa.effective_start_date
14477 AND epa.effective_end_date
14478 AND epa.prtn_elig_id = cep.prtn_elig_id
14479 AND p_effective_date BETWEEN cep.effective_start_date
14480 AND cep.effective_end_date
14481 AND cep.eligy_prfl_id = elp.eligy_prfl_id
14482 AND p_effective_date BETWEEN elp.effective_start_date
14483 AND elp.effective_end_date
14484 AND ehw.eligy_prfl_id = elp.eligy_prfl_id
14485 AND p_effective_date BETWEEN ehw.effective_start_date
14486 AND ehw.effective_end_date
14487 AND ehw.hrs_wkd_in_perd_fctr_id = hwf.hrs_wkd_in_perd_fctr_id
14488 AND (
14489 (
14490 p_new_val IS NOT NULL
14491 AND p_old_val IS NOT NULL
14492 AND p_new_val >= NVL(hwf.mn_hrs_num ,p_new_val)
14493 and p_new_val < decode(nvl(hwf.mx_hrs_num,p_new_val) ,
14494 trunc(nvl(hwf.mx_hrs_num,p_new_val))
14495 ,decode(nvl(hwf.mn_hrs_num,p_new_val), trunc(nvl(hwf.mn_hrs_num,p_new_val)),
14499 )
14496 nvl(hwf.mx_hrs_num,p_new_val)+1,nvl(hwf.mx_hrs_num,p_new_val)+0.000000001),
14497 nvl(hwf.mx_hrs_num,p_new_val)+0.000000001 )
14498 -- and p_old_val < hwf.mn_hrs_num
14500 OR
14501 (
14502 p_new_val IS NOT NULL
14503 AND p_old_val IS NOT NULL
14504 AND
14505 (
14506 p_new_val < NVL(hwf.mn_hrs_num,p_new_val)
14507 OR
14508 p_new_val >= decode(nvl(hwf.mx_hrs_num,p_new_val) ,
14509 trunc(nvl(hwf.mx_hrs_num,p_new_val))
14510 ,decode(nvl(hwf.mn_hrs_num,p_new_val), trunc(nvl(hwf.mn_hrs_num,p_new_val)),
14511 nvl(hwf.mx_hrs_num,p_new_val)+1,nvl(hwf.mx_hrs_num,p_new_val)+0.000000001),
14512 nvl(hwf.mx_hrs_num,p_new_val)+0.000000001 )
14513 )
14514 AND p_old_val >= NVL(hwf.mn_hrs_num ,p_old_val)
14515 and p_old_val < decode(nvl(hwf.mx_hrs_num,p_old_val) ,
14516 trunc(nvl(hwf.mx_hrs_num,p_old_val))
14517 ,decode(nvl(hwf.mn_hrs_num,p_old_val), trunc(nvl(hwf.mn_hrs_num,p_old_val)),
14518 nvl(hwf.mx_hrs_num,p_old_val)+1,nvl(hwf.mx_hrs_num,p_old_val)+0.000000001),
14519 nvl(hwf.mx_hrs_num,p_old_val)+0.000000001 )
14520 )
14521 OR
14522 ( p_new_val IS NULL
14523 AND p_old_val IS NULL
14524 )
14525 );
14526
14527 --
14528 l_index PLS_INTEGER;
14529 l_not_hash_found BOOLEAN;
14530 --
14531 BEGIN
14532 --
14533 -- hr_utility.set_location ('Entering '||l_package,10);
14534 --
14535 -- Steps to do process
14536 --
14537 -- 1) Try and get value from cache
14538 -- 2) If can get from cache then copy to output record
14539 -- 3) If can't get from cache do db hit and then
14540 -- copy to cache record and then copy to output record.
14541 --
14542 -- Get hashed index value
14543 --
14544 l_index := MOD(p_pgm_id
14545 ,g_hash_key);
14546 --
14547 IF NOT g_cache_pgm_hwf_el_rec.EXISTS(l_index) THEN
14548 --
14549 -- Lets store the hash value in this index
14550 --
14551 RAISE NO_DATA_FOUND;
14552 --
14553 ELSE
14554 --
14555 -- If it does exist make sure its the right one
14556 --
14557 IF g_cache_pgm_hwf_el_rec(l_index).id <> p_pgm_id THEN
14558 --
14559 -- Loop through the hash using the jump routine to check further
14560 -- indexes
14561 --
14562 l_not_hash_found := FALSE;
14563 --
14564 WHILE NOT l_not_hash_found LOOP
14565 --
14566 l_index := l_index + g_hash_jump;
14567 --
14568 -- Check if the hash index exists, if not we can use it
14569 --
14570 IF NOT g_cache_pgm_hwf_el_rec.EXISTS(l_index) THEN
14571 --
14572 -- Lets store the hash value in the index
14573 --
14574 RAISE NO_DATA_FOUND;
14575 --
14576 ELSE
14577 --
14578 -- Make sure the index is the correct one
14579 --
14580 IF g_cache_pgm_hwf_el_rec(l_index).id = p_pgm_id THEN
14581 --
14582 -- We have a match so the hashed value has been stored before
14583 --
14584 l_not_hash_found := TRUE;
14585 --
14586 END IF;
14587 --
14588 END IF;
14589 --
14590 END LOOP;
14591 --
14592 END IF;
14593 --
14594 END IF;
14595 --
14596 IF p_old_val IS NOT NULL
14597 AND p_new_val IS NOT NULL THEN
14598 --
14599 RAISE NO_DATA_FOUND;
14600 --
14601 END IF;
14602
14603 p_rec := g_cache_pgm_hwf_el_rec(l_index);
14604 --
14605 -- hr_utility.set_location ('Leaving '||l_package,10);
14606 --
14607 EXCEPTION
14608 --
14609 WHEN NO_DATA_FOUND THEN
14610 --
14611 -- The record has not been cached yet so lets cache it
14612 --
14613 OPEN c1;
14614 --
14615 FETCH c1 INTO g_cache_pgm_hwf_el_rec(l_index);
14616 IF c1%NOTFOUND THEN
14617 --
14618 if NOT g_cache_pgm_hwf_el_rec.EXISTS(l_index) then
14619 g_cache_pgm_hwf_el_rec(l_index).id := p_pgm_id;
14620 g_cache_pgm_hwf_el_rec(l_index).exist := 'N';
14621 end if;
14622 --
14623 END IF;
14624 --
14625 p_rec := g_cache_pgm_hwf_el_rec(l_index);
14626 --
14627 CLOSE c1;
14628 --
14629 END get_hours_pgm_elig;
14630 --
14631 PROCEDURE get_hours_pl_elig(
14632 p_pl_id IN NUMBER
14633 ,p_old_val in number default null
14634 ,p_new_val in number default null
14638 --
14635 ,p_business_group_id IN NUMBER
14636 ,p_effective_date IN DATE
14637 ,p_rec OUT NOCOPY g_cache_hwf_rec_obj) IS
14639 l_package VARCHAR2(80) := g_package || '.get_hours_pl_elig';
14640 --
14641 -- Define Cursor
14642 --
14643 CURSOR c1 IS
14644 SELECT p_pl_id
14645 ,'Y'
14646 ,hwf.hrs_src_cd
14647 ,hwf.hrs_wkd_det_cd
14648 ,hwf.hrs_wkd_det_rl
14649 ,hwf.rndg_cd
14650 ,hwf.rndg_rl
14651 ,hwf.defined_balance_id
14652 ,hwf.bnfts_bal_id
14653 ,hwf.mn_hrs_num
14654 ,hwf.mx_hrs_num
14655 ,hwf.once_r_cntug_cd
14656 ,hwf.hrs_wkd_calc_rl
14657 FROM ben_hrs_wkd_in_perd_fctr hwf
14658 ,ben_elig_hrs_wkd_prte_f ehw
14659 ,ben_eligy_prfl_f elp
14660 ,ben_prtn_elig_prfl_f cep
14661 ,ben_prtn_elig_f epa
14662 WHERE epa.pl_id = p_pl_id
14663 AND p_effective_date BETWEEN epa.effective_start_date
14664 AND epa.effective_end_date
14665 AND epa.prtn_elig_id = cep.prtn_elig_id
14666 AND p_effective_date BETWEEN cep.effective_start_date
14667 AND cep.effective_end_date
14668 AND cep.eligy_prfl_id = elp.eligy_prfl_id
14669 AND p_effective_date BETWEEN elp.effective_start_date
14670 AND elp.effective_end_date
14671 AND ehw.eligy_prfl_id = elp.eligy_prfl_id
14672 AND p_effective_date BETWEEN ehw.effective_start_date
14673 AND ehw.effective_end_date
14674 AND ehw.hrs_wkd_in_perd_fctr_id = hwf.hrs_wkd_in_perd_fctr_id
14675 AND (
14676 (
14677 p_new_val IS NOT NULL
14678 AND p_old_val IS NOT NULL
14679 AND p_new_val >= NVL(hwf.mn_hrs_num ,p_new_val)
14680 and p_new_val < decode(nvl(hwf.mx_hrs_num,p_new_val) ,
14681 trunc(nvl(hwf.mx_hrs_num,p_new_val))
14682 ,decode(nvl(hwf.mn_hrs_num,p_new_val), trunc(nvl(hwf.mn_hrs_num,p_new_val)),
14683 nvl(hwf.mx_hrs_num,p_new_val)+1,nvl(hwf.mx_hrs_num,p_new_val)+0.000000001),
14684 nvl(hwf.mx_hrs_num,p_new_val)+0.000000001 )
14685 -- and p_old_val < hwf.mn_hrs_num
14686 )
14687 OR
14688 (
14689 p_new_val IS NOT NULL
14690 AND p_old_val IS NOT NULL
14691 AND
14692 (
14693 p_new_val < NVL(hwf.mn_hrs_num,p_new_val)
14694 OR
14695 p_new_val >= decode(nvl(hwf.mx_hrs_num,p_new_val) ,
14696 trunc(nvl(hwf.mx_hrs_num,p_new_val))
14697 ,decode(nvl(hwf.mn_hrs_num,p_new_val), trunc(nvl(hwf.mn_hrs_num,p_new_val)),
14698 nvl(hwf.mx_hrs_num,p_new_val)+1,nvl(hwf.mx_hrs_num,p_new_val)+0.000000001),
14699 nvl(hwf.mx_hrs_num,p_new_val)+0.000000001 )
14700 )
14701 AND p_old_val >= NVL(hwf.mn_hrs_num ,p_old_val)
14702 and p_old_val < decode(nvl(hwf.mx_hrs_num,p_old_val) ,
14703 trunc(nvl(hwf.mx_hrs_num,p_old_val))
14704 ,decode(nvl(hwf.mn_hrs_num,p_old_val), trunc(nvl(hwf.mn_hrs_num,p_old_val)),
14705 nvl(hwf.mx_hrs_num,p_old_val)+1,nvl(hwf.mx_hrs_num,p_old_val)+0.000000001),
14706 nvl(hwf.mx_hrs_num,p_old_val)+0.000000001 )
14707 )
14708 OR
14709 ( p_new_val IS NULL
14710 AND p_old_val IS NULL
14711 )
14712 );
14713
14714 --
14715 --
14716 l_index PLS_INTEGER;
14717 l_not_hash_found BOOLEAN;
14718 --
14719 BEGIN
14720 --
14721 -- hr_utility.set_location ('Entering '||l_package,10);
14722 --
14723 -- Steps to do process
14724 --
14725 -- 1) Try and get value from cache
14726 -- 2) If can get from cache then copy to output record
14727 -- 3) If can't get from cache do db hit and then
14728 -- copy to cache record and then copy to output record.
14729 --
14730 -- Get hashed index value
14731 --
14732 l_index := MOD(p_pl_id
14733 ,g_hash_key);
14734 --
14735 IF NOT g_cache_pl_hwf_el_rec.EXISTS(l_index) THEN
14736 --
14737 -- Lets store the hash value in this index
14738 --
14739 RAISE NO_DATA_FOUND;
14740 --
14741 ELSE
14742 --
14743 -- If it does exist make sure its the right one
14744 --
14745 IF g_cache_pl_hwf_el_rec(l_index).id <> p_pl_id THEN
14746 --
14747 -- Loop through the hash using the jump routine to check further
14748 -- indexes
14749 --
14750 l_not_hash_found := FALSE;
14751 --
14752 WHILE NOT l_not_hash_found LOOP
14753 --
14754 l_index := l_index + g_hash_jump;
14755 --
14756 -- Check if the hash index exists, if not we can use it
14757 --
14758 IF NOT g_cache_pl_hwf_el_rec.EXISTS(l_index) THEN
14759 --
14763 --
14760 -- Lets store the hash value in the index
14761 --
14762 RAISE NO_DATA_FOUND;
14764 ELSE
14765 --
14766 -- Make sure the index is the correct one
14767 --
14768 IF g_cache_pl_hwf_el_rec(l_index).id = p_pl_id THEN
14769 --
14770 -- We have a match so the hashed value has been stored before
14771 --
14772 l_not_hash_found := TRUE;
14773 --
14774 END IF;
14775 --
14776 END IF;
14777 --
14778 END LOOP;
14779 --
14780 END IF;
14781 --
14782 END IF;
14783 --
14784 IF p_old_val IS NOT NULL
14785 AND p_new_val IS NOT NULL THEN
14786 --
14787 RAISE NO_DATA_FOUND;
14788 --
14789 END IF;
14790 p_rec := g_cache_pl_hwf_el_rec(l_index);
14791 --
14792 -- hr_utility.set_location ('Leaving '||l_package,10);
14793 --
14794 EXCEPTION
14795 --
14796 WHEN NO_DATA_FOUND THEN
14797 --
14798 -- The record has not been cached yet so lets cache it
14799 --
14800 OPEN c1;
14801 --
14802 FETCH c1 INTO g_cache_pl_hwf_el_rec(l_index);
14803 IF c1%NOTFOUND THEN
14804 --
14805 if NOT g_cache_pl_hwf_el_rec.EXISTS(l_index) then
14806 g_cache_pl_hwf_el_rec(l_index).id := p_pl_id;
14807 g_cache_pl_hwf_el_rec(l_index).exist := 'N';
14808 end if;
14809 --
14810 END IF;
14811 --
14812 p_rec := g_cache_pl_hwf_el_rec(l_index);
14813 --
14814 CLOSE c1;
14815 --
14816 END get_hours_pl_elig;
14817 --
14818 PROCEDURE get_hours_oipl_elig(
14819 p_oipl_id IN NUMBER
14820 ,p_old_val in number default null
14821 ,p_new_val in number default null
14822 ,p_business_group_id IN NUMBER
14823 ,p_effective_date IN DATE
14824 ,p_rec OUT NOCOPY g_cache_hwf_rec_obj) IS
14825 --
14826 l_package VARCHAR2(80) := g_package || '.get_hours_oipl_elig';
14827 --
14828 -- Define Cursor
14829 --
14830 CURSOR c1 IS
14831 SELECT p_oipl_id
14832 ,'Y'
14833 ,hwf.hrs_src_cd
14834 ,hwf.hrs_wkd_det_cd
14835 ,hwf.hrs_wkd_det_rl
14836 ,hwf.rndg_cd
14837 ,hwf.rndg_rl
14838 ,hwf.defined_balance_id
14839 ,hwf.bnfts_bal_id
14840 ,hwf.mn_hrs_num
14841 ,hwf.mx_hrs_num
14842 ,hwf.once_r_cntug_cd
14843 ,hwf.hrs_wkd_calc_rl
14844 FROM ben_hrs_wkd_in_perd_fctr hwf
14845 ,ben_elig_hrs_wkd_prte_f ehw
14846 ,ben_eligy_prfl_f elp
14847 ,ben_prtn_elig_prfl_f cep
14848 ,ben_prtn_elig_f epa
14849 WHERE epa.oipl_id = p_oipl_id
14850 AND p_effective_date BETWEEN epa.effective_start_date
14851 AND epa.effective_end_date
14852 AND epa.prtn_elig_id = cep.prtn_elig_id
14853 AND p_effective_date BETWEEN cep.effective_start_date
14854 AND cep.effective_end_date
14855 AND cep.eligy_prfl_id = elp.eligy_prfl_id
14856 AND p_effective_date BETWEEN elp.effective_start_date
14857 AND elp.effective_end_date
14858 AND ehw.eligy_prfl_id = elp.eligy_prfl_id
14859 AND p_effective_date BETWEEN ehw.effective_start_date
14860 AND ehw.effective_end_date
14861 AND ehw.hrs_wkd_in_perd_fctr_id = hwf.hrs_wkd_in_perd_fctr_id
14862 AND (
14863 (
14864 p_new_val IS NOT NULL
14865 AND p_old_val IS NOT NULL
14866 AND p_new_val >= NVL(hwf.mn_hrs_num ,p_new_val)
14867 and p_new_val < decode(nvl(hwf.mx_hrs_num,p_new_val) ,
14868 trunc(nvl(hwf.mx_hrs_num,p_new_val))
14869 ,decode(nvl(hwf.mn_hrs_num,p_new_val), trunc(nvl(hwf.mn_hrs_num,p_new_val)),
14870 nvl(hwf.mx_hrs_num,p_new_val)+1,nvl(hwf.mx_hrs_num,p_new_val)+0.000000001),
14871 nvl(hwf.mx_hrs_num,p_new_val)+0.000000001 )
14872 -- and p_old_val < hwf.mn_hrs_num
14873 )
14874 OR
14875 (
14876 p_new_val IS NOT NULL
14877 AND p_old_val IS NOT NULL
14878 AND
14879 (
14880 p_new_val < NVL(hwf.mn_hrs_num,p_new_val)
14881 OR
14882 p_new_val >= decode(nvl(hwf.mx_hrs_num,p_new_val) ,
14883 trunc(nvl(hwf.mx_hrs_num,p_new_val))
14884 ,decode(nvl(hwf.mn_hrs_num,p_new_val), trunc(nvl(hwf.mn_hrs_num,p_new_val)),
14885 nvl(hwf.mx_hrs_num,p_new_val)+1,nvl(hwf.mx_hrs_num,p_new_val)+0.000000001),
14886 nvl(hwf.mx_hrs_num,p_new_val)+0.000000001 )
14887 )
14888 AND p_old_val >= NVL(hwf.mn_hrs_num ,p_old_val)
14892 nvl(hwf.mx_hrs_num,p_old_val)+1,nvl(hwf.mx_hrs_num,p_old_val)+0.000000001),
14889 and p_old_val < decode(nvl(hwf.mx_hrs_num,p_old_val) ,
14890 trunc(nvl(hwf.mx_hrs_num,p_old_val))
14891 ,decode(nvl(hwf.mn_hrs_num,p_old_val), trunc(nvl(hwf.mn_hrs_num,p_old_val)),
14893 nvl(hwf.mx_hrs_num,p_old_val)+0.000000001 )
14894 )
14895 OR
14896 ( p_new_val IS NULL
14897 AND p_old_val IS NULL
14898 )
14899 );
14900
14901 --
14902 --
14903 l_index PLS_INTEGER;
14904 l_not_hash_found BOOLEAN;
14905 --
14906 BEGIN
14907 --
14908 -- hr_utility.set_location ('Entering '||l_package,10);
14909 --
14910 -- Steps to do process
14911 --
14912 -- 1) Try and get value from cache
14913 -- 2) If can get from cache then copy to output record
14914 -- 3) If can't get from cache do db hit and then
14915 -- copy to cache record and then copy to output record.
14916 --
14917 -- Get hashed index value
14918 --
14919 l_index := MOD(p_oipl_id
14920 ,g_hash_key);
14921 --
14922 IF NOT g_cache_oipl_hwf_el_rec.EXISTS(l_index) THEN
14923 --
14924 -- Lets store the hash value in this index
14925 --
14926 RAISE NO_DATA_FOUND;
14927 --
14928 ELSE
14929 --
14930 -- If it does exist make sure its the right one
14931 --
14932 IF g_cache_oipl_hwf_el_rec(l_index).id <> p_oipl_id THEN
14933 --
14934 -- Loop through the hash using the jump routine to check further
14935 -- indexes
14936 --
14937 l_not_hash_found := FALSE;
14938 --
14939 WHILE NOT l_not_hash_found LOOP
14940 --
14941 l_index := l_index + g_hash_jump;
14942 --
14943 -- Check if the hash index exists, if not we can use it
14944 --
14945 IF NOT g_cache_oipl_hwf_el_rec.EXISTS(l_index) THEN
14946 --
14947 -- Lets store the hash value in the index
14948 --
14949 RAISE NO_DATA_FOUND;
14950 --
14951 ELSE
14952 --
14953 -- Make sure the index is the correct one
14954 --
14955 IF g_cache_oipl_hwf_el_rec(l_index).id = p_oipl_id THEN
14956 --
14957 -- We have a match so the hashed value has been stored before
14958 --
14959 l_not_hash_found := TRUE;
14960 --
14961 END IF;
14962 --
14963 END IF;
14964 --
14965 END LOOP;
14966 --
14967 END IF;
14968 --
14969 END IF;
14970 --
14971 IF p_old_val IS NOT NULL
14972 AND p_new_val IS NOT NULL THEN
14973 --
14974 RAISE NO_DATA_FOUND;
14975 --
14976 END IF;
14977 p_rec := g_cache_oipl_hwf_el_rec(l_index);
14978 --
14979 -- hr_utility.set_location ('Leaving '||l_package,10);
14980 --
14981 EXCEPTION
14982 --
14983 WHEN NO_DATA_FOUND THEN
14984 --
14985 -- The record has not been cached yet so lets cache it
14986 --
14987 OPEN c1;
14988 --
14989 FETCH c1 INTO g_cache_oipl_hwf_el_rec(l_index);
14990 IF c1%NOTFOUND THEN
14991 --
14992 if NOT g_cache_oipl_hwf_el_rec.EXISTS(l_index) then
14993 g_cache_oipl_hwf_el_rec(l_index).id := p_oipl_id;
14994 g_cache_oipl_hwf_el_rec(l_index).exist := 'N';
14995 end if;
14996 --
14997 END IF;
14998 --
14999 p_rec := g_cache_oipl_hwf_el_rec(l_index);
15000 --
15001 CLOSE c1;
15002 --
15003 END get_hours_oipl_elig;
15004 --
15005 PROCEDURE get_hours_plip_elig(
15006 p_plip_id IN NUMBER
15007 ,p_old_val in number default null
15008 ,p_new_val in number default null
15009 ,p_business_group_id IN NUMBER
15010 ,p_effective_date IN DATE
15011 ,p_rec OUT NOCOPY g_cache_hwf_rec_obj) IS
15012 --
15013 l_package VARCHAR2(80) := g_package || '.get_hours_plip_elig';
15014 --
15015 -- Define Cursor
15016 --
15017 CURSOR c1 IS
15018 SELECT p_plip_id
15019 ,'Y'
15020 ,hwf.hrs_src_cd
15021 ,hwf.hrs_wkd_det_cd
15022 ,hwf.hrs_wkd_det_rl
15023 ,hwf.rndg_cd
15024 ,hwf.rndg_rl
15025 ,hwf.defined_balance_id
15026 ,hwf.bnfts_bal_id
15027 ,hwf.mn_hrs_num
15028 ,hwf.mx_hrs_num
15029 ,hwf.once_r_cntug_cd
15030 ,hwf.hrs_wkd_calc_rl
15031 FROM ben_hrs_wkd_in_perd_fctr hwf
15032 ,ben_elig_hrs_wkd_prte_f ehw
15033 ,ben_eligy_prfl_f elp
15034 ,ben_prtn_elig_prfl_f cep
15035 ,ben_prtn_elig_f epa
15036 WHERE epa.plip_id = p_plip_id
15037 AND p_effective_date BETWEEN epa.effective_start_date
15041 AND cep.effective_end_date
15038 AND epa.effective_end_date
15039 AND epa.prtn_elig_id = cep.prtn_elig_id
15040 AND p_effective_date BETWEEN cep.effective_start_date
15042 AND cep.eligy_prfl_id = elp.eligy_prfl_id
15043 AND p_effective_date BETWEEN elp.effective_start_date
15044 AND elp.effective_end_date
15045 AND ehw.eligy_prfl_id = elp.eligy_prfl_id
15046 AND p_effective_date BETWEEN ehw.effective_start_date
15047 AND ehw.effective_end_date
15048 AND ehw.hrs_wkd_in_perd_fctr_id = hwf.hrs_wkd_in_perd_fctr_id
15049 AND (
15050 (
15051 p_new_val IS NOT NULL
15052 AND p_old_val IS NOT NULL
15053 AND p_new_val >= NVL(hwf.mn_hrs_num ,p_new_val)
15054 and p_new_val < decode(nvl(hwf.mx_hrs_num,p_new_val) ,
15055 trunc(nvl(hwf.mx_hrs_num,p_new_val))
15056 ,decode(nvl(hwf.mn_hrs_num,p_new_val), trunc(nvl(hwf.mn_hrs_num,p_new_val)),
15057 nvl(hwf.mx_hrs_num,p_new_val)+1,nvl(hwf.mx_hrs_num,p_new_val)+0.000000001),
15058 nvl(hwf.mx_hrs_num,p_new_val)+0.000000001 )
15059 -- and p_old_val < hwf.mn_hrs_num
15060 )
15061 OR
15062 (
15063 p_new_val IS NOT NULL
15064 AND p_old_val IS NOT NULL
15065 AND
15066 (
15067 p_new_val < NVL(hwf.mn_hrs_num,p_new_val)
15068 OR
15069 p_new_val >= decode(nvl(hwf.mx_hrs_num,p_new_val) ,
15070 trunc(nvl(hwf.mx_hrs_num,p_new_val))
15071 ,decode(nvl(hwf.mn_hrs_num,p_new_val), trunc(nvl(hwf.mn_hrs_num,p_new_val)),
15072 nvl(hwf.mx_hrs_num,p_new_val)+1,nvl(hwf.mx_hrs_num,p_new_val)+0.000000001),
15073 nvl(hwf.mx_hrs_num,p_new_val)+0.000000001 )
15074 )
15075 AND p_old_val >= NVL(hwf.mn_hrs_num ,p_old_val)
15076 and p_old_val < decode(nvl(hwf.mx_hrs_num,p_old_val) ,
15077 trunc(nvl(hwf.mx_hrs_num,p_old_val))
15078 ,decode(nvl(hwf.mn_hrs_num,p_old_val), trunc(nvl(hwf.mn_hrs_num,p_old_val)),
15079 nvl(hwf.mx_hrs_num,p_old_val)+1,nvl(hwf.mx_hrs_num,p_old_val)+0.000000001),
15080 nvl(hwf.mx_hrs_num,p_old_val)+0.000000001 )
15081 )
15082 OR
15083 ( p_new_val IS NULL
15084 AND p_old_val IS NULL
15085 )
15086 );
15087
15088 --
15089 --
15090 l_index PLS_INTEGER;
15091 l_not_hash_found BOOLEAN;
15092 --
15093 BEGIN
15094 --
15095 -- hr_utility.set_location ('Entering '||l_package,10);
15096 --
15097 -- Steps to do process
15098 --
15099 -- 1) Try and get value from cache
15100 -- 2) If can get from cache then copy to output record
15101 -- 3) If can't get from cache do db hit and then
15102 -- copy to cache record and then copy to output record.
15103 --
15104 -- Get hashed index value
15105 --
15106 l_index := MOD(p_plip_id
15107 ,g_hash_key);
15108 --
15109 IF NOT g_cache_plip_hwf_el_rec.EXISTS(l_index) THEN
15110 --
15111 -- Lets store the hash value in this index
15112 --
15113 RAISE NO_DATA_FOUND;
15114 --
15115 ELSE
15116 --
15117 -- If it does exist make sure its the right one
15118 --
15119 IF g_cache_plip_hwf_el_rec(l_index).id <> p_plip_id THEN
15120 --
15121 -- Loop through the hash using the jump routine to check further
15122 -- indexes
15123 --
15124 l_not_hash_found := FALSE;
15125 --
15126 WHILE NOT l_not_hash_found LOOP
15127 --
15128 l_index := l_index + g_hash_jump;
15129 --
15130 -- Check if the hash index exists, if not we can use it
15131 --
15132 IF NOT g_cache_plip_hwf_el_rec.EXISTS(l_index) THEN
15133 --
15134 -- Lets store the hash value in the index
15135 --
15136 RAISE NO_DATA_FOUND;
15137 --
15138 ELSE
15139 --
15140 -- Make sure the index is the correct one
15141 --
15142 IF g_cache_plip_hwf_el_rec(l_index).id = p_plip_id THEN
15143 --
15144 -- We have a match so the hashed value has been stored before
15145 --
15146 l_not_hash_found := TRUE;
15147 --
15148 END IF;
15149 --
15150 END IF;
15151 --
15152 END LOOP;
15153 --
15154 END IF;
15155 --
15156 END IF;
15157 --
15158 IF p_old_val IS NOT NULL
15159 AND p_new_val IS NOT NULL THEN
15160 --
15161 RAISE NO_DATA_FOUND;
15162 --
15163 END IF;
15164 p_rec := g_cache_plip_hwf_el_rec(l_index);
15165 --
15166 -- hr_utility.set_location ('Leaving '||l_package,10);
15167 --
15168 EXCEPTION
15169 --
15173 --
15170 WHEN NO_DATA_FOUND THEN
15171 --
15172 -- The record has not been cached yet so lets cache it
15174 OPEN c1;
15175 --
15176 FETCH c1 INTO g_cache_plip_hwf_el_rec(l_index);
15177 IF c1%NOTFOUND THEN
15178 --
15179 if NOT g_cache_plip_hwf_el_rec.EXISTS(l_index) then
15180 g_cache_plip_hwf_el_rec(l_index).id := p_plip_id;
15181 g_cache_plip_hwf_el_rec(l_index).exist := 'N';
15182 end if;
15183 --
15184 END IF;
15185 --
15186 p_rec := g_cache_plip_hwf_el_rec(l_index);
15187 --
15188 CLOSE c1;
15189 --
15190 END get_hours_plip_elig;
15191 --
15192 PROCEDURE get_hours_ptip_elig(
15193 p_ptip_id IN NUMBER
15194 ,p_old_val in number default null
15195 ,p_new_val in number default null
15196 ,p_business_group_id IN NUMBER
15197 ,p_effective_date IN DATE
15198 ,p_rec OUT NOCOPY g_cache_hwf_rec_obj) IS
15199 --
15200 l_package VARCHAR2(80) := g_package || '.get_hours_ptip_elig';
15201 --
15202 -- Define Cursor
15203 --
15204 CURSOR c1 IS
15205 SELECT p_ptip_id
15206 ,'Y'
15207 ,hwf.hrs_src_cd
15208 ,hwf.hrs_wkd_det_cd
15209 ,hwf.hrs_wkd_det_rl
15210 ,hwf.rndg_cd
15211 ,hwf.rndg_rl
15212 ,hwf.defined_balance_id
15213 ,hwf.bnfts_bal_id
15214 ,hwf.mn_hrs_num
15215 ,hwf.mx_hrs_num
15216 ,hwf.once_r_cntug_cd
15217 ,hwf.hrs_wkd_calc_rl
15218 FROM ben_hrs_wkd_in_perd_fctr hwf
15219 ,ben_elig_hrs_wkd_prte_f ehw
15220 ,ben_eligy_prfl_f elp
15221 ,ben_prtn_elig_prfl_f cep
15222 ,ben_prtn_elig_f epa
15223 WHERE epa.ptip_id = p_ptip_id
15224 AND p_effective_date BETWEEN epa.effective_start_date
15225 AND epa.effective_end_date
15226 AND epa.prtn_elig_id = cep.prtn_elig_id
15227 AND p_effective_date BETWEEN cep.effective_start_date
15228 AND cep.effective_end_date
15229 AND cep.eligy_prfl_id = elp.eligy_prfl_id
15230 AND p_effective_date BETWEEN elp.effective_start_date
15231 AND elp.effective_end_date
15232 AND ehw.eligy_prfl_id = elp.eligy_prfl_id
15233 AND p_effective_date BETWEEN ehw.effective_start_date
15234 AND ehw.effective_end_date
15235 AND ehw.hrs_wkd_in_perd_fctr_id = hwf.hrs_wkd_in_perd_fctr_id
15236 AND (
15237 (
15238 p_new_val IS NOT NULL
15239 AND p_old_val IS NOT NULL
15240 AND p_new_val >= NVL(hwf.mn_hrs_num ,p_new_val)
15241 and p_new_val < decode(nvl(hwf.mx_hrs_num,p_new_val) ,
15242 trunc(nvl(hwf.mx_hrs_num,p_new_val))
15243 ,decode(nvl(hwf.mn_hrs_num,p_new_val), trunc(nvl(hwf.mn_hrs_num,p_new_val)),
15244 nvl(hwf.mx_hrs_num,p_new_val)+1,nvl(hwf.mx_hrs_num,p_new_val)+0.000000001),
15245 nvl(hwf.mx_hrs_num,p_new_val)+0.000000001 )
15246 -- and p_old_val < hwf.mn_hrs_num
15247 )
15248 OR
15249 (
15250 p_new_val IS NOT NULL
15251 AND p_old_val IS NOT NULL
15252 AND
15253 (
15254 p_new_val < NVL(hwf.mn_hrs_num,p_new_val)
15255 OR
15256 p_new_val >= decode(nvl(hwf.mx_hrs_num,p_new_val) ,
15257 trunc(nvl(hwf.mx_hrs_num,p_new_val))
15258 ,decode(nvl(hwf.mn_hrs_num,p_new_val), trunc(nvl(hwf.mn_hrs_num,p_new_val)),
15259 nvl(hwf.mx_hrs_num,p_new_val)+1,nvl(hwf.mx_hrs_num,p_new_val)+0.000000001),
15260 nvl(hwf.mx_hrs_num,p_new_val)+0.000000001 )
15261 )
15262 AND p_old_val >= NVL(hwf.mn_hrs_num ,p_old_val)
15263 and p_old_val < decode(nvl(hwf.mx_hrs_num,p_old_val) ,
15264 trunc(nvl(hwf.mx_hrs_num,p_old_val))
15265 ,decode(nvl(hwf.mn_hrs_num,p_old_val), trunc(nvl(hwf.mn_hrs_num,p_old_val)),
15266 nvl(hwf.mx_hrs_num,p_old_val)+1,nvl(hwf.mx_hrs_num,p_old_val)+0.000000001),
15267 nvl(hwf.mx_hrs_num,p_old_val)+0.000000001 )
15268 )
15269 OR
15270 ( p_new_val IS NULL
15271 AND p_old_val IS NULL
15272 )
15273 );
15274
15275 --
15276 --
15277 l_index PLS_INTEGER;
15278 l_not_hash_found BOOLEAN;
15279 --
15280 BEGIN
15281 --
15282 -- hr_utility.set_location ('Entering '||l_package,10);
15283 --
15284 -- Steps to do process
15285 --
15286 -- 1) Try and get value from cache
15287 -- 2) If can get from cache then copy to output record
15288 -- 3) If can't get from cache do db hit and then
15292 --
15289 -- copy to cache record and then copy to output record.
15290 --
15291 -- Get hashed index value
15293 l_index := MOD(p_ptip_id
15294 ,g_hash_key);
15295 --
15296 IF NOT g_cache_ptip_hwf_el_rec.EXISTS(l_index) THEN
15297 --
15298 -- Lets store the hash value in this index
15299 --
15300 RAISE NO_DATA_FOUND;
15301 --
15302 ELSE
15303 --
15304 -- If it does exist make sure its the right one
15305 --
15306 IF g_cache_ptip_hwf_el_rec(l_index).id <> p_ptip_id THEN
15307 --
15308 -- Loop through the hash using the jump routine to check further
15309 -- indexes
15310 --
15311 l_not_hash_found := FALSE;
15312 --
15313 WHILE NOT l_not_hash_found LOOP
15314 --
15315 l_index := l_index + g_hash_jump;
15316 --
15317 -- Check if the hash index exists, if not we can use it
15318 --
15319 IF NOT g_cache_ptip_hwf_el_rec.EXISTS(l_index) THEN
15320 --
15321 -- Lets store the hash value in the index
15322 --
15323 RAISE NO_DATA_FOUND;
15324 --
15325 ELSE
15326 --
15327 -- Make sure the index is the correct one
15328 --
15329 IF g_cache_ptip_hwf_el_rec(l_index).id = p_ptip_id THEN
15330 --
15331 -- We have a match so the hashed value has been stored before
15332 --
15333 l_not_hash_found := TRUE;
15334 --
15335 END IF;
15336 --
15337 END IF;
15338 --
15339 END LOOP;
15340 --
15341 END IF;
15342 --
15343 END IF;
15344 --
15345 IF p_old_val IS NOT NULL
15346 AND p_new_val IS NOT NULL THEN
15347 --
15348 RAISE NO_DATA_FOUND;
15349 --
15350 END IF;
15351 p_rec := g_cache_ptip_hwf_el_rec(l_index);
15352 --
15353 -- hr_utility.set_location ('Leaving '||l_package,10);
15354 --
15355 EXCEPTION
15356 --
15357 WHEN NO_DATA_FOUND THEN
15358 --
15359 -- The record has not been cached yet so lets cache it
15360 --
15361 OPEN c1;
15362 --
15363 FETCH c1 INTO g_cache_ptip_hwf_el_rec(l_index);
15364 IF c1%NOTFOUND THEN
15365 --
15366 if NOT g_cache_ptip_hwf_el_rec.EXISTS(l_index) then
15367 g_cache_ptip_hwf_el_rec(l_index).id := p_ptip_id;
15368 g_cache_ptip_hwf_el_rec(l_index).exist := 'N';
15369 end if;
15370 --
15371 END IF;
15372 --
15373 p_rec := g_cache_ptip_hwf_el_rec(l_index);
15374 --
15375 CLOSE c1;
15376 --
15377 END get_hours_ptip_elig;
15378 --
15379 PROCEDURE get_hours_elig(
15380 p_pgm_id IN NUMBER
15381 ,p_pl_id IN NUMBER
15382 ,p_oipl_id IN NUMBER
15383 ,p_plip_id IN NUMBER
15384 ,p_ptip_id IN NUMBER
15385 ,p_old_val in number default null
15386 ,p_new_val in number default null
15387 ,p_business_group_id IN NUMBER
15388 ,p_effective_date IN DATE
15389 ,p_rec OUT NOCOPY g_cache_hwf_rec_obj) IS
15390 --
15391 l_package VARCHAR2(80) := g_package || '.get_hours_elig';
15392 --
15393 BEGIN
15394 --
15395 -- hr_utility.set_location ('Entering '||l_package,10);
15396 --
15397 -- Derive which data type we are dealing with
15398 --
15399 IF p_pgm_id IS NOT NULL THEN
15400 --
15401 get_hours_pgm_elig(p_pgm_id=> p_pgm_id
15402 ,p_old_val => p_old_val
15403 ,p_new_val => p_new_val
15404 ,p_business_group_id => p_business_group_id
15405 ,p_effective_date => p_effective_date
15406 ,p_rec => p_rec);
15407 --
15408 ELSIF p_pl_id IS NOT NULL THEN
15409 --
15410 get_hours_pl_elig(p_pl_id=> p_pl_id
15411 ,p_old_val => p_old_val
15412 ,p_new_val => p_new_val
15413 ,p_business_group_id => p_business_group_id
15414 ,p_effective_date => p_effective_date
15415 ,p_rec => p_rec);
15416 --
15417 ELSIF p_oipl_id IS NOT NULL THEN
15418 --
15419 get_hours_oipl_elig(p_oipl_id=> p_oipl_id
15420 ,p_old_val => p_old_val
15421 ,p_new_val => p_new_val
15422 ,p_business_group_id => p_business_group_id
15423 ,p_effective_date => p_effective_date
15424 ,p_rec => p_rec);
15425 --
15426 ELSIF p_plip_id IS NOT NULL THEN
15427 --
15428 get_hours_plip_elig(p_plip_id=> p_plip_id
15429 ,p_old_val => p_old_val
15430 ,p_new_val => p_new_val
15431 ,p_business_group_id => p_business_group_id
15432 ,p_effective_date => p_effective_date
15433 ,p_rec => p_rec);
15434 --
15438 ,p_old_val => p_old_val
15435 ELSIF p_ptip_id IS NOT NULL THEN
15436 --
15437 get_hours_ptip_elig(p_ptip_id=> p_ptip_id
15439 ,p_new_val => p_new_val
15440 ,p_business_group_id => p_business_group_id
15441 ,p_effective_date => p_effective_date
15442 ,p_rec => p_rec);
15443 --
15444 END IF;
15445 --
15446 -- hr_utility.set_location ('Leaving '||l_package,10);
15447 --
15448 END get_hours_elig;
15449 --
15450 PROCEDURE get_hours_pgm_rate(
15451 p_pgm_id IN NUMBER
15452 ,p_old_val IN NUMBER DEFAULT NULL
15453 ,p_new_val IN NUMBER DEFAULT NULL
15454 ,p_business_group_id IN NUMBER
15455 ,p_effective_date IN DATE
15456 ,p_rec OUT NOCOPY g_cache_hwf_rec_obj) IS
15457 --
15458 l_package VARCHAR2(80) := g_package || '.get_hours_pgm_rate';
15459 l_old_val_1 NUMBER := p_old_val + 1;
15460 l_new_val_1 NUMBER := p_new_val + 1;
15461 --
15462 -- Define Cursor
15463 --
15464 CURSOR c1 IS
15465 SELECT p_pgm_id
15466 ,'Y'
15467 ,hwf.hrs_src_cd
15468 ,hwf.hrs_wkd_det_cd
15469 ,hwf.hrs_wkd_det_rl
15470 ,hwf.rndg_cd
15471 ,hwf.rndg_rl
15472 ,hwf.defined_balance_id
15473 ,hwf.bnfts_bal_id
15474 ,hwf.mn_hrs_num
15475 ,hwf.mx_hrs_num
15476 ,hwf.once_r_cntug_cd
15477 ,hwf.hrs_wkd_calc_rl
15478 FROM ben_hrs_wkd_in_perd_fctr hwf
15479 ,ben_hrs_wkd_in_perd_rt_f hwr
15480 ,ben_vrbl_rt_prfl_f vpf
15481 ,ben_acty_vrbl_rt_f avr
15482 ,ben_acty_base_rt_f abr
15483 WHERE abr.pgm_id = p_pgm_id
15484 AND p_effective_date BETWEEN abr.effective_start_date
15485 AND abr.effective_end_date
15486 AND abr.acty_base_rt_id = avr.acty_base_rt_id
15487 AND p_effective_date BETWEEN avr.effective_start_date
15488 AND avr.effective_end_date
15489 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
15490 AND p_effective_date BETWEEN vpf.effective_start_date
15491 AND vpf.effective_end_date
15492 AND vpf.vrbl_rt_prfl_id = hwr.vrbl_rt_prfl_id
15493 AND p_effective_date BETWEEN hwr.effective_start_date
15494 AND hwr.effective_end_date
15495 AND hwr.hrs_wkd_in_perd_fctr_id = hwf.hrs_wkd_in_perd_fctr_id
15496 AND (
15497 (
15498 p_new_val IS NOT NULL
15499 AND p_old_val IS NOT NULL
15500 AND p_new_val >= NVL(hwf.mn_hrs_num
15501 ,p_new_val)
15502 AND p_new_val < decode(nvl(hwf.mx_hrs_num,p_new_val) ,
15503 trunc(nvl(hwf.mx_hrs_num,p_new_val))
15504 ,decode(nvl(hwf.mn_hrs_num,p_new_val), trunc(nvl(hwf.mn_hrs_num,p_new_val)),
15505 nvl(hwf.mx_hrs_num,p_new_val)+1,nvl(hwf.mx_hrs_num,p_new_val)+0.000000001),
15506 nvl(hwf.mx_hrs_num,p_new_val)+0.000000001 ) )
15507 -- ceil( NVL(hwf.mx_hrs_num
15508 -- ,p_new_val) + 0.001 ))
15509 OR (
15510 p_new_val IS NOT NULL
15511 AND p_old_val IS NOT NULL
15512 AND (
15513 p_new_val < NVL(hwf.mn_hrs_num
15514 ,p_new_val)
15515 OR p_new_val >= decode(nvl(hwf.mx_hrs_num,p_new_val) ,
15516 trunc(nvl(hwf.mx_hrs_num,p_new_val))
15517 ,decode(nvl(hwf.mn_hrs_num,p_new_val), trunc(nvl(hwf.mn_hrs_num,p_new_val)),
15518 nvl(hwf.mx_hrs_num,p_new_val)+1,nvl(hwf.mx_hrs_num,p_new_val)+0.000000001),
15519 nvl(hwf.mx_hrs_num,p_new_val)+0.000000001 ) )
15520 -- ceil( NVL(hwf.mx_hrs_num
15521 -- ,p_new_val)) + 0.001 )
15522 AND p_old_val >= NVL(hwf.mn_hrs_num
15523 ,p_old_val)
15524 AND p_old_val < decode(nvl(hwf.mx_hrs_num,p_old_val) ,
15525 trunc(nvl(hwf.mx_hrs_num,p_old_val))
15526 ,decode(nvl(hwf.mn_hrs_num,p_old_val), trunc(nvl(hwf.mn_hrs_num,p_old_val)),
15527 nvl(hwf.mx_hrs_num,p_old_val)+1,nvl(hwf.mx_hrs_num,p_old_val)+0.000000001),
15528 nvl(hwf.mx_hrs_num,p_old_val)+0.000000001 ) )
15529 -- ceil( NVL(hwf.mx_hrs_num
15530 -- ,p_old_val)) + 0.001 )
15531 OR ( p_new_val IS NULL
15532 AND p_old_val IS NULL));
15533 -- PERFNEW. SPLIT TO 2 CURSORS C1 and C2.
15534 --UNION ALL
15535 CURSOR c2 IS
15536 SELECT p_pgm_id
15537 ,'Y'
15538 ,hwf.hrs_src_cd
15539 ,hwf.hrs_wkd_det_cd
15540 ,hwf.hrs_wkd_det_rl
15541 ,hwf.rndg_cd
15542 ,hwf.rndg_rl
15546 ,hwf.mx_hrs_num
15543 ,hwf.defined_balance_id
15544 ,hwf.bnfts_bal_id
15545 ,hwf.mn_hrs_num
15547 ,hwf.once_r_cntug_cd
15548 ,hwf.hrs_wkd_calc_rl
15549 FROM ben_hrs_wkd_in_perd_fctr hwf
15550 --,ben_hrs_wkd_in_perd_rt_f hwr
15551 ,ben_elig_hrs_wkd_prte_f ehw
15552 ,ben_eligy_prfl_f elp
15553 ,ben_vrbl_rt_elig_prfl_f vep
15554 ,ben_vrbl_rt_prfl_f vpf
15555 ,ben_acty_vrbl_rt_f avr
15556 ,ben_acty_base_rt_f abr
15557 WHERE abr.pgm_id = p_pgm_id
15558 AND p_effective_date BETWEEN abr.effective_start_date
15559 AND abr.effective_end_date
15560 AND abr.acty_base_rt_id = avr.acty_base_rt_id
15561 AND p_effective_date BETWEEN avr.effective_start_date
15562 AND avr.effective_end_date
15563 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
15564 AND p_effective_date BETWEEN vpf.effective_start_date
15565 AND vpf.effective_end_date
15566 -- AND vpf.vrbl_rt_prfl_id = ehw.vrbl_rt_prfl_id
15567 AND vpf.vrbl_rt_prfl_id = vep.vrbl_rt_prfl_id
15568 AND p_effective_date BETWEEN vep.effective_start_date
15569 AND vep.effective_end_date
15570 AND vep.eligy_prfl_id = elp.eligy_prfl_id
15571 AND p_effective_date BETWEEN elp.effective_start_date
15572 AND elp.effective_end_date
15573 AND ehw.eligy_prfl_id = elp.eligy_prfl_id
15574 AND p_effective_date BETWEEN ehw.effective_start_date
15575 AND ehw.effective_end_date
15576 AND ehw.hrs_wkd_in_perd_fctr_id = hwf.hrs_wkd_in_perd_fctr_id
15577 AND (
15578 (
15579 p_new_val IS NOT NULL
15580 AND p_old_val IS NOT NULL
15581 AND p_new_val >= NVL(hwf.mn_hrs_num
15582 ,p_new_val)
15583 AND p_new_val < decode(nvl(hwf.mx_hrs_num,p_new_val) ,
15584 trunc(nvl(hwf.mx_hrs_num,p_new_val))
15585 ,decode(nvl(hwf.mn_hrs_num,p_new_val), trunc(nvl(hwf.mn_hrs_num,p_new_val)),
15586 nvl(hwf.mx_hrs_num,p_new_val)+1,nvl(hwf.mx_hrs_num,p_new_val)+0.000000001),
15587 nvl(hwf.mx_hrs_num,p_new_val)+0.000000001 ) )
15588 -- ceil( NVL(hwf.mx_hrs_num
15589 -- ,p_new_val) + 0.001 ))
15590 OR (
15591 p_new_val IS NOT NULL
15592 AND p_old_val IS NOT NULL
15593 AND (
15594 p_new_val < NVL(hwf.mn_hrs_num
15595 ,p_new_val)
15596 OR p_new_val >= decode(nvl(hwf.mx_hrs_num,p_new_val) ,
15597 trunc(nvl(hwf.mx_hrs_num,p_new_val))
15598 ,decode(nvl(hwf.mn_hrs_num,p_new_val), trunc(nvl(hwf.mn_hrs_num,p_new_val)),
15599 nvl(hwf.mx_hrs_num,p_new_val)+1,nvl(hwf.mx_hrs_num,p_new_val)+0.000000001),
15600 nvl(hwf.mx_hrs_num,p_new_val)+0.000000001 ) )
15601 -- ceil( NVL(hwf.mx_hrs_num
15602 -- ,p_new_val)) + 0.001 )
15603 AND p_old_val >= NVL(hwf.mn_hrs_num
15604 ,p_old_val)
15605 AND p_old_val < decode(nvl(hwf.mx_hrs_num,p_old_val) ,
15606 trunc(nvl(hwf.mx_hrs_num,p_old_val))
15607 ,decode(nvl(hwf.mn_hrs_num,p_old_val), trunc(nvl(hwf.mn_hrs_num,p_old_val)),
15608 nvl(hwf.mx_hrs_num,p_old_val)+1,nvl(hwf.mx_hrs_num,p_old_val)+0.000000001),
15609 nvl(hwf.mx_hrs_num,p_old_val)+0.000000001 ) )
15610 -- ceil( NVL(hwf.mx_hrs_num
15611 -- ,p_old_val)) + 0.001 )
15612 OR ( p_new_val IS NULL
15613 AND p_old_val IS NULL));
15614 --
15615 --
15616 l_index PLS_INTEGER;
15617 l_not_hash_found BOOLEAN;
15618 l_c2notfound BOOLEAN;
15619 --
15620 BEGIN
15621 --
15622 -- hr_utility.set_location ('Entering '||l_package,10);
15623 --
15624 -- Steps to do process
15625 --
15626 -- 1) Try and get value from cache
15627 -- 2) If can get from cache then copy to output record
15628 -- 3) If can't get from cache do db hit and then
15629 -- copy to cache record and then copy to output record.
15630 --
15631 -- Get hashed index value
15632 --
15633 l_index := MOD(p_pgm_id
15634 ,g_hash_key);
15635 --
15636 IF NOT g_cache_pgm_hwf_rt_rec.EXISTS(l_index) THEN
15637 --
15638 -- Lets store the hash value in this index
15639 --
15640 RAISE NO_DATA_FOUND;
15641 --
15642 ELSE
15643 --
15644 -- If it does exist make sure its the right one
15645 --
15646 IF g_cache_pgm_hwf_rt_rec(l_index).id <> p_pgm_id THEN
15647 --
15648 -- Loop through the hash using the jump routine to check further
15649 -- indexes
15650 --
15651 l_not_hash_found := FALSE;
15655 l_index := l_index + g_hash_jump;
15652 --
15653 WHILE NOT l_not_hash_found LOOP
15654 --
15656 --
15657 -- Check if the hash index exists, if not we can use it
15658 --
15659 IF NOT g_cache_pgm_hwf_rt_rec.EXISTS(l_index) THEN
15660 --
15661 -- Lets store the hash value in the index
15662 --
15663 RAISE NO_DATA_FOUND;
15664 --
15665 ELSE
15666 --
15667 -- Make sure the index is the correct one
15668 --
15669 IF g_cache_pgm_hwf_rt_rec(l_index).id = p_pgm_id THEN
15670 --
15671 -- We have a match so the hashed value has been stored before
15672 --
15673 l_not_hash_found := TRUE;
15674 --
15675 END IF;
15676 --
15677 END IF;
15678 --
15679 END LOOP;
15680 --
15681 END IF;
15682 --
15683 END IF;
15684 --
15685 -- If p_old_val and p_new_val is set this means we are trying to retrieve
15686 -- the correct rate for the calculated value.
15687 -- Previously we just cached the first rate we
15688 -- found since we needed the determination code, the correct age,los code,etc
15689 -- By killing the cache and forcing the value to be removed we cache the
15690 -- correct rate profile for the case we need.
15691 --
15692 IF p_old_val IS NOT NULL
15693 AND p_new_val IS NOT NULL THEN
15694 --
15695 RAISE NO_DATA_FOUND;
15696 --
15697 END IF;
15698 --
15699 p_rec := g_cache_pgm_hwf_rt_rec(l_index);
15700 --
15701 -- hr_utility.set_location ('Leaving '||l_package,10);
15702 --
15703 EXCEPTION
15704 --
15705 WHEN NO_DATA_FOUND THEN
15706 --
15707 -- The record has not been cached yet so lets cache it
15708 --
15709 OPEN c1;
15710 --
15711 FETCH c1 INTO g_cache_pgm_hwf_rt_rec(l_index);
15712 -- PERFNEW
15713 IF c1%NOTFOUND THEN
15714 --
15715 l_c2notfound := false;
15716 OPEN c2;
15717 FETCH c2 INTO g_cache_pgm_hwf_rt_rec(l_index);
15718 IF c2%NOTFOUND THEN
15719 --
15720 l_c2notfound := true;
15721 --
15722 END IF;
15723 CLOSE c2;
15724 --
15725 END IF;
15726 -- PERFNEW
15727 IF p_old_val IS NULL
15728 AND p_new_val IS NULL THEN
15729 --
15730 IF c1%NOTFOUND and l_c2notfound THEN -- PERFNEW
15731 --
15732 if NOT g_cache_pgm_hwf_rt_rec.EXISTS(l_index) then
15733 g_cache_pgm_hwf_rt_rec(l_index).id := p_pgm_id;
15734 g_cache_pgm_hwf_rt_rec(l_index).exist := 'N';
15735 end if;
15736 --
15737 END IF;
15738 --
15739 END IF;
15740 --
15741 p_rec := g_cache_pgm_hwf_rt_rec(l_index);
15742 --
15743 CLOSE c1;
15744 --
15745 END get_hours_pgm_rate;
15746 --
15747 PROCEDURE get_hours_pl_rate(
15748 p_pl_id IN NUMBER
15749 ,p_old_val IN NUMBER DEFAULT NULL
15750 ,p_new_val IN NUMBER DEFAULT NULL
15751 ,p_business_group_id IN NUMBER
15752 ,p_effective_date IN DATE
15753 ,p_rec OUT NOCOPY g_cache_hwf_rec_obj) IS
15754 --
15755 l_package VARCHAR2(80) := g_package || '.get_hours_pl_rate';
15756 l_old_val_1 NUMBER := p_old_val + 1;
15757 l_new_val_1 NUMBER := p_new_val + 1;
15758 --
15759 -- Define Cursor
15760 --
15761 CURSOR c1 IS
15762 SELECT p_pl_id
15763 ,'Y'
15764 ,hwf.hrs_src_cd
15765 ,hwf.hrs_wkd_det_cd
15766 ,hwf.hrs_wkd_det_rl
15767 ,hwf.rndg_cd
15768 ,hwf.rndg_rl
15769 ,hwf.defined_balance_id
15770 ,hwf.bnfts_bal_id
15771 ,hwf.mn_hrs_num
15772 ,hwf.mx_hrs_num
15773 ,hwf.once_r_cntug_cd
15774 ,hwf.hrs_wkd_calc_rl
15775 FROM ben_hrs_wkd_in_perd_fctr hwf
15776 ,ben_hrs_wkd_in_perd_rt_f hwr
15777 ,ben_vrbl_rt_prfl_f vpf
15778 ,ben_acty_vrbl_rt_f avr
15779 ,ben_acty_base_rt_f abr
15780 WHERE abr.pl_id = p_pl_id
15781 AND p_effective_date BETWEEN abr.effective_start_date
15782 AND abr.effective_end_date
15783 AND abr.acty_base_rt_id = avr.acty_base_rt_id
15784 AND p_effective_date BETWEEN avr.effective_start_date
15785 AND avr.effective_end_date
15786 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
15787 AND p_effective_date BETWEEN vpf.effective_start_date
15788 AND vpf.effective_end_date
15789 AND vpf.vrbl_rt_prfl_id = hwr.vrbl_rt_prfl_id
15790 AND p_effective_date BETWEEN hwr.effective_start_date
15791 AND hwr.effective_end_date
15792 AND hwr.hrs_wkd_in_perd_fctr_id = hwf.hrs_wkd_in_perd_fctr_id
15793 AND (
15797 AND p_new_val >= NVL(hwf.mn_hrs_num
15794 (
15795 p_new_val IS NOT NULL
15796 AND p_old_val IS NOT NULL
15798 ,p_new_val)
15799 AND p_new_val < decode(nvl(hwf.mx_hrs_num,p_new_val) ,
15800 trunc(nvl(hwf.mx_hrs_num,p_new_val))
15801 ,decode(nvl(hwf.mn_hrs_num,p_new_val), trunc(nvl(hwf.mn_hrs_num,p_new_val)),
15802 nvl(hwf.mx_hrs_num,p_new_val)+1,nvl(hwf.mx_hrs_num,p_new_val)+0.000000001),
15803 nvl(hwf.mx_hrs_num,p_new_val)+0.000000001 ) )
15804 -- ceil(NVL(hwf.mx_hrs_num
15805 -- ,p_new_val) + 0.001 ))
15806 OR (
15807 p_new_val IS NOT NULL
15808 AND p_old_val IS NOT NULL
15809 AND (
15810 p_new_val < NVL(hwf.mn_hrs_num
15811 ,p_new_val)
15812 OR p_new_val >= decode(nvl(hwf.mx_hrs_num,p_new_val) ,
15813 trunc(nvl(hwf.mx_hrs_num,p_new_val))
15814 ,decode(nvl(hwf.mn_hrs_num,p_new_val), trunc(nvl(hwf.mn_hrs_num,p_new_val)),
15815 nvl(hwf.mx_hrs_num,p_new_val)+1,nvl(hwf.mx_hrs_num,p_new_val)+0.000000001),
15816 nvl(hwf.mx_hrs_num,p_new_val)+0.000000001 ) )
15817 -- ceil( NVL(hwf.mx_hrs_num
15818 -- ,p_new_val)) + 0.001 )
15819 AND p_old_val >= NVL(hwf.mn_hrs_num
15820 ,p_old_val)
15821 AND p_old_val < decode(nvl(hwf.mx_hrs_num,p_old_val) ,
15822 trunc(nvl(hwf.mx_hrs_num,p_old_val))
15823 ,decode(nvl(hwf.mn_hrs_num,p_old_val), trunc(nvl(hwf.mn_hrs_num,p_old_val)),
15824 nvl(hwf.mx_hrs_num,p_old_val)+1,nvl(hwf.mx_hrs_num,p_old_val)+0.000000001),
15825 nvl(hwf.mx_hrs_num,p_old_val)+0.000000001 ) )
15826 -- ceil( NVL(hwf.mx_hrs_num
15827 -- ,p_old_val)) + 0.001 )
15828 OR ( p_new_val IS NULL
15829 AND p_old_val IS NULL));
15830 -- PERFNEW. SPLIT TO 2 CURSORS C1 and C2.
15831 --UNION ALL
15832 CURSOR c2 IS
15833 SELECT p_pl_id
15834 ,'Y'
15835 ,hwf.hrs_src_cd
15836 ,hwf.hrs_wkd_det_cd
15837 ,hwf.hrs_wkd_det_rl
15838 ,hwf.rndg_cd
15839 ,hwf.rndg_rl
15840 ,hwf.defined_balance_id
15841 ,hwf.bnfts_bal_id
15842 ,hwf.mn_hrs_num
15843 ,hwf.mx_hrs_num
15844 ,hwf.once_r_cntug_cd
15845 ,hwf.hrs_wkd_calc_rl
15846 FROM ben_hrs_wkd_in_perd_fctr hwf
15847 --,ben_hrs_wkd_in_perd_rt_f hwr
15848 ,ben_elig_hrs_wkd_prte_f ehw
15849 ,ben_eligy_prfl_f elp
15850 ,ben_vrbl_rt_elig_prfl_f vep
15851 ,ben_vrbl_rt_prfl_f vpf
15852 ,ben_acty_vrbl_rt_f avr
15853 ,ben_acty_base_rt_f abr
15854 WHERE abr.pl_id = p_pl_id
15855 AND p_effective_date BETWEEN abr.effective_start_date
15856 AND abr.effective_end_date
15857 AND abr.acty_base_rt_id = avr.acty_base_rt_id
15858 AND p_effective_date BETWEEN avr.effective_start_date
15859 AND avr.effective_end_date
15860 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
15861 AND p_effective_date BETWEEN vpf.effective_start_date
15862 AND vpf.effective_end_date
15863 -- AND vpf.vrbl_rt_prfl_id = ehw.vrbl_rt_prfl_id
15864 AND vpf.vrbl_rt_prfl_id = vep.vrbl_rt_prfl_id
15865 AND p_effective_date BETWEEN vep.effective_start_date
15866 AND vep.effective_end_date
15867 AND vep.eligy_prfl_id = elp.eligy_prfl_id
15868 AND p_effective_date BETWEEN elp.effective_start_date
15869 AND elp.effective_end_date
15870 AND ehw.eligy_prfl_id = elp.eligy_prfl_id
15871 AND p_effective_date BETWEEN ehw.effective_start_date
15872 AND ehw.effective_end_date
15873 AND ehw.hrs_wkd_in_perd_fctr_id = hwf.hrs_wkd_in_perd_fctr_id
15874 AND (
15875 (
15876 p_new_val IS NOT NULL
15877 AND p_old_val IS NOT NULL
15878 AND p_new_val >= NVL(hwf.mn_hrs_num
15879 ,p_new_val)
15880 AND p_new_val < decode(nvl(hwf.mx_hrs_num,p_new_val) ,
15881 trunc(nvl(hwf.mx_hrs_num,p_new_val))
15882 ,decode(nvl(hwf.mn_hrs_num,p_new_val), trunc(nvl(hwf.mn_hrs_num,p_new_val)),
15883 nvl(hwf.mx_hrs_num,p_new_val)+1,nvl(hwf.mx_hrs_num,p_new_val)+0.000000001),
15884 nvl(hwf.mx_hrs_num,p_new_val)+0.000000001 ) )
15885 -- ceil(NVL(hwf.mx_hrs_num
15886 -- ,p_new_val) + 0.001 ))
15887 OR (
15888 p_new_val IS NOT NULL
15892 ,p_new_val)
15889 AND p_old_val IS NOT NULL
15890 AND (
15891 p_new_val < NVL(hwf.mn_hrs_num
15893 OR p_new_val >= decode(nvl(hwf.mx_hrs_num,p_new_val) ,
15894 trunc(nvl(hwf.mx_hrs_num,p_new_val))
15895 ,decode(nvl(hwf.mn_hrs_num,p_new_val), trunc(nvl(hwf.mn_hrs_num,p_new_val)),
15896 nvl(hwf.mx_hrs_num,p_new_val)+1,nvl(hwf.mx_hrs_num,p_new_val)+0.000000001),
15897 nvl(hwf.mx_hrs_num,p_new_val)+0.000000001 ) )
15898 -- ceil( NVL(hwf.mx_hrs_num
15899 -- ,p_new_val)) + 0.001 )
15900 AND p_old_val >= NVL(hwf.mn_hrs_num
15901 ,p_old_val)
15902 AND p_old_val < decode(nvl(hwf.mx_hrs_num,p_old_val) ,
15903 trunc(nvl(hwf.mx_hrs_num,p_old_val))
15904 ,decode(nvl(hwf.mn_hrs_num,p_old_val), trunc(nvl(hwf.mn_hrs_num,p_old_val)),
15905 nvl(hwf.mx_hrs_num,p_old_val)+1,nvl(hwf.mx_hrs_num,p_old_val)+0.000000001),
15906 nvl(hwf.mx_hrs_num,p_old_val)+0.000000001 ) )
15907 -- ceil( NVL(hwf.mx_hrs_num
15908 -- ,p_old_val)) + 0.001 )
15909 OR ( p_new_val IS NULL
15910 AND p_old_val IS NULL));
15911 --
15912 --
15913 l_index PLS_INTEGER;
15914 l_not_hash_found BOOLEAN;
15915 l_c2notfound BOOLEAN;
15916 --
15917 BEGIN
15918 --
15919 -- hr_utility.set_location ('Entering '||l_package,10);
15920 --
15921 -- Steps to do process
15922 --
15923 -- 1) Try and get value from cache
15924 -- 2) If can get from cache then copy to output record
15925 -- 3) If can't get from cache do db hit and then
15926 -- copy to cache record and then copy to output record.
15927 --
15928 -- Get hashed index value
15929 --
15930 l_index := MOD(p_pl_id
15931 ,g_hash_key);
15932 --
15933 IF NOT g_cache_pl_hwf_rt_rec.EXISTS(l_index) THEN
15934 --
15935 -- Lets store the hash value in this index
15936 --
15937 RAISE NO_DATA_FOUND;
15938 --
15939 ELSE
15940 --
15941 -- If it does exist make sure its the right one
15942 --
15943 IF g_cache_pl_hwf_rt_rec(l_index).id <> p_pl_id THEN
15944 --
15945 -- Loop through the hash using the jump routine to check further
15946 -- indexes
15947 --
15948 l_not_hash_found := FALSE;
15949 --
15950 WHILE NOT l_not_hash_found LOOP
15951 --
15952 l_index := l_index + g_hash_jump;
15953 --
15954 -- Check if the hash index exists, if not we can use it
15955 --
15956 IF NOT g_cache_pl_hwf_rt_rec.EXISTS(l_index) THEN
15957 --
15958 -- Lets store the hash value in the index
15959 --
15960 RAISE NO_DATA_FOUND;
15961 --
15962 ELSE
15963 --
15964 -- Make sure the index is the correct one
15965 --
15966 IF g_cache_pl_hwf_rt_rec(l_index).id = p_pl_id THEN
15967 --
15968 -- We have a match so the hashed value has been stored before
15969 --
15970 l_not_hash_found := TRUE;
15971 --
15972 END IF;
15973 --
15974 END IF;
15975 --
15976 END LOOP;
15977 --
15978 END IF;
15979 --
15980 END IF;
15981 --
15982 -- If p_old_val and p_new_val is set this means we are trying to retrieve
15983 -- the correct rate for the calculated value.
15984 -- Previously we just cached the first rate we
15985 -- found since we needed the determination code, the correct age,los code,etc
15986 -- By killing the cache and forcing the value to be removed we cache the
15987 -- correct rate profile for the case we need.
15988 --
15989 IF p_old_val IS NOT NULL
15990 AND p_new_val IS NOT NULL THEN
15991 --
15992 RAISE NO_DATA_FOUND;
15993 --
15994 END IF;
15995 --
15996 p_rec := g_cache_pl_hwf_rt_rec(l_index);
15997 --
15998 -- hr_utility.set_location ('Leaving '||l_package,10);
15999 --
16000 EXCEPTION
16001 --
16002 WHEN NO_DATA_FOUND THEN
16003 --
16004 -- The record has not been cached yet so lets cache it
16005 --
16006 OPEN c1;
16007 --
16008 FETCH c1 INTO g_cache_pl_hwf_rt_rec(l_index);
16009 -- PERFNEW
16010 IF c1%NOTFOUND THEN
16011 --
16012 l_c2notfound := false;
16013 OPEN c2;
16014 FETCH c2 INTO g_cache_pl_hwf_rt_rec(l_index);
16015 IF c2%NOTFOUND THEN
16016 --
16017 l_c2notfound := true;
16018 --
16019 END IF;
16020 CLOSE c2;
16021 --
16022 END IF;
16023 -- PERFNEW
16024 IF p_old_val IS NULL
16025 AND p_new_val IS NULL THEN
16029 if NOT g_cache_pl_hwf_rt_rec.EXISTS(l_index) then
16026 --
16027 IF c1%NOTFOUND and l_c2notfound THEN -- PERFNEW
16028 --
16030 g_cache_pl_hwf_rt_rec(l_index).id := p_pl_id;
16031 g_cache_pl_hwf_rt_rec(l_index).exist := 'N';
16032 end if;
16033 --
16034 END IF;
16035 --
16036 END IF;
16037 --
16038 p_rec := g_cache_pl_hwf_rt_rec(l_index);
16039 --
16040 CLOSE c1;
16041 --
16042 END get_hours_pl_rate;
16043 --
16044 PROCEDURE get_hours_oipl_rate(
16045 p_oipl_id IN NUMBER
16046 ,p_old_val IN NUMBER DEFAULT NULL
16047 ,p_new_val IN NUMBER DEFAULT NULL
16048 ,p_business_group_id IN NUMBER
16049 ,p_effective_date IN DATE
16050 ,p_rec OUT NOCOPY g_cache_hwf_rec_obj) IS
16051 --
16052 l_package VARCHAR2(80) := g_package || '.get_hours_oipl_rate';
16053 l_old_val_1 NUMBER := p_old_val + 1;
16054 l_new_val_1 NUMBER := p_new_val + 1;
16055 --
16056 l_opt_id NUMBER;
16057 --
16058 -- Define Cursor
16059 --
16060 CURSOR c1 IS
16061 SELECT p_oipl_id
16062 ,'Y'
16063 ,hwf.hrs_src_cd
16064 ,hwf.hrs_wkd_det_cd
16065 ,hwf.hrs_wkd_det_rl
16066 ,hwf.rndg_cd
16067 ,hwf.rndg_rl
16068 ,hwf.defined_balance_id
16069 ,hwf.bnfts_bal_id
16070 ,hwf.mn_hrs_num
16071 ,hwf.mx_hrs_num
16072 ,hwf.once_r_cntug_cd
16073 ,hwf.hrs_wkd_calc_rl
16074 FROM ben_hrs_wkd_in_perd_fctr hwf
16075 ,ben_hrs_wkd_in_perd_rt_f hwr
16076 ,ben_vrbl_rt_prfl_f vpf
16077 ,ben_acty_vrbl_rt_f avr
16078 ,ben_acty_base_rt_f abr
16079 WHERE ( abr.oipl_id = p_oipl_id
16080 --
16081 --START Option level Rates Enhancements
16082 or ( abr.opt_id = l_opt_id and
16083 not exists (select null from ben_acty_base_rt_f abr1
16084 where abr1.oipl_id = p_oipl_id )))
16085 --END Option level Rates Enhancements
16086 --
16087 AND p_effective_date BETWEEN abr.effective_start_date
16088 AND abr.effective_end_date
16089 AND abr.acty_base_rt_id = avr.acty_base_rt_id
16090 AND p_effective_date BETWEEN avr.effective_start_date
16091 AND avr.effective_end_date
16092 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
16093 AND p_effective_date BETWEEN vpf.effective_start_date
16094 AND vpf.effective_end_date
16095 AND vpf.vrbl_rt_prfl_id = hwr.vrbl_rt_prfl_id
16096 AND p_effective_date BETWEEN hwr.effective_start_date
16097 AND hwr.effective_end_date
16098 AND hwr.hrs_wkd_in_perd_fctr_id = hwf.hrs_wkd_in_perd_fctr_id
16099 AND (
16100 (
16101 p_new_val IS NOT NULL
16102 AND p_old_val IS NOT NULL
16103 AND p_new_val >= NVL(hwf.mn_hrs_num
16104 ,p_new_val)
16105 AND p_new_val < decode(nvl(hwf.mx_hrs_num,p_new_val) ,
16106 trunc(nvl(hwf.mx_hrs_num,p_new_val))
16107 ,decode(nvl(hwf.mn_hrs_num,p_new_val), trunc(nvl(hwf.mn_hrs_num,p_new_val)),
16108 nvl(hwf.mx_hrs_num,p_new_val)+1,nvl(hwf.mx_hrs_num,p_new_val)+0.000000001),
16109 nvl(hwf.mx_hrs_num,p_new_val)+0.000000001 ) )
16110 -- ceil( NVL(hwf.mx_hrs_num
16111 -- ,p_new_val) + 0.001 ))
16112 OR (
16113 p_new_val IS NOT NULL
16114 AND p_old_val IS NOT NULL
16115 AND (
16116 p_new_val < NVL(hwf.mn_hrs_num
16117 ,p_new_val)
16118 OR p_new_val >= decode(nvl(hwf.mx_hrs_num,p_new_val) ,
16119 trunc(nvl(hwf.mx_hrs_num,p_new_val))
16120 ,decode(nvl(hwf.mn_hrs_num,p_new_val), trunc(nvl(hwf.mn_hrs_num,p_new_val)),
16121 nvl(hwf.mx_hrs_num,p_new_val)+1,nvl(hwf.mx_hrs_num,p_new_val)+0.000000001),
16122 nvl(hwf.mx_hrs_num,p_new_val)+0.000000001 ) )
16123 -- ceil(NVL(hwf.mx_hrs_num
16124 -- ,p_new_val)) + 0.001 )
16125 AND p_old_val >= NVL(hwf.mn_hrs_num
16126 ,p_old_val)
16127 AND p_old_val < decode(nvl(hwf.mx_hrs_num,p_old_val) ,
16128 trunc(nvl(hwf.mx_hrs_num,p_old_val))
16129 ,decode(nvl(hwf.mn_hrs_num,p_old_val), trunc(nvl(hwf.mn_hrs_num,p_old_val)),
16130 nvl(hwf.mx_hrs_num,p_old_val)+1,nvl(hwf.mx_hrs_num,p_old_val)+0.000000001),
16131 nvl(hwf.mx_hrs_num,p_old_val)+0.000000001 ) )
16132 -- ceil(NVL(hwf.mx_hrs_num
16133 -- ,p_old_val)) + 0.001 )
16134 OR ( p_new_val IS NULL
16138 CURSOR c2 IS
16135 AND p_old_val IS NULL));
16136 -- PERFNEW. SPLIT TO 2 CURSORS C1 and C2.
16137 --UNION ALL
16139 SELECT p_oipl_id
16140 ,'Y'
16141 ,hwf.hrs_src_cd
16142 ,hwf.hrs_wkd_det_cd
16143 ,hwf.hrs_wkd_det_rl
16144 ,hwf.rndg_cd
16145 ,hwf.rndg_rl
16146 ,hwf.defined_balance_id
16147 ,hwf.bnfts_bal_id
16148 ,hwf.mn_hrs_num
16149 ,hwf.mx_hrs_num
16150 ,hwf.once_r_cntug_cd
16151 ,hwf.hrs_wkd_calc_rl
16152 FROM ben_hrs_wkd_in_perd_fctr hwf
16153 --,ben_hrs_wkd_in_perd_rt_f hwr
16154 ,ben_elig_hrs_wkd_prte_f ehw
16155 ,ben_eligy_prfl_f elp
16156 ,ben_vrbl_rt_elig_prfl_f vep
16157 ,ben_vrbl_rt_prfl_f vpf
16158 ,ben_acty_vrbl_rt_f avr
16159 ,ben_acty_base_rt_f abr
16160 WHERE ( abr.oipl_id = p_oipl_id
16161 --
16162 --START Option level Rates Enhancements
16163 or ( abr.opt_id = l_opt_id and
16164 not exists (select null from ben_acty_base_rt_f abr1
16165 where abr1.oipl_id = p_oipl_id )))
16166 --END Option level Rates Enhancements
16167 --
16168 AND p_effective_date BETWEEN abr.effective_start_date
16169 AND abr.effective_end_date
16170 AND abr.acty_base_rt_id = avr.acty_base_rt_id
16171 AND p_effective_date BETWEEN avr.effective_start_date
16172 AND avr.effective_end_date
16173 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
16174 AND p_effective_date BETWEEN vpf.effective_start_date
16175 AND vpf.effective_end_date
16176 -- AND vpf.vrbl_rt_prfl_id = ehw.vrbl_rt_prfl_id
16177 AND vpf.vrbl_rt_prfl_id = vep.vrbl_rt_prfl_id
16178 AND p_effective_date BETWEEN vep.effective_start_date
16179 AND vep.effective_end_date
16180 AND vep.eligy_prfl_id = elp.eligy_prfl_id
16181 AND p_effective_date BETWEEN elp.effective_start_date
16182 AND elp.effective_end_date
16183 AND ehw.eligy_prfl_id = elp.eligy_prfl_id
16184 AND p_effective_date BETWEEN ehw.effective_start_date
16185 AND ehw.effective_end_date
16186 AND ehw.hrs_wkd_in_perd_fctr_id = hwf.hrs_wkd_in_perd_fctr_id
16187 AND (
16188 (
16189 p_new_val IS NOT NULL
16190 AND p_old_val IS NOT NULL
16191 AND p_new_val >= NVL(hwf.mn_hrs_num
16192 ,p_new_val)
16193 AND p_new_val < decode(nvl(hwf.mx_hrs_num,p_new_val) ,
16194 trunc(nvl(hwf.mx_hrs_num,p_new_val))
16195 ,decode(nvl(hwf.mn_hrs_num,p_new_val), trunc(nvl(hwf.mn_hrs_num,p_new_val)),
16196 nvl(hwf.mx_hrs_num,p_new_val)+1,nvl(hwf.mx_hrs_num,p_new_val)+0.000000001),
16197 nvl(hwf.mx_hrs_num,p_new_val)+0.000000001 ) )
16198 -- ceil( NVL(hwf.mx_hrs_num
16199 -- ,p_new_val) + 0.001 ))
16200 OR (
16201 p_new_val IS NOT NULL
16202 AND p_old_val IS NOT NULL
16203 AND (
16204 p_new_val < NVL(hwf.mn_hrs_num
16205 ,p_new_val)
16206 OR p_new_val >= decode(nvl(hwf.mx_hrs_num,p_new_val) ,
16207 trunc(nvl(hwf.mx_hrs_num,p_new_val))
16208 ,decode(nvl(hwf.mn_hrs_num,p_new_val), trunc(nvl(hwf.mn_hrs_num,p_new_val)),
16209 nvl(hwf.mx_hrs_num,p_new_val)+1,nvl(hwf.mx_hrs_num,p_new_val)+0.000000001),
16210 nvl(hwf.mx_hrs_num,p_new_val)+0.000000001 ) )
16211 -- ceil(NVL(hwf.mx_hrs_num
16212 -- ,p_new_val)) + 0.001 )
16213 AND p_old_val >= NVL(hwf.mn_hrs_num
16214 ,p_old_val)
16215 AND p_old_val < decode(nvl(hwf.mx_hrs_num,p_old_val) ,
16216 trunc(nvl(hwf.mx_hrs_num,p_old_val))
16217 ,decode(nvl(hwf.mn_hrs_num,p_old_val), trunc(nvl(hwf.mn_hrs_num,p_old_val)),
16218 nvl(hwf.mx_hrs_num,p_old_val)+1,nvl(hwf.mx_hrs_num,p_old_val)+0.000000001),
16219 nvl(hwf.mx_hrs_num,p_old_val)+0.000000001 ) )
16220 -- ceil(NVL(hwf.mx_hrs_num
16221 -- ,p_old_val)) + 0.001 )
16222 OR ( p_new_val IS NULL
16223 AND p_old_val IS NULL));
16224 --
16225 --
16226 l_index PLS_INTEGER;
16227 l_not_hash_found BOOLEAN;
16228 l_c2notfound BOOLEAN;
16229 --
16230 BEGIN
16231 --
16232 -- hr_utility.set_location ('Entering '||l_package,10);
16233 --
16234 -- Steps to do process
16235 --
16236 -- 1) Try and get value from cache
16237 -- 2) If can get from cache then copy to output record
16238 -- 3) If can't get from cache do db hit and then
16239 -- copy to cache record and then copy to output record.
16240 --
16244 ,g_hash_key);
16241 -- Get hashed index value
16242 --
16243 l_index := MOD(p_oipl_id
16245 --
16246 IF NOT g_cache_oipl_hwf_rt_rec.EXISTS(l_index) THEN
16247 --
16248 -- Lets store the hash value in this index
16249 --
16250 RAISE NO_DATA_FOUND;
16251 --
16252 ELSE
16253 --
16254 -- If it does exist make sure its the right one
16255 --
16256 IF g_cache_oipl_hwf_rt_rec(l_index).id <> p_oipl_id THEN
16257 --
16258 -- Loop through the hash using the jump routine to check further
16259 -- indexes
16260 --
16261 l_not_hash_found := FALSE;
16262 --
16263 WHILE NOT l_not_hash_found LOOP
16264 --
16265 l_index := l_index + g_hash_jump;
16266 --
16267 -- Check if the hash index exists, if not we can use it
16268 --
16269 IF NOT g_cache_oipl_hwf_rt_rec.EXISTS(l_index) THEN
16270 --
16271 -- Lets store the hash value in the index
16272 --
16273 RAISE NO_DATA_FOUND;
16274 --
16275 ELSE
16276 --
16277 -- Make sure the index is the correct one
16278 --
16279 IF g_cache_oipl_hwf_rt_rec(l_index).id = p_oipl_id THEN
16280 --
16281 -- We have a match so the hashed value has been stored before
16282 --
16283 l_not_hash_found := TRUE;
16284 --
16285 END IF;
16286 --
16287 END IF;
16288 --
16289 END LOOP;
16290 --
16291 END IF;
16292 --
16293 END IF;
16294 --
16295 -- If p_old_val and p_new_val is set this means we are trying to retrieve
16296 -- the correct rate for the calculated value.
16297 -- Previously we just cached the first rate we
16298 -- found since we needed the determination code, the correct age,los code,etc
16299 -- By killing the cache and forcing the value to be removed we cache the
16300 -- correct rate profile for the case we need.
16301 --
16302 IF p_old_val IS NOT NULL
16303 AND p_new_val IS NOT NULL THEN
16304 --
16305 RAISE NO_DATA_FOUND;
16306 --
16307 END IF;
16308 --
16309 p_rec := g_cache_oipl_hwf_rt_rec(l_index);
16310 --
16311 -- hr_utility.set_location ('Leaving '||l_package,10);
16312 --
16313 EXCEPTION
16314 --
16315 WHEN NO_DATA_FOUND THEN
16316 --
16317 -- The record has not been cached yet so lets cache it
16318 -- Option level rates enhancement
16319 l_opt_id := get_opt_id(p_oipl_id,p_effective_date);
16320 --
16321 OPEN c1;
16322 --
16323 FETCH c1 INTO g_cache_oipl_hwf_rt_rec(l_index);
16324 -- PERFNEW
16325 IF c1%NOTFOUND THEN
16326 --
16327 l_c2notfound := false;
16328 OPEN c2;
16329 FETCH c2 INTO g_cache_oipl_hwf_rt_rec(l_index);
16330 IF c2%NOTFOUND THEN
16331 --
16332 l_c2notfound := true;
16333 --
16334 END IF;
16335 CLOSE c2;
16336 --
16337 END IF;
16338 -- PERFNEW
16339 IF p_old_val IS NULL
16340 AND p_new_val IS NULL THEN
16341 --
16342 IF c1%NOTFOUND and l_c2notfound THEN -- PERFNEW
16343 --
16344 if NOT g_cache_oipl_hwf_rt_rec.EXISTS(l_index) then
16345 g_cache_oipl_hwf_rt_rec(l_index).id := p_oipl_id;
16346 g_cache_oipl_hwf_rt_rec(l_index).exist := 'N';
16347 end if;
16348 --
16349 END IF;
16350 --
16351 END IF;
16352 --
16353 p_rec := g_cache_oipl_hwf_rt_rec(l_index);
16354 --
16355 CLOSE c1;
16356 --
16357 END get_hours_oipl_rate;
16358 --
16359 PROCEDURE get_hours_plip_rate(
16360 p_plip_id IN NUMBER
16361 ,p_old_val IN NUMBER DEFAULT NULL
16362 ,p_new_val IN NUMBER DEFAULT NULL
16363 ,p_business_group_id IN NUMBER
16364 ,p_effective_date IN DATE
16365 ,p_rec OUT NOCOPY g_cache_hwf_rec_obj) IS
16366 --
16367 l_package VARCHAR2(80) := g_package || '.get_hours_plip_rate';
16368 l_old_val_1 NUMBER := p_old_val + 1;
16369 l_new_val_1 NUMBER := p_new_val + 1;
16370 --
16371 -- Define Cursor
16372 --
16373 CURSOR c1 IS
16374 SELECT p_plip_id
16375 ,'Y'
16376 ,hwf.hrs_src_cd
16377 ,hwf.hrs_wkd_det_cd
16378 ,hwf.hrs_wkd_det_rl
16379 ,hwf.rndg_cd
16380 ,hwf.rndg_rl
16381 ,hwf.defined_balance_id
16382 ,hwf.bnfts_bal_id
16383 ,hwf.mn_hrs_num
16384 ,hwf.mx_hrs_num
16385 ,hwf.once_r_cntug_cd
16386 ,hwf.hrs_wkd_calc_rl
16387 FROM ben_hrs_wkd_in_perd_fctr hwf
16388 ,ben_hrs_wkd_in_perd_rt_f hwr
16389 ,ben_vrbl_rt_prfl_f vpf
16390 ,ben_acty_vrbl_rt_f avr
16391 ,ben_acty_base_rt_f abr
16392 WHERE abr.plip_id = p_plip_id
16393 AND p_effective_date BETWEEN abr.effective_start_date
16394 AND abr.effective_end_date
16398 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
16395 AND abr.acty_base_rt_id = avr.acty_base_rt_id
16396 AND p_effective_date BETWEEN avr.effective_start_date
16397 AND avr.effective_end_date
16399 AND p_effective_date BETWEEN vpf.effective_start_date
16400 AND vpf.effective_end_date
16401 AND vpf.vrbl_rt_prfl_id = hwr.vrbl_rt_prfl_id
16402 AND p_effective_date BETWEEN hwr.effective_start_date
16403 AND hwr.effective_end_date
16404 AND hwr.hrs_wkd_in_perd_fctr_id = hwf.hrs_wkd_in_perd_fctr_id
16405 AND (
16406 (
16407 p_new_val IS NOT NULL
16408 AND p_old_val IS NOT NULL
16409 AND p_new_val >= NVL(hwf.mn_hrs_num
16410 ,p_new_val)
16411 AND p_new_val < decode(nvl(hwf.mx_hrs_num,p_new_val) ,
16412 trunc(nvl(hwf.mx_hrs_num,p_new_val))
16413 ,decode(nvl(hwf.mn_hrs_num,p_new_val), trunc(nvl(hwf.mn_hrs_num,p_new_val)),
16414 nvl(hwf.mx_hrs_num,p_new_val)+1,nvl(hwf.mx_hrs_num,p_new_val)+0.000000001),
16415 nvl(hwf.mx_hrs_num,p_new_val)+0.000000001 ) )
16416 -- ceil( NVL(hwf.mx_hrs_num
16417 -- ,p_new_val) + 0.001 ))
16418 OR (
16419 p_new_val IS NOT NULL
16420 AND p_old_val IS NOT NULL
16421 AND (
16422 p_new_val < NVL(hwf.mn_hrs_num
16423 ,p_new_val)
16424 OR p_new_val >= decode(nvl(hwf.mx_hrs_num,p_new_val) ,
16425 trunc(nvl(hwf.mx_hrs_num,p_new_val))
16426 ,decode(nvl(hwf.mn_hrs_num,p_new_val), trunc(nvl(hwf.mn_hrs_num,p_new_val)),
16427 nvl(hwf.mx_hrs_num,p_new_val)+1,nvl(hwf.mx_hrs_num,p_new_val)+0.000000001),
16428 nvl(hwf.mx_hrs_num,p_new_val)+0.000000001 ) )
16429 -- ceil( NVL(hwf.mx_hrs_num
16430 -- ,p_new_val)) + 0.001 )
16431 AND p_old_val >= NVL(hwf.mn_hrs_num
16432 ,p_old_val)
16433 AND p_old_val < decode(nvl(hwf.mx_hrs_num,p_old_val) ,
16434 trunc(nvl(hwf.mx_hrs_num,p_old_val))
16435 ,decode(nvl(hwf.mn_hrs_num,p_old_val), trunc(nvl(hwf.mn_hrs_num,p_old_val)),
16436 nvl(hwf.mx_hrs_num,p_old_val)+1,nvl(hwf.mx_hrs_num,p_old_val)+0.000000001),
16437 nvl(hwf.mx_hrs_num,p_old_val)+0.000000001 ) )
16438 -- ceil( NVL(hwf.mx_hrs_num
16439 -- , p_old_val)) + 0.001 )
16440 OR ( p_new_val IS NULL
16441 AND p_old_val IS NULL));
16442 -- PERFNEW. SPLIT TO 2 CURSORS C1 and C2.
16443 --UNION ALL
16444 CURSOR c2 IS
16445 SELECT p_plip_id
16446 ,'Y'
16447 ,hwf.hrs_src_cd
16448 ,hwf.hrs_wkd_det_cd
16449 ,hwf.hrs_wkd_det_rl
16450 ,hwf.rndg_cd
16451 ,hwf.rndg_rl
16452 ,hwf.defined_balance_id
16453 ,hwf.bnfts_bal_id
16454 ,hwf.mn_hrs_num
16455 ,hwf.mx_hrs_num
16456 ,hwf.once_r_cntug_cd
16457 ,hwf.hrs_wkd_calc_rl
16458 FROM ben_hrs_wkd_in_perd_fctr hwf
16462 ,ben_vrbl_rt_elig_prfl_f vep
16459 --,ben_hrs_wkd_in_perd_rt_f hwr
16460 ,ben_elig_hrs_wkd_prte_f ehw
16461 ,ben_eligy_prfl_f elp
16463 ,ben_vrbl_rt_prfl_f vpf
16464 ,ben_acty_vrbl_rt_f avr
16465 ,ben_acty_base_rt_f abr
16466 WHERE abr.plip_id = p_plip_id
16467 AND p_effective_date BETWEEN abr.effective_start_date
16468 AND abr.effective_end_date
16469 AND abr.acty_base_rt_id = avr.acty_base_rt_id
16470 AND p_effective_date BETWEEN avr.effective_start_date
16471 AND avr.effective_end_date
16472 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
16473 AND p_effective_date BETWEEN vpf.effective_start_date
16474 AND vpf.effective_end_date
16475 -- AND vpf.vrbl_rt_prfl_id = ehw.vrbl_rt_prfl_id
16476 AND vpf.vrbl_rt_prfl_id = vep.vrbl_rt_prfl_id
16477 AND p_effective_date BETWEEN vep.effective_start_date
16478 AND vep.effective_end_date
16479 AND vep.eligy_prfl_id = elp.eligy_prfl_id
16480 AND p_effective_date BETWEEN elp.effective_start_date
16481 AND elp.effective_end_date
16482 AND ehw.eligy_prfl_id = elp.eligy_prfl_id
16483 AND p_effective_date BETWEEN ehw.effective_start_date
16484 AND ehw.effective_end_date
16485 AND ehw.hrs_wkd_in_perd_fctr_id = hwf.hrs_wkd_in_perd_fctr_id
16486 AND (
16487 (
16488 p_new_val IS NOT NULL
16489 AND p_old_val IS NOT NULL
16490 AND p_new_val >= NVL(hwf.mn_hrs_num
16491 ,p_new_val)
16492 AND p_new_val < decode(nvl(hwf.mx_hrs_num,p_new_val) ,
16493 trunc(nvl(hwf.mx_hrs_num,p_new_val))
16494 ,decode(nvl(hwf.mn_hrs_num,p_new_val), trunc(nvl(hwf.mn_hrs_num,p_new_val)),
16495 nvl(hwf.mx_hrs_num,p_new_val)+1,nvl(hwf.mx_hrs_num,p_new_val)+0.000000001),
16496 nvl(hwf.mx_hrs_num,p_new_val)+0.000000001 ) )
16497 -- ceil( NVL(hwf.mx_hrs_num
16498 -- ,p_new_val) + 0.001 ))
16499 OR (
16500 p_new_val IS NOT NULL
16501 AND p_old_val IS NOT NULL
16502 AND (
16503 p_new_val < NVL(hwf.mn_hrs_num
16504 ,p_new_val)
16505 OR p_new_val >= decode(nvl(hwf.mx_hrs_num,p_new_val) ,
16506 trunc(nvl(hwf.mx_hrs_num,p_new_val))
16507 ,decode(nvl(hwf.mn_hrs_num,p_new_val), trunc(nvl(hwf.mn_hrs_num,p_new_val)),
16508 nvl(hwf.mx_hrs_num,p_new_val)+1,nvl(hwf.mx_hrs_num,p_new_val)+0.000000001),
16509 nvl(hwf.mx_hrs_num,p_new_val)+0.000000001 ) )
16510 -- ceil( NVL(hwf.mx_hrs_num
16511 -- ,p_new_val)) + 0.001 )
16512 AND p_old_val >= NVL(hwf.mn_hrs_num
16513 ,p_old_val)
16514 AND p_old_val < decode(nvl(hwf.mx_hrs_num,p_old_val) ,
16515 trunc(nvl(hwf.mx_hrs_num,p_old_val))
16516 ,decode(nvl(hwf.mn_hrs_num,p_old_val), trunc(nvl(hwf.mn_hrs_num,p_old_val)),
16517 nvl(hwf.mx_hrs_num,p_old_val)+1,nvl(hwf.mx_hrs_num,p_old_val)+0.000000001),
16518 nvl(hwf.mx_hrs_num,p_old_val)+0.000000001 ) )
16519 -- ceil( NVL(hwf.mx_hrs_num
16520 -- , p_old_val)) + 0.001 )
16521 OR ( p_new_val IS NULL
16522 AND p_old_val IS NULL));
16523 --
16524 --
16525 l_index PLS_INTEGER;
16526 l_not_hash_found BOOLEAN;
16527 l_c2notfound BOOLEAN;
16528 --
16529 BEGIN
16530 --
16531 -- hr_utility.set_location ('Entering '||l_package,10);
16532 --
16533 -- Steps to do process
16534 --
16535 -- 1) Try and get value from cache
16536 -- 2) If can get from cache then copy to output record
16537 -- 3) If can't get from cache do db hit and then
16538 -- copy to cache record and then copy to output record.
16539 --
16540 -- Get hashed index value
16541 --
16542 l_index := MOD(p_plip_id
16543 ,g_hash_key);
16544 --
16545 IF NOT g_cache_plip_hwf_rt_rec.EXISTS(l_index) THEN
16546 --
16547 -- Lets store the hash value in this index
16548 --
16549 RAISE NO_DATA_FOUND;
16550 --
16551 ELSE
16552 --
16553 -- If it does exist make sure its the right one
16554 --
16555 IF g_cache_plip_hwf_rt_rec(l_index).id <> p_plip_id THEN
16556 --
16557 -- Loop through the hash using the jump routine to check further
16558 -- indexes
16559 --
16560 l_not_hash_found := FALSE;
16561 --
16562 WHILE NOT l_not_hash_found LOOP
16563 --
16564 l_index := l_index + g_hash_jump;
16565 --
16566 -- Check if the hash index exists, if not we can use it
16567 --
16568 IF NOT g_cache_plip_hwf_rt_rec.EXISTS(l_index) THEN
16569 --
16570 -- Lets store the hash value in the index
16571 --
16572 RAISE NO_DATA_FOUND;
16573 --
16574 ELSE
16575 --
16576 -- Make sure the index is the correct one
16577 --
16578 IF g_cache_plip_hwf_rt_rec(l_index).id = p_plip_id THEN
16579 --
16583 --
16580 -- We have a match so the hashed value has been stored before
16581 --
16582 l_not_hash_found := TRUE;
16584 END IF;
16585 --
16586 END IF;
16587 --
16588 END LOOP;
16589 --
16590 END IF;
16591 --
16592 END IF;
16593 --
16594 -- If p_old_val and p_new_val is set this means we are trying to retrieve
16595 -- the correct rate for the calculated value.
16596 -- Previously we just cached the first rate we
16597 -- found since we needed the determination code, the correct age,los code,etc
16598 -- By killing the cache and forcing the value to be removed we cache the
16599 -- correct rate profile for the case we need.
16600 --
16601 IF p_old_val IS NOT NULL
16602 AND p_new_val IS NOT NULL THEN
16603 --
16604 RAISE NO_DATA_FOUND;
16605 --
16606 END IF;
16607 --
16608 p_rec := g_cache_plip_hwf_rt_rec(l_index);
16609 --
16610 -- hr_utility.set_location ('Leaving '||l_package,10);
16611 --
16612 EXCEPTION
16613 --
16614 WHEN NO_DATA_FOUND THEN
16615 --
16616 -- The record has not been cached yet so lets cache it
16617 --
16618 OPEN c1;
16619 --
16620 FETCH c1 INTO g_cache_plip_hwf_rt_rec(l_index);
16621 -- PERFNEW
16622 IF c1%NOTFOUND THEN
16623 --
16624 l_c2notfound := false;
16625 OPEN c2;
16626 FETCH c2 INTO g_cache_plip_hwf_rt_rec(l_index);
16627 IF c2%NOTFOUND THEN
16628 --
16629 l_c2notfound := true;
16630 --
16631 END IF;
16632 CLOSE c2;
16633 --
16634 END IF;
16635 -- PERFNEW
16636 IF p_old_val IS NULL
16637 AND p_new_val IS NULL THEN
16638 --
16639 IF c1%NOTFOUND and l_c2notfound THEN -- PERFNEW
16640 --
16641 if NOT g_cache_plip_hwf_rt_rec.EXISTS(l_index) then
16642 g_cache_plip_hwf_rt_rec(l_index).id := p_plip_id;
16643 g_cache_plip_hwf_rt_rec(l_index).exist := 'N';
16644 end if;
16645 --
16646 END IF;
16647 --
16648 END IF;
16649 --
16650 p_rec := g_cache_plip_hwf_rt_rec(l_index);
16651 --
16652 CLOSE c1;
16653 --
16654 END get_hours_plip_rate;
16655 --
16656 PROCEDURE get_hours_ptip_rate(
16657 p_ptip_id IN NUMBER
16658 ,p_old_val IN NUMBER DEFAULT NULL
16659 ,p_new_val IN NUMBER DEFAULT NULL
16660 ,p_business_group_id IN NUMBER
16661 ,p_effective_date IN DATE
16662 ,p_rec OUT NOCOPY g_cache_hwf_rec_obj) IS
16663 --
16664 l_package VARCHAR2(80) := g_package || '.get_hours_ptip_rate';
16665 l_old_val_1 NUMBER := p_old_val + 1;
16666 l_new_val_1 NUMBER := p_new_val + 1;
16667 --
16668 -- Define Cursor
16669 --
16670 CURSOR c1 IS
16671 SELECT p_ptip_id
16672 ,'Y'
16673 ,hwf.hrs_src_cd
16674 ,hwf.hrs_wkd_det_cd
16675 ,hwf.hrs_wkd_det_rl
16676 ,hwf.rndg_cd
16677 ,hwf.rndg_rl
16678 ,hwf.defined_balance_id
16679 ,hwf.bnfts_bal_id
16680 ,hwf.mn_hrs_num
16681 ,hwf.mx_hrs_num
16682 ,hwf.once_r_cntug_cd
16683 ,hwf.hrs_wkd_calc_rl
16684 FROM ben_hrs_wkd_in_perd_fctr hwf
16685 ,ben_hrs_wkd_in_perd_rt_f hwr
16686 ,ben_vrbl_rt_prfl_f vpf
16687 ,ben_acty_vrbl_rt_f avr
16688 ,ben_acty_base_rt_f abr
16689 WHERE abr.ptip_id = p_ptip_id
16690 AND p_effective_date BETWEEN abr.effective_start_date
16691 AND abr.effective_end_date
16692 AND abr.acty_base_rt_id = avr.acty_base_rt_id
16693 AND p_effective_date BETWEEN avr.effective_start_date
16694 AND avr.effective_end_date
16695 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
16696 AND p_effective_date BETWEEN vpf.effective_start_date
16697 AND vpf.effective_end_date
16698 AND vpf.vrbl_rt_prfl_id = hwr.vrbl_rt_prfl_id
16699 AND p_effective_date BETWEEN hwr.effective_start_date
16700 AND hwr.effective_end_date
16701 AND hwr.hrs_wkd_in_perd_fctr_id = hwf.hrs_wkd_in_perd_fctr_id
16702 AND (
16703 (
16704 p_new_val IS NOT NULL
16705 AND p_old_val IS NOT NULL
16706 AND p_new_val >= NVL(hwf.mn_hrs_num
16707 ,p_new_val)
16708 AND p_new_val < decode(nvl(hwf.mx_hrs_num,p_new_val) ,
16709 trunc(nvl(hwf.mx_hrs_num,p_new_val))
16710 ,decode(nvl(hwf.mn_hrs_num,p_new_val), trunc(nvl(hwf.mn_hrs_num,p_new_val)),
16711 nvl(hwf.mx_hrs_num,p_new_val)+1,nvl(hwf.mx_hrs_num,p_new_val)+0.000000001),
16712 nvl(hwf.mx_hrs_num,p_new_val)+0.000000001 ) )
16713 -- ceil( NVL(hwf.mx_hrs_num
16714 -- ,p_new_val) + 0.001 ))
16715 OR (
16716 p_new_val IS NOT NULL
16717 AND p_old_val IS NOT NULL
16718 AND (
16719 p_new_val < NVL(hwf.mn_hrs_num
16720 ,p_new_val)
16721 OR p_new_val >= decode(nvl(hwf.mx_hrs_num,p_new_val) ,
16725 nvl(hwf.mx_hrs_num,p_new_val)+0.000000001 ) )
16722 trunc(nvl(hwf.mx_hrs_num,p_new_val))
16723 ,decode(nvl(hwf.mn_hrs_num,p_new_val), trunc(nvl(hwf.mn_hrs_num,p_new_val)),
16724 nvl(hwf.mx_hrs_num,p_new_val)+1,nvl(hwf.mx_hrs_num,p_new_val)+0.000000001),
16726 -- ceil( NVL(hwf.mx_hrs_num
16727 -- , p_new_val)) + 0.001 )
16728 AND p_old_val >= NVL(hwf.mn_hrs_num
16729 ,p_old_val)
16730 AND p_old_val < decode(nvl(hwf.mx_hrs_num,p_old_val) ,
16731 trunc(nvl(hwf.mx_hrs_num,p_old_val))
16732 ,decode(nvl(hwf.mn_hrs_num,p_old_val), trunc(nvl(hwf.mn_hrs_num,p_old_val)),
16733 nvl(hwf.mx_hrs_num,p_old_val)+1,nvl(hwf.mx_hrs_num,p_old_val)+0.000000001),
16734 nvl(hwf.mx_hrs_num,p_old_val)+0.000000001 ) )
16735 -- ceil( NVL(hwf.mx_hrs_num
16736 -- ,p_old_val)) + 0.001 )
16737 OR ( p_new_val IS NULL
16738 AND p_old_val IS NULL));
16739 -- PERFNEW. SPLIT TO 2 CURSORS C1 and C2.
16740 --UNION ALL
16741 CURSOR c2 IS
16742 SELECT p_ptip_id
16743 ,'Y'
16744 ,hwf.hrs_src_cd
16745 ,hwf.hrs_wkd_det_cd
16746 ,hwf.hrs_wkd_det_rl
16747 ,hwf.rndg_cd
16748 ,hwf.rndg_rl
16749 ,hwf.defined_balance_id
16750 ,hwf.bnfts_bal_id
16751 ,hwf.mn_hrs_num
16752 ,hwf.mx_hrs_num
16753 ,hwf.once_r_cntug_cd
16754 ,hwf.hrs_wkd_calc_rl
16755 FROM ben_hrs_wkd_in_perd_fctr hwf
16756 --,ben_hrs_wkd_in_perd_rt_f hwr
16757 ,ben_elig_hrs_wkd_prte_f ehw
16758 ,ben_eligy_prfl_f elp
16759 ,ben_vrbl_rt_elig_prfl_f vep
16760 ,ben_vrbl_rt_prfl_f vpf
16761 ,ben_acty_vrbl_rt_f avr
16762 ,ben_acty_base_rt_f abr
16763 WHERE abr.ptip_id = p_ptip_id
16764 AND p_effective_date BETWEEN abr.effective_start_date
16765 AND abr.effective_end_date
16766 AND abr.acty_base_rt_id = avr.acty_base_rt_id
16767 AND p_effective_date BETWEEN avr.effective_start_date
16768 AND avr.effective_end_date
16769 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
16770 AND p_effective_date BETWEEN vpf.effective_start_date
16771 AND vpf.effective_end_date
16772 -- AND vpf.vrbl_rt_prfl_id = ehw.vrbl_rt_prfl_id
16773 AND vpf.vrbl_rt_prfl_id = vep.vrbl_rt_prfl_id
16774 AND p_effective_date BETWEEN vep.effective_start_date
16775 AND vep.effective_end_date
16776 AND vep.eligy_prfl_id = elp.eligy_prfl_id
16777 AND p_effective_date BETWEEN elp.effective_start_date
16778 AND elp.effective_end_date
16779 AND ehw.eligy_prfl_id = elp.eligy_prfl_id
16780 AND p_effective_date BETWEEN ehw.effective_start_date
16781 AND ehw.effective_end_date
16782 AND ehw.hrs_wkd_in_perd_fctr_id = hwf.hrs_wkd_in_perd_fctr_id
16783 AND (
16784 (
16785 p_new_val IS NOT NULL
16786 AND p_old_val IS NOT NULL
16787 AND p_new_val >= NVL(hwf.mn_hrs_num
16788 ,p_new_val)
16789 AND p_new_val < decode(nvl(hwf.mx_hrs_num,p_new_val) ,
16790 trunc(nvl(hwf.mx_hrs_num,p_new_val))
16791 ,decode(nvl(hwf.mn_hrs_num,p_new_val), trunc(nvl(hwf.mn_hrs_num,p_new_val)),
16792 nvl(hwf.mx_hrs_num,p_new_val)+1,nvl(hwf.mx_hrs_num,p_new_val)+0.000000001),
16793 nvl(hwf.mx_hrs_num,p_new_val)+0.000000001 ) )
16794 -- ceil( NVL(hwf.mx_hrs_num
16795 -- ,p_new_val) + 0.001 ))
16796 OR (
16797 p_new_val IS NOT NULL
16798 AND p_old_val IS NOT NULL
16799 AND (
16800 p_new_val < NVL(hwf.mn_hrs_num
16801 ,p_new_val)
16802 OR p_new_val >= decode(nvl(hwf.mx_hrs_num,p_new_val) ,
16803 trunc(nvl(hwf.mx_hrs_num,p_new_val))
16804 ,decode(nvl(hwf.mn_hrs_num,p_new_val), trunc(nvl(hwf.mn_hrs_num,p_new_val)),
16805 nvl(hwf.mx_hrs_num,p_new_val)+1,nvl(hwf.mx_hrs_num,p_new_val)+0.000000001),
16806 nvl(hwf.mx_hrs_num,p_new_val)+0.000000001 ) )
16807 -- ceil( NVL(hwf.mx_hrs_num
16808 -- , p_new_val)) + 0.001 )
16809 AND p_old_val >= NVL(hwf.mn_hrs_num
16810 ,p_old_val)
16811 AND p_old_val < decode(nvl(hwf.mx_hrs_num,p_old_val) ,
16812 trunc(nvl(hwf.mx_hrs_num,p_old_val))
16813 ,decode(nvl(hwf.mn_hrs_num,p_old_val), trunc(nvl(hwf.mn_hrs_num,p_old_val)),
16814 nvl(hwf.mx_hrs_num,p_old_val)+1,nvl(hwf.mx_hrs_num,p_old_val)+0.000000001),
16815 nvl(hwf.mx_hrs_num,p_old_val)+0.000000001 ) )
16816 -- ceil( NVL(hwf.mx_hrs_num
16817 -- ,p_old_val)) + 0.001 )
16818 OR ( p_new_val IS NULL
16819 AND p_old_val IS NULL));
16820 --
16821 --
16822 l_index PLS_INTEGER;
16823 l_not_hash_found BOOLEAN;
16824 l_c2notfound BOOLEAN;
16825 --
16826 BEGIN
16830 -- Steps to do process
16827 --
16828 -- hr_utility.set_location ('Entering '||l_package,10);
16829 --
16831 --
16832 -- 1) Try and get value from cache
16833 -- 2) If can get from cache then copy to output record
16834 -- 3) If can't get from cache do db hit and then
16835 -- copy to cache record and then copy to output record.
16836 --
16837 -- Get hashed index value
16838 --
16839 l_index := MOD(p_ptip_id
16840 ,g_hash_key);
16841 --
16842 IF NOT g_cache_ptip_hwf_rt_rec.EXISTS(l_index) THEN
16843 --
16844 -- Lets store the hash value in this index
16845 --
16846 RAISE NO_DATA_FOUND;
16847 --
16848 ELSE
16849 --
16850 -- If it does exist make sure its the right one
16851 --
16852 IF g_cache_ptip_hwf_rt_rec(l_index).id <> p_ptip_id THEN
16853 --
16854 -- Loop through the hash using the jump routine to check further
16855 -- indexes
16856 --
16857 l_not_hash_found := FALSE;
16858 --
16859 WHILE NOT l_not_hash_found LOOP
16860 --
16861 l_index := l_index + g_hash_jump;
16862 --
16863 -- Check if the hash index exists, if not we can use it
16864 --
16865 IF NOT g_cache_ptip_hwf_rt_rec.EXISTS(l_index) THEN
16866 --
16867 -- Lets store the hash value in the index
16868 --
16869 RAISE NO_DATA_FOUND;
16870 --
16871 ELSE
16872 --
16873 -- Make sure the index is the correct one
16874 --
16875 IF g_cache_ptip_hwf_rt_rec(l_index).id = p_ptip_id THEN
16876 --
16877 -- We have a match so the hashed value has been stored before
16878 --
16879 l_not_hash_found := TRUE;
16880 --
16881 END IF;
16882 --
16883 END IF;
16884 --
16885 END LOOP;
16886 --
16887 END IF;
16888 --
16889 END IF;
16890 --
16891 -- If p_old_val and p_new_val is set this means we are trying to retrieve
16892 -- the correct rate for the calculated value.
16893 -- Previously we just cached the first rate we
16894 -- found since we needed the determination code, the correct age,los code,etc
16895 -- By killing the cache and forcing the value to be removed we cache the
16896 -- correct rate profile for the case we need.
16897 --
16898 IF p_old_val IS NOT NULL
16899 AND p_new_val IS NOT NULL THEN
16900 --
16901 RAISE NO_DATA_FOUND;
16902 --
16903 END IF;
16904 --
16905 p_rec := g_cache_ptip_hwf_rt_rec(l_index);
16906 --
16907 -- hr_utility.set_location ('Leaving '||l_package,10);
16908 --
16909 EXCEPTION
16910 --
16911 WHEN NO_DATA_FOUND THEN
16912 --
16913 -- The record has not been cached yet so lets cache it
16914 --
16915 OPEN c1;
16916 --
16917 FETCH c1 INTO g_cache_ptip_hwf_rt_rec(l_index);
16918 -- PERFNEW
16919 IF c1%NOTFOUND THEN
16920 --
16921 l_c2notfound := false;
16922 OPEN c2;
16923 FETCH c2 INTO g_cache_ptip_hwf_rt_rec(l_index);
16924 IF c2%NOTFOUND THEN
16925 --
16926 l_c2notfound := true;
16927 --
16928 END IF;
16929 CLOSE c2;
16930 --
16931 END IF;
16932 -- PERFNEW
16933 IF p_old_val IS NULL
16934 AND p_new_val IS NULL THEN
16935 --
16936 IF c1%NOTFOUND and l_c2notfound THEN -- PERFNEW
16937 --
16938 if NOT g_cache_ptip_hwf_rt_rec.EXISTS(l_index) then
16939 g_cache_ptip_hwf_rt_rec(l_index).id := p_ptip_id;
16940 g_cache_ptip_hwf_rt_rec(l_index).exist := 'N';
16941 end if;
16942 --
16943 END IF;
16944 --
16945 END IF;
16946 --
16947 p_rec := g_cache_ptip_hwf_rt_rec(l_index);
16948 --
16949 CLOSE c1;
16950 --
16951 END get_hours_ptip_rate;
16952 --
16953 PROCEDURE get_hours_oiplip_rate(
16954 p_oiplip_id IN NUMBER
16955 ,p_old_val IN NUMBER DEFAULT NULL
16956 ,p_new_val IN NUMBER DEFAULT NULL
16957 ,p_business_group_id IN NUMBER
16958 ,p_effective_date IN DATE
16959 ,p_rec OUT NOCOPY g_cache_hwf_rec_obj) IS
16960 --
16961 l_package VARCHAR2(80) := g_package || '.get_hours_oiplip_rate';
16962 l_old_val_1 NUMBER := p_old_val + 1;
16963 l_new_val_1 NUMBER := p_new_val + 1;
16964 --
16965 -- Define Cursor
16966 --
16967 CURSOR c1 IS
16968 SELECT p_oiplip_id
16969 ,'Y'
16970 ,hwf.hrs_src_cd
16971 ,hwf.hrs_wkd_det_cd
16972 ,hwf.hrs_wkd_det_rl
16973 ,hwf.rndg_cd
16974 ,hwf.rndg_rl
16975 ,hwf.defined_balance_id
16976 ,hwf.bnfts_bal_id
16977 ,hwf.mn_hrs_num
16978 ,hwf.mx_hrs_num
16979 ,hwf.once_r_cntug_cd
16980 ,hwf.hrs_wkd_calc_rl
16981 FROM ben_hrs_wkd_in_perd_fctr hwf
16982 ,ben_hrs_wkd_in_perd_rt_f hwr
16983 ,ben_vrbl_rt_prfl_f vpf
16984 ,ben_acty_vrbl_rt_f avr
16985 ,ben_acty_base_rt_f abr
16986 WHERE abr.oiplip_id = p_oiplip_id
16990 AND p_effective_date BETWEEN avr.effective_start_date
16987 AND p_effective_date BETWEEN abr.effective_start_date
16988 AND abr.effective_end_date
16989 AND abr.acty_base_rt_id = avr.acty_base_rt_id
16991 AND avr.effective_end_date
16992 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
16993 AND p_effective_date BETWEEN vpf.effective_start_date
16994 AND vpf.effective_end_date
16995 AND vpf.vrbl_rt_prfl_id = hwr.vrbl_rt_prfl_id
16996 AND p_effective_date BETWEEN hwr.effective_start_date
16997 AND hwr.effective_end_date
16998 AND hwr.hrs_wkd_in_perd_fctr_id = hwf.hrs_wkd_in_perd_fctr_id
16999 AND (
17000 (
17001 p_new_val IS NOT NULL
17002 AND p_old_val IS NOT NULL
17003 AND p_new_val >= NVL(hwf.mn_hrs_num
17004 ,p_new_val)
17005 AND p_new_val < decode(nvl(hwf.mx_hrs_num,p_new_val) ,
17006 trunc(nvl(hwf.mx_hrs_num,p_new_val))
17007 ,decode(nvl(hwf.mn_hrs_num,p_new_val), trunc(nvl(hwf.mn_hrs_num,p_new_val)),
17008 nvl(hwf.mx_hrs_num,p_new_val)+1,nvl(hwf.mx_hrs_num,p_new_val)+0.000000001),
17009 nvl(hwf.mx_hrs_num,p_new_val)+0.000000001 ) )
17010 -- ceil( NVL(hwf.mx_hrs_num
17011 -- ,p_new_val) + 0.001 ))
17012 OR (
17013 p_new_val IS NOT NULL
17014 AND p_old_val IS NOT NULL
17015 AND (
17016 p_new_val < NVL(hwf.mn_hrs_num
17017 ,p_new_val)
17018 OR p_new_val >= decode(nvl(hwf.mx_hrs_num,p_new_val) ,
17019 trunc(nvl(hwf.mx_hrs_num,p_new_val))
17020 ,decode(nvl(hwf.mn_hrs_num,p_new_val), trunc(nvl(hwf.mn_hrs_num,p_new_val)),
17021 nvl(hwf.mx_hrs_num,p_new_val)+1,nvl(hwf.mx_hrs_num,p_new_val)+0.000000001),
17022 nvl(hwf.mx_hrs_num,p_new_val)+0.000000001 ) )
17023 -- ceil( NVL(hwf.mx_hrs_num
17024 -- ,p_new_val)) + 0.001 )
17025 AND p_old_val >= NVL(hwf.mn_hrs_num
17026 ,p_old_val)
17027 AND p_old_val < decode(nvl(hwf.mx_hrs_num,p_old_val) ,
17028 trunc(nvl(hwf.mx_hrs_num,p_old_val))
17029 ,decode(nvl(hwf.mn_hrs_num,p_old_val), trunc(nvl(hwf.mn_hrs_num,p_old_val)),
17030 nvl(hwf.mx_hrs_num,p_old_val)+1,nvl(hwf.mx_hrs_num,p_old_val)+0.000000001),
17031 nvl(hwf.mx_hrs_num,p_old_val)+0.000000001 ) )
17032 -- ceil( NVL(hwf.mx_hrs_num
17033 -- , p_old_val)) + 0.001 )
17034 OR ( p_new_val IS NULL
17035 AND p_old_val IS NULL));
17036 -- PERFNEW. SPLIT TO 2 CURSORS C1 and C2.
17037 --UNION ALL
17038 CURSOR c2 IS
17039 SELECT p_oiplip_id
17040 ,'Y'
17041 ,hwf.hrs_src_cd
17042 ,hwf.hrs_wkd_det_cd
17043 ,hwf.hrs_wkd_det_rl
17044 ,hwf.rndg_cd
17045 ,hwf.rndg_rl
17046 ,hwf.defined_balance_id
17047 ,hwf.bnfts_bal_id
17048 ,hwf.mn_hrs_num
17049 ,hwf.mx_hrs_num
17050 ,hwf.once_r_cntug_cd
17051 ,hwf.hrs_wkd_calc_rl
17052 FROM ben_hrs_wkd_in_perd_fctr hwf
17053 --,ben_hrs_wkd_in_perd_rt_f hwr
17054 ,ben_elig_hrs_wkd_prte_f ehw
17055 ,ben_eligy_prfl_f elp
17056 ,ben_vrbl_rt_elig_prfl_f vep
17057 ,ben_vrbl_rt_prfl_f vpf
17058 ,ben_acty_vrbl_rt_f avr
17059 ,ben_acty_base_rt_f abr
17060 WHERE abr.oiplip_id = p_oiplip_id
17061 AND p_effective_date BETWEEN abr.effective_start_date
17062 AND abr.effective_end_date
17063 AND abr.acty_base_rt_id = avr.acty_base_rt_id
17064 AND p_effective_date BETWEEN avr.effective_start_date
17065 AND avr.effective_end_date
17066 AND avr.vrbl_rt_prfl_id = vpf.vrbl_rt_prfl_id
17067 AND p_effective_date BETWEEN vpf.effective_start_date
17068 AND vpf.effective_end_date
17069 -- AND vpf.vrbl_rt_prfl_id = ehw.vrbl_rt_prfl_id
17070 AND vpf.vrbl_rt_prfl_id = vep.vrbl_rt_prfl_id
17071 AND p_effective_date BETWEEN vep.effective_start_date
17072 AND vep.effective_end_date
17073 AND vep.eligy_prfl_id = elp.eligy_prfl_id
17074 AND p_effective_date BETWEEN elp.effective_start_date
17075 AND elp.effective_end_date
17076 AND ehw.eligy_prfl_id = elp.eligy_prfl_id
17077 AND p_effective_date BETWEEN ehw.effective_start_date
17078 AND ehw.effective_end_date
17079 AND ehw.hrs_wkd_in_perd_fctr_id = hwf.hrs_wkd_in_perd_fctr_id
17080 AND (
17081 (
17082 p_new_val IS NOT NULL
17083 AND p_old_val IS NOT NULL
17084 AND p_new_val >= NVL(hwf.mn_hrs_num
17085 ,p_new_val)
17086 AND p_new_val < decode(nvl(hwf.mx_hrs_num,p_new_val) ,
17087 trunc(nvl(hwf.mx_hrs_num,p_new_val))
17088 ,decode(nvl(hwf.mn_hrs_num,p_new_val), trunc(nvl(hwf.mn_hrs_num,p_new_val)),
17089 nvl(hwf.mx_hrs_num,p_new_val)+1,nvl(hwf.mx_hrs_num,p_new_val)+0.000000001),
17090 nvl(hwf.mx_hrs_num,p_new_val)+0.000000001 ) )
17094 p_new_val IS NOT NULL
17091 -- ceil( NVL(hwf.mx_hrs_num
17092 -- ,p_new_val) + 0.001 ))
17093 OR (
17095 AND p_old_val IS NOT NULL
17096 AND (
17097 p_new_val < NVL(hwf.mn_hrs_num
17098 ,p_new_val)
17099 OR p_new_val >= decode(nvl(hwf.mx_hrs_num,p_new_val) ,
17100 trunc(nvl(hwf.mx_hrs_num,p_new_val))
17101 ,decode(nvl(hwf.mn_hrs_num,p_new_val), trunc(nvl(hwf.mn_hrs_num,p_new_val)),
17102 nvl(hwf.mx_hrs_num,p_new_val)+1,nvl(hwf.mx_hrs_num,p_new_val)+0.000000001),
17103 nvl(hwf.mx_hrs_num,p_new_val)+0.000000001 ) )
17104 -- ceil( NVL(hwf.mx_hrs_num
17105 -- ,p_new_val)) + 0.001 )
17106 AND p_old_val >= NVL(hwf.mn_hrs_num
17107 ,p_old_val)
17108 AND p_old_val < decode(nvl(hwf.mx_hrs_num,p_old_val) ,
17109 trunc(nvl(hwf.mx_hrs_num,p_old_val))
17110 ,decode(nvl(hwf.mn_hrs_num,p_old_val), trunc(nvl(hwf.mn_hrs_num,p_old_val)),
17111 nvl(hwf.mx_hrs_num,p_old_val)+1,nvl(hwf.mx_hrs_num,p_old_val)+0.000000001),
17112 nvl(hwf.mx_hrs_num,p_old_val)+0.000000001 ) )
17113 -- ceil( NVL(hwf.mx_hrs_num
17114 -- , p_old_val)) + 0.001 )
17115 OR ( p_new_val IS NULL
17116 AND p_old_val IS NULL));
17117 --
17118 --
17119 l_index PLS_INTEGER;
17120 l_not_hash_found BOOLEAN;
17121 l_c2notfound BOOLEAN;
17122 --
17123 BEGIN
17124 --
17125 -- hr_utility.set_location ('Entering '||l_package,10);
17126 --
17127 -- Steps to do process
17128 --
17129 -- 1) Try and get value from cache
17130 -- 2) If can get from cache then copy to output record
17131 -- 3) If can't get from cache do db hit and then
17132 -- copy to cache record and then copy to output record.
17133 --
17134 -- Get hashed index value
17135 --
17136 l_index := MOD(p_oiplip_id
17137 ,g_hash_key);
17138 --
17139 IF NOT g_cache_oiplip_hwf_rt_rec.EXISTS(l_index) THEN
17140 --
17141 -- Lets store the hash value in this index
17142 --
17143 RAISE NO_DATA_FOUND;
17144 --
17145 ELSE
17146 --
17147 -- If it does exist make sure its the right one
17148 --
17149 IF g_cache_oiplip_hwf_rt_rec(l_index).id <> p_oiplip_id THEN
17150 --
17151 -- Loop through the hash using the jump routine to check further
17152 -- indexes
17153 --
17154 l_not_hash_found := FALSE;
17155 --
17156 WHILE NOT l_not_hash_found LOOP
17157 --
17158 l_index := l_index + g_hash_jump;
17159 --
17160 -- Check if the hash index exists, if not we can use it
17161 --
17162 IF NOT g_cache_oiplip_hwf_rt_rec.EXISTS(l_index) THEN
17163 --
17164 -- Lets store the hash value in the index
17165 --
17166 RAISE NO_DATA_FOUND;
17167 --
17168 ELSE
17169 --
17170 -- Make sure the index is the correct one
17171 --
17172 IF g_cache_oiplip_hwf_rt_rec(l_index).id = p_oiplip_id THEN
17173 --
17174 -- We have a match so the hashed value has been stored before
17175 --
17176 l_not_hash_found := TRUE;
17177 --
17178 END IF;
17179 --
17180 END IF;
17181 --
17182 END LOOP;
17183 --
17184 END IF;
17185 --
17186 END IF;
17187 --
17188 -- If p_old_val and p_new_val is set this means we are trying to retrieve
17189 -- the correct rate for the calculated value.
17190 -- Previously we just cached the first rate we
17191 -- found since we needed the determination code, the correct age,los code,etc
17192 -- By killing the cache and forcing the value to be removed we cache the
17193 -- correct rate profile for the case we need.
17194 --
17195 IF p_old_val IS NOT NULL
17196 AND p_new_val IS NOT NULL THEN
17197 --
17198 RAISE NO_DATA_FOUND;
17199 --
17200 END IF;
17201 --
17202 p_rec := g_cache_oiplip_hwf_rt_rec(l_index);
17203 --
17204 -- hr_utility.set_location ('Leaving '||l_package,10);
17205 --
17206 EXCEPTION
17207 --
17208 WHEN NO_DATA_FOUND THEN
17209 --
17210 -- The record has not been cached yet so lets cache it
17211 --
17212 OPEN c1;
17213 --
17214 FETCH c1 INTO g_cache_oiplip_hwf_rt_rec(l_index);
17215 -- PERFNEW
17216 IF c1%NOTFOUND THEN
17217 --
17218 l_c2notfound := false;
17219 OPEN c2;
17220 FETCH c2 INTO g_cache_oiplip_hwf_rt_rec(l_index);
17221 IF c2%NOTFOUND THEN
17222 --
17223 l_c2notfound := true;
17224 --
17225 END IF;
17226 CLOSE c2;
17227 --
17228 END IF;
17229 -- PERFNEW
17230 IF p_old_val IS NULL
17231 AND p_new_val IS NULL THEN
17232 --
17233 IF c1%NOTFOUND and l_c2notfound THEN -- PERFNEW
17234 --
17235 if NOT g_cache_oiplip_hwf_rt_rec.EXISTS(l_index) then
17239 --
17236 g_cache_oiplip_hwf_rt_rec(l_index).id := p_oiplip_id;
17237 g_cache_oiplip_hwf_rt_rec(l_index).exist := 'N';
17238 end if;
17240 END IF;
17241 --
17242 END IF;
17243 --
17244 p_rec := g_cache_oiplip_hwf_rt_rec(l_index);
17245 --
17246 CLOSE c1;
17247 --
17248 END get_hours_oiplip_rate;
17249 --
17250 PROCEDURE get_hours_rate(
17251 p_pgm_id IN NUMBER
17252 ,p_pl_id IN NUMBER
17253 ,p_oipl_id IN NUMBER
17254 ,p_plip_id IN NUMBER
17255 ,p_ptip_id IN NUMBER
17256 ,p_oiplip_id IN NUMBER
17257 ,p_old_val IN NUMBER DEFAULT NULL
17258 ,p_new_val IN NUMBER DEFAULT NULL
17259 ,p_business_group_id IN NUMBER
17260 ,p_effective_date IN DATE
17261 ,p_rec OUT NOCOPY g_cache_hwf_rec_obj) IS
17262 --
17263 l_package VARCHAR2(80) := g_package || '.get_hours_rate';
17264 --
17265 BEGIN
17266 --
17267 -- hr_utility.set_location ('Entering '||l_package,10);
17268 --
17269 -- Derive which data type we are dealing with
17270 --
17271 IF p_pgm_id IS NOT NULL THEN
17272 --
17273 get_hours_pgm_rate(p_pgm_id=> p_pgm_id
17274 ,p_old_val => p_old_val
17275 ,p_new_val => p_new_val
17276 ,p_business_group_id => p_business_group_id
17277 ,p_effective_date => p_effective_date
17278 ,p_rec => p_rec);
17279 --
17280 ELSIF p_pl_id IS NOT NULL THEN
17281 --
17282 get_hours_pl_rate(p_pl_id=> p_pl_id
17283 ,p_old_val => p_old_val
17284 ,p_new_val => p_new_val
17285 ,p_business_group_id => p_business_group_id
17286 ,p_effective_date => p_effective_date
17287 ,p_rec => p_rec);
17288 --
17289 ELSIF p_oipl_id IS NOT NULL THEN
17290 --
17291 get_hours_oipl_rate(p_oipl_id=> p_oipl_id
17292 ,p_old_val => p_old_val
17293 ,p_new_val => p_new_val
17294 ,p_business_group_id => p_business_group_id
17295 ,p_effective_date => p_effective_date
17296 ,p_rec => p_rec);
17297 --
17298 ELSIF p_plip_id IS NOT NULL THEN
17299 --
17300 get_hours_plip_rate(p_plip_id=> p_plip_id
17301 ,p_old_val => p_old_val
17302 ,p_new_val => p_new_val
17303 ,p_business_group_id => p_business_group_id
17304 ,p_effective_date => p_effective_date
17305 ,p_rec => p_rec);
17306 --
17307 ELSIF p_ptip_id IS NOT NULL THEN
17308 --
17309 get_hours_ptip_rate(p_ptip_id=> p_ptip_id
17310 ,p_old_val => p_old_val
17311 ,p_new_val => p_new_val
17312 ,p_business_group_id => p_business_group_id
17313 ,p_effective_date => p_effective_date
17314 ,p_rec => p_rec);
17315 --
17316 ELSIF p_oiplip_id IS NOT NULL THEN
17317 --
17318 get_hours_oiplip_rate(p_oiplip_id=> p_oiplip_id
17319 ,p_old_val => p_old_val
17320 ,p_new_val => p_new_val
17321 ,p_business_group_id => p_business_group_id
17322 ,p_effective_date => p_effective_date
17323 ,p_rec => p_rec);
17324 --
17325 END IF;
17326 --
17327 -- hr_utility.set_location ('Leaving '||l_package,10);
17328 --
17329 END get_hours_rate;
17330 --
17331 PROCEDURE clear_down_cache IS
17332 --
17333 l_package VARCHAR2(80) := g_package || '.clear_down_cache';
17334 --
17335 BEGIN
17336 --
17337 -- hr_utility.set_location ('Entering '||l_package,10);
17338 --
17339 -- Clear down all caches
17340 --
17341 g_cache_pl_los_el_rec.delete;
17342 g_cache_oipl_los_el_rec.delete;
17343 g_cache_plip_los_el_rec.delete;
17344 g_cache_ptip_los_el_rec.delete;
17345 g_cache_pgm_los_el_rec.delete;
17346 g_cache_pl_los_rt_rec.delete;
17347 g_cache_oipl_los_rt_rec.delete;
17348 g_cache_plip_los_rt_rec.delete;
17349 g_cache_ptip_los_rt_rec.delete;
17350 g_cache_oiplip_los_rt_rec.delete;
17351 g_cache_pgm_los_rt_rec.delete;
17352 g_cache_stated_los_rec.delete;
17353 g_cache_pl_age_el_rec.delete;
17354 g_cache_oipl_age_el_rec.delete;
17355 g_cache_plip_age_el_rec.delete;
17356 g_cache_ptip_age_el_rec.delete;
17357 g_cache_pgm_age_el_rec.delete;
17358 g_cache_pl_age_rt_rec.delete;
17359 g_cache_oipl_age_rt_rec.delete;
17360 g_cache_plip_age_rt_rec.delete;
17361 g_cache_ptip_age_rt_rec.delete;
17362 g_cache_oiplip_age_rt_rec.delete;
17363 g_cache_pgm_age_rt_rec.delete;
17364 g_cache_stated_age_rec.delete;
17365 g_cache_pl_clf_el_rec.delete;
17366 g_cache_oipl_clf_el_rec.delete;
17367 g_cache_plip_clf_el_rec.delete;
17368 g_cache_ptip_clf_el_rec.delete;
17369 g_cache_pgm_clf_el_rec.delete;
17370 g_cache_pl_clf_rt_rec.delete;
17371 g_cache_oipl_clf_rt_rec.delete;
17372 g_cache_plip_clf_rt_rec.delete;
17373 g_cache_oiplip_clf_rt_rec.delete;
17374 g_cache_ptip_clf_rt_rec.delete;
17375 g_cache_pgm_clf_rt_rec.delete;
17376 g_cache_pl_cla_el_rec.delete;
17377 g_cache_oipl_cla_el_rec.delete;
17378 g_cache_plip_cla_el_rec.delete;
17379 g_cache_ptip_cla_el_rec.delete;
17380 g_cache_pgm_cla_el_rec.delete;
17381 g_cache_pl_cla_rt_rec.delete;
17382 g_cache_oipl_cla_rt_rec.delete;
17383 g_cache_plip_cla_rt_rec.delete;
17387 g_cache_pl_pff_el_rec.delete;
17384 g_cache_oiplip_cla_rt_rec.delete;
17385 g_cache_ptip_cla_rt_rec.delete;
17386 g_cache_pgm_cla_rt_rec.delete;
17388 g_cache_oipl_pff_el_rec.delete;
17389 g_cache_plip_pff_el_rec.delete;
17390 g_cache_ptip_pff_el_rec.delete;
17391 g_cache_pgm_pff_el_rec.delete;
17392 g_cache_pl_pff_rt_rec.delete;
17393 g_cache_oipl_pff_rt_rec.delete;
17394 g_cache_plip_pff_rt_rec.delete;
17395 g_cache_oiplip_pff_rt_rec.delete;
17396 g_cache_ptip_pff_rt_rec.delete;
17397 g_cache_pgm_pff_rt_rec.delete;
17398 g_cache_pl_hwf_el_rec.delete;
17399 g_cache_oipl_hwf_el_rec.delete;
17400 g_cache_plip_hwf_el_rec.delete;
17401 g_cache_ptip_hwf_el_rec.delete;
17402 g_cache_pgm_hwf_el_rec.delete;
17403 g_cache_pl_hwf_rt_rec.delete;
17404 g_cache_oipl_hwf_rt_rec.delete;
17405 g_cache_plip_hwf_rt_rec.delete;
17406 g_cache_oiplip_hwf_rt_rec.delete;
17407 g_cache_ptip_hwf_rt_rec.delete;
17408 g_cache_pgm_hwf_rt_rec.delete;
17409 --
17410 -- hr_utility.set_location ('Leaving '||l_package,10);
17411 --
17412 END clear_down_cache;
17413 --
17414 END ben_derive_part_and_rate_cache;