Monday, 15 June 2026

Oracle Cloud Payroll Costing: SQL Queries to Identify Missing Assignment and Department Costing

Oracle Cloud Payroll Costing: SQL Queries to Identify Missing Assignment and Department Costing

Introduction

Payroll costing is one of the most critical configuration areas in Oracle Cloud Payroll. If costing is missing or incomplete, payroll may still calculate successfully, but downstream accounting, costing, and General Ledger transfer can become challenging.

In real implementations, payroll and finance teams often ask questions such as:

  • Which employees do not have assignment-level costing?
  • Which departments do not have department-level costing?
  • Which employees are assigned to departments where costing has not been configured?

These are simple questions from a business perspective, but they are not always easy to answer from the UI, especially when the population is large.

This blog shares three useful SQL queries that can help implementation and support teams identify gaps in payroll costing setup.


Why This Matters

Missing costing setup can cause issues such as:

  • Payroll costs going to suspense accounts
  • Incorrect cost center allocation
  • Payroll costing transfer failures
  • Reconciliation issues between Payroll and GL
  • Manual cleanup during payroll close
  • Delays in payroll accounting validation

During implementation, parallel payroll, or post-production support, these queries can be very helpful for proactive validation.


Query 1: List Employees Without Assignment Costing

Business Requirement

The first requirement is to identify active employees who do not have assignment-level costing configured.

Assignment costing is often used when payroll costs should be charged directly based on the employee assignment rather than defaulting from department, position, organization, or other costing hierarchy levels.

SQL Query

SELECT 
    papf.person_number,
    paam.assignment_number,
    paam.assignment_name,
    cost_acc.*
FROM
(
    SELECT
        TO_CHAR(pcaf.effective_start_date, 'YYYY/MM/DD') pcaf_effective_start_date,
        TO_CHAR(pcaf.effective_end_date, 'YYYY/MM/DD') pcaf_effective_end_date,
        pcaf.payroll_relationship_id,
        TO_CHAR(pcaa.cost_alloc_account_id) cost_alloc_account_id,
        TO_CHAR(pcaa.cost_allocation_record_id) cost_allocation_record_id,
        pcaa.id_flex_num,
        TO_CHAR(pcaa.cost_allocation_keyflex_id) cost_allocation_keyflex_id,
        pcaa.proportion,
        pcaa.source_sub_type,
        pcaa.segment1,
        pcaa.segment2 seg2_location,
        pcaa.segment3 seg3_division,
        pcaa.segment4,
        pcaa.segment5,
        pcaa.segment6,
        pcaa.segment7,
        pcaa.segment8,
        pcaa.segment9,
        pcaa.segment10,
        pcaa.created_by,
        pcaa.creation_date,
        pcaa.last_update_date,
        pcaa.last_update_login,
        pcaa.last_updated_by
    FROM 
        pay_cost_allocations_f pcaf,
        pay_cost_alloc_accounts pcaa
    WHERE 
        pcaf.cost_allocation_record_id(+) = pcaa.cost_allocation_record_id
        AND pcaf.source_type(+) = 'ASG'
        AND pcaf.payroll_relationship_id IN 
        (
            SELECT payroll_relationship_id
            FROM pay_pay_relationships_dn
            WHERE person_id IN 
            (
                SELECT DISTINCT person_id
                FROM per_all_people_f
            )
        )
) cost_acc,
per_all_assignments_m paam,
per_all_people_f papf,
pay_pay_relationships_dn pprd
WHERE
    cost_acc.payroll_relationship_id(+) = pprd.payroll_relationship_id
    AND papf.person_id = paam.person_id
    AND papf.person_id = pprd.person_id
    AND paam.assignment_type NOT LIKE '%Termi%'
    AND paam.assignment_type = 'E'
    AND paam.assignment_status_type = 'ACTIVE'
    AND TRUNC(SYSDATE) BETWEEN paam.effective_start_date AND paam.effective_end_date
    AND TRUNC(SYSDATE) BETWEEN papf.effective_start_date AND papf.effective_end_date;

How to Use the Output

This query returns active employee assignments along with assignment costing details if they exist.

To identify employees missing assignment costing, review records where costing segments or costing account information are blank.

Depending on your reporting requirement, you may further add a filter such as:

AND cost_acc.cost_allocation_record_id IS NULL

or check a specific costing segment, for example:

AND cost_acc.segment4 IS NULL

Practical Use Case

This query is useful during:

  • Payroll implementation validation
  • Pre-parallel payroll checks
  • Assignment costing cleanup
  • Payroll costing troubleshooting
  • Post-go-live support (every pre-payroll validation report before every payroll run)

Query 2: List Departments Without Costing Information

Business Requirement

The second requirement is to identify departments where costing has not been configured.

Department costing is commonly used as a default costing level. If employee assignment costing is not available, payroll may derive costing from the department or organization level depending on the costing hierarchy.

SQL Query

SELECT
    hov.name department_name,
    cost_acc.*
FROM 
(
    SELECT
        TO_CHAR(pcaf.effective_start_date, 'YYYY/MM/DD') costing_effective_start_date,
        TO_CHAR(pcaf.effective_end_date, 'YYYY/MM/DD') costing_effective_end_date,
        pcaf.source_id,
        TO_CHAR(pcaa.cost_alloc_account_id) cost_alloc_account_id,
        TO_CHAR(pcaa.cost_allocation_record_id) cost_allocation_record_id,
        pcaa.id_flex_num,
        TO_CHAR(pcaa.cost_allocation_keyflex_id) cost_allocation_keyflex_id,
        pcaa.proportion,
        pcaa.source_sub_type,
        pcaa.segment1,
        pcaa.segment2 seg2_location,
        pcaa.segment3 seg3_division,
        pcaa.segment4 seg4_cost_center,
        pcaa.segment5,
        pcaa.segment6,
        pcaa.segment7,
        pcaa.segment8,
        pcaa.segment9,
        pcaa.segment10,
        pcaa.created_by,
        pcaa.creation_date,
        pcaa.last_update_date,
        pcaa.last_update_login,
        pcaa.last_updated_by
    FROM
        pay_cost_alloc_accounts pcaa,
        pay_cost_allocations_f pcaf
    WHERE
        pcaa.source_sub_type = 'COST'
        AND pcaf.source_type(+) = 'ORG'
        AND pcaa.cost_allocation_record_id = pcaf.cost_allocation_record_id(+)
) cost_acc,
hr_organization_v hov
WHERE
    cost_acc.source_id(+) = hov.organization_id
    AND hov.classification_code = 'DEPARTMENT'
    AND TRUNC(SYSDATE) BETWEEN hov.effective_start_date AND hov.effective_end_date;

How to Use the Output

This query lists departments and any associated organization-level costing details.

To identify only departments missing costing, you can add a filter such as:

AND cost_acc.cost_allocation_record_id IS NULL

or if Cost Center is stored in Segment 4:

AND cost_acc.seg4_cost_center IS NULL

Practical Use Case

This query is useful when Finance or Payroll wants to validate whether every active department has costing configured before payroll costing is transferred to GL.


Query 3: List Employees Assigned to Departments Without Costing

Business Requirement

The third requirement combines employee assignment data with department costing data.

