Amza.in

Oracle HCM Tables Reference

Live
26 tables

🔄 Complete Oracle HCM → Payroll Flow

Employee Created
(PER_ALL_PEOPLE_F)
    ↓

Assignment Created
(PER_ALL_ASSIGNMENTS_F)
    ↓

Element Assigned
(PAY_ELEMENT_ENTRIES_F)
    ↓

Payroll Run Triggered
(PAY_PAYROLL_ACTIONS)
    ↓

Employee Level Processing
(PAY_PAYROLL_REL_ACTIONS)
    ↓

Element Calculation
(PAY_RUN_RESULTS)
    ↓

Final Output
(PAY_RUN_BALANCES)

PER_ALL_PEOPLE_F (Core Employee Table)

PER_ALL_PEOPLE_F is a date-effective table that stores core person information in Oracle HCM. Each record is maintained with effective start and end dates, allowing tracking of historical changes.

Important Columns

ColumnDescription
PERSON_IDUnique system-generated identifier for a person (Primary Key)
PERSON_NUMBERUnique employee number used across the application
EFFECTIVE_START_DATEStart date of the record (used for date-effective logic)
EFFECTIVE_END_DATEEnd date of the record
BUSINESS_GROUP_IDEnterprise identifier (used for multi-tenancy)
START_DATEEarliest record start date for the person
APPLICANT_NUMBERUnique number assigned for applicants
PRIMARY_EMAIL_IDReference to primary email in PER_EMAIL_ADDRESSES
PRIMARY_PHONE_IDReference to primary phone in PER_PHONES
MAILING_ADDRESS_IDReference to mailing address in PER_ADDRESSES
PRIMARY_NID_IDReference to primary national identifier
PRIMARY_NID_NUMBERDenormalized national ID value
OBJECT_VERSION_NUMBERUsed for optimistic locking during updates
CREATED_BYUser who created the record
CREATION_DATERecord creation timestamp
LAST_UPDATED_BYUser who last updated the record
LAST_UPDATE_DATELast update timestamp
LAST_UPDATE_LOGINSession login reference
WAIVE_DATA_PROTECTCurrently unused column

Joins

  • Join with PER_PERSON_NAMES_F using PERSON_ID → to get employee name
  • Join with PER_ALL_ASSIGNMENTS_F using PERSON_ID → to get job & department
  • Join with PER_EMAIL_ADDRESSES using PRIMARY_EMAIL_ID → email
  • Join with PER_PHONES using PRIMARY_PHONE_ID → phone
  • Join with PER_NATIONAL_IDENTIFIERS using PRIMARY_NID_ID → national ID

Duplicate Handling (Very Important)

WHERE SYSDATE BETWEEN EFFECTIVE_START_DATE AND EFFECTIVE_END_DATE

Since this is a date-effective table, always apply this condition to avoid duplicate historical records.

Example Query

SELECT 
    papf.person_id,
    papf.person_number,
    papf.creation_date
FROM per_all_people_f papf
WHERE SYSDATE BETWEEN papf.effective_start_date 
                  AND papf.effective_end_date;

PER_PERSONS (Person Core Details)

PER_PERSONS stores basic personal and demographic information of a person. Unlike PER_ALL_PEOPLE_F, this table is NOT date-effective and holds static attributes such as date of birth, blood group, and place of birth.

Important Columns

ColumnDescription
PERSON_IDSystem-generated primary key (links to all HCM tables)
BUSINESS_GROUP_IDEnterprise identifier (multi-tenancy partition key)
START_DATEDate when the person record was first created
CORRESPONDENCE_LANGUAGEPreferred communication language
BLOOD_TYPEBlood group of the person
DATE_OF_BIRTHEmployee date of birth
DATE_OF_DEATHDate of death (if applicable)
COUNTRY_OF_BIRTHCountry where the person was born
REGION_OF_BIRTHRegion/state of birth
TOWN_OF_BIRTHCity/town of birth
OBJECT_VERSION_NUMBERUsed for optimistic locking
CREATED_BYUser who created the record
CREATION_DATERecord creation date
LAST_UPDATED_BYLast updated by user
LAST_UPDATE_DATELast update timestamp
LAST_UPDATE_LOGINSession login reference
CATEGORY_CODEExtensible flexfield category code

Important Notes

  • PARTY_ID is obsolete and not used in current implementations
  • This table is NOT date-effective (no effective dates)
  • Use PER_ALL_PEOPLE_F for date-effective reporting

Joins

  • Join with PER_ALL_PEOPLE_F using PERSON_ID → core employee info
  • Join with PER_PERSON_NAMES_F → to fetch names
  • Join with PER_CITIZENSHIPS → nationality
  • Join with PER_NATIONAL_IDENTIFIERS → ID details

Example Query

SELECT 
    per.person_id,
    per.date_of_birth,
    per.country_of_birth
FROM per_persons per
WHERE per.date_of_birth IS NOT NULL;

PER_PERSON_NAMES_F (Employee Name Details)

PER_PERSON_NAMES_F is a date-effective table that stores employee names in different formats. It supports multiple name types such as Global and Local names and maintains history using effective start and end dates.

Important Columns

ColumnDescription
PERSON_NAME_IDUnique identifier for each name record
PERSON_IDLinks to employee in PER_ALL_PEOPLE_F
EFFECTIVE_START_DATEStart date of name record
EFFECTIVE_END_DATEEnd date of name record
BUSINESS_GROUP_IDEnterprise identifier
LEGISLATION_CODECountry context for name format
NAME_TYPEIndicates Global or Local name
FIRST_NAMEEmployee first name
LAST_NAMEEmployee last name
MIDDLE_NAMESMiddle names
TITLEPrefix like Mr, Ms, Dr
PRE_NAME_ADJUNCTPrefix attached to last name
SUFFIXSuffix like Jr, Sr
KNOWN_ASPreferred name
PREVIOUS_LAST_NAMEOld last name (if changed)
HONORSQualifications included in name
MILITARY_RANKMilitary designation
DISPLAY_NAMEFormatted name used in UI (most used)
FULL_NAMEFormal full name
LIST_NAMEName used in sorted lists
ORDER_NAMEName used for sorting (mandatory)
OBJECT_VERSION_NUMBERUsed for optimistic locking
CREATED_BYUser who created record
CREATION_DATECreation timestamp
LAST_UPDATED_BYLast updated user
LAST_UPDATE_DATELast update timestamp
LAST_UPDATE_LOGINSession login reference
CHAR_SET_CONTEXTCharacter set context

Important Notes

  • This is a date-effective table
  • Always filter using EFFECTIVE_START_DATE and END_DATE
  • Multiple records may exist for same PERSON_ID
  • Use DISPLAY_NAME for reporting (recommended)

Joins

  • Join with PER_ALL_PEOPLE_F using PERSON_ID → employee data
  • Join with PER_ALL_ASSIGNMENTS_F → job and department
  • Join with PER_PERSONS → personal details (DOB, etc.)

Duplicate Handling

WHERE SYSDATE BETWEEN EFFECTIVE_START_DATE AND EFFECTIVE_END_DATE

This ensures only the current active name record is returned.

Example Query

SELECT 
    papf.person_number,
    ppnf.display_name,
    ppnf.full_name
FROM per_all_people_f papf
JOIN per_person_names_f ppnf 
    ON papf.person_id = ppnf.person_id
WHERE SYSDATE BETWEEN ppnf.effective_start_date 
                  AND ppnf.effective_end_date;

PER_ALL_ASSIGNMENTS_F (Employee Assignment Table)

PER_ALL_ASSIGNMENTS_F is one of the most important tables in Oracle HCM. It stores assignment-level details such as job, department, position, salary structure, and employment status. Each employee can have multiple assignments, and this table is date-effective, meaning it keeps historical records of assignment changes.

Core Identifiers

ColumnDescription
ASSIGNMENT_IDUnique identifier for assignment
PERSON_IDEmployee reference
ASSIGNMENT_NUMBERAssignment number used in UI
ASSIGNMENT_NAMEName of assignment
ASSIGNMENT_SEQUENCESequence of assignment changes
PARENT_ASSIGNMENT_IDParent assignment (hierarchy)

