1 PACKAGE PAY_P45_PKG as
2 /* $Header: payrp45.pkh 120.6.12010000.2 2008/08/06 06:39:58 ubhat ship $ */
3 --
4 /*===========================================================================+
5 | Copyright (c) 1993 Oracle Corporation |
6 | Redwood Shores, California, USA |
7 | All rights reserved. |
8 +============================================================================
9 Name
10 PAY_P45_PKG
11 Purpose
12 Supports the VIEW P45 form (PAYWSR45) called from the form PAYGBTAX.
13 This is a UK Specific form/package.
14 Notes
15
16 History
17 07-AUG-94 P.Shergil 40.0 Date Created.
18 29-AUG-94 H.Minton 40.1 Added Function to get the formula id
19 04-OCT-94 R.Fine 40.2 Renamed package to start PAY_
20 08-MAR-2000 J. Moyano 115.1 Function get_student_loan_flag added.
21 14-AUG-2000 A.Parkes 115.2 Added P45 Archiver hooks and cursors.
22 08-FEB-2001 S.Robinson 115.3 Procedure pop_term_from_archive added.
23 19-FEB-2001 A.Parkes 115.4 Removed action_status from
24 csr_edi_assignments select.
25 Added get_report_request_error func
26 29-MAR-2001 A.Parkes 115.5 Put space in RECEIVER_ID value.
27 115.6 842703 added X_TRANSFER_DATE param
28 to get_data
29 17-FEB-2002 S.Robinson 115.7 Added dbdrv commands.
30 27-FEB-2002 K.Thampan 115.8 Added X_STUDENT_LOAN_FLAG to procedure
31 pop_term_asg_from_archive
32 12-Dec-2002 A.Mills 115.9 Added nocopy via utility
33 20-Aug-2003 A.Mills 115.9 Agg PAYE changes.
34 13-May-2004 K.Thampan 115.12 Put NONE in the field where NI number
35 is not available on P45 EDI file
36 18-JAN-2005 navesriv 115.13 Displayed Employee PAYE Reference in full
37 by increasing the length of the field
38 26-APR-2005 kthampan 115.14 Add one parameter to the procedure
39 pop_term_asg_from_archive
40 19-JUN-2006 K.Thampan 115.15 Substr title to 4 chars. Bug 5169434
41 04-SEP-2006 ajeyam 115.16 New proc/functions created to find whether
42 P45 issued (or) not for the given
43 assignment. Bug 5144323
44 05-SEP-2006 ajeyam 115.17 Parameters added/changed for new report-
45 show the p45 issued for act asgs 5144323
46 13-NOV-2007 parusia 115.18 Added 2 new cursors csr_tax_district and
47 csr_edi_assignments for P45PT1. Bug 6345375
48 27-DEC-2007 rlingama 115.19 Modified X_COUNTY to X_COUNTRY in
49 csr_movded5_edi_assignments cursor.Bug 6710197
50 4-Jan-2008 parusia 115.20 Selected middle_name also from cursor
51 csr_movded5_edi_assignments. Bug 6710229
52 14-May-2008 rlingama 115.21 Bug 7028893.Added function PAYE_RETURN_P45_ISSUED_FLAG.
53 ============================================================================*/
54 --
55 -- CURSORS
56 CURSOR csr_tax_district IS
57 SELECT 'SENDER_ID=P', upper(nvl(org_information11,' ')),
58 'RECEIVER_ID=P', 'INLAND REVENUE',
59 'TEST_INDICATOR=P', decode(pay_gb_eoy_archive.get_parameter
60 (legislative_parameters,
61 'TEST'),'Y','1',' '),
62 'URGENT_MARKER=P', decode(pay_gb_eoy_archive.get_parameter
63 (legislative_parameters,
64 'URGENT'),'Y','Y',' '),
65 'REQUEST_ID=P', fnd_number.number_to_canonical(pact.request_id),
66 'FORM_TYPE=P', '4',
67 'FORM_TYPE_MEANING=P', 'P45',
68 'TAX_DIST_NO=P', substr(hoi.org_information1,1,3),
69 'TAX_DIST_REF=P',
70 upper(substr(ltrim(substr(hoi.org_information1,4,11),'/') ,1,10)), /* Bug no 4086012 */
71 'TAX_DISTRICT=P', upper(nvl(substr(hoi.org_information2 ,1,40),' ')),
72 'EMPLOYERS_ADDRESS_LINE=P',
73 upper(nvl(substr(hoi.org_information4,1,60),' ')),
74 'EMPLOYERS_NAME=P', upper(nvl(substr(hoi.org_information3,1,36),' '))
75 FROM pay_payroll_actions pact,
76 hr_organization_information hoi
77 WHERE pact.payroll_action_id = pay_magtape_generic.get_parameter_value
78 ('TRANSFER_PAYROLL_ACTION_ID')
79 AND hoi.org_information_context = 'Tax Details References'
80 AND substr(pact.legislative_parameters,
81 instr(pact.legislative_parameters,'TAX_REF=') + 8,
82 instr(pact.legislative_parameters||' ',' ',
83 instr(pact.legislative_parameters,'TAX_REF=')+8)
84 - instr(pact.legislative_parameters,'TAX_REF=') - 8)
85 = hoi.org_information1
86 AND hoi.organization_id = pact.business_group_id;
87 --
88 CURSOR csr_edi_assignments IS
89 SELECT
90 'ASSIGNMENT_ACTION_ID=C', act.assignment_action_id,
91 'CHARS_ALREADY_TESTED=P', pay_gb_eoy_archive.get_parameter
92 (pact.legislative_parameters,'CHAR_ERROR'),
93 'ADDRESS_LINE1=P',
94 upper(nvl(max(decode(fue.user_entity_name,
95 'X_ADDRESS_LINE1',substr(fai.VALUE,1,35))),' ')),
96 'ADDRESS_LINE2=P',
97 upper(nvl(max(decode(fue.user_entity_name,
98 'X_ADDRESS_LINE2',substr(fai.VALUE,1,35))),' ')),
99 'ADDRESS_LINE3=P',
100 upper(nvl(max(decode(fue.user_entity_name,
101 'X_ADDRESS_LINE3',substr(fai.VALUE,1,35))),' ')),
102 'ASSIGNMENT_NUMBER=P',
103 upper(nvl(max(decode(fue.user_entity_name,
104 'X_ASSIGNMENT_NUMBER',
105 substr(fai.VALUE,1,20))),' ')),
106 'COUNTY=P',
107 upper(nvl(max(decode(fue.user_entity_name,'X_COUNTY',
108 substr(fai.VALUE,1,35))),' ')),
109 'FIRST_NAME=P',
110 nvl(max(decode(fue.user_entity_name,'X_FIRST_NAME',
111 substr(upper(fai.VALUE),1,35))),' '),
112 'LAST_NAME=P',
113 nvl(max(decode(fue.user_entity_name,'X_LAST_NAME',
114 substr(upper(fai.VALUE),1,35))),' '),
115 'NATIONAL_INSURANCE_NUMBER=P',
116 nvl(max(decode(fue.user_entity_name,
117 'X_NATIONAL_INSURANCE_NUMBER',
118 substr(upper(fai.VALUE),1,9))),'NONE'),
119 'POSTAL_CODE=P',
120 nvl(max(decode(fue.user_entity_name,'X_POSTAL_CODE',
121 substr(upper(fai.VALUE),1,9))),' '),
122 'TITLE=P',
123 nvl(max(decode(fue.user_entity_name,'X_TITLE',
124 substr(upper(fai.VALUE),1,4))),' '),
125 'TOWN_OR_CITY=P',
126 upper(nvl(max(decode(fue.user_entity_name,
127 'X_TOWN_OR_CITY',
128 substr(fai.VALUE,1,35))),' '))
129 FROM pay_assignment_actions act_edi,
130 pay_action_interlocks pai,
131 pay_assignment_actions act,
132 pay_payroll_actions pact,
133 ff_archive_items fai,
134 ff_user_entities fue
135 WHERE act_edi.payroll_action_id = pay_magtape_generic.get_parameter_value
136 ('TRANSFER_PAYROLL_ACTION_ID')
137 AND act_edi.assignment_action_id = pai.locking_action_id
138 AND act.assignment_action_id = pai.locked_action_id
139 AND pact.payroll_action_id = act.payroll_action_id
140 AND act.assignment_action_id = fai.context1
141 AND fai.archive_type <> 'PA'
142 AND fai.user_entity_id = fue.user_entity_id
143 GROUP BY act.assignment_action_id, pay_gb_eoy_archive.get_parameter
144 (pact.legislative_parameters,'CHAR_ERROR'),
145 act.action_status
146 ORDER BY 12;
147 --
148 --
149 /* Added for P45PT1 ( Bug 6345375 ) */
150 CURSOR csr_movded5_tax_district IS
151 SELECT 'SENDER_ID=P', upper(nvl(org_information11,' ')),
152 'RECEIVER_ID=P' , 'HMRC',
153 'TEST_INDICATOR=P', decode(pay_gb_eoy_archive.get_parameter
154 (legislative_parameters,
155 'TEST'),'Y','1',' '),
156 'URGENT_MARKER=P' , ' ',
157 'REQUEST_ID=P' , fnd_number.number_to_canonical(pact.request_id),
158 'FORM_TYPE=P' , '4',
159 'FORM_TYPE_MEANING=P', 'P45PT1',
160 'TAX_DIST_NO=P' , substr(hoi.org_information1,1,3),
161 'TAX_DIST_REF=P' , upper(substr(ltrim(substr(hoi.org_information1,4,11),'/') ,1,10)), /* Bug no 4086012 */
162 'TAX_DISTRICT=P' , upper(nvl(substr(hoi.org_information2 ,1,40),' ')),
163 'EMPLOYERS_ADDRESS_LINE=P', upper(nvl(substr(hoi.org_information4,1,60),' ')),
164 'EMPLOYERS_NAME=P', upper(nvl(substr(hoi.org_information3,1,36),' ')),
165 'TEST_ID=P' , nvl(pay_gb_eoy_archive.get_parameter
166 (legislative_parameters,
167 'TEST_ID'),' ') /*added for P45PT1*/
168 FROM pay_payroll_actions pact,
169 hr_organization_information hoi
170 WHERE pact.payroll_action_id = pay_magtape_generic.get_parameter_value
171 ('TRANSFER_PAYROLL_ACTION_ID')
172 AND hoi.org_information_context = 'Tax Details References'
173 AND substr(pact.legislative_parameters,
174 instr(pact.legislative_parameters,'TAX_REF=') + 8,
175 instr(pact.legislative_parameters||' ',' ',
176 instr(pact.legislative_parameters,'TAX_REF=')+8)
177 - instr(pact.legislative_parameters,'TAX_REF=') - 8)
178 = hoi.org_information1
179 AND hoi.organization_id = pact.business_group_id;
180 --
181 CURSOR csr_movded5_edi_assignments IS
182 SELECT
183 'ASSIGNMENT_ACTION_ID=C', act.assignment_action_id,
184 'CHARS_ALREADY_TESTED=P', pay_gb_eoy_archive.get_parameter
185 (pact.legislative_parameters,'CHAR_ERROR'),
186 'ADDRESS_LINE1=P',
187 upper(nvl(max(decode(fue.user_entity_name,
188 'X_ADDRESS_LINE1',substr(fai.VALUE,1,35))),' ')),
189 'ADDRESS_LINE2=P',
190 upper(nvl(max(decode(fue.user_entity_name,
191 'X_ADDRESS_LINE2',substr(fai.VALUE,1,35))),' ')),
192 'ADDRESS_LINE3=P',
193 upper(nvl(max(decode(fue.user_entity_name,
194 'X_ADDRESS_LINE3',substr(fai.VALUE,1,35))),' ')),
195 'ASSIGNMENT_NUMBER=P',
196 upper(nvl(max(decode(fue.user_entity_name,
197 'X_ASSIGNMENT_NUMBER',
198 substr(fai.VALUE,1,20))),' ')),
199 'COUNTY=P',
200 upper(nvl(max(decode(fue.user_entity_name,'X_COUNTRY',
201 substr(fai.VALUE,1,35))),' ')), /* Country parameter*/
202 'FIRST_NAME=P',
203 nvl(max(decode(fue.user_entity_name,'X_FIRST_NAME',
204 substr(upper(fai.VALUE),1,35))),' '),
205 'MIDDLE_NAME=P', /*Bug 6710229*/
206 nvl(max(decode(fue.user_entity_name,'X_MIDDLE_NAME',
207 substr(upper(fai.VALUE),1,35))),' '),
208 'LAST_NAME=P',
209 nvl(max(decode(fue.user_entity_name,'X_LAST_NAME',
210 substr(upper(fai.VALUE),1,35))),' '),
211 'NATIONAL_INSURANCE_NUMBER=P',
212 nvl(max(decode(fue.user_entity_name,
213 'X_NATIONAL_INSURANCE_NUMBER',
214 substr(upper(fai.VALUE),1,9))),' '),
215 'POSTAL_CODE=P',
216 nvl(max(decode(fue.user_entity_name,'X_POSTAL_CODE',
217 substr(upper(fai.VALUE),1,9))),' '),
218 'TITLE=P',
219 nvl(max(decode(fue.user_entity_name,'X_TITLE',
220 substr(upper(fai.VALUE),1,4))),' '),
221 'TOWN_OR_CITY=P',
222 upper(nvl(max(decode(fue.user_entity_name,
223 'X_TOWN_OR_CITY',
224 substr(fai.VALUE,1,35))),' ')),
225 'EFFECTIVE_DATE=P', fnd_date.date_to_canonical(pact.effective_date)
226 FROM pay_assignment_actions act_edi,
227 pay_action_interlocks pai,
228 pay_assignment_actions act,
229 pay_payroll_actions pact,
230 ff_archive_items fai,
231 ff_user_entities fue
232 WHERE act_edi.payroll_action_id = pay_magtape_generic.get_parameter_value
233 ('TRANSFER_PAYROLL_ACTION_ID')
234 AND act_edi.assignment_action_id = pai.locking_action_id
235 AND act.assignment_action_id = pai.locked_action_id
236 AND pact.payroll_action_id = act.payroll_action_id
237 AND act.assignment_action_id = fai.context1
238 AND fai.archive_type <> 'PA'
239 AND fai.user_entity_id = fue.user_entity_id
240 GROUP BY act.assignment_action_id, pay_gb_eoy_archive.get_parameter
241 (pact.legislative_parameters,'CHAR_ERROR'),
242 act.action_status, fnd_date.date_to_canonical(pact.effective_date)
243 ORDER BY 12;
244 /* Addition for P45PT1 ( Bug 6345375 ) ends*/
245 --
246 --
247 level_cnt number; -- required by the generic magtape procedure.
248 -- FUNCTION get_report_request_error
249 -- Function to retrieve the global g_fnd_rep_request_msg which will be
250 -- populated with the fnd message in the event of the P45 report submission
251 -- failing.
252 FUNCTION get_report_request_error RETURN VARCHAR2;
253 --
254 -- PROCEDURE range_cursor
255 -- Procedure which returns a varchar2 defining a SQL Statement to select
256 -- all the people in the business group.
257 -- The archiver uses this cursor to split the people into chunks for parallel
258 -- processing.
259 -- This procedure is used for both the P45 Archive process and the P45 EDI
260 -- process. When called by the P45 Archive process it also archives the
261 -- tax ref. info.
262 PROCEDURE range_cursor (pactid IN NUMBER,
263 sqlstr out nocopy varchar2);
264 --
265 PROCEDURE arch_act_creation(pactid IN NUMBER,
266 stperson IN NUMBER,
267 endperson IN NUMBER,
268 chunk IN NUMBER);
269 --
270 PROCEDURE archinit(p_payroll_action_id IN NUMBER);
271 --
272 PROCEDURE archive_code(p_assactid IN NUMBER, p_effective_date IN DATE);
273 --
274 -- PROCEDURE spawn_reports
275 -- This is the procedure called after P45 archiving has taken place. It is
276 -- called as the magtape hook, but instead of creating a file, it is used to
277 -- spawn the P45 report. It will call the PAY_GB_P45_REPORT_SUBMISSION
278 -- formula to report the report request id and to stop the magtape process.
279 PROCEDURE spawn_reports;
280 --
281 PROCEDURE edi_act_creation(pactid IN NUMBER,
282 stperson IN NUMBER,
283 endperson IN NUMBER,
284 chunk IN NUMBER);
285 --
286 -----------------------------------------------------------------------------
287 -- Name --
288 -- get_p45_formula_id --
289 -- Purpose --
290 -- this function finds the formula id for the validation of the PAYE --
291 -- tax_code element entry value.
292 -----------------------------------------------------------------------------
293 --
294 FUNCTION get_p45_formula_id RETURN NUMBER;
295 -----------------------------------------------------------------------------
296 --
297 --
298 -----------------------------------------------------------------------------
299 --
300 -- Name --
301 -- get_student_loan_flag --
302 -- Purpose --
303 -- this function finds if the employee has a Student Loan effective at --
304 -- the time employment ceases. Returns 'Y' if 'End Date' is not prior --
305 -- or equal to the termination date. --
306 -----------------------------------------------------------------------------
307 --
308 FUNCTION get_student_loan_flag (p_assignment_id in NUMBER,
309 p_termination_date in DATE,
310 p_session_date in DATE) RETURN VARCHAR2;
311 --
312 --
313 -----------------------------------------------------------------------------
314
315 procedure get_data(X_PERSON_ID in number,
316 X_SESSION_DATE in date,
317 X_ADDRESS_LINE1 in out nocopy varchar2,
318 X_ADDRESS_LINE2 in out nocopy varchar2,
319 X_ADDRESS_LINE3 in out nocopy varchar2,
320 X_TOWN_OR_CITY in out nocopy varchar2,
321 X_REGION_1 in out nocopy varchar2,
322 X_COUNTRY in out nocopy varchar2,
323 X_POSTAL_CODE in out nocopy varchar2,
324 X_ASSIGNMENT_ID in number,
325 X_ASSIGNMENT_ACTION_ID in out nocopy number,
326 X_ASSIGNMENT_END_DATE in date,
327 X_DATE_EARNED in out nocopy date,
328 X_PAYROLL_ACTION_ID in out nocopy number,
329 X_TRANSFER_DATE in date default
330 hr_general.end_of_time);
331
332 procedure get_data(X_PERSON_ID in number,
333 X_SESSION_DATE in date,
334 X_ADDRESS_LINE1 in out nocopy varchar2,
335 X_ADDRESS_LINE2 in out nocopy varchar2,
336 X_ADDRESS_LINE3 in out nocopy varchar2,
337 X_TOWN_OR_CITY in out nocopy varchar2,
338 X_REGION_1 in out nocopy varchar2,
339 X_COUNTRY in out nocopy varchar2,
340 X_POSTAL_CODE in out nocopy varchar2,
341 X_ASSIGNMENT_ID in number,
342 X_ASSIGNMENT_ACTION_ID in out nocopy number,
343 X_ASSIGNMENT_END_DATE in date,
344 X_DATE_EARNED in out nocopy date,
345 X_PAYROLL_ACTION_ID in out nocopy number,
346 X_EMPLOYER_NAME in out nocopy varchar2,
347 X_EMPLOYER_ADDRESS in out nocopy varchar2,
348 X_TRANSFER_DATE in date default
349 hr_general.end_of_time);
350
351 procedure get_form_query_data(X_ASSIGNMENT_ID in number,
352 X_LAST_NAME in out nocopy varchar2,
353 X_TITLE in out nocopy varchar2,
354 X_FIRST_NAME in out nocopy varchar2,
355 X_NATIONAL_IDENTIFIER in out nocopy varchar2,
356 X_PERSON_ID in out nocopy number,
357 X_ACTUAL_TERMINATION_DATE in out nocopy date,
358 X_DECEASED_FLAG in out nocopy varchar2,
359 X_ASSIGNMENT_NUMBER in out nocopy varchar2,
360 X_PAYROLL_ID in out nocopy number,
361 X_ORGANIZATION_ID in out nocopy number,
362 X_ORG_NAME in out nocopy varchar2);
363
364 procedure pop_term_asg_from_archive(X_ASSIGNMENT_ACTION_ID in number,
365 X_NI1 in out nocopy varchar2,
366 X_NI2 in out nocopy varchar2,
367 X_NI3 in out nocopy varchar2,
368 X_NI4 in out nocopy varchar2,
369 X_NI5 in out nocopy varchar2,
370 X_NI6 in out nocopy varchar2,
371 X_NI7 in out nocopy varchar2,
372 X_NI8 in out nocopy varchar2,
373 X_NI9 in out nocopy varchar2,
374 X_LAST_NAME in out nocopy varchar2,
375 X_TITLE in out nocopy varchar2,
376 X_FIRST_NAME in out nocopy varchar2,
377 X_DATE_OF_LEAVING_DD in out nocopy varchar2,
378 X_DATE_OF_LEAVING_MM in out nocopy varchar2,
379 X_DATE_OF_LEAVING_YY in out nocopy varchar2,
380 X_TAX_CODE_AT_LEAVING in out nocopy varchar2,
381 X_WK1_OR_MTH1 in out nocopy varchar2,
382 X_WEEK_NO in out nocopy varchar2,
383 X_MONTH_NO in out nocopy varchar2,
384 X_PAY_TD_POUNDS in out nocopy number,
385 X_PAY_TD_PENCE in out nocopy number,
386 X_TAX_TD_POUNDS in out nocopy number,
387 X_TAX_TD_PENCE in out nocopy number,
388 X_PAY_IN_EMP_POUNDS in out nocopy number,
389 X_PAY_IN_EMP_PENCE in out nocopy number,
390 X_TAX_IN_EMP_POUNDS in out nocopy number,
391 X_TAX_IN_EMP_PENCE in out nocopy number,
392 X_ASSIGNMENT_NUMBER in out nocopy varchar2,
393 X_ORG_NAME in out nocopy varchar2,
394 X_ADDRESS_LINE1 in out nocopy varchar2,
395 X_ADDRESS_LINE2 in out nocopy varchar2,
396 X_ADDRESS_LINE3 in out nocopy varchar2,
397 X_TOWN_OR_CITY in out nocopy varchar2,
398 X_REGION_1 in out nocopy varchar2,
399 X_POSTAL_CODE in out nocopy varchar2,
400 X_DECEASED_FLAG in out nocopy varchar2,
401 X_ISSUE_DATE in out nocopy varchar2,
402 X_TAX_REF_TRANSFER in out nocopy varchar2,
403 X_STUDENT_LOAN_FLAG in out nocopy varchar2,
404 X_COUNTRY in out nocopy varchar2);
405
406 Procedure pop_term_pact_from_archive (X_PAYROLL_ACTION_ID in number,
407 X_EMPLOYER_NAME in out nocopy varchar2,
408 X_EMPLOYER_ADDRESS in out nocopy varchar2);
409 --------------------------------------------------------------------------
410 -- name get_p45_asg_action_id
411 -- Purpose
412 -- Get P45 Assignment Action id, Issue Date
413 -- for the given Assignment ID
414 --------------------------------------------------------------------------
415 PROCEDURE get_p45_asg_action_id(p_assignment_id in number,
416 p_assignment_action_id out nocopy number,
417 p_issue_date out nocopy date,
418 p_action_sequence out nocopy number
419 );
420 --------------------------------------------------------------------------
421 -- name get_p45_eit_manual_issue_dt
422 -- purpose
423 -- Get the P45 Manual Issue date from Extra Info. table
424 -- for the given Assignment ID
425 --------------------------------------------------------------------------
426 FUNCTION get_p45_eit_manual_issue_dt(p_assignment_id in number) RETURN DATE;
427
428 --------------------------------------------------------------------------
429 -- name get_p45_agg_asg_action_id
430 -- Get the Aggregated Assignment Id, Assignment Action id,
431 -- Final Payment Date for which the P45 been issued
432 --------------------------------------------------------------------------
433 PROCEDURE get_p45_agg_asg_action_id(p_assignment_id in number,
434 p_agg_assignment_id out nocopy number,
435 p_final_payment_date out nocopy date,
436 p_p45_issue_date out nocopy date,
437 p_p45_agg_asg_action_id out nocopy number
438 );
439
440 --------------------------------------------------------------------------
441 -- name return_p45_issued_flag
442 --
443 -- Purpose --
444 -- this function returns whether the P45 is issued or not for the given --
445 -- assignment (Y-Yes/N-No)
446 -----------------------------------------------------------------------------
447 FUNCTION return_p45_issued_flag(p_assignment_id in number) RETURN VARCHAR2;
448
449 -- Bug 7028893.Added function PAYE_RETURN_P45_ISSUED_FLAG.
450 --------------------------------------------------------------------------
451 -- FUNCTION paye_return_p45_issued_flag
452 -- DESCRIPTION return the P45 issued status for the given assignment (Y-Yes/N-No)
453 --------------------------------------------------------------------------
454 FUNCTION paye_return_p45_issued_flag(p_assignment_id in number,p_payroll_action_id in number) RETURN VARCHAR2;
455
456 END PAY_P45_PKG;