Shifts, breaks, overtime, and payroll decimals - the whole timesheet workflow in plain typed expressions.
HR time math has two constant traps: breaks that have to come off every shift, and the hours-to-decimal conversion payroll requires (7h 45m is 7.75, never 7.45). TCalc handles both - durations are real values and decimal output is one tap away.
The HR layout below has one-tap keys for standard shifts and breaks, so a full week of clock-ins takes seconds to total.
Time is base-60 and money is base-10, and payroll sits exactly on the seam. Typing 1.45 for one hour forty-five minutes and adding 0.30 for a half-hour break produces 1.75, which is one hour forty-five minutes only by coincidence of notation and is wrong the moment you carry past sixty. The error is small per entry and systematic across a month, which is the worst combination: too small to notice, too consistent to cancel out.
Working in real time values removes the class of error entirely. A shift is a subtraction between two clock times with the unpaid break taken off, and it produces a duration - not a decimal that happens to look like one.
The core calculation: clock-out, minus clock-in, minus the unpaid break.
A working week from five daily figures - thirty minutes short of a 40-hour FTE.
The same duration in decimal hours, ready for the payroll column.
Overtime is a subtraction against a contractual baseline, which is straightforward once the baseline is expressed in the same units as the actual. Leave balances are more interesting, because they are usually held in work days while the underlying entitlement is in hours: 25 work days of annual leave is 200 hours, and a half-day is four. Converting between the two by hand is where balances drift.
The subtler trap is treating calendar time as work time. One week is not 168 working hours and one day is not 24; for scheduling purposes a week is five work days and a day is eight work hours, so a calendar week converts to 40 hours. A conversion that knows this is the difference between a schedule that holds and one that quietly over-commits people.
Weekly overtime against a 40-hour full-time baseline.
Annual leave balance after two absences - 136 hours remaining.
Annual hours less twenty days of leave.
Monthly hours for a part-time contract at 20 hours a week.
A night shift breaks naive subtraction: 06:00 minus 22:00 is negative eight, which is obviously not the answer. There are two correct approaches and both are one expression. You can split the shift at midnight and add the halves, or you can add the shift length to the start time and read off the finish, which also tells you the calendar day it lands on.
The second form is the more useful one in rostering, because the question is usually "when does this person finish" rather than "how long is this shift". Getting a next-day answer rather than a wrapped-around one prevents the classic error of rostering someone back on before their rest period is complete.
A 22:00-06:00 shift split at midnight: two hours before, six after.
The same shift as a finish time, correctly landing on the following day.
One shift: clock-out minus clock-in minus unpaid lunch.
A whole week totalled and shown as payroll-ready decimal.
Overtime: actual week minus the standard 40 hours.
Different break length? Just change the number.
Clock-out minus clock-in minus unpaid breaks: 17:30 − 09:00 − 30m = 8h. TCalc evaluates the whole expression at once, per day or per week.
Minutes divided by 60: 39h 15m = 39.25 hours. In TCalc you switch the output format to hours and any total displays as decimal - no conversion tables.
Subtract the standard week from the actual total: 42h 30m − 40h = 2h 30m of overtime. With Pro you can save your standard week as a one-tap custom button.