您的薪资处理数据模板
您的薪资处理数据模板
- 已为薪资分析优化的数据字段
- 全面的活动跟踪,用于生命周期映射
- Oracle HCM 云薪资详细提取指南
薪资处理属性
| 名称 | 描述 | ||
|---|---|---|---|
| 事件timestamp EventTimestamp | 活动发生的精确日期和时间。 | ||
| 描述 记录活动发生的具体时刻。这对于计算持续时间、前置时间以及识别瓶颈至关重要。\n\n对于自动化步骤,这是系统执行时间。对于审批等人工步骤,则是事务日志中记录的用户操作时间戳。 为何重要 对于按时间顺序排列事件以及计算所有基于时间的 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 | 薪资周期中执行的具体步骤或事件。 | ||
| 描述 此属性捕获薪资流程中发生的事件名称。例如:“工时卡已提交”、“薪资计算已开始”和“支付已执行”。\n\n它是流程发现和变体分析的主要维度。在 Oracle HCM Cloud 中,这通常源自薪资操作表中的操作类型(Action Type)或操作状态(Action Status)。 为何重要 这定义了流程的“内容”,从而可以重建流程图。 获取方式 源自 PAY_PAYROLL_ACTIONS 中的 ACTION_TYPE 代码或审计轨迹中的状态变更。 示例 薪资计算已开始工时卡已批准银行转账已生成标记审计异常 | |||
| 源系统 SourceSystem | event 发起的系统名称。 | ||
| 描述 识别生成数据点的软件或模块。对于此流程,主要值为 'Oracle HCM Cloud Payroll'。 但在复杂环境中,这可能用于区分核心薪资引擎、考勤模块或外部银行接口。 为何重要 提供血缘上下文,尤其是在集成来自计时或银行子系统的数据时。 获取方式 在提取期间硬编码或源自接口 ID。 示例 Oracle HCM Cloud PayrollOracle Time and Labor外部银行接口 | |||
| 薪资记录 PayrollRecord | 代表特定薪资期内员工的唯一标识符。 | ||
| 描述 薪资记录(Payroll Record)作为流程挖掘分析的核心案例标识符(case identifier)。它是一个组合键或唯一键,由员工分配标识符和薪资期间标识符拼接而成。\n\n此属性将与特定周期内向单个员工支付相关的所有活动进行分组,从最初的工时卡提交到最终的银行转账和税务申报。它确保分析能够区分同一员工在 1 月和 2 月的不同支付情况。 为何重要 它充当 Case ID,将所有分散事件绑定到一个流程实例中进行分析。 获取方式 根据 PAY_ASSIGNMENT_ACTIONS 或 Oracle HCM 中的人员编号和薪资周期名称组合构建。 示例 EMP1001-2023-M01EMP5992-2023-W42300000018273645US-NY-A123-JAN23 | |||
| SLA 处理截止日期 SlaProcessingDeadline | 必须执行支付的目标日期/时间。 | ||
| 描述 存储薪资发放的合同或法律截止日期。此属性将与“支付已执行”时间戳进行对比。\n\n它用于计算“SLA 处理截止日期达成率”KPI,并识别存在风险的薪资组。 为何重要 衡量流程在及时性方面成功或失败的主要基准。 获取方式 通常是薪资定义上的配置字段(DFF),或根据支票日期减去 X 天推导出。 示例 2023-10-28T17:00:00Z2023-11-30T17:00:00Z | |||
| 处理用户 ProcessingUser | 执行活动的人员的用户 ID 或姓名。 | ||
| 描述 捕获触发活动的薪资专员、经理或系统账号的身份。这为“薪资专员工作量分布”仪表板提供支持。 它有助于识别薪资团队中的资源瓶颈和培训需求。 为何重要 支持资源生产力分析和工作量平衡。 获取方式 事务表中的 CREATED_BY 或 LAST_UPDATED_BY 列。 示例 sysadminj.smithpayroll_batch_userm.doe | |||
| 是否手动修正 IsManualCorrection | 指示活动是否涉及手动干预的标志。 | ||
| 描述 布尔标志,对于“执行数据修正”或“薪资记录已修正”等活动设为 true。 它用于计算“手动数据修正率”和“首轮薪资准确率”等 KPI。 为何重要 区分直通式处理与手动返工。 获取方式 源自活动名称或指示调整的特定操作类型(例如 QuickPay、余额调整)。 示例 truefalse | |||
| 法定数据组 LegislativeDataGroup | 按国家或监管环境对薪资数据进行分区。 | ||
| 描述 在 Oracle HCM 云中,法定数据组 (LDG) 对薪资及相关数据进行分区。它通常对应于一个国家或特定地区的法律。 此属性对于按国家/地区(例如美国薪资 vs. 英国薪资)过滤流程分析至关重要,且通常映射到“国家/地区”通用属性。 为何重要 合规规则和流程流通常因司法管辖区而异。 获取方式 与法规数据组定义联接的 PAY_ALL_PAYROLLS_F 表。 示例 美国法规数据组 (LDG)英国法规数据组 (LDG)法国薪资 | |||
| 流程持续天数 ProcessDurationDays | 从初始化到支付的总时长。 | ||
| 描述 从第一个活动到“支付已执行”活动之间的计算时长。用于“端到端薪资周期时间”仪表板。\n\n此指标是衡量薪资职能处理速度的高层级健康检查指标。 为何重要 流程效率的高层 KPI。 获取方式 计算方式:时间戳(支付已执行) - 时间戳(开始)。 示例 3.55.00.5 | |||
| 税前工资金额 GrossPayAmount | 该期间计算出的总薪资额。 | ||
| 描述 代表该周期内计算出的总薪资货币价值。用于“税务与福利计算准确性”和“激励集成”分析。\n\n它允许分析师将高价值支付与处理时间或错误率关联起来。 为何重要 为流程挖掘分析提供财务背景。 获取方式 用于汇总总工资余额的 PAY_RUN_RESULT_VALUES 表。 示例 5000.002350.5010000.00 | |||
| 薪资期间名称 PayrollPeriodName | 薪资运行时间间隔的具体名称。 | ||
| 描述 识别具体的周期,例如“2024 年 1 月月结”或“第 42 周周结”。这对于“SLA 截止日期合规监控器”至cil 关重要。 它有助于将单个员工案例分组到各自的批次运行中,以便进行汇总报告。 为何重要 批次级分析和 SLA 跟踪的基础。 获取方式 PAY_TIME_PERIODS 表或薪资定义上的时间段名称。 示例 2023 10 月月结2023 第 42 周周结2023 年 12 月奖金运行 | |||
| 薪资组 PayGroup | 薪资处理中员工的逻辑分组。 | ||
| 描述 代表员工所属的具体薪资定义(例如:“制造业周薪”、“公司月薪”)。\n\n此属性是几乎所有仪表板的核心,支持跨不同薪资周期和频率进行性能对比。 为何重要 驱动薪资调度的主要配置对象。 获取方式 PAY_ALL_PAYROLLS_F 表 (薪资名称)。 示例 美国半月薪英国月薪工会周薪 | |||
| 部门名称 DepartmentName | 员工工作的组织单位。 | ||
| 描述 识别与薪资记录关联的员工所属部门。这对于“工时表审批效率”仪表板至关重要。 通过按部门细分数据,分析师可以识别哪些业务单位在批准工时表方面持续落后,从而拖累了整体薪资运行。 为何重要 支持对与管理审批相关的延迟进行根因分析。 获取方式 源自薪资运行期间有效的员工分配记录。 示例 北美销售部工程部人力资源物流 | |||
| SLA 状态 SlaStatus | SLA 达成情况的分类状态(已达成/已逾期)。 | ||
| 描述 通过比较“支付已执行”时间戳与“SLA 处理截止日期”得出。值可能包括“准时”、“有风险”或“已违约”。 这通过将 Case 分组到不同的绩效桶中,简化了“SLA 截止日期合规监控器”的报表。 为何重要 将复杂的时间对比简化为可操作的类别。 获取方式 比较事件时间戳与 SLA 截止日期的计算逻辑。 示例 已达成已超期临近违约 | |||
| 员工类型 EmployeeType | 员工分类(例如:月薪制、小时工、承包商)。 | ||
| 描述 对员工记录进行分类。这对于“数字工资单发布滞后”仪表板至关重要,因为不同的员工类型可能有不同的处理规则或紧急程度。 它有助于过滤分析,以比较不同员工细分群体之间的流程绩效。 为何重要 不同的员工类型通常遵循不同的流程变体。 获取方式 PER_ALL_ASSIGNMENTS_M 中的分配类别或雇用条款。 示例 全职月薪制兼职时薪合同工高管 | |||
| 审计异常类型 AuditExceptionType | 审计期间标记的错误或警告类别。 | ||
| 描述 对“标记审计异常”活动期间发现的具体问题进行分类(例如“净工资为负”、“缺少税务 ID”)。 此属性通过定位常见的数据质量问题,为“审计异常与修正分析”仪表板提供支持。 为何重要 对于返工循环的根因分析至关重要。 获取方式 薪资处理日志或异常报告中的消息或错误代码列。 示例 实发工资为负数缺少社会安全号码 (SSN)无效银行明细超过加班限制 | |||
| 税务管辖区 TaxJurisdiction | 税务申报的具体州、省或地区。 | ||
| 描述 指示与薪资记录相关的首要税务机关(例如 'CA' 代表加利福尼亚,'NY' 代表纽约)。这支持“税务合规处理时长”仪表板。 它有助于识别特定地区是否具有更复杂或更慢的计税和申报流程。 为何重要 按监管复杂度细分绩效。 获取方式 源自员工的税务卡或工作地点地址。 示例 CA-加利福尼亚NY-纽约TX-德克萨斯州美国联邦 | |||
| 追溯变更标志 RetroactiveChangeFlag | 指示薪资运行是否包含追溯性支付。 | ||
| 描述 布尔指示符,如果此记录中处理了“追溯薪资” (Retropay) 元素,则为 true。这有助于解释“流程路径变体对比”中较长的处理时间或审计异常。 追溯性变更通常会触发跨越之前周期的复杂重新计算。 为何重要 识别自然需要更多处理时间的复杂案例。 获取方式 PAY_ELEMENT_ENTRIES 中存在“Retropay(追溯支付)”要素分录。 示例 truefalse | |||
| 预览迭代次数 PreviewIterationCount | 定案前结果被预览的次数。 | ||
| 描述 一个计数器,每当同一个 Case 出现“薪资结果预览”活动时就会递增。 这是“薪资预览迭代跟踪器”仪表板的直接衡量指标,反映了审批前的返工量或迟疑程度。 为何重要 量化验证阶段的效率。 获取方式 在数据转换期间通过计算每个 Case ID 的特定活动发生次数得出。 示例 1350 | |||
薪资处理活动
| 活动 | 描述 | ||
|---|---|---|---|
| 已执行付款 | 支付已处理的最终确认。在 Oracle 中,这对应于支付流程的完成或现金管理(Cash Management)中的对账。 | ||
| 为何重要 SLA 合规性的主要时间戳。用于判断员工是否获得了准时支付。 获取方式 可以从银行转账操作的生效日期推断,或通过现金管理对账日志 (CE_STATEMENT_LINES) 明确获取。 捕获 通过支付操作或对账事件的生效日期记录 事件类型 explicit | |||
| 薪资计算已开始 | 针对特定薪资定义和期间启动主薪资运行流程。这标志着从数据收集阶段过渡到处理阶段。 | ||
| 为何重要 确定重度处理窗口的开始。用于计算薪资技术执行的总周期时间。 获取方式 查询 ACTION_TYPE 为 R(运行)或 Q(QuickPay)且 ACTION_STATUS 标记为已开始(或根据创建日期推断)的 PAY_PAYROLL_ACTIONS 表。 捕获 当插入 PAY_PAYROLL_ACTIONS 记录时记录。 事件类型 explicit | |||
| 薪资计算已执行 | 薪资计算(Calculate Payroll)流程的成功完成,包括从总额到净额的计算。此事件表示已完成该分配的收入、扣款和税费计算。 | ||
| 为何重要 一个重要里程碑,表示数据已准备好进行验证。此环节耗时过长可能预示着系统性能问题或复杂的快速公式 (Fast Formulas)。 获取方式 联接 PAY_PAYROLL_REL_ACTIONS 和 PAY_PAYROLL_ACTIONS,查询 ACTION_TYPE 为 R 或 Q 且 ACTION_STATUS 变为 C(已完成)的记录。 捕获 当薪资计算操作状态更新为已完成时记录。 事件类型 explicit | |||
| 银行转账已生成 | 生成电子转账 (EFT) 文件或类似的付款输出。这是创建银行指令文件的技术步骤。 | ||
| 为何重要 衡量付款文件生成的周期时间。此处的延迟可能导致错过银行的结算截止时间。 获取方式 查询 ACTION_TYPE 为 M(磁带)、E(电子转账)或 C(支票开具)的 PAY_PAYROLL_ACTIONS。 捕获 当电子转账(EFT)/支票操作完成时记录。 事件类型 explicit | |||
| 预付款已计算 | 执行预付款流程,将实发工资分配给员工选择的付款方式(支票、电子转账等)。这验证了计算出的金额是否确实可以支付。 | ||
| 为何重要 计算与发放之间的桥梁。此处的失败通常意味着银行信息缺失或付款方式无效。 获取方式 查询 ACTION_TYPE 为 P(预付款)且状态为已完成的 PAY_PAYROLL_ACTIONS。 捕获 当预付款操作完成时记录。 事件类型 explicit | |||
| QuickPay 已执行 | 执行单人薪资计算 (QuickPay),通常用于验证修正。这可作为“薪资结果已预览”活动的代理。 | ||
| 为何重要 单人频繁执行 QuickPay 表明薪资处理采用了“试错法”而非 获取方式 查询 ACTION_TYPE 为 Q(QuickPay)的 PAY_PAYROLL_ACTIONS。按每个薪资期、每位员工统计实例数量。 捕获 当 PAY_PAYROLL_ACTIONS 中记录 QuickPay 操作时记录 事件类型 explicit | |||
| 工时卡已批准 | 确认提交的时间数据已由经理审核并授权。此状态变更会触发数据传输至薪资要素分录。 | ||
| 为何重要 对于衡量“经理审批前置时间”至关重要。此处的延误是导致后续周期出现追溯补发调整的主要原因。 获取方式 查询状态变为“已批准”的 HWM_TM_REC_GRP_DTLS 表或 HXT_TIMECARDS 视图。比较批准时间戳与提交时间戳。 捕获 当 Time and Labor 中的状态变更为已批准时记录。 事件类型 explicit | |||
| 工时卡已提交 | 员工或经理提交考勤数据以供处理的初始事件。在 Oracle HCM 中,当 Time and Labor 模块中的工时卡状态变为“已提交”时,系统会捕获此事件。 | ||
| 为何重要 标志着原始数据进入薪资处理流水线。此处的延迟会产生连锁反应,缩短薪资专员验证计算结果的时间窗口。 获取方式 查询状态变为“已提交”的 HWM_TM_REC_GRP_DTLS 表或 HXT_TIMECARDS 视图。使用提交时间戳。 捕获 当 Time and Labor 中的状态变更为已提交时记录。 事件类型 explicit | |||
| 工资单已发布 | 工资单文档在自服务(Self Service)中对员工可见的时刻。这发生在归档程序之后,可能还涉及特定的“生成工资单”流程。 | ||
| 为何重要 影响员工满意度。支付与工资单可用之间的长时间滞后会产生大量服务单。 获取方式 查询证明文件表(HR_DOCUMENTS_OF_RECORD)或 PAY_PAYROLL_ACTIONS 中生成工资单流程的完成情况。 捕获 当工资单 PDF 生成流程完成时记录。 事件类型 explicit | |||
| 已生成归档结果 | “归档定期薪资结果”流程的完成。此快照有效地锁定了用于报表和工资单生成的数据。 | ||
| 为何重要 生成工资单和法定报告的技术前提,确认数据已最终确定。 获取方式 查询 ACTION_TYPE 为 X(归档)且状态为已完成的 PAY_PAYROLL_ACTIONS。 捕获 当归档操作完成时记录。 事件类型 explicit | |||
| 成本核算已转移 | 将薪资成本结果过账至总账。这代表了薪资周期的财务会计关闭。 | ||
| 为何重要 确保财务合规和劳动力成本的准确记账。延误会导致财务部门无法结账。 获取方式 查询 ACTION_TYPE 为 T(过账至总账)且状态为已完成的 PAY_PAYROLL_ACTIONS。 捕获 当过账至总账(Transfer to GL)流程完成时记录。 事件类型 explicit | |||
| 标记审计异常 | 在薪资计算或验证阶段记录错误或警告消息。这捕获了需要人工干预的特定验证失败。 | ||
| 为何重要 对于识别数据质量问题至关重要。大量的异常会增加手动工作量和 SLA 违约风险。 获取方式 查询链接到特定 PAY_PAYROLL_REL_ACTION_ID 的 PAY_MESSAGE_LINES 表。该表存储了运行期间产生的错误和警告。 捕获 当有记录插入 PAY_MESSAGE_LINES 时记录。 事件类型 explicit | |||
| 激励数据已导入 | 通过批量加载程序或 HDL 导入为奖金或佣金等浮动薪酬创建要素分录。这代表了将外部薪酬数据集成到薪资计算运行中。 | ||
| 为何重要 监控浮动薪酬的集成速度。导入延迟通常会迫使系统进行补充薪资计算或人工修正。 获取方式 查询 PAY_BATCH_HEADERS 以确认导入是否完成,或通过特定的源系统引用跟踪 PAY_ELEMENT_ENTRIES_F 的创建情况。 捕获 当批量要素录入流程成功完成时记录。 事件类型 explicit | |||
| 税务申报已完成 | 生成法定税务文件(例如:第三方季度税务文件)。这确保了该薪资期的监管合规性。 | ||
| 为何重要 对于“税务合规处理时长”KPI 至关重要。此环节失败会导致罚款。 获取方式 在 PAY_PAYROLL_ACTIONS 中查询与税务报告相关的特定法规数据组操作(例如:美国第三方税务申报)。 捕获 当特定税务报告流程完成时记录。 事件类型 explicit | |||
| 薪资计算已批准 | 在薪资仪表板中对薪资清册或流程进行的正式批准。这通常发生在验证报告审核之后、银行文件生成之前。 | ||
| 为何重要 代表管理层签核。计算与批准之间的时间即为验证窗口。 获取方式 在定义的薪资流程模式中,查询 PAY_REQ_FLOW_INSTANCES 的状态变更或特定任务的完成情况。 捕获 当流程实例状态变更为已完成/已批准时记录。 事件类型 explicit | |||
| 薪资记录已修正 | 在初始薪资计算后、最终定案前对要素分录或分配数据进行的人工更新。此活动代表了修复错误或异常所需的返工作业。 | ||
| 为何重要 指示流程效率低下和数据质量问题。减少此类活动是提高“首轮薪资准确率”的关键。 获取方式 通过识别 PAY_ELEMENT_ENTRIES_F 的更新推断得出,其中最后更新日期介于初始薪资运行日期和预付款日期之间。 捕获 比较元素条目更新时间戳与薪资运行时间戳 事件类型 inferred | |||
提取指南
步骤
访问数据交换:使用具有“人力资本管理集成专家”角色的用户登录 Oracle HCM 云。导航至“我的客户组”>“数据交换”>“提取定义”。
创建新提取:点击“+”图标创建新提取。命名为 'ProcessMind_Payroll_Extract'。选择“薪资”作为使用者,选择“人力资源归档”作为类别,以确保能够访问历史薪资操作数据。
定义数据组:基于用户实体
PAY_PAYROLL_REL_UE(薪资关系)创建一个根数据组。这会将提取定位到员工的薪资关系。为PAY_ACTION_INFORMATION_UE、PAY_ELEMENT_ENTRY_UE和HWM_MEASURE_DAY_V_UE(用于工时)创建子数据组。配置提取记录:在数据组中定义记录以平整层次结构数据。您必须为每个活动类型创建特定记录(例如,一个记录过滤“工时表”事件,另一个过滤“运行结果”)。
通过 FastFormula 或 BIP 实现 SQL 逻辑:由于将层次化的薪资数据转换为线性事件日志非常复杂,最稳健的方法是使用“提取传送选项”来调用 BI Publisher 报表。这允许您使用下方“查询”部分提供的 SQL 作为数据模型。这优于创建统一事件日志的系统自带 GUI 过滤方式。
创建 BI Publisher 数据模型:导航至“工具”>“报表和分析”>“浏览目录”。创建一个新的数据模型。粘贴下方提供的 SQL 查询。定义
bind_start_date和bind_end_date参数。将提取链接到 BIP:在提取定义的“传送”选项卡中创建一个传送选项。选择“PDF”或“XML”作为输出类型(ProcessMind 偏好 CSV,但您可以转换 BIP 输出)。选择您在上一步中创建的 BI Publisher 报表。
定义参数:在提取执行树中,添加“开始日期”和“结束日期”参数,以便动态传递给 BI Publisher 查询。
验证并提交:验证提取定义以检查错误。点击“提交提取”。输入参数(例如过去 90 天)。
监控流程:进入“查看提取结果”。等待状态变为“成功”。
下载输出:下载生成的 XML/CSV 文件。打开它以验证结构是否包含所需列:PayrollRecord、ActivityName、EventTimestamp 等。
为 ProcessMind 格式化:如果输出为 XML,请将其转换为扁平 CSV 文件,确保标题符合“要包含的属性”要求。将结果文件上传到 ProcessMind。
配置
- 提取模式:仅增量提取 vs. 全量提取。初始加载时请使用全量提取。对于每日更新,请基于“最后更新日期”配置“仅增量”。
- 法定数据组 (LDG):如果您的实例支持多个国家/地区,强烈建议按 LDG 进行过滤,因为不同法规的薪资定义有所不同。
- 日期范围:将
bind_start_date和bind_end_date设置为至少涵盖 3-6 个月,以便 Process Mining 捕获完整的循环时间。 - 块大小:对于高业务量的薪资处理(10k+ 员工),请在提取定义中将块大小设置为 2000,以防止超时错误。
- 生效日期:薪资表具有日期时效性。查询逻辑显式处理
effective_start_date和effective_end_date,以确保获取正确的历史版本记录。 - 安全性:执行用户必须拥有相应的数据安全配置文件,允许查看用于分析的所有薪资和部门数据。
a 查询示例 config
/* 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 云环境,导航至工具 > 报表和分析。点击浏览目录以打开 BI Publisher 界面。
- 创建数据模型:点击左上角的新建,然后选择数据模型。这是存放 SQL 提取逻辑的容器。
- 创建 SQL 数据集:在图表选项卡下,点击新建数据集图标并选择 SQL 查询。
- 配置数据源:命名数据集(例如
ProcessMind_Payroll_Extract)。将数据源设置为ApplicationDB_HCM(或您特定的 HCM 应用程序数据库连接)。类型保留为“标准 SQL”。 - 输入查询:复制下方“查询”部分提供的完整 SQL 脚本,并将其粘贴到 SQL 查询文本框中。确保不包含任何 Markdown 格式。
- 定义参数:查询使用绑定变量
:p_start_date和:p_end_date。在数据模型的参数选项卡中,创建这两个参数(日期类型),以便按范围过滤提取(例如基于ppa.EFFECTIVE_DATE)。 - 验证数据结构:点击确定。切换到数据模型编辑器中的数据选项卡。输入示例日期(例如
2023-01-01至2023-03-31)并点击查看。确保输出包含带有PayrollRecord、ActivityName和EventTimestamp的行。 - 保存数据模型:将模型保存在共享文件夹中(例如
/Shared Folders/Custom/ProcessMining)。 - 创建导出报表:点击创建报表,选择您刚刚保存的数据模型。使用报表向导创建一个包含所有列的简单表格布局。取消勾选“显示总计”。
- 导出为 CSV:在报表查看器中查看报表。点击操作菜单(齿轮图标) > 导出 > 数据 > 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参数来控制动态加载。 - 法定数据组 (LDG):查询默认提取所有 LDG。如果您运行多个国家/地区的数据,请考虑添加过滤条件
AND ppa.LEGISLATIVE_DATA_GROUP_ID = [Your_LDG_ID]以对数据进行分区。 - 性能:查询涉及高数据量的表(
PAY_RUN_RESULTS、PAY_ASSIGNMENT_ACTIONS)。请确保日期范围不要过宽(例如 >1 年),以防止 BI Publisher 出现超时错误。 - 安全性:运行报告的用户需要具有目标薪资定义的“数据访问集”权限。
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