Status & Type

ColumnDescription
ASSIGNMENT_STATUS_TYPEStatus (Active, Suspended, etc.)
ASSIGNMENT_STATUS_TYPE_IDStatus ID reference
ASSIGNMENT_TYPEEmployee, Contractor, etc.
SYSTEM_PERSON_TYPESystem-level person classification
PRIMARY_ASSIGNMENT_FLAGIndicates main assignment
PRIMARY_WORK_TERMS_FLAGMain work terms
PRIMARY_WORK_RELATION_FLAGPrimary work relationship
PRIMARY_FLAGGeneric primary flag
MANAGER_FLAGIndicates if employee is a manager

Dates & Effective Logic

ColumnDescription
EFFECTIVE_START_DATEStart date of assignment
EFFECTIVE_END_DATEEnd date of assignment
EFFECTIVE_SEQUENCESequence for changes on same date
EFFECTIVE_LATEST_CHANGELatest record indicator
PROJECTED_START_DATEPlanned start
PROJECTED_ASSIGNMENT_ENDPlanned end
DATE_PROBATION_ENDProbation end date
FREEZE_START_DATEFreeze period start
FREEZE_UNTIL_DATEFreeze end date

Job, Department & Organization

ColumnDescription
JOB_IDLinks to PER_JOBS
POSITION_IDLinks to HR_ALL_POSITIONS
ORGANIZATION_IDDepartment
BUSINESS_UNIT_IDBusiness unit
LEGAL_ENTITY_IDLegal entity
ESTABLISHMENT_IDEstablishment reference
LOCATION_IDWork location

Grade & Salary Info

ColumnDescription
GRADE_IDEmployee grade
GRADE_LADDER_PGM_IDGrade ladder
CAGR_ID_FLEX_NUMGrade flexfield
CAGR_GRADE_DEF_IDGrade definition
HOURLY_SALARIED_CODEHourly or salaried
NORMAL_HOURSWorking hours
FREQUENCYSalary frequency

Employment Details

ColumnDescription
EMPLOYEE_CATEGORYEmployee classification
EMPLOYMENT_CATEGORYFull-time / Part-time
WORK_TERMS_ASSIGNMENT_IDWork terms link
PERIOD_OF_SERVICE_IDService period
NOTICE_PERIODNotice duration
NOTICE_PERIOD_UOMUnit (Days/Months)
PROBATION_PERIODProbation duration
PROBATION_UNITUnit of probation

Recruitment & Hiring

ColumnDescription
RECRUITER_IDRecruiter reference
RECRUITMENT_ACTIVITY_IDRecruitment activity
APPLICANT_RANKCandidate ranking
JOB_POST_SOURCE_NAMESource of job posting
PERSON_REFERRED_BY_IDReferral employee

Vendor / Contract Info

ColumnDescription
VENDOR_IDSupplier
VENDOR_SITE_IDSupplier site
VENDOR_EMPLOYEE_NUMBERVendor employee
VENDOR_ASSIGNMENT_NUMBERVendor assignment
CONTRACT_IDContract reference

Additional Important Fields

ColumnDescription
ACTION_CODEHR action (Hire, Transfer, etc.)
ACTION_OCCURRENCE_IDAction instance
REASON_CODEReason for change
PROJECT_TITLEProject name
WORK_AT_HOMERemote work flag
RETIREMENT_DATERetirement date
RETIREMENT_AGERetirement age

Audit Columns

ColumnDescription
CREATED_BYCreated by user
CREATION_DATECreated date
LAST_UPDATED_BYUpdated by
LAST_UPDATE_DATEUpdate date
LAST_UPDATE_LOGINSession
OBJECT_VERSION_NUMBERVersion control

Joins

  • PER_ALL_PEOPLE_F → PERSON_ID
  • PER_PERSON_NAMES_F → PERSON_ID
  • PER_JOBS → JOB_ID
  • PER_DEPARTMENTS → ORGANIZATION_ID
  • HR_ALL_POSITIONS → POSITION_ID

Duplicate Handling

WHERE SYSDATE BETWEEN EFFECTIVE_START_DATE 
                  AND EFFECTIVE_END_DATE

Example Query

SELECT 
    papf.person_number,
    ppnf.display_name,
    paaf.assignment_number,
    pj.name job_name
FROM per_all_people_f papf
JOIN per_person_names_f ppnf 
  ON papf.person_id = ppnf.person_id
JOIN per_all_assignments_f paaf 
  ON papf.person_id = paaf.person_id
LEFT JOIN per_jobs pj 
  ON paaf.job_id = pj.job_id
WHERE SYSDATE BETWEEN paaf.effective_start_date 
                  AND paaf.effective_end_date;

PER_JOBS (Job Definition Table)

PER_JOBS stores job definitions used across the organization in Oracle HCM. Each job represents a role (e.g., Software Engineer, HR Manager) and is assigned to employees through PER_ALL_ASSIGNMENTS_F. This table is date-effective, meaning job details can change over time and historical records are maintained.

Core Identifiers

ColumnDescription
JOB_IDUnique identifier for job
JOB_CODEBusiness-friendly job code
NAMEJob title (used in UI and reports)

Date Effectivity

ColumnDescription
EFFECTIVE_START_DATEStart date of job record
EFFECTIVE_END_DATEEnd date of job record

Organization & Structure

ColumnDescription
BUSINESS_GROUP_IDEnterprise identifier
SET_IDReference data set (used for sharing jobs across BUs)
JOB_FAMILY_IDGroups similar jobs together

Job Classification & Flags

ColumnDescription
ACTIVE_STATUSIndicates if job is active
BENCHMARK_JOB_FLAGMarks job as benchmark job
BENCHMARK_JOB_IDReference benchmark job
REGULAR_TEMPORARYIndicates permanent or temporary job
FULL_PART_TIMEFull-time or part-time job
MANAGER_LEVELDefines management level
APPROVAL_AUTHORITYApproval authority level
MED_CHECKUP_REQIndicates if medical checkup required
JOB_FUNCTION_CODEJob function classification

Action Tracking

ColumnDescription
ACTION_OCCURRENCE_IDTracks job-related actions (create/update)

Joins

  • PER_ALL_ASSIGNMENTS_F → JOB_ID (to get employee job)
  • PER_ALL_PEOPLE_F → via assignments
  • PER_JOB_FAMILIES → JOB_FAMILY_ID (if used)

Duplicate Handling

WHERE SYSDATE BETWEEN EFFECTIVE_START_DATE 
                  AND EFFECTIVE_END_DATE

Since this is a date-effective table, always filter active records.

Example Query

SELECT 
    papf.person_number,
    ppnf.display_name,
    pj.name job_name
FROM per_all_people_f papf
JOIN per_person_names_f ppnf 
  ON papf.person_id = ppnf.person_id
JOIN per_all_assignments_f paaf 
  ON papf.person_id = paaf.person_id
JOIN per_jobs pj 
  ON paaf.job_id = pj.job_id
WHERE SYSDATE BETWEEN pj.effective_start_date 
                  AND pj.effective_end_date;

PER_DEPARTMENTS (Department / Organization Table)

PER_DEPARTMENTS stores department-level information in Oracle HCM. Each department is identified by ORGANIZATION_ID and is used to group employees within the organization structure. This table is date-effective, meaning department details can change over time.

Core Identifiers

ColumnDescription
ORGANIZATION_IDUnique identifier for department
ORGANIZATION_CODEShort code used for department
NAMEDepartment name (used in reports/UI)
TITLEFormal title of department

Date Effectivity

ColumnDescription
EFFECTIVE_START_DATEStart date of department record
EFFECTIVE_END_DATEEnd date of department record

Organization Details

ColumnDescription
BUSINESS_GROUP_IDEnterprise identifier
SET_IDReference data set (used for sharing departments)
LOCATION_IDLocation assigned to department
STATUSIndicates if department is active/inactive
TYPEType of organization (Department, Division, etc.)

Audit Columns

ColumnDescription
CREATED_BYUser who created record
CREATION_DATECreation timestamp
LAST_UPDATED_BYLast updated user
LAST_UPDATE_DATELast update timestamp
LAST_UPDATE_LOGINSession login reference
OBJECT_VERSION_NUMBERVersion control for updates