This is especially useful because a department may be missing costing, but the real operational impact depends on whether active employees are assigned to that department.

SQL Query

SELECT
    papf.person_number,
    paam.assignment_number,
    pd.name department_name,
    cost_acc.*
FROM
    per_all_people_f papf,
    per_all_assignments_m paam,
    per_periods_of_service ppos,
    per_departments pd,
    (
        SELECT
            TO_CHAR(pcaf.effective_start_date, 'YYYY/MM/DD') pcaf_effective_start_date,
            TO_CHAR(pcaf.effective_end_date, 'YYYY/MM/DD') pcaf_effective_end_date,
            pcaf.source_id,
            pcaf.source_type,
            pcaf.payroll_relationship_id,
            TO_CHAR(pcaa.cost_alloc_account_id) cost_alloc_account_id,
            TO_CHAR(pcaa.cost_allocation_record_id) cost_allocation_record_id,
            pcaa.id_flex_num,
            TO_CHAR(pcaa.cost_allocation_keyflex_id) cost_allocation_keyflex_id,
            pcaa.proportion,
            pcaa.source_sub_type,
            pcaa.segment1,
            pcaa.segment2 seg2_location,
            pcaa.segment3 seg3_division,
            pcaa.segment4 seg4_cost_center,
            pcaa.segment5,
            pcaa.segment6,
            pcaa.segment7,
            pcaa.segment8,
            pcaa.segment9,
            pcaa.segment10,
            pcaa.created_by,
            pcaa.creation_date,
            pcaa.last_update_date,
            pcaa.last_update_login,
            pcaa.last_updated_by
        FROM
            pay_cost_alloc_accounts pcaa,
            pay_cost_allocations_f pcaf
        WHERE
            pcaa.source_sub_type = 'COST'
            AND pcaf.source_type(+) = 'ORG'
            AND pcaa.cost_allocation_record_id = pcaf.cost_allocation_record_id(+)
    ) cost_acc
WHERE
    papf.person_id = paam.person_id
    AND ppos.period_of_service_id = paam.period_of_service_id
    AND paam.organization_id = pd.organization_id(+)
    AND cost_acc.source_id(+) = pd.organization_id
    AND paam.assignment_type NOT LIKE '%Term%'
    AND TRUNC(SYSDATE) BETWEEN papf.effective_start_date AND papf.effective_end_date
    AND TRUNC(SYSDATE) BETWEEN pd.effective_start_date(+) AND pd.effective_end_date(+)
    AND TRUNC(SYSDATE) BETWEEN paam.effective_start_date AND paam.effective_end_date
    AND paam.primary_flag = 'Y'
    AND paam.assignment_type NOT LIKE '%Term%'
    AND paam.assignment_status_type = 'ACTIVE'
    AND paam.assignment_type = 'E'
    AND ppos.date_start =
    (
        SELECT MAX(date_start)
        FROM per_periods_of_service
        WHERE person_id = paam.person_id
        AND period_type = paam.assignment_type
    )
    AND
    (
        pd.name IS NULL
        OR cost_acc.seg4_cost_center IS NULL
    );

How to Use the Output

This query identifies active employees where:

  • No department is assigned
  • The assigned department does not have costing information

This is one of the most useful payroll costing audit queries because it directly shows impacted employees.

Practical Use Case

Use this query before:

  • Payroll costing process
  • Transfer to Subledger Accounting
  • Transfer to General Ledger
  • Parallel payroll validation
  • Department costing conversion signoff

Important Notes

1. Segment Names Are Client Specific

In the sample queries:

SEGMENT2 = Location
SEGMENT3 = Division
SEGMENT4 = Cost Center

However, your client’s costing key flexfield may be different.

Always confirm the costing segment structure before using the query in a production environment.

2. Costing Hierarchy Matters

Oracle Payroll costing can be derived from different levels, such as:

  • Element entry costing
  • Assignment costing
  • Department costing
  • Position costing
  • Organization costing
  • Element eligibility costing
  • Payroll relationship costing

These queries focus mainly on assignment and department-level costing.

If your client relies on other costing levels, additional queries may be required.

3. Date Effectivity Is Critical

Payroll costing is date-effective.

Always validate costing as of the correct date:

TRUNC(SYSDATE)

This may be fine for current-state validation, but for payroll processing you may need to replace it with:

:PAYROLL_PERIOD_END_DATE

or another parameterized effective date.

4. Outer Join Usage

These queries intentionally use outer joins to identify missing costing records.

That is why you see syntax such as:

cost_acc.source_id(+) = pd.organization_id

This allows departments or assignments to appear even when costing is missing.


Recommended Enhancements

For production reporting, I recommend enhancing these queries with parameters such as:

  • Effective date
  • Legislative Data Group
  • Payroll name
  • Legal employer
  • Department name
  • Person number
  • Assignment number
  • Cost center
  • Business unit

This makes the report more flexible for payroll and finance users.


When to Run These Queries

These queries are useful during:

  • Payroll implementation
  • Data conversion validation
  • Parallel payroll
  • Payroll costing testing
  • Pre-go-live readiness checks
  • Post-production audits
  • Payroll close activities
  • Post-go-live support (every pre-payroll validation report before every payroll run)

Final Thoughts

Payroll costing is often treated as a setup activity, but in practice it needs continuous validation.

Missing assignment or department costing can create downstream payroll accounting issues that are harder to fix after payroll has been processed.

These three SQL queries provide a practical way to identify:

  • Employees without assignment costing
  • Departments without costing
  • Employees assigned to departments without costing

For Oracle Cloud Payroll implementation teams, these reports can become part of a standard payroll costing readiness checklist before each major payroll milestone.

Used proactively, they can reduce payroll accounting errors, improve reconciliation, and help payroll and finance teams close payroll with more confidence.

Oracle Cloud Payroll: How to Load Personal Payment Methods Using HDL

Oracle Cloud Payroll: How to Load Personal Payment Methods Using HDL

Personal Payment Methods in Oracle Fusion HCM define how an employee receives payroll payments.

For example, an employee may receive:

  • 100 percent of their salary in one checking account
  • A fixed amount in a savings account
  • The remaining balance in another account

When loading a direct-deposit Personal Payment Method through HCM Data Loader (HDL), the Personal Payment Method cannot be created in isolation.

Oracle must first know the following hierarchy:

Bank
→ Bank Branch
→ External Bank Account
→ External Bank Account Owner
→ Personal Payment Method

In this article, we will load a bank account and create a Personal Payment Method that deposits 100 percent of the employee’s payroll payment into that account.


Example Data

Attribute Value
Person Number 82213
Assignment Number E82213
Bank Name BANK OF AMERICA
Routing Number 064000020
Branch Name BANK OF AMERICA - 064000020
Account Type Checking
Country US
Currency USD
Legislative Data Group US Legislative Data Group
Organization Payment Method DD
Payment Percentage 100
Processing Order 1

Note: The bank account number is masked in this article. Replace <BANK_ACCOUNT_NUMBER> with the actual account number in the secured HDL file.


Prerequisites

