Attendance Management
7 min readThis guide covers daily time records (DTR), time tracking, grace periods, overtime, absence detection, and the integration between attendance and payroll in TalinoHR.
Daily Time Record (DTR)
The Daily Time Record is the foundation of attendance tracking in the Philippines. Each attendance record captures:
- Date - The work date
- Time In - Clock-in time
- Time Out - Clock-out time
- Late Minutes - Minutes arrived after scheduled time-in (after grace period)
- Undertime Minutes - Minutes left before scheduled time-out
- Overtime Minutes - Approved overtime minutes (display field, actual OT computed from OvertimeApplication)
- Is Absent - Whether the employee was absent
- Is Half Day - Whether it was a half-day attendance
- Is On Leave - Whether the employee was on approved leave
- Is Rest Day - Whether the date falls on a rest day per the work schedule
Work Schedule Integration
Attendance records are tightly linked to work schedules. The system uses the employee's assigned WorkSchedule to determine:
Rest Day Detection
The schedule stores time-in/time-out for each day of the week (mondayIn, mondayOut, tuesdayIn, etc.). Days where both time-in and time-out are null are treated as rest days. For example, a standard Monday-Friday schedule has saturdayIn: null and sundayIn: null, making Saturday and Sunday rest days.
Time Snap to Schedule
When an employee clocks in, the system snaps the recorded time to the scheduled time-in/time-out. This prevents minor clock variations from causing false late/undertime records.
Grace Period
The grace period determines how many minutes after the scheduled time-in an employee can arrive without being marked late.
- Company default: Set in company settings (
gracePeriodMinutes, default: 0) - Per-schedule override: Each
WorkSchedulehas an optionalgracePeriodMinutesfield that overrides the company default
Example: If the schedule is 8:00 AM with a 15-minute grace period, an employee arriving at 8:14 AM is not late. An employee arriving at 8:16 AM is late by 16 minutes.
Recording Attendance
Manual Entry
HR staff can manually enter attendance records through the admin attendance page. This is used for:
- Correcting missed clock-ins/outs
- Entering records from manual timesheets
- Recording attendance for locations without biometric devices
Bulk Upload
For companies using external time-keeping systems (biometric scanners, access cards), attendance records can be bulk uploaded via CSV import. The CSV should include employee number, date, time-in, and time-out.
Employee Self-Service
Employees can view their attendance records through ESS → Attendance (/ess/attendance). The ESS portal shows:
- Monthly attendance summary
- Daily time records with late/undertime/absent flags
- Leave days marked in the calendar
Absence Detection
TalinoHR includes an automatic absence detector that identifies employees who should have worked but have no attendance record.
How It Works
The absence detector (lib/attendance/absence-detector.ts) runs for a date range and:
- Fetches all active employees with assigned work schedules
- For each employee, checks each date in the range
- Determines if the date is a workday (has scheduled hours for that day of the week)
- Skips holidays and rest days
- If no attendance record exists for a workday, creates one with
isAbsent: trueandabsenceReason: "AWOL"(Absent Without Leave)
What Gets Skipped
- Rest days - Days without scheduled hours per the work schedule
- Holidays - Dates matching company holidays (national or location-specific)
- Existing records - Days that already have an attendance record (including leave days)
- Separated employees - Employees with status RESIGNED, TERMINATED, or RETIRED
- Employees without schedules - Employees not assigned to any work schedule
Running Absence Detection
Absence detection can be triggered for a specific date range. It is typically run after the pay period closes to ensure all absences are captured before payroll computation.
Overtime Management
Filing Overtime
Employees file overtime requests through ESS → Overtime (/ess/overtime):
- Select the date of overtime work
- Enter the number of overtime hours
- Provide a reason/description
- Submit the application
The system checks for duplicate overtime applications on the same date to prevent double-filing.
Admin Overtime
HR/managers can view and manage overtime applications from the admin overtime page at Overtime (/overtime). The admin view shows:
- Employee name and number
- Date, hours, and reason
- Current status (PENDING, APPROVED, REJECTED)
Overtime Approval
Overtime applications follow the status flow:
PENDING -> APPROVED or REJECTED
When an overtime application is approved:
- The
overtimeMinutesfield on the corresponding attendance record is updated (for display purposes) - The payroll engine reads approved
OvertimeApplicationrecords directly when computing overtime pay
When rejected:
- The rejection reason is stored in the
remarksfield - The application remains in the system for audit purposes
Overtime Pay Computation
The payroll engine computes overtime pay using DOLE-mandated multipliers based on the day type:
| Day Type | OT Multiplier |
|---|---|
| Ordinary day | 125% of hourly rate |
| Rest day | 130% of hourly rate |
| Special non-working holiday | 130% of hourly rate |
| Special non-working holiday + rest day | 150% of hourly rate |
| Regular holiday | 200% of hourly rate |
| Regular holiday + rest day | 260% of hourly rate |
Overtime Rounding
Overtime hours are rounded based on the company's overtimeRoundingMinutes setting (default: 15 minutes). For example, with 15-minute rounding, 1 hour and 22 minutes of overtime is rounded to 1 hour and 15 minutes.
Night Differential
Night shift differential (NSD) applies to work performed between 10:00 PM and 6:00 AM.
NSD Rate
The base NSD rate is 10% of the hourly rate. However, NSD stacks on the day-type multiplier:
- Ordinary day NSD: hourlyRate x 10%
- Rest day NSD: hourlyRate x 130% x 10%
- Regular holiday NSD: hourlyRate x 200% x 10%
This means an employee working a night shift on a regular holiday earns NSD based on the holiday rate, not just the ordinary rate.
NSD Computation
The payroll engine automatically detects night hours from attendance records (hours between 22:00 and 06:00) and computes NSD pay based on the applicable day-type multiplier for that date.
Payroll Integration
Attendance Deductions
During payroll computation (Steps 3-4 of the engine), attendance records drive deductions:
- Late minutes: Converted to an hourly-rate deduction
- Undertime minutes: Same as late
- Absent days: Full-day or half-day deduction at the daily rate
- Unpaid leave: Leave on unpaid leave types counted as absent days
Paid Leave Handling
Attendance records marked with isOnLeave: true where the leave type is paid are completely skipped by the payroll engine. No deduction is made.
Payroll Lock
Once a payroll run has been computed for a period, attendance records for that period are locked. This prevents changes to attendance data from creating inconsistencies with the already-computed payroll items.
To make attendance corrections after computation, you must:
- Make the corrections to attendance records
- Recompute the payroll run to recalculate based on updated attendance
Holiday Pay Integration
Attendance records are checked during holiday pay computation:
- The engine determines if an employee worked on a holiday based on whether a time-in exists
- Rest day status is checked from the attendance record's
isRestDayflag - The day-before-holiday rule (Art. 94) checks the nearest preceding workday's attendance to determine holiday pay eligibility
Common Issues
Employee Marked Absent on a Holiday
Ensure the holiday is properly configured in the system for the employee's location. National holidays apply to all locations; local holidays need to be assigned to the specific location.
Grace Period Not Working
Check two things:
- The company's
gracePeriodMinutessetting - The employee's work schedule
gracePeriodMinutesoverride (takes precedence if set)
Overtime Not Reflected in Payroll
The payroll engine reads approved OvertimeApplication records, not the overtimeMinutes field on attendance records. Ensure the overtime application exists and has been approved.
Incorrect Late Minutes
Verify the employee's work schedule time-in setting. Late minutes are computed as the difference between actual time-in and scheduled time-in, minus the applicable grace period.