Skip to Content
Technical Articles

EC Time – Tipps and hints Nr. 5: how to accrual time accounts based on EC time sheet data

Hi,

this blog describes how to set up a mechanism in EC Time Management that allows to do time account accruals based on recorded hours / days in the time sheet.

Before I start, I first need to write a bit on theory and describe the different ways that exist in Time Management in general to create postings to a time account.

I don´t know in detail how other time management software is handling this, but I know in detail how it is done in SAP ERP Time management, Business byDesign Time Management and of course in our new EC Time Management. I assume other time management solution do this the same way cause these are usually generic business processes independent from a specific software solution.

And the 3 ways of building leave entitlements are:

 

1. Via an time account accruals engine in a leave management component

This is usually done for leave entitlements based on solid regulations and an employees master data. Usually they are done for recurring time accounts (yearly for example) and are used for generating vacation / leave entitlements based on your contractual working days per week or full time / part time status. In Germany these are for example at least 20 days vacation for a full time employee working a 5-days week. But it can be of course more depending on trade union contracts, company agreements and personell factors like age, service age and other parameters.

This kind of time account accrual can be done by a leave management solution stand alone.

 

2. Time account postings based on recorded working time or overtime

There are time management processes where an leave entitlement solemly build on employees master data is not sufficient. Employees record their working time and when they have “flextime” or “Gleitzeit” the recorded hours are compared with the duration of the planned working time. Is it less a minus posting is booked to the time account, if it is more then the employee has worked longer than planned and a plus posting is done – and usually no overtime payment is paid for this. Cause the employee can work less the following days / weeks and compensate “flexibly” the too many hours worked (don´t want to call it “overtime” cause normally overtime is associated with a higher payment). There can be of course boundaries – like only the hours performed within a “flextime bandwidth” count, or the time account can only go up to 35hours per month and each plus hour more is then really overtime and paid with an premium and many variations more.

But the important part is: an accruals calculation engine is not needed here. Usually this can be calculated by time valuation alone. The recorded hours are calculated (breaks deducted, times outside a flextime bandwidth capped….) and a direct posting to a time account is performed from the time valuation engine. A pure leave management application can´t do this.

