PER Person Upload

Description

PER Person Upload creates and updates people in Oracle HR from Excel, as in the People window: employees, contingent workers and applicants, their personal details and the Further Person Information and Additional Personal Details flexfields. It also terminates employees, ends contingent worker placements and rehires ex-employees. Available for EBS R12 and 11i.

When to use it

  • Load new hires, contingent workers or applicants in bulk.
  • Mass-correct or date-track personal details (names, national identifier, marital status, email, office details).
  • Terminate employees or end contingent worker placements in bulk.
  • Rehire ex-employees.
  • Maintain the Further Person Information and Additional Personal Details flexfields.

Before you start

  • Access to the upload from an HR responsibility’s People window (Enter and Maintain).
  • Person types, leaving reasons and lookups (title, marital status, nationality) set up in the business group.
  • The upload creates the person and the default primary assignment in the business group. Enter the assignment details (organization, job, position, location, payroll) with PER Person Assignment Upload.

Choose a template

TemplateUse it to
Default (default)Create and update people with the People window fields, without the flexfields. Includes the termination columns.
New HireOpen an empty sheet to enter new employees, contingent workers or applicants, including Further Person Information. Upload Mode is fixed to Create and the download filters are hidden.
TerminationTerminate employees and end contingent worker placements: Termination Date, Leaving Reason and, optionally, Final Process Date.
FlexfieldsMaintain Further Person Information and Additional Personal Details of existing people.

Step 1 – Choose the template and set the parameters

Run PER Person Upload from Blitz Report, pick the template and set the parameters:

ParameterMeaning
Upload ModeCreate opens an empty sheet; Create, Update downloads the selected people for changing and lets you add new rows.
Business GroupRequired. Defaults from profile HR: Business Group.
Effective DateRequired, defaults to today. The date the downloaded records are shown as of, and the default date uploaded changes take effect.
Person Type, Person Number, Full Name likeRestrict which people are downloaded.
OrganizationDownloads only people whose primary assignment is in this organization.

The New Hire template shows only Upload Mode (fixed to Create), Business Group and Effective Date.

Step 2 – Run to download the Excel file

Click Run. The .xlsm file downloads and opens in Excel, with one row per person for Create, Update, or an empty sheet for Create.

Step 3 – Enter or change the data

  • New person: enter Last Name and an employee, contingent worker or applicant Person Type. Latest Start Date is the hire date, placement start or application date; when blank, the Effective Date is used. Leave Person Number blank if the business group numbers people automatically.
  • Change details: edit the columns on a downloaded row. Changes take effect on the row’s Effective Date (defaulted from the parameter).
  • Datetrack Mode: leave blank and the record is corrected when the Effective Date is its start date; otherwise the change is inserted from the Effective Date (as Update, or Update Change Insert when later changes exist). Choose Correction, Update, Update Change Insert or Update Override to force a mode.
  • Terminate: enter Termination Date and Leaving Reason, plus Final Process Date to close the period of service. For a contingent worker this ends the placement.
  • Rehire: change the Person Type of an ex-employee to an employee type and enter the rehire date as Latest Start Date.

The list of values and column help in each cell show the allowed values; flexfield columns show which segment of the business group’s legislation they hold.

Step 4 – Validate and Save

Click Validate and Save. The add-in checks for missing required values (Last Name, Person Type) and saves the file. Correct any rows it flags before uploading.

Step 5 – Upload the file

In Blitz Report click Upload and select the saved file. This submits the upload request; rows are processed one by one, and a row in error leaves the person unchanged.

Step 6 – Review the result report

When the request completes, a result report opens listing every row with its status and message, showing the values as stored in Oracle HR, including generated person numbers.

What’s produced

  • New employees, contingent workers or applicants, each with a default primary assignment in the business group.
  • Corrected or date-tracked person records.
  • Terminations (and final process dates), ended placements and rehires.
  • A result report with one line per uploaded row. Messages include: Employee created., Contingent worker created., Applicant created., Person updated., Employee terminated., Final process date set., Placement terminated., Employee rehired., or No change. when nothing differs.

Common questions

How are existing people matched?
Downloaded rows carry a hidden person id. New rows are matched by Person Number within the business group: the employee number, contingent worker number or applicant number according to the Person Type. If the same number belongs to people of different types, enter the Person Type.

Can I set a final process date later?
Yes. For a terminated employee without a final process date, enter Final Process Date and leave Termination Date and Leaving Reason unchanged.

Can I change a person’s type?
Only to another type of the same kind (for example, between employee person types), or from an ex-employee to an employee for a rehire.

