Attendance Human Resources

Shifts & Schedules

Understanding your work schedule, shift assignments, and viewing team rosters.

Shifts & Schedules

Shifts & Schedules

Understanding your work schedule, shift assignments, and viewing team rosters.

Quick Access

Role Navigation Route
Employee HR → My Schedules /hr/my-shift-calendar
Manager/HOD HR → Shift Calendar /hr/shift-drag-drop-calendar
HR Admin HR → Shift Schedule Templates /hr/shift-schedule-templates

For Employees

Viewing Your Schedule

  1. Go to HR → My Schedules (/hr/my-shift-calendar)
  2. View your current week's schedule:
    • Assigned shifts per day
    • Start and end times
    • Off days
    • Leave days

[Screenshot: my-shift-calendar]

Understanding Your Shift

Each shift display shows:

Element Description
Shift Name e.g., "Morning Shift", "Night Shift"
Time Start and end times (e.g., 09:00 - 18:00)
Break Scheduled break duration
Off Day Marked differently (usually grayed out)
Leave Shows approved leave type

Shift Types

Type Description
Regular Standard working hours
Split Two work periods with long break
Flexi Flexible start/end within range
Off Scheduled rest day

Viewing Leave Balance

Your schedule view may also display:

  • Remaining annual leave days
  • Other leave type balances
  • Upcoming public holidays

For Managers/HOD

Managing Team Schedules

  1. Go to HR → Shift Calendar (/hr/shift-drag-drop-calendar)
  2. Select your department
  3. View the weekly/monthly roster

[Screenshot: shift-drag-drop-calendar]

Drag-and-Drop Scheduling

To change an employee's shift:

  1. Click and hold the employee's shift block
  2. Drag to the desired date
  3. Drop to assign the new shift
  4. Confirm the change

Viewing Staff Strength

The calendar shows:

  • Number of staff scheduled per shift
  • Minimum staffing requirements
  • Under-staffed warnings (if configured)

[Screenshot: staff-strength-indicator]

Schedule Deviations

When actual attendance differs from scheduled:

  • Deviation indicators highlight discrepancies
  • Review reasons for schedule changes
  • Approve or flag for follow-up

For HR Admin

Creating Shift Templates

  1. Go to HR → Shift Schedule Templates (/hr/shift-schedule-templates)
  2. Click + New Template
  3. Configure:
    • Template name
    • Work days (Mon-Sun pattern)
    • Shifts per day
    • Break rules
    • Overtime settings

[Screenshot: shift-template-editor]

Assigning Shifts to Employees

Individual Assignment:

  1. Go to employee profile
  2. Navigate to Shift Schedule section
  3. Assign shift template

Bulk Assignment:

  1. Use the Shift Calendar
  2. Select multiple employees
  3. Apply template to selection

Managing Multiple Locations

For organizations with multiple work locations:

  1. Ensure work locations are configured
  2. Assign location-specific shift templates
  3. Staff can be assigned to location-appropriate shifts

ShiftScheduleTemplate Complete Reference

The ShiftScheduleTemplate entity controls all aspects of shift timing, overtime, breaks, and penalties.

Core Settings

Property Type Description
Name string Display name (e.g., "Morning Shift")
Code string Short identifier (e.g., "AM")
Color string Display color for calendars
IconClass string Icon CSS class
Note string Description or notes
IsActive bool Whether template is usable
IsSystem bool System-managed template
IsOffDay bool Marks as scheduled day off

Shift Timing

Property Type Description
StartsHour int Shift start hour (0-23)
StartsMinute int Shift start minute (0-59)
EndsHour int Shift end hour (0-23)
EndsMinute int Shift end minute (0-59)
WorkingHours decimal Expected working hours
WorkLocationId int Associated work location
DepartmentId int? Associated department

Computed Properties:

  • StartTimeFormatted: "HH:mm" format start time
  • EndTimeFormatted: "HH:mm" format end time
  • FormattedTime: "HH:mm - HH:mm" full range

Clock In/Out Settings

Property Type Description
AllowClockInOutsideLocation bool Allow clock-in from any location
AllowClockOutOutsideLocation bool Allow clock-out from any location
AllowedEarlyClockIn int? Minutes before shift can clock in
MustUsePinnedDevice bool Require designated device
DisallowManualEdit bool Prevent manual timesheet changes
AllowTripTouch bool Enable trip start/end touches

