Time Off Triage
{{ login.title }}
{{ login.subtitle }}
{{ login.notice }}
{{ login.error }}
If you were expecting access, the invitation may have gone to a different address.
{{ login.footer }}

{{ pageTitle }}

Classification prompt
Sent to the agent with every 7shifts comment. The agent returns one Reason from the form; whether it is protected is decided by policy.js, not here.
Type
The employee’s election, recorded in 7shifts
{{ pt.name }} {{ pt.stat }}
{{ pt.detail }}
{{ pt.rule }}
Reason
Editable — this is what the agent reads. The Protected tag is fixed by policy.js and cannot be tuned here.
{{ pr.name }} {{ pr.tag }} {{ pr.stat }}
Definitions seeded from Chef Driven’s time off request form (NYC Earned Safe and Sick Time Act). Editing them changes how the agent classifies; it cannot change whether a reason is protected.
Weekly report
The leave report is generated and emailed on a schedule. Same columns and colour coding as the manual export.
{{ rc.email }}
{{ sched.next }}
Users and permissions
Access is granted per location. A user only sees requests from the locations they hold.
{{ users.count }}
{{ u.initials }}
{{ u.email }} {{ u.selfLabel }} {{ u.statusLabel }}
{{ u.summary }}
Locations
{{ users.accessNote }}
Applies to the next batch pulled from 7shifts. Rows already triaged keep their classification.
Location
Loading requests from 7shifts…
Pulling 14 companies — this takes a few seconds.
Approved
{{ dash.statApproved }}
{{ dash.statApprovedNote }}
Pending
{{ dash.statPending }}
{{ dash.statPendingNote }}
{{ dash.chartTitle }}
{{ dash.chartNote }}
{{ b.name }}
{{ b.value }}
{{ dash.typeTitle }}
{{ dash.typeNote }}
{{ ty.name }}
{{ ty.value }}
{{ ty.share }}
{{ dash.ptoTitle }}
{{ dash.ptoNote }}
{{ pb.name }}
{{ pb.value }}
{{ pb.share }}
{{ dash.waitTitle }}
{{ dash.waitNote }}
{{ t.label }}
{{ w.name }}
{{ w.n }}
{{ w.value }}
{{ w.spread }}
median middle half full range
7shifts records no approval timestamp. Wait times for requests still pending are exact; for resolved ones the figure uses the record’s last-modified time, so it is an upper bound.
{{ countLabel }}
{{ queueNotice }}
{{ classifyNotice }}
“{{ row.comment }}”
{{ row.dates }}
{{ row.hours }} h
{{ row.submitted }} {{ row.location }} {{ row.typeShort }} {{ row.sevenLabel }}
{{ row.reasonShort }}
{{ row.banner }}
Agent reasoning
{{ row.reasoning }}
{{ row.note }}
{{ row.location }} · submitted {{ row.submitted }}
{{ pager.label }}
Agent confidence — {{ tip.title }} {{ tip.body }}
Leave report
{{ report.scope }}
Period by leave start date
Location Employee ID Employee Dates off Submitted 7shifts status Type of leave Comment
{{ rr.location }} {{ rr.empId }} {{ rr.name }} {{ rr.datesOff }} {{ rr.submitted }} {{ rr.seven }} {{ rr.leave }} {{ rr.comment }}
No rows match the current filter.
{{ report.summary }}
Push to Paylocity — preview
Exact field writes. Paylocity's document API is read-only, so values go to custom fields on the employee record. Nothing is sent until you confirm.
{{ p.text }}
Cannot be matched — resolve by hand
{{ push.unmatchedText }}
No employee_id on the 7shifts user, so there is no key to join on. Backfill it in 7shifts or match the Paylocity record by hand. These rows stay in the queue.
Nothing approved yet. Approve rows in the queue first.
{{ push.summary }}
Reclassify — {{ reclass.name }}
“{{ reclass.comment }}”
Agent said: {{ reclass.agentCategory }}
Request more info — {{ info.name }}
Drafted message, sent from this tool rather than through 7shifts.
{{ toast }}