您的薪资处理数据模板
您的薪资处理数据模板
- 针对薪资分析优化的数据字段
- 用于生命周期梳理的全面活动跟踪
- Oracle HCM Cloud薪资数据的详细提取指南
薪资处理属性
| 名称 | 说明 | ||
|---|---|---|---|
| 事件时间戳 EventTimestamp | 活动发生的准确日期和时间。 | ||
| 说明 记录活动发生的具体时刻。这对于计算持续时间、周期时间和识别瓶颈至关重要。 对于自动化步骤,这是系统执行时间。对于审批等人工步骤,这是交易日志中记录的用户操作时间戳。 为什么重要 用于按时间顺序排列事件,并计算所有基于时间的KPI。 获取位置 相关交易表(如PAY_ACTION_INFORMATION)中的CREATION_DATE或ACTION_DATE列。 示例 2023-10-01T08:30:00Z2023-10-01T14:15:22Z2023-10-05T09:00:00Z | |||
| 最后数据更新 LastDataUpdate | 记录在源数据库中最后修改的时间戳。 | ||
| 说明 表示分析所用数据的新鲜度。这与事件时间戳不同,反映数据库中的行最后一次被ETL流程或系统更新触及的时间。 它用于验证数据时效性,并排查提取延迟问题。 为什么重要 确保分析人员了解查看的是实时数据还是过时数据。 获取位置 几乎所有Oracle HCM表中都常见的LAST_UPDATE_DATE列。 示例 2023-10-02T12:00:00Z2023-10-06T01:00:00Z | |||
| 活动名称 ActivityName | 薪资周期中执行的具体步骤或事件。 | ||
| 说明 此属性记录薪资流程中发生的事件名称。例如“Time Card Submitted”“Payroll Calculation Started”和“Payment Executed”。 它是流程发现和变体分析的主要维度。在Oracle HCM Cloud中,通常根据薪资操作表中的Action Type或Action Status派生。 为什么重要 它定义流程中的“做什么”,使流程图能够重建。 获取位置 根据PAY_PAYROLL_ACTIONS中的ACTION_TYPE代码或审计轨迹中的状态变更派生。 示例 薪资计算已开始工时卡已批准已生成银行转账已标记审计例外 | |||
| 源系统 SourceSystem | 事件产生所在系统的名称。 | ||
| 说明 标识生成数据点的软件或模块。对于此流程,主要值为“Oracle HCM Cloud Payroll”。 不过,在复杂的系统环境中,它也可以区分核心薪资引擎、工时与劳动模块或外部银行接口。 为什么重要 提供数据血缘背景,尤其适用于整合考勤或银行子系统的数据。 获取位置 在提取过程中硬编码,或根据接口ID派生。 示例 Oracle HCM Cloud PayrollOracle Time and Labor外部银行接口 | |||
| 薪资记录 PayrollRecord | 表示特定薪资期间内员工的唯一标识符。 | ||
| 说明 Payroll Record是流程挖掘分析的核心案例标识符。它是由员工分配标识符和薪资期间标识符组合而成的连接值或唯一键。 此属性将特定周期内支付给同一员工的所有活动归为一组,从最初提交工时卡一直到最终银行转账和税务申报。它确保分析能够区分同一员工在1月和2月分别获得薪资的情况。 为什么重要 它充当Case ID,将所有分散的事件绑定到一个流程实例中进行分析。 获取位置 根据PAY_ASSIGNMENT_ACTIONS构建,或在Oracle HCM中由人员编号和薪资期间名称组合而成。 示例 EMP1001-2023-M01EMP5992-2023-W42300000018273645US-NY-A123-JAN23 | |||
| SLA处理截止时间 SlaProcessingDeadline | 必须完成付款的目标日期和时间。 | ||
| 说明 存储薪资发放的合同或法定截止时间,并与“Payment Executed”时间戳进行比较。 用于计算“SLA Processing Deadline Adherence”KPI,并识别存在风险的薪资组。 为什么重要 衡量流程是否按时成功完成的主要基准。 获取位置 通常是Payroll Definition中的配置字段(DFF),或根据Check Date减去X天派生。 示例 2023-10-28T17:00:00Z2023-11-30T17:00:00Z | |||
| 处理用户 ProcessingUser | 执行该活动人员的用户ID或姓名。 | ||
| 说明 记录触发该活动的薪资专员、经理或系统账户身份,支持“Payroll Specialist Workload Distribution”仪表板。 有助于识别薪资团队中的资源瓶颈和培训需求。 为什么重要 支持资源生产率分析和工作负载平衡。 获取位置 交易表中的CREATED_BY或LAST_UPDATED_BY列。 示例 系统管理员j.smith工资批处理用户m.doe | |||
| 应发薪资总额 GrossPayAmount | 该期间计算出的应发薪资总额。 | ||
| 说明 表示本周期计算出的应发薪资金额,用于“Tax and Benefit Calculation Accuracy”和“Incentive Integration”分析。 分析人员可以据此将高额付款与处理时长或错误率进行关联。 为什么重要 为流程挖掘分析提供财务背景。 获取位置 PAY_RUN_RESULT_VALUES表中汇总的Gross Pay余额。 示例 5000.002350.5010000.00 | |||
| 是否手动更正 IsManualCorrection | 标识该活动是否涉及人工干预。 | ||
| 说明 布尔标记,对于“Data Correction Performed”或“Payroll Record Corrected”等活动,值为true。 用于计算“Manual Data Correction Rate”和“First-Pass Payroll Accuracy Rate”KPI。 为什么重要 区分直通式处理与人工返工。 获取位置 根据Activity Name或表示调整的特定Action Types派生,例如QuickPay、Balance Adjustment。 示例 truefalse | |||
| 立法数据组 LegislativeDataGroup | 按国家或监管环境划分薪资数据。 | ||
| 说明 在Oracle HCM Cloud中,Legislative Data Group(LDG)用于划分薪资及相关数据,通常对应某个国家或特定地区的法律法规。 该属性对于按国家筛选流程分析至关重要,例如美国薪资与英国薪资,并且通常会映射到Country通用属性。 为什么重要 不同司法管辖区的合规规则和流程顺序通常存在显著差异。 获取位置 PAY_ALL_PAYROLLS_F表与Legislative Data Group定义关联。 示例 美国立法数据组英国LDG法国工资系统 | |||
| 薪资期间名称 PayrollPeriodName | 薪资处理所对应时间区间的具体名称。 | ||
| 说明 标识具体周期,例如“Monthly January 2024”或“Weekly Period 42”。这是“SLA Deadline Compliance Monitor”的基础。 有助于将员工个案归入相应批次,以便进行汇总报告。 为什么重要 批次级分析和SLA跟踪的基础。 获取位置 PAY_TIME_PERIODS表,或Payroll Definition中的Time Period Name。 示例 2023月度第10期2023周度第42期2023年12月奖金发放 | |||
| 薪资组 PayGroup | 用于薪资处理的员工逻辑分组。 | ||
| 说明 表示员工所属的具体薪资定义,例如“Weekly Manufacturing”或“Monthly Corporate”。 该属性几乎适用于所有仪表板,可用于比较不同薪资周期和频率下的流程绩效。 为什么重要 驱动薪资排程的主要配置对象。 获取位置 PAY_ALL_PAYROLLS_F表中的Payroll Name。 示例 美国半月薪资英国月度薪资工会周薪 | |||
| 部门名称 DepartmentName | 员工所在的组织单元。 | ||
| 说明 标识负责该薪资记录所对应员工的部门。这对于“Timesheet Approval Efficiency”仪表板至关重要。 按部门细分数据后,分析人员可以识别哪些业务单元经常延迟审批工时卡,从而拖慢整体薪资处理。 为什么重要 支持分析与管理审批相关的延迟根因。 获取位置 根据薪资处理时员工当时生效的任职记录派生。 示例 北美销售工程人力资源物流 | |||
| SLA状态 SlaStatus | SLA遵循情况的分类状态(已达成/未达成)。 | ||
| 说明 通过比较“Payment Executed”时间戳与“SLA Processing Deadline”派生。取值可能包括“On Time”“At Risk”或“Breached”。 通过将个案归入绩效区间,简化“SLA Deadline Compliance Monitor”的报告。 为什么重要 将复杂的时间比较转化为可执行的分类。 获取位置 通过比较Event Timestamp与SLA Deadline计算。 示例 已达标已超标接近超标 | |||
| 员工类型 EmployeeType | 员工分类,例如Salaried、Hourly或Contractor。 | ||
| 说明 对员工记录进行分类。这对于“Digital Pay Slip Publishing Lag”仪表板至关重要,因为不同员工类型可能适用不同的处理规则或紧急程度。 有助于筛选分析结果,比较不同员工群体的流程绩效。 为什么重要 不同员工类型通常遵循不同的流程变体。 获取位置 PER_ALL_ASSIGNMENTS_M中的任职类别或雇佣条款。 示例 全职固定薪资兼职按小时计薪承包商高管 | |||
| 审计异常类型 AuditExceptionType | 审计期间标记的错误或警告类别。 | ||
| 说明 对“Audit Exception Flagged”活动中发现的具体问题进行分类,例如“Negative Net Pay”或“Missing Tax ID”。 该属性支持“Audit Exception and Correction Analysis”仪表板,帮助定位常见的数据质量问题。 为什么重要 重做循环根因分析的关键依据。 获取位置 薪资流程日志或异常报告中的Message或Error Code列。 示例 净工资为负缺少SSN银行信息无效超过加班上限 | |||
| 税务管辖区 TaxJurisdiction | 用于报税的具体州、省或地方区域。 | ||
| 说明 标识与薪资记录相关的主要税务机关,例如“CA”代表加利福尼亚州,“NY”代表纽约州,支持“Tax Compliance Processing Duration”仪表板。 有助于识别特定地区的税务计算和申报流程是否更复杂或更缓慢。 为什么重要 按监管复杂度细分绩效。 获取位置 根据员工税务卡或工作地点地址派生。 示例 CA-加利福尼亚州NY-纽约州TX-得克萨斯州Federal-US | |||
| 追溯变更标记 RetroactiveChangeFlag | 标识薪资处理是否包含追溯付款。 | ||
| 说明 布尔标记,如果该记录处理了“Retropay”元素,则值为true。该标记有助于解释“Process Path Variant Comparison”中的较长处理时长或审计异常。 追溯变更通常会触发跨越多个历史期间的复杂重新计算。 为什么重要 识别自然需要更多处理时间的复杂个案。 获取位置 PAY_ELEMENT_ENTRIES中是否存在“Retropay”元素记录。 示例 truefalse | |||
| 预览迭代次数 PreviewIterationCount | 结果在最终确认前被预览的次数。 | ||
| 说明 每当同一个个案发生“Payroll Result Previewed”活动时,该计数器就会递增。 这是“Payroll Preview Iteration Tracker”仪表板的直接衡量指标,用于反映审批前的返工或反复确认程度。 为什么重要 量化验证阶段的效率。 获取位置 在数据转换期间,按Case ID统计特定活动的发生次数。 示例 1350 | |||
薪资处理活动
| 活动 | 说明 | ||
|---|---|---|---|
| 付款已执行 | 确认付款已完成处理。在Oracle中,这通常对应Cash Management中的付款流程完成或对账完成。 | ||
| 为什么重要 这是SLA合规的主要时间戳,用于确定员工是否按时收到薪资。 获取位置 可根据Bank Transfer操作的Effective Date推断,或通过Cash Management对账日志(CE_STATEMENT_LINES)明确获取。 采集 通过付款操作的生效日期或对账事件记录 事件类型 explicit | |||
| 已生成银行转账 | 生成EFT(电子资金转账)文件或类似付款输出,这是为银行创建指令文件的技术步骤。 | ||
| 为什么重要 衡量付款文件生成周期时间。此处延迟可能导致错过银行截止时间。 获取位置 查询PAY_PAYROLL_ACTIONS,其中ACTION_TYPE为M(Magnetic Tape)、E(EFT)或C(Check Writer)。 采集 EFT/Check操作完成时记录 事件类型 explicit | |||
| 薪资计算已开始 | 针对特定薪资定义和期间启动主要薪资运行流程,标志着流程从数据收集进入处理阶段。 | ||
| 为什么重要 确定高强度处理窗口的起点,用于计算技术性薪资执行的总周期时间。 获取位置 查询PAY_PAYROLL_ACTIONS表,其中ACTION_TYPE为R(Run)或Q(QuickPay),ACTION_STATUS标记为started,或根据创建日期推断。 采集 插入PAY_PAYROLL_ACTIONS记录时记录 事件类型 explicit | |||
| 薪资计算已执行 | Calculate Payroll流程成功完成,包括从总额到净额的计算。此事件表示已完成该员工分配的收入、扣除项和税费计算。 | ||
| 为什么重要 这是表明数据已准备好进行验证的重要里程碑。此处耗时较长,可能表示系统性能问题或复杂的快速公式。 获取位置 查询PAY_PAYROLL_REL_ACTIONS,并与PAY_PAYROLL_ACTIONS连接,其中ACTION_TYPE为R或Q,且ACTION_STATUS变为C(Complete)。 采集 Payroll Run操作状态更新为Complete时记录 事件类型 explicit | |||
| 预付款已计算 | 执行Prepayments流程,将净薪资分配至员工选择的付款方式(支票、EFT等)。这一步用于验证计算金额是否能够实际支付。 | ||
| 为什么重要 这是连接计算与付款的桥梁。此处失败通常表示银行信息缺失或付款方式无效。 获取位置 查询PAY_PAYROLL_ACTIONS,其中ACTION_TYPE为P(Prepayments)且状态为Complete。 采集 Prepayments操作完成时记录 事件类型 explicit | |||
| QuickPay已执行 | 执行单人薪资运行(QuickPay),通常用于验证更正结果。该事件可作为Payroll Result Previewed活动的替代指标。 | ||
| 为什么重要 每人频繁执行QuickPay,通常表明薪资处理采用反复试错方式,而不是一种 获取位置 查询PAY_PAYROLL_ACTIONS,其中ACTION_TYPE为Q(QuickPay)。按薪资期间和员工统计实例数量。 采集 QuickPay操作记录在PAY_PAYROLL_ACTIONS中时记录 事件类型 explicit | |||
| 工时卡已批准 | 确认已提交的工时数据已由经理审核并授权。此状态变更会触发数据传输至薪资元素条目。 | ||
| 为什么重要 这是衡量经理审批周期的关键节点。此处的延迟是后续期间产生追溯薪资调整的主要原因之一。 获取位置 查询HWM_TM_REC_GRP_DTLS表或HXT_TIMECARDS视图,筛选状态变为APPROVED的记录,并将审批时间戳与提交时间戳进行比较。 采集 Time and Labor中的状态变为APPROVED时记录 事件类型 explicit | |||
| 工时卡已提交 | 员工或经理提交工时和劳动数据进行处理的初始事件。在Oracle HCM中,当Time and Labor模块中的工时卡状态变为Submitted时,系统会记录此事件。 | ||
| 为什么重要 标志着原始数据进入潜在薪资处理流程。此处的延迟会向下游传导,压缩薪资专员验证计算结果的时间窗口。 获取位置 查询HWM_TM_REC_GRP_DTLS表或HXT_TIMECARDS视图,筛选状态变为SUBMITTED的记录,并使用提交时间戳。 采集 Time and Labor中的状态变为SUBMITTED时记录 事件类型 explicit | |||
| 工资单已发布 | 工资单文档在Self Service中对员工可见的时间点。此步骤发生在Archiver之后,之后可能还会执行特定的Generate Payslip流程。 | ||
| 为什么重要 会影响员工满意度。付款与工资单可用之间间隔过长,会增加支持工单。 获取位置 查询Documents of Record表(HR_DOCUMENTS_OF_RECORD),或查询PAY_PAYROLL_ACTIONS中Generate Payslip流程的完成记录。 采集 Payslip PDF生成流程完成时记录 事件类型 explicit | |||
| 已标记审计例外 | 记录薪资计算或验证阶段产生的错误或警告消息,捕获需要人工干预的具体验证失败。 | ||
| 为什么重要 这是识别数据质量问题的关键。例外数量过多会增加人工工作量和SLA违约风险。 获取位置 查询与特定PAY_PAYROLL_REL_ACTION_ID关联的PAY_MESSAGE_LINES表。该表存储运行期间生成的错误和警告。 采集 向PAY_MESSAGE_LINES插入记录时记录 事件类型 explicit | |||
| 已生成归档结果 | Archive Periodic Payroll Results流程完成。该快照实际上会锁定用于报告和工资单生成的数据。 | ||
| 为什么重要 这是生成工资单和法定报告的技术前提,确认数据已最终确定。 获取位置 查询PAY_PAYROLL_ACTIONS,其中ACTION_TYPE为X(Archive)且状态为Complete。 采集 Archive操作完成时记录 事件类型 explicit | |||
| 成本核算已传输 | 将薪资成本核算结果传输至总账,代表薪资周期的财务核算闭环。 | ||
| 为什么重要 确保财务合规并准确记录人工成本。延迟会阻碍财务结账。 获取位置 查询PAY_PAYROLL_ACTIONS,其中ACTION_TYPE为T(Transfer to GL)且状态为Complete。 采集 Transfer to GL流程完成时记录 事件类型 explicit | |||
| 激励数据已导入 | 通过批量加载器或HDL导入,为奖金、佣金等浮动薪酬创建薪资元素条目。这表示外部薪酬数据已集成至薪资运行。 | ||
| 为什么重要 监控浮动薪酬的集成速度。延迟导入通常会迫使团队执行补充薪资运行或人工更正。 获取位置 查询PAY_BATCH_HEADERS中的导入完成记录,或跟踪PAY_ELEMENT_ENTRIES_F的创建,并使用特定的源系统引用。 采集 批量元素条目处理成功完成时记录 事件类型 explicit | |||
| 税务申报已完成 | 生成法定税务文件(例如Third Party Quarterly Tax File),确保该薪资期间符合监管要求。 | ||
| 为什么重要 这是Tax Compliance Processing Duration KPI的关键节点。此处失败可能导致罚款。 获取位置 查询PAY_PAYROLL_ACTIONS中与税务报告相关的特定立法数据组操作(例如US Third Party Tax Filing)。 采集 特定税务报告流程完成时记录 事件类型 explicit | |||
| 薪资记录已更正 | 在初始薪资运行后、最终确定前,对薪资元素条目或分配数据进行人工更新。此活动表示为修复错误或例外而进行的返工。 | ||
| 为什么重要 这表明流程效率低下且存在数据质量问题。减少此活动是提高首轮薪资准确率的关键。 获取位置 通过识别PAY_ELEMENT_ENTRIES_F中的更新记录推断,筛选Last Update Date位于初始Payroll Run日期与Prepayments日期之间的记录。 采集 比较元素条目更新时间戳与薪资运行时间戳 事件类型 inferred | |||
| 薪资运行已批准 | 在Payroll Dashboard中正式批准薪资登记表或流程。通常发生在审核验证报告之后、生成银行文件之前。 | ||
| 为什么重要 代表管理层签字确认。计算与审批之间的时间就是验证窗口。 获取位置 查询PAY_REQ_FLOW_INSTANCES中的状态变更,或查询指定Payroll Flow Pattern中的特定任务完成情况。 采集 Flow Instance状态变为Completed/Approved时记录 事件类型 explicit | |||
提取指南
步骤
访问Data Exchange:使用具有“Human Capital Management Integration Specialist”角色的用户登录Oracle HCM Cloud。进入My Client Groups > Data Exchange > Extract Definitions。
创建新提取:点击“+”图标创建新的提取。将其命名为“ProcessMind_Payroll_Extract”。选择“Payroll”作为使用者,选择“HR Archive”作为类别,以确保能够访问历史薪资操作数据。
定义数据组:基于User Entity
PAY_PAYROLL_REL_UE(Payroll Relationship)创建Root Data Group,将提取范围锚定到员工的薪资关系。为PAY_ACTION_INFORMATION_UE、PAY_ELEMENT_ENTRY_UE和HWM_MEASURE_DAY_V_UE(用于时间和劳动力)创建子数据组。配置提取记录:在数据组中定义记录,将层级数据扁平化。必须为每种活动类型创建专用记录,例如筛选“Time Card”事件的记录,以及筛选“Run Results”的记录。
通过FastFormula或BIP实现SQL逻辑:由于需要将层级薪资数据转换为线性事件日志,最稳妥的方法是使用“Extract Delivery Option”调用BI Publisher Report。这样可以将下方“Query”部分提供的SQL用作Data Model。与原生GUI筛选相比,这种方式更适合创建统一事件日志。
创建BI Publisher Data Model:进入Tools > Reports and Analytics > Browse Catalog。创建新的Data Model。粘贴下方提供的SQL查询,并为
bind_start_date和bind_end_date定义参数。将提取关联到BIP:在Extract Definition的“Delivery”选项卡中创建交付选项。选择“PDF”或“XML”作为输出类型,ProcessMind更推荐CSV,但您需要先转换BIP输出。选择上一步创建的BI Publisher报告。
定义参数:在Extract Execution Tree中添加Start Date和End Date参数,动态传递给BI Publisher查询。
验证并提交:验证提取定义,检查是否存在错误。点击“Submit Extract”,输入参数,例如最近90天。
监控处理状态:进入“View Extract Results”。等待状态变为“Succeeded”。
下载输出文件:下载生成的XML/CSV文件。打开文件,确认结构包含所需列:PayrollRecord、ActivityName、EventTimestamp等。
为ProcessMind格式化:如果输出为XML,请将其转换为扁平CSV文件,并确保表头符合“Attributes to include”的要求。将生成的文件上传到ProcessMind。
配置
- 提取模式:Changes Only与Full Extract。首次加载时使用Full Extract。每日更新时,根据Last Update Date配置“Changes Only”。
- Legislative Data Group(LDG):如果您的实例支持多个国家,强烈建议按LDG筛选,因为不同法规下的薪资定义有所不同。
- 日期范围:将
bind_start_date和bind_end_date设置为至少覆盖3至6个月,以便流程挖掘捕获完整处理周期。 - 分块大小:对于大批量薪资数据(员工数超过1万),将Extract Definition中的分块大小设置为2000,以避免超时错误。
- 有效日期:薪资表按日期生效。查询逻辑会明确处理
effective_start_date和effective_end_date,确保获取记录的正确历史版本。 - 安全性:执行用户必须具备相应的数据安全配置文件,能够查看计划分析的所有薪资和部门。
a 示例查询 sql
/* Oracle HCM Cloud Payroll Extraction for ProcessMind */
/* Aggregating 16 specific activities into a unified Event Log */
SELECT
/* Attributes */
rel.person_number || '-' || ppa.payroll_action_id AS PayrollRecord,
'Time Card Submitted' AS ActivityName,
TO_CHAR(htr.creation_date, 'YYYY-MM-DD HH24:MI:SS') AS EventTimestamp,
'Oracle HCM Time and Labor' AS SourceSystem,
TO_CHAR(htr.last_update_date, 'YYYY-MM-DD HH24:MI:SS') AS LastDataUpdate,
pap.name AS PayrollPeriodName,
org.name AS DepartmentName,
NULL AS GrossPayAmount
FROM hwm_tm_rec htr
JOIN hwm_tm_rec_grp htrg ON htr.tm_rec_grp_id = htrg.tm_rec_grp_id
JOIN per_all_people_f rel ON htrg.person_id = rel.person_id
LEFT JOIN pay_all_payrolls_f pap ON htrg.payroll_id = pap.payroll_id
LEFT JOIN per_departments org ON rel.attribute1 = org.organization_id /* Adjust mapping */
WHERE htr.latest_version_flag = 'Y'
AND htr.tm_rec_status = 'SUBMITTED'
AND htr.creation_date BETWEEN :bind_start_date AND :bind_end_date
UNION ALL
SELECT
rel.person_number || '-' || ppa.payroll_action_id,
'Time Card Approved',
TO_CHAR(htr.last_update_date, 'YYYY-MM-DD HH24:MI:SS'),
'Oracle HCM Time and Labor',
TO_CHAR(htr.last_update_date, 'YYYY-MM-DD HH24:MI:SS'),
pap.name,
org.name,
NULL
FROM hwm_tm_rec htr
JOIN hwm_tm_rec_grp htrg ON htr.tm_rec_grp_id = htrg.tm_rec_grp_id
JOIN per_all_people_f rel ON htrg.person_id = rel.person_id
LEFT JOIN pay_all_payrolls_f pap ON htrg.payroll_id = pap.payroll_id
LEFT JOIN per_departments org ON rel.attribute1 = org.organization_id
WHERE htr.latest_version_flag = 'Y'
AND htr.tm_rec_status = 'APPROVED'
AND htr.last_update_date BETWEEN :bind_start_date AND :bind_end_date
UNION ALL
SELECT
rel.person_number || '-' || pee.element_entry_id,
'Incentive Data Imported',
TO_CHAR(pee.creation_date, 'YYYY-MM-DD HH24:MI:SS'),
'Oracle HCM Payroll',
TO_CHAR(pee.last_update_date, 'YYYY-MM-DD HH24:MI:SS'),
NULL,
org.name,
NULL
FROM pay_element_entries_f pee
JOIN pay_element_types_f pet ON pee.element_type_id = pet.element_type_id
JOIN per_all_assignments_m asg ON pee.assignment_id = asg.assignment_id
JOIN per_all_people_f rel ON asg.person_id = rel.person_id
LEFT JOIN per_departments org ON asg.organization_id = org.organization_id
WHERE pet.classification_name IN ('Supplemental Earnings', 'Voluntary Deductions')
AND pee.creator_type IN ('H', 'F') /* HDL or Flat File */
AND pee.creation_date BETWEEN :bind_start_date AND :bind_end_date
UNION ALL
SELECT
rel.person_number || '-' || ppa.payroll_action_id,
'Payroll Calculation Started',
TO_CHAR(ppa.creation_date, 'YYYY-MM-DD HH24:MI:SS'),
'Oracle HCM Payroll',
TO_CHAR(ppa.last_update_date, 'YYYY-MM-DD HH24:MI:SS'),
pap.name,
org.name,
NULL
FROM pay_payroll_actions ppa
JOIN pay_all_payrolls_f pap ON ppa.payroll_id = pap.payroll_id
JOIN pay_payroll_rel_actions pra ON ppa.payroll_action_id = pra.payroll_action_id
JOIN per_all_people_f rel ON pra.payroll_relationship_id = rel.person_id /* Simplified Join */
LEFT JOIN per_departments org ON rel.attribute1 = org.organization_id
WHERE ppa.action_type IN ('R', 'Q') /* Run or QuickPay */
AND ppa.creation_date BETWEEN :bind_start_date AND :bind_end_date
UNION ALL
SELECT
rel.person_number || '-' || ppa.payroll_action_id,
'Payroll Calculation Executed',
TO_CHAR(pra.action_sequence_date, 'YYYY-MM-DD HH24:MI:SS'),
'Oracle HCM Payroll',
TO_CHAR(pra.last_update_date, 'YYYY-MM-DD HH24:MI:SS'),
pap.name,
org.name,
(SELECT SUM(prrv.result_value) FROM pay_run_result_values prrv JOIN pay_run_results prr ON prrv.run_result_id = prr.run_result_id WHERE prr.payroll_rel_action_id = pra.payroll_rel_action_id) AS GrossPayAmount
FROM pay_payroll_rel_actions pra
JOIN pay_payroll_actions ppa ON pra.payroll_action_id = ppa.payroll_action_id
JOIN pay_all_payrolls_f pap ON ppa.payroll_id = pap.payroll_id
JOIN per_all_people_f rel ON pra.payroll_relationship_id = rel.person_id
LEFT JOIN per_departments org ON rel.attribute1 = org.organization_id
WHERE ppa.action_type IN ('R', 'Q')
AND pra.action_status = 'C'
AND pra.action_sequence_date BETWEEN :bind_start_date AND :bind_end_date
UNION ALL
SELECT
rel.person_number || '-' || ppa.payroll_action_id,
'Audit Exception Flagged',
TO_CHAR(pml.creation_date, 'YYYY-MM-DD HH24:MI:SS'),
'Oracle HCM Payroll',
TO_CHAR(pml.last_update_date, 'YYYY-MM-DD HH24:MI:SS'),
pap.name,
org.name,
NULL
FROM pay_message_lines pml
JOIN pay_payroll_rel_actions pra ON pml.source_id = pra.payroll_rel_action_id
JOIN pay_payroll_actions ppa ON pra.payroll_action_id = ppa.payroll_action_id
JOIN pay_all_payrolls_f pap ON ppa.payroll_id = pap.payroll_id
JOIN per_all_people_f rel ON pra.payroll_relationship_id = rel.person_id
LEFT JOIN per_departments org ON rel.attribute1 = org.organization_id
WHERE pml.message_level IN ('F', 'E') /* Fatal or Error */
AND pml.creation_date BETWEEN :bind_start_date AND :bind_end_date
UNION ALL
SELECT
rel.person_number || '-' || ppa.payroll_action_id,
'Payroll Record Corrected',
TO_CHAR(pee.last_update_date, 'YYYY-MM-DD HH24:MI:SS'),
'Oracle HCM Payroll',
TO_CHAR(pee.last_update_date, 'YYYY-MM-DD HH24:MI:SS'),
pap.name,
org.name,
NULL
FROM pay_element_entries_f pee
JOIN pay_payroll_rel_actions pra ON pee.creator_id = pra.payroll_rel_action_id
JOIN pay_payroll_actions ppa ON pra.payroll_action_id = ppa.payroll_action_id
JOIN pay_all_payrolls_f pap ON ppa.payroll_id = pap.payroll_id
JOIN per_all_people_f rel ON pra.payroll_relationship_id = rel.person_id
LEFT JOIN per_departments org ON rel.attribute1 = org.organization_id
WHERE pee.last_update_date > pee.creation_date
AND pee.last_update_date BETWEEN :bind_start_date AND :bind_end_date
UNION ALL
SELECT
rel.person_number || '-' || ppa.payroll_action_id,
'QuickPay Executed',
TO_CHAR(pra.action_sequence_date, 'YYYY-MM-DD HH24:MI:SS'),
'Oracle HCM Payroll',
TO_CHAR(pra.last_update_date, 'YYYY-MM-DD HH24:MI:SS'),
pap.name,
org.name,
NULL
FROM pay_payroll_rel_actions pra
JOIN pay_payroll_actions ppa ON pra.payroll_action_id = ppa.payroll_action_id
JOIN pay_all_payrolls_f pap ON ppa.payroll_id = pap.payroll_id
JOIN per_all_people_f rel ON pra.payroll_relationship_id = rel.person_id
LEFT JOIN per_departments org ON rel.attribute1 = org.organization_id
WHERE ppa.action_type = 'Q'
AND pra.action_status = 'C'
AND pra.action_sequence_date BETWEEN :bind_start_date AND :bind_end_date
UNION ALL
SELECT
rel.person_number || '-' || ppa.payroll_action_id,
'Prepayments Calculated',
TO_CHAR(pra.action_sequence_date, 'YYYY-MM-DD HH24:MI:SS'),
'Oracle HCM Payroll',
TO_CHAR(pra.last_update_date, 'YYYY-MM-DD HH24:MI:SS'),
pap.name,
org.name,
NULL
FROM pay_payroll_rel_actions pra
JOIN pay_payroll_actions ppa ON pra.payroll_action_id = ppa.payroll_action_id
JOIN pay_all_payrolls_f pap ON ppa.payroll_id = pap.payroll_id
JOIN per_all_people_f rel ON pra.payroll_relationship_id = rel.person_id
LEFT JOIN per_departments org ON rel.attribute1 = org.organization_id
WHERE ppa.action_type = 'P' /* Distribution */
AND pra.action_status = 'C'
AND pra.action_sequence_date BETWEEN :bind_start_date AND :bind_end_date
UNION ALL
SELECT
rel.person_number || '-' || ppa.payroll_action_id,
'Payroll Run Approved',
TO_CHAR(pfi.action_date, 'YYYY-MM-DD HH24:MI:SS'),
'Oracle HCM Payroll',
TO_CHAR(pfi.last_update_date, 'YYYY-MM-DD HH24:MI:SS'),
pap.name,
org.name,
NULL
FROM pay_flow_instances pfi
JOIN pay_payroll_actions ppa ON pfi.payroll_action_id = ppa.payroll_action_id
JOIN pay_all_payrolls_f pap ON ppa.payroll_id = pap.payroll_id
JOIN pay_payroll_rel_actions pra ON ppa.payroll_action_id = pra.payroll_action_id
JOIN per_all_people_f rel ON pra.payroll_relationship_id = rel.person_id
LEFT JOIN per_departments org ON rel.attribute1 = org.organization_id
WHERE pfi.status = 'COMPLETED'
AND pfi.instance_name LIKE '%Approval%'
AND pfi.action_date BETWEEN :bind_start_date AND :bind_end_date
UNION ALL
SELECT
rel.person_number || '-' || ppa.payroll_action_id,
'Archive Results Generated',
TO_CHAR(pra.action_sequence_date, 'YYYY-MM-DD HH24:MI:SS'),
'Oracle HCM Payroll',
TO_CHAR(pra.last_update_date, 'YYYY-MM-DD HH24:MI:SS'),
pap.name,
org.name,
NULL
FROM pay_payroll_rel_actions pra
JOIN pay_payroll_actions ppa ON pra.payroll_action_id = ppa.payroll_action_id
JOIN pay_all_payrolls_f pap ON ppa.payroll_id = pap.payroll_id
JOIN per_all_people_f rel ON pra.payroll_relationship_id = rel.person_id
LEFT JOIN per_departments org ON rel.attribute1 = org.organization_id
WHERE ppa.action_type = 'X' /* Archive */
AND pra.action_status = 'C'
AND pra.action_sequence_date BETWEEN :bind_start_date AND :bind_end_date
UNION ALL
SELECT
rel.person_number || '-' || ppa.payroll_action_id,
'Bank Transfer Generated',
TO_CHAR(pra.action_sequence_date, 'YYYY-MM-DD HH24:MI:SS'),
'Oracle HCM Payroll',
TO_CHAR(pra.last_update_date, 'YYYY-MM-DD HH24:MI:SS'),
pap.name,
org.name,
(SELECT SUM(ppp.value) FROM pay_pre_payments ppp WHERE ppp.payroll_action_id = ppa.payroll_action_id) AS GrossPayAmount
FROM pay_payroll_rel_actions pra
JOIN pay_payroll_actions ppa ON pra.payroll_action_id = ppa.payroll_action_id
JOIN pay_all_payrolls_f pap ON ppa.payroll_id = pap.payroll_id
JOIN per_all_people_f rel ON pra.payroll_relationship_id = rel.person_id
LEFT JOIN per_departments org ON rel.attribute1 = org.organization_id
WHERE ppa.action_type IN ('M', 'E') /* Mag Tape or EFT */
AND pra.action_status = 'C'
AND pra.action_sequence_date BETWEEN :bind_start_date AND :bind_end_date
UNION ALL
SELECT
rel.person_number || '-' || ppa.payroll_action_id,
'Payment Executed',
TO_CHAR(ppp.base_currency_value, 'YYYY-MM-DD HH24:MI:SS'),
'Oracle HCM Payroll',
TO_CHAR(ppa.last_update_date, 'YYYY-MM-DD HH24:MI:SS'),
pap.name,
org.name,
ppp.value AS GrossPayAmount
FROM pay_pre_payments ppp
JOIN pay_payroll_actions ppa ON ppp.payroll_action_id = ppa.payroll_action_id
JOIN pay_all_payrolls_f pap ON ppa.payroll_id = pap.payroll_id
JOIN pay_payroll_rel_actions pra ON ppa.payroll_action_id = pra.payroll_action_id
JOIN per_all_people_f rel ON pra.payroll_relationship_id = rel.person_id
LEFT JOIN per_departments org ON rel.attribute1 = org.organization_id
WHERE ppa.action_type IN ('H', 'E', 'M') /* Check or EFT */
AND ppa.effective_date BETWEEN :bind_start_date AND :bind_end_date
UNION ALL
SELECT
rel.person_number || '-' || ppa.payroll_action_id,
'Pay Slip Published',
TO_CHAR(pra.action_sequence_date, 'YYYY-MM-DD HH24:MI:SS'),
'Oracle HCM Payroll',
TO_CHAR(pra.last_update_date, 'YYYY-MM-DD HH24:MI:SS'),
pap.name,
org.name,
NULL
FROM pay_payroll_rel_actions pra
JOIN pay_payroll_actions ppa ON pra.payroll_action_id = ppa.payroll_action_id
JOIN pay_all_payrolls_f pap ON ppa.payroll_id = pap.payroll_id
JOIN per_all_people_f rel ON pra.payroll_relationship_id = rel.person_id
LEFT JOIN per_departments org ON rel.attribute1 = org.organization_id
WHERE ppa.action_type = 'G' /* Generate Payslip */
AND pra.action_status = 'C'
AND pra.action_sequence_date BETWEEN :bind_start_date AND :bind_end_date
UNION ALL
SELECT
rel.person_number || '-' || ppa.payroll_action_id,
'Costing Transferred',
TO_CHAR(pra.action_sequence_date, 'YYYY-MM-DD HH24:MI:SS'),
'Oracle HCM Payroll',
TO_CHAR(pra.last_update_date, 'YYYY-MM-DD HH24:MI:SS'),
pap.name,
org.name,
NULL
FROM pay_payroll_rel_actions pra
JOIN pay_payroll_actions ppa ON pra.payroll_action_id = ppa.payroll_action_id
JOIN pay_all_payrolls_f pap ON ppa.payroll_id = pap.payroll_id
JOIN per_all_people_f rel ON pra.payroll_relationship_id = rel.person_id
LEFT JOIN per_departments org ON rel.attribute1 = org.organization_id
WHERE ppa.action_type = 'T' /* Transfer to GL */
AND pra.action_status = 'C'
AND pra.action_sequence_date BETWEEN :bind_start_date AND :bind_end_date
UNION ALL
SELECT
rel.person_number || '-' || ppa.payroll_action_id,
'Tax Filing Completed',
TO_CHAR(pra.action_sequence_date, 'YYYY-MM-DD HH24:MI:SS'),
'Oracle HCM Payroll',
TO_CHAR(pra.last_update_date, 'YYYY-MM-DD HH24:MI:SS'),
pap.name,
org.name,
NULL
FROM pay_payroll_rel_actions pra
JOIN pay_payroll_actions ppa ON pra.payroll_action_id = ppa.payroll_action_id
JOIN pay_all_payrolls_f pap ON ppa.payroll_id = pap.payroll_id
JOIN per_all_people_f rel ON pra.payroll_relationship_id = rel.person_id
LEFT JOIN per_departments org ON rel.attribute1 = org.organization_id
WHERE ppa.report_category IN ('Tax', 'Regulatory') /* Customize based on local requirements */
AND pra.action_status = 'C'
AND pra.action_sequence_date BETWEEN :bind_start_date AND :bind_end_date 步骤
- 登录Oracle BI Publisher:访问Oracle Cloud环境,进入Tools > Reports and Analytics。点击Browse Catalog打开BI Publisher界面。
- 创建数据模型:点击左上角的新建,选择数据模型。这是存放SQL提取逻辑的容器。
- 创建SQL数据集:在Diagram选项卡下,点击新建数据集图标并选择SQL Query。
- 配置数据源:为数据集命名(例如
ProcessMind_Payroll_Extract)。将数据源设置为ApplicationDB_HCM(或您使用的特定HCM应用数据库连接)。类型保持为Standard SQL。 - 输入查询:复制下方Query部分提供的完整SQL脚本,并粘贴到SQL Query文本框中。确保不要包含任何Markdown格式。
- 定义参数:查询使用绑定变量
:p_start_date和:p_end_date。在数据模型的Parameters选项卡中创建这两个参数(类型为Date),用于筛选提取范围(例如依据ppa.EFFECTIVE_DATE)。 - 验证数据结构:点击确定。切换到数据模型编辑器中的数据选项卡。输入示例日期(例如
2023-01-01至2023-03-31),然后点击查看。确保输出包含PayrollRecord、ActivityName和EventTimestamp列。 - 保存数据模型:将模型保存到共享文件夹(例如
/Shared Folders/Custom/ProcessMining)。 - 创建导出报表:点击Create Report,选择刚才保存的数据模型。使用Report Wizard创建包含所有列的简单表格布局。取消选中“Show Grand Totals”。
- 导出为CSV:在Report Viewer中查看报表。点击操作菜单(齿轮图标)> Export > 数据 > CSV。
- 转换:打开CSV文件。如果日期未自动格式化,请确保其采用ISO 8601格式(
YYYY-MM-DD HH:MM:SS)。如果SQL粘贴正确,则无需进一步调整结构。 - 上传:将生成的CSV文件导入ProcessMind,并按照数据要求中的定义映射各列。
配置
- 数据源连接:必须使用
ApplicationDB_HCM,或具有PAY_和PER_架构读取权限的等效JNDI数据源。 - 日期范围:建议提取3至6个月的数据,以覆盖完整薪资周期。使用
:p_start_date和:p_end_date参数控制动态加载范围。 - Legislative Data Group(LDG):查询默认提取所有LDG。如果涉及多个国家,可添加筛选条件
AND ppa.LEGISLATIVE_DATA_GROUP_ID = [Your_LDG_ID],以分区提取数据。 - 性能:查询会访问高数据量表(
PAY_RUN_RESULTS、PAY_ASSIGNMENT_ACTIONS)。请勿将日期范围设置过宽,例如超过1年,以免BI Publisher超时。 - 安全性:运行报告的用户需要具备目标Payroll定义的Data Access Set权限。
a 示例查询 sql
SELECT
TO_CHAR(papf.PERSON_NUMBER) || '-' || ptp.PERIOD_NAME AS PayrollRecord,
'Time Card Submitted' AS ActivityName,
peef.CREATION_DATE AS EventTimestamp,
'Oracle HCM' AS SourceSystem,
peef.LAST_UPDATE_DATE AS LastDataUpdate,
pld.NAME AS LegislativeDataGroup,
org.NAME AS DepartmentName,
peef.LAST_UPDATED_BY AS ProcessingUser,
NULL AS GrossPayAmount,
ptp.PERIOD_NAME AS PayrollPeriodName,
NULL AS SlaProcessingDeadline,
'N' AS IsManualCorrection,
pg.PAYROLL_NAME AS PayGroup,
NULL AS ProcessDurationDays
FROM PAY_ELEMENT_ENTRIES_F peef
JOIN PER_ALL_ASSIGNMENTS_M paam ON peef.ASSIGNMENT_ID = paam.ASSIGNMENT_ID
AND peef.EFFECTIVE_START_DATE BETWEEN paam.EFFECTIVE_START_DATE AND paam.EFFECTIVE_END_DATE
JOIN PER_ALL_PEOPLE_F papf ON paam.PERSON_ID = papf.PERSON_ID
AND peef.EFFECTIVE_START_DATE BETWEEN papf.EFFECTIVE_START_DATE AND papf.EFFECTIVE_END_DATE
JOIN PAY_PAY_RELATIONSHIPS_DN pprd ON paam.PAYROLL_RELATIONSHIP_ID = pprd.PAYROLL_RELATIONSHIP_ID
JOIN PER_TIME_PERIODS ptp ON pprd.PAYROLL_ID = ptp.PAYROLL_ID
AND peef.EFFECTIVE_START_DATE BETWEEN ptp.START_DATE AND ptp.END_DATE
LEFT JOIN PER_LEGISLATIVE_DATA_GROUPS_VL pld ON pprd.LEGISLATIVE_DATA_GROUP_ID = pld.LEGISLATIVE_DATA_GROUP_ID
LEFT JOIN HR_ORGANIZATION_UNITS_F_TL org ON paam.ORGANIZATION_ID = org.ORGANIZATION_ID AND org.LANGUAGE = USERENV('LANG')
LEFT JOIN PAY_ALL_PAYROLLS_F pg ON pprd.PAYROLL_ID = pg.PAYROLL_ID
WHERE peef.CREATOR_TYPE = 'H'
AND peef.CREATION_DATE BETWEEN :p_start_date AND :p_end_date
UNION ALL
SELECT
TO_CHAR(papf.PERSON_NUMBER) || '-' || ptp.PERIOD_NAME AS PayrollRecord,
'Time Card Approved' AS ActivityName,
peef.EFFECTIVE_START_DATE AS EventTimestamp,
'Oracle HCM' AS SourceSystem,
peef.LAST_UPDATE_DATE AS LastDataUpdate,
pld.NAME,
org.NAME,
peef.LAST_UPDATED_BY,
NULL,
ptp.PERIOD_NAME,
NULL,
'N',
pg.PAYROLL_NAME,
NULL
FROM PAY_ELEMENT_ENTRIES_F peef
JOIN PER_ALL_ASSIGNMENTS_M paam ON peef.ASSIGNMENT_ID = paam.ASSIGNMENT_ID
AND peef.EFFECTIVE_START_DATE BETWEEN paam.EFFECTIVE_START_DATE AND paam.EFFECTIVE_END_DATE
JOIN PER_ALL_PEOPLE_F papf ON paam.PERSON_ID = papf.PERSON_ID
AND peef.EFFECTIVE_START_DATE BETWEEN papf.EFFECTIVE_START_DATE AND papf.EFFECTIVE_END_DATE
JOIN PAY_PAY_RELATIONSHIPS_DN pprd ON paam.PAYROLL_RELATIONSHIP_ID = pprd.PAYROLL_RELATIONSHIP_ID
JOIN PER_TIME_PERIODS ptp ON pprd.PAYROLL_ID = ptp.PAYROLL_ID
AND peef.EFFECTIVE_START_DATE BETWEEN ptp.START_DATE AND ptp.END_DATE
LEFT JOIN PER_LEGISLATIVE_DATA_GROUPS_VL pld ON pprd.LEGISLATIVE_DATA_GROUP_ID = pld.LEGISLATIVE_DATA_GROUP_ID
LEFT JOIN HR_ORGANIZATION_UNITS_F_TL org ON paam.ORGANIZATION_ID = org.ORGANIZATION_ID AND org.LANGUAGE = USERENV('LANG')
LEFT JOIN PAY_ALL_PAYROLLS_F pg ON pprd.PAYROLL_ID = pg.PAYROLL_ID
WHERE peef.CREATOR_TYPE = 'H'
AND peef.EFFECTIVE_START_DATE BETWEEN :p_start_date AND :p_end_date
UNION ALL
SELECT
TO_CHAR(papf.PERSON_NUMBER) || '-' || ptp.PERIOD_NAME AS PayrollRecord,
'Incentive Data Imported' AS ActivityName,
peef.CREATION_DATE AS EventTimestamp,
'Oracle HCM' AS SourceSystem,
peef.LAST_UPDATE_DATE AS LastDataUpdate,
pld.NAME,
org.NAME,
peef.LAST_UPDATED_BY,
NULL,
ptp.PERIOD_NAME,
NULL,
'N',
pg.PAYROLL_NAME,
NULL
FROM PAY_ELEMENT_ENTRIES_F peef
JOIN PER_ALL_ASSIGNMENTS_M paam ON peef.ASSIGNMENT_ID = paam.ASSIGNMENT_ID
AND peef.EFFECTIVE_START_DATE BETWEEN paam.EFFECTIVE_START_DATE AND paam.EFFECTIVE_END_DATE
JOIN PER_ALL_PEOPLE_F papf ON paam.PERSON_ID = papf.PERSON_ID
AND peef.EFFECTIVE_START_DATE BETWEEN papf.EFFECTIVE_START_DATE AND papf.EFFECTIVE_END_DATE
JOIN PAY_PAY_RELATIONSHIPS_DN pprd ON paam.PAYROLL_RELATIONSHIP_ID = pprd.PAYROLL_RELATIONSHIP_ID
JOIN PER_TIME_PERIODS ptp ON pprd.PAYROLL_ID = ptp.PAYROLL_ID
AND peef.EFFECTIVE_START_DATE BETWEEN ptp.START_DATE AND ptp.END_DATE
LEFT JOIN PER_LEGISLATIVE_DATA_GROUPS_VL pld ON pprd.LEGISLATIVE_DATA_GROUP_ID = pld.LEGISLATIVE_DATA_GROUP_ID
LEFT JOIN HR_ORGANIZATION_UNITS_F_TL org ON paam.ORGANIZATION_ID = org.ORGANIZATION_ID AND org.LANGUAGE = USERENV('LANG')
LEFT JOIN PAY_ALL_PAYROLLS_F pg ON pprd.PAYROLL_ID = pg.PAYROLL_ID
WHERE peef.CREATOR_TYPE IN ('B', 'F')
AND peef.CREATION_DATE BETWEEN :p_start_date AND :p_end_date
UNION ALL
SELECT
TO_CHAR(papf.PERSON_NUMBER) || '-' || ptp.PERIOD_NAME AS PayrollRecord,
CASE
WHEN ppa.ACTION_TYPE = 'R' AND paa.ACTION_STATUS = 'C' THEN 'Payroll Calculation Executed'
WHEN ppa.ACTION_TYPE = 'R' THEN 'Payroll Calculation Started'
WHEN ppa.ACTION_TYPE = 'Q' THEN 'QuickPay Executed'
WHEN ppa.ACTION_TYPE IN ('P', 'U') THEN 'Prepayments Calculated'
WHEN ppa.ACTION_TYPE = 'X' THEN 'Archive Results Generated'
WHEN ppa.ACTION_TYPE = 'M' THEN 'Bank Transfer Generated'
WHEN ppa.ACTION_TYPE IN ('Z', 'E') THEN 'Payment Executed'
WHEN ppa.ACTION_TYPE = 'T' THEN 'Costing Transferred'
ELSE 'Payroll Process Action'
END AS ActivityName,
ppa.CREATION_DATE AS EventTimestamp,
'Oracle HCM' AS SourceSystem,
paa.LAST_UPDATE_DATE AS LastDataUpdate,
pld.NAME,
org.NAME,
ppa.LAST_UPDATED_BY,
NULL,
ptp.PERIOD_NAME,
ptp.REGULAR_PAYMENT_DATE AS SlaProcessingDeadline,
'N',
pg.PAYROLL_NAME,
NULL
FROM PAY_PAYROLL_ACTIONS ppa
JOIN PAY_ASSIGNMENT_ACTIONS paa ON ppa.PAYROLL_ACTION_ID = paa.PAYROLL_ACTION_ID
JOIN PER_ALL_ASSIGNMENTS_M paam ON paa.ASSIGNMENT_ID = paam.ASSIGNMENT_ID
AND ppa.EFFECTIVE_DATE BETWEEN paam.EFFECTIVE_START_DATE AND paam.EFFECTIVE_END_DATE
JOIN PER_ALL_PEOPLE_F papf ON paam.PERSON_ID = papf.PERSON_ID
AND ppa.EFFECTIVE_DATE BETWEEN papf.EFFECTIVE_START_DATE AND papf.EFFECTIVE_END_DATE
JOIN PER_TIME_PERIODS ptp ON ppa.PAYROLL_ID = ptp.PAYROLL_ID
AND ppa.DATE_EARNED BETWEEN ptp.START_DATE AND ptp.END_DATE
LEFT JOIN PER_LEGISLATIVE_DATA_GROUPS_VL pld ON ppa.LEGISLATIVE_DATA_GROUP_ID = pld.LEGISLATIVE_DATA_GROUP_ID
LEFT JOIN HR_ORGANIZATION_UNITS_F_TL org ON paam.ORGANIZATION_ID = org.ORGANIZATION_ID AND org.LANGUAGE = USERENV('LANG')
LEFT JOIN PAY_ALL_PAYROLLS_F pg ON ppa.PAYROLL_ID = pg.PAYROLL_ID
WHERE ppa.ACTION_TYPE IN ('R', 'Q', 'P', 'U', 'X', 'M', 'Z', 'E', 'T')
AND ppa.EFFECTIVE_DATE BETWEEN :p_start_date AND :p_end_date
UNION ALL
SELECT
TO_CHAR(papf.PERSON_NUMBER) || '-' || ptp.PERIOD_NAME AS PayrollRecord,
'Audit Exception Flagged' AS ActivityName,
pml.CREATION_DATE AS EventTimestamp,
'Oracle HCM' AS SourceSystem,
pml.LAST_UPDATE_DATE AS LastDataUpdate,
pld.NAME,
org.NAME,
pml.LAST_UPDATED_BY,
NULL,
ptp.PERIOD_NAME,
NULL,
'Y',
pg.PAYROLL_NAME,
NULL
FROM PAY_MESSAGE_LINES pml
JOIN PAY_PAYROLL_ACTIONS ppa ON pml.PAYROLL_ACTION_ID = ppa.PAYROLL_ACTION_ID
LEFT JOIN PAY_ASSIGNMENT_ACTIONS paa ON ppa.PAYROLL_ACTION_ID = paa.PAYROLL_ACTION_ID
JOIN PER_ALL_ASSIGNMENTS_M paam ON paa.ASSIGNMENT_ID = paam.ASSIGNMENT_ID
AND ppa.EFFECTIVE_DATE BETWEEN paam.EFFECTIVE_START_DATE AND paam.EFFECTIVE_END_DATE
JOIN PER_ALL_PEOPLE_F papf ON paam.PERSON_ID = papf.PERSON_ID
AND ppa.EFFECTIVE_DATE BETWEEN papf.EFFECTIVE_START_DATE AND papf.EFFECTIVE_END_DATE
JOIN PER_TIME_PERIODS ptp ON ppa.PAYROLL_ID = ptp.PAYROLL_ID
AND ppa.DATE_EARNED BETWEEN ptp.START_DATE AND ptp.END_DATE
LEFT JOIN PER_LEGISLATIVE_DATA_GROUPS_VL pld ON ppa.LEGISLATIVE_DATA_GROUP_ID = pld.LEGISLATIVE_DATA_GROUP_ID
LEFT JOIN HR_ORGANIZATION_UNITS_F_TL org ON paam.ORGANIZATION_ID = org.ORGANIZATION_ID AND org.LANGUAGE = USERENV('LANG')
LEFT JOIN PAY_ALL_PAYROLLS_F pg ON ppa.PAYROLL_ID = pg.PAYROLL_ID
WHERE pml.MESSAGE_LEVEL IN ('E', 'W')
AND pml.CREATION_DATE BETWEEN :p_start_date AND :p_end_date
UNION ALL
SELECT
TO_CHAR(papf.PERSON_NUMBER) || '-' || ptp.PERIOD_NAME AS PayrollRecord,
'Payroll Record Corrected' AS ActivityName,
peef.LAST_UPDATE_DATE AS EventTimestamp,
'Oracle HCM' AS SourceSystem,
peef.LAST_UPDATE_DATE AS LastDataUpdate,
pld.NAME,
org.NAME,
peef.LAST_UPDATED_BY,
NULL,
ptp.PERIOD_NAME,
NULL,
'Y',
pg.PAYROLL_NAME,
NULL
FROM PAY_ELEMENT_ENTRIES_F peef
JOIN PER_ALL_ASSIGNMENTS_M paam ON peef.ASSIGNMENT_ID = paam.ASSIGNMENT_ID
AND peef.EFFECTIVE_START_DATE BETWEEN paam.EFFECTIVE_START_DATE AND paam.EFFECTIVE_END_DATE
JOIN PER_ALL_PEOPLE_F papf ON paam.PERSON_ID = papf.PERSON_ID
AND peef.EFFECTIVE_START_DATE BETWEEN papf.EFFECTIVE_START_DATE AND papf.EFFECTIVE_END_DATE
JOIN PAY_PAY_RELATIONSHIPS_DN pprd ON paam.PAYROLL_RELATIONSHIP_ID = pprd.PAYROLL_RELATIONSHIP_ID
JOIN PER_TIME_PERIODS ptp ON pprd.PAYROLL_ID = ptp.PAYROLL_ID
AND peef.EFFECTIVE_START_DATE BETWEEN ptp.START_DATE AND ptp.END_DATE
LEFT JOIN PER_LEGISLATIVE_DATA_GROUPS_VL pld ON pprd.LEGISLATIVE_DATA_GROUP_ID = pld.LEGISLATIVE_DATA_GROUP_ID
LEFT JOIN HR_ORGANIZATION_UNITS_F_TL org ON paam.ORGANIZATION_ID = org.ORGANIZATION_ID AND org.LANGUAGE = USERENV('LANG')
LEFT JOIN PAY_ALL_PAYROLLS_F pg ON pprd.PAYROLL_ID = pg.PAYROLL_ID
WHERE peef.LAST_UPDATE_DATE > peef.CREATION_DATE
AND peef.LAST_UPDATE_DATE BETWEEN :p_start_date AND :p_end_date
UNION ALL
SELECT
TO_CHAR(papf.PERSON_NUMBER) || '-' || ptp.PERIOD_NAME AS PayrollRecord,
'Payroll Run Approved' AS ActivityName,
ppa.LAST_UPDATE_DATE AS EventTimestamp,
'Oracle HCM' AS SourceSystem,
ppa.LAST_UPDATE_DATE AS LastDataUpdate,
pld.NAME,
org.NAME,
ppa.LAST_UPDATED_BY,
NULL,
ptp.PERIOD_NAME,
NULL,
'N',
pg.PAYROLL_NAME,
NULL
FROM PAY_PAYROLL_ACTIONS ppa
JOIN PAY_ASSIGNMENT_ACTIONS paa ON ppa.PAYROLL_ACTION_ID = paa.PAYROLL_ACTION_ID
JOIN PER_ALL_ASSIGNMENTS_M paam ON paa.ASSIGNMENT_ID = paam.ASSIGNMENT_ID
AND ppa.EFFECTIVE_DATE BETWEEN paam.EFFECTIVE_START_DATE AND paam.EFFECTIVE_END_DATE
JOIN PER_ALL_PEOPLE_F papf ON paam.PERSON_ID = papf.PERSON_ID
AND ppa.EFFECTIVE_DATE BETWEEN papf.EFFECTIVE_START_DATE AND papf.EFFECTIVE_END_DATE
JOIN PER_TIME_PERIODS ptp ON ppa.PAYROLL_ID = ptp.PAYROLL_ID
AND ppa.DATE_EARNED BETWEEN ptp.START_DATE AND ptp.END_DATE
LEFT JOIN PER_LEGISLATIVE_DATA_GROUPS_VL pld ON ppa.LEGISLATIVE_DATA_GROUP_ID = pld.LEGISLATIVE_DATA_GROUP_ID
LEFT JOIN HR_ORGANIZATION_UNITS_F_TL org ON paam.ORGANIZATION_ID = org.ORGANIZATION_ID AND org.LANGUAGE = USERENV('LANG')
LEFT JOIN PAY_ALL_PAYROLLS_F pg ON ppa.PAYROLL_ID = pg.PAYROLL_ID
WHERE ppa.ACTION_TYPE = 'R'
AND paa.ACTION_STATUS = 'C'
AND ppa.EFFECTIVE_DATE BETWEEN :p_start_date AND :p_end_date
UNION ALL
SELECT
TO_CHAR(papf.PERSON_NUMBER) || '-' || ptp.PERIOD_NAME AS PayrollRecord,
'Pay Slip Published' AS ActivityName,
(ppa.CREATION_DATE + 1) AS EventTimestamp,
'Oracle HCM' AS SourceSystem,
ppa.LAST_UPDATE_DATE AS LastDataUpdate,
pld.NAME,
org.NAME,
ppa.LAST_UPDATED_BY,
NULL,
ptp.PERIOD_NAME,
NULL,
'N',
pg.PAYROLL_NAME,
NULL
FROM PAY_PAYROLL_ACTIONS ppa
JOIN PAY_ASSIGNMENT_ACTIONS paa ON ppa.PAYROLL_ACTION_ID = paa.PAYROLL_ACTION_ID
JOIN PER_ALL_ASSIGNMENTS_M paam ON paa.ASSIGNMENT_ID = paam.ASSIGNMENT_ID
AND ppa.EFFECTIVE_DATE BETWEEN paam.EFFECTIVE_START_DATE AND paam.EFFECTIVE_END_DATE
JOIN PER_ALL_PEOPLE_F papf ON paam.PERSON_ID = papf.PERSON_ID
AND ppa.EFFECTIVE_DATE BETWEEN papf.EFFECTIVE_START_DATE AND papf.EFFECTIVE_END_DATE
JOIN PER_TIME_PERIODS ptp ON ppa.PAYROLL_ID = ptp.PAYROLL_ID
AND ppa.DATE_EARNED BETWEEN ptp.START_DATE AND ptp.END_DATE
LEFT JOIN PER_LEGISLATIVE_DATA_GROUPS_VL pld ON ppa.LEGISLATIVE_DATA_GROUP_ID = pld.LEGISLATIVE_DATA_GROUP_ID
LEFT JOIN HR_ORGANIZATION_UNITS_F_TL org ON paam.ORGANIZATION_ID = org.ORGANIZATION_ID AND org.LANGUAGE = USERENV('LANG')
LEFT JOIN PAY_ALL_PAYROLLS_F pg ON ppa.PAYROLL_ID = pg.PAYROLL_ID
WHERE ppa.ACTION_TYPE = 'X'
AND ppa.EFFECTIVE_DATE BETWEEN :p_start_date AND :p_end_date
UNION ALL
SELECT
TO_CHAR(papf.PERSON_NUMBER) || '-' || ptp.PERIOD_NAME AS PayrollRecord,
'Tax Filing Completed' AS ActivityName,
ppa.CREATION_DATE AS EventTimestamp,
'Oracle HCM' AS SourceSystem,
ppa.LAST_UPDATE_DATE AS LastDataUpdate,
pld.NAME,
org.NAME,
ppa.LAST_UPDATED_BY,
NULL,
ptp.PERIOD_NAME,
NULL,
'N',
pg.PAYROLL_NAME,
NULL
FROM PAY_PAYROLL_ACTIONS ppa
JOIN PAY_ASSIGNMENT_ACTIONS paa ON ppa.PAYROLL_ACTION_ID = paa.PAYROLL_ACTION_ID
JOIN PER_ALL_ASSIGNMENTS_M paam ON paa.ASSIGNMENT_ID = paam.ASSIGNMENT_ID
AND ppa.EFFECTIVE_DATE BETWEEN paam.EFFECTIVE_START_DATE AND paam.EFFECTIVE_END_DATE
JOIN PER_ALL_PEOPLE_F papf ON paam.PERSON_ID = papf.PERSON_ID
AND ppa.EFFECTIVE_DATE BETWEEN papf.EFFECTIVE_START_DATE AND papf.EFFECTIVE_END_DATE
JOIN PER_TIME_PERIODS ptp ON ppa.PAYROLL_ID = ptp.PAYROLL_ID
AND ppa.DATE_EARNED BETWEEN ptp.START_DATE AND ptp.END_DATE
LEFT JOIN PER_LEGISLATIVE_DATA_GROUPS_VL pld ON ppa.LEGISLATIVE_DATA_GROUP_ID = pld.LEGISLATIVE_DATA_GROUP_ID
LEFT JOIN HR_ORGANIZATION_UNITS_F_TL org ON paam.ORGANIZATION_ID = org.ORGANIZATION_ID AND org.LANGUAGE = USERENV('LANG')
LEFT JOIN PAY_ALL_PAYROLLS_F pg ON ppa.PAYROLL_ID = pg.PAYROLL_ID
WHERE ppa.ACTION_TYPE = 'Z'
AND ppa.CREATION_DATE BETWEEN :p_start_date AND :p_end_date 立即优化Oracle HCM中的薪资处理
将薪资处理周期缩短30%,消除瓶颈。
无需信用卡,几分钟即可完成设置。