DBA Data[Home] [Help]

PACKAGE BODY: APPS.PER_JP_CONTACT_EXTRA_INFO

Source


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;