Votre modèle de données de traitement de la paie
Votre modèle de données de traitement de la paie
- Champs de données stratégiques pour l'analyse de la paie
- Jalons clés pour la découverte de processus
- Guide d'extraction spécifique au système
Attributs de traitement de la paie
| Nom | Description | ||
|---|---|---|---|
| Activité Activity | La tâche ou l'événement spécifique survenant dans le processus de paie. | ||
| Description Cet attribut capture le nom de l'étape de processus exécutée, tel que 'Feuille de temps soumise', 'Simulation de paie exécutée' ou 'Paiement exécuté'. Il constitue la base de la carte de processus et permet aux analystes de visualiser la séquence des opérations effectuées pendant le cycle de paie. Les données pour cet attribut sont extraites de divers journaux, y compris les journaux Workflow (SWWLOGHIST), les journaux de modifications d'Infotype (CDHDR/CDPOS), et les tables de statut de paie spécifiques. Des conventions de dénomination cohérentes sont appliquées pendant l'extraction pour garantir que les codes d'événements techniques se traduisent en noms d'activités lisibles par l'entreprise. Pourquoi c'est important Il définit les nœuds dans le graphe de processus, permettant la visualisation des flux de processus, des boucles et des variantes. Où obtenir Dérivé de SWWLOGHIST (Workflow), CDHDR (Documents de modification) ou des changements de statut PA03 (Enregistrement de contrôle). Exemples Feuille de temps soumiseSalaire brut calculéException d'audit signaléePaiement effectué | |||
| Enregistrement de paie PayrollRecord | L'identifiant unique combinant l'employé et la période de paie. | ||
| Description L'Enregistrement de paie agit comme l'identifiant de cas central pour l'analyse Process Mining. Il représente une seule itération de traitement de paie pour un employé spécifique au sein d'une période de paie définie, liant toutes les activités depuis la soumission initiale de la feuille de temps jusqu'à la déclaration fiscale finale. Dans SAP SuccessFactors Employee Central Payroll, ceci est généralement construit en concaténant le numéro de personnel (PERNR) avec l'année de paie (PABRJ) et la période de paie (PABRP), et potentiellement un numéro de séquence (SEQNR) pour distinguer plusieurs exécutions. Cette granularité garantit que chaque cycle de paiement est analysé comme une instance distincte, permettant une mesure précise du temps de cycle et un suivi des erreurs. Pourquoi c'est important Il sert d'ID de cas, regroupant tous les événements pertinents pour reconstruire le chemin du processus de bout en bout pour chaque chèque de paie émis. Où obtenir Construit à partir des tables SAP Cluster B2 (Résultats d'évaluation des temps) ou PC_PAYRESULT (PERNR, PABRJ, PABRP, SEQNR). Exemples 10023499-2023-1088291022-2024-01-SEQ01US-10293-2023-52 | |||
| Timestamp de l'événement EventTimestamp | La date et l'heure exactes de l'activité. | ||
| Description Cet attribut enregistre le moment précis où un événement s'est produit, en stockant à la fois la date et l'heure. Il est fondamental pour le calcul de toutes les métriques temporelles, y compris les temps de cycle, les délais d'exécution et les taux de rendement entre les différentes étapes du processus. Dans SAP ECP, il est extrait des champs d'horodatage comme Pourquoi c'est important Il permet le calcul de la durée entre les événements, ce qui est essentiel pour identifier les goulots d'étranglement de performance et les violations de SLA. Où obtenir CDHDR-UDATE/UTIME, SWWLOGHIST-WI_CD/WI_CT, ou des Exemples 2023-10-25T08:30:00Z2023-10-26T14:15:22Z2023-11-01T09:00:00Z | |||
| Dernière mise à jour des données LastDataUpdate | L'horodatage de la dernière extraction de données. | ||
| Description Cet attribut indique la dernière date d'actualisation de l'enregistrement de données dans le modèle de données de Process Mining. Il aide les analystes à comprendre la fraîcheur des données et garantit que les insights sont basés sur des informations actuelles. Bien qu'il ne soit pas directement utilisé pour l'analyse des flux de processus, il est crucial pour la gouvernance et la validation des données, vérifiant que le tableau de bord reflète l'état le plus récent du système de paie. Pourquoi c'est important Il garantit que les utilisateurs sont conscients de la latence des données et aide à valider l'actualité des métriques rapportées. Où obtenir Généré par le script ETL / d'extraction à l'exécution. Exemples 2023-11-05T00:00:00Z2023-11-05T12:00:00Z | |||
| Système source SourceSystem | Le système d'où proviennent les données d'événement. | ||
| Description Cet attribut identifie l'instance SAP SuccessFactors Employee Central Payroll spécifique ou le sous-système connecté d'où les données ont été extraites. Dans les environnements complexes avec plusieurs systèmes de paie ou des configurations hybrides, ce champ assure la traçabilité et la lignée des données. Il est particulièrement utile lors de l'analyse de données provenant de différentes installations régionales ou lors de la comparaison des performances entre les systèmes hérités et migrés. Il s'agit généralement d'une chaîne statique configurée lors de la mise en place de l'extraction des données. Pourquoi c'est important Il permet la segmentation des données dans des environnements multi-systèmes et aide à résoudre les problèmes de qualité des données en identifiant l'origine. Où obtenir ID système (SID) de l'installation SAP ou de la configuration d'extraction. Exemples SAP_ECP_NASAP_ECP_EMEASuccessFactors_Core | |||
| Centre de coûts CostCenter | Le centre de coûts associé à l'employé. | ||
| Description Le Centre de coûts représente le service ou l'unité financière auquel les coûts de l'employé sont alloués. Il sert de proxy pour le service dans le tableau de bord 'Goulots d'étranglement de l'approbation des feuilles de temps', aidant à identifier les unités organisationnelles qui retardent le cycle de paie. Trouvé dans l'infotype Affectation organisationnelle (PA0001) en tant que champ Pourquoi c'est important Il permet une exploration organisationnelle pour identifier les départements spécifiques causant des retards ou des reprises. Où obtenir Table PA0001, champ KOSTL. Exemples CC-1000 FinanceCC-2000 ITCC-3000 Ventes | |||
| Domaine de paie PayrollArea | Définit le groupe de paie spécifique auquel appartient un employé. | ||
| Description Le Domaine de paie regroupe les employés qui sont traités ensemble dans la même exécution de paie, souvent en fonction de la fréquence de paie (par exemple, mensuelle ou bi-hebdomadaire) ou de la structure organisationnelle. Cet attribut est essentiel pour segmenter l'analyse des processus afin de comparer les performances entre différentes populations d'employés. Dans SAP, cela correspond au champ technique Pourquoi c'est important Il permet la comparaison des performances du cycle de paie entre différents groupes (par exemple, Salariés à l'heure vs. Salariés). Où obtenir Table PA0001 (Affectation organisationnelle), champ ABKRS. Exemples Bi-hebdomadaire aux États-UnisDE MensuelPaie des cadres | |||
| Est Automatisé IsAutomated | Indicateur signalant si l'activité a été réalisée par un utilisateur système. | ||
| Description Cet attribut booléen identifie si une étape de processus spécifique a été exécutée par une tâche d'arrière-plan/utilisateur système ou par un humain. Il est crucial pour le 'Moniteur d'automatisation des virements bancaires' afin de calculer le pourcentage de traitement sans contact. Il est généralement dérivé en vérifiant l'ID utilisateur par rapport à une liste de comptes système connus (par exemple, 'BATCH', 'SAP_WORKFLOW'). Pourquoi c'est important Il aide à mesurer les taux d'automatisation et à identifier les opportunités de réduction de l'effort manuel. Où obtenir Dérivé de l'ID utilisateur (par exemple, si l'utilisateur est dans ['BATCH', 'SYSTEM'], alors vrai). Exemples truefaux | |||
| Fréquence du cycle de paie PayCycleFrequency | Indique si l'exécution est régulière ou hors cycle. | ||
| Description Cet attribut distingue les exécutions de paie standard planifiées des exécutions « hors cycle » ad hoc utilisées pour les corrections ou les paiements immédiats. Des volumes élevés d'exécutions hors cycle sont un indicateur clé de l'inefficacité des processus et sont suivis par le tableau de bord 'Analyse du volume de paiements hors cycle'. Il est dérivé des champs Raison du hors cycle ( Pourquoi c'est important Il est essentiel pour mesurer le KPI du 'Ratio de paiement hors cycle' et cibler les réductions dans le traitement non standard. Où obtenir Table RGDIR (Répertoire de cluster), champ OCRSN ou PAYTY. Exemples RégulierCorrection APaiement de bonusRésiliation | |||
| Montant du salaire brut GrossPayAmount | Le salaire brut total calculé pour l'enregistrement. | ||
| Description Cet attribut représente la valeur monétaire totale du salaire brut avant déductions. C'est une métrique fondamentale pour la validation financière et elle est utilisée pour corréler les paiements de grande valeur avec un examen d'audit accru ou des délais d'approbation plus longs. Extrait de la table des résultats de paie (RT), typiquement sous des types de salaire spécifiques représentant le brut total (par exemple, /101). Il soutient l'analyse de la 'Précision du calcul des avantages et des impôts' en fournissant la base de calcul. Pourquoi c'est important Il permet l'analyse du comportement du processus basé sur la valeur du paiement (par exemple, les paiements plus importants prennent-ils plus de temps à être approuvés ?). Où obtenir Table des résultats de paie (RT), Type de salaire /101 ou similaire. Exemples 5000.002500.5010500.00 | |||
| Période de paie PayPeriod | Le numéro de période spécifique au sein de l'exercice fiscal. | ||
| Description Cet attribut désigne le numéro séquentiel de la période de paie (par exemple, 01 pour janvier ou le premier cycle bi-hebdomadaire). Il permet aux analystes de suivre les tendances de performance au fil du temps et d'identifier la saisonnalité dans les charges de travail de traitement. Issu de Pourquoi c'est important Il permet l'analyse des tendances et l'identification des goulots d'étranglement saisonniers à des moments spécifiques de l'année. Où obtenir Table PA0001 ou cluster de résultats de paie (RGDIR), champ PABRP. Exemples 01122652 | |||
| Spécialiste de la paie PayrollSpecialist | L'ID utilisateur ou le nom de la personne traitant l'enregistrement. | ||
| Description Cet attribut capture l'identité de l'administrateur ou du spécialiste de la paie responsable de l'exécution des étapes manuelles ou des approbations. C'est l'attribut principal du tableau de bord 'Débit et charge de travail des spécialistes', permettant l'analyse de la distribution de la charge de travail et de la productivité individuelle. Il est issu du champ Pourquoi c'est important Il est essentiel pour l'équilibrage de la charge de travail et l'identification des goulots d'étranglement humains dans le processus. Où obtenir Champs système (SY-UNAME) enregistrés dans CDHDR ou ID d'acteur de Workflow. Exemples JSMITHKMILLERSYSTEM | |||
| Type d'employé EmployeeType | Classification de l'employé (par exemple, Permanent, Contractuel). | ||
| Description Cet attribut catégorise les employés en fonction de leur relation d'emploi, telle qu'actif, retraité ou entrepreneur. Les variations de complexité du traitement de la paie sont souvent corrélées au type d'employé, certains groupes nécessitant davantage d'interventions manuelles ou des vérifications de conformité spécifiques. Techniquement, il est extrait des champs Groupe d'employés ( Pourquoi c'est important Il aide à identifier si les variations de processus ou les retards sont spécifiques à certaines catégories d'emploi. Où obtenir Table PA0001, champs PERSG (Groupe) et PERSK (Sous-groupe). Exemples Employé actifStagiaireRetraitéContractuel horaire | |||
| Date limite de traitement SLA SLAProcessingDeadline | L'horodatage cible pour l'achèvement de l'exécution de la paie. | ||
| Description Cet attribut représente la date limite interne ou externe pour finaliser la paie afin d'assurer un paiement ponctuel. Il est utilisé pour calculer le KPI 'Taux de conformité SLA' en le comparant à l'horodatage réel 'Paiement exécuté'. Bien qu'il ne soit pas toujours un champ standard dans les tables SAP, il est souvent maintenu dans une table de contrôle personnalisée ou défini conceptuellement en fonction du calendrier de paie (par exemple, 2 jours avant la date de paie). Pour ce modèle de données, il est souvent dérivé de la Date de paie moins un tampon défini. Pourquoi c'est important Il fournit la référence pour évaluer la ponctualité et le respect des SLA. Où obtenir Dérivé de la date de paie (T549S) moins les jours de traitement configurés. Exemples 2023-10-28T17:00:00Z2023-11-28T17:00:00Z | |||
| Entité juridique LegalEntity | Le code société ou l'entité juridique de l'employé. | ||
| Description Cet attribut identifie l'entité juridique (Code Société) associée à l'enregistrement de paie. Il permet le reporting financier et l'analyse de la performance de la paie à travers différentes filiales ou entités corporatives. Il est issu du champ Pourquoi c'est important Il prend en charge l'analyse comparative inter-entreprises et l'analyse d'allocation financière. Où obtenir Table PA0001, champ BUKRS. Exemples US01DE011000 | |||
| Indicateur d'exception d'audit AuditExceptionFlag | Indicateur signalant si une exception d'audit s'est produite. | ||
| Description Cet attribut signale les cas où les règles de validation ont déclenché une exception ou un avertissement pendant la simulation ou le calcul de paie. Il constitue l'entrée principale pour le KPI 'Fréquence des exceptions d'audit'. Les données proviennent souvent du journal de paie ou de tables de messages d'erreur spécifiques (FEHLER). Une valeur vraie indique que le flux de processus incluait un chemin de gestion des exceptions. Pourquoi c'est important Il met en évidence les problèmes de qualité des données et la nécessité d'une intervention manuelle. Où obtenir Dérivé de la présence de messages d'erreur dans le journal de paie ou de codes de statut spécifiques. Exemples truefaux | |||
| Juridiction fiscale TaxJurisdiction | La région ou l'autorité fiscale applicable à l'employé. | ||
| Description Cet attribut identifie l'autorité ou la région fiscale spécifique (par exemple, État, Province, Canton) régissant l'enregistrement de paie. Il est essentiel pour le tableau de bord 'Exception d'audit et risque de conformité' afin d'identifier géographiquement les problèmes de conformité. Dans SAP US Payroll, il s'agit du champ Pourquoi c'est important Il permet la segmentation des risques de conformité et des exceptions d'audit par région réglementaire. Où obtenir Table PA0001 ou PA0207/PA0208, champ TXJCD. Exemples CANYTXNRW | |||
| Nombre de retouches ReworkCount | Nombre de fois qu'une correction a été effectuée. | ||
| Description Cette métrique calculée compte le nombre de fois où l'activité 'Correction de données effectuée' apparaît dans l'historique du cas. C'est une mesure directe de l'inefficacité du processus et elle soutient le tableau de bord 'Taux de correction manuelle et de retravail'. Un nombre élevé de retouches indique des problèmes persistants de qualité des données ou des cas complexes qui échouent à la validation initiale. Pourquoi c'est important Il quantifie l'effort perdu en correction d'erreurs et aide à justifier les initiatives de qualité des données. Où obtenir Calculé en comptant les activités 'Correction de données effectuée' par CaseId. Exemples 013 | |||
| Temps de cycle (Jours) CycleTimeDays | Durée totale du processus de paie en jours. | ||
| Description Cet attribut calculé mesure le temps écoulé entre le début du processus (par exemple, Feuille de temps soumise) et la fin (par exemple, Paiement exécuté). Il offre une vue d'ensemble de la vitesse du processus et est utilisé dans le tableau de bord 'Durée du cycle de paie de bout en bout'. Il est calculé comme la différence entre les horodatages maximum et minimum pour un cas donné. Pourquoi c'est important C'est la métrique principale pour évaluer l'efficacité et la rapidité globales du processus. Où obtenir Calculé : Heure de fin - Heure de début du cas. Exemples 5.52.010.1 | |||
Activités de traitement de la paie
| Activité | Description | ||
|---|---|---|---|
| Déclaration fiscale complétée | La génération de fichiers de rapports fiscaux (par exemple, PU19 aux États-Unis) ou le transfert à un fournisseur tiers de dépôt fiscal. | ||
| Pourquoi c'est important Assure la conformité réglementaire. Suit la dernière étape de conformité dans la séquence. Où obtenir Journaux du gestionnaire de rapports fiscaux (Tax Reporter Log Manager) ou du gestionnaire B2A (Business to Administration) indiquant une génération de fichier réussie. Capture Enregistré lorsque l'exécution de Tax Reporter se termine avec succès Type d'événement explicit | |||
| Enregistrement de paie approuvé | La validation formelle des résultats de paie pour un employé ou un groupe de paie. Cela se produit à l'étape 'Monitoring' ou 'Sign Off' du PCC. | ||
| Pourquoi c'est important Marque la fin de la phase de calcul/validation et la libération pour paiement. Essentiel pour l'analyse du débit des spécialistes. Où obtenir Journaux d'instance d'étape du Centre de Contrôle de la Paie (PYC_D_STEP_INST) pour l'étape d'approbation ou de confirmation. Capture Enregistré lorsque le statut de l'étape d'approbation PCC passe à COMPLETED Type d'événement explicit | |||
| Feuille de temps approuvée | L'approbation formelle des données de temps par un gestionnaire ou un administrateur. Ce changement de statut valide les données pour le transfert vers le moteur de paie. | ||
| Pourquoi c'est important Calcule le KPI du temps de traitement de l'approbation des feuilles de temps. Les goulots d'étranglement ici indiquent des retards de gestion ou des hiérarchies d'approbation complexes. Où obtenir Tables de requêtes de workflow Employee Central (WfRequest), filtrant par statut COMPLETED ou APPROVED. Capture Enregistré lorsque le statut du workflow passe à APPROVED Type d'événement explicit | |||
| Feuille de temps soumise | L'événement où un employé ou un gestionnaire soumet les données de temps pour la période de paie. Ceci est capturé à partir des journaux de requêtes workflow dans le module Employee Central lié à ECP. | ||
| Pourquoi c'est important Marque le début de la phase d'accumulation des données. Les retards à ce stade se répercutent en aval, provoquant une compression de la fenêtre de traitement de la paie. Où obtenir Tables de requêtes de workflow Employee Central (WfRequest), filtrant par catégories de feuille de temps ou de congé. Capture Enregistré lorsque le statut du workflow passe à SUBMITTED Type d'événement explicit | |||
| Fichier de virement bancaire généré | La création du fichier d'échange de données préliminaire (pre-DME) ou du fichier DME final. Cela crée les instructions de paiement pour la banque. | ||
| Pourquoi c'est important Suit le Moniteur d'automatisation des virements bancaires. Les échecs de génération de fichiers sont des arrêts de processus critiques. Où obtenir Journaux de l'exécution DME / Payment Medium Workbench (PMW), souvent stockés dans TemSe ou des tables d'exécution de paiement spécifiques (ReguH/ReguP). Capture Enregistré lorsque l'exécution du paiement (F110/RPCIPE) crée une sortie Type d'événement explicit | |||
| Paiement effectué | La finalisation du processus de paiement, souvent confirmée par la banque ou l'achèvement de l'exécution de paiement F110. | ||
| Pourquoi c'est important L'horodatage de fin primaire pour le taux de conformité SLA. Détermine si l'employé a été payé à temps. Où obtenir Tables d'exécution des paiements (REGUH) Date et heure d'exécution, ou déduites de la Date de valeur. Capture Enregistré lorsque le statut de l'exécution du paiement est défini sur Comptabilisé/Terminé Type d'événement explicit | |||
| Processus de paie initialisé | La création d'une instance de processus de paie au sein du Centre de Contrôle de la Paie (PCC). Cela marque le début officiel du cycle de paie pour un domaine de paie spécifique. | ||
| Pourquoi c'est important Définit la base de référence pour la durée globale du cycle de paie de bout en bout. Il définit la portée des employés à traiter. Où obtenir Tables du Centre de Contrôle de la Paie (ex. PYC_D_PY_PROC_INST), suivant la création d'un nouvel ID de processus. Capture Enregistré lorsqu'une instance de processus PCC est créée Type d'événement explicit | |||
| Salaire brut calculé | L'exécution réussie du calcul du schéma de paie brut. Dans le traitement standard, cela se produit lorsque le pilote de paie écrit dans le cluster PCL2. | ||
| Pourquoi c'est important Une étape majeure indiquant que les données de temps et de taux ont été combinées avec succès. Les retards à ce stade impactent l'efficacité du traitement du brut au net. Où obtenir Cluster PCL2 (Résultats de paie), spécifiquement le Capture Enregistré lorsqu'un nouveau numéro de séquence est écrit dans le cluster de paie Type d'événement explicit | |||
| Simulation de paie exécutée | Une exécution test du pilote de paie pour identifier les erreurs sans valider les résultats dans la base de données. C'est une étape clé dans la phase de validation PCC. | ||
| Pourquoi c'est important Essentiel pour calculer le Taux de Calcul au premier passage. Les simulations répétées indiquent des problèmes de qualité des données. Où obtenir Journaux d'instance d'étape du Centre de Contrôle de la Paie (PYC_D_STEP_INST) où le type d'étape correspond à Simulation. Capture Enregistré lorsque le statut de l'étape de simulation PCC passe à COMPLETED Type d'événement explicit | |||
| Bulletin de paie publié | L'action de mettre à disposition l'état de rémunération à l'employé via le Libre-Service (ESS). | ||
| Pourquoi c'est important Mesure la performance SLA de livraison des fiches de paie. Les retards génèrent ici des tickets de support. Où obtenir Déduit de la 'Date d'impression' ou de la configuration de la date de disponibilité dans les journaux du service de mashup de bulletin de paie. Capture Calculé sur la base de la Date de Paie + décalage de la Configuration Système Type d'événement inferred | |||
| Correction de données effectuée | Modifications apportées aux données de base ou aux données de temps en réponse à une exception d'audit. Cela représente le travail de reprise requis pour lever une alerte de paie. | ||
| Pourquoi c'est important Suit les taux de correction manuelle et de retravail. C'est l'activité principale contribuant à l'inefficacité du processus. Où obtenir Déduit en joignant les Capture Identifiez les mises à jour des données de base qui se produisent lorsqu'une alerte PCC est active Type d'événement inferred | |||
| Déductions d'avantages sociaux appliquées | L'étape spécifique au sein du schéma de calcul où la logique des avantages est traitée. Bien qu'elle fasse partie de l'exécution principale, l'isoler aide à identifier les erreurs de configuration. | ||
| Pourquoi c'est important Prend en charge l'analyse de la précision du calcul des avantages et des impôts. Utile pour déboguer les écarts complexes de logique de déduction. Où obtenir Déduit de l'existence de la scission V0 dans les résultats de paie ou des entrées de journal spécifiques si la journalisation détaillée est activée (rare en production). Capture Coïncide avec le Salaire Brut Calculé mais conceptuellement distinct pour l'analyse Type d'événement inferred | |||
| Données d'incitation importées | L'ingestion de données de paie non standard, telles que les primes ou les commissions, dans le système de paie. Implique généralement le chargement de données dans les Infotypes 0015 ou 2010. | ||
| Pourquoi c'est important Les importations tardives empêchent les calculs précis du salaire brut. L'analyse de ceci aide à optimiser le temps de traitement de l'intégration des données d'incitation. Où obtenir Journal d'audit (PCL4 ou équivalent) montrant la création d'enregistrements dans l'Infotype 0015 (Paiements additionnels) ou 2010 (Informations de rémunération des employés). Capture Comparez les Type d'événement inferred | |||
| Exception d'audit signalée | La génération d'une alerte de validation par les vérifications de politique du Centre de Contrôle de la Paie. Ces alertes identifient les incohérences de données ou les risques de conformité. | ||
| Pourquoi c'est important Soutient directement les dashboards de Fréquence des exceptions d'audit et de Risque de conformité. Des volumes élevés suggèrent des problèmes de qualité des données en amont. Où obtenir Tables d'alertes du Centre de Contrôle de la Paie (PYC_D_ALERT), liant les codes d'erreur spécifiques à l'enregistrement de l'employé. Capture Enregistré lorsqu'une nouvelle entrée est créée dans la table d'alerte PCC Type d'événement explicit | |||
Guides d'extraction
Étapes
- Identifiez le domaine de paie cible et les paramètres de période pour l'extraction. Vous extrairez les données principalement des tables du Centre de Contrôle de la Paie (PCC) (PYC_*) et du répertoire de cluster de paie (HRPY_RGDIR).
- Lancez votre client SQL ou SAP HANA Studio connecté au schéma de backend SAP SuccessFactors Employee Central Payroll (ECP).
- Exécutez le script d'extraction de données fourni dans la section Requête. Ce script agrège les données des tables de données de base, des résultats de paie et des journaux d'audit PCC.
- Mappez les activités 'Feuille de temps soumise' et 'Feuille de temps approuvée'. Étant donné qu'ECP reçoit souvent ces données d'Employee Central, utilisez les
timestampsde création et de dernière modification dans la table PA2001 ou les tables d'interface de temps spécialisées comme PTREQ_HEADER si disponibles. - Extrayez les 'Données d'incitation importées' en interrogeant les Infotypes 0015 (Paiements additionnels) et 2010 (Informations de rémunération des employés) pour les enregistrements créés pendant la période de paie cible.
- Récupérez les étapes de processus PCC des tables PYC_D_PYP (Instances de processus) et PYC_D_BINST (Instances d'étape) pour capturer 'Processus de paie initialisé', 'Simulation de paie exécutée', 'Enregistrement de paie approuvé' et 'Bulletin de paie publié'.
- Interrogez la table PYC_D_ALERT pour identifier les événements 'Exception d'audit signalée'. Ces enregistrements lient des employés spécifiques à des erreurs de validation trouvées lors des étapes de vérification PCC.
- Générez les événements 'Correction de données effectuée' en joignant la table d'en-tête des documents de modification SAP (CDHDR) avec les Infotypes pertinents pour la paie (par exemple, 0008, 0015, 2001) pendant la fenêtre de paie active.
- Utilisez la table HRPY_RGDIR pour localiser le moment exact du 'Salaire Brut Calculé'. Créez un événement dérivé pour les 'Déductions Avantages Appliquées' en utilisant le même
timestamp, car ceux-ci se produisent simultanément pendant l'exécution du schéma. - Liez les données financières des tables REGUH (Données de règlement) et REGUT (Administration DME) pour capturer 'Fichier de virement bancaire généré' et 'Paiement exécuté'.
- Transformez la colonne 'PayrollRecord' pour suivre strictement le format [EmployeeID]-[Période]-[Année] afin d'assurer l'unicité de l'ID de cas.
- Exportez le jeu de données final sous forme de fichier CSV, en vous assurant que les en-têtes correspondent aux attributs définis dans le contrat, et téléchargez-le sur ProcessMind.
Configuration
- Période: Configurez l'extraction pour couvrir une fenêtre glissante des 6 à 12 derniers mois. Les processus de paie sont cycliques, et cette plage capture une variation suffisante dans les exécutions régulières et hors cycle.
- Domaine de paie (ABKRS): Filtrez par Domaines de paie spécifiques (par exemple, US Monthly, DE Weekly) pour garantir que l'analyse compare des cycles de processus similaires.
- Langue: Assurez-vous que les descriptions des Activités et des Étapes de Processus sont extraites dans la langue principale du système (par exemple, SPRAS = 'E').
- ID de processus PCC: Identifiez les ID de définition de processus spécifiques (PYP_ID) utilisés dans votre configuration PCC pour le 'Monitoring', la 'Production' et le 'Hors-cycle' afin de filtrer les étapes pertinentes.
- Devise: Normalisez les montants financiers (GrossPayAmount) dans une devise unique si vous extrayez des données pour des opérations de paie mondiales.
- Autorisation: L'utilisateur de la base de données nécessite un accès en lecture aux tables des Ressources Humaines (PA/PY) et spécifiquement au Répertoire de cluster (HRPY_RGDIR) et aux tables PCC (PYC_*).
a Exemple de requête 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]' Étapes
- Accéder à l'éditeur ABAP: Connectez-vous à votre système SAP SuccessFactors Employee Central Payroll (ECP) via le SAP GUI. Accédez au code de transaction SE38 (ABAP Editor).
- Créer un programme: Saisissez un nom pour le nouveau programme, tel que
Z_PROCESSMINING_PAYROLL_EXT, et cliquez sur Créer. Sélectionnez Programme exécutable comme type et Enregistrez en tant qu'objet local (Package $TMP) à des fins de test. - Implémenter le code: Copiez le code ABAP complet fourni dans la section Requête ci-dessous et collez-le dans l'éditeur, en remplaçant tout code par défaut existant.
- Vérifier et activer: Cliquez sur le bouton Vérifier (Ctrl+F2) pour valider la syntaxe. Une fois le statut sans erreur, cliquez sur Activer (Ctrl+F3).
- Exécuter l'extraction: Appuyez sur Traitement direct (F8) pour exécuter le rapport.
- Configurer la sélection: Dans l'écran de sélection, saisissez le
Domaine de paie(par exemple, US, 99), unePlage de datesvalide (par exemple, les 3 derniers mois), et filtrez éventuellement par desNuméros de personnel(PERNR) spécifiques pour les tests. - Exécuter l'extraction: Exécutez le rapport. Le système traitera les tables HRPY_RGDIR, CATSDB, PA0015 et REGUH pour construire le journal d'événements.
- Examiner la sortie: Le rapport utilise
cl_demo_outputpour afficher les résultats dans une vue grille directement à l'écran pour une validation immédiate. - Exporter les données: Cliquez avec le bouton droit sur la grille des résultats, sélectionnez Feuille de calcul, et enregistrez le fichier au format CSV ou Excel.
- Formatage pour ProcessMind: Ouvrez le fichier exporté. Assurez-vous que la colonne
EventTimestampest formatée commeYYYY-MM-DD HH:MM:SS. Vérifiez que la colonnePayrollRecordidentifie de manière unique le cas (généralement PERNR-SEQNR). - Importer: Importez le fichier CSV nettoyé dans ProcessMind, en mappant les colonnes vers l'ID de Cas, l'Activité, le Timestamp et les Attributs en conséquence.
Configuration
- Plage de dates: Il est recommandé d'extraire les données par tranches de 3 à 6 mois pour éviter les dépassements de mémoire dans l'environnement d'exécution ABAP.
- Domaine de paie: C'est un filtre critique (Table T549A). Extrayez toujours un domaine de paie à la fois (par exemple, Mensuel vs. Bimensuel) pour assurer la cohérence du processus.
- Table de configuration: Le script lit
HRPY_RGDIR(Répertoire de paie) comme pilote principal. Assurez-vous que votre utilisateur dispose de l'autorisationS_TABU_DISpour cette table. - Source des données de temps: Le script suppose que les données de feuille de temps résident dans
CATSDB. Si vous utilisez une pointeuse tierce qui s'interface directement avecIT2001ouIT2010sans CATS, les activités de feuille de temps peuvent retourner des valeurs vides et nécessiter une adaptation du script. - Données de paiement: Le script lie les exécutions de paie aux exécutions de paiement via
REGUH(Données de règlement). Assurez-vous que l'exécution du paiementF110a été effectuée pour la période sélectionnée afin de visualiser les événements de paiement. - Performance: Pour les systèmes à volume élevé (plus de 100 000 employés), remplacez la logique
SELECT *par une récupération basée sur un curseur ou exécutez en mode arrière-plan (F9).
a Exemple de requête 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 ).