Available Reports
This guide covers all report types available in Shyfts, including their purpose, metrics, and use cases for workforce management analytics.
Overview
Report Categories
Shyfts provides 8 comprehensive report types covering all aspects of workforce management:
| Report Type | Icon | Purpose |
|---|---|---|
| Staff Performance | TrendingUp | Individual staff productivity metrics |
| Scheduling Analytics | Calendar | Schedule efficiency and coverage analysis |
| Attendance Summary | Clock | Attendance rates and patterns |
| Hours Tracking | Clock | Worked hours and overtime analysis |
| Leave Analysis | Calendar | Leave usage and patterns |
| Skills Matrix | Users | Staff skills and certifications |
| Cost Analysis | DollarSign | Labour costs and budget tracking |
| Compliance Report | ShieldCheck | Working time regulations compliance |
Report Type Definitions
// Source: src/types/reporting.ts:16-25
export type ReportType =
| 'STAFF_PERFORMANCE'
| 'SCHEDULING_ANALYTICS'
| 'ATTENDANCE_SUMMARY'
| 'HOURS_TRACKING'
| 'LEAVE_ANALYSIS'
| 'SKILLS_MATRIX'
| 'COST_ANALYSIS'
| 'COMPLIANCE_REPORT'
Staff Performance Report
Purpose
Analyse individual staff productivity, attendance patterns, and overall performance metrics.
Metrics Included
// Source: src/types/reporting.ts:55-90
interface StaffPerformanceData {
staff_id: string
staff_name: string
role: string
department: string
performance_metrics: {
attendance_rate: number // Percentage of scheduled shifts worked
punctuality_rate: number // On-time arrival percentage
shifts_completed: number // Total shifts in period
shifts_missed: number // Unattended shifts
average_shift_rating: number // Manager ratings (1-5)
}
productivity_metrics: {
hours_worked: number // Total hours
overtime_hours: number // Hours above threshold
efficiency_score: number // Calculated efficiency
}
time_tracking: {
total_hours: number
regular_hours: number
overtime_hours: number
break_hours: number
}
leave_summary: {
days_taken: number
days_remaining: number
pending_requests: number
}
}
Use Cases
| Scenario | Benefit |
|---|---|
| Performance reviews | Data-driven evaluation |
| Bonus calculations | Fair productivity-based rewards |
| Training needs | Identify improvement areas |
| Resource planning | Understand capacity |
Sample Output
| Staff Name | Attendance | Punctuality | Hours Worked | Overtime |
|---|---|---|---|---|
| Sarah Johnson | 98% | 95% | 168h | 8h |
| James Wilson | 94% | 88% | 156h | 4h |
| Emma Brown | 100% | 97% | 172h | 12h |
Scheduling Analytics Report
Purpose
Analyse schedule efficiency, coverage rates, and resource utilisation across the organisation.
Metrics Included
// Source: src/types/reporting.ts:92-140
interface SchedulingAnalytics {
period: DateRange
coverage_metrics: {
total_shifts_required: number // Shifts needed
total_shifts_filled: number // Shifts assigned
coverage_percentage: number // Fill rate
unfilled_shifts: number // Gaps in schedule
overstaffed_periods: number // Excess staff
}
efficiency_metrics: {
staff_utilization: number // % of available hours used
average_hours_per_staff: number // Hours per person
scheduling_conflicts: number // Overlapping assignments
last_minute_changes: number // Changes within 24 hours
}
cost_metrics: {
total_labor_cost: number // Total wages
overtime_cost: number // OT premium costs
cost_per_shift: number // Average shift cost
budget_variance: number // Actual vs planned
}
room_utilization: {
room_id: string
room_name: string
utilization_rate: number
peak_hours: string[]
}[]
}
Key Indicators
| Metric | Good | Warning | Critical |
|---|---|---|---|
| Coverage Rate | ≥95% | 85-94% | <85% |
| Staff Utilisation | 80-90% | 70-79% | <70% or >95% |
| Scheduling Conflicts | 0 | 1-5 | >5 |
| Budget Variance | ±5% | ±10% | >±10% |
Visualisations
- Coverage trend chart (daily/weekly)
- Staff utilisation heatmap
- Room utilisation by time of day
- Cost breakdown pie chart
Attendance Summary Report
Purpose
Track attendance patterns, identify trends, and monitor staff reliability across the organisation.
Metrics Included
// Source: src/types/reporting.ts:142-175
interface AttendanceData {
staff_id: string
staff_name: string
role: string
attendance_metrics: {
attendance_rate: number // % of shifts attended
punctuality_rate: number // On-time percentage
early_departures: number // Left before end
late_arrivals: number // Arrived after start
no_shows: number // Didn't attend
}
time_tracking: {
scheduled_hours: number // Expected hours
actual_hours: number // Hours worked
total_hours: number // Total in period
overtime_hours: number // Above threshold
variance: number // Difference
}
patterns: {
best_days: string[] // Most reliable days
worst_days: string[] // Least reliable days
average_start_variance: number // Minutes early/late
}
}
Attendance Patterns
The system tracks attendance patterns to identify:
- Day-of-week trends - Which days have lowest attendance
- Time-of-day patterns - Peak absence hours
- Seasonal variations - Monthly/quarterly trends
- Individual patterns - Staff-specific attendance issues
Bradford Factor
// Bradford Factor calculation for absence patterns
// Source: src/types/database.types.ts:17-29
interface AbsencePattern {
absence_count: number // Number of absence instances
absence_days: number // Total days absent
bradford_factor: number // S² × D calculation
month: number
year: number
}
| Bradford Score | Risk Level | Action |
|---|---|---|
| 0-50 | Low | Monitor |
| 51-124 | Medium | Review |
| 125-399 | High | Discuss |
| 400+ | Critical | Formal process |
Hours Tracking Report
Purpose
Analyse hours worked, overtime patterns, and time efficiency across staff members.
Metrics Included
// Source: src/types/reporting.ts:210-250
interface HoursTrackingData {
staff_id: string
staff_name: string
role: string
period_summary: {
total_worked_hours: number // All hours
regular_hours: number // Standard hours
overtime_hours: number // Above threshold
break_hours: number // Time on breaks
net_hours: number // Worked minus breaks
efficiency_rate: number // Net/Scheduled %
}
daily_breakdown: {
date: string
scheduled_hours: number
actual_hours: number
overtime: number
breaks: number
}[]
weekly_totals: {
week_number: number
total_hours: number
overtime_hours: number
average_daily: number
}[]
}
Overtime Analysis
| Overtime Level | Description | Flag |
|---|---|---|
| None | 0 hours | Green |
| Moderate | 1-10 hours | Yellow |
| High | 11-20 hours | Orange |
| Excessive | >20 hours | Red |
Efficiency Metrics
// Efficiency calculation
efficiency_rate = (net_hours / scheduled_hours) * 100
// Target ranges
const efficiencyTargets = {
excellent: { min: 95, max: 100 },
good: { min: 85, max: 94 },
acceptable: { min: 75, max: 84 },
poor: { min: 0, max: 74 }
}
Leave Analysis Report
Purpose
Analyse leave usage patterns, balance utilisation, and upcoming leave impact on scheduling.
Metrics Included
// Source: src/types/reporting.ts:252-290
interface LeaveAnalysisData {
staff_id: string
staff_name: string
role: string
leave_summary: {
total_entitlement: number // Annual allocation
used_days: number // Days taken
remaining_days: number // Days left
pending_requests: number // Awaiting approval
approved_leave_days: number // Approved in period
rejected_requests: number // Declined requests
}
leave_by_type: {
leave_type: string
days_used: number
days_remaining: number
}[]
upcoming_leave: {
start_date: string
end_date: string
days: number
type: string
}[]
patterns: {
peak_months: string[] // Most leave taken
average_request_lead_time: number // Days in advance
}
}
Leave Type Breakdown
| Leave Type | Colour | Typical Allocation |
|---|---|---|
| Annual Leave | #3B82F6 (Blue) | 25-28 days |
| Sick Leave | #EF4444 (Red) | 10 days |
| Personal Leave | #8B5CF6 (Purple) | 3-5 days |
| Compassionate | #EC4899 (Pink) | As needed |
| Study Leave | #06B6D4 (Cyan) | Policy-based |
Impact Analysis
The report includes leave impact assessment:
- Coverage gaps - Periods with potential understaffing
- Approval recommendations - Based on team coverage
- Carry-over projections - Unused leave forecasts
Skills Matrix Report
Purpose
Map staff skills, certifications, and identify training gaps across the organisation.
Metrics Included
// Source: src/types/reporting.ts:292-330
interface SkillsMatrixData {
skills_overview: {
total_skills: number // Skills tracked
certified_skills: number // With valid certs
expired_certifications: number // Needs renewal
skills_gaps: SkillGap[] // Missing skills
}
staff_skills: {
staff_id: string
staff_name: string
skills: {
skill_name: string
proficiency_level: 'basic' | 'intermediate' | 'advanced' | 'expert'
certified: boolean
certification_expiry: string | null
last_assessed: string
}[]
training_recommendations: string[]
}[]
skill_distribution: {
skill_name: string
staff_count: number
coverage_percentage: number
}[]
}
Proficiency Levels
| Level | Description | Requirements |
|---|---|---|
| Basic | Foundational knowledge | Training complete |
| Intermediate | Working knowledge | 6+ months experience |
| Advanced | Expert capability | 2+ years + certification |
| Expert | Master level | 5+ years + advanced cert |
Certification Tracking
- Expiring soon (within 30 days)
- Expired (requires immediate action)
- Valid (current certification)
- Not required (skill doesn't need cert)
Cost Analysis Report
Purpose
Analyse labour costs, overtime expenditure, and budget performance across the organisation.
Metrics Included
// Source: src/types/reporting.ts:332-380
interface CostAnalysisData {
overview: {
total_labor_cost: number // All wages
regular_cost: number // Standard pay
overtime_cost: number // OT premiums
benefits_cost: number // Additional costs
average_cost_per_hour: number // £/hour
budget_total: number // Planned budget
budget_variance: number // Actual vs planned
}
staff_costs: {
staff_id: string
staff_name: string
role: string
hourly_rate: number
hours_worked: number
regular_cost: number
overtime_cost: number
total_cost: number
}[]
department_breakdown: {
department: string
total_cost: number
staff_count: number
average_cost: number
}[]
trend_data: {
period: string
cost: number
overtime_percentage: number
}[]
}
Cost Metrics Dashboard
// Dashboard display in ReportingDashboard.tsx:946-968
<div className="grid grid-cols-1 md:grid-cols-3 gap-6">
<div className="text-center">
<div className="text-3xl font-bold text-accent-coral">
£{costData.overview.total_labor_cost.toFixed(0)}
</div>
<div className="text-secondary-text">Total Labor Cost</div>
</div>
<div className="text-center">
<div className="text-3xl font-bold text-accent-coral">
£{costData.overview.overtime_cost.toFixed(0)}
</div>
<div className="text-secondary-text">Overtime Cost</div>
</div>
<div className="text-center">
<div className="text-3xl font-bold text-accent-coral">
£{costData.overview.average_cost_per_hour.toFixed(2)}
</div>
<div className="text-secondary-text">Avg Cost / Hour</div>
</div>
</div>
Budget Variance Analysis
| Variance | Status | Action |
|---|---|---|
| ≤-10% | Under budget | Review allocation |
| -10% to +5% | On target | Continue monitoring |
| +5% to +10% | Over budget | Investigate causes |
| >+10% | Critical | Immediate review |
Compliance Report
Purpose
Monitor compliance with working time regulations, rest periods, and organisational policies.
Metrics Included
// Source: src/types/reporting.ts:382-414
interface ComplianceReportData {
overview: {
compliance_rate: number // Overall %
total_violations: number // All violations
critical_violations: number // Serious breaches
warnings: number // Minor issues
last_audit_date: string
}
working_time_compliance: {
max_weekly_hours_violations: number // >48 hours
break_violations: number // Missed breaks
rest_period_violations: number // <11hr rest
consecutive_days_violations: number // >6 days
}
policy_compliance: {
policy_name: string
compliance_rate: number
violations: {
staff_id: string
staff_name: string
violation_type: string
date: string
details: string
}[]
}[]
recommendations: string[]
}
UK Working Time Regulations
| Regulation | Limit | Monitored |
|---|---|---|
| Weekly Hours | ≤48 hours average | ✅ |
| Daily Rest | ≥11 hours between shifts | ✅ |
| Weekly Rest | ≥24 hours per week | ✅ |
| Breaks | 20 min per 6+ hour shift | ✅ |
| Consecutive Days | ≤6 days without rest | ✅ |
Violation Severity
| Level | Description | Example |
|---|---|---|
| Critical | Legal breach | >60 hours/week |
| High | Policy violation | Missed rest period |
| Medium | Pattern concern | Repeated minor issues |
| Low | Minor deviation | Single break missed |
Report Access & Permissions
Role-Based Access
// Source: src/app/api/reports/run/route.ts:144-152
const role = getAuthRole(user)
if (role !== 'SYSTEM_ADMIN' && role !== 'COMPANY_MANAGER') {
return ApiResponses.error(
new DatabaseError('Reporting access requires company manager or system admin role', 403, 'FORBIDDEN'),
403
)
}
| Role | Access Level |
|---|---|
| System Admin | All reports, all companies |
| Company Manager | All reports, own company only |
| Staff | No report access |
Related Documentation
- Generating Reports - How to run reports
- Exporting Data - Export to PDF/CSV/Excel
- Time Tracking Reports - Detailed time analytics
Source Files:
src/types/reporting.ts- Complete report type definitionssrc/components/reporting/ReportingDashboard.tsx- Dashboard componentsrc/app/api/reports/run/route.ts- Report execution APIsrc/services/reportingService.ts- Report generation service