Documentation

How leave works in SquadBear

Types, policies, accrual and how a request's day count is calculated

This is the model behind every leave request. Configuration (types, policies, accrual rules) is separate from the transaction (a request), so changing next year's carryover rule does not rewrite history.

How the pieces fit together

  • Leave types are the categories a request is filed against - Vacation, Sick leave and Unpaid leave in a new workspace - and carry whether the category is paid.
  • Policies attach the rules to a type: days per year, notice period, the booking increment (the smallest bookable slice - full day, half day, 2 hours, or 1 hour), whether a replacement is required, who approves it.
  • Enrollment is eligibility. Each employee is enrolled in at most one policy per leave type; with no enrollment the category does not apply to them - no accrual, no balance, and a request is refused as not_eligible. Only policies with Automatically enroll new hires pick up new starters.
  • Accrual rules decide how those days land: annual (one grant on 1 January) or monthly (1/12 on the 1st), set per policy at Workspace settings → Leave policies → [policy] → Accrual schedule.
  • Balances track accrued, carried-over, adjusted, used and reserved minutes, per person, per leave type, per year. Available is accrued + carried over + adjusted - used - reserved, rendered in days against each person's own daily norm.
  • Untracked types carry no balance: a type is balance-tracked only when it is paid and its policy accrues more than 0 days a year. Requests against one are checked against the booking rules only. Sick leave defaults to zero accrual with no per-request maximum, Unpaid leave to a 30-day maximum.
  • Requests draw down the matching balance when they are approved, or on submission when the policy auto-approves, and move pending → approved (or rejected). How leave approvals work covers the chain, cancellation and the Request history trail.

How a request's days are counted

Each day in the range is checked against the employee's own work schedule when the policy excludes weekends, so a non-working day drops out the way a weekend does, and against their holiday calendar when it excludes public holidays. Both switches ship on for every seeded policy. A full day off costs exactly that date's scheduled hours; part-time schedules prorate accrual by weekly hours.

Unused time carries into the next year under the policy's carryover mode - Carry everything, the default; Carry nothing; or Carry at most a set number of days. Only a positive balance rolls over.

Worked example: joining mid-year

Aleksandra joins Northlake on 1 March. Marta enrolls her in the Standard vacation policy - annual accrual, 26 days a year, prorated by start month - and the next accrual run posts one lump grant: 26 × 10/12 = 21.67 days, held to the minute (10,400 minutes) so nothing is lost to rounding. Accruals run overnight; Workspace settings → Workspace → General → Run accruals now posts them on demand.

Set to monthly accrual, the same policy grants 1,040 minutes (26 / 12 = 2.17 days) on the 1st of each month - 10 grants from March to December, the same 10,400 minutes, because each grant is a whole number of minutes.