Break Configuration

Property Type Description
BreakIsMandatory bool Force break tracking
MaxBreaks int? Maximum breaks per day
MaxBreakLengthInMinutes int? Maximum break duration
AllowedBreakAfterHour int? Earliest break start hour
AllowedBreakAfterMinute int? Earliest break start minute
DisallowedBreakAfterHour int? Latest break start hour
DisallowedBreakAfterMinute int? Latest break start minute
BreakDeviations list Allowed break time variations

Overtime Settings

Property Type Description
AllowOvertimeBefore bool Count pre-shift work as OT
AllowOvertimeAfter bool Count post-shift work as OT
OvertimeClockInBuffer int? Min minutes before shift for OT
OvertimeClockOutBuffer int? Min minutes after shift for OT
OvertimeBlockMode BlockMode? Floor or Ceiling rounding
OvertimeMinuteBlock int? Block size (15, 30, 60 min)
OvertimeFactor decimal? Pay multiplier (e.g., 1.5)
OvertimeValue decimal? Fixed OT value
OvertimeStrategy enum DailyPayFactor, Fixed, BasicSalaryPayFactor
OvertimeUseScript bool Use custom calculation script
OvertimeScript string Custom C# script for OT
DeductOvertimeIfLate bool Subtract lateness from OT

OvertimeStrategy Options: | Value | Description | |-------|-------------| | DailyPayFactor | OT based on daily wage | | Fixed | Fixed OT rate per hour | | BasicSalaryPayFactor | OT based on basic salary |

Penalty Settings

Property Type Description
ClockInDeductionMode enum How to calculate late penalty
ClockInDeductionRate decimal? Penalty rate for late arrival
ClockOutDeductionMode enum How to calculate early exit penalty
ClockOutDeductionRate decimal? Penalty rate for early departure
BreakDeductionMode enum How to calculate break penalty
BreakDeductionRate decimal? Penalty rate for break excess
PenaltyClockInBuffer int? Grace period for late arrival
PenaltyClockOutBuffer int? Grace period for early departure
PenaltyBreakBuffer int? Grace period for break overrun
PenaltyBlockMode BlockMode? Floor or Ceiling rounding
PenaltyMinuteBlock int? Block size for penalties
ClockInTieredPenalties list Graduated penalty tiers

AttendanceDeductionMode Options: | Value | Description | |-------|-------------| | None | No penalty applied | | FixedPerBlock | Fixed amount per time block | | OneTime | Single flat amount | | Tiered | Graduated by lateness severity | | DailyRate | Proportional to daily wage |

Wage Settings

Property Type Description
Wages list Wage validity periods

ShiftWageValidity Structure: | Property | Type | Description | |----------|------|-------------| | From | DateOnly | Start date | | To | DateOnly? | End date | | Amount | decimal | Wage amount | | Note | string | Notes |

Timezone Settings

Property Type Description
ServerTimezoneOffset double Server timezone offset
OrganizationTimezoneOffset double Organization timezone offset

Work From Home

Property Type Description
WorkFromHome bool Enable WFH for this shift
WorkFromHomePolicy int? WFH policy reference

Template Configuration Examples

Example 1: Standard Office Shift

Name: "7.30AM" (i90042721 - Pilot)

{
  "Name": "7.30AM",
  "Code": "730AM",
  "StartsHour": 7,
  "StartsMinute": 30,
  "EndsHour": 16,
  "EndsMinute": 0,
  "WorkingHours": 7.5,

  "BreakIsMandatory": true,
  "MaxBreakLengthInMinutes": 60,

  "AllowOvertimeBefore": true,
  "AllowOvertimeAfter": true,
  "OvertimeClockOutBuffer": 30,
  "OvertimeBlockMode": "Floor",
  "OvertimeMinuteBlock": 60,
  "OvertimeFactor": 1.5,

  "PenaltyClockInBuffer": 5,
  "ClockInDeductionMode": "DailyRate"
}

Behavior:

  • 07:30 - 16:00 shift (7.5 hours)
  • 60-minute mandatory break
  • OT requires 30+ min after shift
  • OT rounded down to full hours
  • 5-minute grace for late arrival

Example 2: Tiered Penalty Shift

Name: "Morning" (Kaewta - AppStafyCoTh)

