/{wsId}/users/tutoring. It turns
two existing signals — attendance deficits and flagged group feedback — into
scheduled make-up sessions, then tracks attendance and exports the result for
payroll.
Surfaces
- Schedule lists every session for a date-range preset (upcoming, today,
next 7 days, this month, past, all) and can be narrowed by status, group,
learner, teacher, and reason. Filters drive both the table and the export.
Forward-looking presets request
sortOrder=ascso the nearest session is first;pastandallkeep the API default of newest-first. - Needs support is the queue of learners with an absence deficit
(
ABSENT_RECOVERY), arequire_attentionfeedback (WEAK_SUPPORT), or both. Scheduling from a queue row prefills the session form with the learner, the group, the reason, and one slot per missing session. - Headline counts run as bounded
count: exactqueries, so they stay correct on workspaces with more sessions than one page.
Enablement
Tutoring is gated by theENABLE_TUTORING workspace config:
A disabled workspace renders an enable screen rather than a 404. Members with
manage_workspace_settings get an Enable tutoring button that writes
ENABLE_TUTORING=true through
PUT /api/v1/workspaces/{wsId}/settings/ENABLE_TUTORING; everyone else is told
to ask an admin. Reading the toggle only needs view_user_groups.
Tutoring shares this gate with the other Contacts modules — see
Contacts module availability for the
full set of toggles and states.
The page previously called
notFound() for personal workspaces, so the
sidebar link 404’d even though the tutoring APIs normalize personal into a
real workspace id. Personal workspaces now opt in explicitly instead.Permissions
view_user_groups— open tutoring and read sessions, the queue, and exports.update_user_groups_scores— schedule sessions, mark attendance, and generate parent messages.manage_workspace_settings— enable or disable the module.
Scheduling rules
One create request can carry up to 50 slots. Overlaps are rejected twice: in the form (the offending rows are highlighted before submit) and again inPOST /api/v1/workspaces/{wsId}/tutoring/sessions against both the other
incoming slots and the sessions already stored. A teacher conflict needs the
same teacher on both slots; a learner conflict needs only the same learner.
Teachers are the managers of the selected group. Choosing a group with exactly
one manager assigns that teacher to every slot.
Exports
Detailed (per session) and payroll (per teacher, completed sessions and total minutes) exports are available as CSV and XLSX. Exports use the active filters, including the date range, and are generated server-side in pages of 1,000 rows.Troubleshooting
The sidebar link 404s
Confirm the caller resolves a workspace profile at all. A missingworkspace_user_linked_users row now renders the Unavailable screen; a
still-hard 404 means WorkspaceWrapper could not resolve the workspace itself,
which points at the app session rather than at tutoring.
The queue is empty but learners are behind
The queue reads absence deficits anduser_feedbacks.require_attention. Check
that group attendance is being recorded and that feedback is flagged.