您的薪资处理数据模板
您的薪资处理数据模板
- 用于薪资分析的关键数据字段
- 用于流程发现的关键里程碑
- 针对特定系统的数据提取指南
薪资处理属性
| 名称 | 说明 | ||
|---|---|---|---|
| 事件时间戳 EventTimestamp | 活动发生的确切日期和时间。 | ||
| 说明 此属性记录事件发生的准确时刻,包括日期和时间。它是计算各类时间指标的基础,包括周期时间、前置时间以及不同流程阶段之间的吞吐率。 在SAP ECP中,数据来自变更文档中的 重要性 它可用于计算事件间隔时长,这对于识别绩效瓶颈和SLA违约至关重要。 获取途径 CDHDR-UDATE/UTIME、SWWLOGHIST-WI_CD/WI_CT或特定审计日志中的时间戳。 示例 2023-10-25T08:30:00Z2023-10-26T14:15:22Z2023-11-01T09:00:00Z | |||
| 工资核算记录 PayrollRecord | 由员工和工资周期组合而成的唯一标识符。 | ||
| 说明 工资核算记录是流程挖掘分析的核心案例标识符,代表特定员工在指定工资周期内的一次工资核算,并关联从提交工时表到最终税务申报的所有活动。 在SAP SuccessFactors Employee Central Payroll中,通常将人员编号(PERNR)、工资年度(PABRJ)和工资期间(PABRP)拼接而成;也可能加入序列号(SEQNR),以区分多次运行。这样的粒度可将每个付款周期作为独立实例进行分析,从而准确衡量周期时间并跟踪错误。 重要性 它作为案例ID,将相关事件归集在一起,以还原每笔工资从头到尾的流程路径。 获取途径 根据SAP集群B2(时间评估结果)或PC_PAYRESULT表中的字段构建(PERNR、PABRJ、PABRP、SEQNR)。 示例 10023499-2023-1088291022-2024-01-SEQ01US-10293-2023-52 | |||
| 活动 Activity | 工资核算流程中发生的具体任务或事件。 | ||
| 说明 此属性记录正在执行的流程步骤名称,例如“工时表已提交”“工资核算模拟已执行”或“付款已执行”。它构成流程图的基础,帮助分析人员直观了解工资周期中的操作顺序。 此属性的数据来自多种日志,包括工作流日志(SWWLOGHIST)、信息类型变更日志(CDHDR/CDPOS)以及特定工资核算状态表。提取数据时会统一命名规则,将技术事件代码转换为业务人员易于理解的活动名称。 重要性 它定义流程图中的节点,便于呈现流程路径、循环和变体。 获取途径 根据SWWLOGHIST(工作流)、CDHDR(变更文档)或PA03(控制记录)中的状态变更得出。 示例 工时表已提交应发工资已计算审计异常已标记付款已执行 | |||
| 上次数据更新 LastDataUpdate | 最近一次数据提取的时间戳。 | ||
| 说明 此属性表示流程挖掘数据模型中数据记录最近一次刷新的时间。它帮助分析人员了解数据的新鲜度,并确保分析结果基于当前信息。 虽然它不直接用于流程路径分析,但对于数据治理和验证至关重要,可用于确认仪表板反映的是工资核算系统的最新状态。 重要性 它可帮助用户了解数据延迟,并验证报告指标是否反映最新情况。 获取途径 由ETL/提取脚本在运行时生成。 示例 2023-11-05T00:00:00Z2023-11-05T12:00:00Z | |||
| 源系统 SourceSystem | 事件数据的来源系统。 | ||
| 说明 此属性用于标识提取数据的SAP SuccessFactors Employee Central Payroll实例或连接的子系统。在包含多个工资核算系统或混合部署的复杂环境中,该字段可确保数据沿袭清晰、可追溯。 分析不同地区的安装环境,或比较旧系统与迁移后系统的绩效时,此属性尤其有用。通常在数据提取设置期间将其配置为静态字符串。 重要性 在多系统环境中,它可用于细分数据,并帮助通过定位数据来源排查数据质量问题。 获取途径 SAP安装或提取配置中的系统ID(SID)。 示例 SAP_ECP_NASAP_ECP_EMEASuccessFactors_Core | |||
| 员工类型 EmployeeType | 员工分类(如正式员工、合同工)。 | ||
| 说明 此属性根据雇佣关系对员工进行分类,例如在职员工、退休人员或合同工。不同员工类型的工资核算复杂度可能有所不同,某些群体需要更多人工干预或特定的一致性检查。 该属性的数据来自SAP中的员工组( 重要性 它有助于识别流程差异或延迟是否集中在特定雇佣类别。 获取途径 PA0001表,字段PERSG(组)和PERSK(子组)。 示例 在职员工实习生退休人员计时合同工 | |||
| 工资周期频率 PayCycleFrequency | 表示本次运行是常规运行还是非周期运行。 | ||
| 说明 此属性用于区分按计划进行的常规工资核算与用于更正或即时付款的临时“非周期”运行。非周期运行量过高是流程效率低下的重要信号,“非周期付款数量分析”仪表板会跟踪这一指标。 该属性根据工资核算集群目录中的非周期原因( 重要性 它对于衡量“非周期付款比例”KPI、减少非标准处理至关重要。 获取途径 RGDIR表(集群目录),字段OCRSN或PAYTY。 示例 常规更正A奖金付款终止雇佣 | |||
| 工资总额 GrossPayAmount | 该记录计算出的工资总额。 | ||
| 说明 此属性表示扣款前工资总额的货币金额,是财务验证的基础指标,可用于分析高额付款是否需要更严格的审计或更长的审批时间。 数据从工资核算结果表(RT)中提取,通常来自代表工资总额的特定工资类型(如/101)。它为计算提供基准,支持“福利与税务计算准确性”分析。 重要性 它可用于按付款金额分析流程表现(例如,金额较大的付款是否需要更长的审批时间)。 获取途径 工资核算结果表(RT),工资类型/101或类似字段。 示例 5000.002500.5010500.00 | |||
| 工资期间 PayPeriod | 财年内的具体期间编号。 | ||
| 说明 此属性表示工资期间的顺序编号(例如,01代表1月或第一个双周周期)。分析人员可据此跟踪绩效趋势,并识别处理工作量的季节性变化。 该属性来自 重要性 它可用于趋势分析,并识别一年中特定时段出现的季节性瓶颈。 获取途径 PA0001表或工资结果集群(RGDIR),字段PABRP。 示例 01122652 | |||
| 工资核算专员 PayrollSpecialist | 处理该记录的人员的用户ID或姓名。 | ||
| 说明 此属性记录负责执行人工步骤或审批的工资核算管理员或专员身份。它是“专员处理量与工作负荷”仪表板的核心属性,可用于分析工作量分配和个人效率。 数据来自系统日志中的 重要性 它对于平衡工作量、识别流程中的人工瓶颈至关重要。 获取途径 CDHDR中记录的系统字段(SY-UNAME)或工作流参与者ID。 示例 JSMITHKMILLERSYSTEM | |||
| 工资核算范围 PayrollArea | 定义员工所属的工资核算组。 | ||
| 说明 工资核算范围用于归集在同一轮工资核算中处理的员工,通常依据发薪频率(如每月或每两周)或组织结构划分。此属性对于细分流程分析至关重要,可用于比较不同员工群体的绩效。 在SAP中,该属性对应技术字段 重要性 它可用于比较不同员工群体(如计时员工与薪资员工)的工资周期绩效。 获取途径 PA0001表(组织分配),字段ABKRS。 示例 US每两周DE每月高管工资核算 | |||
| 成本中心 CostCenter | 与员工关联的成本中心。 | ||
| 说明 成本中心代表员工成本所分配到的财务部门或单位。在“工时表审批瓶颈”仪表板中,它可作为部门的替代维度,帮助定位哪些组织单位拖慢了工资周期。 该属性位于组织分配信息类型(PA0001)的 重要性 它支持按组织逐级下钻,帮助识别造成延迟或返工的具体部门。 获取途径 PA0001表,字段KOSTL。 示例 CC-1000财务CC-2000 ITCC-3000销售 | |||
| 是否自动执行 IsAutomated | 标记活动是否由系统用户执行。 | ||
| 说明 此布尔属性用于识别特定流程步骤是由后台作业或系统用户执行,还是由人工执行。它对于“银行转账自动化监控”至关重要,可用于计算无人工干预处理的比例。 通常通过将用户ID与已知系统账户列表(如“BATCH”“SAP_WORKFLOW”)进行比对来得出。 重要性 它有助于衡量自动化率,并识别减少人工工作量的机会。 获取途径 根据用户ID得出(例如,如果User属于['BATCH','SYSTEM'],则为true)。 示例 truefalse | |||
| SLA处理截止时间 SLAProcessingDeadline | 完成工资核算的目标时间戳。 | ||
| 说明 此属性表示完成工资核算、确保按时付款的内部或外部截止时间。将其与实际“付款已执行”时间戳进行比较,可计算“SLA达成率”KPI。 SAP表中不一定有标准字段,通常会在自定义控制表中维护,或根据工资日历定义(例如发薪日前2天)。在此数据模型中,通常以发薪日减去设定的缓冲天数得出。 重要性 它为评估及时性和SLA达成情况提供基准。 获取途径 根据发薪日(T549S)减去配置的处理天数得出。 示例 2023-10-28T17:00:00Z2023-11-28T17:00:00Z | |||
| 审计异常标记 AuditExceptionFlag | 标记是否发生审计异常。 | ||
| 说明 此属性用于标记工资核算模拟或计算期间因验证规则触发异常或警告的案例。它是“审计异常频率”KPI的主要数据来源。 数据通常来自工资核算日志或特定错误消息表(FEHLER)。值为true表示流程路径中包含异常处理。 重要性 它可突出显示数据质量问题以及人工干预需求。 获取途径 根据工资核算日志中的错误消息或特定状态代码得出。 示例 truefalse | |||
| 法人实体 LegalEntity | 员工所属的公司代码或法人实体。 | ||
| 说明 此属性用于标识与工资核算记录关联的法人实体(公司代码),可用于跨不同子公司或企业实体开展工资核算绩效的财务报告与分析。 数据来自组织分配信息类型(PA0001)的 重要性 它支持跨公司对标和财务分摊分析。 获取途径 PA0001表,字段BUKRS。 示例 US01DE011000 | |||
| 税务管辖区 TaxJurisdiction | 适用于该员工的税务地区或主管机构。 | ||
| 说明 此属性用于标识工资核算记录适用的具体税务主管机构或地区(如州、省、州级行政区)。它对于“审计异常与合规风险”仪表板至关重要,可用于定位不同地区的合规问题。 在SAP美国工资核算中,该属性对应 重要性 它可用于按监管地区细分合规风险和审计异常。 获取途径 PA0001或PA0207/PA0208表,字段TXJCD。 示例 CANYTXNRW | |||
| 返工次数 ReworkCount | 执行更正的次数。 | ||
| 说明 此计算指标统计案例历史中“已执行数据更正”活动出现的次数。它可直接衡量流程效率低下,并为“人工更正与返工率”仪表板提供数据支持。 返工次数较多,通常表明数据质量问题持续存在,或复杂案例未能通过首次验证。 重要性 它可量化错误更正所耗费的工作量,并帮助说明数据质量改进工作的必要性。 获取途径 按CaseId统计“已执行数据更正”活动的次数。 示例 013 | |||
薪资处理活动
| 活动 | 说明 | ||
|---|---|---|---|
| 付款已执行 | 付款流程完成,通常由银行确认或F110付款批次完成来确认。 | ||
| 重要性 SLA达标率的主要结束时间戳,用于判断员工是否按时收到工资。 获取途径 付款批次表(REGUH)中的批次日期和时间,或根据起息日推断。 采集 付款批次状态设为Posted/Complete时记录 事件类型 explicit | |||
| 工时表已批准 | 管理者或管理员正式批准工时数据。此状态变更确认数据可以传输至工资计算引擎。 | ||
| 重要性 用于计算工时表审批周期时间KPI。此处的瓶颈可能表明管理者审批延迟或审批层级复杂。 获取途径 Employee Central工作流请求表(WfRequest),筛选状态为COMPLETED或APPROVED的记录。 采集 工作流状态变为APPROVED时记录 事件类型 explicit | |||
| 工时表已提交 | 员工或管理者提交某个工资周期工时数据的事件。该事件从与ECP关联的Employee Central模块工作流请求日志中采集。 | ||
| 重要性 标志着数据汇总阶段开始。此处延迟会传导至后续环节,压缩工资处理时间窗口。 获取途径 Employee Central工作流请求表(WfRequest),筛选Time Sheet或Time Off类别。 采集 工作流状态变为SUBMITTED时记录 事件类型 explicit | |||
| 工资模拟已执行 | 运行工资驱动程序进行测试,在不将结果写入数据库的情况下发现错误。这是PCC验证阶段的关键步骤。 | ||
| 重要性 用于计算首次计算通过率。反复模拟可能表明存在数据质量问题。 获取途径 Payroll Control Center步骤实例日志(PYC_D_STEP_INST),其中步骤类型对应Simulation。 采集 PCC模拟步骤状态变为COMPLETED时记录 事件类型 explicit | |||
| 工资流程已初始化 | 在Payroll Control Center(PCC)中创建工资流程实例,标志着特定工资范围的工资周期正式开始。 | ||
| 重要性 为端到端工资周期总时长设定起点,并确定待处理员工的范围。 获取途径 Payroll Control Center表(例如PYC_D_PY_PROC_INST),用于跟踪新流程ID的创建。 采集 创建PCC流程实例时记录 事件类型 explicit | |||
| 工资记录已批准 | 正式签核员工或薪资组的工资结果,通常在PCC的“Monitoring”或“Sign Off”步骤中完成。 | ||
| 重要性 标志着计算和验证阶段结束,工资结果获准发放。此节点对于分析专员处理效率至关重要。 获取途径 Payroll Control Center步骤实例日志(PYC_D_STEP_INST)中的Approval或Confirmation步骤记录。 采集 PCC审批步骤状态变为COMPLETED时记录 事件类型 explicit | |||
| 应发工资已计算 | 成功执行应发工资计算方案。在标准处理过程中,工资驱动程序会将结果写入PCL2集群。 | ||
| 重要性 这是一个重要节点,表明工时和费率数据已成功合并。此处延迟会影响税前至税后工资处理效率。 获取途径 PCL2集群(工资结果),具体为目录表(RGDIR)中“For-Period”的时间戳。 采集 新序列号写入工资集群时记录 事件类型 explicit | |||
| 税务申报已完成 | 生成税务申报文件(例如美国的PU19),或将文件传输给第三方税务申报服务商。 | ||
| 重要性 确保满足监管要求,并跟踪流程中的最后一个合规步骤。 获取途径 Tax Reporter Log Manager或B2A(Business to Administration)Manager日志显示文件已成功生成。 采集 Tax Reporter运行成功完成时记录 事件类型 explicit | |||
| 银行转账文件已生成 | 创建预备数据介质交换文件(pre-DME)或最终DME文件,为银行生成付款指令。 | ||
| 重要性 用于跟踪银行转账自动化监控指标。文件生成失败属于关键流程中断。 获取途径 来自DME/Payment Medium Workbench(PMW)执行的日志,通常存储在TemSe或特定付款批次表(ReguH/ReguP)中。 采集 付款批次(F110/RPCIPE)生成输出时记录 事件类型 explicit | |||
| 审计异常已标记 | Payroll Control Center策略检查生成验证提醒,用于识别数据不一致或合规风险。 | ||
| 重要性 直接用于审计异常频率和合规风险仪表板。异常量较大通常说明上游数据质量存在问题。 获取途径 Payroll Control Center提醒表(PYC_D_ALERT),用于将具体错误代码关联到员工记录。 采集 在PCC提醒表中创建新条目时记录 事件类型 explicit | |||
| 工资单已发布 | 通过自助服务(ESS)向员工提供薪酬报表。 | ||
| 重要性 用于衡量工资单交付SLA绩效。此处延迟会导致员工提交服务台工单。 获取途径 根据工资单混搭服务日志中的“Print Date”或可用日期配置推断。 采集 根据发薪日期加系统配置的延迟计算 事件类型 inferred | |||
| 已执行数据更正 | 因审计异常而对主数据或工时数据进行的更改,代表为清除工资提醒所需的返工。 | ||
| 重要性 跟踪人工更正率和返工率。这是导致流程效率低下的主要活动。 获取途径 将PCC提醒时间戳与同一员工在提醒关闭前的后续审计日志(PCL4)变更关联后推断得出。 采集 识别PCC提醒处于活动状态期间发生的主数据更新 事件类型 inferred | |||
| 激励薪酬数据已导入 | 将奖金或佣金等非标准工资数据导入工资系统,通常涉及将数据载入信息类型0015或2010。 | ||
| 重要性 导入延迟会影响应发工资的准确计算。分析此环节有助于优化激励薪酬数据集成周期时间。 获取途径 审计日志(PCL4或同等日志),显示信息类型0015(额外付款)或2010(员工薪酬信息)中的记录创建情况。 采集 比较信息类型记录创建时间戳与导入作业日志 事件类型 inferred | |||
| 福利扣款已应用 | 计算方案中处理福利规则的具体步骤。虽然属于常规核算的一部分,单独分析有助于找出配置错误。 | ||
| 重要性 用于分析福利和税务计算准确性,也有助于排查复杂的扣款规则差异。 获取途径 根据工资结果中是否存在V0拆分推断;如果启用了详细日志,也可依据特定日志条目判断(生产环境中较少启用)。 采集 与应发工资计算同时发生,但在分析中属于不同概念 事件类型 inferred | |||
数据提取指南
步骤
- 确定要提取的薪资区域和期间参数。数据主要来自Payroll Control Center(PCC)表(PYC_*)和薪资集群目录(HRPY_RGDIR)。
- 启动SQL客户端或SAP HANA Studio,并连接到SAP SuccessFactors Employee Central Payroll(ECP)后端架构。
- 执行“查询”部分提供的数据提取脚本。该脚本会汇总主数据表、薪资结果和PCC审计日志中的数据。
- 映射“工时表已提交”和“工时表已批准”活动。由于ECP通常从Employee Central接收这些数据,请使用PA2001表中的创建时间戳和最后修改时间戳;如果可用,也可使用PTREQ_HEADER等专用工时接口表。
- 查询信息类型0015(额外付款)和2010(员工薪酬信息),提取目标发薪期间内创建的记录,以获取“激励数据已导入”事件。
- 从PYC_D_PYP(流程实例)和PYC_D_BINST(步骤实例)表中提取PCC流程步骤,以记录“薪资流程已初始化”“薪资模拟已执行”“薪资记录已批准”和“工资单已发布”事件。
- 查询PYC_D_ALERT表,识别“审计异常已标记”事件。这些记录会将特定员工与PCC检查步骤中发现的验证错误关联起来。
- 在当前薪资处理窗口内,将SAP更改文档表头表(CDHDR)与薪资相关信息类型(如0008、0015、2001)联接,生成“已执行数据更正”事件。
- 使用HRPY_RGDIR表准确定位“工资总额已计算”的时间。由于“福利扣款已应用”事件会在架构运行期间同时发生,请使用相同时间戳生成该事件。
- 联接REGUH(结算数据)和REGUT(DME管理)表中的财务数据,以记录“银行转账文件已生成”和“付款已执行”事件。
- 将“PayrollRecord”列严格转换为[EmployeeID]-[Period]-[Year]格式,确保案例ID唯一。
- 将最终数据集导出为CSV文件,确保表头与约定中定义的属性一致,然后上传至ProcessMind。
配置
- 时间范围:将提取范围设为最近6至12个月的滚动窗口。薪资流程具有周期性,此范围可涵盖常规和非周期运行的充分变化。
- 薪资区域(ABKRS):按特定薪资区域筛选(如US Monthly、DE Weekly),确保比较的是相似的流程周期。
- 语言:确保以系统主要语言提取活动和流程步骤的说明(如SPRAS = 'E')。
- PCC流程ID:确定PCC配置中用于“监控”“生产”和“非周期发薪”的具体流程定义ID(PYP_ID),以筛选相关步骤。
- 货币:如果提取全球薪资运营数据,请将财务金额(GrossPayAmount)统一为单一货币。
- 授权:数据库用户需要具备人力资源(PA/PY)表的读取权限,尤其是集群目录(HRPY_RGDIR)和PCC表(PYC_*)的读取权限。
查询示例 sql
/* Activity 1: Time Sheet Submitted */
SELECT
CONCAT(T.PERNR, CONCAT('-', T.PABRJ, T.PABRP)) AS PayrollRecord,
'Time Sheet Submitted' AS Activity,
T.BEGDA AS EventTimestamp,
'SAP_ECP' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
T.ABKRS AS PayrollArea,
'Permanent' AS EmployeeType,
T.PABRP AS PayPeriod,
CASE WHEN T.PABRP LIKE '9%' THEN 'Off-Cycle' ELSE 'Regular' END AS PayCycleFrequency,
0.00 AS GrossPayAmount,
T.UNAME AS PayrollSpecialist,
O.KOSTL AS CostCenter,
'True' AS IsAutomated
FROM PA2001 AS T
LEFT JOIN PA0001 AS O ON T.PERNR = O.PERNR AND O.ENDDA = '99991231'
WHERE T.AEDTM BETWEEN '[START_DATE]' AND '[END_DATE]'
UNION ALL
/* Activity 2: Time Sheet Approved */
SELECT
CONCAT(T.PERNR, CONCAT('-', T.PABRJ, T.PABRP)) AS PayrollRecord,
'Time Sheet Approved' AS Activity,
T.AEDTM AS EventTimestamp,
'SAP_ECP' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
T.ABKRS AS PayrollArea,
'Permanent' AS EmployeeType,
T.PABRP AS PayPeriod,
CASE WHEN T.PABRP LIKE '9%' THEN 'Off-Cycle' ELSE 'Regular' END AS PayCycleFrequency,
0.00 AS GrossPayAmount,
T.UNAME AS PayrollSpecialist,
O.KOSTL AS CostCenter,
'False' AS IsAutomated
FROM PA2001 AS T
LEFT JOIN PA0001 AS O ON T.PERNR = O.PERNR AND O.ENDDA = '99991231'
WHERE T.AEDTM BETWEEN '[START_DATE]' AND '[END_DATE]'
UNION ALL
/* Activity 3: Incentive Data Imported */
SELECT
CONCAT(I.PERNR, CONCAT('-', I.PABRJ, I.PABRP)) AS PayrollRecord,
'Incentive Data Imported' AS Activity,
I.AEDTM AS EventTimestamp,
'SAP_ECP' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
I.ABKRS AS PayrollArea,
'Permanent' AS EmployeeType,
I.PABRP AS PayPeriod,
'Regular' AS PayCycleFrequency,
I.BETRG AS GrossPayAmount,
I.UNAME AS PayrollSpecialist,
O.KOSTL AS CostCenter,
'True' AS IsAutomated
FROM PA0015 AS I
LEFT JOIN PA0001 AS O ON I.PERNR = O.PERNR AND O.ENDDA = '99991231'
WHERE I.AEDTM BETWEEN '[START_DATE]' AND '[END_DATE]'
UNION ALL
/* Activity 4: Payroll Process Initialized */
SELECT
CONCAT('N/A', CONCAT('-', P.PABRJ, P.PABRP)) AS PayrollRecord,
'Payroll Process Initialized' AS Activity,
P.CREATED_TS AS EventTimestamp,
'SAP_ECP' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
'ALL' AS PayrollArea,
NULL AS EmployeeType,
P.PABRP AS PayPeriod,
'Regular' AS PayCycleFrequency,
0.00 AS GrossPayAmount,
P.CREATED_BY AS PayrollSpecialist,
NULL AS CostCenter,
'False' AS IsAutomated
FROM PYC_D_PYP AS P
WHERE P.CREATED_TS BETWEEN '[START_DATE]' AND '[END_DATE]'
UNION ALL
/* Activity 5: Payroll Simulation Executed */
SELECT
CONCAT('N/A', CONCAT('-', S.PABRJ, S.PABRP)) AS PayrollRecord,
'Payroll Simulation Executed' AS Activity,
S.END_TS AS EventTimestamp,
'SAP_ECP' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
'ALL' AS PayrollArea,
NULL AS EmployeeType,
S.PABRP AS PayPeriod,
'Regular' AS PayCycleFrequency,
0.00 AS GrossPayAmount,
S.EXEC_USER AS PayrollSpecialist,
NULL AS CostCenter,
'True' AS IsAutomated
FROM PYC_D_BINST AS S
JOIN PYC_D_STEP AS D ON S.STEP_ID = D.ID
WHERE D.NAME LIKE '%Simulate%' AND S.END_TS BETWEEN '[START_DATE]' AND '[END_DATE]'
UNION ALL
/* Activity 6: Audit Exception Flagged */
SELECT
CONCAT(A.RO_ID, CONCAT('-', P.PABRJ, P.PABRP)) AS PayrollRecord,
'Audit Exception Flagged' AS Activity,
A.CREATED_TS AS EventTimestamp,
'SAP_ECP' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
P.ABKRS AS PayrollArea,
'Permanent' AS EmployeeType,
P.PABRP AS PayPeriod,
'Regular' AS PayCycleFrequency,
0.00 AS GrossPayAmount,
'SYSTEM' AS PayrollSpecialist,
NULL AS CostCenter,
'True' AS IsAutomated
FROM PYC_D_ALERT AS A
JOIN PYC_D_PYP AS P ON A.PYP_ID = P.ID
WHERE A.CREATED_TS BETWEEN '[START_DATE]' AND '[END_DATE]'
UNION ALL
/* Activity 7: Data Correction Performed */
SELECT
CONCAT(C.OBJECTID, CONCAT('-', P.PABRJ, P.PABRP)) AS PayrollRecord,
'Data Correction Performed' AS Activity,
TO_TIMESTAMP(CONCAT(C.UDATE, C.UTIME)) AS EventTimestamp,
'SAP_ECP' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
P.ABKRS AS PayrollArea,
'Permanent' AS EmployeeType,
P.PABRP AS PayPeriod,
'Regular' AS PayCycleFrequency,
0.00 AS GrossPayAmount,
C.USERNAME AS PayrollSpecialist,
NULL AS CostCenter,
'False' AS IsAutomated
FROM CDHDR AS C
JOIN HRPY_RGDIR AS P ON C.OBJECTID = P.PERNR
WHERE C.TCODE IN ('PA30', 'PA40') AND C.UDATE BETWEEN '[START_DATE]' AND '[END_DATE]'
UNION ALL
/* Activity 8: Gross Pay Calculated */
SELECT
CONCAT(R.PERNR, CONCAT('-', R.PABRJ, R.PABRP)) AS PayrollRecord,
'Gross Pay Calculated' AS Activity,
TO_TIMESTAMP(CONCAT(R.RUNDT, R.RUNTM)) AS EventTimestamp,
'SAP_ECP' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
R.ABKRS AS PayrollArea,
'Permanent' AS EmployeeType,
R.PABRP AS PayPeriod,
CASE WHEN R.PABRP LIKE '9%' THEN 'Off-Cycle' ELSE 'Regular' END AS PayCycleFrequency,
0.00 AS GrossPayAmount,
R.UNAME AS PayrollSpecialist,
O.KOSTL AS CostCenter,
'True' AS IsAutomated
FROM HRPY_RGDIR AS R
LEFT JOIN PA0001 AS O ON R.PERNR = O.PERNR AND O.ENDDA = '99991231'
WHERE R.RUNDT BETWEEN '[START_DATE]' AND '[END_DATE]'
UNION ALL
/* Activity 9: Benefit Deductions Applied */
SELECT
CONCAT(R.PERNR, CONCAT('-', R.PABRJ, R.PABRP)) AS PayrollRecord,
'Benefit Deductions Applied' AS Activity,
ADD_SECONDS(TO_TIMESTAMP(CONCAT(R.RUNDT, R.RUNTM)), 1) AS EventTimestamp,
'SAP_ECP' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
R.ABKRS AS PayrollArea,
'Permanent' AS EmployeeType,
R.PABRP AS PayPeriod,
CASE WHEN R.PABRP LIKE '9%' THEN 'Off-Cycle' ELSE 'Regular' END AS PayCycleFrequency,
0.00 AS GrossPayAmount,
R.UNAME AS PayrollSpecialist,
O.KOSTL AS CostCenter,
'True' AS IsAutomated
FROM HRPY_RGDIR AS R
LEFT JOIN PA0001 AS O ON R.PERNR = O.PERNR AND O.ENDDA = '99991231'
WHERE R.RUNDT BETWEEN '[START_DATE]' AND '[END_DATE]'
UNION ALL
/* Activity 10: Payroll Record Approved */
SELECT
CONCAT('N/A', CONCAT('-', S.PABRJ, S.PABRP)) AS PayrollRecord,
'Payroll Record Approved' AS Activity,
S.END_TS AS EventTimestamp,
'SAP_ECP' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
'ALL' AS PayrollArea,
NULL AS EmployeeType,
S.PABRP AS PayPeriod,
'Regular' AS PayCycleFrequency,
0.00 AS GrossPayAmount,
S.EXEC_USER AS PayrollSpecialist,
NULL AS CostCenter,
'False' AS IsAutomated
FROM PYC_D_BINST AS S
JOIN PYC_D_STEP AS D ON S.STEP_ID = D.ID
WHERE D.NAME LIKE '%Check%' AND S.STATUS = 'OK' AND S.END_TS BETWEEN '[START_DATE]' AND '[END_DATE]'
UNION ALL
/* Activity 11: Bank Transfer File Generated */
SELECT
CONCAT(P.PERNR, CONCAT('-', P.PABRJ, P.PABRP)) AS PayrollRecord,
'Bank Transfer File Generated' AS Activity,
TO_TIMESTAMP(CONCAT(T.TSDAT, T.TSTIM)) AS EventTimestamp,
'SAP_ECP' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
P.ABKRS AS PayrollArea,
'Permanent' AS EmployeeType,
P.PABRP AS PayPeriod,
'Regular' AS PayCycleFrequency,
0.00 AS GrossPayAmount,
T.USRID AS PayrollSpecialist,
O.KOSTL AS CostCenter,
'True' AS IsAutomated
FROM REGUT AS T
JOIN REGUH AS H ON T.LAUFD = H.LAUFD AND T.LAUFI = H.LAUFI
JOIN HRPY_RGDIR AS P ON H.PERNR = P.PERNR
LEFT JOIN PA0001 AS O ON P.PERNR = O.PERNR AND O.ENDDA = '99991231'
WHERE T.TSDAT BETWEEN '[START_DATE]' AND '[END_DATE]'
UNION ALL
/* Activity 12: Payment Executed */
SELECT
CONCAT(P.PERNR, CONCAT('-', P.PABRJ, P.PABRP)) AS PayrollRecord,
'Payment Executed' AS Activity,
TO_TIMESTAMP(CONCAT(H.LAUFD, '120000')) AS EventTimestamp,
'SAP_ECP' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
P.ABKRS AS PayrollArea,
'Permanent' AS EmployeeType,
P.PABRP AS PayPeriod,
'Regular' AS PayCycleFrequency,
H.RBETR AS GrossPayAmount,
H.ZNME1 AS PayrollSpecialist,
O.KOSTL AS CostCenter,
'True' AS IsAutomated
FROM REGUH AS H
JOIN HRPY_RGDIR AS P ON H.PERNR = P.PERNR
LEFT JOIN PA0001 AS O ON P.PERNR = O.PERNR AND O.ENDDA = '99991231'
WHERE H.LAUFD BETWEEN '[START_DATE]' AND '[END_DATE]'
UNION ALL
/* Activity 13: Pay Slip Published */
SELECT
CONCAT('N/A', CONCAT('-', S.PABRJ, S.PABRP)) AS PayrollRecord,
'Pay Slip Published' AS Activity,
S.END_TS AS EventTimestamp,
'SAP_ECP' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
'ALL' AS PayrollArea,
NULL AS EmployeeType,
S.PABRP AS PayPeriod,
'Regular' AS PayCycleFrequency,
0.00 AS GrossPayAmount,
S.EXEC_USER AS PayrollSpecialist,
NULL AS CostCenter,
'True' AS IsAutomated
FROM PYC_D_BINST AS S
JOIN PYC_D_STEP AS D ON S.STEP_ID = D.ID
WHERE D.NAME LIKE '%Remuneration%' AND S.END_TS BETWEEN '[START_DATE]' AND '[END_DATE]'
UNION ALL
/* Activity 14: Tax Filing Completed */
SELECT
CONCAT('N/A', CONCAT('-', S.PABRJ, S.PABRP)) AS PayrollRecord,
'Tax Filing Completed' AS Activity,
S.END_TS AS EventTimestamp,
'SAP_ECP' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
'ALL' AS PayrollArea,
NULL AS EmployeeType,
S.PABRP AS PayPeriod,
'Regular' AS PayCycleFrequency,
0.00 AS GrossPayAmount,
S.EXEC_USER AS PayrollSpecialist,
NULL AS CostCenter,
'True' AS IsAutomated
FROM PYC_D_BINST AS S
JOIN PYC_D_STEP AS D ON S.STEP_ID = D.ID
WHERE D.NAME LIKE '%Tax%' AND S.END_TS BETWEEN '[START_DATE]' AND '[END_DATE]' 步骤
- 打开ABAP编辑器:通过SAP GUI登录SAP SuccessFactors Employee Central Payroll(ECP)系统。进入事务代码SE38(ABAP编辑器)。
- 创建程序:为新程序输入名称,例如
Z_PROCESSMINING_PAYROLL_EXT,然后点击创建。将类型设为可执行程序,并将其保存为本地对象(测试时使用程序包$TMP)。 - 编写代码:复制下方“查询”部分提供的完整ABAP代码并粘贴到编辑器中,替换现有默认代码。
- 检查并激活:点击检查按钮(Ctrl+F2)验证语法。状态无错误后,点击激活(Ctrl+F3)。
- 执行提取:按直接处理(F8)运行报表。
- 配置选择条件:在选择屏幕中输入
Payroll Area(如US、99)和有效的Date Range(如最近3个月),也可选择按特定Personnel Numbers(PERNR)筛选以进行测试。 - 运行提取:执行报表。系统将处理HRPY_RGDIR、CATSDB、PA0015和REGUH表,以构建事件日志。
- 检查输出:报表使用
cl_demo_output直接在屏幕网格视图中显示结果,便于立即验证。 - 导出数据:右键点击结果网格,选择电子表格,并将文件保存为CSV或Excel格式。
- 整理ProcessMind所需格式:打开导出的文件。确保
EventTimestamp列采用YYYY-MM-DD HH:MM:SS格式。确认PayrollRecord列可唯一标识案例(通常为PERNR-SEQNR)。 - 上传:将清理后的CSV文件导入ProcessMind,并将列分别映射到案例ID、活动、时间戳和属性。
配置
- 日期范围:建议按3至6个月的时间段提取数据,避免ABAP运行环境发生内存超时。
- 薪资区域:这是关键筛选条件(表T549A)。每次只提取一个薪资区域(如月薪或双周薪),以确保流程一致。
- 配置表:脚本以
HRPY_RGDIR(薪资目录)作为主要驱动表。请确保用户拥有此表的S_TABU_DIS授权。 - 工时数据源:脚本假定工时表数据存储在
CATSDB中。如果您使用的第三方考勤系统直接与IT2001或IT2010对接,而未使用CATS,工时表活动可能没有数据,需要调整脚本。 - 付款数据:脚本通过
REGUH(结算数据)将薪资运行与付款运行关联。请确保已针对所选期间执行F110付款运行,才能查看付款事件。 - 性能:对于员工人数超过10万的高数据量系统,请将
SELECT *逻辑替换为基于游标的读取方式,或在后台模式(F9)运行。
查询示例 abap
REPORT Z_PROCESSMINING_PAYROLL_EXT.
TABLES: pernr, hrpy_rgdir, catsdb, pa0015, reguh.
TYPES: BEGIN OF ty_event_log,
payroll_record TYPE string,
activity TYPE string,
event_timestamp TYPE string,
source_system TYPE string,
last_data_update TYPE string,
payroll_area TYPE abkrs,
employee_type TYPE persg,
pay_period TYPE pabrj,
pay_cycle_freq TYPE string,
gross_pay_amount TYPE string,
payroll_specialist TYPE usnam,
cost_center TYPE kostl,
is_automated TYPE string,
END OF ty_event_log.
DATA: gt_output TYPE TABLE OF ty_event_log,
gs_output TYPE ty_event_log,
gt_rgdir TYPE TABLE OF hrpy_rgdir,
gs_rgdir TYPE hrpy_rgdir,
gt_cats TYPE TABLE OF catsdb,
gs_cats TYPE catsdb,
gt_p0015 TYPE TABLE OF pa0015,
gs_p0015 TYPE pa0015,
gt_reguh TYPE TABLE OF reguh,
gs_reguh TYPE reguh,
gv_tstamp TYPE timestamp,
gv_date TYPE d,
gv_time TYPE t,
gv_pernr TYPE pernr_d.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS: s_pernr FOR pernr-pernr,
s_date FOR sy-datum OBLIGATORY.
PARAMETERS: p_abkrs TYPE abkrs OBLIGATORY DEFAULT '99'.
SELECTION-SCREEN END OF BLOCK b1.
START-OF-SELECTION.
" 1. Fetch Payroll Directory (The Core Process Driver)
SELECT * FROM hrpy_rgdir INTO TABLE gt_rgdir
WHERE pernr IN s_pernr
AND fpper LIKE '%'
AND cdate IN s_date.
IF gt_rgdir IS INITIAL.
WRITE: / 'No payroll results found for selection.'.
EXIT.
ENDIF.
SORT gt_rgdir BY pernr seqnr.
" Loop through Payroll Directory to build events
LOOP AT gt_rgdir INTO gs_rgdir.
CLEAR gs_output.
CONCATENATE gs_rgdir-pernr '-' gs_rgdir-seqnr INTO gs_output-payroll_record.
gs_output-source_system = 'SAP_ECP'.
gs_output-last_data_update = sy-datum.
gs_output-payroll_area = p_abkrs.
gs_output-pay_period = gs_rgdir-fpper.
gs_output-payroll_specialist = gs_rgdir-uname.
" --- Activity: Payroll Process Initialized ---
" Derived from the run date start
gs_output-activity = 'Payroll Process Initialized'.
CONCATENATE gs_rgdir-cdate gs_rgdir-ctime INTO gs_output-event_timestamp SEPARATED BY space.
gs_output-is_automated = 'TRUE'.
APPEND gs_output TO gt_output.
" --- Activity: Payroll Simulation Executed ---
IF gs_rgdir-srtza = 'S'. " S = Simulation
gs_output-activity = 'Payroll Simulation Executed'.
CONCATENATE gs_rgdir-cdate gs_rgdir-ctime INTO gs_output-event_timestamp SEPARATED BY space.
gs_output-is_automated = 'TRUE'.
APPEND gs_output TO gt_output.
ENDIF.
" --- Activity: Audit Exception Flagged ---
IF gs_rgdir-void IS NOT INITIAL. " Void indicator means rejected/exception
gs_output-activity = 'Audit Exception Flagged'.
CONCATENATE gs_rgdir-cdate gs_rgdir-ctime INTO gs_output-event_timestamp SEPARATED BY space.
gs_output-is_automated = 'TRUE'.
APPEND gs_output TO gt_output.
" --- Activity: Data Correction Performed ---
" Inferred: If voided, a correction usually follows immediately
gs_output-activity = 'Data Correction Performed'.
" Add 1 hour to simulate reaction time
DATA: lv_corr_time TYPE t.
lv_corr_time = gs_rgdir-ctime + 3600.
CONCATENATE gs_rgdir-cdate lv_corr_time INTO gs_output-event_timestamp SEPARATED BY space.
gs_output-is_automated = 'FALSE'.
APPEND gs_output TO gt_output.
ENDIF.
" --- Activity: Gross Pay Calculated ---
IF gs_rgdir-srtza = 'A'. " A = Actual Result
gs_output-activity = 'Gross Pay Calculated'.
CONCATENATE gs_rgdir-cdate gs_rgdir-ctime INTO gs_output-event_timestamp SEPARATED BY space.
gs_output-gross_pay_amount = '1000.00'. " Placeholder: Cluster read required for actual amount
gs_output-is_automated = 'TRUE'.
APPEND gs_output TO gt_output.
" --- Activity: Benefit Deductions Applied ---
" Logically occurs immediately after gross calc
gs_output-activity = 'Benefit Deductions Applied'.
gs_output-is_automated = 'TRUE'.
APPEND gs_output TO gt_output.
" --- Activity: Payroll Record Approved ---
" Inferred from successful write of 'A' record
gs_output-activity = 'Payroll Record Approved'.
DATA: lv_appr_time TYPE t.
lv_appr_time = gs_rgdir-ctime + 60. " +1 minute
CONCATENATE gs_rgdir-cdate lv_appr_time INTO gs_output-event_timestamp SEPARATED BY space.
gs_output-is_automated = 'FALSE'.
APPEND gs_output TO gt_output.
" --- Activity: Pay Slip Published ---
" Available via ESS usually next day
gs_output-activity = 'Pay Slip Published'.
DATA: lv_slip_date TYPE d.
lv_slip_date = gs_rgdir-cdate + 1.
CONCATENATE lv_slip_date '080000' INTO gs_output-event_timestamp SEPARATED BY space.
gs_output-is_automated = 'TRUE'.
APPEND gs_output TO gt_output.
" --- Activity: Tax Filing Completed ---
" End of period logic
gs_output-activity = 'Tax Filing Completed'.
DATA: lv_tax_date TYPE d.
lv_tax_date = gs_rgdir-paydt.
CONCATENATE lv_tax_date '235959' INTO gs_output-event_timestamp SEPARATED BY space.
gs_output-is_automated = 'TRUE'.
APPEND gs_output TO gt_output.
ENDIF.
ENDLOOP.
" 2. Fetch Time Sheet Data (CATSDB)
" Linking to Payroll Record loosely via Period/Date
SELECT * FROM catsdb INTO TABLE gt_cats
WHERE pernr IN s_pernr
AND workdate IN s_date.
LOOP AT gt_cats INTO gs_cats.
CLEAR gs_output.
CONCATENATE gs_cats-pernr '-00000' INTO gs_output-payroll_record. " Generic mapping
gs_output-payroll_area = p_abkrs.
gs_output-source_system = 'SAP_ECP'.
" --- Activity: Time Sheet Submitted ---
IF gs_cats-status = '20' OR gs_cats-status = '30'.
gs_output-activity = 'Time Sheet Submitted'.
CONCATENATE gs_cats-laudate gs_cats-lautime INTO gs_output-event_timestamp SEPARATED BY space.
gs_output-is_automated = 'FALSE'.
APPEND gs_output TO gt_output.
ENDIF.
" --- Activity: Time Sheet Approved ---
IF gs_cats-status = '30'. " 30 = Approved
gs_output-activity = 'Time Sheet Approved'.
CONCATENATE gs_cats-apdat gs_cats-aptime INTO gs_output-event_timestamp SEPARATED BY space.
gs_output-is_automated = 'FALSE'.
APPEND gs_output TO gt_output.
ENDIF.
ENDLOOP.
" 3. Fetch Incentive Data (Infotype 0015)
SELECT * FROM pa0015 INTO TABLE gt_p0015
WHERE pernr IN s_pernr
AND begda IN s_date.
LOOP AT gt_p0015 INTO gs_p0015.
CLEAR gs_output.
CONCATENATE gs_p0015-pernr '-00000' INTO gs_output-payroll_record.
gs_output-source_system = 'SAP_ECP'.
gs_output-payroll_area = p_abkrs.
" --- Activity: Incentive Data Imported ---
gs_output-activity = 'Incentive Data Imported'.
CONCATENATE gs_p0015-aedtm '120000' INTO gs_output-event_timestamp SEPARATED BY space.
gs_output-is_automated = 'FALSE'.
APPEND gs_output TO gt_output.
ENDLOOP.
" 4. Fetch Payment Data (REGUH)
SELECT * FROM reguh INTO TABLE gt_reguh
WHERE zaldt IN s_date.
LOOP AT gt_reguh INTO gs_reguh.
" Filter for our PERNRs roughly (REGUH does not always have PERNR directly indexable easily in all views)
" For simulation, we map broadly or require join logic. Here assuming simple extraction.
CLEAR gs_output.
CONCATENATE gs_reguh-pernr '-99999' INTO gs_output-payroll_record.
gs_output-source_system = 'SAP_ECP'.
gs_output-payroll_area = p_abkrs.
" --- Activity: Bank Transfer File Generated ---
gs_output-activity = 'Bank Transfer File Generated'.
CONCATENATE gs_reguh-laufd gs_reguh-cpzut INTO gs_output-event_timestamp SEPARATED BY space.
gs_output-is_automated = 'TRUE'.
APPEND gs_output TO gt_output.
" --- Activity: Payment Executed ---
gs_output-activity = 'Payment Executed'.
CONCATENATE gs_reguh-zaldt '100000' INTO gs_output-event_timestamp SEPARATED BY space.
gs_output-is_automated = 'TRUE'.
APPEND gs_output TO gt_output.
ENDLOOP.
" Output Display
cl_demo_output=>display( gt_output ). 立即优化薪资处理绩效
加入目前已将薪资周期缩短30%的企业。
无需信用卡,几分钟即可完成设置。