Before loading the Personal Payment Method, confirm that:

  • The employee exists in Oracle Fusion HCM.
  • Person number 82213 is valid.
  • Assignment number E82213 is valid.
  • The employee has a payroll relationship.
  • The assignment is associated with the required payroll.
  • US Legislative Data Group exists.
  • Organization Payment Method code DD exists.
  • The Organization Payment Method is effective on the Personal Payment Method start date.

The Organization Payment Method code is configured during payroll implementation. It may not always be DD, so confirm the value in the target environment.


Step 1: Load the Bank

Create a file named Bank.dat.

METADATA|Bank|BankName|CountryCode
MERGE|Bank|BANK OF AMERICA|US

This creates or identifies the bank using:

  • BankName: BANK OF AMERICA
  • CountryCode: US

If the bank already exists in Oracle with the same name and country, the existing bank can be used.

Bank names must be consistent across all the HDL files.

For example:

BANK OF AMERICA

and:

BANK OF AMERICA N.A.

may be treated as different bank names.




Step 2: Load the Bank Branch

Create a file named BankBranch.dat.

METADATA|BankBranch|BankName|CountryCode|BankBranchNumber|BankBranchName
MERGE|BankBranch|BANK OF AMERICA|US|064000020|BANK OF AMERICA - 064000020

The branch is associated with Bank of America using the bank name and country.

For example:

  • BankBranchNumber: 064000020
  • BankBranchName: BANK OF AMERICA - 064000020

For US bank accounts, the branch number normally represents the routing number.

The branch name can follow any agreed naming convention, but the same branch name must be used when loading the External Bank Account and Personal Payment Method.




Step 3a: Load the External Bank Account

Create a file named ExternalBankAccount.dat.

METADATA|ExternalBankAccount|BankName|BankBranchName|BankBranchNumber|AccountNumber|AccountType|AccountName|CountryCode|CurrencyCode
MERGE|ExternalBankAccount|BANK OF AMERICA|BANK OF AMERICA - 064000020|064000020|<BANK_ACCOUNT_NUMBER>|Checking||US|USD

This record creates an employee’s bank account.

The important attributes are:

  • BankName: BANK OF AMERICA
  • BankBranchName: BANK OF AMERICA - 064000020
  • BankBranchNumber: 064000020
  • AccountNumber: <BANK_ACCOUNT_NUMBER>
  • AccountType: Checking
  • CountryCode: US
  • CurrencyCode: USD

AccountName is left blank in this example.

It can also be populated with a description such as:

PRIMARY CHECKING ACCOUNT

The account-type value must be valid in the Oracle environment. Depending on the configured lookup values, the environment may expect a value such as Checking or CHECKING.


Step 3b: Load the External Bank Account Owner

Creating the External Bank Account does not automatically associate it with an employee.

The ExternalBankAccountOwner record establishes the ownership relationship.

Add the following record to ExternalBankAccount.dat:

METADATA|ExternalBankAccountOwner|PersonNumber|BankName|BankBranchName|AccountNumber|CountryCode|CurrencyCode|BankBranchNumber|AccountType|PrimaryFlag
MERGE|ExternalBankAccountOwner|82213|BANK OF AMERICA|BANK OF AMERICA - 064000020|<BANK_ACCOUNT_NUMBER>|US|USD|064000020|Checking|Y

The employee is identified using the person number:

PersonNumber: 82213

The employee is also marked as the primary account owner:

PrimaryFlag: Y

It is important to use the person number here, not the assignment number.

Combined ExternalBankAccount.dat File

METADATA|ExternalBankAccount|BankName|BankBranchName|BankBranchNumber|AccountNumber|AccountType|AccountName|CountryCode|CurrencyCode
MERGE|ExternalBankAccount|BANK OF AMERICA|BANK OF AMERICA - 064000020|064000020|<BANK_ACCOUNT_NUMBER>|Checking||US|USD

METADATA|ExternalBankAccountOwner|PersonNumber|BankName|BankBranchName|AccountNumber|CountryCode|CurrencyCode|BankBranchNumber|AccountType|PrimaryFlag
MERGE|ExternalBankAccountOwner|82213|BANK OF AMERICA|BANK OF AMERICA - 064000020|<BANK_ACCOUNT_NUMBER>|US|USD|064000020|Checking|Y

Uploading: 43601 of 43601 bytes uploaded.



Step 4: Load the Personal Payment Method

After the bank account and account owner are successfully loaded, create PersonalPaymentMethod.dat.

METADATA|PersonalPaymentMethod|EffectiveStartDate|EffectiveEndDate|PersonalPaymentMethodCode|PaymentAmountType|Percentage|ProcessingOrder|LegislativeDataGroupName|AssignmentNumber|OrganizationPaymentMethodCode|BankAccountNumber|BankBranchName|BankName|BankCountryCode|BankBranchNumber|BankAccountType
MERGE|PersonalPaymentMethod|2021/02/01|4712/12/31|PPM_82213_1|P|100|1|US Legislative Data Group|E82213|DD|<BANK_ACCOUNT_NUMBER>|BANK OF AMERICA - 064000020|BANK OF AMERICA|US|064000020|Checking

Let us look at the important attributes.





Effective Start and End Dates

EffectiveStartDate: 2021/02/01
EffectiveEndDate: 4712/12/31

The effective start date determines when the payment method becomes active.

The date must be valid for the employee’s:

  • Work relationship
  • Assignment
  • Payroll relationship
  • Organization Payment Method

4712/12/31 is commonly used as an open-ended effective end date.


Personal Payment Method Code

PersonalPaymentMethodCode: PPM_82213_1

This is the identifier for the Personal Payment Method.

A simple naming convention is:

PPM_<PERSON_NUMBER>_<SEQUENCE>

For example:

PPM_82213_1
PPM_82213_2

The second value can be used when an employee has multiple payment methods.


Payment Amount Type

PaymentAmountType: P

P represents a percentage-based payment method in this example.

Because the payment amount type is percentage, the Percentage attribute is populated:

Percentage: 100

This means that 100 percent of the applicable payroll payment will be deposited into the account.


Processing Order

ProcessingOrder: 1

Processing orders are important when an employee has multiple Personal Payment Methods.

For example:

  • Account 1: Processing order 1
  • Account 2: Processing order 2

Oracle processes the payment methods according to this sequence.


Legislative Data Group

LegislativeDataGroupName: US Legislative Data Group

The value must exactly match the Legislative Data Group configured in Oracle Fusion HCM.


Assignment Number

AssignmentNumber: E82213

The Personal Payment Method is associated with the employee’s payroll assignment using the assignment number.

This is different from the External Bank Account Owner record, which uses the person number.

ExternalBankAccountOwner → PersonNumber
PersonalPaymentMethod → AssignmentNumber

This is an important distinction when preparing the HDL files.


Organization Payment Method

OrganizationPaymentMethodCode: DD

The Organization Payment Method defines the payment mechanism used by payroll.

In this example, DD represents direct deposit.

The code must:

  • Exist in the target environment
  • Be associated with the correct Legislative Data Group
  • Be effective on the Personal Payment Method start date
  • Support the required payment type and currency

Bank Account Reference

The final attributes identify the External Bank Account:

  • BankAccountNumber
  • BankBranchName
  • BankName
  • BankCountryCode
  • BankBranchNumber
  • BankAccountType