Joins

  • PER_ALL_ASSIGNMENTS_F → ORGANIZATION_ID (to get employee department)
  • HR_ORGANIZATION_UNITS → ORGANIZATION_ID (for hierarchy)
  • PER_ALL_PEOPLE_F → via assignments

Duplicate Handling

WHERE SYSDATE BETWEEN EFFECTIVE_START_DATE 
                  AND EFFECTIVE_END_DATE

Since this is a date-effective table, always filter active records.

Example Query

SELECT 
    papf.person_number,
    ppnf.display_name,
    pd.name department_name
FROM per_all_people_f papf
JOIN per_person_names_f ppnf 
  ON papf.person_id = ppnf.person_id
JOIN per_all_assignments_f paaf 
  ON papf.person_id = paaf.person_id
LEFT JOIN per_departments pd 
  ON paaf.organization_id = pd.organization_id
WHERE SYSDATE BETWEEN pd.effective_start_date 
                  AND pd.effective_end_date;

Real Usage

PER_DEPARTMENTS is mainly used in reporting to display department names. It is typically joined with PER_ALL_ASSIGNMENTS_F using ORGANIZATION_ID.

PER_ASSIGNMENT_SUPERVISORS_F (Manager Relationship Table)

PER_ASSIGNMENT_SUPERVISORS_F stores the relationship between employees and their managers. It defines reporting hierarchy such as Line Manager, Project Manager, etc. This table is date-effective, meaning manager relationships can change over time.

Core Columns

ColumnDescription
ASSIGNMENT_SUPERVISOR_IDUnique identifier for supervisor record
PERSON_IDEmployee ID
ASSIGNMENT_IDEmployee assignment
MANAGER_IDManager person ID
MANAGER_ASSIGNMENT_IDManager assignment ID
MANAGER_TYPEType of manager (LINE_MANAGER, PROJECT_MANAGER)
PRIMARY_FLAGIndicates primary manager (Y/N)
BUSINESS_GROUP_IDEnterprise identifier

Date Effectivity

ColumnDescription
EFFECTIVE_START_DATEStart date of manager relationship
EFFECTIVE_END_DATEEnd date of manager relationship

Action Tracking

ColumnDescription
ACTION_OCCURRENCE_IDTracks changes in hierarchy

Joins

  • PER_ALL_ASSIGNMENTS_F → ASSIGNMENT_ID
  • PER_ALL_PEOPLE_F → PERSON_ID
  • PER_PERSON_NAMES_F → for employee name
  • PER_ALL_PEOPLE_F (again) → MANAGER_ID for manager name

Duplicate Handling

WHERE SYSDATE BETWEEN EFFECTIVE_START_DATE 
                  AND EFFECTIVE_END_DATE

Example Query

SELECT 
    emp.person_number,
    emp_name.display_name employee_name,
    mgr_name.display_name manager_name
FROM per_assignment_supervisors_f pasf
JOIN per_all_people_f emp 
  ON pasf.person_id = emp.person_id
JOIN per_person_names_f emp_name 
  ON emp.person_id = emp_name.person_id
JOIN per_all_people_f mgr 
  ON pasf.manager_id = mgr.person_id
JOIN per_person_names_f mgr_name 
  ON mgr.person_id = mgr_name.person_id
WHERE pasf.manager_type = 'LINE_MANAGER'
AND SYSDATE BETWEEN pasf.effective_start_date 
                AND pasf.effective_end_date;

PER_ASSIGNMENT_SUPERVISORS_F_ (Audit / History Table)

PER_ASSIGNMENT_SUPERVISORS_F_ is the audit version of the supervisors table. It stores historical changes including updates, inserts, and deletions. This table is mainly used for:

  • Audit tracking
  • Debugging hierarchy changes
  • Tracking historical updates

Core Columns (Same as F Table)

ColumnDescription
ASSIGNMENT_SUPERVISOR_IDSupervisor record ID
PERSON_IDEmployee
ASSIGNMENT_IDAssignment
MANAGER_IDManager
MANAGER_ASSIGNMENT_IDManager assignment
MANAGER_TYPEManager type

Additional Audit Columns (Only in F_)

ColumnDescription
CREATED_BYUser who created record
CREATION_DATECreation timestamp
LAST_UPDATED_BYLast updated user
LAST_UPDATE_DATELast update timestamp
LAST_UPDATE_LOGINSession login reference
AUDIT_ACTION_TYPEType of change (INSERT, UPDATE, DELETE)
AUDIT_CHANGE_BIT_MAP_Tracks changed columns
WORKING_PERCENTAGEManager responsibility percentage
FREEZE_START_DATEFreeze start
FREEZE_UNTIL_DATEFreeze end
ACTION_OCCURRENCE_IDAction reference

Important Notes

  • This table contains multiple records for same row due to updates
  • Do NOT use for normal reporting
  • Use only for audit/debugging

Example Use Case

SELECT *
FROM per_assignment_supervisors_f_
WHERE audit_action_type = 'UPDATE';

PAY_ELEMENT_ENTRIES_F (Payroll Element Entry Table)

PAY_ELEMENT_ENTRIES_F stores element entries assigned to employees. Each row represents a payroll element (e.g., Basic Salary, Allowance, Deduction) assigned to a person. This table is date-effective, meaning element entries can change over time and historical records are maintained.

Core Identifiers

ColumnDescription
ELEMENT_ENTRY_IDUnique identifier for element entry
PERSON_IDEmployee reference
ELEMENT_TYPE_IDElement type (Basic, HRA, Bonus, etc.)
ENTRY_TYPEType of entry (E = Entry, B = Balance Adjustment)

Date Effectivity

ColumnDescription
EFFECTIVE_START_DATEStart date of element entry
EFFECTIVE_END_DATEEnd date of element entry
DATE_EARNEDDate when earning applies (important in payroll runs)

Entry Source & Processing

ColumnDescription
CREATOR_TYPESource of entry (USER, SYSTEM, BATCH)
CREATOR_IDID of creator
BATCH_IDBatch reference for bulk load
BATCH_ACTION_IDBatch action reference
REASONReason for entry (adjustment, correction, etc.)
TARGET_ENTRY_IDReference entry (used in updates/corrections)
SUBPRIORITYExecution priority within payroll processing
MULTIPLE_ENTRY_COUNTNumber of entries created together
BALANCE_ADJ_COST_FLAGIndicates cost adjustment flag

Control & Technical Columns

ColumnDescription
OBJECT_VERSION_NUMBERUsed for optimistic locking
ENTERPRISE_IDEnterprise reference

Audit Columns

ColumnDescription
CREATED_BYUser who created entry
CREATION_DATECreation timestamp
LAST_UPDATED_BYLast updated user
LAST_UPDATE_DATELast update timestamp
LAST_UPDATE_LOGINSession login reference

Important Notes

  • This table stores input data, not calculated payroll results
  • Actual calculated values come from PAY_RUN_RESULTS
  • Each entry links to element type and input values
  • Multiple entries can exist per employee

Joins

  • PER_ALL_PEOPLE_F → PERSON_ID
  • PER_ALL_ASSIGNMENTS_F → via PERSON_ID
  • PAY_ELEMENT_TYPES_F → ELEMENT_TYPE_ID
  • PAY_INPUT_VALUES_F → ELEMENT_TYPE_ID
  • PAY_RUN_RESULTS → ELEMENT_ENTRY_ID

Duplicate Handling

WHERE SYSDATE BETWEEN EFFECTIVE_START_DATE 
                  AND EFFECTIVE_END_DATE

Example Query

SELECT 
    papf.person_number,
    ppnf.display_name,
    pet.element_name,
    penf.element_entry_id
FROM pay_element_entries_f penf
JOIN per_all_people_f papf 
  ON penf.person_id = papf.person_id
JOIN per_person_names_f ppnf 
  ON papf.person_id = ppnf.person_id
JOIN pay_element_types_tl pet 
  ON penf.element_type_id = pet.element_type_id
WHERE SYSDATE BETWEEN penf.effective_start_date 
                  AND penf.effective_end_date;