{
  "Name": "Morning",
  "StartsHour": 8,
  "StartsMinute": 45,
  "EndsHour": 19,
  "EndsMinute": 45,

  "ClockInDeductionMode": "OneTime",
  "ClockInTieredPenalties": [
    {
      "Name": "Tier 1",
      "StartMinutes": 1,
      "EndMinutes": 15,
      "Rate": 10.00
    },
    {
      "Name": "Tier 2",
      "StartMinutes": 16,
      "EndMinutes": 45,
      "Rate": 30.00
    },
    {
      "Name": "Tier 3",
      "StartMinutes": 46,
      "EndMinutes": null,
      "Rate": 50.00
    }
  ]
}

Behavior:

  • Late 1-15 min: RM 10 penalty
  • Late 16-45 min: RM 30 penalty
  • Late 46+ min: RM 50 penalty

Example 3: Custom OT Script Shift

Name: "Shop 3 - A" (MrPa - AppStafyCoTh)

{
  "Name": "Shop 3 - A",
  "OvertimeUseScript": true,
  "OvertimeScript": "if (ot is null) return null;\nvar minutes = Convert.ToDecimal(Math.Ceiling(ot.Value.TotalMinutes));\nreturn 0m;",

  "BreakDeductionMode": "FixedPerBlock",
  "BreakDeductionRate": 1.0,
  "PenaltyMinuteBlock": 1
}

Behavior:

  • Custom script always returns 0 (no OT paid)
  • Break excess: RM 1.00 per minute

Example 4: Flexible Hours Shift

{
  "Name": "Flexi 9-6",
  "StartsHour": 9,
  "StartsMinute": 0,
  "EndsHour": 18,
  "EndsMinute": 0,
  "WorkingHours": 8,

  "AllowedEarlyClockIn": 60,
  "PenaltyClockInBuffer": 30,
  "PenaltyClockOutBuffer": 30,

  "AllowOvertimeAfter": true,
  "OvertimeClockOutBuffer": 60
}

Behavior:

  • Can clock in up to 60 min early
  • 30-min grace for late/early
  • OT only after 60+ min extra

Example 5: Night Shift

{
  "Name": "Night Shift",
  "StartsHour": 22,
  "StartsMinute": 0,
  "EndsHour": 6,
  "EndsMinute": 0,
  "WorkingHours": 7,

  "AllowOvertimeBefore": false,
  "AllowOvertimeAfter": true,
  "OvertimeClockOutBuffer": 15,
  "OvertimeFactor": 2.0
}

Behavior:

  • 22:00 - 06:00 (crosses midnight)
  • 2.0× OT factor (night premium)
  • No pre-shift OT allowed

TieredPenalty Structure

Property Type Description
Name string Display name
StartMinutes int Tier starts at X minutes late
EndMinutes int? Tier ends at X minutes (null = unlimited)
Rate decimal? Penalty rate for this tier
FixedAmount decimal? Alternative fixed amount

Range Logic:

  • Tier matches if: StartMinutes <= late minutes <= EndMinutes
  • If EndMinutes is null: StartMinutes <= late minutes (no upper limit)

Schedule Views

Calendar Views Available

View Best For
Day Detailed single-day planning
Week Standard weekly roster view
Month Overview and pattern planning

Shared Shift Calendar

For cross-department visibility:

  1. Go to HR → Shared Shift Calendar (/hr/shared-shift-calendar)
  2. View schedules across departments
  3. Useful for coordination and coverage planning

Common Tasks

Request a Schedule Change

  1. Contact your manager or HR
  2. Provide:
    • Requested change dates
    • Preferred shift/time
    • Reason for request
  3. Wait for approval

Schedule changes may require advance notice per company policy.

Swap Shifts with a Colleague

  1. Both employees must agree to the swap
  2. Manager approval is required
  3. HR or Manager makes the change in the system

View Public Holidays

Public holidays are shown on your schedule calendar with special marking:

  • Typically colored differently
  • May show as "Public Holiday" in the shift slot
  • Affects overtime calculations

Tips

  1. Check schedule weekly - Review your upcoming week every Monday to plan ahead
  2. Note pattern changes - If your shift pattern changes, verify with your manager
  3. Plan leave around your schedule - Consider your shift pattern when applying for leave
  4. Understand your template - Know your shift's OT and penalty settings

See Also

An unhandled error has occurred. Reload X

Rejoining the server...

Rejoin failed... trying again in <span id="components-seconds-to-next-attempt"></span> seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please reload the page.