Same is true for the time off in lieu hours. You need to calculate first overtime based on the recorded hours. Overtime by day, week, month or a combination of it, calculate a premium payment (which can be different if the overtime is performed on a Sunday, public holiday (even difference amongst public holidays exist), during night hours and then either the full overtime (base hours plus premium pay) is posted to a time off in lieu account, or only a portion of it (premium part banked, base hours paid out)
This can´t be done by a time accounts accrual engine or with a standalone absence management tool. Time Valuation is needed for this and of course the recording and valuation of the hours worked.

 

3. Accruals done by an accrual engine based on hours recorded

And finally, there is the mixed version. You need a time valuation to calculate a value based on the hours recorded, days worked or something else based on the attendance time an employee records  AND this value needs to be used by an accruals engine to apply accrual calculation rules and employees master data to generate a leave entitlement.

And up to now the latter was not possible in EC Time. But with our earlier introduced time collectors and some enhancements to them it is now possible.

 

Business scenario:

In some countries it is a common business process to use recorded attendance time in order to use them for daily, weekly or monthly time account vacation accruals. Means the time account accrual engine shall be fed by time sheet data.

In France for example an employee gets only a monthly vacation accrual (but the real entitlement is granted only the following year) when he has worked at least 20 days in the month.

In Australia for each worked day (including some absences but excluding other absence types) employees get an accrual of 0.416438356 hours annual leave.

In some US state you get 1 hour of sick leave for each 30 hours worked.

And there are many more business use cases where a regular leave entitlement is calculated based on the hours / days worked.

So, in short words: it is necessary for the time account accruals engine to consume hours worked recorded in the time sheet.

This is possible with some configuration.

The time account accrual engine reads an object called “accrual base calculation”. This can be used when customers use 3rd party attendance systems but want to do the time account accrual in EC Time. The hours worked can be uploaded via this object for the time account accrual calculation.

But what when the attendance time is recorded in EC Time Sheet? Can those hours be used for time account accrual engine as well?

Yes, we can. It is a bit tricky cause you need to use integration center, but it is possible. We use the integration center for it and the already existing “accrual base calculation” object. However, the “accrual base calculation” object needs the data in a specific format. The data needs to be in the structure of the object which is:

      • External code
      • user
      • date
      • actual quantity
      • quantity 1 – 5

Check the documentation of this object here:

Accrual base object

 

Hence we need to massage a little bit the time sheet output that it fulfills the format requirement of this object.

Lets take the Australian leave accrual use case as an example.

Employees accrual per each day worked a small portion for their yearly leave entitlement.

So lets take the example in Australia where for a day worked 30 minutes or 0.416438356 hours vacation are granted. In real life, it is a bit more complex cause some specific absence days count as “day worked” as well, and for part time employees it works differently, but this is only a question on how detailed the configuration is. Lets use an easy example, cause I want to show only the principle on how this is set up.

For collecting the attendance days we need a time collector in the time sheet. First step is hence configuring a  time collector:

 

Step 1: Configure a time collector

When you want to use time sheet hours and especially when you want to count number of days on which an employee has performed work, you need to configure a time collector. Please check my other blogs on how to set up a collector in detail.

The collector is of the type “counted events” and we count therein per month the days on which an employee has attendance times (if you want to add specific absence days to it, just use different input time type groups for the collector).

So we got a time type group filled daily for a month by time valuation based on times recorded in the EC Time Sheet.

Time collector looks like this:

Note, that we marked the time collector as UI Component = Yes, so an employee can easily check real time on the Time Sheet UI the actual value of the month.

The time valuation rule that counts all worked day per month to fill the collector looks like this:

The ‘above’ group is the time type group we just created. The input group(s) depend on your already available time type groups. Since the resulting time type group is a collector for counted events, it does not matter how many hours or minutes are recorded, it only matters the fact that one (or multiple) time recordings exist on a day. With the threshold of 0 the valuation will count every day where there is at least one minute of working time for example.

Assign this evaluation rule to a time recording profile and this in turn needs to be assigned to an employee.

After you have done so, you can check in the employees time sheet (or via the time sheet trace feature), whether the time collector works as expected. If you open the time sheet for the user, you should find a link to display the time collectors at the lower left of the screen. Using this link should display the newly defined time collector.

 

Step 2: Configuring the Integration Center

Now the tricky part is how to extract the value of the time type group out of the time valuation to feed the accrual engine. This can be done with the Integration Center. Here is a step to step description:

Access the integration center.

Click on “My Integrations” and create a new integration scenario by clicking the +create button and select “more integration types”.

 

Choose on the next pop up

  • as trigger type “scheduled”
  • as destination type “SuccessFactors”
  • as source type “SuccessFactors”
  • and as Format “Odata v2”.This means it is going to be an internal MDF to MDF integration which makes some things easier.

 

On the next screen choose Time Collectors as the base object for the integration. Cause you want to use the time collector we have created above, the one that counts the overtime days per month.

 

Now you come into a guided activity. Step one here is that you need to give an integration name for your scenario.

 

Afterwards you need to define and configure the fields that you want to have in your integration scenario.

Select as target object the “accrual calculation base” object. This is the object of the time account accrual engine to upload external accrual base values.

 

Now we come to the formatting topic. The accrual calculation base object needs as external code the form userid_YYYY-MM-DD. In order to get the field mapping in the appropriate format, we need to make this field as an “calculated field”. You do so by marking the external code field and clicking on the little calculator symbol.

 

On the following pop-up make exactly this entries:

  • Field Value = User (userId) from Time Collector (select the drop down menu and select ‘Associate Field’, then select the User field from the Entity Tree View)
  • Concatenate/Append _ (select the operation and enter an underscore in the next field)
  • Concatenate/Append Valid to (endDate) from Time Collector
  • Remove All T00:00:00Z (select that operation and enter the string ‘T00:00:00Z’ in the next field)

You can test the format output in the calculation trace. Should look like this:

Check if the result has the desired format. In my example it is: chekhov_2017-09-30.
So it is exactly the userid_YYYY-MM-DD format that the accrual base object needs. Luckily ;-).

But we are not yet finished with the field formatting. We need to tackle the other fields as well. But these are simple field associations for:

  • Actual Quantity ← Collector Value
  • Date ← Valid To
  • User ← User

As a last step, make sure that the Operation for the Accrual Calculation Base is set to Upsert MuLTIPLE.

Please note: please choose UPSERT MULTIPLE instead of UPSERT SINGLE as shown in the screenshot. This makes the process more faster and performant.