The values must match the External Bank Account record.

For example:

  • BankAccountNumber: <BANK_ACCOUNT_NUMBER>
  • BankBranchName: BANK OF AMERICA - 064000020
  • BankName: BANK OF AMERICA
  • BankCountryCode: US
  • BankBranchNumber: 064000020
  • BankAccountType: Checking

Even a small difference in the bank or branch values can cause Oracle to report that the bank account cannot be found.


Recommended Load Order

Load the HDL files in the following sequence:

  1. Bank.dat
  2. BankBranch.dat
  3. ExternalBankAccount.dat
  4. PersonalPaymentMethod.dat

Validate each load before proceeding to the next file.

For example, do not load the Personal Payment Method until the External Bank Account and External Bank Account Owner have completed successfully.


Uploading the HDL Files

To upload the files:

  1. Save each file with the .dat extension.
  2. Place the .dat file inside a ZIP file.
  3. Navigate to My Client Groups.
  4. Open Data Exchange.
  5. Select Import and Load Data.
  6. Upload the ZIP file.
  7. Monitor the import and load processes.
  8. Review the object and component statuses.

If a record fails, download the error file and review the detailed error message.


Common Errors

Bank Could Not Be Found

Verify that:

  • The bank was loaded successfully.
  • The bank name matches exactly.
  • The country code is correct.
  • The same bank name is used in all files.

Bank Branch Could Not Be Found

Verify:

  • BankName
  • BankBranchName
  • BankBranchNumber
  • CountryCode

The branch name and routing number must match the Bank Branch record.

Also verify that leading zeros have not been removed from the routing number.

External Bank Account Could Not Be Found

Compare the following values between ExternalBankAccount.dat and PersonalPaymentMethod.dat:

  • AccountNumber
  • AccountType
  • BankName
  • BankBranchName
  • BankBranchNumber
  • CountryCode
  • CurrencyCode

The most common issue is a difference in one of the identifying values.

Account Owner Could Not Be Created

Verify that:

  • Person number 82213 exists.
  • The External Bank Account loaded successfully.
  • The person number, not the assignment number, is used.
  • PrimaryFlag contains a valid value.

Assignment Could Not Be Found

Verify that:

  • Assignment number E82213 exists.
  • The assignment is active on the effective start date.
  • The employee has a valid payroll relationship.
  • The assignment belongs to the expected legislative context.

Organization Payment Method Is Invalid

Verify that:

  • DD is the configured Organization Payment Method code.
  • It belongs to US Legislative Data Group.
  • It is effective on 2021/02/01.
  • It supports the required currency and payment method.

Account Type Is Invalid

Verify the accepted lookup value for the Account Type attribute.

The target environment may accept:

Checking

or may require a lookup code such as:

CHECKING

Use the value supported by the target Oracle environment.


Complete HDL Example

Bank.dat

METADATA|Bank|BankName|CountryCode
MERGE|Bank|BANK OF AMERICA|US

BankBranch.dat

METADATA|BankBranch|BankName|CountryCode|BankBranchNumber|BankBranchName
MERGE|BankBranch|BANK OF AMERICA|US|064000020|BANK OF AMERICA - 064000020

ExternalBankAccount.dat

METADATA|ExternalBankAccount|BankName|BankBranchName|BankBranchNumber|AccountNumber|AccountType|AccountName|CountryCode|CurrencyCode
MERGE|ExternalBankAccount|BANK OF AMERICA|BANK OF AMERICA - 064000020|064000020|<BANK_ACCOUNT_NUMBER>|Checking||US|USD

METADATA|ExternalBankAccountOwner|PersonNumber|BankName|BankBranchName|AccountNumber|CountryCode|CurrencyCode|BankBranchNumber|AccountType|PrimaryFlag
MERGE|ExternalBankAccountOwner|82213|BANK OF AMERICA|BANK OF AMERICA - 064000020|<BANK_ACCOUNT_NUMBER>|US|USD|064000020|Checking|Y

PersonalPaymentMethod.dat

METADATA|PersonalPaymentMethod|EffectiveStartDate|EffectiveEndDate|PersonalPaymentMethodCode|PaymentAmountType|Percentage|ProcessingOrder|LegislativeDataGroupName|AssignmentNumber|OrganizationPaymentMethodCode|BankAccountNumber|BankBranchName|BankName|BankCountryCode|BankBranchNumber|BankAccountType
MERGE|PersonalPaymentMethod|2021/02/01|4712/12/31|PPM_82213_1|P|100|1|US Legislative Data Group|E82213|DD|<BANK_ACCOUNT_NUMBER>|BANK OF AMERICA - 064000020|BANK OF AMERICA|US|064000020|Checking

Final Thoughts

The key to successfully loading a Personal Payment Method is understanding the dependency between the HDL business objects.

The Personal Payment Method is the final record in the following chain:

Bank
→ Bank Branch
→ External Bank Account
→ External Bank Account Owner
→ Personal Payment Method

Load and validate each object in sequence.

Also remember the two different worker identifiers used in the files:

Account owner → Person Number
Personal Payment Method → Assignment Number

Once the employee, payroll relationship, bank account, account owner, and Organization Payment Method are available, the Personal Payment Method can be loaded successfully using HDL.

Saturday, 13 June 2026

Oracle Cloud Payroll: Loading Payroll-Ready Time Transactions Using PayrollTimeCard HDL

Oracle Cloud Payroll: Loading Payroll-Ready Time Transactions Using PayrollTimeCard HDL

Introduction

Oracle Payroll provides a powerful HDL business object that is often overlooked:

PayrollTimeCard

This object allows organizations to load payroll-ready time transactions directly into Oracle Payroll.

This capability is particularly valuable when an external workforce management system is responsible for collecting, approving, and calculating employee time before it reaches Oracle.

Examples of external workforce management systems include:

  • UKG
  • Kronos
  • Workforce Software
  • ADP eTime
  • Workday Time Tracking
  • Custom Time Collection Applications

Instead of recreating complex time rules in Oracle, organizations can load the approved payroll-ready results.


A Common Misconception

One misconception I frequently encounter is that any time-related transaction must be loaded using:

  • Oracle Time and Labor
  • AbsenceEntry HDL
  • ElementEntry HDL

In reality, Oracle provides a dedicated HDL object specifically designed for payroll time transactions:

PayrollTimeCard

Another common misconception is that PayrollTimeCard is the same as a Payroll Calculation Card.

It is not.

Object Purpose
CalculationCard.dat Tax cards, involuntary deductions, benefits, pensions
PayrollTimeCard.dat Payroll-ready time transactions
AbsenceEntry.dat Absence transactions
ElementEntry.dat Payroll element entries

Understanding this distinction can simplify many integration designs.


Business Scenario

Consider a simple example.

An employee has:

4 Hours of OT Straight

on:

20-May-2026

The time has already been:

  • Entered
  • Approved
  • Calculated

within an external workforce management application.

The business does not want Oracle to:

  • Calculate time
  • Evaluate time rules
  • Recreate time calculation logic

Instead, Oracle Payroll simply needs the final transaction for payroll processing.

This is an ideal use case for PayrollTimeCard HDL.


