Part-time and custom work schedules
Working days and hours per person, per-date leave counting, hours-based accrual proration and mid-year balance correction
A work schedule is which weekdays someone works and how many hours, effective from a date — the thing SquadBear checks a leave request's dates against, one by one.
What a schedule is
A schedule is a slice: a set of working weekdays, and a weekly-hours total (or an explicit hours-per-day map, if days aren't even), effective from a given date. Schedules are a history, not a single row — changing someone's days doesn't erase the old ones, it adds a new slice that takes over from its effective date. Anyone can see their own (or a managed employee's) current schedule and its full history on the Schedule tab of their profile; only an admin can change it, from the same tab.
How it changes leave counting
A request isn't checked against one schedule for its whole span — each date in the range resolves the slice that was in force ON that date, so a request that crosses a schedule change counts the days before and after correctly. A date only counts against the leave policy if it falls on one of that slice's working weekdays (and isn't a holiday, if the policy excludes those).
How accrual is prorated
Accrual is prorated by weekly hours, straight from the schedule: a policy that grants 26 days a year at a full 40-hour week grants proportionally less at 32 hours. Both kinds of part-timer fall out of the same rule. A genuinely short week (fewer working days) and a reduced-hours arrangement (same days, shorter hours) each lower the weekly hours, so each lowers the grant, with no separate ratio to maintain. The FTE ratio field on the schedule form is a deprecated legacy input; it no longer drives accrual and can be left at 1.
Changing a schedule recomputes the current year's already-issued grants on the spot: each already-granted policy is retargeted against the new weekly hours, month by month, and the difference posts as a correction to the ledger, visible as a normal entry rather than a silent rewrite. A correction never claws back time already taken or reserved; earlier years aren't touched (fix those with a manual balance adjustment instead).
Expected timesheet hours
A day's expected hours come straight from the schedule in force that day: the per-day hours map if one is set, otherwise the weekly total split evenly across the working days. A day that isn't a working day expects 0 hours — nothing to log, nothing to fall short of.
Worked example
Aleksandra already has this year's Vacation grant from joining 1 March (21.67 days under the default 26-day policy). She now drops to a 4-day week, Monday to Thursday at 8 hours a day, from 1 September, taking her from a 40-hour week to a 32-hour one.
A week-long request submitted for after that date charges only 4 days, not 5: Friday is no longer a working day, so it's excluded from the count the same way a weekend would be.
Her balance also moves: the accrual engine reweights the year by weekly hours, full 40-hour weeks through August and 32-hour weeks from September (32 hours is 0.8 of 40, so the September-to-December months prorate to 80%), landing on a lower target than her original grant. The difference posts automatically as a ledger-visible correction the moment the new schedule is saved.