Step 4: Filtering the Time Collectors

For the planned integration scenario, we have to filter the time collectors according to their external code – we only want to use our new time collector ‘COL – Working Days per Month’. A second filter needs to be defined to only read those time collectors, which contain the final value for that collector. Since Time Collectors are saved per time sheet, they have a field named Last Posting Date, which contains the end date of the time sheet for which the time collector’s value was calculated for or the End Date of the time collector, if its period ends in the middle of a time sheet. For the creation of accruals from time collectors, we are only interested in the end value of the time collector. This is the case for those collectors where the Last Posting Date is the same as the period End Date of the collector. Therefore, we add a ‘Calculated Filter’ to filter out all time collectors, where those two fields are not the same.

The Calculated Filter for the Last Posting Date looks like follows:

With these settings, you can run the integration scenario to test whether it creates the desired results. In the case of our example, this means it will create objects of type Accrual Calculation Base for each instance of a time collector with name where the Last Posting Date is equal to the Valid to date.

Step 5: Time Account Setup

The setup of the time account which will receive the accruals based on time collectors is the same as for any time account for ‘Accruals on Actuals’. That is, the time account type must have the field Accruals Based On set to ‘Recorded Times’.

If employees have time types in their time profile, which deduct from time accounts of that time account type, the Accrual Calculation Base objects, which are created with the new integration scenario will be automatically considered on the next accrual generation run.

What you will setup for the accrual run, is the actual factor to post to the time account for each time collector. This means, the factor of 0.416438356 hours for each working day will be used in an Accrual Rule for this time account type. A possible Accrual Rule could look like follows.

Step 6: Making it Happen

For testing the integration scenario, you probably used the option ‘Run Now’ in the Review and Run section. To let the system perform the integration scenario automatically, you will want to set a schedule for it.

Basically, you can schedule the scenario to run at arbitrary intervals, depending on the specific use case you need to configure. However, you need to make sure that only those Time Collectors are processed, which were created or changed since the last time the integration scenario was processed. You can do that by setting an additional filter for the objects, you want to select:

Use a Time-Based Filter, which selects only objects, which were modified since the last run time of the scenario. This reduces too many data volume and you get even those collectors that have changed based on amended time sheets or retro-active changes in the time sheet.

The accrual calculation base object gets filled. When you got retro active changes the old values in this object get overwritten and the accrual calculation run automatically runs from this period onwards again.

That´s it. Enjoy.

Many thanks to Hagen Eck for delivering the input.

 

7. To be considered in the time account accrual

Just added this one, cause there are some things you need to pay attention for in the time account setup and accrual.

When you use this kind of accrual variant – instead of the normal accrual where you get for each month or for each year vacation independent from your actual hours worked – you need to configure your time account in a specific way. Choose in the time account type (manage data) daily accrual as accrual frequency and accruals based on recorded times, not “standard accrual”:

We provide a dedicated time account accrual run for this scenario. The accrual change scenario is “Accruals on reported times” and not “accrual” like for a “normal” accrual run. Keep this in mind when monitoring the jobs via “Manage time off calendars”.

This change scenario runs then daily based on the “Trigger TLM task job” that needs to be switch on in provisioning. The TLM trigger task job is the main job for Time Management, doing lots of things not only the accrual. So, please ensure that this job is switched on (but it should be already, otherwise lots of things won´t work in your system).

 

 

 

