Datatemplate voor salarisverwerking
Datatemplate voor salarisverwerking
- Belangrijke datavelden voor salarisanalyse
- Belangrijke mijlpalen voor procesontdekking
- Extractie-instructies per systeem
Attributen voor salarisverwerking
| Naam | Beschrijving | ||
|---|---|---|---|
| Activiteit Activity | De specifieke taak of gebeurtenis in het salarisverwerkingsproces. | ||
| Beschrijving Dit attribuut bevat de naam van de processtap die wordt uitgevoerd, zoals 'Urenoverzicht ingediend', 'Salarissimulatie uitgevoerd' of 'Betaling uitgevoerd'. Het vormt de basis van de proceskaart en laat analisten de volgorde zien van de activiteiten in de salariscyclus. De gegevens voor dit attribuut komen uit verschillende logs, waaronder workflowlogs (SWWLOGHIST), logs met infotypewijzigingen (CDHDR/CDPOS) en specifieke salaristabellen met statusinformatie. Tijdens de extractie worden vaste naamgevingsconventies toegepast, zodat technische gebeurteniscodes worden omgezet in begrijpelijke activiteitsnamen. Waarom dit belangrijk is Het bepaalt de knooppunten in de procesgrafiek en maakt het mogelijk processtromen, lussen en varianten weer te geven. Waar vind je dit? Afgeleid van statuswijzigingen in SWWLOGHIST (Workflow), CDHDR (wijzigingsdocumenten) of PA03 (controlerecord). Voorbeelden Urenstaat ingediendBrutoloon berekendAudituitzondering gemarkeerdBetaling uitgevoerd | |||
| Salarisrecord PayrollRecord | De unieke identificatiecode die de medewerker en de salarisperiode combineert. | ||
| Beschrijving Het salarisrecord fungeert als de centrale case-ID voor de process mining-analyse. Het staat voor één salarisverwerking van een specifieke medewerker binnen een bepaalde salarisperiode. Zo verbindt het alle activiteiten, van het indienen van het eerste urenoverzicht tot de definitieve belastingaangifte. In SAP SuccessFactors Employee Central Payroll wordt deze ID doorgaans samengesteld door het personeelsnummer (PERNR) te combineren met het salarisjaar (PABRJ) en de salarisperiode (PABRP). Soms wordt ook een volgnummer (SEQNR) toegevoegd om meerdere runs van elkaar te onderscheiden. Dankzij dit detailniveau wordt elke salariscyclus als een afzonderlijke case geanalyseerd. Zo kun je doorlooptijden nauwkeurig meten en fouten volgen. Waarom dit belangrijk is Het fungeert als de Case-ID en groepeert alle relevante gebeurtenissen. Zo kun je het volledige procesverloop reconstrueren voor elke uitbetaalde salarisbetaling. Waar vind je dit? Samengesteld op basis van SAP Cluster B2 (resultaten van tijdsregistratie) of de tabellen PC_PAYRESULT (PERNR, PABRJ, PABRP, SEQNR). Voorbeelden 10023499-2023-1088291022-2024-01-SEQ01US-10293-2023-52 | |||
| Tijdstip van gebeurtenis EventTimestamp | De exacte datum en tijd waarop de activiteit plaatsvond. | ||
| Beschrijving Dit attribuut registreert het exacte moment waarop een gebeurtenis plaatsvond, inclusief datum en tijd. Het is nodig om tijdsgebonden metrieken te berekenen, zoals doorlooptijden en wachttijden tussen processtappen. In SAP ECP komen deze gegevens uit timestampvelden, zoals Waarom dit belangrijk is Hiermee kun je de tijd tussen gebeurtenissen berekenen en bottlenecks en overschrijdingen van SLA’s opsporen. Waar vind je dit? CDHDR-UDATE/UTIME, SWWLOGHIST-WI_CD/WI_CT of specifieke timestamps uit auditlogs. Voorbeelden 2023-10-25T08:30:00Z2023-10-26T14:15:22Z2023-11-01T09:00:00Z | |||
| Bronsysteem SourceSystem | Het systeem waaruit de gebeurtenisgegevens afkomstig zijn. | ||
| Beschrijving Dit attribuut geeft aan uit welke SAP SuccessFactors Employee Central Payroll-instantie of welk gekoppeld subsysteem de gegevens zijn gehaald. In omgevingen met meerdere salarissystemen of een hybride inrichting zorgt dit veld voor herleidbaarheid van de data. Het is vooral nuttig bij analyses van gegevens uit verschillende regionale installaties of bij het vergelijken van oude en gemigreerde systemen. Meestal is dit een vaste tekenreeks die tijdens de inrichting van de data-extractie wordt ingesteld. Waarom dit belangrijk is Hiermee kun je data in omgevingen met meerdere systemen uitsplitsen. Ook helpt het bij het opsporen van problemen met de datakwaliteit, doordat je de herkomst kunt achterhalen. Waar vind je dit? Systeem-ID (SID) van de SAP-installatie of de configuratie voor data-extractie. Voorbeelden SAP_ECP_NASAP_ECP_EMEASuccessFactors_Core | |||
| Laatste data-update LastDataUpdate | De timestamp van de meest recente data-extractie. | ||
| Beschrijving Dit attribuut geeft aan wanneer de datarecord voor het laatst is vernieuwd in het process mining-datamodel. Zo zien analisten hoe actueel de data is en of de inzichten op recente informatie zijn gebaseerd. Dit attribuut wordt niet rechtstreeks gebruikt voor processtroomanalyses, maar is wel belangrijk voor datagovernance en validatie. Het helpt controleren of het dashboard de meest recente stand van het salarissysteem weergeeft. Waarom dit belangrijk is Zo weten gebruikers hoe oud de data is en kunnen ze controleren of de gerapporteerde metrieken actueel zijn. Waar vind je dit? Tijdens de uitvoering gegenereerd door het ETL- of extractiescript. Voorbeelden 2023-11-05T00:00:00Z2023-11-05T12:00:00Z | |||
| Brutosalaris GrossPayAmount | Het totale brutobedrag dat voor de record is berekend. | ||
| Beschrijving Dit attribuut bevat het totale brutobedrag vóór inhoudingen. Het is een belangrijke financiële maatstaf voor validatie en helpt vaststellen of hoge betalingen leiden tot meer auditcontroles of langere goedkeuringstijden. De gegevens komen uit de tabel met salarisresultaten (RT), meestal uit specifieke looncomponenten voor het totale brutobedrag, zoals /101. De maatstaf ondersteunt de analyse 'Nauwkeurigheid van berekeningen voor arbeidsvoorwaarden en belastingen' en levert de basis voor de berekening. Waarom dit belangrijk is Hiermee kun je procesgedrag vergelijken op basis van het betaalbedrag. Duurt het bijvoorbeeld langer om hogere bedragen goed te keuren? Waar vind je dit? Tabel met salarisresultaten (RT), looncomponent /101 of vergelijkbaar. Voorbeelden 5000.002500.5010500.00 | |||
| Frequentie van de salariscyclus PayCycleFrequency | Geeft aan of het om een reguliere run of een run buiten de cyclus gaat. | ||
| Beschrijving Dit attribuut maakt onderscheid tussen geplande salarisruns en ad-hocruns buiten de cyclus, bijvoorbeeld voor correcties of directe betalingen. Veel runs buiten de cyclus wijzen vaak op inefficiënte processen. Het dashboard 'Volumeanalyse van betalingen buiten de cyclus' houdt deze bij. De waarde is afgeleid van de velden Off-Cycle Reason ( Waarom dit belangrijk is Dit attribuut is nodig om de KPI 'Aandeel betalingen buiten de cyclus' te meten en het aantal niet-standaardverwerkingen terug te dringen. Waar vind je dit? Tabel RGDIR (clusterdirectory), veld OCRSN of PAYTY. Voorbeelden RegulierCorrectie ABonusbetalingBeëindiging dienstverband | |||
| Geautomatiseerd IsAutomated | Geeft aan of de activiteit door een systeemgebruiker is uitgevoerd. | ||
| Beschrijving Dit booleaanse attribuut geeft aan of een processtap is uitgevoerd door een achtergrondtaak of systeemgebruiker, of door een medewerker. Het dashboard 'Monitor voor automatisering van bankoverschrijvingen' gebruikt dit om het percentage verwerking zonder handmatige handelingen te berekenen. Meestal wordt dit bepaald door de gebruikers-ID te vergelijken met een lijst bekende systeemaccounts, zoals 'BATCH' en 'SAP_WORKFLOW'. Waarom dit belangrijk is Hiermee kun je de automatiseringsgraad meten en mogelijkheden vinden om handmatig werk te verminderen. Waar vind je dit? Afgeleid van de gebruikers-ID, bijvoorbeeld als User IN ['BATCH', 'SYSTEM'] dan true. Voorbeelden truefalse | |||
| Kostenplaats CostCenter | De kostenplaats die bij de medewerker hoort. | ||
| Beschrijving De kostenplaats is de financiële afdeling of eenheid waaraan de kosten van de medewerker worden toegewezen. In het dashboard 'Bottlenecks bij goedkeuring van urenoverzichten' dient deze als aanduiding van de afdeling. Zo kun je zien welke organisatieonderdelen de salariscyclus vertragen. De kostenplaats staat in het infotype Organisatorische toewijzing (PA0001), in veld Waarom dit belangrijk is Je kunt de gegevens per organisatieonderdeel bekijken om afdelingen op te sporen die vertragingen of herstelwerk veroorzaken. Waar vind je dit? Tabel PA0001, veld KOSTL. Voorbeelden CC-1000 FinanciënCC-2000 ITCC-3000 Verkoop | |||
| Salarisgebied PayrollArea | Geeft aan bij welke salarisgroep een medewerker hoort. | ||
| Beschrijving Het salarisgebied groepeert medewerkers die samen in dezelfde salarisrun worden verwerkt. De indeling is vaak gebaseerd op de betaalfrequentie, bijvoorbeeld maandelijks of tweewekelijks, of op de organisatiestructuur. Met dit attribuut kun je de procesanalyse uitsplitsen en de prestaties van verschillende groepen medewerkers vergelijken. In SAP hoort hierbij het technische veld Waarom dit belangrijk is Hiermee kun je de prestaties van salariscycli tussen groepen vergelijken, bijvoorbeeld medewerkers op uurbasis en medewerkers in loondienst. Waar vind je dit? Tabel PA0001 (organisatorische toewijzing), veld ABKRS. Voorbeelden VS tweewekelijksDuitsland maandelijksSalarisverwerking directie | |||
| Salarisperiode PayPeriod | Het nummer van de periode binnen het boekjaar. | ||
| Beschrijving Dit attribuut geeft het volgnummer van de salarisperiode aan, bijvoorbeeld 01 voor januari of voor de eerste tweewekelijkse cyclus. Analisten kunnen hiermee trends in de prestaties volgen en seizoenspatronen in de verwerkingsdruk herkennen. De gegevens komen uit Waarom dit belangrijk is Hiermee kun je trends volgen en seizoensgebonden bottlenecks opsporen. Waar vind je dit? Tabel PA0001 of cluster met salarisresultaten (RGDIR), veld PABRP. Voorbeelden 01122652 | |||
| Salarisspecialist PayrollSpecialist | De gebruikers-ID of naam van de persoon die het record verwerkt. | ||
| Beschrijving Dit attribuut bevat de identiteit van de salarisadministrateur of -specialist die verantwoordelijk is voor handmatige stappen of goedkeuringen. Het vormt de basis voor het dashboard 'Doorvoer en werkdruk van specialisten', waarmee je de verdeling van het werk en de productiviteit per medewerker analyseert. De gegevens komen uit het veld Waarom dit belangrijk is Dit attribuut is belangrijk om de werkdruk te verdelen en bottlenecks door handmatige handelingen op te sporen. Waar vind je dit? Systeemvelden (SY-UNAME) in CDHDR of de actor-ID van de workflow. Voorbeelden JSMITHKMILLERSYSTEM | |||
| Type medewerker EmployeeType | Indeling van de medewerker, bijvoorbeeld vaste medewerker of opdrachtnemer. | ||
| Beschrijving Dit attribuut deelt medewerkers in op basis van hun arbeidsrelatie, bijvoorbeeld actieve medewerker, gepensioneerde of opdrachtnemer. De complexiteit van de salarisverwerking hangt vaak samen met het type medewerker. Voor sommige groepen zijn meer handmatige handelingen of specifieke compliancecontroles nodig. De gegevens komen uit de velden Employee Group ( Waarom dit belangrijk is Hiermee kun je zien of procesvarianten of vertragingen alleen voorkomen bij bepaalde categorieën medewerkers. Waar vind je dit? Tabel PA0001, velden PERSG (groep) en PERSK (subgroep). Voorbeelden Actieve medewerkerStagiairGepensioneerdeOpdrachtnemer op uurbasis | |||
| Aantal correcties ReworkCount | Het aantal uitgevoerde correcties. | ||
| Beschrijving Deze berekende maatstaf telt hoe vaak de activiteit 'Datacorrectie uitgevoerd' voorkomt in de casegeschiedenis. Het is een directe maat voor inefficiëntie en ondersteunt het dashboard 'Handmatige correcties en herstelwerk'. Veel correcties wijzen op aanhoudende problemen met de datakwaliteit of complexe cases die de validatie niet in één keer doorstaan. Waarom dit belangrijk is Hiermee wordt zichtbaar hoeveel werk verloren gaat aan foutcorrecties. Dat helpt om initiatieven voor betere datakwaliteit te onderbouwen. Waar vind je dit? Berekend door activiteiten 'Datacorrectie uitgevoerd' per CaseId te tellen. Voorbeelden 013 | |||
| Belastinggebied TaxJurisdiction | De belastingregio of -instantie die voor de medewerker geldt. | ||
| Beschrijving Dit attribuut geeft aan welke belastinginstantie of regio, zoals een staat, provincie of kanton, van toepassing is op het salarisrecord. Het dashboard 'Audituitzonderingen en compliancerisico' gebruikt dit om complianceproblemen per regio in kaart te brengen. In SAP US Payroll is dit het veld Waarom dit belangrijk is Hiermee kun je compliancerisico’s en audituitzonderingen per regelgevingsregio uitsplitsen. Waar vind je dit? Tabel PA0001 of PA0207/PA0208, veld TXJCD. Voorbeelden CANYTXNRW | |||
| Rechtspersoon LegalEntity | De bedrijfscode of rechtspersoon van de medewerker. | ||
| Beschrijving Dit attribuut geeft aan bij welke rechtspersoon (bedrijfscode) het salarisrecord hoort. Hiermee kun je de financiële rapportage opstellen en de prestaties van de salarisverwerking bij verschillende dochterondernemingen of bedrijfsonderdelen analyseren. De gegevens komen uit het veld Waarom dit belangrijk is Dit attribuut ondersteunt vergelijkingen tussen bedrijven en analyses van de financiële toewijzing. Waar vind je dit? Tabel PA0001, veld BUKRS. Voorbeelden US01DE011000 | |||
| SLA-deadline voor verwerking SLAProcessingDeadline | De beoogde timestamp waarop de salarisrun moet zijn afgerond. | ||
| Beschrijving Dit attribuut geeft de interne of externe deadline aan voor het afronden van de salarisverwerking, zodat medewerkers op tijd worden betaald. De KPI 'SLA-nalevingspercentage' wordt berekend door deze deadline te vergelijken met de daadwerkelijke timestamp van 'Betaling uitgevoerd'. Dit veld staat niet altijd standaard in SAP-tabellen. Vaak wordt het bijgehouden in een aangepaste controletabel of afgeleid van de salariskalender, bijvoorbeeld twee dagen vóór de betaaldatum. In dit datamodel wordt het meestal berekend door een vaste buffer van de betaaldatum af te trekken. Waarom dit belangrijk is Dit is de norm waarmee je tijdigheid en naleving van de SLA beoordeelt. Waar vind je dit? Afgeleid van de betaaldatum (T549S) minus het ingestelde aantal verwerkingsdagen. Voorbeelden 2023-10-28T17:00:00Z2023-11-28T17:00:00Z | |||
| Vlag voor audituitzondering AuditExceptionFlag | Geeft aan of er een audituitzondering is opgetreden. | ||
| Beschrijving Dit attribuut markeert cases waarin validatieregels tijdens de salarissimulatie of -berekening een uitzondering of waarschuwing hebben opgeleverd. Het is de belangrijkste invoer voor de KPI 'Frequentie van audituitzonderingen'. De gegevens komen vaak uit het salarislogboek of uit specifieke tabellen met foutmeldingen (FEHLER). De waarde true betekent dat het proces een pad voor uitzonderingsafhandeling heeft gevolgd. Waarom dit belangrijk is Dit attribuut maakt problemen met de datakwaliteit en de noodzaak van handmatig ingrijpen zichtbaar. Waar vind je dit? Afgeleid van foutmeldingen in het salarislogboek of specifieke statuscodes. Voorbeelden truefalse | |||
Activiteiten voor salarisverwerking
| Activiteit | Beschrijving | ||
|---|---|---|---|
| Belastingaangifte afgerond | De aanmaak van belastingrapportbestanden (bijvoorbeeld PU19 in de VS) of de overdracht aan een externe aanbieder van belastingaangiften. | ||
| Waarom dit belangrijk is Draagt bij aan naleving van wettelijke eisen. Houdt de laatste compliancestap in de procesvolgorde bij. Waar vind je dit? Logs van Tax Reporter Log Manager of B2A (Business to Administration) Manager die aangeven dat het bestand succesvol is aangemaakt. Vastleggen Vastgelegd wanneer de uitvoering van Tax Reporter succesvol is afgerond Gebeurtenistype explicit | |||
| Bestand voor bankoverschrijving aangemaakt | De aanmaak van het voorlopige Data Medium Exchange-bestand (pre-DME) of het definitieve DME-bestand. Dit bestand bevat de betaalopdrachten voor de bank. | ||
| Waarom dit belangrijk is Houdt de monitor voor automatisering van bankoverschrijvingen bij. Mislukte bestandsaanmaak betekent dat het proces stilvalt. Waar vind je dit? Logs van de uitvoering van DME / Payment Medium Workbench (PMW), vaak opgeslagen in TemSe of in specifieke tabellen voor betalingsruns (ReguH/ReguP). Vastleggen Vastgelegd wanneer de betalingsrun (F110/RPCIPE) uitvoer aanmaakt Gebeurtenistype explicit | |||
| Betaling uitgevoerd | De afronding van het betalingsproces, vaak bevestigd door de bank of doordat de betalingsrun F110 is voltooid. | ||
| Waarom dit belangrijk is De belangrijkste eindtimestamp voor het percentage betalingen binnen de SLA. Bepaalt of de medewerker op tijd is betaald. Waar vind je dit? Datum en tijd van de run in de tabellen voor betalingsruns (REGUH), of afgeleid van de valutadatum. Vastleggen Vastgelegd wanneer de status van de betalingsrun is ingesteld op Posted/Complete Gebeurtenistype explicit | |||
| Brutoloon berekend | De succesvolle uitvoering van de berekening volgens het brutoloon-schema. Bij standaardverwerking schrijft de loonverwerkingsmodule de resultaten naar cluster PCL2. | ||
| Waarom dit belangrijk is Een belangrijke mijlpaal: uren- en tariefgegevens zijn nu gecombineerd. Vertragingen in deze stap hebben gevolgen voor de efficiëntie van de verwerking van bruto naar netto. Waar vind je dit? Cluster PCL2 (Payroll Results), met name de timestamp van de directorytabel (RGDIR) voor de 'For-Period'. Vastleggen Vastgelegd wanneer een nieuw volgnummer naar het salariscluster wordt geschreven Gebeurtenistype explicit | |||
| Loonrecord goedgekeurd | De formele goedkeuring van de salarisresultaten voor een medewerker of loongroep. Dit gebeurt in de stap 'Monitoring' of 'Sign Off' van PCC. | ||
| Waarom dit belangrijk is Markeert het einde van de berekenings- en validatiefase en de vrijgave voor betaling. Belangrijk voor de analyse van de doorvoer per specialist. Waar vind je dit? Logs van processtappen in Payroll Control Center (PYC_D_STEP_INST) voor de stap Approval of Confirmation. Vastleggen Vastgelegd wanneer de status van de PCC-goedkeuringsstap verandert in COMPLETED Gebeurtenistype explicit | |||
| Salarisproces gestart | De aanmaak van een instantie van een salarisproces in het Payroll Control Center (PCC). Dit markeert de officiële start van de looncyclus voor een specifiek salarisgebied. | ||
| Waarom dit belangrijk is Bepaalt het startpunt voor de totale doorlooptijd van de looncyclus van begin tot eind. Ook wordt vastgelegd welke medewerkers worden verwerkt. Waar vind je dit? Tabellen van Payroll Control Center (bijvoorbeeld PYC_D_PY_PROC_INST), waarin de aanmaak van een nieuwe proces-ID wordt bijgehouden. Vastleggen Vastgelegd wanneer een PCC-procesinstantie wordt aangemaakt Gebeurtenistype explicit | |||
| Salarissimulatie uitgevoerd | Een testberekening met de loonverwerkingsmodule om fouten op te sporen zonder resultaten in de database op te slaan. Dit is een belangrijke stap in de validatiefase van PCC. | ||
| Waarom dit belangrijk is Nodig om het percentage berekeningen in één keer goed te berekenen. Herhaalde simulaties wijzen op problemen met de datakwaliteit. Waar vind je dit? Logs van processtappen in Payroll Control Center (PYC_D_STEP_INST), waarbij het type stap overeenkomt met Simulation. Vastleggen Vastgelegd wanneer de status van de PCC-simulatiestap verandert in COMPLETED Gebeurtenistype explicit | |||
| Urenstaat goedgekeurd | De formele goedkeuring van uren door een manager of beheerder. Deze statuswijziging bevestigt dat de gegevens naar de loonberekening kunnen worden overgezet. | ||
| Waarom dit belangrijk is Wordt gebruikt om de KPI voor de doorlooptijd van goedkeuring van urenstaten te berekenen. Knelpunten wijzen hier op vertragingen bij managers of complexe goedkeuringsstructuren. Waar vind je dit? Tabellen met workflowverzoeken van Employee Central (WfRequest), gefilterd op de status COMPLETED of APPROVED. Vastleggen Vastgelegd wanneer de workflowstatus verandert in APPROVED Gebeurtenistype explicit | |||
| Urenstaat ingediend | De gebeurtenis waarbij een medewerker of manager uren voor de loonperiode indient. Deze gebeurtenis wordt vastgelegd in de logs van workflowverzoeken in de Employee Central-module die aan ECP is gekoppeld. | ||
| Waarom dit belangrijk is Dit markeert het begin van de fase waarin gegevens worden verzameld. Vertragingen in deze stap verkorten de beschikbare tijd voor de salarisverwerking. Waar vind je dit? Tabellen met workflowverzoeken van Employee Central (WfRequest), gefilterd op de categorieën Time Sheet of Time Off. Vastleggen Vastgelegd wanneer de workflowstatus verandert in SUBMITTED Gebeurtenistype explicit | |||
| Audituitzondering gemarkeerd | Een validatiemelding die wordt gegenereerd door de beleidscontroles van Payroll Control Center. Deze meldingen wijzen op inconsistenties in gegevens of compliancerisico’s. | ||
| Waarom dit belangrijk is Deze activiteit voedt rechtstreeks de dashboards voor audituitzonderingen en compliancerisico’s. Veel meldingen wijzen vaak op problemen met de datakwaliteit eerder in het proces. Waar vind je dit? Meldingstabellen van Payroll Control Center (PYC_D_ALERT), waarin specifieke foutcodes aan het medewerkersrecord worden gekoppeld. Vastleggen Vastgelegd wanneer een nieuwe regel wordt aangemaakt in de PCC-meldingstabel Gebeurtenistype explicit | |||
| Gegevens gecorrigeerd | Wijzigingen in stamgegevens of urenregistratie naar aanleiding van een audituitzondering. Dit is herstelwerk dat nodig is om een loonmelding op te lossen. | ||
| Waarom dit belangrijk is Houdt het aantal handmatige correcties en het herstelwerk bij. Dit is de belangrijkste activiteit die bijdraagt aan inefficiëntie in het proces. Waar vind je dit? Afgeleid door timestamps van PCC-meldingen te koppelen aan latere wijzigingen in de auditlog (PCL4) voor dezelfde medewerker, voordat de melding wordt gesloten. Vastleggen Spoor updates van stamgegevens op die plaatsvinden terwijl een PCC-melding actief is Gebeurtenistype inferred | |||
| Gegevens over variabele beloning geïmporteerd | Het inlezen van niet-standaard loondata, zoals bonussen of commissies, in het salarissysteem. Meestal worden de gegevens geladen in Infotypes 0015 of 2010. | ||
| Waarom dit belangrijk is Late imports maken een nauwkeurige berekening van het brutoloon onmogelijk. Analyse hiervan helpt de doorlooptijd van de integratie van gegevens over variabele beloning te verbeteren. Waar vind je dit? Auditlog (PCL4 of vergelijkbaar) met de aanmaak van records in Infotype 0015 (Additional Payments) of 2010 (Employee Remuneration Info). Vastleggen Vergelijk de aanmaaktimestamps van Infotype-records met de logs van importtaken Gebeurtenistype inferred | |||
| Inhoudingen op arbeidsvoorwaarden toegepast | De specifieke stap in het berekeningsschema waarin de regels voor arbeidsvoorwaarden worden verwerkt. Door deze stap apart te bekijken, kun je configuratiefouten opsporen. | ||
| Waarom dit belangrijk is Ondersteunt de analyse van de juistheid van berekeningen voor arbeidsvoorwaarden en belastingen. Handig bij het opsporen van verschillen in complexe inhoudingsregels. Waar vind je dit? Afgeleid uit de aanwezigheid van de V0-splitsing in de salarisresultaten of uit specifieke logregels als gedetailleerde logging is ingeschakeld. Dat komt in productie zelden voor. Vastleggen Vindt plaats op hetzelfde moment als de berekening van het brutoloon, maar is voor de analyse een aparte stap Gebeurtenistype inferred | |||
| Loonstrook gepubliceerd | De loonstrook beschikbaar maken voor de medewerker via self-service (ESS). | ||
| Waarom dit belangrijk is Meet de SLA-prestaties voor de levering van loonstroken. Vertragingen leiden tot meldingen bij de helpdesk. Waar vind je dit? Afgeleid van de 'Print Date' of de configuratie van de beschikbaarheidsdatum in de logs van de Pay Slip-mashupservice. Vastleggen Bereken op basis van de betaaldatum plus de vertraging volgens de systeemconfiguratie Gebeurtenistype inferred | |||
Extractiegidsen
Stappen
- Bepaal het salarisgebied en de periodeparameters voor de extractie. De data komt voornamelijk uit de tabellen van Payroll Control Center (PCC) (PYC_*) en de salarisclusterdirectory (HRPY_RGDIR).
- Open je SQL-client of SAP HANA Studio en maak verbinding met het backendschema van SAP SuccessFactors Employee Central Payroll (ECP).
- Voer het extractiescript uit dat in het gedeelte Query staat. Het script verzamelt data uit stamgegevenstabellen, salarisresultaten en PCC-auditlogboeken.
- Breng de activiteiten 'Tijdregistratie ingediend' en 'Tijdregistratie goedgekeurd' in kaart. ECP ontvangt deze data vaak van Employee Central. Gebruik daarom de aanmaak- en laatste wijzigingstimestamps in tabel PA2001 of, indien beschikbaar, de speciale tijdregistratietabellen zoals PTREQ_HEADER.
- Haal 'Incentivedata geïmporteerd' op door Infotypes 0015 (aanvullende betalingen) en 2010 (informatie over werknemersvergoedingen) te raadplegen voor records die binnen de doelbetaalperiode zijn aangemaakt.
- Haal PCC-processtappen op uit tabellen PYC_D_PYP (procesinstanties) en PYC_D_BINST (stapinstanties) om 'Salarisproces gestart', 'Salarissimulatie uitgevoerd', 'Salarisrecord goedgekeurd' en 'Loonstrook gepubliceerd' vast te leggen.
- Raadpleeg tabel PYC_D_ALERT om gebeurtenissen met de aanduiding 'Audituitzondering gemarkeerd' te vinden. Deze records koppelen specifieke medewerkers aan validatiefouten die tijdens PCC-controles zijn gevonden.
- Maak gebeurtenissen voor 'Datacorrectie uitgevoerd' door de SAP-tabel voor wijzigingsdocumentkoppen (CDHDR) te koppelen aan relevante salaris-Infotypes (bijvoorbeeld 0008, 0015, 2001) binnen de actieve salarisperiode.
- Gebruik tabel HRPY_RGDIR om het exacte moment van 'Brutoloon berekend' te bepalen. Maak met dezelfde timestamp een afgeleide gebeurtenis voor 'Voordelen ingehouden', omdat deze tijdens dezelfde schemarun plaatsvinden.
- Koppel financiële data uit tabellen REGUH (afrekeningsdata) en REGUT (DME-beheer) om 'Bankoverschrijvingsbestand aangemaakt' en 'Betaling uitgevoerd' vast te leggen.
- Zorg dat de kolom 'PayrollRecord' het formaat [EmployeeID]-[Period]-[Year] volgt, zodat elke case een unieke ID heeft.
- Exporteer de uiteindelijke dataset als CSV-bestand. Controleer of de kolomkoppen overeenkomen met de attributen in de specificatie en upload het bestand naar ProcessMind.
Configuratie
- Periode: Stel de extractie in op een voortschrijdende periode van de afgelopen 6 tot 12 maanden. Salarisprocessen verlopen in cycli; met deze periode leg je voldoende variatie vast in reguliere en extra runs.
- Salarisgebied (ABKRS): Filter op specifieke salarisgebieden (bijvoorbeeld maandelijks in de VS, wekelijks in Duitsland), zodat je vergelijkbare procescycli analyseert.
- Taal: Haal beschrijvingen van activiteiten en processtappen op in de primaire systeemtaal (bijvoorbeeld SPRAS = 'E').
- PCC-proces-ID's: Bepaal welke procesdefinitie-ID's (PYP_ID) in je PCC-configuratie worden gebruikt voor 'Monitoring', 'Productie' en 'Extra run', en filter op de relevante stappen.
- Valuta: Zet financiële bedragen (GrossPayAmount) om naar één valuta als je data uit de wereldwijde salarisverwerking ophaalt.
- Autorisatie: De databasegebruiker heeft leestoegang nodig tot Human Resources-tabellen (PA/PY), en specifiek tot de clusterdirectory (HRPY_RGDIR) en PCC-tabellen (PYC_*).
a Voorbeeldquery 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]' Stappen
- ABAP-editor openen: Meld je via SAP GUI aan bij SAP SuccessFactors Employee Central Payroll (ECP). Ga naar transactiecode SE38 (ABAP-editor).
- Programma maken: Voer een naam in voor het nieuwe programma, bijvoorbeeld
Z_PROCESSMINING_PAYROLL_EXT, en klik op Maken. Kies Uitvoerbaar programma als type en Opslaan als lokaal object (pakket $TMP) om te testen. - Code invoeren: Kopieer de volledige ABAP-code uit het gedeelte Query hieronder en plak deze in de editor. Vervang eventuele standaardcode.
- Controleren en activeren: Klik op de knop Controleren (Ctrl+F2) om de syntaxis te valideren. Klik zodra er geen fouten meer zijn op Activeren (Ctrl+F3).
- Extractie uitvoeren: Druk op Directe verwerking (F8) om het rapport uit te voeren.
- Selectie instellen: Voer in het selectiescherm het
Payroll Areain (bijvoorbeeld US, 99), een geldigeDate Range(bijvoorbeeld de afgelopen 3 maanden) en eventueel specifiekePersonnel Numbers(PERNR) om te testen. - Extractie uitvoeren: Voer het rapport uit. Het systeem verwerkt de tabellen HRPY_RGDIR, CATSDB, PA0015 en REGUH om het event log samen te stellen.
- Resultaat controleren: Het rapport gebruikt
cl_demo_outputom de resultaten direct op het scherm in een raster weer te geven, zodat je ze meteen kunt controleren. - Data exporteren: Klik met de rechtermuisknop op het resultatenraster, kies Spreadsheet en sla het bestand op als CSV- of Excel-bestand.
- Opmaak voor ProcessMind: Open het geëxporteerde bestand. Stel de kolom
EventTimestampin op de notatieYYYY-MM-DD HH:MM:SS. Controleer of de kolomPayrollRecordde case uniek identificeert (meestal PERNR-SEQNR). - Uploaden: Importeer het opgeschoonde CSV-bestand in ProcessMind en koppel de kolommen aan Case-ID, Activiteit, Timestamp en Attributen.
Configuratie
- Datumbereik: Haal data bij voorkeur op in perioden van 3 tot 6 maanden om geheugenproblemen in de ABAP-runtimeomgeving te voorkomen.
- Salarisgebied: Dit is een belangrijk filter (tabel T549A). Haal altijd één salarisgebied tegelijk op, bijvoorbeeld maandelijks of tweewekelijks, zodat het proces consistent blijft.
- Configuratietabel: Het script gebruikt
HRPY_RGDIR(salarisdirectory) als primaire bron. Controleer of je gebruiker voor deze tabel de autorisatieS_TABU_DISheeft. - Bron voor tijdregistratie: Het script gaat ervan uit dat tijdregistratiedata in
CATSDBstaat. Gebruik je een tijdregistratiesysteem van een andere leverancier dat rechtstreeks metIT2001ofIT2010werkt, zonder CATS, dan kunnen de tijdregistratieactiviteiten leeg blijven. Het script moet dan worden aangepast. - Betalingsdata: Het script koppelt salarisruns aan betalingsruns via
REGUH(afrekeningsdata). Controleer of de betalingsrunF110is uitgevoerd voor de geselecteerde periode, anders ontbreken betalingsgebeurtenissen. - Prestaties: Vervang in systemen met grote volumes (meer dan 100.000 medewerkers) de
SELECT *-logica door ophalen met een cursor of voer het script op de achtergrond uit (F9).
a Voorbeeldquery 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 ). Klaar om te beginnen?
Gebruik deze template bij het extraheren van data en werk toe naar een efficiënter salarisproces. Met deze gestructureerde aanpak zet je ruwe data snel om in inzichten waar je mee aan de slag kunt.
Verbeter nu de prestaties van je salarisverwerking
Sluit je aan bij bedrijven die hun salariscycli nu al 30% korter maken.
Geen creditcard nodig. Binnen enkele minuten ingesteld.