Can I change Latest Start Date?
Only for a new person or for a rehire.

Where do I enter the job, organization or payroll?
In PER Person Assignment Upload. This upload creates the default primary assignment only.

Troubleshooting

MessageCauseWhat to do
Number … identifies more than one person. Enter the Person Type to identify the number type.The number is used by people of different types.Enter the Person Type.
Person … does not exist on <date>.The person has no record on the Effective Date.Use an Effective Date within the person’s dates.
A new person must have a person type of an employee, contingent worker or applicant.Missing or ex-person type on a new row.Choose an employee, contingent worker or applicant type.
The person type can only be changed to another … type, or from an ex-employee to an employee for a rehire.Person Type changed across kinds.Keep a type of the same kind, or use the HR forms for other transitions.
Latest Start Date can only be entered for a new person or for the rehire of an ex-employee.Start date changed on an existing person.Restore the downloaded value.
A new person cannot be terminated in the same upload row.Termination or Final Process Date on a new row.Create the person first, then terminate in a later upload.
The rehire requires a Latest Start Date after the final process date of the previous period of service.Rehire date missing or too early.Enter a later Latest Start Date.
The employee is already terminated. Reverse the termination in the Terminate window to change it.Termination Date or Leaving Reason changed on a terminated employee.Reverse the termination in Oracle HR first.
The final process date of a terminated employee cannot be changed.A final process date already exists.Change it in Oracle HR.
The placement is already terminated. Reverse the termination in the End Placement window to change it.Placement already ended.Reverse it in End Placement first.
Enter the Termination Date to terminate the employee. / Enter the Termination Date to end the placement.Leaving Reason or Final Process Date entered without a Termination Date.Enter the Termination Date.
Only an employee can be terminated.Termination entered for an applicant.Remove the termination values.
Additional Personal Details validation error: …Invalid flexfield value or combination.Correct the segment named in the message.

Other errors are Oracle HR validation messages, shown as raised by the HR API.

