1 PACKAGE BODY per_jp_contact_extra_info AS
2 /* $Header: pejpreih.pkb 115.10 2003/10/07 19:04:04 ttagawa noship $ */
3 --
4 -- Constants
5 --
6 c_package constant varchar2(31) := 'per_jp_contact_extra_info.';
7 -- ----------------------------------------------------------------------------
8 -- |--------------------------< chk_information_type >------------------------|
9 -- ----------------------------------------------------------------------------
10 procedure chk_information_type(
11 p_contact_extra_info_id in number,
12 p_information_type in varchar2,
13 p_contact_relationship_id in number,
14 p_validation_start_date in date,
15 p_validation_end_date in date)
16 is
17 c_proc constant varchar2(61) := c_package || 'chk_information_type';
18 l_duplicate varchar2(1);
19 --
20 cursor csr_itax is
21 select 'Y'
22 from per_contact_extra_info_f
23 where contact_relationship_id = p_contact_relationship_id
24 and contact_extra_info_id <> p_contact_extra_info_id
25 and information_type in ('JP_ITAX_DEPENDENT', 'JP_ITAX_DEPENDENT_ON_OTHER_EMP', 'JP_ITAX_DEPENDENT_ON_OTHER_PAY')
26 and information_type <> p_information_type
27 and effective_end_date >= p_validation_start_date
28 and effective_start_date <= p_validation_end_date;
29 --
30 cursor csr_si is
31 select 'Y'
32 from per_contact_extra_info_f
33 where contact_relationship_id = p_contact_relationship_id
34 and contact_extra_info_id <> p_contact_extra_info_id
35 and information_type in ('JP_HI_SPOUSE', 'JP_HI_DEPENDENT')
36 and information_type <> p_information_type
37 and effective_end_date >= p_validation_start_date
38 and effective_start_date <= p_validation_end_date;
39 begin
40 hr_utility.set_location('Entering : ' || c_proc, 10);
41 --
42 -- No need to lock contact_relationship_id which is already locked in lck and ins_lck.
43 --
44 if p_information_type in ('JP_ITAX_DEPENDENT', 'JP_ITAX_DEPENDENT_ON_OTHER_EMP', 'JP_ITAX_DEPENDENT_ON_OTHER_PAY') then
45 open csr_itax;
46 fetch csr_itax into l_duplicate;
47 if csr_itax%found then
48 close csr_itax;
49 fnd_message.set_name('PER', 'PER_JP_CON_ITAX_INFO_EXISTS');
50 fnd_message.raise_error;
51 end if;
52 close csr_itax;
53 elsif p_information_type in ('JP_HI_SPOUSE', 'JP_HI_DEPENDENT') then
54 open csr_si;
55 fetch csr_si into l_duplicate;
56 if csr_si%found then
57 close csr_si;
58 fnd_message.set_name('PER', 'PER_JP_CON_HI_INFO_EXISTS');
59 fnd_message.raise_error;
60 end if;
61 close csr_si;
62 end if;
63 --
64 hr_utility.set_location('Leaving : ' || c_proc, 20);
65 end chk_information_type;
66 -- ----------------------------------------------------------------------------
67 -- |------------------------< chk_information_type_rkd >----------------------|
68 -- ----------------------------------------------------------------------------
69 procedure chk_information_type_rkd(
70 p_datetrack_mode in varchar2,
71 p_contact_extra_info_id in number,
72 p_information_type_o in varchar2,
73 p_contact_relationship_id_o in number,
74 p_validation_start_date in date,
75 p_validation_end_date in date)
76 is
77 c_proc constant varchar2(61) := c_package || 'chk_information_type_rkd';
78 begin
79 hr_utility.set_location('Entering : ' || c_proc, 10);
80 --
81 if p_datetrack_mode in (hr_api.g_future_change, hr_api.g_delete_next_change) then
82 chk_information_type(
83 p_contact_extra_info_id => p_contact_extra_info_id,
84 p_information_type => p_information_type_o,
85 p_contact_relationship_id => p_contact_relationship_id_o,
86 p_validation_start_date => p_validation_start_date,
87 p_validation_end_date => p_validation_end_date);
88 end if;
89 --
90 hr_utility.set_location('Leaving : ' || c_proc, 20);
91 end chk_information_type_rkd;
92 /*
93 -- ----------------------------------------------------------------------------
94 -- |--------------------------< chk_information_type >------------------------|
95 -- ----------------------------------------------------------------------------
96 -- {Start Of Comments}
97 --
98 -- Description:
99 -- This procedure verifies information types that stores the same kind of
100 -- information are mutually exclusive on arbitrary date.
101 --
102 -- Prerequisites:
103 -- None.
104 --
105 -- In Parameters:
106 -- Name Reqd Type Description
107 -- p_effective_date Yes DATE Date the insert is effectively
108 -- made on. Used for validation
109 -- purpose.
110 -- p_contact_relationship_id Yes NUMBER Contact relationship for which
111 -- the extra info applies.
112 -- p_information_type Yes VARCHAR2 Information type the extra info
113 -- applies to.
114 --
115 -- Post Success:
116 -- Process continues.
117 --
118 -- Post Failure:
119 -- An application error will be raised and process is terminated.
120 --
121 -- Access Status:
122 -- Internal Table Handler Use Only.
123 --
124 -- {End Of Comments}
125 --
126 PROCEDURE chk_information_type(
127 p_effective_date DATE,
128 p_contact_relationship_id NUMBER,
129 p_information_type VARCHAR2) IS
130 --
131 CURSOR cel_itax_info_exists(
132 p_effective_date DATE,
133 p_contact_relationship_id NUMBER,
134 p_information_type VARCHAR2) IS
135 --
136 SELECT 'Y' FROM per_contact_extra_info_f
137 WHERE contact_relationship_id = p_contact_relationship_id
138 AND information_type LIKE 'JP_ITAX%'
139 AND information_type <> p_information_type
140 AND p_effective_date BETWEEN effective_start_date AND effective_end_date;
141 --
142 CURSOR cel_hi_info_exists(
143 p_effective_date DATE,
144 p_contact_relationship_id NUMBER,
145 p_information_type VARCHAR2) IS
146 --
147 SELECT 'Y' FROM per_contact_extra_info_f
148 WHERE contact_relationship_id = p_contact_relationship_id
149 AND information_type LIKE 'JP_HI%'
150 AND information_type <> p_information_type
151 AND p_effective_date BETWEEN effective_start_date AND effective_end_date;
152 --
153 l_dummy VARCHAR2(1);
154 --
155 BEGIN
156 --
157 IF p_information_type LIKE 'JP_ITAX%' THEN
158 --
159 OPEN cel_itax_info_exists(p_effective_date, p_contact_relationship_id, p_information_type);
160 FETCH cel_itax_info_exists INTO l_dummy;
161 --
162 IF cel_itax_info_exists%FOUND THEN
163 --
164 CLOSE cel_itax_info_exists;
165 --
166 fnd_message.set_name(
167 application => 'PER',
168 name => 'PER_JP_CON_ITAX_INFO_EXISTS');
169 --
170 fnd_message.raise_error;
171 --
172 END IF;
173 --
174 CLOSE cel_itax_info_exists;
175 --
176 ELSIF p_information_type LIKE 'JP_HI%' THEN
177 --
178 OPEN cel_hi_info_exists(p_effective_date, p_contact_relationship_id, p_information_type);
179 FETCH cel_hi_info_exists INTO l_dummy;
180 --
181 IF cel_hi_info_exists%FOUND THEN
182 --
183 CLOSE cel_hi_info_exists;
184 --
185 fnd_message.set_name(
186 application => 'PER',
187 name => 'PER_JP_CON_HI_INFO_EXISTS');
188 --
189 fnd_message.raise_error;
190 --
191 END IF;
192 --
193 CLOSE cel_hi_info_exists;
194 --
195 END IF;
196 --
197 END chk_information_type;
198 --
199 -- ----------------------------------------------------------------------------
200 -- |----------------------------< chk_future_record >-------------------------|
201 -- ----------------------------------------------------------------------------
202 -- {Start Of Comments}
203 --
204 -- Description:
205 -- This procedure verifies information types that stores the same kind of
206 -- information are mutually exclusive on arbitrary date.
207 --
208 -- Prerequisites:
209 -- None.
210 --
211 -- In Parameters:
212 -- Name Reqd Type Description
213 -- p_effective_date Yes DATE Date the insert is effectively
214 -- made on. Used for validation
215 -- purpose.
216 -- p_contact_relationship_id Yes NUMBER Contact relationship for which
217 -- the extra info applies.
218 -- p_information_type Yes VARCHAR2 Information type the extra info
219 -- applies to.
220 --
221 -- Post Success:
222 -- Process continues.
223 --
224 -- Post Failure:
225 -- An application error will be raised and process is terminated.
226 --
227 -- Access Status:
228 -- Internal Table Handler Use Only.
229 --
230 -- {End Of Comments}
231 --
232 PROCEDURE chk_future_record(
233 p_effective_date DATE,
234 p_contact_relationship_id NUMBER,
235 p_information_type VARCHAR2) IS
236 --
237 CURSOR cel_itax_future_exists(
238 p_effective_date DATE,
239 p_contact_relationship_id NUMBER,
240 p_information_type VARCHAR2) IS
241 --
242 SELECT 'Y' FROM per_contact_extra_info_f
243 WHERE contact_relationship_id = p_contact_relationship_id
244 AND information_type LIKE 'JP_ITAX%'
245 AND information_type <> p_information_type
246 AND p_effective_date < effective_start_date;
247 --
248 CURSOR cel_hi_future_exists(
249 p_effective_date DATE,
250 p_contact_relationship_id NUMBER,
251 p_information_type VARCHAR2) IS
252 --
253 SELECT 'Y' FROM per_contact_extra_info_f
254 WHERE contact_relationship_id = p_contact_relationship_id
255 AND information_type LIKE 'JP_HI%'
256 AND information_type <> p_information_type
257 AND p_effective_date < effective_start_date;
258 --
259 l_dummy VARCHAR2(1);
260 --
261 BEGIN
262 --
263 IF p_information_type LIKE 'JP_ITAX%' THEN
264 --
265 OPEN cel_itax_future_exists(p_effective_date, p_contact_relationship_id, p_information_type);
266 FETCH cel_itax_future_exists INTO l_dummy;
267 --
268 IF cel_itax_future_exists%FOUND THEN
269 --
270 CLOSE cel_itax_future_exists;
271 --
272 fnd_message.set_name(
273 application => 'PER',
274 name => 'PER_JP_CON_ITAX_FUTURE_EXISTS');
275 --
276 fnd_message.raise_error;
277 --
278 END IF;
279 --
280 CLOSE cel_itax_future_exists;
281 --
282 ELSIF p_information_type LIKE 'JP_HI%' THEN
283 --
284 OPEN cel_hi_future_exists(p_effective_date, p_contact_relationship_id, p_information_type);
285 FETCH cel_hi_future_exists INTO l_dummy;
286 --
287 IF cel_hi_future_exists%FOUND THEN
288 --
289 CLOSE cel_hi_future_exists;
290 --
291 fnd_message.set_name(
292 application => 'PER',
293 name => 'PER_JP_CON_HI_FUTURE_EXISTS');
294 --
295 fnd_message.raise_error;
296 --
297 END IF;
298 --
299 CLOSE cel_hi_future_exists;
300 --
301 END IF;
302 --
303 END chk_future_record;
304 --
305 -- ----------------------------------------------------------------------------
306 -- |--------------------< chk_future_record_before_del >----------------------|
307 -- ----------------------------------------------------------------------------
308 -- {Start Of Comments}
309 --
310 -- Description:
311 -- This procedure verifies information types that stores the same kind of
312 -- information are mutually exclusive on arbitorary date. This procedure
313 -- should be called before delete.
314 --
315 -- Prerequisites:
316 -- None.
317 --
318 -- In Parameters:
319 -- Name Reqd Type Description
320 -- p_effective_date Yes DATE Date the delete is effectively
321 -- made on. Used for validation
322 -- purpose.
323 -- p_contact_extra_info_id Yes NUMBER Contact extra info ID.
324 -- p_datetrack_delete_mode Yes VARCHAR2 DateTrack mode the delete uses.
325 --
326 -- Post Success:
327 -- Process continues.
328 --
329 -- Post Failure:
330 -- An application error will be raised and process is terminated.
331 --
332 -- Access Status:
333 -- Internal Table Handler Use Only.
334 --
335 -- {End Of Comments}
336 --
337 PROCEDURE chk_future_record_before_del(
338 p_effective_date DATE,
339 p_contact_extra_info_id NUMBER,
340 p_datetrack_delete_mode VARCHAR2) IS
341 --
342 CURSOR cel_information_type IS
343 SELECT contact_relationship_id, information_type FROM per_contact_extra_info_f
344 WHERE contact_extra_info_id = p_contact_extra_info_id
345 AND p_effective_date BETWEEN effective_start_date AND effective_end_date;
346 --
347 CURSOR cel_itax_future_exists(
348 p_contact_relationship_id NUMBER,
349 p_information_type VARCHAR2) IS
350 --
351 SELECT 'Y' FROM per_contact_extra_info_f
352 WHERE information_type LIKE 'JP_ITAX%'
353 AND information_type <> p_information_type
354 AND contact_relationship_id = p_contact_relationship_id
355 AND p_effective_date < effective_start_date;
356 --
357 CURSOR cel_hi_future_exists(
358 p_contact_relationship_id NUMBER,
359 p_information_type VARCHAR2) IS
360 --
361 SELECT 'Y' FROM per_contact_extra_info_f
362 WHERE information_type LIKE 'JP_HI%'
363 AND information_type <> p_information_type
364 AND contact_relationship_id = p_contact_relationship_id
365 AND p_effective_date < effective_start_date;
366 --
367 l_contact_relationship_id per_contact_extra_info_f.contact_relationship_id%TYPE;
368 l_information_type per_contact_extra_info_f.information_type%TYPE;
369 l_dummy VARCHAR2(1);
370 --
371 BEGIN
372 --
373 IF p_datetrack_delete_mode IN (hr_api.g_future_change, hr_api.g_delete_next_change) THEN
374 --
375 OPEN cel_information_type;
376 FETCH cel_information_type INTO l_contact_relationship_id, l_information_type;
377 --
378 IF l_information_type LIKE 'JP_ITAX%' THEN
379 --
380 OPEN cel_itax_future_exists(l_contact_relationship_id, l_information_type);
381 FETCH cel_itax_future_exists INTO l_dummy;
382 --
383 IF cel_itax_future_exists%FOUND THEN
384 --
385 CLOSE cel_itax_future_exists;
386 --
387 fnd_message.set_name(
388 application => 'PER',
389 name => 'PER_JP_CON_ITAX_FUTURE_EXISTS');
390 --
391 fnd_message.raise_error;
392 --
393 END IF;
394 --
395 CLOSE cel_itax_future_exists;
396 --
397 ELSIF l_information_type LIKE 'JP_HI%' THEN
401 --
398 --
399 OPEN cel_hi_future_exists(l_contact_relationship_id, l_information_type);
400 FETCH cel_hi_future_exists INTO l_dummy;
402 IF cel_hi_future_exists%FOUND THEN
403 --
404 CLOSE cel_hi_future_exists;
405 --
406 fnd_message.set_name(
407 application => 'PER',
408 name => 'PER_JP_CON_HI_FUTURE_EXISTS');
409 --
410 fnd_message.raise_error;
411 --
412 END IF;
413 --
414 CLOSE cel_hi_future_exists;
415 --
416 END IF;
417 --
418 CLOSE cel_information_type;
419 --
420 END IF;
421 --
422 END chk_future_record_before_del;
423 --
424 -- ----------------------------------------------------------------------------
425 -- |---------------------------< chk_si_itax_flag >---------------------------|
426 -- ----------------------------------------------------------------------------
427 -- {Start Of Comments}
428 --
429 -- Description:
430 -- This procedure verifies si_itax_flag of the parent relationship is set to
431 -- 'Y'.
432 --
433 -- Prerequisites:
434 -- None.
435 --
436 -- In Parameters:
437 -- Name Reqd Type Description
438 -- p_effective_date Yes DATE Date the insert is effectively
439 -- made on. Used for validation
440 -- purpose.
441 -- p_contact_relationship_id Yes NUMBER Contact relationship for which
442 -- the extra info applies.
443 --
444 -- Post Success:
445 -- Process continues.
446 --
447 -- Post Failure:
448 -- An application error will be raised and process is terminated.
449 --
450 -- Access Status:
451 -- Internal Table Handler Use Only.
452 --
453 -- {End Of Comments}
454 --
455 PROCEDURE chk_si_itax_flag(
456 p_contact_relationship_id NUMBER) IS
457 --
458 CURSOR cel_legislation_code(
459 p_contact_relationship_id NUMBER) IS
460 --
461 SELECT pbg.legislation_code
462 FROM per_business_groups pbg, per_contact_relationships pcr
463 WHERE pcr.contact_relationship_id = p_contact_relationship_id
464 AND pcr.business_group_id = pbg.business_group_id;
465 --
466 CURSOR cel_parent_row(
467 p_contact_relationship_id NUMBER) IS
468 --
469 SELECT 'Y' FROM per_contact_relationships
470 WHERE contact_relationship_id = p_contact_relationship_id
471 AND cont_information_category = 'JP'
472 AND cont_information1 <> 'Y';
473 --
474 l_legislation_code per_business_groups.legislation_code%TYPE;
475 l_dummy VARCHAR2(1);
476 --
477 BEGIN
478 --
479 OPEN cel_legislation_code(p_contact_relationship_id);
480 FETCH cel_legislation_code INTO l_legislation_code;
481 --
482 IF l_legislation_code = 'JP' THEN
483 --
484 OPEN cel_parent_row(p_contact_relationship_id);
485 FETCH cel_parent_row INTO l_dummy;
486 --
487 IF cel_parent_row%FOUND THEN
488 --
489 CLOSE cel_parent_row;
490 --
491 fnd_message.set_name(
492 application => 'PER',
493 name => 'PER_JP_CON_INVALID_REL');
494 --
495 fnd_message.raise_error;
496 --
497 END IF;
498 --
499 CLOSE cel_parent_row;
500 --
501 END IF;
502 --
503 CLOSE cel_legislation_code;
504 --
505 END chk_si_itax_flag;
506 --
507 -- ----------------------------------------------------------------------------
508 -- |----------------------------< chk_aged_parent >---------------------------|
509 -- ----------------------------------------------------------------------------
510 -- {Start Of Comments}
511 --
512 -- Description:
513 -- This procedure verifies aged parent living with employee is over 70 years
514 -- old and contact type is not spouse.
515 --
516 -- Prerequisites:
517 -- None.
518 --
519 -- In Parameters:
520 -- Name Reqd Type Description
521 -- p_effective_date Yes DATE Date the insert is
522 -- effectively made on. Used
523 -- for age culculation and
524 -- validation purpose.
525 -- p_contact_relationship_id Yes NUMBER Contact relationship for
526 -- which the extra info applies.
527 -- p_information_type Yes VARCHAR2 Information type the extra
528 -- info applies to.
529 -- p_cei_information1 Yes VARCHAR2 Entry value for aged parent
530 -- living with employee.
531 --
532 -- Post Success:
533 -- Process continues.
534 --
535 -- Post Failure:
536 -- An application error will be raised and process is terminated.
537 --
538 -- Access Status:
539 -- Internal Table Handler Use Only.
540 --
541 -- {End Of Comments}
542 --
543 PROCEDURE chk_aged_parent(
544 p_effective_date DATE,
548 --
545 p_contact_relationship_id NUMBER,
546 p_information_type VARCHAR2,
547 p_cei_information1 VARCHAR2) IS
549 l_soy DATE := TRUNC(p_effective_date, 'YYYY');
550 l_eoy DATE := ADD_MONTHS(l_soy, 12) - 1;
551 --
552 CURSOR cel_dependent IS SELECT
553 TRUNC(MONTHS_BETWEEN(NVL(papf.date_of_death, l_eoy) + 1, papf.date_of_birth) / 12) age,
554 pcr.contact_type
555 FROM
556 per_all_people_f papf,
557 per_contact_relationships pcr
558 WHERE pcr.contact_relationship_id = p_contact_relationship_id
559 AND pcr.contact_person_id = papf.person_id
560 AND p_effective_date BETWEEN papf.effective_start_date AND papf.effective_end_date;
561 --
562 l_age NUMBER;
563 l_contact_type per_contact_relationships.contact_type%TYPE;
564 BEGIN
565 --
566 IF p_information_type = 'JP_ITAX_DEPENDENT' THEN
567 --
568 IF p_cei_information1 = '10' THEN
569 --
570 OPEN cel_dependent;
571 FETCH cel_dependent INTO l_age, l_contact_type;
572 CLOSE cel_dependent;
573 --
574 IF l_age < 70 THEN
575 --
576 fnd_message.set_name(
577 application => 'PER',
578 name => 'PER_JP_AGED_PARENT_UNDER_70');
579 --
580 fnd_message.raise_error;
581 --
582 END IF;
583 --
584 IF l_contact_type = 'S' THEN
585 --
586 fnd_message.set_name(
587 application => 'PER',
588 name => 'PER_JP_AGED_PARENT_SPOUSE');
589 --
590 fnd_message.raise_error;
591 --
592 END IF;
593 --
594 END IF;
595 --
596 END IF;
597 --
598 END chk_aged_parent;
599 --
600 -- ----------------------------------------------------------------------------
601 -- |-----------------------< chk_aged_parent_before_upd >---------------------|
602 -- ----------------------------------------------------------------------------
603 -- {Start Of Comments}
604 --
605 -- Description:
606 -- This procedure verifies aged parent living with employee is over 70 years
607 -- old and contact type is not spouse before update.
608 --
609 -- Prerequisites:
610 -- None.
611 --
612 -- In Parameters:
613 -- Name Reqd Type Description
614 -- p_effective_date Yes DATE Date the update is
615 -- effectively made on. Used
616 -- for age culculation and
617 -- validation purpose.
618 -- p_datetrack_update_mode Yes VARCHAR2 Datetrack update mode.
619 -- p_contact_relationship_id Yes NUMBER Contact relationship for
620 -- which the extra info applies.
621 -- p_information_type Yes VARCHAR2 Information type the extra
622 -- info applies to.
623 -- p_cei_information1 Yes VARCHAR2 Entry value for aged parent
624 -- living with employee.
625 --
626 -- Post Success:
627 -- Process continues.
628 --
629 -- Post Failure:
630 -- An application error will be raised and process is terminated.
631 --
632 -- Access Status:
633 -- Internal Table Handler Use Only.
634 --
635 -- {End Of Comments}
636 --
637 PROCEDURE chk_aged_parent_before_upd(
638 p_effective_date DATE,
639 p_datetrack_update_mode VARCHAR2,
640 p_contact_relationship_id NUMBER,
641 p_information_type VARCHAR2,
642 p_cei_information1 VARCHAR2) IS
643 --
644 l_soy DATE := TRUNC(p_effective_date, 'YYYY');
645 l_eoy DATE := ADD_MONTHS(l_soy, 12) - 1;
646 --
647 CURSOR cel_dependent IS SELECT
648 TRUNC(MONTHS_BETWEEN(NVL(papf.date_of_death, DECODE(p_datetrack_update_mode, 'CORRECTION', ADD_MONTHS(TRUNC(pceif.effective_start_date, 'YYYY'), 12) - 1, l_eoy)) + 1, papf.date_of_birth) / 12) age,
649 pcr.contact_type
650 FROM
654 WHERE pcr.contact_relationship_id = p_contact_relationship_id
651 per_all_people_f papf,
652 per_contact_relationships pcr,
653 per_contact_extra_info_f pceif
655 AND pcr.contact_person_id = papf.person_id
656 AND p_effective_date BETWEEN papf.effective_start_date AND papf.effective_end_date
657 AND pcr.contact_relationship_id = pceif.contact_relationship_id
658 AND pceif.information_type = p_information_type
659 AND p_effective_date BETWEEN pceif.effective_start_date AND pceif.effective_end_date;
660 --
661 l_age NUMBER;
662 l_contact_type per_contact_relationships.contact_type%TYPE;
663 BEGIN
664 --
665 IF p_information_type = 'JP_ITAX_DEPENDENT' THEN
666 --
667 IF p_cei_information1 = '10' THEN
668 --
669 OPEN cel_dependent;
670 FETCH cel_dependent INTO l_age, l_contact_type;
671 CLOSE cel_dependent;
672 --
673 IF l_age < 70 THEN
674 --
675 fnd_message.set_name(
676 application => 'PER',
677 name => 'PER_JP_AGED_PARENT_UNDER_70');
678 --
679 fnd_message.raise_error;
680 --
681 END IF;
682 --
683 IF l_contact_type = 'S' THEN
684 --
685 fnd_message.set_name(
686 application => 'PER',
687 name => 'PER_JP_AGED_PARENT_SPOUSE');
688 --
689 fnd_message.raise_error;
690 --
691 END IF;
692 --
693 END IF;
694 --
695 END IF;
696 --
697 END chk_aged_parent_before_upd;
698 --
699 */
700 END per_jp_contact_extra_info;