您的薪资处理数据模板
您的薪资处理数据模板
- 适用于薪资分析的数据字段
- 完整跟踪活动,梳理生命周期
- 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 | 薪资周期中执行的具体步骤或事件。 | ||
| 说明 此属性记录薪资流程中发生的事件名称,例如“工时卡已提交”“薪资计算已启动”和“付款已执行”。 它是流程发现和变体分析的主要维度。在Oracle HCM Cloud中,此属性通常根据薪资操作表中的操作类型或操作状态得出。 重要性 此属性定义流程中的“做什么”,以便还原流程图。 获取途径 根据PAY_PAYROLL_ACTIONS中的ACTION_TYPE代码或审计跟踪中的状态变更得出。 示例 薪资计算已启动工时卡已批准银行转账文件已生成已标记审计异常 | |||
| 源系统 SourceSystem | 事件来源系统的名称。 | ||
| 说明 标识生成该数据点的软件或模块。对于此流程,主要取值为“Oracle HCM Cloud Payroll”。 在复杂的系统环境中,此属性还可用于区分核心薪资引擎、工时与劳动力管理模块或外部银行接口。 重要性 提供数据沿袭信息,尤其适用于整合考勤或银行子系统的数据。 获取途径 在提取时硬编码,或根据接口ID生成。 示例 Oracle HCM Cloud PayrollOracle Time and Labor外部银行接口 | |||
| 薪资记录 PayrollRecord | 用于标识特定薪资周期内员工的唯一标识符。 | ||
| 说明 薪资记录是流程挖掘分析中的核心案例标识符,由员工任职关系标识符和薪资周期标识符组合而成,也可以是唯一键。 此属性将特定周期内支付给单名员工的所有相关活动归为一组,涵盖从提交工时卡到最终银行转账和税务申报的全过程。借此可区分同一员工在1月和2月收到的薪资。 重要性 它作为案例ID,将分散的事件关联起来,形成一个供分析的流程实例。 获取途径 根据PAY_ASSIGNMENT_ACTIONS构建,或由Oracle HCM中的人员编号和薪资周期名称组合而成。 示例 EMP1001-2023-M01EMP5992-2023-W42300000018273645US-NY-A123-JAN23 | |||
| SLA处理截止时间 SlaProcessingDeadline | 必须完成付款的目标日期和时间。 | ||
| 说明 记录薪资发放的合同或法定截止时间。此属性会与“付款执行时间戳”进行比较。 可用于计算“SLA处理截止时间达成率”KPI,并识别有风险的薪资组。 重要性 衡量流程是否按时完成的主要基准。 获取途径 通常是薪资定义中的配置字段(DFF),或根据支票日期减去X天计算得出。 示例 2023-10-28T17:00:00Z2023-11-30T17:00:00Z | |||
| 处理用户 ProcessingUser | 执行活动的人员的用户ID或姓名。 | ||
| 说明 记录触发活动的薪资专员、经理或系统账户身份。此属性支持“薪资专员工作量分布”仪表板。 有助于发现薪资团队的资源瓶颈和培训需求。 重要性 支持资源生产率分析和工作量平衡。 获取途径 交易表中的CREATED_BY或LAST_UPDATED_BY列。 示例 系统管理员j.smith薪资批处理用户m.doe | |||
| 是否为手动更正 IsManualCorrection | 标记活动是否涉及人工干预。 | ||
| 说明 布尔标记。对于“已执行数据更正”或“已更正薪资记录”等活动,该值为true。 可用于计算“手动数据更正率”和“薪资首次处理准确率”KPI。 重要性 区分端到端自动处理与人工返工。 获取途径 根据活动名称或表示调整的特定操作类型生成,例如QuickPay、余额调整。 示例 truefalse | |||
| 税前工资总额 GrossPayAmount | 该期间计算得出的税前工资总额。 | ||
| 说明 表示本周期计算得出的税前工资金额。此属性用于“税费与福利计算准确性”和“激励整合”分析。 分析人员可据此将高额付款与处理时间或错误率关联起来。 重要性 为流程挖掘分析提供财务背景信息。 获取途径 PAY_RUN_RESULT_VALUES表中汇总的税前工资余额。 示例 5000.002350.5010000.00 | |||
| 立法数据组 LegislativeDataGroup | 按国家或监管环境划分薪资数据。 | ||
| 说明 在Oracle HCM Cloud中,立法数据组(LDG)用于划分薪资及相关数据,通常对应一个国家或特定地区的立法管辖范围。 此属性对于按国家筛选流程分析至关重要,例如比较US薪资与UK薪资;它通常映射到“国家”通用属性。 重要性 不同司法管辖区的合规规则和流程顺序流往往差异很大。 获取途径 PAY_ALL_PAYROLLS_F表与立法数据组定义表联接。 示例 US立法数据组UK LDG法国薪资 | |||
| 薪资期间名称 PayrollPeriodName | 薪资处理周期的具体名称。 | ||
| 说明 标识具体周期,例如“2024年1月月度”或“第42周”。此属性是“SLA截止时间合规监控”的重要依据。 可将员工个案归入相应的批次处理周期,以便汇总报告。 重要性 是批次级分析和SLA跟踪的基础。 获取途径 PAY_TIME_PERIODS表,或薪资定义中的Time Period Name。 示例 2023年月度第10期2023年第42周2023年12月奖金批次 | |||
| 薪资组 PayGroup | 用于薪资处理的员工逻辑分组。 | ||
| 说明 表示员工所属的具体薪资定义,例如“制造部门每周薪资”或“公司职员月薪”。 此属性是几乎所有仪表板的核心,可用于比较不同薪资周期和频率下的绩效。 重要性 用于安排薪资处理的主要配置对象。 获取途径 PAY_ALL_PAYROLLS_F表(Payroll Name)。 示例 US每月两次UK月度工会周薪 | |||
| 部门名称 DepartmentName | 员工所属的组织单位。 | ||
| 说明 标识薪资记录中员工所属的部门。这对于“工时表审批效率”仪表板至关重要。 按部门细分数据后,分析人员可以找出哪些业务单元经常延迟审批工时表,从而拖慢整体薪资处理。 重要性 有助于分析管理审批延迟的根本原因。 获取途径 根据薪资处理时生效的员工任职记录生成。 示例 北美销售部工程部人力资源部物流部 | |||
| SLA状态 SlaStatus | SLA达成情况的分类状态(已达成/未达成)。 | ||
| 说明 通过比较“付款执行”时间戳与“SLA处理截止时间”生成。取值可能包括“按时”“有风险”或“已超期”。 此属性可将个案归入不同绩效类别,简化“SLA截止时间合规监控”的报告。 重要性 将复杂的时间比较结果归纳为可采取行动的类别。 获取途径 通过逻辑计算比较事件时间戳与SLA截止时间。 示例 已达成已超期即将超期 | |||
| 员工类型 EmployeeType | 员工类别,例如受薪员工、计时员工或合同工。 | ||
| 说明 对员工记录进行分类。此属性对于“电子工资单发布延迟”仪表板至关重要,因为不同员工类型可能适用不同的处理规则或紧急程度。 可按员工群体筛选分析结果,比较不同群体的流程绩效。 重要性 不同员工类型通常对应不同的流程变体。 获取途径 PER_ALL_ASSIGNMENTS_M中的任职类别或雇佣条款。 示例 全职受薪员工兼职计时员工合同工高管 | |||
| 审计异常类型 AuditExceptionType | 审计期间标记的错误或警告类别。 | ||
| 说明 对“标记审计异常”活动中发现的具体问题进行分类,例如“税后净工资为负”或“缺少税务ID”。 此属性支持“审计异常与更正分析”仪表板,帮助定位常见的数据质量问题。 重要性 对于分析返工循环的根本原因至关重要。 获取途径 薪资流程日志或异常报告中的Message或Error Code列。 示例 税后净工资为负缺少SSN银行信息无效超出加班时数上限 | |||
| 税务管辖区 TaxJurisdiction | 报税所涉及的具体州、省或地方区域。 | ||
| 说明 标识与薪资记录相关的主要税务机关,例如加利福尼亚州的“CA”或纽约州的“NY”。此属性支持“税务合规处理时长”仪表板。 有助于识别哪些地区的税费计算和申报流程更复杂或耗时更长。 重要性 按监管复杂程度细分绩效。 获取途径 根据员工税务卡或工作地点地址生成。 示例 CA-加利福尼亚州NY-纽约州TX-得克萨斯州联邦-US | |||
| 追溯更改标记 RetroactiveChangeFlag | 标记薪资批次是否包含追溯付款。 | ||
| 说明 布尔标记。如果此记录处理了“Retropay”元素,该值为true。此属性有助于解释“流程路径变体比较”中较长的处理时间或审计异常。 追溯更改通常会触发复杂的重新计算,涉及之前的多个期间。 重要性 识别本身需要较长处理时间的复杂个案。 获取途径 PAY_ELEMENT_ENTRIES中存在“Retropay”元素条目。 示例 truefalse | |||
| 预览次数 PreviewIterationCount | 最终确认前预览结果的次数。 | ||
| 说明 每当同一个案例发生“预览薪资结果”活动时,计数器就会递增。 这是“薪资预览次数跟踪”仪表板的直接衡量指标,可反映审批前的返工或犹豫情况。 重要性 量化验证阶段的效率。 获取途径 在数据转换期间,按案例ID统计特定活动的发生次数。 示例 1350 | |||
薪资处理活动
| 活动 | 说明 | ||
|---|---|---|---|
| 付款已执行 | 确认付款已处理完成。在Oracle中,这对应于付款流程完成或Cash Management中的对账完成。 | ||
| 重要性 这是衡量SLA合规情况的主要时间戳,用于判断员工是否按时收到薪资。 获取途径 可根据银行转账操作的生效日期推断,也可通过Cash Management对账日志(CE_STATEMENT_LINES)明确获取。 采集 根据付款操作的生效日期或对账事件记录 事件类型 explicit | |||
| 薪资计算已启动 | 针对特定薪资定义和周期启动主要薪资处理流程。这标志着流程从数据收集转入处理阶段。 | ||
| 重要性 标记高强度处理时段的开始,用于计算薪资系统执行的总周期时间。 获取途径 查询PAY_PAYROLL_ACTIONS表,查找ACTION_TYPE为R(Run)或Q(QuickPay),且ACTION_STATUS标记为已启动的记录;也可根据创建日期推断。 采集 插入PAY_PAYROLL_ACTIONS记录时记录 事件类型 explicit | |||
| 薪资计算已执行 | Calculate Payroll流程成功完成,包括从税前总额到税后净额的计算。此事件表示已为该任职关系计算收入、扣款和税款。 | ||
| 重要性 这是一个重要节点,表示数据已可供验证。此处耗时过长可能意味着系统性能问题或快速公式较为复杂。 获取途径 查询PAY_PAYROLL_REL_ACTIONS,并与PAY_PAYROLL_ACTIONS关联,查找ACTION_TYPE为R或Q且ACTION_STATUS变为C(Complete)的记录。 采集 薪资处理操作状态更新为Complete时记录 事件类型 explicit | |||
| 银行转账文件已生成 | 生成EFT(电子资金转账)文件或类似付款文件。这是为银行创建付款指令文件的技术步骤。 | ||
| 重要性 用于衡量付款文件生成周期时间。此处延误可能导致错过银行截止时间。 获取途径 查询PAY_PAYROLL_ACTIONS中ACTION_TYPE为M(Magnetic Tape)、E(EFT)或C(Check Writer)的记录。 采集 EFT/支票操作完成时记录 事件类型 explicit | |||
| 预付款已计算 | 执行Prepayments流程,将税后净薪资分配至员工选择的付款方式(支票、EFT等)。此步骤用于验证计算出的金额是否可以实际支付。 | ||
| 重要性 这是连接计算与付款的环节。此处失败通常意味着银行信息缺失或付款方式无效。 获取途径 查询PAY_PAYROLL_ACTIONS中ACTION_TYPE为P(Prepayments)且状态为Complete的记录。 采集 Prepayments操作完成时记录 事件类型 explicit | |||
| QuickPay已执行 | 执行针对单个员工的薪资处理(QuickPay),通常用于验证更正结果。此活动可作为“薪资结果已预览”的替代指标。 | ||
| 重要性 同一员工频繁使用QuickPay,说明薪资处理可能依赖反复试错,而非 获取途径 查询PAY_PAYROLL_ACTIONS中ACTION_TYPE为Q(QuickPay)的记录,并按员工统计每个薪资周期的次数。 采集 PAY_PAYROLL_ACTIONS中记录QuickPay操作时记录 事件类型 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 | |||
| 工资单已发布 | 工资单对员工在自助服务中可见的时间点。此步骤发生在归档之后,之后可能还会执行特定的“生成工资单”流程。 | ||
| 重要性 此环节会影响员工满意度。付款后工资单迟迟未能查看,会导致员工提交支持请求。 获取途径 查询记录文档表(HR_DOCUMENTS_OF_RECORD),或查询PAY_PAYROLL_ACTIONS中Generate 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 | |||
| 税务申报已完成 | 生成法定税务文件,例如第三方季度税务文件,以确保该薪资周期符合监管要求。 | ||
| 重要性 此事件是税务合规处理时长KPI的关键指标。此处失败可能导致罚款。 获取途径 查询PAY_PAYROLL_ACTIONS中与税务申报相关的特定立法数据组操作,例如美国第三方税务申报。 采集 特定税务申报流程完成时记录 事件类型 explicit | |||
| 薪资处理已批准 | 在薪资仪表板中正式批准薪资登记表或流程。通常在审核验证报告后、生成银行文件前完成。 | ||
| 重要性 表示管理人员已签字确认。从计算到审批之间的时间即为验证时段。 获取途径 查询PAY_REQ_FLOW_INSTANCES中的状态变更,或指定Payroll Flow Pattern中的任务完成记录。 采集 流程实例状态变为Completed/Approved时记录 事件类型 explicit | |||
| 薪资记录已更正 | 初次薪资处理后、最终确认前,对薪资元素条目或任职关系数据进行人工更新。此活动表示为修复错误或异常而进行的返工。 | ||
| 重要性 此事件反映流程效率低下和数据质量问题。减少此类活动是提高首次薪资处理准确率的关键。 获取途径 查找PAY_ELEMENT_ENTRIES_F中的更新记录,并确认Last Update Date介于初次薪资处理日期与预付款日期之间,据此推断此事件。 采集 比较薪资元素条目更新时间戳与薪资处理时间戳 事件类型 inferred | |||
数据提取指南
步骤
访问Data Exchange:使用具有“Human Capital Management Integration Specialist”角色的用户登录Oracle HCM Cloud。依次进入My Client Groups > Data Exchange > Extract Definitions。
创建新提取:点击“+”图标创建提取,并命名为“ProcessMind_Payroll_Extract”。将使用者设为“Payroll”,类别设为“HR Archive”,以便访问历史薪资操作数据。
定义数据组:基于用户实体
PAY_PAYROLL_REL_UE(薪资关系)创建根数据组,将提取关联到员工的薪资关系。为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报告。这样可以将下方“Query”部分提供的SQL用作数据模型。与使用原生图形界面筛选相比,这种方式更适合构建统一事件日志。
创建BI Publisher数据模型:依次进入Tools > Reports and Analytics > Browse Catalog。创建数据模型,并粘贴下方提供的SQL查询。为
bind_start_date和bind_end_date定义参数。将提取关联到BIP:在Extract Definition的“Delivery”选项卡中创建交付选项。选择“PDF”或“XML”作为输出类型(ProcessMind更适合使用CSV,但您需要转换BIP输出),并选择上一步创建的BI Publisher报告。
定义参数:在Extract Execution Tree中添加开始日期和结束日期参数,动态传递给BI Publisher查询。
验证并提交:验证提取定义,检查是否存在错误。点击“Submit Extract”,然后输入参数(例如,最近90天)。
监控流程:进入“View Extract Results”,等待状态变为“Succeeded”。
下载输出文件:下载生成的XML或CSV文件并检查结构,确认其中包含所需列,例如PayrollRecord、ActivityName和EventTimestamp。
整理为ProcessMind所需格式:如果输出为XML,请将其转换为平面CSV文件,并确保表头符合“Attributes to include”的要求。然后将生成的文件上传到ProcessMind。
配置
- 提取模式:仅提取变更或完整提取。首次加载时使用完整提取;每日更新时,根据Last Update Date配置“Changes Only”。
- 立法数据组(LDG):如果您的实例支持多个国家/地区,强烈建议按LDG筛选,因为薪资定义因立法要求而异。
- 日期范围:将
bind_start_date和bind_end_date设为至少覆盖3至6个月,以便流程挖掘能够捕获完整周期时间。 - 分块大小:对于员工人数超过1万的高数据量薪资业务,将Extract Definition中的分块大小设为2000,以避免超时错误。
- 生效日期:薪资表按日期生效。查询逻辑会处理
effective_start_date和effective_end_date,确保提取正确的历史记录版本。 - 安全性:执行提取的用户必须具备相应的数据安全配置文件,才能查看分析所需的所有薪资数据和部门。
查询示例 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界面。
- 创建数据模型:点击左上角的新建,选择Data Model。该模型用于存放SQL提取逻辑。
- 创建SQL数据集:在Diagram选项卡下,点击New Data Set图标并选择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参数控制动态加载。 - 立法数据组(LDG):查询默认提取所有LDG。如果涉及多个国家/地区,可添加筛选条件
AND ppa.LEGISLATIVE_DATA_GROUP_ID = [Your_LDG_ID],对数据进行分区。 - 性能:查询会访问
PAY_RUN_RESULTS和PAY_ASSIGNMENT_ACTIONS等大数据量表。请勿设置过长的日期范围(例如超过1年),以免BI Publisher超时。 - 安全性:运行报告的用户需要具备目标薪资定义对应的数据访问集权限。
查询示例 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%,消除瓶颈。
无需信用卡,几分钟即可完成设置。