PAY_RUN_BALANCES (Payroll Balance Table)

PAY_RUN_BALANCES stores calculated payroll balance values such as Gross Pay, Net Pay, Tax, and other accumulated balances. This table represents aggregated results from payroll processing and is used for reporting, reconciliation, and statutory calculations.

Core Identifiers

ColumnDescription
RUN_BALANCE_IDSystem-generated primary key
DEFINED_BALANCE_IDLinks to PAY_DEFINED_BALANCES (defines balance type)
PAYROLL_REL_ACTION_IDPayroll relationship action reference
PAYROLL_ACTION_IDPayroll run identifier

Balance Values

ColumnDescription
BALANCE_VALUECalculated balance amount (Net Pay, Tax, etc.)
BALANCE_DATEContextual date of balance
EFFECTIVE_DATEDate of payroll action

Payroll Context

ColumnDescription
PAYROLL_RELATIONSHIP_IDPayroll relationship reference
PAYROLL_TERM_IDPayroll term
PAYROLL_ASSIGNMENT_IDPayroll assignment
PAYROLL_IDPayroll definition
ACTION_SEQUENCESequence of payroll processing

Legal & Tax Context

ColumnDescription
TAX_UNIT_IDTax reporting unit (Legal entity context)
LEGAL_EMPLOYER_IDLegal employer
DEDUCTION_TYPE_IDType of deduction

Element & Processing Details

ColumnDescription
ELEMENT_ENTRY_IDElement entry reference
CALC_BREAKDOWN_IDCalculation breakdown reference
PROCESSING_SPANPayroll processing span
TIME_DEFINITION_IDTime definition reference

Additional Context Fields

ColumnDescription
AREA1Additional context (custom usage)
AREA2Additional context
AREA3Additional context
AREA4Additional context
CONTEXT_VALUE1Context-specific value
CONTEXT_VALUE2Context-specific value
CONTEXT_VALUE3Context-specific value
CONTEXT_VALUE4Context-specific value
CONTEXT_VALUE5Context-specific value
CONTEXT_VALUE6Context-specific value

Other References

ColumnDescription
THIRD_PARTY_PAYEE_IDThird-party payment reference
ENTERPRISE_IDEnterprise identifier
ORA_PART_KEYPartition key used internally for performance

Important Notes

  • This table stores aggregated balances, not individual element results
  • Balances are defined in PAY_DEFINED_BALANCES
  • Used heavily in payroll reporting (Net Pay, Gross Pay, Tax)
  • Data is generated during payroll run

Joins

  • PAY_DEFINED_BALANCES → DEFINED_BALANCE_ID
  • PAY_PAYROLL_REL_ACTIONS → PAYROLL_REL_ACTION_ID
  • PER_ALL_PEOPLE_F → via payroll relationship
  • PAY_RUN_RESULTS → ELEMENT_ENTRY_ID

Example Query

SELECT 
    papf.person_number,
    prb.balance_value,
    prb.effective_date
FROM pay_run_balances prb
JOIN pay_payroll_rel_actions pra 
  ON prb.payroll_rel_action_id = pra.payroll_rel_action_id
JOIN per_all_people_f papf 
  ON pra.payroll_relationship_id = papf.person_id
WHERE prb.balance_value IS NOT NULL;

Note: Difference between key payroll tables

PAY_ELEMENT_ENTRIES_F → Input (what you assign)
PAY_RUN_RESULTS → Calculation result (per element)
PAY_RUN_BALANCES → Final aggregated balances (Net, Gross, Tax)

PAY_ELEMENT_TYPES_TL (Element Translation Table)

PAY_ELEMENT_TYPES_TL stores the translated names and descriptions of payroll elements. It is used to display element names in different languages (US, UK, Arabic, etc.). This table is NOT date-effective but supports multiple rows per element based on language.

Core Columns

ColumnDescription
ELEMENT_TYPE_IDLinks to PAY_ELEMENT_TYPES_F
ELEMENT_NAMEUser-friendly element name (shown in UI)
REPORTING_NAMEName used in reports
DESCRIPTIONDescription of the element
LANGUAGELanguage code (e.g., US, AR)
SOURCE_LANGOriginal language of record

System & Audit Columns

ColumnDescription
ENTERPRISE_IDEnterprise reference
OBJECT_VERSION_NUMBERUsed for optimistic locking
CREATED_BYUser who created record
CREATION_DATECreation timestamp
LAST_UPDATED_BYLast updated user
LAST_UPDATE_DATELast update timestamp
LAST_UPDATE_LOGINSession login reference
SEED_DATA_SOURCESource of seed data
ORA_SEED_SET1Oracle internal use
ORA_SEED_SET2Oracle internal use

Important Notes

  • Each ELEMENT_TYPE_ID can have multiple rows (one per language)
  • Always filter using LANGUAGE = USERENV('LANG')
  • This table provides display names, not configuration logic

Joins

  • PAY_ELEMENT_TYPES_F → ELEMENT_TYPE_ID
  • PAY_ELEMENT_ENTRIES_F → ELEMENT_TYPE_ID
  • PAY_RUN_RESULTS → ELEMENT_TYPE_ID

Best Practice (Important)

WHERE pet_tl.language = USERENV('LANG')

This ensures the correct language is displayed based on user session.

Example Query

SELECT 
    papf.person_number,
    pet_tl.element_name,
    rrv.result_value
FROM pay_run_results prr
JOIN pay_run_result_values rrv 
  ON prr.run_result_id = rrv.run_result_id
JOIN pay_element_types_tl pet_tl 
  ON prr.element_type_id = pet_tl.element_type_id
JOIN per_all_people_f papf 
  ON papf.person_id = prr.element_entry_id
WHERE pet_tl.language = USERENV('LANG');

PAY_ENTRY_USAGES (Element Entry Usage Table)

PAY_ENTRY_USAGES defines how and where an element entry is applied in payroll. It links an element entry to payroll relationship, term, or assignment level. This table helps Oracle determine the scope of element processing.

Core Identifiers

ColumnDescription
ENTRY_USAGE_IDPrimary key for entry usage
ELEMENT_ENTRY_IDLinks to PAY_ELEMENT_ENTRIES_F
USAGE_LEVELDefines level (RELATIONSHIP / TERM / ASSIGNMENT)

Date Range

ColumnDescription
DATE_FROMStart date of usage
DATE_TOEnd date of usage

Payroll Context

ColumnDescription
PAYROLL_RELATIONSHIP_IDPayroll relationship level
PAYROLL_TERM_IDPayroll term level
PAYROLL_ASSIGNMENT_IDAssignment level
ASSIGNED_PAYROLL_IDPayroll definition assigned

Technical Columns

ColumnDescription
OBJECT_VERSION_NUMBERUsed for optimistic locking
ENTERPRISE_IDEnterprise reference

Audit Columns

ColumnDescription
CREATED_BYUser who created record
CREATION_DATECreation timestamp
LAST_UPDATED_BYLast updated user
LAST_UPDATE_DATELast update timestamp
LAST_UPDATE_LOGINSession login reference

Important Notes

  • This table defines where an element is applied
  • USAGE_LEVEL determines processing scope
  • Not always required in basic reports, but important in advanced payroll logic

Usage Level Meaning

ValueMeaning
RELATIONSHIPApplies at payroll relationship level
TERMApplies at payroll term level
ASSIGNMENTApplies at assignment level

Joins

  • PAY_ELEMENT_ENTRIES_F → ELEMENT_ENTRY_ID
  • PAY_PAYROLL_ASSIGNMENTS → PAYROLL_ASSIGNMENT_ID
  • PAY_PAYROLL_REL_ACTIONS → PAYROLL_RELATIONSHIP_ID

Example Query

SELECT 
    penf.element_entry_id,
    peu.usage_level,
    peu.payroll_assignment_id
FROM pay_element_entries_f penf
JOIN pay_entry_usages peu 
  ON penf.element_entry_id = peu.element_entry_id
WHERE peu.usage_level = 'ASSIGNMENT';

PAY_INPUT_VALUES_F (Element Input Values Table)

