Human Capital Management Blogs by SAP
Get insider info on SAP SuccessFactors HCM suite for core HR and payroll, time and attendance, talent management, employee experience management, and more in this SAP blog.
cancel
Showing results for 
Search instead for 
Did you mean: 
NeeleshKamath
Product and Topic Expert
Product and Topic Expert

Background


 

Time clock rounding or time rounding is a practice that allows supervisors or employers to get an insight into their employee’s work hours and modify them to easier-to-tackle numbers for accounting when they calculate payroll

 

Is time clock rounding legal?


If you are an employee, you might be wondering: “Is it legit for an employer to adjust my hours?”

The answer is yes, under specific rules.

  • The U.S. Federal Law states that employers are allowed to round the time to specific predetermined time intervals: nearest 5 minutes, nearest 10th of an hour (6 minutes), or quarter of an hour (15 minutes).

  • In addition to these strict time rules, an employer cannot use time rounding in any way that can withhold an employee’s pay. The aim is to round the times in such a way that they benefit both the employer and employee.


 

The 7-Minute rule/One-quarter of an hour


This is often the most common rule companies will use. As you’re about to see it deals with a larger time interval, so it’s easier to keep track of clock in/out times. Overall, it makes the rounding process less tedious.

It’s important to note that this is called the 7-minute rule because in the first 7 minutes of a 15-minute interval you round the time back, and in the next seven minutes you round the time forward.



























Start time Rounded time
07:53 – 08:07 08:00
08:08 – 08:22 08:15
08:23 – 08:37 08:30
08:38 – 08:52 08:45
08:53 – 09:07 09:00

 

Implementing this rule creates an unbiased system for time rounding. It will ensure that your employees get a fair timesheet report by the time payroll calculations come around. That being said, you will have to be mindful of your employees’ login/out times to make sure they aren’t inflating their minutes in an attempt at accumulating hours for overtime pay.

If you notice the entries in above table, we are eventually rounding them in increments of 15 Mins i.e the target time is a multiple of 15 ex: 8:00, 8:15, 8.30, 8.45, 9.00.

Having set the context w.r.t the requirement and rules in above sections, now let’s get into the solution details. I am going to list some solutions but please ensure that you do your own due diligence and adapt them accordingly after evaluating your customer requirements. At the end of the day, it is important to realize that this is a custom approach to a problem.

 

Solution Details


 

The first step in order to achieve such a rounding would be to create a custom MDF that can act as a lookup and store these entries and target time for rounding

Custom MDF



The custom MDF contains 4 fields

External Code : A key field to identify a rounding rule entry

Lower Limit : Lower limit of a rounding range

Upper Limit : Upper limit of a rounding range

Target Time: Target time for rounding a value.

Examples of Lookup



The below is the complete table of entries across 24 hours

 



























































































































































































































































































































































































































































































































































































