Sample HDL

The following HDL creates both a payroll time card and a related time entry.

METADATA|PayrollTimeCard|LegislativeDataGroupName|AssignmentNumber|EffectiveStartDate|EffectiveEndDate|TimeCardId
MERGE|PayrollTimeCard|US Legislative Data Group|E100|2026/05/20|2026/05/20|10020260520

METADATA|TimeEntry|LegislativeDataGroupName|AssignmentNumber|EffectiveStartDate|EffectiveEndDate|TimeType|Time|UnitOfMeasure|TimeCardId|TimeEntryId|Periodicity|Factor|RateName|RateValue|Segment1
MERGE|TimeEntry|US Legislative Data Group|E100|2026/05/20|2026/05/20|OT Straight|4|H_DECIMAL3|10020260520|1002026052001|HOURLY||||

Understanding the PayrollTimeCard Record

The first section creates the parent payroll time card.

MERGE|PayrollTimeCard|US Legislative Data Group|E100|2026/05/20|2026/05/20|10020260520

Legislative Data Group

US Legislative Data Group

Defines the legislative context.

Assignment Number

E100

Identifies the employee assignment.

Effective Dates

2026/05/20

Represents the date associated with the payroll transaction.

TimeCardId

10020260520

Acts as the parent identifier used to associate TimeEntry records with the time card.


Understanding the TimeEntry Record

The second section creates the actual payroll transaction.

MERGE|TimeEntry|US Legislative Data Group|E100|2026/05/20|2026/05/20|OT Straight|4|H_DECIMAL3|10020260520|1002026052001|HOURLY||||

Time Type

OT Straight

Identifies the type of payroll time being loaded.

Examples include:

  • OT Straight
  • Overtime
  • Double Time
  • Shift Differential

Time

4

Represents the quantity.

Unit of Measure

H_DECIMAL3

Indicates hours with three-decimal precision.

Examples:

8.000
4.500
2.250

TimeEntryId

1002026052001

Unique identifier for the individual time transaction.

Periodicity

HOURLY

Defines how Payroll interprets the transaction.





Why Use PayrollTimeCard HDL?

Many organizations already have mature workforce management platforms.

These systems may already calculate:

  • Overtime
  • Double Time
  • Shift Premiums
  • Call Back Pay
  • On Call Pay
  • Hazard Pay

Recreating those same calculations in Oracle often leads to:

  • Duplicate rule maintenance
  • Increased testing effort
  • Additional support overhead

Using PayrollTimeCard HDL allows Oracle Payroll to consume the final approved results.


Additional Attributes and Costing

TimeEntry supports additional attributes that can be used for labor allocation and payroll processing.

Examples include:

Segment1
Segment2
Segment3

These attributes can be leveraged to pass:

  • Cost centers
  • Departments
  • Projects
  • Labor allocations

from external systems into Oracle Payroll.

This can be especially useful when integrating with UKG or Kronos labor tracking structures.


Rollback Capability

One of the most useful features of HDL is the ability to roll back a load.

If an incorrect time card is loaded:

  • A separate delete HDL file is not required
  • Administrators can roll back the HDL load
  • Correct the source file
  • Reload the transactions

This significantly simplifies:

  • Testing
  • Data conversion
  • Payroll parallel runs
  • Production support

Compared to manually creating reversal HDL files, rollback can save considerable effort.





Typical Use Cases

I commonly see PayrollTimeCard HDL used for:

UKG Integrations

Loading approved payroll hours directly into Oracle Payroll.

Kronos Integrations

Loading overtime, premiums, and shift differentials.

Workforce Software Integrations

Passing final payroll-ready transactions.

Legacy Time Systems

Migrating approved time transactions into Oracle.

Payroll Conversion Projects

Loading historical payroll time transactions during implementation.


Testing Recommendations

Before moving to production, validate:

  • HDL load success
  • PayrollTimeCard creation
  • TimeEntry creation
  • Payroll calculation results
  • Time type mappings
  • Labor allocation values
  • Payroll balances
  • Retro processing behavior

Particular attention should be paid to overtime and premium calculations when external systems are performing the calculations.


Final Thoughts

Many Oracle Payroll implementations spend considerable effort recreating time calculation logic that already exists in external workforce management applications.

The PayrollTimeCard HDL business object provides a simpler alternative.

If your external system is already producing approved payroll-ready time transactions, consider loading the final results directly into Oracle Payroll rather than duplicating complex rules inside Oracle.

Used correctly, PayrollTimeCard HDL can simplify integrations, reduce maintenance effort, and streamline payroll processing while maintaining a clear audit trail between the source time system and Oracle Payroll.

Friday, 12 June 2026

Oracle Cloud Payroll: Creating Element Entries with Costing Using HDL

Oracle Cloud Payroll: Creating Element Entries with Costing Using HDL

Introduction

Most Oracle Cloud Payroll implementations use HCM Data Loader (HDL) extensively to create and maintain element entries. Common use cases include:

  • Bonus payments
  • One-time earnings
  • Allowances
  • Deduction entries
  • Retro adjustments
  • Conversion data
  • Payroll parallel run data

However, one requirement that often surprises implementation teams is:

How do we create an element entry and simultaneously override its costing information using HDL?

Many payroll teams initially assume this requires a separate costing process, manual maintenance, or payroll costing override after the element entry is created.

Fortunately, Oracle Cloud HCM Data Loader provides support for creating element entries together with costing information using the ElementEntryWithCosting business object.

This is particularly useful for bonus payments, project-based earnings, special allocations, payroll adjustments, and conversion activities where the payroll cost must be charged to a specific cost center or accounting segment.


Business Requirement

Consider a common scenario. An employee receives a one-time bonus payment of $100.

Normally, the employee's payroll costs are charged to their home department:

100100

However, for this bonus payment, Finance wants the expense charged to a different cost center:

020000

Instead of creating the element entry first and then manually overriding costing, both the element entry and costing override can be loaded together through HDL.


HDL Business Object

For this requirement, Oracle provides the following HDL business object:

ElementEntryWithCosting

This business object allows you to load the following in a single HDL file:

  • Element entry
  • Input values
  • Costing segment overrides

Sample HDL

The following example creates a Bonus Pay element entry and overrides Costing Segment 2.

METADATA|ElementEntryWithCosting|AssignmentNumber|ElementName|EntryType|CreateEntrySequence|EffectiveStartDate|EffectiveEndDate|InputValueName1|ScreenEntryValue1|Segment2
MERGE|ElementEntryWithCosting|E10|Bonus Pay|E|1|2026/06/10|4712/12/31|Amount|100|020000

Understanding the HDL

AssignmentNumber

E10

Identifies the employee assignment that will receive the element entry.

ElementName

Bonus Pay

Identifies the payroll element being created.

EntryType

E

Indicates a standard element entry.

CreateEntrySequence

1

Used when multiple entries may exist for the same element.

Effective Dates

2026/06/10
4712/12/31

Defines the effective period of the element entry.

Input Value

InputValueName1 = Amount
ScreenEntryValue1 = 100

Creates the element entry with an Amount input value of $100.

Costing Override

Segment2 = 020000

Overrides Costing Segment 2 for this specific element entry.