select
null action_,
null status_,
null message_,
null modified_columns_,
to_number(null) person_id_out,
papf.person_id,
pbg.name business_group,
decode(pptuf.system_person_type,'CWK',papf.npw_number,'EX_CWK',papf.npw_number,'APL',papf.applicant_number,'EX_APL',papf.applicant_number,papf.employee_number) person_number,
papf.full_name,
papf.last_name,
papf.first_name,
xxen_util.meaning(papf.title,'TITLE',3) title,
papf.pre_name_adjunct prefix,
papf.suffix,
papf.middle_names,
xxen_util.meaning(papf.sex,'SEX',3) gender,
pptt.user_person_type person_type,
papf.national_identifier,
:effective_date effective_date,
null datetrack_mode,
coalesce(ppos.date_start,ppop.date_start,papf.start_date) latest_start_date,
papf.date_of_birth birth_date,
papf.town_of_birth,
papf.region_of_birth,
(select ftv.territory_short_name from fnd_territories_vl ftv where papf.country_of_birth=ftv.territory_code) country_of_birth,
xxen_util.meaning(papf.marital_status,'MAR_STATUS',3) marital_status,
xxen_util.meaning(papf.nationality,'NATIONALITY',3) nationality,
xxen_util.meaning(papf.registered_disabled_flag,'REGISTERED_DISABLED',3) registered_disabled,
xxen_util.display_flexfield_value(800,'Person Developer DF',papf.per_information_category,'PER_INFORMATION1',papf.rowid,papf.per_information1) per_information1,
xxen_util.display_flexfield_value(800,'Person Developer DF',papf.per_information_category,'PER_INFORMATION2',papf.rowid,papf.per_information2) per_information2,
xxen_util.display_flexfield_value(800,'Person Developer DF',papf.per_information_category,'PER_INFORMATION3',papf.rowid,papf.per_information3) per_information3,
xxen_util.display_flexfield_value(800,'Person Developer DF',papf.per_information_category,'PER_INFORMATION4',papf.rowid,papf.per_information4) per_information4,
xxen_util.display_flexfield_value(800,'Person Developer DF',papf.per_information_category,'PER_INFORMATION5',papf.rowid,papf.per_information5) per_information5,
xxen_util.display_flexfield_value(800,'Person Developer DF',papf.per_information_category,'PER_INFORMATION6',papf.rowid,papf.per_information6) per_information6,
xxen_util.display_flexfield_value(800,'Person Developer DF',papf.per_information_category,'PER_INFORMATION7',papf.rowid,papf.per_information7) per_information7,
xxen_util.display_flexfield_value(800,'Person Developer DF',papf.per_information_category,'PER_INFORMATION8',papf.rowid,papf.per_information8) per_information8,
xxen_util.display_flexfield_value(800,'Person Developer DF',papf.per_information_category,'PER_INFORMATION9',papf.rowid,papf.per_information9) per_information9,
xxen_util.display_flexfield_value(800,'Person Developer DF',papf.per_information_category,'PER_INFORMATION10',papf.rowid,papf.per_information10) per_information10,
xxen_util.display_flexfield_value(800,'Person Developer DF',papf.per_information_category,'PER_INFORMATION11',papf.rowid,papf.per_information11) per_information11,
xxen_util.display_flexfield_value(800,'Person Developer DF',papf.per_information_category,'PER_INFORMATION12',papf.rowid,papf.per_information12) per_information12,
xxen_util.display_flexfield_value(800,'Person Developer DF',papf.per_information_category,'PER_INFORMATION13',papf.rowid,papf.per_information13) per_information13,
xxen_util.display_flexfield_value(800,'Person Developer DF',papf.per_information_category,'PER_INFORMATION14',papf.rowid,papf.per_information14) per_information14,
xxen_util.display_flexfield_value(800,'Person Developer DF',papf.per_information_category,'PER_INFORMATION15',papf.rowid,papf.per_information15) per_information15,
xxen_util.display_flexfield_value(800,'Person Developer DF',papf.per_information_category,'PER_INFORMATION16',papf.rowid,papf.per_information16) per_information16,
xxen_util.display_flexfield_value(800,'Person Developer DF',papf.per_information_category,'PER_INFORMATION17',papf.rowid,papf.per_information17) per_information17,
xxen_util.display_flexfield_value(800,'Person Developer DF',papf.per_information_category,'PER_INFORMATION18',papf.rowid,papf.per_information18) per_information18,
xxen_util.display_flexfield_value(800,'Person Developer DF',papf.per_information_category,'PER_INFORMATION19',papf.rowid,papf.per_information19) per_information19,
xxen_util.display_flexfield_value(800,'Person Developer DF',papf.per_information_category,'PER_INFORMATION20',papf.rowid,papf.per_information20) per_information20,
xxen_util.display_flexfield_value(800,'Person Developer DF',papf.per_information_category,'PER_INFORMATION21',papf.rowid,papf.per_information21) per_information21,
xxen_util.display_flexfield_value(800,'Person Developer DF',papf.per_information_category,'PER_INFORMATION22',papf.rowid,papf.per_information22) per_information22,
xxen_util.display_flexfield_value(800,'Person Developer DF',papf.per_information_category,'PER_INFORMATION23',papf.rowid,papf.per_information23) per_information23,
xxen_util.display_flexfield_value(800,'Person Developer DF',papf.per_information_category,'PER_INFORMATION24',papf.rowid,papf.per_information24) per_information24,
xxen_util.display_flexfield_value(800,'Person Developer DF',papf.per_information_category,'PER_INFORMATION25',papf.rowid,papf.per_information25) per_information25,
xxen_util.display_flexfield_value(800,'Person Developer DF',papf.per_information_category,'PER_INFORMATION26',papf.rowid,papf.per_information26) per_information26,
xxen_util.display_flexfield_value(800,'Person Developer DF',papf.per_information_category,'PER_INFORMATION27',papf.rowid,papf.per_information27) per_information27,
xxen_util.display_flexfield_value(800,'Person Developer DF',papf.per_information_category,'PER_INFORMATION28',papf.rowid,papf.per_information28) per_information28,
xxen_util.display_flexfield_value(800,'Person Developer DF',papf.per_information_category,'PER_INFORMATION29',papf.rowid,papf.per_information29) per_information29,
xxen_util.display_flexfield_value(800,'Person Developer DF',papf.per_information_category,'PER_INFORMATION30',papf.rowid,papf.per_information30) per_information30,
papf.office_number office,
papf.internal_location location,
papf.mailstop,
papf.email_address email,
xxen_util.meaning(papf.expense_check_send_to_address,'HOME_OFFICE',3) mail_to,
papf.honors,
papf.known_as preferred_name,
papf.previous_last_name,
(select flv.description from fnd_languages_vl flv where papf.correspondence_language=flv.language_code) correspondence_language,
papf.date_employee_data_verified date_last_verified,
xxen_util.meaning(papf.student_status,'STUDENT_STATUS',3) student_status,
xxen_util.yes(papf.on_military_service) on_military_service,
xxen_util.yes(papf.second_passport_exists) second_passport,
papf.original_date_of_hire date_first_hired,
nvl(ppos.actual_termination_date,ppop.actual_termination_date) termination_date,
nvl(xxen_util.meaning(ppos.leaving_reason,'LEAV_REAS',3),xxen_util.meaning(ppop.termination_reason,'HR_CWK_TERMINATION_REASONS',3)) leaving_reason,
nvl(ppos.final_process_date,ppop.final_process_date) final_process_date,
xxen_util.display_flexfield_context(800,'PER_PEOPLE',papf.attribute_category) per_attribute_category,
xxen_util.display_flexfield_value(800,'PER_PEOPLE',papf.attribute_category,'ATTRIBUTE1',papf.rowid,papf.attribute1) per_attribute1,
xxen_util.display_flexfield_value(800,'PER_PEOPLE',papf.attribute_category,'ATTRIBUTE2',papf.rowid,papf.attribute2) per_attribute2,
xxen_util.display_flexfield_value(800,'PER_PEOPLE',papf.attribute_category,'ATTRIBUTE3',papf.rowid,papf.attribute3) per_attribute3,
xxen_util.display_flexfield_value(800,'PER_PEOPLE',papf.attribute_category,'ATTRIBUTE4',papf.rowid,papf.attribute4) per_attribute4,
xxen_util.display_flexfield_value(800,'PER_PEOPLE',papf.attribute_category,'ATTRIBUTE5',papf.rowid,papf.attribute5) per_attribute5,
xxen_util.display_flexfield_value(800,'PER_PEOPLE',papf.attribute_category,'ATTRIBUTE6',papf.rowid,papf.attribute6) per_attribute6,
xxen_util.display_flexfield_value(800,'PER_PEOPLE',papf.attribute_category,'ATTRIBUTE7',papf.rowid,papf.attribute7) per_attribute7,
xxen_util.display_flexfield_value(800,'PER_PEOPLE',papf.attribute_category,'ATTRIBUTE8',papf.rowid,papf.attribute8) per_attribute8,
xxen_util.display_flexfield_value(800,'PER_PEOPLE',papf.attribute_category,'ATTRIBUTE9',papf.rowid,papf.attribute9) per_attribute9,
xxen_util.display_flexfield_value(800,'PER_PEOPLE',papf.attribute_category,'ATTRIBUTE10',papf.rowid,papf.attribute10) per_attribute10,
xxen_util.display_flexfield_value(800,'PER_PEOPLE',papf.attribute_category,'ATTRIBUTE11',papf.rowid,papf.attribute11) per_attribute11,
xxen_util.display_flexfield_value(800,'PER_PEOPLE',papf.attribute_category,'ATTRIBUTE12',papf.rowid,papf.attribute12) per_attribute12,
xxen_util.display_flexfield_value(800,'PER_PEOPLE',papf.attribute_category,'ATTRIBUTE13',papf.rowid,papf.attribute13) per_attribute13,
xxen_util.display_flexfield_value(800,'PER_PEOPLE',papf.attribute_category,'ATTRIBUTE14',papf.rowid,papf.attribute14) per_attribute14,
xxen_util.display_flexfield_value(800,'PER_PEOPLE',papf.attribute_category,'ATTRIBUTE15',papf.rowid,papf.attribute15) per_attribute15,
xxen_util.display_flexfield_value(800,'PER_PEOPLE',papf.attribute_category,'ATTRIBUTE16',papf.rowid,papf.attribute16) per_attribute16,
xxen_util.display_flexfield_value(800,'PER_PEOPLE',papf.attribute_category,'ATTRIBUTE17',papf.rowid,papf.attribute17) per_attribute17,
xxen_util.display_flexfield_value(800,'PER_PEOPLE',papf.attribute_category,'ATTRIBUTE18',papf.rowid,papf.attribute18) per_attribute18,
xxen_util.display_flexfield_value(800,'PER_PEOPLE',papf.attribute_category,'ATTRIBUTE19',papf.rowid,papf.attribute19) per_attribute19,
xxen_util.display_flexfield_value(800,'PER_PEOPLE',papf.attribute_category,'ATTRIBUTE20',papf.rowid,papf.attribute20) per_attribute20,
xxen_util.display_flexfield_value(800,'PER_PEOPLE',papf.attribute_category,'ATTRIBUTE21',papf.rowid,papf.attribute21) per_attribute21,
xxen_util.display_flexfield_value(800,'PER_PEOPLE',papf.attribute_category,'ATTRIBUTE22',papf.rowid,papf.attribute22) per_attribute22,
xxen_util.display_flexfield_value(800,'PER_PEOPLE',papf.attribute_category,'ATTRIBUTE23',papf.rowid,papf.attribute23) per_attribute23,
xxen_util.display_flexfield_value(800,'PER_PEOPLE',papf.attribute_category,'ATTRIBUTE24',papf.rowid,papf.attribute24) per_attribute24,
xxen_util.display_flexfield_value(800,'PER_PEOPLE',papf.attribute_category,'ATTRIBUTE25',papf.rowid,papf.attribute25) per_attribute25,
xxen_util.display_flexfield_value(800,'PER_PEOPLE',papf.attribute_category,'ATTRIBUTE26',papf.rowid,papf.attribute26) per_attribute26,
xxen_util.display_flexfield_value(800,'PER_PEOPLE',papf.attribute_category,'ATTRIBUTE27',papf.rowid,papf.attribute27) per_attribute27,
xxen_util.display_flexfield_value(800,'PER_PEOPLE',papf.attribute_category,'ATTRIBUTE28',papf.rowid,papf.attribute28) per_attribute28,
xxen_util.display_flexfield_value(800,'PER_PEOPLE',papf.attribute_category,'ATTRIBUTE29',papf.rowid,papf.attribute29) per_attribute29,
xxen_util.display_flexfield_value(800,'PER_PEOPLE',papf.attribute_category,'ATTRIBUTE30',papf.rowid,papf.attribute30) per_attribute30,
0 upload_row
from
per_business_groups pbg,
per_all_people_f papf,
(
select
pptuf.person_id,
max(ppt.person_type_id) keep (dense_rank first order by decode(ppt.system_person_type,'EMP',1,'CWK',2,'APL',3,'EX_EMP',4,'EX_CWK',5,6)) person_type_id,
max(ppt.system_person_type) keep (dense_rank first order by decode(ppt.system_person_type,'EMP',1,'CWK',2,'APL',3,'EX_EMP',4,'EX_CWK',5,6)) system_person_type
from
per_person_type_usages_f pptuf,
per_person_types ppt
where
:effective_date between pptuf.effective_start_date and pptuf.effective_end_date and
pptuf.person_type_id=ppt.person_type_id and
ppt.business_group_id=:business_group_id and
ppt.system_person_type in ('EMP','CWK','APL','EX_EMP','EX_CWK','EX_APL')
group by
pptuf.person_id
) pptuf,
per_person_types_tl pptt,
(
select
ppos.person_id,
ppos.date_start,
ppos.actual_termination_date,
ppos.final_process_date,
ppos.leaving_reason,
row_number() over (partition by ppos.person_id order by ppos.date_start desc) rn
from
per_periods_of_service ppos
where
ppos.business_group_id=:business_group_id and
ppos.date_start<=:effective_date
) ppos,
(
select
ppop.person_id,
ppop.date_start,
ppop.actual_termination_date,
ppop.final_process_date,
ppop.termination_reason,
row_number() over (partition by ppop.person_id order by ppop.date_start desc) rn
from
per_periods_of_placement ppop
where
ppop.business_group_id=:business_group_id and
ppop.date_start<=:effective_date
) ppop
where
1=1 and
pbg.business_group_id=:business_group_id and
papf.business_group_id=pbg.business_group_id and
:effective_date between papf.effective_start_date and papf.effective_end_date and
papf.person_id=pptuf.person_id and
pptuf.person_type_id=pptt.person_type_id and
pptt.language=userenv('lang') and
papf.person_id=ppos.person_id(+) and
ppos.rn(+)=1 and
papf.person_id=ppop.person_id(+) and
ppop.rn(+)=1
Parameter NameSQL textValidation
Upload Mode
:p_upload_mode like '%'||xxen_upload.action_update
LOV
Business Group
 
LOV
Effective Date
 
Date
Person Type
pptuf.person_type_id=:person_type_id
LOV
Person Number
decode(pptuf.system_person_type,'CWK',papf.npw_number,'EX_CWK',papf.npw_number,'APL',papf.applicant_number,'EX_APL',papf.applicant_number,papf.employee_number)=:person_number
Char
Full Name like
upper(papf.full_name) like upper(:full_name)
Char
Organization
papf.person_id in (select paaf.person_id from per_all_assignments_f paaf where paaf.organization_id=:organization_id and paaf.primary_flag='Y' and :effective_date between paaf.effective_start_date and paaf.effective_end_date)
LOV