externalCode cust_lowerLimit cust_upperLimit cust_targetTime
externalCode lowerLimit upperLimit targetTime
8:00 7:53:00 8:07:00 8:00:00
8:15 8:08:00 8:22:00 8:15:00
0:00 23:53:00 0:07:59 0:00:00
0:15 0:08:00 0:22:59 0:15:00
0:30 0:23:00 0:37:59 0:30:00
0:45 0:38:00 0:52:59 0:45:00
10:00 9:53:00 10:07:59 10:00:00
10:15 10:08:00 10:22:59 10:15:00
10:30 10:23:00 10:37:59 10:30:00
10:45 10:38:00 10:52:59 10:45:00
11:00 10:53:00 11:07:59 11:00:00
11:15 11:08:00 11:22:59 11:15:00
11:30 11:23:00 11:37:59 11:30:00
11:45 11:38:00 11:52:59 11:45:00
12:00 11:53:00 12:07:59 12:00:00
12:15 12:08:00 12:22:59 12:15:00
12:30 12:23:00 12:37:59 12:30:00
12:45 12:38:00 12:52:59 12:45:00
13:00 12:53:00 13:07:59 13:00:00
13:15 13:08:00 13:22:59 13:15:00
13:30 13:23:00 13:37:59 13:30:00
13:45 13:38:00 13:52:59 13:45:00
14:00 13:53:00 14:07:59 14:00:00
14:15 14:08:00 14:22:59 14:15:00
14:30 14:23:00 14:37:59 14:30:00
14:45 14:38:00 14:52:59 14:45:00
15:00 14:53:00 15:07:59 15:00:00
15:15 15:08:00 15:22:59 15:15:00
15:30 15:23:00 15:37:59 15:30:00
15:45 15:38:00 15:52:59 15:45:00
16:00 15:53:00 16:07:59 16:00:00
16:15 16:08:00 16:22:59 16:15:00
16:30 16:23:00 16:37:59 16:30:00
16:45 16:38:00 16:52:59 16:45:00
17:00 16:53:00 17:07:59 17:00:00
17:15 17:08:00 17:22:59 17:15:00
17:30 17:23:00 17:37:59 17:30:00
17:45 17:38:00 17:52:59 17:45:00
18:00 17:53:00 18:07:59 18:00:00
18:15 18:08:00 18:22:59 18:15:00
18:30 18:23:00 18:37:59 18:30:00
18:45 18:38:00 18:52:59 18:45:00
19:00 18:53:00 19:07:59 19:00:00
19:15 19:08:00 19:22:59 19:15:00
19:30 19:23:00 19:37:59 19:30:00
19:45 19:38:00 19:52:59 19:45:00
1:00 0:53:00 1:07:59 1:00:00
1:15 1:08:00 1:22:59 1:15:00
1:30 1:23:00 1:37:59 1:30:00
1:45 1:38:00 1:52:59 1:45:00
20:00 19:53:00 20:07:59 20:00:00
20:15 20:08:00 20:22:59 20:15:00
20:30 20:23:00 20:37:59 20:30:00
20:45 20:38:00 20:52:59 20:45:00
21:00 20:53:00 21:07:59 21:00:00
21:15 21:08:00 21:22:59 21:15:00
21:30 21:23:00 21:37:59 21:30:00
21:45 21:38:00 21:52:59 21:45:00
22:00 21:53:00 22:07:59 22:00:00
22:15 22:08:00 22:22:59 22:15:00
22:30 22:23:00 22:37:59 22:30:00
22:45 22:38:00 22:52:59 22:45:00
23:00 22:53:00 23:07:59 23:00:00
23:15 23:08:00 23:22:59 23:15:00
23:30 23:23:00 23:37:59 23:30:00
23:45 23:38:00 23:52:59 23:45:00
2:00 1:53:00 2:07:59 2:00:00
2:15 2:08:00 2:22:59 2:15:00
2:30 2:23:00 2:37:59 2:30:00
2:45 2:38:00 2:52:59 2:45:00
3:00 2:53:00 3:07:59 3:00:00
3:15 3:08:00 3:22:59 3:15:00
3:30 3:23:00 3:37:59 3:30:00
3:45 3:38:00 3:52:59 3:45:00
4:00 3:53:00 4:07:59 4:00:00
4:15 4:08:00 4:22:59 4:15:00
4:30 4:23:00 4:37:59 4:30:00
4:45 4:38:00 4:52:59 4:45:00
5:00 4:53:00 5:07:59 5:00:00
5:15 5:08:00 5:22:59 5:15:00
5:30 5:23:00 5:37:59 5:30:00
5:45 5:38:00 5:52:59 5:45:00
6:00 5:53:00 6:07:59 6:00:00
6:15 6:08:00 6:22:59 6:15:00
6:30 6:23:00 6:37:59 6:30:00
6:45 6:38:00 6:52:59 6:45:00
7:00 6:53:00 7:07:59 7:00:00
7:15 7:08:00 7:22:59 7:15:00
7:30 7:23:00 7:37:59 7:30:00
7:45 7:38:00 7:52:59 7:45:00
8:00 7:53:00 8:07:59 8:00:00
8:15 8:08:00 8:22:59 8:15:00
8:30 8:23:00 8:37:59 8:30:00
8:45 8:38:00 8:52:59 8:45:00
9:00 8:53:00 9:07:59 9:00:00
9:15 9:08:00 9:22:59 9:15:00
9:30 9:23:00 9:37:59 9:30:00
9:45 9:38:00 9:52:59 9:45:00

The next step is to read this lookup in a rule and use it for rounding

 

Clock in Clock Out


 

If you are using Clock In Clock out feature as part of Time Tracking implementation, You would be reliant on clock in clock out entries coming from Terminal , Mobile etc. In this case, these entries are paired and stored in “External Time Data” MDF object. From external time data they eventually flow to time sheet of an employee.

In this case, you would need to create a onSave rule to read this lookup and hook it to the MDF “External Time Data”



Testing in Clock In Clock Out

Assume we have the following entries punched In /Out from the Clock In Clock Out Feature


External Time Data is rounded after the above Clock In and Clock Out is paired


You will see similar rounded entries in time sheet as well after external time data is merged with employee time sheet

 

Time Tracking / Time Sheet


 

Customers who are not using Clock In Clock Out and use time sheet manually to enter their times need to use this lookup a bit differently.

