The Overtime Request Module allows you to log extra hours worked beyond your regular shift and request approval/compensation.
✅ Log overtime hours worked
✅ Provide reason for overtime
✅ Submit for approval
✅ Track pending OT requests
✅ View OT history and compensation
✅ Generate OT reports
Regular Shift: 08:00 AM - 17:00 PM (9 hours)
Work Until: 19:30 PM (overtime starts)
Overtime Hours: 2.5 hours extra
OT Type:
├─ Regular OT (Paid at 125% rate)
├─ Weekend OT (Paid at 150% rate)
├─ Holiday OT (Paid at 200% rate)
└─ Rest Day OT (Paid at 150% rate)
OVERTIME GUIDELINES
═════════════════════════════════════════
Minimum OT: 30 minutes
Maximum Per Day: 4 hours
Maximum Per Week: 12 hours
Maximum Per Month: 40 hours
Approval Required: Yes (Team Lead + Manager)
Advance Notice: Same day notification
Payment Method: Salary + Hourly Rate
Compensatory Days:
├─ Can convert OT to rest days
├─ Requires written approval
└─ Must be taken within 3 months
| Type | Rate | When |
|---|---|---|
| Regular OT | 125% of hourly rate | Weekday after hours |
| Weekend OT | 150% of hourly rate | Saturday/Sunday work |
| Holiday OT | 200% of hourly rate | Company holidays |
| Rest Day OT | 150% of hourly rate | Your scheduled off day |
You Log OT
↓
Submitted to Team Lead
↓
Team Lead Reviews
│
├→ ✅ Approved → Sent to Manager
│
└→ ❌ Rejected → Notification sent
(Reason provided)
↓
Resubmit if needed
Manager Reviews
│
├→ ✅ Approved → Financial processed
│ ↓
│ Recorded in Payroll
│
└→ ❌ Rejected → Notification sent
Step 1: Navigate to Overtime
Left Menu → Overtime Request → [+ New OT Request]
↓
Request Form Opens
Step 2: Fill Overtime Form
┌────────────────────────────────────────┐
│ CREATE OVERTIME REQUEST │
├────────────────────────────────────────┤
│ │
│ * Date: [12/04/2025] 🗓️ │
│ (Must be today or past 7 days) │
│ │
│ * Hours: [2.5] hours │
│ Decimal format (0.5, 1.0, 2.5, etc) │
│ Max: 4 hours per day │
│ │
│ * OT Type: [Regular ▼] │
│ ├─ Regular (125%) │
│ ├─ Weekend (150%) │
│ ├─ Holiday (200%) │
│ └─ Rest Day (150%) │
│ │
│ * Reason: │
│ [ ] │
│ [ Project deadline - client request ] │
│ [ Need to finish database migration ] │
│ [ ] │
│ │
│ * Approval Type: [Payment ▼] │
│ ├─ Payment (Money) │
│ ├─ Rest Day (Comp) │
│ └─ Split (Both) │
│ │
│ Estimated Pay: PHP 625.00 │
│ (Based on your hourly rate) │
│ │
│ [Submit] [Clear] [Cancel] │
│ │
└────────────────────────────────────────┘
| Field | Required | Details |
|---|---|---|
| Date | Yes | Date OT was worked |
| Hours | Yes | Total OT hours (0.5, 1, 2.5, etc) |
| OT Type | Yes | Weekday/Weekend/Holiday rate |
| Reason | Yes | Why OT was necessary |
| Approval Type | Yes | Payment or Compensatory Day |
Important Rules:
✓ Can submit up to 7 days after
✗ Cannot submit for future dates
✗ Cannot submit for more than 7 days ago
Example (Today: Dec 4):
✓ Dec 4, 3, 2, 1, Nov 30, 29, 28 (Last 7 days)
✗ Dec 5, 6, 7 (Future dates)
Format:
Valid entries:
0.5 (30 minutes)
1 (1 hour)
1.5 (1 hour 30 min)
2 (2 hours)
2.5 (2 hours 30 min)
3 (3 hours)
4 (4 hours - maximum)
Invalid entries:
5 (Exceeds 4 hour max per day)
0.25 (Below 30 min minimum)
2.75 (Unusual increments)
Guidelines:
Good Reasons:
✓ "Project deadline - client request for
critical bug fix"
✓ "Server migration in progress, needed
to monitor stability"
✓ "Year-end closing - financial data
reconciliation"
✓ "Emergency support - customer escalation"
Poor Reasons:
✗ "Work"
✗ "Overtime"
✗ "Had to stay"
✗ (Leave blank)
Reason should be:
Option 1: Payment
Receive: Cash payment for OT hours
Amount: Hours × Hourly Rate × Multiplier
Example: 2.5 hours × 250/hour × 1.25 = 781.25
Payroll: Processed next payroll cycle
Option 2: Compensatory Day (Rest Day)
Receive: 1 rest day per X hours worked
Ratio: Company dependent (1:1 or 1:1.5)
Use: Take as paid leave
Must: Use within 3 months or forfeit
Option 3: Split
Receive: Partial payment + partial rest day
Example: 2.5 hours OT
→ 1.5 hours paid (375 PHP)
→ 1 hour as rest day (comp)
Step 1: Review
Verify all fields:
✓ Date: December 4, 2025
✓ Hours: 2.5 hours
✓ Type: Regular (125%)
✓ Reason: Complete project deadline work
✓ Approval: Payment
✓ Estimated: PHP 625.00
Step 2: Submit
[Submit] button
↓
Processing...
Step 3: Confirmation
✅ OVERTIME REQUEST SUBMITTED
Request ID: OT-20250042
Date: December 4, 2025
Hours: 2.5 hours
Type: Regular Overtime
Reason: Project deadline work
Estimated Compensation: PHP 625.00
Status: PENDING APPROVAL
Next: Team Lead Review (24-48 hours)
Track your request:
→ Overtime Request History
→ Notifications
→ Dashboard Widget
Access Pending:
Overtime Request → [Pending] Tab
↓
Shows all awaiting approval
Pending List:
┌─────────────────────────────────────────┐
│ PENDING OVERTIME REQUESTS │
├─────────────────────────────────────────┤
│ │
│ ID │ Date │ Hrs │ Status │ Act │
├─────────────────────────────────────────┤
│OT42│ Dec 4 │ 2.5 │ 🟡 Pending │[✎]│
│ │ │ │ TL Review │[❌]│
│ │ │ │ │ │
│OT41│ Dec 3 │ 1.0 │ 🟡 TL Appr │ │
│ │ │ │ Mgr Review │[✎]│
│ │ │ │ │ │
│OT40│ Dec 2 │ 3.5 │ ✅ Approved │[📄]│
│ │ │ │ (2 days ago)│[❌]│
│ │ │ │ │ │
└─────────────────────────────────────────┘
Can Edit If:
Steps:
[Edit icon] (pencil)
↓
Form opens with current data
↓
Modify fields (same form)
↓
[Update] button
↓
Changes saved, approvers notified
Can Withdraw If:
Steps:
[Withdraw icon] (X)
↓
Confirmation prompt
↓
Are you sure?
↓
[Confirm Withdrawal]
↓
Request removed from approval queue
↓
You can resubmit if needed
View Your Statistics:
┌──────────────────────────────────────┐
│ YOUR OVERTIME SUMMARY (2025) │
├──────────────────────────────────────┤
│ │
│ Total OT Logged: 18.5 hours │
│ ████░░░░░░ │
│ │
│ Pending Approval: 2.5 hours │
│ Awaiting Payroll: 8 hours │
│ Paid Out: 8 hours │
│ Used as Rest Days: 0 hours │
│ │
│ Estimated Earnings: PHP 4,625.00 │
│ │
│ This Month: 6.5 hours │
│ This Week: 2.5 hours │
│ │
│ Monthly Limit: 40 hours │
│ You've used: 18 hours │
│ Remaining: 22 hours │
│ │
└──────────────────────────────────────┘
Access Full History:
Overtime Request → [History] Tab
↓
All past OT requests
History Table:
ID │ Date │ Hours │ Type │ Amount │ Status
────┼──────┼───────┼─────────┼─────────┼────────
OT42│Dec 4 │ 2.5 │Regular │ PHP 625 │ ✅ PAID
OT41│Dec 3 │ 1.0 │Regular │ PHP 250 │ ✅ PAID
OT40│Dec 2 │ 3.5 │Regular │ PHP 875 │ ✅ PAID
OT39│Dec 1 │ 2.0 │Weekend │ PHP 600 │ ✅ PAID
OT38│Nov 30│ 1.5 │Regular │ PHP 375 │ ✅ PAID
Generate Report:
[Export] button
↓
Format options:
├─ PDF Report
├─ Excel (CSV)
└─ Payroll Integration
↓
[Select Format]
↓
File Downloads
PDF Report Sample:
OVERTIME REPORT
Company: XYZ Corp
Employee: Juan Dela Cruz
Period: January 1 - December 31, 2025
Summary:
Total Hours: 18.5
Total Earnings: PHP 4,625.00
Detailed List:
Date Shift Hrs Type Amount Status
Dec 4 2.5h Reg 625.00 ✓ Paid
Dec 3 1.0h Reg 250.00 ✓ Paid
...
Signature: _______________
Q: Can I submit OT for a date beyond 7 days?
A: No, 7-day limit strictly enforced. Submit promptly.
Q: What if my OT is rejected?
A: Review rejection reason, discuss with Team Lead, resubmit if valid.
Q: How long until approval?
A: Team Lead usually 24-48 hours, Manager 24 hours after TL approval.
Q: Can I convert OT to rest days?
A: Yes, select "Compensatory Day" or "Split" option.
Q: When do I get paid for OT?
A: Next payroll cycle after full approval.
Q: What's the maximum OT per month?
A: 40 hours standard, can request exception for urgent projects.
Q: Do weekends count differently?
A: Yes, Weekend OT is 150% vs Regular 125%.
Q: Can I change my mind after submitting?
A: Yes, withdraw request before full approval.
Issue: "Hours exceed maximum (4 per day)"
Solution: Enter max 4 hours, submit separate request next day.
Issue: "Date is outside 7-day window"
Solution: Can only submit within 7 days. Contact HR for older dates.
Issue: "Reason too short"
Solution: Provide at least 20 characters explaining why.
Issue: "Team Lead not assigned"
Solution: Update your profile with Team Lead before submitting.
public function create()
{
return view('users.employee.overtime-request.create', [
'user' => auth()->user()->load('profile')
]);
}
public function store(StoreOvertimeRequest $request)
{
$ot = OvertimeRequest::create([
'user_id' => auth()->id(),
'date' => $request->date,
'hours' => $request->hours,
'ot_type' => $request->ot_type,
'reason' => $request->reason,
'approval_type' => $request->approval_type,
'status' => 'PENDING'
]);
// Calculate estimated pay
$ot->estimated_pay = $this->calculateOTPay(
$request->hours,
$request->ot_type,
auth()->user()
);
$ot->save();
return redirect()->route('employee.overtime-request.index')
->with('success', 'Overtime request submitted');
}
private function calculateOTPay($hours, $type, $user)
{
$hourlyRate = $user->profile->hourly_rate ?? 250;
$multiplier = match($type) {
'regular' => 1.25,
'weekend' => 1.5,
'holiday' => 2.0,
'rest_day' => 1.5,
};
return $hours * $hourlyRate * $multiplier;
}
Documentation Version: 1.0