This guide covers the implementation of Alaska-specific sick leave requirements, vacation accrual tracking, and IRS Form 941 quarterly reporting for your payroll system.
- Accrual Rate: 1 hour of sick leave per 30 hours worked
- Annual Caps:
- 56 hours/year for employers with 15+ employees
- 40 hours/year for employers with <15 employees
- Paystub Display: Shows accrued, used, and year-to-date totals
- Fixed annual hours: Configurable per employee (default 80 hours = 10 days)
- Accrual Method: Pro-rated throughout the year (annual / 26 pay periods)
- Paystub Display: Shows accrued, used, and year-to-date totals
- Automated calculation of federal tax liabilities
- Quarterly summary for IRS filing
- Breakdown of FICA, Medicare, and federal income tax
CRITICAL: Before making any changes, backup your database!
# Using MySQL command line
mysqldump -u your_username -p payroll > payroll_backup_$(date +%Y%m%d).sql
# Or use phpMyAdmin to export the databaseExecute the SQL migration file to update your database schema:
-
Option A - MySQL Command Line:
mysql -u your_username -p payroll < update_alaska_sick_leave.sql -
Option B - phpMyAdmin:
- Open phpMyAdmin
- Select the
payrolldatabase - Click "SQL" tab
- Copy and paste the contents of
update_alaska_sick_leave.sql - Click "Go" to execute
-
Option C - Using the included connection:
- Open your browser
- Navigate to:
http://your-domain/test.php(if available) - Or create a temporary file to run the migration
Check that the following columns were added successfully:
Employee Table:
SELECT
sick_hours_balance,
sick_hours_ytd_used,
sick_hours_ytd_accrued,
vacation_hours_annual,
vacation_hours_balance,
vacation_hours_ytd_used
FROM employee LIMIT 1;History Table:
SELECT
sick_hours_used,
vacation_hours_used,
sick_hours_accrued,
vacation_hours_accrued,
regular_hours,
overtime_hours
FROM history LIMIT 1;Company Settings Table:
SELECT
employee_count_threshold,
sick_leave_cap_large,
sick_leave_cap_small,
current_employee_count
FROM company_settings LIMIT 1;- Login as admin
- Navigate to Company Setup page
- Scroll to Alaska Sick Leave Requirements section
- Configure:
- Current Employee Count: Enter your actual number of employees
- Employee Count Threshold: Leave at 15 (Alaska law requirement)
- Sick Leave Cap (Large): Leave at 56 hours
- Sick Leave Cap (Small): Leave at 40 hours
- Click Save Company Settings
For each employee, you can set their annual vacation hours:
- Go to Edit Employee for each employee
- Look for the Vacation Hours Annual field (should default to 80 hours = 10 days)
- Adjust as needed based on your company policy
- Save changes
When recording staff payments via pay.php:
- Enter Regular Hours Worked (e.g., 80 for bi-weekly)
- Enter Overtime Hours if applicable
- Enter Sick Hours Used (not days anymore - now hours!)
- Enter Vacation Hours Used (new field)
- System automatically calculates:
- Sick leave accrued (1 hour per 30 hours worked)
- Vacation accrued (annual / 26 pay periods)
- Applies the appropriate sick leave cap
- Updates year-to-date totals
Paystubs now include a Leave Balances section showing:
Sick Leave:
- Current Period: Accrued | Used
- Year-to-Date: Accrued | Used
- Current Balance: XX.XX hours
Vacation:
- Current Period: Accrued | Used
- Year-to-Date: Accrued | Used
- Current Balance: XX.XX hours
To generate quarterly tax reports:
- Navigate to IRS Form 941 from the dashboard
- Select the Year and Quarter
- Click Load Quarter
- Review the calculated values:
- Total wages for the quarter
- Federal income tax withheld
- Social Security taxes (employee + employer)
- Medicare taxes (employee + employer)
- Additional Medicare tax (if applicable)
- Use the Print button to print or save as PDF
- File electronically at www.irs.gov/efile
How it works:
- Employee works 80 hours → Accrues 80/30 = 2.67 hours of sick leave
- Employee works 40 hours → Accrues 40/30 = 1.33 hours of sick leave
- System automatically enforces annual caps (56 or 40 hours depending on company size)
- Year-to-date counters reset automatically on January 1st
Cap Enforcement:
- If an employee has already accrued 56 hours (large employer) in a calendar year, they will not accrue more
- The system checks this automatically during payroll processing
How it works:
- Employee is granted 80 hours annual vacation
- Accrues 80 / 26 = 3.08 hours per bi-weekly pay period
- On January 1st, their balance is reset to the full annual amount
- Used vacation is tracked year-to-date
Customization:
- Each employee can have a different annual vacation amount
- Set this in the employee edit page under "Vacation Hours Annual"
The system automatically resets on January 1st:
- Sick leave YTD used → 0
- Sick leave YTD accrued → 0
- Vacation YTD used → 0
- Vacation YTD accrued → 0
- Vacation balance → Resets to annual amount
Sick leave balance carries over (Alaska law requires this)
Solution: The migration didn't run properly. Try:
- Check the MySQL error log
- Run each ALTER TABLE statement individually
- Verify you have ALTER privileges on the database
Solution:
- Check that
company_settingshas values forcurrent_employee_countand caps - Verify the employee has hours recorded in
regular_hoursfield - Check that the employee hasn't hit their annual cap
Solution:
- The history record needs the new columns (
sick_hours_accrued,vacation_hours_accrued, etc.) - Process a new payroll to see the updated paystub format
- Old paystubs will show 0.00 for new fields (this is expected)
Solution:
- Make sure you selected the correct year and quarter
- Verify there are payment records in the
historytable for that quarter - Check that the payment dates fall within the quarter date range
update_alaska_sick_leave.sql- Database migration scriptirs_form_941.php- IRS Form 941 quarterly report generatorIMPLEMENTATION_GUIDE.md- This file
paystaff.php- Updated payroll processing logicpay.php- Added vacation hours field, updated labelspaystub.php- Added leave balances sectioncompany_setup.php- Added Alaska sick leave configuration
✅ Alaska Sick Leave Law (AS 23.10.500):
- ✅ Accrues 1 hour per 30 hours worked
- ✅ Caps at 56 hours for 15+ employees
- ✅ Caps at 40 hours for <15 employees
- ✅ Displays on paystub (accrued, used, YTD)
✅ Vacation Tracking:
- ✅ Configurable annual hours per employee
- ✅ Accrues proportionally throughout year
- ✅ Displays on paystub (accrued, used, YTD)
✅ IRS Quarterly Reporting:
- ✅ Form 941 calculations
- ✅ Federal income tax withholding
- ✅ FICA and Medicare calculations
- ✅ Quarterly summary by month
If you encounter issues or have questions:
- Review this implementation guide
- Check the troubleshooting section
- Verify database migration completed successfully
- Test with a single employee first before rolling out company-wide
Before going live:
- Create a test employee with known hours
- Process a test payroll and verify:
- Sick leave accrues correctly (hours worked / 30)
- Vacation accrues correctly (annual / 26)
- Caps are enforced
- Paystub shows all information
- Generate an IRS Form 941 for a past quarter to verify calculations
- Compare with your previous manual calculations
Alaska Statutes 23.10.500 - Earned Sick Leave
Key provisions:
- Employees accrue 1 hour of sick leave for every 30 hours worked
- Accrual begins at the start of employment or January 1, 2019 (whichever is later)
- Employers may cap annual accrual at:
- 56 hours for employers with 15 or more employees
- 40 hours for employers with fewer than 15 employees
- Sick leave must be shown on paystubs
- Unused sick leave carries over to the following year (subject to caps)
For full text: https://www.akleg.gov/basis/statutes.asp#23.10.500
After successful implementation:
- ✅ Train admin staff on new payroll entry process
- ✅ Notify employees about paystub changes
- ✅ Set up quarterly reminders for IRS Form 941 filing
- ✅ Review and adjust vacation policies as needed
- ✅ Monitor sick leave accruals to ensure compliance
Document Version: 1.0 Last Updated: December 8, 2025 Implementation Date: _______________