This allows payroll costs generated by this element to be charged to a different accounting segment than the employee's default costing.


Result After HDL Load

After the HDL load, the following element entry is created:

Assignment: E10
Element: Bonus Pay
Amount: 100

The costing override is also created:

Segment2 = 020000

During payroll processing, the resulting payroll costs will use the overridden costing segment for this specific element entry.








Typical Use Cases

Bonus Allocations

Charge annual, spot, or special bonuses to a specific project, department, or cost center.

Project-Based Earnings

Allocate payroll costs to customer-funded projects or special business initiatives.

Grant Accounting

Override costing for grant-funded employees or grant-funded payments.

Payroll Adjustments

Direct payroll adjustment costs to a specific accounting combination.

Payroll Conversion Activities

Load historical element entries with corresponding costing distributions during implementation or parallel payroll validation.


Important Feature: Rollback HDL Load

One very useful feature when using ElementEntryWithCosting HDL is the ability to roll back the HDL load if something goes wrong.

This is especially helpful because you do not need to prepare a separate delete HDL file manually.

For example, if the element entry or costing segment was loaded incorrectly, you can use the HDL rollback option to reverse the HDL load, correct the source file, and reload the data.

This simplifies testing and production support because:

  • Incorrect HDL loads can be reversed more easily
  • No separate delete file is required
  • Testing multiple scenarios becomes faster
  • Payroll teams can recover from load errors more efficiently
  • Auditability is preserved through the HDL process

This is very useful during:

  • Payroll conversion
  • Bonus load testing
  • Costing override testing
  • One-time payment loads
  • Parallel payroll validation

Practical Recommendation

When loading element entries with costing, always keep track of the HDL batch name and import process ID. This makes it easier to identify and roll back the correct HDL load if needed.





Important Considerations

Costing Flexfield Structure

The available HDL costing segments depend on your costing key flexfield configuration.

Examples may include:

Segment1
Segment2
Segment3
Segment4
Segment5

or additional segments depending on your chart of accounts.

Costing Validation

The segment values provided through HDL must exist as valid values in the chart of accounts.

Invalid values will cause HDL validation failures.

Testing

Always validate the following before moving the process into production:

  • HDL load success
  • Element entry creation
  • Costing override creation
  • Payroll run results
  • Payroll costing results
  • Transfer to General Ledger

Why This Matters

Many payroll implementations require occasional costing overrides but continue to rely on manual updates after element creation.

Using ElementEntryWithCosting allows organizations to automate both the payroll transaction and its costing treatment in a single HDL load.

This reduces manual effort, improves auditability, and creates a cleaner operational process for payroll and finance teams.

For payroll conversion projects, bonus interfaces, project-based compensation, and financial allocations, this capability can significantly simplify the solution design.


Final Thoughts

Oracle HDL provides several payroll-specific business objects that are often overlooked because most examples focus only on creating basic element entries.

The ElementEntryWithCosting business object is one of those hidden gems.

If your requirement involves creating payroll element entries and directing the resulting payroll costs to a specific accounting segment, consider using this object instead of relying on manual costing updates after the fact.

A small HDL enhancement can eliminate significant operational effort and provide a cleaner, more controlled payroll process.

Monday, 1 June 2026

Oracle Cloud Payroll: How to Pay a Retiree’s Beneficiary, Survivor, Charity, Guardian, or Estate/Trust

Oracle Cloud Payroll: How to Pay a Retiree’s Beneficiary, Survivor, Charity, Guardian, or Estate/Trust

Introduction

Most Oracle Cloud Payroll implementations focus on standard employee and retiree payment scenarios. However, real-world payroll operations often involve less common, but critically important, special payment cases.

Examples include:

  • Payments to a retiree’s beneficiary or surviving dependent
  • Payments assigned to a charitable organization
  • Payments made through a guardian or custodian
  • Payments issued to an estate or trust

These scenarios typically arise in pension payroll, retiree benefit administration, deferred compensation processing, survivor benefits, legal settlements, or special retirement payment arrangements.

The common question becomes:

How do we correctly configure Oracle Cloud Payroll to pay someone other than the retiree while maintaining accurate tax reporting and payment handling?

This blog walks through practical configuration guidance for these special payroll payee scenarios.


Why This Matters

These are not just payment routing scenarios. They directly impact:

  • Payroll check generation
  • Payee naming
  • Tax reporting, including Form 1099-R
  • TIN / SSN handling
  • Mailing address configuration
  • Legal compliance
  • Contact relationship setup for informational and audit purposes

Incorrect setup can result in:

  • Checks issued to the wrong legal entity
  • Incorrect tax reporting
  • IRS reporting issues
  • Payment delivery failures
  • Compliance risks

Understanding Special Retiree Payment Scenarios

Oracle Cloud Payroll supports several special payee configurations where the payment recipient differs from the retiree.

The exact setup depends on the legal payment recipient and reporting requirements.

Note: All employee names, addresses, and screenshots used in this blog are sample/fake data for demonstration purposes only.


Scenario 1: Paying a Retiree’s Beneficiary or Survivor

Business Scenario

A retiree passes away, and pension or survivor payments must continue to the designated beneficiary.

Examples:

  • Surviving spouse pension payments
  • Beneficiary annuity continuation
  • Survivor benefit plans

Recommended Setup

Field Value
Payroll Payee Beneficiary
Oracle Person Type Retiree
SSN/TIN Beneficiary SSN
Name Beneficiary / Survivor Name
Address Beneficiary mailing address
Contact Name Actual retiree name
Contact Relationship Contact

Payroll Behavior

When payroll is processed:

  • Payment is issued to the beneficiary
  • Tax reporting uses the beneficiary name, address, and SSN

This is especially important for Form 1099-R reporting.

[Screenshot: Beneficiary Payee Name, Address, SSN, and Date of Birth]




[Screenshot: Contact Setup]




[Screenshot: Check Payment Output]






Scenario 2: Paying a Charity

Business Scenario

A retiree elects to direct payment to a charitable organization.

Examples:

  • Charitable assignment
  • Pension donation instructions
  • Structured contribution arrangements

Recommended Setup

Field Value
Payroll Payee Charity
Person Type Retiree
SSN/TIN Charity TIN
Name Charity legal name
Address Charity mailing address
Contact Name Retiree name
Contact Relationship Contact

Payroll Behavior

When payroll runs:

  • Payment is issued to the charity
  • Tax reporting uses the charity name, address, and TIN

[Screenshot: Charity Payee Name, Address, TIN, and Date of Birth]




[Screenshot: Contact Setup]





[Screenshot: Check Payment Output]





Scenario 3: Paying Through Guardian or Custodian

Business Scenario

A retiree may be legally unable to manage payments.

Examples:

  • Incapacity
  • Court-appointed guardian
  • Conservatorship
  • Custodian-managed payments

Recommended Setup

Field Value
Payroll Payee Guardian / Custodian
Person Type Retiree
SSN/TIN Retiree SSN
Name Retiree legal name
Address Line 1 C/O Guardian Name
Address Line 2+ Retiree or guardian address
Contact Name Retiree name

Address Example

Address Line 1: C/O John Doe
Remaining Address: 123 Main Street, Dallas, TX 75001