PAY_INPUT_VALUES_F defines the input values required for payroll elements. Each element can have multiple input values such as Amount, Hours, Rate, etc. This table controls:

  • What values users can enter
  • Validation rules
  • Default values
  • Formula-driven calculations
This table is date-effective.

Core Identifiers

ColumnDescription
INPUT_VALUE_IDPrimary key
ELEMENT_TYPE_IDLinks to PAY_ELEMENT_TYPES_F
BASE_NAMEInternal name (e.g., Amount, Hours)
DISPLAY_SEQUENCEOrder of display in UI

Date Effectivity

ColumnDescription
EFFECTIVE_START_DATEStart date
EFFECTIVE_END_DATEEnd date

User Entry & Behavior

ColumnDescription
USER_ENTERABLE_FLAGIndicates if user can enter value
MANDATORY_FLAGIndicates if value is required
USER_DISPLAY_FLAGVisible in UI
GENERATE_DB_ITEMS_FLAGGenerates database items for formulas
HOT_DEFAULT_FLAGUses dynamic default logic

Value & Units

ColumnDescription
UOMUnit of measure (Money, Hours, etc.)
DEFAULT_VALUEDefault value for input
MIN_VALUEMinimum allowed value
MAX_VALUEMaximum allowed value

Validation & Lookup

ColumnDescription
LOOKUP_TYPELookup for allowed values
VALUE_SET_CODEValue set for validation
VO_NAMEView object for validation
WARNING_OR_ERRORValidation behavior (warning/error)
VALIDATION_OVERRIDE_MESSAGEOverride validation message

Formula Configuration

ColumnDescription
FORMULA_IDFormula to derive value
RATE_FORMULA_IDRate calculation formula
CONTEXT_IDFast formula context

Advanced Processing

ColumnDescription
RETRO_STATIC_FLAGControls retro processing behavior
FORCE_RRV_MODEForces run result value creation
RESERVED_INPUT_VALUEReserved for system usage

Audit Columns

ColumnDescription
CREATED_BYCreated by user
CREATION_DATECreation timestamp
LAST_UPDATED_BYUpdated by user
LAST_UPDATE_DATEUpdate timestamp
LAST_UPDATE_LOGINSession login
OBJECT_VERSION_NUMBERVersion control
ENTERPRISE_IDEnterprise reference

System Columns

ColumnDescription
SGUIDSeed unique identifier
SEED_DATA_SOURCESeed data source
ORA_SEED_SET1Oracle internal use
ORA_SEED_SET2Oracle internal use

Important Notes

  • This table defines what values an element can take
  • Each element can have multiple input values
  • Used heavily in Fast Formula calculations
  • Controls validation, defaults, and UI behavior

Joins

  • PAY_ELEMENT_TYPES_F → ELEMENT_TYPE_ID
  • PAY_ELEMENT_ENTRIES_F → ELEMENT_TYPE_ID
  • PAY_RUN_RESULT_VALUES → INPUT_VALUE_ID

Duplicate Handling

WHERE SYSDATE BETWEEN EFFECTIVE_START_DATE 
                  AND EFFECTIVE_END_DATE

Example Query

SELECT 
    pet.base_element_name,
    piv.base_name,
    piv.uom,
    piv.default_value
FROM pay_input_values_f piv
JOIN pay_element_types_f pet 
  ON piv.element_type_id = pet.element_type_id
WHERE SYSDATE BETWEEN piv.effective_start_date 
                  AND piv.effective_end_date;

PAY_ELEMENT_TYPES_F (Payroll Element Definition Table)

PAY_ELEMENT_TYPES_F defines payroll elements such as Basic Salary, Allowances, Bonuses, and Deductions. It controls:

  • Element behavior
  • Processing rules
  • Formulas and validations
  • Payroll execution order
This table is date-effective and is one of the core configuration tables in Oracle Payroll.

Core Identifiers

ColumnDescription
ELEMENT_TYPE_IDPrimary key
BASE_ELEMENT_NAMEInternal element name
LEGISLATIVE_DATA_GROUP_IDPayroll legislative group
LEGISLATION_CODECountry code
ENTERPRISE_IDEnterprise reference

Date Effectivity

ColumnDescription
EFFECTIVE_START_DATEStart date
EFFECTIVE_END_DATEEnd date

Element Behavior & Flags

ColumnDescription
PROCESSING_TYPERecurring or Non-recurring
PROCESSING_PRIORITYExecution order in payroll
PROCESS_IN_RUN_FLAGProcessed in payroll run
STANDARD_LINK_FLAGStandard eligibility link
ADDITIONAL_ENTRY_ALLOWED_FLAGAllows additional entries
MULTIPLE_ENTRIES_ALLOWED_FLAGMultiple entries allowed
ADJUSTMENT_ONLY_FLAGUsed only for adjustments
CLOSED_FOR_ENTRY_FLAGPrevents new entries
INDIRECT_ONLY_FLAGSystem-generated only

Processing Scope

ColumnDescription
USE_AT_REL_LEVELUsed at relationship level
USE_AT_TERM_LEVELUsed at term level
USE_AT_ASG_LEVELUsed at assignment level

Classification

ColumnDescription
CLASSIFICATION_IDEarnings / Deduction classification
SECONDARY_CLASSIFICATION_IDSecondary classification
CATEGORYElement category
DEDUCTION_TYPE_IDDeduction type
DEDUCTION_OR_EXEMPTIONDeduction or exemption flag

Currency & Time

ColumnDescription
INPUT_CURRENCY_CODEInput currency
OUTPUT_CURRENCY_CODEOutput currency
TIME_DEFINITION_IDTime definition
TIME_DEFINITION_TYPETime type
STARTING_TIME_DEF_IDStart time definition
ENDING_TIME_DEF_IDEnd time definition

Formula Configuration

ColumnDescription
FORMULA_IDMain Fast Formula
CALCULATION_FORMULA_IDCalculation formula
DEFAULTING_FORMULA_IDDefault value formula
VALIDATION_FORMULA_IDValidation formula
PRORATION_FORMULA_IDProration logic
ITERATIVE_FORMULA_IDIterative formula

Advanced Processing

ColumnDescription
GROSSUP_FLAGGross-up calculation
ITERATIVE_FLAGIterative processing
ITERATIVE_PRIORITYPriority for iterative logic
ONCE_EACH_PERIOD_FLAGRun once per period
PROCESS_MODEProcessing mode
PRORATION_GROUP_IDProration group
RECALC_EVENT_GROUP_IDRecalculation triggers
EXPEDITED_MODEExpedited payroll processing
PARENT_BASE_ELEMENT_NAMEParent element

Technical Columns

ColumnDescription
MODULE_IDSeed data module
OBJECT_VERSION_NUMBEROptimistic locking

Audit Columns

ColumnDescription
CREATED_BYCreated by
CREATION_DATECreation date
LAST_UPDATED_BYUpdated by
LAST_UPDATE_DATEUpdate date
LAST_UPDATE_LOGINSession

Flexfields (Grouped)

This table includes Descriptive Flexfields (DFF & DDF):

  • ATTRIBUTE1 – ATTRIBUTE30
  • ATTRIBUTE_NUMBER1 – ATTRIBUTE_NUMBER20
  • ATTRIBUTE_DATE1 – ATTRIBUTE_DATE15
  • ELEMENT_INFORMATION1 – ELEMENT_INFORMATION30
These are used for client-specific customizations and should not be used in generic reporting.

Joins

  • PAY_ELEMENT_ENTRIES_F → ELEMENT_TYPE_ID
  • PAY_INPUT_VALUES_F → ELEMENT_TYPE_ID
  • PAY_RUN_RESULTS → ELEMENT_TYPE_ID
  • PAY_ELEMENT_TYPES_TL → ELEMENT_TYPE_ID (display name)

Duplicate Handling

WHERE SYSDATE BETWEEN EFFECTIVE_START_DATE 
                  AND EFFECTIVE_END_DATE

Example Query

SELECT 
    pet.base_element_name,
    pet.processing_type,
    pet.processing_priority
FROM pay_element_types_f pet
WHERE SYSDATE BETWEEN pet.effective_start_date 
                  AND pet.effective_end_date;

