Staff Contract Types
| Contract Type | Pay Structure | Use Case | Example |
|---|---|---|---|
| Monthly Fixed | Fixed salary + attendance bonuses | Full-time teachers, admin staff | $2,000/month |
| Hourly | Rate × hours worked | Part-time staff, substitutes | $15/hour |
| Per Lecture | Rate × lectures delivered | Visiting lecturers, coaches | $50/lecture |
Attendance Bonus/Deduction Logic
Monthly Fixed Staff:
text
Perfect Attendance (0 absences): Base + 1 extra day's salary
1 Absence: Full base salary (no deduction)
2+ Absences: Base - (absent_days - 1) × per_day_rate
Hourly Staff:
text
Pay = hours_worked × hourly_rate
Per Lecture Staff:
text
Pay = lectures_delivered × lecture_rate
Multi-Campus Payroll Splitting
For Admin/Roving staff working across campuses:
php
// Example: Staff works 60% at Campus A, 40% at Campus B
Campus A pays: net_pay × 0.60
Central budget covers: net_pay × 0.40
Staff Roles
| Role Code | Description | Access Level |
|---|---|---|
teacher_permanent | Full-time teacher | Single campus, gradebook, homework |
teacher_visiting | Part-time/hourly | Attendance-based pay, limited access |
admin_campus | Campus administrator | Single campus management |
admin_roving | Multi-campus administrator | Assigned campuses with percentage split |
support_staff | Non-teaching staff | Attendance tracking, no gradebook |
Payroll Generation Flow
Trigger: Auto-generated monthly or manually via admin
Staff Selection: All active staff at campus (employment_status = 'active')
Attendance Calculation: Pulls from
institutionkit_staff_attendanceDeductions: Auto-calculates absent day deductions
Earnings: Base salary + bonuses + overtime
Net Pay: Earnings - Deductions
Status: Created as 'pending', requires approval
Salary Components System
Staff can have custom earnings and deductions:
json
// earnings_json example
[
{"type": "housing_allowance", "label": "Housing", "amount": 500.00, "is_taxable": false},
{"type": "transport_allowance", "label": "Transport", "amount": 200.00, "is_taxable": false}
]
// deductions_json example
[
{"type": "loan_repayment", "label": "Loan EMI", "amount": 300.00},
{"type": "insurance", "label": "Health Insurance", "amount": 50.00}
]

Comments are closed.