給与計算処理データテンプレート
給与計算処理データテンプレート
- 給与計算分析のための戦略的データフィールド
- プロセスディスカバリの主要なマイルストーン
- システム固有の抽出ガイダンス
給与計算処理属性
| 名前 | 説明 | ||
|---|---|---|---|
| アクティビティ Activity | 給与計算プロセスで発生する特定のタスクまたはイベント。 | ||
| 説明 この属性は、「タイムシート提出済み」、「給与シミュレーション実行済み」、「支払い実行済み」など、実行されているプロセスステップの名前を捕捉します。プロセスフローの基礎を形成し、アナリストが給与計算サイクル中に実行された操作のシーケンスを可視化できるようにします。 この属性のデータは、ワークフローログ(SWWLOGHIST)、インフォタイプ変更ログ(CDHDR/CDPOS)、および特定の給与ステータスを含む様々なログから収集されます。技術的なイベントコードがビジネスで読み取り可能なアクティビティ名に変換されるように、抽出時に一貫した命名規則が適用されます。 その重要性 プロセスグラフ内のノードを定義し、プロセスフロー、ループ、バリアントの可視化を可能にします。 取得元 SWWLOGHIST(ワークフロー)、CDHDR(変更伝票)、またはPA03(管理レコード)のステータス変更から導出されます。 例 タイムシート提出済み総支給額計算済み監査例外フラグ設定済み支払い実行 | |||
| イベントのタイムスタンプ 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 | 従業員と給与期間を組み合わせた一意の識別子。 | ||
| 説明 給与記録は、プロセスマイニング分析の中心的なケース識別子として機能します。これは、定義された給与期間における特定の従業員に対する給与計算処理の1回の反復を表し、初期のタイムシート提出から最終的な税務申告までのすべての活動をリンクします。 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 | |||
| ソースシステム SourceSystem | イベントデータの発信元システム。 | ||
| 説明 この属性は、データが抽出された特定のSAP SuccessFactors Employee Central Payrollインスタンスまたは接続されたサブシステムを識別します。複数の給与システムやハイブリッド設定を持つ複雑な環境では、このフィールドがデータの系統とトレーサビリティを保証します。 異なる地域への導入におけるデータを分析する場合や、レガシーシステムと移行システムのパフォーマンスを比較する場合に特に役立ちます。通常、データ抽出設定時に構成される静的な文字列です。 その重要性 複数システム環境でのデータセグメンテーションを可能にし、発生源を特定することでデータ品質の問題のトラブルシューティングに役立ちます。 取得元 SAPインストールまたは抽出設定からのシステムID(SID)。 例 SAP_ECP_NASAP_ECP_EMEASuccessFactors_Core | |||
| 最終データ更新 LastDataUpdate | 最新の`データ`抽出の`タイムスタンプ`です。 | ||
| 説明 この属性は、プロセスマイニングデータモデルでデータレコードが最後に更新された日時を示します。アナリストがデータの鮮度を理解し、洞察が現在の情報に基づいていることを保証するのに役立ちます。 プロセスフロー分析に直接使用されるわけではありませんが、データガバナンスと検証には不可欠であり、ダッシュボードが給与システム最新の状態を反映していることを確認します。 その重要性 ユーザーがデータ遅延を認識し、報告されたメトリクスの最新性を検証するのに役立ちます。 取得元 ETL/抽出スクリプトによって実行時に生成されます。 例 2023-11-05T00:00:00Z2023-11-05T12:00:00Z | |||
| コストセンター CostCenter | 従業員に関連するコストセンター。 | ||
| 説明 コストセンターは、従業員の費用が割り当てられる財務部門またはユニットを表します。「タイムシート承認のボトルネック」ダッシュボードでは部門の代理として機能し、どの組織単位が給与計算サイクルを遅らせているかを特定するのに役立ちます。 組織割り当てインフォタイプ(PA0001)のフィールド その重要性 組織的なドリルダウンを可能にし、遅延や手戻りの原因となっている特定の部署を特定するのに役立ちます。 取得元 テーブルPA0001、フィールドKOSTL。 例 CC-1000 財務CC-2000 ITCC-3000 営業 | |||
| 従業員タイプ EmployeeType | 従業員の分類(例:正社員、契約社員)。 | ||
| 説明 この属性は、従業員を現役、退職者、契約社員などの雇用関係に基づいて分類します。給与計算処理の複雑さは、従業員タイプと相関することが多く、特定のグループではより多くの手動介入や特定のコンプライアンスチェックが必要となります。 技術的にはSAPの従業員グループ( その重要性 プロセス変動や遅延が特定の雇用カテゴリーに固有のものであるかを特定するのに役立ちます。 取得元 テーブルPA0001、フィールドPERSG(グループ)およびPERSK(サブグループ)。 例 現役従業員研修生年金受給者時間契約社員 | |||
| 給与サイクル頻度 PayCycleFrequency | 実行が通常のものか、期外のものかを示します。 | ||
| 説明 この属性は、標準の定期的な給与計算実行と、修正や即時支払い目的で使用されるアドホックな「オフサイクル」実行とを区別します。オフサイクル実行の多さはプロセス非効率性の主要な指標であり、「オフサイクル支払い量分析」ダッシュボードで追跡されます。 給与クラスタディレクトリのオフサイクル理由( その重要性 「期外支払比率」KPIを測定し、非標準処理の削減を目標とする上で不可欠です。 取得元 テーブルRGDIR(クラスタディレクトリ)、フィールドOCRSNまたはPAYTY。 例 通常修正Aボーナス支払い解雇 | |||
| 給与担当者 PayrollSpecialist | 記録を処理する担当者のユーザーIDまたは氏名。 | ||
| 説明 この属性は、手動ステップや承認を実行する給与管理者または担当者の身元を捕捉します。「担当者スループットおよびワークロード」ダッシュボードのコア属性であり、ワークロードの配分と個人の生産性分析を可能にします。 システムログの その重要性 ワークロードの均衡化とプロセスにおける人的ボトルネックの特定に不可欠です。 取得元 CDHDRまたはワークフローアクターIDにログ記録されたシステムフィールド(SY-UNAME)。 例 JSMITHKMILLERSYSTEM | |||
| 給与期間 PayPeriod | 会計年度内の特定の期間番号。 | ||
| 説明 この属性は、給与期間のシーケンス番号(例:1月は01、または隔週サイクルの最初の週)を示します。アナリストは、これにより経時的なパフォーマンス傾向を追跡し、処理ワークロードの季節性を特定できます。
その重要性 トレンド分析を可能にし、特定の時期における季節的なボトルネックの特定に役立ちます。 取得元 テーブルPA0001または給与計算結果クラスタ(RGDIR)、フィールドPABRP。 例 01122652 | |||
| 給与領域 PayrollArea | 従業員が所属する特定の給与計算グループを定義します。 | ||
| 説明 給与領域は、同じ給与計算実行で処理される従業員をグループ化します。これは、多くの場合、給与頻度(例:月次 vs. 隔週)や組織構造に基づいています。この属性は、異なる従業員集団間のパフォーマンスを比較するためのプロセス分析をセグメント化する上で重要です。 SAPでは、これは技術フィールド その重要性 異なるグループ(例:時給制と月給制)間での給与計算サイクルパフォーマンスの比較を可能にします。 取得元 テーブルPA0001(組織割り当て)、フィールドABKRS。 例 米国隔週ドイツ月次役員給与 | |||
| 総支給額 GrossPayAmount | 記録のために計算された総支給額。 | ||
| 説明 この属性は、控除前の総支給額の合計金額を表します。財務検証の基本的なメトリックであり、高額な支払いを、増加した監査の精査や承認のリードタイムと関連付けるために使用されます。 給与計算結果テーブル(RT)から抽出され、通常は総支給額を表す特定の賃金タイプ(例:/101)の下にあります。計算の基礎を提供することで、「福利厚生および税額計算の正確性」分析をサポートします。 その重要性 支払い金額に基づいてプロセス挙動を分析できます(例:より高額な支払いは承認に時間がかかりますか?)。 取得元 給与結果テーブル(RT)、賃金タイプ/101またはそれに類するもの。 例 5000.002500.5010500.00 | |||
| 自動化 IsAutomated | `アクティビティ`が`システム``ユーザー`によって実行されたかどうかを示す`フラグ`。 | ||
| 説明 このブール属性は、特定のプロセスステップがバックグラウンドジョブ/システムユーザーによって実行されたか、人間によって実行されたかを識別します。「銀行振込自動化モニター」がタッチレス処理の割合を計算するために不可欠です。 通常、既知のシステムアカウント(例:「BATCH」、「SAP_WORKFLOW」)のリストに対してユーザーIDをチェックすることで導出されます。 その重要性 自動化率を測定し、手動作業を削減する機会を特定するのに役立ちます。 取得元 ユーザーIDから導出されます(例:Userが['BATCH', 'SYSTEM']に含まれる場合、true)。 例 truefalse | |||
| SLA処理期限 SLAProcessingDeadline | 給与計算実行を完了するための目標タイムスタンプ。 | ||
| 説明 この属性は、タイムリーな支払いを保証するために給与計算を完了させるための内部または外部の期限を表します。実際の「支払い実行済み」タイムスタンプと比較することで、「SLA遵守率」KPIを計算するために使用されます。 SAPテーブルの標準フィールドであるとは限りませんが、多くの場合、カスタム管理テーブルで維持されるか、給与計算カレンダーに基づいて概念的に定義されます(例:支払日の2日前)。このデータモデルでは、支払日から一定のバッファを引いて導出されることが多いです。 その重要性 これは、タイムリーさとSLA遵守を評価するためのベンチマークを提供します。 取得元 支払日 (T549S) から設定済みの処理日数を差し引いて算出されます。 例 2023-10-28T17:00:00Z2023-11-28T17:00:00Z | |||
| サイクルタイム(日数) CycleTimeDays | 給与計算プロセスの総期間(日数)。 | ||
| 説明 この計算属性は、プロセス開始(例:タイムシート提出済み)から終了(例:支払い実行済み)までの経過時間を測定します。プロセス速度の概要を提供し、「エンドツーエンドの給与サイクル期間」ダッシュボードで使用されます。 これは、特定のケースの最大タイムスタンプと最小タイムスタンプの差として計算されます。 その重要性 これは、プロセス全体の効率と速度を評価するための主要な指標です。 取得元 計算値: ケースのEndTime - StartTime。 例 5.52.010.1 | |||
| 手戻り回数 ReworkCount | 修正が実行された回数。 | ||
| 説明 この計算メトリックは、ケース履歴に「データ修正実行済み」アクティビティが出現する回数をカウントします。プロセス非効率性の直接的な尺度であり、「手動修正および手戻り率」ダッシュボードをサポートします。 手戻り回数が多いことは、永続的なデータ品質の問題や、初回検証に失敗する複雑なケースを示唆します。 その重要性 エラー修正によって失われた労力を数値化し、データ品質向上の取り組みを正当化するのに役立ちます。 取得元 Case IDごとの「データ修正実行済み」アクティビティを数えることで計算されます。 例 013 | |||
| 法人 LegalEntity | 従業員の会社コードまたは法的エンティティ。 | ||
| 説明 この属性は、給与記録に関連付けられている法人(会社コード)を識別します。これにより、異なる子会社や企業エンティティ間での給与計算パフォーマンスの財務報告と分析が可能になります。 組織割り当てインフォタイプ(PA0001)の その重要性 企業間のベンチマーク設定と財務配分分析をサポートします。 取得元 テーブルPA0001、フィールドBUKRS。 例 US01DE011000 | |||
| 監査例外フラグ AuditExceptionFlag | 監査例外が発生したかどうかを示すフラグ。 | ||
| 説明 この属性は、給与シミュレーションまたは計算中に検証ルールが例外または警告をトリガーしたケースにフラグを立てます。「監査例外頻度」KPIの主要な入力です。 データは通常、給与ログまたは特定のエラーメッセージテーブル(FEHLER)から取得されます。真の値は、プロセスフローに例外処理パスが含まれていたことを示します。 その重要性 データ品質の問題と手動介入の必要性を強調します。 取得元 給与計算ログ内のエラーメッセージの有無、または特定のステータスコードから導出されます。 例 truefalse | |||
| 税務管轄区域 TaxJurisdiction | 従業員に適用される税務地域または税務当局。 | ||
| 説明 この属性は、給与記録を管轄する特定の税務当局または地域(例:州、県、カントン)を識別します。「監査例外とコンプライアンスリスク」ダッシュボードにとって、地理的にコンプライアンス問題を特定する上で不可欠です。 SAP US給与計算では、これは その重要性 規制地域ごとにコンプライアンスリスクと監査例外をセグメンテーションできます。 取得元 テーブルPA0001またはPA0207/PA0208、フィールドTXJCD。 例 CANYTXNRW | |||
給与計算処理活動
| アクティビティ | 説明 | ||
|---|---|---|---|
| タイムシート承認済み | マネージャーまたは管理者による勤怠データの正式な承認。このステータス変更により、給与計算エンジンへのデータ転送が検証されます。 | ||
| その重要性 勤怠承認リードタイムKPIを計算します。ここでのボトルネックは、管理上の遅延や複雑な承認階層を示します。 取得元 Employee Central Workflow Requestテーブル (WfRequest) で、ステータスがCOMPLETEDまたはAPPROVEDでフィルタリング。 取得 ワークフローステータスがAPPROVEDに変更されたときにログ記録されます イベントタイプ explicit | |||
| タイムシート提出済み | 従業員またはマネージャーが給与期間の勤怠データを提出するイベント。これは、ECPにリンクされたEmployee Centralモジュールのワークフローリクエストログから取得されます。 | ||
| その重要性 データ蓄積フェーズの開始を示します。ここでの遅延は下流に波及し、給与処理期間を圧迫します。 取得元 Employee Central Workflow Requestテーブル (WfRequest) で、勤怠または休暇カテゴリでフィルタリング。 取得 ワークフローステータスがSUBMITTEDに変更されたときにログ記録されます イベントタイプ explicit | |||
| 支払い実行 | 支払いプロセスの最終化。多くの場合、銀行による確認またはF110支払い実行の完了によって確認されます。 | ||
| その重要性 SLA遵守率の主要な終了タイムスタンプ。従業員が期日通りに支払われたかどうかを判断します。 取得元 支払い実行テーブル(REGUH)の実行日時、または受渡日から推測される日時。 取得 支払実行ステータスが「転記済み/完了」に設定されたときにログ記録されます イベントタイプ explicit | |||
| 税務申告完了 | 税務レポーターファイル(例:米国のPU19)の生成、またはサードパーティの税務申告プロバイダーへの転送。 | ||
| その重要性 規制順守を保証します。シーケンスにおける最終的なコンプライアンスステップを追跡します。 取得元 税務レポーターログマネージャーまたはB2A(Business to Administration)マネージャーのログ。ファイル生成の成功を示します。 取得 Tax Reporter実行が正常に完了したときにログ記録されます イベントタイプ explicit | |||
| 給与シミュレーション実行済み | 給与計算ドライバーのテスト実行で、結果をデータベースにコミットせずにエラーを特定します。これはPCC検証フェーズにおける重要なステップです。 | ||
| その重要性 初回計算率を算出するために不可欠です。繰り返しのシミュレーションはデータ品質の問題を示します。 取得元 給与管理センターのステップインスタンスログ(PYC_D_STEP_INST)。ステップタイプがシミュレーションに対応します。 取得 PCCシミュレーションステップのステータスがCOMPLETEDに変更されたときにログ記録されます イベントタイプ explicit | |||
| 給与プロセス初期化済み | 給与管理センター(PCC)内で給与計算プロセスインスタンスを作成する行為。これにより、特定の給与領域における給与計算サイクルが正式に開始されます。 | ||
| その重要性 エンドツーエンドの給与サイクル期間全体のベースラインを設定します。処理対象となる従業員の範囲を定義します。 取得元 給与管理センターテーブル(例: PYC_D_PY_PROC_INST)。新しいプロセスIDの作成を追跡します。 取得 PCCプロセスインスタンスが作成されたときにログ記録されます イベントタイプ explicit | |||
| 給与記録承認済み | 従業員または給与グループの給与計算結果に対する正式な承認。これはPCCの「監視」または「承認」ステップで発生します。 | ||
| その重要性 計算・検証フェーズの終了と支払い承認を示します。担当者のスループット分析にとって重要です。 取得元 給与管理センターの承認または確認ステップのステップインスタンスログ(PYC_D_STEP_INST)。 取得 PCC承認ステップのステータスがCOMPLETEDに変更されたときにログ記録されます イベントタイプ explicit | |||
| 総支給額計算済み | 総給与計算スキーマの成功裡の実行。標準処理では、給与ドライバーがPCL2クラスタに書き込む際に発生します。 | ||
| その重要性 勤怠データとレートデータが正常に結合されたことを示す重要なマイルストーンです。ここでの遅延は、グロスからネットへの処理効率に影響を与えます。 取得元 クラスタPCL2(給与計算結果)、特に「対象期間」のディレクトリテーブル(RGDIR)タイムスタンプ。 取得 給与計算クラスタに新しいシーケンス番号が書き込まれたときにログ記録されます イベントタイプ explicit | |||
| 銀行振込ファイル生成済み | 予備DME(pre-DME)または最終DMEファイルの作成。これにより、銀行への支払い指示が生成されます。 | ||
| その重要性 銀行振込自動化モニターを追跡します。ファイルの生成失敗は重要なプロセス停止です。 取得元 DME / Payment Medium Workbench (PMW) 実行からのログで、多くの場合TemSeまたは特定の支払実行テーブル (ReguH/ReguP) に保存されます。 取得 支払実行 (F110/RPCIPE) が出力を生成したときにログ記録されます イベントタイプ explicit | |||
| インセンティブデータインポート済み | 賞与やコミッションなどの非標準的な給与データを給与システムに取り込むこと。通常、インフォタイプ0015または2010へのデータ読み込みを伴います。 | ||
| その重要性 インポートの遅延は正確な総支給額計算を妨げます。これを分析することで、インセンティブデータ統合リードタイムの最適化に役立ちます。 取得元 インフォタイプ0015(追加支払)または2010(従業員報酬情報)にレコードが作成されたことを示す監査ログ(PCL4または同等)。 取得 インフォタイプ作成タイムスタンプとインポートジョブログを比較 イベントタイプ inferred | |||
| データ修正実行済み | 監査例外に対応して、マスタデータまたは勤怠データに加えられた変更。これは、給与計算アラートをクリアするために必要な手戻りを表します。 | ||
| その重要性 手動修正と手戻り率を追跡します。これはプロセス非効率性の主要な要因となる活動です。 取得元 PCCアラートのタイムスタンプと、同じ従業員に対するアラートがクローズされる前の後続の監査ログ変更(PCL4)を結合することで推測されます。 取得 PCCアラートがアクティブな間に発生するマスタデータ更新を特定 イベントタイプ inferred | |||
| 監査例外フラグ設定済み | 給与管理センターのポリシーチェックによる検証アラートの生成。これらのアラートは、データの一貫性のない部分やコンプライアンスリスクを特定します。 | ||
| その重要性 監査例外頻度およびコンプライアンスリスクのダッシュボードを直接サポートします。高頻度の発生は、上流のデータ品質の問題を示唆しています。 取得元 給与管理センターアラートテーブル(PYC_D_ALERT)。特定のエラーコードと従業員記録をリンクします。 取得 PCCアラートテーブルに新しいエントリが作成されたときにログ記録されます イベントタイプ explicit | |||
| 福利厚生控除適用済み | 計算スキーマ内の特定のステップで福利厚生ロジックが処理されます。主要な実行の一部ですが、これを分離することで構成エラーを特定するのに役立ちます。 | ||
| その重要性 福利厚生および税額計算の正確性分析をサポートします。複雑な控除ロジックの不一致のデバッグに役立ちます。 取得元 給与計算結果におけるV0分割の存在、または詳細なロギングが有効になっている場合(本番環境では稀)の特定のログエントリから推測されます。 取得 総支給額計算済みと同時期に発生するが、分析上は概念的に区別される イベントタイプ inferred | |||
| 給与明細発行済み | セルフサービス(ESS)を通じて従業員に給与明細を利用可能にする行為。 | ||
| その重要性 給与明細配布SLAのパフォーマンスを測定します。ここでの遅延はヘルプデスクチケットを発生させます。 取得元 給与明細マッシュアップサービスのログにおける「印刷日」または利用可能日設定から推測されます。 取得 支払日 + システム設定遅延に基づいて計算 イベントタイプ 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(従業員報酬情報)をクエリすることで、「インセンティブデータインポート済み」を抽出します。
- PCCプロセスステップをテーブルPYC_D_PYP(プロセスインスタンス)およびPYC_D_BINST(ステップインスタンス)から取得し、「給与計算プロセス開始済み」、「給与計算シミュレーション実行済み」、「給与計算レコード承認済み」、「給与明細発行済み」をキャプチャします。
- テーブルPYC_D_ALERTをクエリして、「監査例外フラグ設定済み」イベントを特定します。これらのレコードは、PCCチェックステップ中に発見された検証エラーを特定の従業員にリンクします。
- アクティブな給与計算ウィンドウ中に、SAP変更伝票ヘッダーテーブル(CDHDR)と給与計算関連インフォタイプ(例:0008、0015、2001)を結合することで、「データ修正実行済み」イベントを生成します。
- テーブルHRPY_RGDIRを利用して、「総支給額計算済み」の正確なタイミングを特定します。同じタイムスタンプを利用して「福利厚生控除適用済み」の派生イベントを作成します。これらはスキーマ実行中に同時に発生するためです。
- テーブルREGUH(決済データ)とREGUT(DME管理)から財務データをリンクし、「銀行振込ファイル生成済み」と「支払実行済み」をキャプチャします。
PayrollRecord列を[EmployeeID]-[Period]-[Year]の形式に厳密に従うように変換し、ケースIDの一意性を確保します。- 最終データセットをCSVファイルとしてエクスポートし、ヘッダーが契約で定義された属性と一致していることを確認して、ProcessMindにアップロードします。
設定
- 期間: 過去6〜12ヶ月間のローリングウィンドウをカバーするように抽出を設定してください。給与計算プロセスは周期的であり、この範囲により、通常実行と期外実行における十分な変動を捉えることができます。
- 給与計算領域 (ABKRS): 分析が同様のプロセスサイクルを比較するように、特定の給与計算領域(例:米国月次、ドイツ週次)でフィルタリングしてください。
- 言語: アクティビティとプロセスステップの説明が、主要なシステム言語(例:SPRAS = 'E')で抽出されることを確認してください。
- PCCプロセスID: 'Monitoring'、'Production'、'Off-Cycle'用にPCC設定で使用されている特定のプロセス定義ID(PYP_ID)を特定し、関連するステップをフィルタリングしてください。
- 通貨: グローバルな給与計算業務のためにデータを抽出する場合、金融金額(GrossPayAmount)を単一の通貨に正規化してください。
- 承認: データベースユーザーは、人事(PA/PY)テーブル、特にクラスタディレクトリ(HRPY_RGDIR)およびPCCテーブル(PYC_*)への読み取りアクセスが必要です。
a クエリ例 config
/* 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)を押してレポートを実行します。
- 選択の構成: 選択画面で、
給与計算領域(例:US、99)、有効な日付範囲(例:過去3ヶ月間)、およびオプションでテスト用に特定の人事番号(PERNR)でフィルタリングします。 - 抽出の実行: レポートを実行します。システムはHRPY_RGDIR、CATSDB、PA0015、およびREGUHテーブルを処理してイベントログを構築します。
- 出力の確認: レポートは
cl_demo_outputを利用して、結果を画面上にグリッドビューで直接表示し、即座に検証できるようにします。 - データのエクスポート: 結果グリッドを右クリックし、「スプレッドシート」を選択して、ファイルをCSVまたはExcel形式で保存します。
- ProcessMind用のフォーマット: エクスポートしたファイルを開きます。
EventTimestamp列がYYYY-MM-DD HH:MM:SS形式になっていることを確認します。PayrollRecord列が一意にケース(通常はPERNR-SEQNR)を識別することを確認します。 - アップロード: クリーンアップされたCSVファイルをProcessMindにインポートし、列をCase ID、Activity、Timestamp、およびAttributesに適切にマッピングします。
設定
- 日付範囲: ABAPランタイム環境でのメモリタイムアウトを避けるため、データを3〜6ヶ月のチャンクで抽出することを推奨します。
- 給与計算領域: これは重要なフィルタです(テーブルT549A)。プロセスの一貫性を確保するため、一度に1つの給与計算領域(例:月次と隔週)を常に抽出してください。
- 設定テーブル: スクリプトは
HRPY_RGDIR(給与計算ディレクトリ)を主要なドライバとして読み取ります。このテーブルに対するユーザーのS_TABU_DIS権限を確保してください。 - 勤怠データソース: スクリプトは勤怠データが
CATSDBにあると想定しています。CATSを介さずにIT2001またはIT2010に直接連携するサードパーティのタイムクロックを使用している場合、勤怠アクティビティが空になる可能性があり、スクリプトの調整が必要です。 - 支払データ: スクリプトは
REGUH(決済データ)を介して給与計算実行と支払実行をリンクします。支払イベントを確認するには、選択された期間についてF110支払実行が完了していることを確認してください。 - パフォーマンス: 大量のシステム(従業員10万人以上)の場合、
SELECT *ロジックをカーソルベースのフェッチに置き換えるか、バックグラウンドモード(F9)で実行してください。
a クエリ例 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 ).