The Collision: Half-Day Status and Overtime Hours
A half-day and overtime can appear on the same date without anyone making a data-entry mistake. The typical case is a late arrival or an early leave that trips a half-day rule, followed by extra hours later in the same shift or a call-back after the employee had already left. Security posts, restaurant closes, and plant breakdowns produce this every week: the person was late, then stayed because the site was short. Payroll then has two signals that look contradictory: a status that says the day is only half paid, and a duration that says time ran past the overtime threshold.
The danger is applying both consequences to the same minutes. If you deduct 50 percent of the daily wage because the first punch was after the half-day cutoff, and you also pay overtime on hours after the scheduled end, you are mixing a disciplinary status with an hours-based premium. If you ignore the extra hours because the day was already labelled half-day, you underpay someone who stayed to cover a shortage. Neither shortcut is a policy. The policy is an explicit choice about which minutes are penalised and which minutes are premium-paid.
Write the collision down as a sequencing problem, not a spreadsheet trick. First decide what creates a half-day. Then decide what creates overtime. Then decide which rule wins when both fire, or whether they are allowed to coexist as separate pay lines. If three reviewers can reach three different rupee results from the same punches, the close is still a negotiation. Until that order of operations is documented and used by attendance, the supervisor, and payroll, every dual-flag day will be argued again next month.
- Treat half-day and overtime as separate events that can land on one date
- Never apply a 50 percent deduction and an overtime premium to the same minutes
- Document which rule is evaluated first: status, hours, or manager approval
- Record late arrival or early leave even when it does not change pay
Write the Order of Operations Before You Calculate
Start with paid duration, not with the attendance code. Paid duration is check-out minus check-in minus unpaid breaks. Convert that result to decimal hours and keep it on the row even if the business pays by the day. Daily-rated teams still need that decimal: it is how you test the 4.00 half-day floor and the 8.00 overtime ceiling against the same events. A status of present, half-day, or absent is a label derived from the hours and the late or early rule. If you start from the label, you lose the arithmetic you need for overtime and you cannot explain the payslip later.
Define two numeric thresholds and one late or early trigger. A common operator set for shift teams is: paid hours below 4.00 create a half-day; paid hours of 4.00 through 8.00 create a full day of regular time; paid hours above 8.00 create overtime after approval. Independently, a first punch after the midpoint of the shift, or a last punch before the midpoint, can also create a half-day even when the hours look acceptable. Those two families of rules must not be mixed silently.
Then write the conflict rule in one sentence. Hours-first: if paid hours meet the full-day floor, do not convert the day to half-day pay; keep the late punch as an attendance exception. Status-first: a late-after-midpoint punch is a half-day for pay regardless of hours; extra time is unpaid unless a manager approves it as a separate extra-duty line. Split: fill regular hours up to 8.00 first, apply overtime only to the remainder, and never stack a 50 percent daily deduction on top. Choose one rule per employee group and use it every month.
- Calculate paid duration before assigning present, half-day, or absent
- Set a half-day hours floor, an overtime hours ceiling, and a late or early trigger
- Publish one conflict rule: hours-first, status-first, or split
- Keep the same order of operations in attendance, review, and payroll export
Worked Example: 4-Hour Half-Day and 8-Hour Overtime
Use a single shift so the numbers are easy to audit. Shift 09:00 to 18:00 with a 60-minute unpaid lunch, so expected paid time is 8.00 hours. Half-day if paid hours are below 4.00, or if the first punch is after 13:00. Overtime if paid hours exceed 8.00 and a supervisor approves the extension. Daily wage is ₹1,200, which is ₹150 per hour on an eight-hour day. Overtime multiplier is 1.5x, so one approved overtime hour is ₹225. Keep grace separate: a 09:08 punch inside a 10-minute grace is not a half-day trigger and should not enter this collision at all.
Employee Ravi checks in at 13:10 and checks out at 22:40, with a 30-minute unpaid break. Gross duration is 9 hours 30 minutes. Paid duration is 9.00 hours. The 13:10 punch is after 13:00, so the late trigger fires. Paid hours also exceed 8.00, so the overtime trigger fires. The raw row therefore contains a half-day flag and 1.00 overtime hour on the same date. That is the collision the policy has to resolve, not a reason to delete one of the fields.
Apply each conflict rule to the same numbers. Hours-first pays 8.00 regular plus 1.00 overtime: ₹1,200 + ₹225 = ₹1,425, and the late punch stays as a recorded exception. Status-first pays half-day ₹600 and pays the extra hour only if a manager creates an approved extra-duty line; without that approval Ravi receives ₹600 for nine hours of presence. Split fills 8.00 regular first, then 1.00 overtime, and does not also deduct 50 percent. The wrong method is the stacked one: ₹600 half-day plus ₹225 overtime, which neither matches hourly pay nor a clean half-day. Put the chosen result and the rule name on the payroll row.
- Example inputs: in 13:10, out 22:40, 30-minute break, paid 9.00 hours
- Hours-first result: 8.00 regular and 1.00 overtime, late kept as an exception
- Status-first result: half-day wage unless extra duty is separately approved
- Never output ₹600 plus ₹225 as an unexplained stacked total
India Daily-Wage Practice Versus Hourly Policy
Many Indian private-sector teams still think in daily status even when the roster is hourly. Present, half-day, absent, and loss of pay are the language of the salary register. Overtime is often a separate claim that supervisors raise in a message or a register. That split is why the same day can be marked half-day in attendance and overtime in a WhatsApp screenshot. The payroll file has to reconcile those two languages instead of importing both as if they were independent truths.
Hourly and contract-billing teams should prefer hours-first. Staffing firms, field teams, restaurants, and manufacturing lines that already pay by the hour should not convert a late punch into a 50 percent daily deduction if the person then worked a full duration. The late event can still affect a scorecard, a warning, or a client report. It should not rewrite nine hours into a half-day unless the employment contract says so in writing. Client billing makes this sharper: you cannot invoice eight hours and pay a half-day without a reconciling note the account manager will have to defend.
Daily-rated security, FM, and factory groups sometimes keep status-first because the half-day is a published disciplinary rule, not an hours formula. That is workable only if extra hours after a half-day trigger require a named approval and a separate pay code. Otherwise employees learn to stay late to cancel a half-day, or supervisors learn to ignore the late rule when the site is short-staffed. Either behaviour makes the policy unenforceable by month three. Put the rule in the appointment letter or standing order, then apply it with the same cutoff as every other pay code.
- Daily-status payroll must still store paid hours beside the attendance code
- Hourly teams should not convert a late punch into a 50 percent deduction by default
- If status-first is required by contract, extra hours need a separate approved pay code
- Do not let informal overtime claims override a half-day without an audit trail
LOP Versus Half-Day Versus Overtime
Loss of pay, half-day, and overtime are not three shades of the same adjustment. Loss of pay is unpaid absence or an unpaid shortfall against scheduled days. Half-day is a defined partial-pay status, usually 50 percent of the daily wage or four hours of pay, triggered by short duration or a late or early rule. Overtime is a premium on approved hours above the regular threshold. If a day is already a half-day, do not also post LOP for the missing four hours unless the policy explicitly uses LOP hours instead of a half-day code.
Use a second example for early leave. Check-in 09:05, check-out 12:40, no unpaid break. Paid duration is 3 hours 35 minutes, or 3.58 hours. That is below the 4.00 half-day floor, so the day is a half-day. There is no overtime path because paid hours never crossed 8.00. Do not add LOP for 4.42 missing hours on top of the half-day. The half-day already prices the shortfall. Adding LOP double-penalises the same gap and will not survive the first employee query, because 3.58 hours of work would then pay less than a true full-day absence in some registers.
Call-backs need their own handling. An employee who works 09:00 to 13:00, leaves, and returns 18:00 to 22:00 has two segments, not one half-day with automatic overtime. The morning can be 4.00 regular hours. The evening is extra duty or overtime only if it was requested and approved. Marking the whole calendar date as half-day because of the gap, then paying the evening at 1.5x, overpays the premium and misstates attendance. Keep segments, site, and approval on the row so payroll can see why the day is split.
- Use half-day or LOP hours, not both, for the same unpaid shortfall
- A 3.58-hour early leave is a half-day with no overtime consequence
- Treat a gap-and-return day as two segments with separate approval
- Keep pay codes for LOP, half-day, regular, and overtime mutually exclusive by minute
Put the Rule on the Payroll-Ready Row
The export should show the inputs that produced the result: check-in, check-out, unpaid break, paid hours, half-day trigger, overtime hours, whether overtime was approved, the conflict rule used, and the payable regular, half-day, LOP, and overtime values. A reviewer who only sees HD plus OT cannot tell whether finance applied hours-first or stacked both penalties. That is how disputes survive after payslips are issued. If an inspector or employee asks for the working, the row should reproduce the rupees without a sidebar conversation.
Build an exception path for days where both flags fire. Those rows should not auto-close. The supervisor confirms whether the extra hours were required. HR or payroll confirms that the conflict rule was applied once. If the extra time was a forgotten check-out rather than real work, overtime is rejected and the paid duration is corrected. If the extra time was real and the late trigger is disciplinary only, overtime can be paid without a half-day deduction. Park the dual-flag population on a one-page exception report so it cannot hide inside a 400-row import.
Attend Mitra keeps this as one connected workflow rather than a status column in attendance and a separate overtime claim in chat. Verified punches, shift thresholds, half-day rules, and overtime approvals can sit on the same record before payroll is run. Managers review the collision days before cutoff, and the hours file that finance receives already contains the chosen rule instead of two competing totals. The last section of the close is then a short dual-flag list, not a reconstruction of who said the extra hour was real. Start from how to calculate employee hours for payroll, split premiums with how to calculate overtime from timesheets, then prepare attendance for payroll before the pay run. Keep the rules in payroll software.
- Export paid hours, triggers, approvals, and payable categories on one row
- Queue dual-flag days for review instead of auto-calculating a stacked result
- Reject overtime that is only a missing check-out
- Close half-day and overtime with the same period cutoff and audit trail

