PTO accrual for a mid-year hire: monthly vs annual (front-loaded, prorated) policies
Line chart of paid-time-off days accrued during 2026 under two kinds of
leave policy: monthly accrual, and an annual grant that is front-loaded and
prorated in the hire year.
What the chart shows
- Days accrued at the last day of each month of 2026 (Jan 31 to Dec 31)
- Employees hired on March 1, 2026 and July 1, 2026, plus one hired on
March 1, 2020 (past the 5-year tenure tier for all of 2026)
- Solid line: monthly accrual. Dashed line: annual grant
- Within the hire year both policies reach the same total by December 31;
the annual grant makes it available from the hire month
Year-end values in data.csv: hired March 1, 2026: 12.5 days (monthly and
annual); hired July 1, 2026: 7.5 days (monthly and annual); hired March 1,
2020: 20 days (monthly and annual). Example: on June 30, 2026 the March hire
has 5 days under monthly accrual and 12.5 days under the annual grant.
Calculation rule
- Months worked = months from max(hire date, January 1) through the as-of month; the hire month counts in full.
- Years of service = days from hire to as-of date / 365; the tier bonus applies once years >= threshold.
- Monthly: accrued = months worked x (rate + tier bonus), capped at the annual cap.
- Annual: accrued = yearly rate x months from the hire month through December / 12 in the hire year (full rate afterwards), 0 before the hire date, capped at the annual cap.
Example policy
Parametric example, not a recommended or statutory policy:
- 15 days a year: 1.25 days a month (monthly) or 15 days granted up front (annual)
- Annual cap 15 days, no tenure tier
- Employee hired in 2020: same policy with a tier of +5 days a year from
5 years of service (5/12 day a month, or 5 days a year), annual cap 20 days
Example policy, not legal advice; state leave laws not encoded.
Data
Generated by the open-source Go package pto
(codeberg.org/tresor2k/tabletemplates-go/pto), using AccruedDays,
EffectiveRate and YearsOfService. No value is typed by hand.
Columns: series, policy, hire_date, tier, as_of,
years_of_service, effective_rate (days a month for monthly, days a year
for annual), accrued_days (days). Floats are written unrounded. Every row was recomputed by an independent
script from the rules above (0 differences).
Links:
Built with D3 v7. Code: MIT.