PAY_PAYROLL_ACTIONS (Payroll Process Execution Table)

PAY_PAYROLL_ACTIONS stores details of payroll processes such as payroll runs, quick pay, retro runs, and costing. Each row represents a payroll process execution.

Core Identifiers

ColumnDescription
PAYROLL_ACTION_IDPrimary key for payroll run
PAY_REQUEST_IDRequest ID (ESS Job)
PAYROLL_IDPayroll definition

Action Details

ColumnDescription
ACTION_TYPEType of action (RUN, QUICKPAY, RETRO)
ACTION_STATUSStatus (C = Completed, U = Running, E = Error)
ACTION_SEQUENCEExecution sequence
DISPLAY_RUN_NUMBERRun number shown in UI
CURRENT_CHUNK_NUMBERProcessing chunk number
PAYROLL_ACTION_STATUSOverall payroll status

Dates

ColumnDescription
EFFECTIVE_DATEPayroll effective date
START_DATEProcess start date
END_DATEProcess end date
DATE_EARNEDDate earnings apply

Legislation Context

ColumnDescription
LEGISLATIVE_DATA_GROUP_IDLegislative group
LEGISLATION_CODECountry code
ACTION_POPULATION_STATUSPopulation processing status

Processing Info

ColumnDescription
CONSOLIDATION_SET_IDConsolidation set
ELEMENT_SET_IDElement set processed
PARAMETER_GROUP_IDParameter group

Audit Columns

ColumnDescription
CREATED_BYCreated by user
CREATION_DATECreation date
LAST_UPDATED_BYUpdated by user
LAST_UPDATE_DATELast update date
OBJECT_VERSION_NUMBERVersion control
ENTERPRISE_IDEnterprise reference

Important Notes

  • Each row represents one payroll process run
  • Used to track payroll execution status
  • Links to PAY_RUN_RESULTS and PAY_RUN_BALANCES

Joins

  • PAY_PAYROLL_REL_ACTIONS → PAYROLL_ACTION_ID
  • PAY_RUN_RESULTS → PAYROLL_ACTION_ID
  • PER_ALL_PEOPLE_F → via payroll relationship

Example Query

SELECT 
    ppa.payroll_action_id,
    ppa.action_type,
    ppa.action_status,
    ppa.effective_date
FROM pay_payroll_actions ppa
WHERE ppa.action_status = 'C';

PAY_ALL_PAYROLL_ACTIONS_V (Payroll Actions View)

PAY_ALL_PAYROLL_ACTIONS_V is a view built on top of PAY_PAYROLL_ACTIONS that provides additional readable and joined data. It simplifies reporting by combining multiple payroll action details.

Key Columns

ColumnDescription
PAYROLL_ACTION_IDPayroll run ID
PAYROLL_IDPayroll definition
ACTION_TYPEType of payroll process
ACTION_STATUSStatus of process
EFFECTIVE_DATEPayroll effective date
DISPLAY_RUN_NUMBERRun number
LEGISLATION_CODECountry

Why This View is Used

  • Provides cleaner reporting structure
  • Reduces need for multiple joins
  • Used in OTBI and reporting queries

Important Notes

  • This is a view, not a table
  • Recommended for reporting instead of base table
  • Performance optimized

* Payroll Action Flow (PAY_ALL_PAYROLL_ACTIONS_V)

Payroll Run
    ↓
PAY_PAYROLL_ACTIONS
    ↓
PAY_PAYROLL_REL_ACTIONS
    ↓
PAY_PAYROLL_ASSIGNMENTS
    ↓
PAY_ELEMENT_ENTRIES_F
    ↓
PAY_RUN_RESULTS
    ↓
PAY_RUN_RESULT_VALUES
    ↓
PAY_RUN_BALANCES

Example Query

SELECT 
    payroll_action_id,
    action_type,
    action_status,
    effective_date
FROM pay_all_payroll_actions_v
WHERE action_status = 'C';

PAY_PAYROLL_ASSIGNMENTS (Payroll Assignment Mapping Table)

PAY_PAYROLL_ASSIGNMENTS links HR assignments with payroll structures. It acts as a bridge between employee assignment and payroll processing entities. This table is essential for understanding how an employee is mapped into payroll.

Core Identifiers

ColumnDescription
PAYROLL_ASSIGNMENT_IDPayroll assignment identifier
HR_ASSIGNMENT_IDLinks to PER_ALL_ASSIGNMENTS_F
PAYROLL_RELATIONSHIP_IDPayroll relationship identifier
PAYROLL_TERM_IDPayroll term identifier
HR_TERM_IDHR term reference

Employee Context

ColumnDescription
PERSON_IDEmployee identifier
LEGAL_EMPLOYER_IDLegal employer

Date Range

ColumnDescription
START_DATEStart date of payroll assignment
END_DATEEnd date of payroll assignment

Important Notes

  • This table connects HR assignment with payroll structure
  • Used internally by payroll engine
  • Required for linking payroll results to employees

Joins

  • PER_ALL_ASSIGNMENTS_F → HR_ASSIGNMENT_ID
  • PER_ALL_PEOPLE_F → PERSON_ID
  • PAY_PAYROLL_REL_ACTIONS → PAYROLL_RELATIONSHIP_ID
  • PAY_RUN_RESULTS → PAYROLL_ASSIGNMENT_ID

Example Query

SELECT 
    ppa.person_id,
    ppa.payroll_assignment_id,
    ppa.hr_assignment_id,
    ppa.payroll_relationship_id
FROM pay_payroll_assignments ppa;

PAY_RUN_RESULTS (Payroll Calculation Results Table)

PAY_RUN_RESULTS stores calculated results of payroll elements for each payroll run. Each row represents the processed result of an element entry. This table is a core payroll processing table used to store calculation outputs before final balances are derived.

Core Identifiers

ColumnDescription
RUN_RESULT_IDPrimary key
ELEMENT_TYPE_IDElement type (Basic, Tax, etc.)
ELEMENT_ENTRY_IDSource element entry
SOURCE_IDReference to original entry
SOURCE_TYPEE = Entry, I = Indirect result
ENTRY_TYPEEntry type from element entry
STATUSProcessing status
SEQUENCE_NUMBERExecution order

Payroll Context

ColumnDescription
PAYROLL_REL_ACTION_IDPayroll relationship action
PAYROLL_ASSIGNMENT_IDPayroll assignment
PAYROLL_TERM_IDPayroll term
LEGAL_EMPLOYER_IDLegal employer
TAX_UNIT_IDTax reporting unit

Processing Details

ColumnDescription
START_DATEStart date (for proration)
END_DATEEnd date (for proration)
PROCESSING_SPANProcessing duration
CALC_BREAKDOWN_IDCalculation breakdown reference
TIME_DEFINITION_IDTime definition

Additional Context

ColumnDescription
DEDUCTION_TYPE_IDDeduction type
THIRD_PARTY_PAYEE_IDThird-party payment
DIR_CARD_COMP_IDCard component reference
SOURCE_RESULT_IDReference to original result
AREA_CODE1Additional context
AREA_CODE2Additional context
AREA_CODE3Additional context
AREA_CODE4Additional context

Technical Columns

ColumnDescription
ENTERPRISE_IDEnterprise reference
ORA_PART_KEYPartition key (performance)

Important Notes

  • This table stores element-level calculated results
  • One row per element per payroll run
  • Does NOT store final values (see PAY_RUN_RESULT_VALUES)
  • Used heavily in payroll calculations and debugging

Joins

  • PAY_RUN_RESULT_VALUES → RUN_RESULT_ID
  • PAY_ELEMENT_TYPES_F → ELEMENT_TYPE_ID
  • PAY_ELEMENT_ENTRIES_F → ELEMENT_ENTRY_ID
  • PAY_PAYROLL_REL_ACTIONS → PAYROLL_REL_ACTION_ID

Example Query

SELECT 
    prr.run_result_id,
    prr.element_type_id,
    prr.payroll_assignment_id,
    prr.status
FROM pay_run_results prr
WHERE prr.status = 'C';

PAY_PAYROLL_REL_ACTIONS (Payroll Relationship Actions Table)