We need a time sheet validation rule and this needs to be hooked to “Employee Time Sheet Entry” MDF object as shown below



Testing in Time Sheet



Time Off


 

It is also necessary to plug this rule in Time Off to have an E2E solution. In this case, you need to create a Take Rule and attach it to the Time Type you intend to do this validation

Example Take Rule:



Testing

Try requesting an absence at odd times and you will see an error


To Conclude, these rounding rules can be used especially when you have laws to enforce a particular time in regions like US. Hope this helps in your implementations

 

Thanks
9 Comments
adriangalisteo
Participant
0 Kudos
Hi Neelesh, now with the new Rounding functionality we do not have to create all these rules right?

Thanks for all your help
NeeleshKamath
Product and Topic Expert
Product and Topic Expert
0 Kudos
Hi Adrian

Yes the new rounding should cover things. If not you can use my solution which at the end is a workaround approach

Thanks & Regards
EvangeliaPanagi
Participant
0 Kudos
Hi Neelesh, this is amazing, thanks so much!

Two comments, On your First Rule Save on Time Sheet Entry, why are you using: "Employee Time Sheet Entry.Employee Time.Start Time" Etc. instead of "Employee Time Sheet Entry.Entry.Start Time" ?? I have already tried it, and you are right, but why? It just does not make sense to me!

And two Questions:

  1. Can I apply this Rule for Specific Attendance Types only, i.e. Oly for Overtime?

  2. I have been struggling to create a Business Rule as Validation Rule, using Employee Time Sheet Entry or Employee Time Sheet Objects, in order to check the sum of Hours Entered for a specific Attendance during a Week, and apply an error message. I need to do this only for a specific attendance type and only for a specific group of people, so I did not want to create a separate Time Recording Profile just for this case. BUT, I cannot find any way to capture the sum of hour of a specific attendance in my weekly timesheet... Do you have a solution for this?


Thanks so much!

BR,

Evangelia
NeeleshKamath
Product and Topic Expert
Product and Topic Expert
0 Kudos
Hi Evangelia

Thanks for the feedback

yes you are right, I have tried it with employeetimesheerentry.starttime but for some reason it is always null. hence I had to make use of employee time object in that path. It did not make sense to me as well but since It worked, I kept that config

1, Yes using the same path employeetimesheetEntry.EmployeeTime.TimeType you can check for specific time types

2. I am not sure if you can do this via validation rule,but it is possible via time valuation to collect hours for a week for a attendance type and then raise a message on time type group

 

BR

Neelesh
JoanaF
Explorer
0 Kudos
Hi Neelesh,

Thank you for the overview.

Would it be possible to have a similar solution for rounding the End Time of Working Time, based on the Start Time of the Time Sheet record? The idea would be for the number of working hours to always be 8 hours.

For example, if an employee starts working at 09:02 AM, the the end time should be rounded to 05:02 PM (08:02 AM + 8 hours)?

Thank you,

Joana
EvangeliaPanagi
Participant
0 Kudos
Thanks Neelesh, another question has come up after trying to incorporate this rule together with the standard (now) functionality of adding "Rounding Based on Work Schedule" record, on the employee's assigned Working Schedule.

From the tests I am doing, it seems that the Business Rule is always overriding the Standard Rounding that I have added on the Rounding Based on Work Schedule.

Essentially, I wanted to use the "Rounding Based on Work Schedule" ONLY for Start Time of the Day and End Time of the Day, and then use the Business Rule, ONLY for all the Time Events between the day.

Is something like this possible?

Thanks,

Evangelia
NeeleshKamath
Product and Topic Expert
Product and Topic Expert
0 Kudos
Sorry, Unfortunately I am not sure if you can mix both methods.
NeeleshKamath
Product and Topic Expert
Product and Topic Expert
0 Kudos
Hi Joana,

I think a easier approach for this would be to build this in time valuation

You can check the difference between recorded working time and scheduled time and store the result in a TTG A

Then aggregate and split time val..with threshold as 0...If the value of above TTG A is negative (indicates that recorded working time is less than scheduled time hours) , it will go to TTG below else TTG above...Raise a message on TTG below

You can perhaps try this approach

Regards

Neelesh
EvangeliaPanagi
Participant
0 Kudos
Thanks Neelesh,

We also seem to have another issue with the above solution when it comes to round times where the Start Time or End Time reaches Midnight. For some reason system considers this as same day, and raises an error message.

We can modify your above Business Rule to hardcode the Time that needs to get rounded for the Start Date, but we don't have the same for the End Date. Have you come across this issue before?

Thanks,

Evangelia