Payroll Behavior

Payroll processes the payment:

  • Payment is payable to the retiree
  • Payment is delivered using the guardian/custodian address routing

Tax reporting remains under:

  • Retiree name
  • Retiree SSN

This is because the payment is still legally attributable to the retiree.

[Screenshot: Guardian/Custodian Payee Name, Address, SSN, and Date of Birth]




[Insert Screenshot: Check Payment Output]





Scenario 4: Paying an Estate or Trust

Business Scenario

Payments must be made to a deceased retiree’s estate or trust.

Examples:

  • Estate settlement
  • Trust-administered benefits
  • Executor-managed pension disbursement

Recommended Setup

Field Value
Payroll Payee Estate / Trust
Person Type Retiree
SSN/TIN Estate or Trust TIN
Name Estate legal name
Address Estate or trust mailing address
Contact Name Retiree name
Contact Relationship Contact

Executor Address Example

C/O Jane Smith, Executor
456 Estate Blvd
Chicago, IL 60601

Payroll Behavior

Payroll issues payment to:

  • Estate
  • Trust

Tax reporting uses:

  • Estate/trust legal name
  • Estate/trust TIN

[Screenshot: Estate/Trust Payee Name, Address, TIN, and Date of Birth]



[Screenshot: Contact Setup]




[Screenshot: Check Payment Output]





Contact Relationship

Maintain proper contact relationships to preserve auditability.

For Scenario 1, Scenario 2, and Scenario 4, create or select the actual retiree record as a contact. This is primarily for informational and audit purposes.


Common Mistakes

Incorrect Beneficiary SSN Usage

Using the retiree SSN instead of the beneficiary SSN can create reporting errors.

Estate Setup with Retiree SSN

Estate payments should generally use the estate or trust TIN.

Guardian Payments with Guardian SSN

Guardian scenarios typically still use the retiree SSN because the payment is legally attributable to the retiree.

Incorrect Mailing Address Design

Missing “Care Of” routing can result in failed payment delivery.


Final Thoughts

Oracle Cloud Payroll provides flexibility to support complex retiree payment scenarios beyond standard employee or retiree direct payments.

The key is understanding:

  • Who is the legal payee?
  • Who owns the tax reporting obligation?
  • Where should the payment be delivered?

Getting those three questions right makes implementation straightforward.

For pension and retiree payroll teams, these scenarios may be uncommon, but when they occur, correct configuration is essential.

Thursday, 21 May 2026

Oracle HCM Extract Best Practice: Draft vs Final Vendor Delivery Using Report Category

Oracle HCM Extract Best Practice: Draft vs Final Vendor Delivery Using Report Category

Introduction

One of the most common operational requirements in Oracle Cloud HCM and Payroll integrations is not just generating outbound vendor files—but controlling when those files are transmitted.

Typical outbound integrations include files sent to:

  • Benefits providers
  • Retirement vendors
  • Garnishment agencies
  • Payroll banking partners
  • Insurance carriers
  • Tax agencies
  • External payroll processors

A very common business requirement looks like this:

Run the HCM Extract → Validate the output → If the results look correct, send the file to the vendor via SFTP

At first glance, teams often assume this requires:

  • Custom orchestration
  • Middleware intervention
  • Manual file download/upload
  • Duplicate extract definitions
  • Custom ESS job chains

However, Oracle HCM Extract provides a standard capability that is often underutilized:

Report Category

This standard parameter allows implementation teams to control extract delivery behavior by associating different delivery configurations with different report categories.

With the right design, this provides a clean way to separate file generation from vendor transmission, without unnecessary customization.


The Common Business Problem

In many payroll and HCM outbound integrations, sending the file immediately after extract generation is not always desirable.

Examples include:

Payroll Vendor Files

A payroll deduction remittance file may require payroll or finance validation before transmission.

Benefits Enrollment Files

Benefit carrier enrollment files may need operational verification before delivery.

Garnishment Files

Incorrect transmission may create compliance or payment issues.

Tax Reporting Files

Organizations may require internal review before sending statutory reporting files externally.

In all these scenarios, the desired operational process becomes:

  1. Generate file
  2. Review output
  3. Approve for release
  4. Deliver to vendor

The challenge is enabling this process without introducing unnecessary architectural complexity.


Common, But Often Overengineered, Approaches

To solve this requirement, teams often consider:

  • Creating separate draft and production extracts
  • Middleware orchestration logic
  • Manual download and upload processes
  • Custom ESS scheduling chains
  • External SFTP automation scripts

While these approaches can work, they often add complexity that may not be necessary.


The Standard Oracle Solution: Report Category

Oracle HCM Extract includes a standard parameter called:

Report Category

This parameter can be used to group and control extract delivery behavior.

Instead of treating delivery as a fixed part of extract execution, you can design multiple operational modes using report categories.

This becomes especially useful when outbound vendor files require business validation before release.


Practical Design Pattern: Draft vs Final

In this implementation approach, the same HCM Extract is configured with two report categories:

  • Draft
  • Final

Each category supports a different operational outcome. You can create any number of report categories and name them as per your needs.


Option 1: Draft

The Draft report category generates the file but keeps it internally accessible within Oracle/UCM without transmitting it externally.

Flow:

Run Extract (Draft)
→ File Generated
→ Payroll / HR Reviews Output
→ Business Approval

In this example, the Draft report category has one delivery option configured under it.




Option 2: Final

Once the draft output is validated, the same extract is rerun using the Final report category.

In this mode, the configured delivery options, such as SFTP, are executed.

Flow:

Run Extract (Final)
→ File Generated
→ Automatically Delivered via SFTP

This provides a clean operational promotion model from review to release.




Important Design Consideration

Since the extract is rerun in Final mode, organizations should ensure the underlying source data remains unchanged between Draft validation and Final transmission.

For payroll integrations, this typically means ensuring:

  • Payroll results are finalized
  • No retro changes occur between validation and transmission
  • No operational changes impact extract data between runs

This avoids validating one dataset and transmitting another.


Real-World Payroll Example

Consider a 401(k)-deduction remittance file.

Business requirement:

  • Generate deduction file after payroll
  • Payroll team validates totals
  • Confirm deduction balances match payroll register
  • Only then transmit to Fidelity (vendor)

Without delivery control:

  • File may be transmitted immediately
  • Errors become vendor-facing operational incidents
  • Corrections require rework and vendor coordination

With the Draft/Final report category approach:

Draft

  • File generated
  • Payroll validates totals
  • Internal signoff obtained

Final

  • Same extract reruns
  • Approved file transmitted via SFTP

This creates a much cleaner operational model.







Why This Matters

This is not just a technical extract parameter.

This approach improves:

Operational Control

Prevents premature vendor transmission.

Error Prevention

Catches extract issues before they become external incidents.

Compliance Support

Useful for regulated outbound integrations.

Simplified Design

Avoids unnecessary middleware or duplicate solutions.

Supportability

Gives operations teams a predictable and manageable process.


Where This Pattern Works Well

This approach works especially well for:

  • Payroll deduction remittance files
  • Retirement contribution vendor files
  • Benefit carrier interfaces
  • Garnishment remittance files
  • Tax reporting interfaces
  • Banking/payment outbound files
  • Third-party payroll vendor integrations

