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.