← Back to help
PTO — balances, requests, and policies
PTO in Ceven is built around three tables: policies (the rules), balances (where everyone stands), and requests (proposed time off awaiting approval). The Slack bot reads policies and balances; submitting a request happens in the dashboard so the approval workflow can run cleanly.
The wordings below are examples, not commands. Ceven understands intent and context — say it however feels natural. "Who's our top customer?" and "tell me about the highest-grossing account this quarter" route to the same answer. References to "this month", "last quarter", "recently" are interpreted relative to today. The bot disambiguates when it's unsure rather than guessing.
What you can ask the bot
how much PTO do I have left?— your own balance, by policy (vacation / sick / personal)what's my vacation balance in days?— same data, days instead of hourswhat's Alice's PTO balance?— anyone else's, looked up by namehow much sick leave have I used this year?— accrued YTD vs used YTD
How balances are calculated
Each policy has an accrual_method (per-pay-period, lump-sum, per-hour-worked, tenure-based, or unlimited) and an accrual_rate_hours. A nightly job advances accrued_ytd for each employee under each policy and increments balance_hours accordingly. Approved requests deduct used_ytd + decrement balance.
Submitting a request
- Open the dashboard → HR → PTO → My time off.
- Pick the policy, dates, and reason. The dashboard pre-validates against blackout dates and your balance.
- The PTO Approval Agent runs in the background — auto-approves if under the policy threshold, or routes to your manager.
Policies (admin)
Admins create policies in the dashboard's HR → PTO → Policies tab. Common shapes:
- Vacation — kind=vacation, accrual=per-pay-period, ~6.15h/period (≈ 20 days/year), max balance 200h, paid.
- Sick — kind=sick, accrual=per-pay-period, ~3.08h/period (≈ 10 days/year), max balance 80h, paid.
- Personal — kind=personal, accrual=lump-sum, 24h/year, paid.
- Bereavement / Jury Duty / Parental — typically lump-sum, paid, tenure-gated.
Heads-up: if the bot says "PTO tracking isn't enabled for your org yet" — the policies and balance tables likely haven't been seeded. An admin can run
python -m app.scripts.seed_pto_policies from the backend to bootstrap the standard set.