PAY_PAYROLL_REL_ACTIONS stores payroll processing details at the employee (payroll relationship) level. Each row represents the execution of a payroll run for a specific employee.

Core Identifiers

ColumnDescription
PAYROLL_REL_ACTION_IDPrimary key
PAYROLL_ACTION_IDLinks to PAY_PAYROLL_ACTIONS
PAYROLL_RELATIONSHIP_IDEmployee payroll relationship

Processing Status

ColumnDescription
ACTION_STATUSStatus (C = Complete, U = Running, E = Error)
ACTION_SEQUENCEExecution order
CHUNK_NUMBERBatch/chunk processing identifier

Processing Details

ColumnDescription
START_DATEProcessing start date
END_DATEProcessing end date
SOURCE_ACTION_IDReference to source action
RUN_TYPE_IDPayroll run type
PRE_PAYMENT_IDPre-payment reference
RETRO_COMPONENT_IDRetro processing component
SOURCE_IDSource reference
PARENT_OBJECT_IDParent process reference
PROCESS_PATHProcessing path identifier
SERIAL_NUMBERUnique processing reference

Technical Columns

ColumnDescription
OBJECT_VERSION_NUMBERVersion control
ENTERPRISE_IDEnterprise reference
ORA_PART_KEYPartition key for performance

Important Notes

  • This table represents employee-level payroll processing
  • Each PAYROLL_ACTION_ID will have multiple rows here (one per employee)
  • Acts as the main bridge between payroll run and results

Joins

  • PAY_PAYROLL_ACTIONS → PAYROLL_ACTION_ID
  • PAY_RUN_RESULTS → PAYROLL_REL_ACTION_ID
  • PAY_RUN_BALANCES → PAYROLL_REL_ACTION_ID
  • PAY_PAYROLL_ASSIGNMENTS → PAYROLL_RELATIONSHIP_ID

Example Query

SELECT 
    pra.payroll_rel_action_id,
    pra.payroll_action_id,
    pra.payroll_relationship_id,
    pra.action_status
FROM pay_payroll_rel_actions pra
WHERE pra.action_status = 'C';

Payroll Processing Flow (End-to-End)

The following flow explains how payroll data moves across Oracle Payroll tables:

1. PAY_PAYROLL_ACTIONS
   → Payroll run created (header level)

2. PAY_PAYROLL_REL_ACTIONS
   → Employee-level processing for that run

3. PAY_PAYROLL_ASSIGNMENTS
   → Maps HR assignment to payroll structure

4. PAY_ELEMENT_ENTRIES_F
   → Input values assigned to employee

5. PAY_INPUT_VALUES_F
   → Defines what values element accepts

6. PAY_RUN_RESULTS
   → Element calculation results (per element)

7. PAY_RUN_RESULT_VALUES
   → Actual calculated values (amount, hours, etc.)

8. PAY_RUN_BALANCES
   → Final aggregated balances (Net Pay, Gross Pay)

Flow Diagram (Simplified)

Payroll Run
   ↓
PAY_PAYROLL_ACTIONS
   ↓
PAY_PAYROLL_REL_ACTIONS
   ↓
PAY_PAYROLL_ASSIGNMENTS
   ↓
PAY_ELEMENT_ENTRIES_F
   ↓
PAY_RUN_RESULTS
   ↓
PAY_RUN_RESULT_VALUES
   ↓
PAY_RUN_BALANCES

Important Understanding

  • Payroll runs start at header level and go down to employee level
  • Each employee gets processed separately
  • Results are stored in multiple stages (results → values → balances)
  • This structure allows flexibility, auditing, and recalculation

PAY_SEARCH_ACTIONS_V (Payroll Search View)

PAY_SEARCH_ACTIONS_V is a reporting view that combines payroll action, employee, and assignment data into a single searchable structure. It is primarily used in UI screens and reports to quickly fetch payroll processing details.

Employee Information

ColumnDescription
PERSON_IDEmployee identifier
PERSON_NUMBEREmployee number
FULL_NAMEFull employee name
TITLETitle (Mr, Ms, etc.)
FIRST_NAMEFirst name
MIDDLE_NAMESMiddle name
LAST_NAMELast name
ASSIGNMENT_IDEmployee assignment

Payroll Action Details

ColumnDescription
PAYROLL_ACTION_IDPayroll run identifier
PAYROLL_REL_ACTION_IDEmployee-level payroll action
ACTION_TYPEPayroll process type
ACTION_TYPE_CODEInternal action type code
ACTION_CODEAction reference code
STATUSStatus description
ACTION_STATUS_CODEStatus code (C, U, E)
OBJECT_TYPEType of object processed
OBJECT_ACTION_IDObject action reference
SOURCE_ACTION_IDSource action reference
CHILD_ACTION_IDChild process action
TASK_NAMEName of payroll task

Payroll Context

ColumnDescription
PAYROLL_RELATIONSHIP_IDPayroll relationship
PAYROLL_RELATIONSHIP_NUMBERRelationship number
PAYROLL_IDPayroll identifier
PAYROLL_NAMEPayroll name
OBJECT_IDGeneric object reference

Dates & Periods

ColumnDescription
DATE_EARNEDDate earnings apply
PROCESS_DATEProcessing date
STATUTORY_PERIOD_NAMEStatutory payroll period
EARN_PERIOD_NAMEEarnings period
EARN_PERIOD_NUMEarnings period number
STAT_PERIOD_NUMStatutory period number

Other Details

ColumnDescription
LIST_NAMESearch list name
LEGISLATIVE_DATA_GROUP_IDLegislation group
LOCKINGFLAGIndicates record lock
LOCKINGSTATUSLock status

Important Notes

  • This is a view, not a base table
  • Combines data from multiple payroll tables
  • Used for searching payroll runs and employee processing
  • Good for reporting, not for heavy joins

Joins (Internal)

  • PAY_PAYROLL_ACTIONS
  • PAY_PAYROLL_REL_ACTIONS
  • PER_ALL_PEOPLE_F
  • PER_PERSON_NAMES_F
  • PER_ALL_ASSIGNMENTS_F

Example Query

SELECT 
    person_number,
    full_name,
    payroll_name,
    action_type,
    action_status_code,
    process_date
FROM pay_search_actions_v
WHERE action_status_code = 'C';

PAY_CE_TRANSACTIONS (Payroll Payment Transactions Table)

PAY_CE_TRANSACTIONS stores payroll payment details such as bank transfers, checks, and other payment methods. Each row represents a payment transaction generated after payroll processing.

Core Identifiers

ColumnDescription
PAYROLL_REL_ACTION_IDLinks to employee payroll processing
PAYROLL_ACTION_IDPayroll run reference
PRE_PAYMENT_IDPre-payment process reference

Payment Details

ColumnDescription
AMOUNTPayment amount
CURRENCY_CODECurrency
PAYMENT_DATEDate payment is issued
PAYMENT_STATUSStatus (Paid, Cleared, Pending)
RECON_FLAGReconciliation flag
CLEARED_DATEDate payment cleared
ACTUAL_VALUE_DATEBank value date
CHECK_NUMBERCheck reference (if applicable)
SOURCE_TYPESource of payment

Bank Details

ColumnDescription
PAYER_BANK_ACCOUNT_IDEmployer bank account
PAYEE_BANK_ACCOUNT_IDEmployee bank account

Payment Method

ColumnDescription
ORG_PAYMENT_METHOD_IDPayment method ID
ORG_PAYMENT_METHOD_NAMEPayment method name
PAYMENT_TYPE_IDPayment type
PAYMENT_TYPE_NAMEPayment type name
BASE_PAYMENT_TYPE_IDBase payment type
BASE_PAYMENT_TYPE_NAMEBase payment type name

Payroll Context

ColumnDescription
PAYROLL_IDPayroll definition
VOID_PAYROLL_REL_ACTION_IDReference to voided payment
LEGISLATION_CODECountry code
ENTERPRISE_IDEnterprise reference

Audit Columns

ColumnDescription
CREATED_BYCreated by
CREATION_DATECreation date
LAST_UPDATED_BYUpdated by
LAST_UPDATE_DATELast update date
LAST_UPDATE_LOGINSession reference
OBJECT_VERSION_NUMBERVersion control