23 Comments
You must be Logged on to comment or reply to a post.
  • Hi Sir!

    We’re actually in the middle of our implementation of Employee Central and we parked the Time Off/Time sheet module in the project because based on initial diagnosis, Time sheet is not sufficient for our business requirements. I have two questions re: the article above:

     

    1. After receiving a notification about their time sheet, can employees file a log in/log out entry in case they have days that they rendered official business outside of the office or forgot to simply use biometrics?
    2. Can the time off balances pick up the tenure of the employee (e.g. an employee who is more than 5 yrs of tenure has a 2.0 multiplier for time off accrual)? 🙂

    Hope to get your feedback soon!

     

    •  

      Hi Jean,

      the second point first, cause that´s clear to me:

      Yes, the 2.0 multiplier for an overtime / time off accrual can be applied for those employees that are more than 5 years employed. However, you need to assign a different time recording profile to this employee in the job infor then starting from his 5th anniversary date. There is no query that checks automatically the anniversary date of the employee and if less 5 years OT 1.5 if more than 5 years OT 2.0. Imagine the performance impact: upon each time record job information would need to be read and this costs performance.

      But when you assign a different time recording profile with the OT 2.0 as a pay component instead of 1.5 all works fine. Retro-calculation as well when the employee edits a time record before his 5th anniversary date ;-).

      But just to inform you: for your business use case you don´t have to apply the above mentioned approach I described in the blog. You can use the time off in lieu functionality of the time sheet / time valuation. Please refer to the time sheet implementation guide to get more information on this. That´s much more easier than the above mentioned way to use working time for a vacation accrual. Time off in lieu can be calculated / posted without the integration center approach.

      Then your first question:

      Not quite sure I understood correctly what you mean. You are mentioning log in / log out, so I assume you mean Clock in / clock out. This is in general not yet possible at all in EC Time Sheet. We are currently working on this and this is a topic for 2019 releases. Currently an employee needs to enter start / end time (or duration only) in the time sheet – or you upload a record with start / end time (or duration only) via our import services into the time sheet.
      When an employee gets a reminder notification he can open the time sheet and record retro-activly an attendance record. Time valuation performs a retro-calculation then.

      Hope this was helpful.

      Regards

      Volker

  • Hello Volker,

    Thanks for this blog.

    I tried to implement this but I have in collector only weekly results. I have collector  set monthly and I see correct dates but number of days in collector is only on weekly basis. Did you tested this and worked ok for you?

     

    Thanks a lot..

    Jan

    • Hi Jan,

      would always be helpful when you give more details. Where do you “see” the collectors on a weekly basis?

      In the time admin workbench? Yes, we show there a monthly collector with each time sheets (weekly) contribution. The weekly periods appear there, but the collector has got the overall value of the month. This is done for more transparency and analytical reasons for the time admin that he can see which time sheet period did contribute what to the overall monthly value.

      When you display the collector in the time sheet UI we show there the overall monthly sum of the collector. Cause an employee is more interested in the overall time collector balance.

      Regards

      Volker

  • Hi Volker,

    thanks for quick response. Yes I see only week collector value in time sheet UI for EE with negative time recording but for EE with positive time recording I see overall monthly value.

    In admin workbench for positive I see correct values but for negative time recording I see no values.

    Dont you know why.

    Thanks

    Jan

    • Cause maybe you don´t have the time valuation rules for the collectors incorporated into your time recording profiles for negative time recorders?

  • Even though accrual Base calculation object was filled via Integration but accrual rule set on Time account type didnot trigger and calculated the accrual.

    Time collector filled – check , Accrual Base object – check.

    In Accrual Calculation Account Type Base, records are generated with to be processed status . 

    Scenario : Daily accrual based on attendance marked in time sheet  at rate of .08 

    • Realized  🙂 the automated standard job pulls in & proccesses the accrual .

      Now , stuck with time collector Issue :

       

      If employee regularizes the attendance and gets declined but still time collector captures that data irrespective of workflow status .. . How to control that  ? Is that automatically take care of ??

      • Hi Ishmit,

        By any chance, were you able to send across just the approved time sheet records to the accrual calculation base object?

        Best Regards,
        Aarti.

  • Hi Volker,

     

    Hope you are doing fine and thanks for blogs; it helps us in utilizing the system well :).

     

    I have a question or rather need assistance. I intend to use actual time booked under Additional hours maintained by part-timers to accrue leave entitlement. I have followed the steps you have mentioned above; however, in integration, I get an error and I do not see why this is happening.

     

    The only difference in my set up is that I am accruing hours and not counting them.

     

    Time Collector

    Errors

    Preview

     

    Due to this error, I am unable to schedule the job. Would you know what the error is and how can I correct it?

     

    Regards

    Sanjay

    •  

      Hello Sanjay,

      you made a configuation error: you have on the left and right side a collector choosen. However, you need to choose on the left side your collector and on the right side the “accrual calculation base object” as described above. This object is read in the accrual run automatically.

      Regards

      Volker

  • Hi Volker-thank you for detailing out this procedure. It is very helpful.

    I’ve been trying to understand if this can work in a similar manner for sending time sheet hours for short-term attendance time types over to absence time types. The scenario I’m working on starts with SAP CATS recording actual hours against Absence Types, which in turn will be sent over to EC Time Sheets via an integration. From there I’m wondering if the requested Time Off balance can be updated with the actual recorded from Time Sheets.

    For example, if an employee requested (forecasted) Vacation for 5 days (40 hours) in Time Off, but the actual recorded in Time Sheets was 4 days (32 hours), can the time collector be used to update the balance for the Vacation Time Account Type?

     

    Thank you,

    Sualeh

    •  

      Hello Sualeh,

      I don´t fully understand the scenario.

      So, you have got EC Time Sheet, EC Time Off and CATS?

      What kind of data is recorded where?

      You record an short term absence in CATS (why in CATS and not in EC Time off?) and you want to sent this record to the EC Time Sheet (why EC Time Sheet and not directly into absence time type from time off?).

      When you import a full day absence record into time off and an employee requests in the same week a 5 days vacation this ends up either in a collision check or in a split and delimit of the requesting entry.

      Regards

      Volker

  • Hi Volker-

     

    Thank you for the reply.

    Correct. Actual hours are recorded in CATS because that system has already been established as the source of record for employee hours and tied with the finance system. Our intent is to allow employees to forecast (request) time off in EC Time Off, but have the actual hours feed into EC Time Sheets to visually see how many hours an employee took on each day against an absence type.

    We are hoping to then leverage the actual hours to update the forecasted time off request along with the balances against that time account. We want balances to be tracked in EC Time Off only. Have you seen this done before?

     

    I understand that the absence record can be loaded directly into Time Off, but the collision check isn’t working when loading a Vacation absence against an existing Vacation absence.

     

    Thank you,

    Sualeh

     

     

    •  

      Wow, the scenario is not yet clear to me.

      In Cats you record absences. That don´t deduct from a time account. Then you load this absence to EC Time Off where the time account deduction shall be done. And you use EC Time Sheet to visualize the absences.

      Did I get this correct?

      No. I haven´t see this before and it is a bit tricky, isn´t it? What does an employee do when in CATS the vacation is recorded (no time account deduction here) then transferred to EC Time and runs into an error cause the time account balance is not sufficient? Who informs the employee? He needs to edit the vacation record in CATS.

      And collision check works in EC Time even when importing an absence (otherwise it would produce messy results). The collision check in your example – absence type gets recorded overlapping the same type – results in an error. You can configure a “split and delimit” – but this works only with different time type. Like: an illness type delimits automatically an existing overlapping vacation.

      But this is it. There aren´t that sophisticated configuration options than in the nice SAP ERP Table T582s.

      Regards

      Volker

      • Hi Volker-thank you for reply.

        Correct. Employees are allowed to have a negative balance in their time accounts in EC for up to 1 accrual year’s balance and there currently isn’t a plane to present a system error on a sufficient balance. Employees will be informed by the talent team, external of the system, when this occurs. Being that CATS was already in place and live, our only option is to record time entries there. Short term time off balances aren’t tracked in CATS and thus we are hoping to leverage EC time off, since employees will also be accessing SF for other modules.

        In regards to the collision check, I meant to state that I do understand the limitation of it’s capability that an identical Time Type (example Vacation) can’t be imported onto an existing one. Thank you for reaffirming.

        At this point, the most viable solutions looks to be to transform the time entries leaving CATS into an upload file for decrementing balances in EC Time Off directly and skipping EC Time Sheets. Only limitation is that we won’t be able to graphically see day-to-day hours of what was requested.

         

        Thank you for your insight.

         

        Very much appreciated,

        Sualeh

         

        • Well, you could use the External time data Odata API to load attendance times into the time sheet. But I would not do this only for the sake of visulazing the recorded hours per day / week.

          Absences can be imported via file upload.

           

  • Hi Volker,

    I hope you don’t mind me asking a time-sheet related question here. In our time sheet build we use attendance time types, on-call time types and allowances. We need to send this data to our payroll provider, which we do in Advanced Analytics.

    However, it seems like we have to create two separate reports as allowances are kept in a separate table to the other time types.

    Do you know if there is a way around this? It’s all time sheet data, so I’m surprised it can’t be picked up in the same report.

    Thanks for your time.

    Ashley

    • Did you check the time valuation results? All data should be in there. This is how we replicate data to EC Payroll / SAP onprem Payroll and allowances are a time valution result, too.

      Regards

      Volker