Practical Recommendation

For outbound vendor integrations, ask a simple question:

Should this file be transmitted immediately, or should the business validate first?

If validation is required, consider using Report Category strategically before introducing custom orchestration.


When This May Not Be Enough

While this pattern works well for many use cases, more complex scenarios may still require additional design considerations.

Examples include:

  • Conditional routing to different vendors
  • Multiple simultaneous delivery destinations
  • Dynamic file naming rules
  • Complex orchestration dependencies
  • Approval workflows requiring system-enforced gating

In these cases, middleware or additional automation may still be appropriate.


Final Thoughts

Oracle often provides standard capabilities that solve practical implementation problems without customization.

Report Category in HCM Extract is one of those underused features.

If your operational requirement is:

Generate → Validate → Then Send

Do not immediately assume middleware or custom orchestration is required.

A simple Draft vs Final Report Category design may provide exactly the operational control your business needs—with far less complexity.

Wednesday, 13 May 2026

Oracle Payroll Integration with UKG: Calculation Card vs Element Entry — Understanding the Correct HDL Object

Oracle Payroll Integration with UKG: Calculation Card vs Element Entry — Understanding the Correct HDL Object

Introduction

When integrating UKG, or any external time system, with Oracle Cloud HCM Payroll, a common design question is:

Should time be loaded as Element Entries, or should we use PayrollTimeCard / PayrollAbsenceRecord HDL objects?

This blog clarifies the relationship between PayrollTimeCard.dat, PayrollAbsenceRecord.dat, ElementEntry.dat, and Calculation Cards, and explains the recommended design approach for Oracle Payroll integrations.


The Core Design Decision

There are two primary integration patterns for third-party time and absence data:

  1. PayrollTimeCard.dat / PayrollAbsenceRecord.dat — time/absence-driven model
  2. ElementEntry.dat — payroll-result-driven model

Calculation Cards should not be treated as a separate third option. They are the payroll representation layer where time and absence data may appear after being loaded through the correct business objects.


Key Clarification: Calculation Cards Are the Target Representation

The most important clarification is:

PayrollTimeCard.dat and PayrollAbsenceRecord.dat both populate Calculation Cards, but you should not use CalculationCard.dat directly to load time or absence data.

In other words, Oracle may create or update Calculation Cards as part of the payroll time or absence load process, but the integration should use the purpose-built HDL objects.

What This Means in Practice

  • PayrollTimeCard.dat creates or updates Calculation Cards with time entries.
  • PayrollAbsenceRecord.dat creates or updates Calculation Entries for absences.
  • CalculationCard.dat should not be used for time or absence integration.

How Oracle Designed This

Oracle separates the object you load from where the data appears in payroll.

HDL Object Purpose Where Data Appears
PayrollTimeCard.dat Time-card data Calculation Cards / Calculation Entries
PayrollAbsenceRecord.dat Absence data Calculation Entries
ElementEntry.dat Payroll-ready inputs Element Entries
CalculationCard.dat Generic calculation card object Not recommended for time/absence loading

Pattern 1: PayrollTimeCard.dat — Recommended for Time

When to Use

Use PayrollTimeCard.dat when UKG is the system of record for approved time, but Oracle Payroll still needs to process the time data.

This approach is useful when Oracle Payroll needs to:

  • Calculate overtime
  • Apply premiums
  • Handle costing
  • Apply jurisdiction-specific payroll logic
  • Preserve work-date level detail

What Happens

  1. UKG sends approved time-card data.
  2. PayrollTimeCard.dat is loaded.
  3. Oracle validates the time-card elements.
  4. Oracle creates or updates Calculation Cards.
  5. Payroll processes the time entries.

Pattern 2: PayrollAbsenceRecord.dat — Recommended for Absences

When to Use

Use AbsenceEntry.dat when UKG or another external system sends approved absence data and you want Oracle Payroll to process absence-related payroll logic.

What Happens

  • Absence records are loaded using PayrollAbsenceRecord.dat.
  • Oracle creates the related calculation entries.
  • Payroll processes the absence-related elements.

Pattern 3: ElementEntry.dat — Payroll-Ready Inputs

When to Use

Use ElementEntry.dat when UKG has already calculated the payroll values and Oracle Payroll only needs to consume the final results.

This may include:

  • Regular pay
  • Overtime
  • Premiums
  • Adjustments
  • Payroll-ready hours or amounts

This pattern can be simpler, but it places more responsibility on the integration for validation, correction handling, duplicate prevention, and reconciliation.


Why Not Use CalculationCard.dat?

Although PayrollTimeCard.dat and PayrollAbsenceRecord.dat populate Calculation Cards, you should not use CalculationCard.dat directly for time or absence loads.

Using CalculationCard.dat for time or absence can create issues because:

  • It bypasses purpose-built validation logic.
  • It does not align with Oracle’s recommended payroll data model.
  • It can make reconciliation and maintenance more difficult.

The Real Relationship

The correct way to think about this is:

PayrollTimeCard.dat and PayrollAbsenceRecord.dat are calculation-card-based integrations, but they are implemented through specialized business objects, not through CalculationCard.dat.


Benefits of PayrollTimeCard.dat and PayrollAbsenceRecord.dat

1. Data Model Alignment

  • Matches Oracle Payroll architecture
  • Preserves time and absence granularity

2. Built-In Validation

  • Supports element eligibility validation
  • Provides structured error handling

3. Better Reconciliation

  • Aligns source system data with payroll processing
  • Supports audit at a detailed level

Challenges to Plan For

1. Source Key Strategy

A strong source key strategy is required for updates, corrections, and reconciliation.

2. Correction Model

Corrections should generally be made in the source system and re-imported, rather than manually adjusted in payroll.

3. Visibility

  • Data appears in Calculation Cards.
  • It does not appear in Oracle Time and Labor time cards.

4. Setup Requirements

The design requires proper configuration of:

  • Payroll elements
  • Element eligibility
  • Related generated elements where applicable

Practical Recommendation

Use PayrollTimeCard.dat when:

  • You want time-driven payroll processing.
  • You need detailed audit and reconciliation.
  • You want Oracle Payroll to process time-card-style data.

Use PayrollAbsenceRecord.dat when:

  • You are integrating approved absence data.
  • You want Oracle Payroll to process absence-related payroll logic.

Use ElementEntry.dat when:

  • You receive payroll-ready values from UKG.
  • UKG has already calculated the final payable hours or amounts.

Avoid:

  • Using CalculationCard.dat directly for time or absence data.

Conclusion

The confusion around Calculation Cards usually comes from treating them as an integration option rather than understanding what they represent.

Calculation Cards are the internal payroll representation of time and absence data, but the correct load mechanism is through the appropriate HDL business object.

Final Takeaway

  • PayrollTimeCard.dat and PayrollAbsenceRecord.dat do populate Calculation Cards.
  • You should not use CalculationCard.dat directly for time or absence loads.
  • ElementEntry.dat remains valid for payroll-ready inputs.

Using the correct HDL object ensures that the integration is aligned with Oracle’s payroll architecture, easier to reconcile, and more scalable for long-term maintenance.