Important Notes

  • This table stores actual payment transactions
  • Generated after payroll run and pre-payment process
  • Includes bank, check, and payment method details
  • Used for reconciliation and payment tracking

Joins

  • PAY_PAYROLL_REL_ACTIONS → PAYROLL_REL_ACTION_ID
  • PAY_PAYROLL_ACTIONS → PAYROLL_ACTION_ID
  • PER_ALL_PEOPLE_F → via payroll relationship
  • PAY_RUN_BALANCES → to verify amounts

Example Query

SELECT 
    pct.payroll_action_id,
    pct.amount,
    pct.currency_code,
    pct.payment_status,
    pct.payment_date
FROM pay_ce_transactions pct
WHERE pct.payment_status = 'PAID';

Complete Payroll to Payment Flow

Payroll Run Created
   ↓
PAY_PAYROLL_ACTIONS
   ↓
Employee Processing
   ↓
PAY_PAYROLL_REL_ACTIONS
   ↓
Element Input & Entries
   ↓
PAY_ELEMENT_ENTRIES_F
   ↓
Calculation Engine
   ↓
PAY_RUN_RESULTS
   ↓
Result Values
   ↓
PAY_RUN_RESULT_VALUES
   ↓
Final Balances
   ↓
PAY_RUN_BALANCES
   ↓
Payment Processing
   ↓
PAY_CE_TRANSACTIONS

This represents the complete lifecycle from payroll calculation to actual payment.

HR_DOCUMENTS_OF_RECORD (Documents of Record Table)

HR_DOCUMENTS_OF_RECORD stores employee-related documents such as passport, visa, certificates, contracts, and other official records. Each row represents a document associated with a person or assignment.

Core Identifiers

ColumnDescription
DOCUMENTS_OF_RECORD_IDPrimary key
PERSON_IDEmployee identifier
ASSIGNMENT_IDAssignment reference
ENTERPRISE_IDEnterprise identifier
DOCUMENT_TYPE_IDType of document (Passport, Visa, etc.)

Document Details

ColumnDescription
DOCUMENT_CODEUnique document code
DOCUMENT_NAMEName of the document
DOCUMENT_NUMBERLegal document number
ISSUING_COUNTRYCountry issuing the document
ISSUING_LOCATIONLocation of issue
ISSUING_AUTHORITYAuthority who issued the document
ISSUED_DATEDate document was issued
DATE_FROMValid from date
DATE_TOValid until date

Related Object Mapping

ColumnDescription
RELATED_OBJECT_NAMERelated entity (e.g., Absence)
RELATED_OBJECT_ID_COLColumn name of related object
RELATED_OBJECT_IDActual related object ID

Publishing & Status

ColumnDescription
PUBLISHIndicates if document should be published
PUBLISH_DATEDate when document becomes visible
CREATION_SOURCESource (HDL, UI, REST)
TAG_LISTTags for classification
COMMENTSAdditional comments

Descriptive Flexfields (DFF)

This table supports Descriptive Flexfields for additional customization:

  • DEI_ATTRIBUTE_CATEGORY → Structure definition
  • DEI_ATTRIBUTE1 to DEI_ATTRIBUTE40 → Custom text attributes
  • DEI_ATTRIBUTE_NUMBER1 to DEI_ATTRIBUTE_NUMBER20 → Numeric attributes
  • DEI_ATTRIBUTE_DATE1 to DEI_ATTRIBUTE_DATE15 → Date attributes
  • DEI_ATTRIBUTE_TIMESTAMP1 to DEI_ATTRIBUTE_TIMESTAMP5 → Timestamp attributes

Legislative Flexfields

  • DEI_INFORMATION_CATEGORY → Legislative structure
  • DEI_INFORMATION1 to DEI_INFORMATION40 → Legislative attributes
  • DEI_INFORMATION_NUMBER1 to DEI_INFORMATION_NUMBER20 → Numeric legislative attributes
  • DEI_INFORMATION_DATE1 to DEI_INFORMATION_DATE15 → Date legislative attributes

Audit Columns

ColumnDescription
CREATED_BYUser who created the record
CREATION_DATECreation timestamp
LAST_UPDATED_BYLast updated user
LAST_UPDATE_DATELast update timestamp
LAST_UPDATE_LOGINSession login reference
OBJECT_VERSION_NUMBERVersion control

Important Notes

  • Stores employee documents such as passport, visa, and certificates
  • Supports attachment to person or assignment
  • Highly extensible using DFF and legislative fields
  • Used in HR self-service and compliance tracking

Joins

  • PER_ALL_PEOPLE_F → PERSON_ID
  • PER_ALL_ASSIGNMENTS_F → ASSIGNMENT_ID
  • HR_DOCUMENT_TYPES_VL → DOCUMENT_TYPE_ID
  • HRC_TXN_HEADER / HRC_TXN_DATA → transaction tracking

Example Query

SELECT 
    d.document_name,
    d.document_number,
    d.issued_date,
    d.date_to
FROM hr_documents_of_record d
WHERE d.person_id = :person_id;

HRC_TXN_HEADER (Transaction Header Table)

HRC_TXN_HEADER stores high-level information about transactions initiated in Oracle HCM. It is used to track business operations such as document uploads, approvals, and data changes before they are committed to base tables.

Core Identifiers

ColumnDescription
TRANSACTION_IDPrimary key for the transaction
ENTERPRISE_IDEnterprise identifier (multi-tenancy)
INITIATOR_USER_IDUser who initiated the transaction
APPLICATION_IDApplication creating the transaction

Transaction Context

ColumnDescription
FAMILYHigh-level grouping (used in searches)
MODULE_GROUPModule group (e.g., HCM, Payroll)
MODULE_IDENTIFIERSpecific module name
PROCESS_IDProcess reference
PROCESS_OWNEROwner process of the transaction
SECTION_DISPLAY_NAMEDisplay name of action

Business Object Mapping

ColumnDescription
OBJECTMain table being updated
OBJECT_IDPrimary key of the target record
SUBJECTBusiness object type (e.g., PERSON)
SUBJECT_IDIdentifier of the subject (e.g., PERSON_ID)
PARENT_TRANSACTION_IDParent transaction reference

Transaction Data

ColumnDescription
XML_DATA_CACHEStores transaction data in XML format
REENTRY_FUNCTIONFunction used for re-entry handling
IS_TXN_GETTING_ARCHIVEDIndicates if transaction is archived

Audit Columns

ColumnDescription
CREATED_BYUser who created the transaction
CREATION_DATECreation timestamp
LAST_UPDATED_BYLast updated user
LAST_UPDATE_DATELast update timestamp
LAST_UPDATE_LOGINSession reference
OBJECT_VERSION_NUMBERVersion control (optimistic locking)

Important Notes

  • Stores transaction header data before actual table updates
  • Used in approval workflows and UI transactions
  • XML_DATA_CACHE contains full transaction payload
  • Works with HRC_TXN_DATA for transaction status tracking

Joins

  • HRC_TXN_DATA → TRANSACTION_ID
  • PER_ALL_PEOPLE_F → SUBJECT_ID (if subject = PERSON)
  • HR_DOCUMENTS_OF_RECORD → OBJECT_ID (for document transactions)

Example Query

SELECT 
    txn.transaction_id,
    txn.subject,
    txn.object,
    txn.creation_date
FROM hrc_txn_header txn
WHERE txn.subject = 'PERSON';


SQL Logic

DENSE_RANK() OVER (ORDER BY PAPF.PERSON_NUMBER) S_No

TO_CHAR(ppos.last_working_date,'DD-MON-YYYY','nls_date_language=english')

TO_CHAR(hdr.last_update_date,
'DD MONTH YYYY',
'NLS_CALENDAR=''ARABIC HIJRAH'' NLS_DATE_LANGUAGE=ARABIC')

COALESCE((SELECT MAX(fl.meaning)
FROM fnd_lookup_values_tl fl
WHERE fl.lookup_type='NATIONALITY'),' - ')


Duplicate Handling

WHERE SYSDATE BETWEEN EFFECTIVE_START_DATE AND EFFECTIVE_END_DATE

No tables match your search.