> For the complete documentation index, see [llms.txt](https://tutearnio.gitbook.io/tutearn-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://tutearnio.gitbook.io/tutearn-docs/user-manual-scheduling-hub.md).

# User Manual Scheduling Hub

> Real-world guide for tutoring center admins and front-desk staff.\
> All examples use **Bright English Academy** demo data.

The **Scheduling Hub** is the single screen for planning classes, managing rosters, and clearing the request inbox. Instead of jumping between the Classrooms, Enrollments, Bookings, and Requests pages, you do it all from one place — and the **Schedule a class** wizard creates a classroom, its roster, the invoices, and a recurring booking in one pass.

Find it under **Teaching → Scheduling** (`/scheduling`).

***

## Who can use it

Opening the hub only needs **booking read** permission, so most staff can see it. But each *action* inside the hub is gated by its own permission, and buttons simply don't appear if you lack it:

| To do this…                      | You need…                        |
| -------------------------------- | -------------------------------- |
| Open the hub                     | `booking: read`                  |
| Use the Schedule a class wizard  | `classroom: create`              |
| Enroll students from a card      | `enrollment: create`             |
| Create bookings / courses / etc. | the matching `create` permission |
| Run the lifecycle scan           | `classroom: update`              |

Tutors, students, and guardians have their own portals — the Scheduling Hub is a staff tool.

***

## The Big Picture — What the Hub Pulls Together

```
                    ┌─────────────────────────────────────────┐
                    │            SCHEDULING HUB               │
                    │   top bar: Schedule a class · Quick actions
                    ├───────────────────────────────────────────┤
   Calendar    │  Educators │ Classrooms │ Enrollments │ Courses │ Requests
   (bookings)  │ (timeline) │  (cards)   │   (table)   │(lessons)│ (inbox)
                    └─────────────────────────────────────────┘
```

The hub is six tabs plus a command bar. Everything it shows is a *live window* into existing entities — editing a classroom here is the same record as on the Classrooms page. The hub just arranges them for the scheduling workflow.

**The everyday flow:**

1. **Schedule a class** (wizard) — set up a new cohort end-to-end, or
2. **Enroll students** into an existing classroom from the Classrooms tab,
3. **Check the Educators timeline** to avoid double-booking a tutor,
4. **Record payments** from the Enrollments tab as money comes in,
5. **Clear the Requests inbox** — reschedules, leave, and waitlist.

***

## Part 1 — The Top Bar: Schedule a Class & Quick Actions

Every tab shares the same command bar in the top-right corner.

### 1.1 "Schedule a class" button

The primary button (visible if you can create classrooms) opens the **5-step wizard** described in Part 8. This is the fastest way to stand up a brand-new class.

### 1.2 The "Quick actions" dropdown

A single menu that gathers every create-and-go shortcut, grouped into three sections:

**Create** (each item appears only if you have the matching permission)

| Action             | Goes to / does           |
| ------------------ | ------------------------ |
| Schedule a class   | Opens the wizard         |
| New booking        | `/booking/new`           |
| New classroom      | `/classroom/new`         |
| Enroll student     | `/enrollment/new`        |
| New course         | `/course/new`            |
| New lesson         | `/lesson/new`            |
| Block availability | `/availability-slot/new` |

**Go to** — jump to the supporting lists: Bookings list, Availability slots, Rooms, Schedule templates, Public holidays, Makeup sessions.

**Maintenance** (needs `classroom: update`)

* **Run lifecycle scan now** — immediately checks every classroom's dates and flips statuses: classrooms whose start date has arrived become **active**, and those past their end date become **completed**. A toast reports the result, e.g. *"Lifecycle scan complete · 3 activated · 1 completed."* This normally runs automatically; the button is for when you want it applied right now.

***

## Part 2 — Calendar Tab

The default tab. It embeds the full **Booking calendar** so you can see every session in one grid.

* **Drag a booking** to reschedule it.
* **Click an empty slot** to open the Schedule a class wizard with that date and time pre-filled into the first session (only if you can create classrooms).
* The **Booking calendar** link (top-right) opens the standalone calendar at `/booking/calendar` with the full toolbar.

> Hint shown on the tab: *"Drag bookings to reschedule. Click an empty slot to schedule a class."*

***

## Part 3 — Educators Tab (Tutor Timeline)

A horizontal **timeline grid** — one row per active educator, showing their availability and bookings side by side. This is the tab you check before assigning a tutor, to avoid clashes.

### 3.1 Controls

* **Day / Week** toggle (top-right).
* **‹ Today ›** navigation to move the date window.
* The visible hours run **07:00 to 22:00** each day.

### 3.2 Reading the grid

| What you see             | Meaning                               |
| ------------------------ | ------------------------------------- |
| **Green strip** (light)  | Tutor is **available** in that window |
| **Green strip** (darker) | **Preferred** availability            |
| **Yellow strip**         | **Tentative** availability            |
| **Solid colored block**  | A **booking** (a scheduled session)   |

Booking blocks are colored by status: **blue** = scheduled, **amber** = in progress, **green** = completed, **red** = cancelled, **gray** = no-show. A color legend sits at the bottom of the grid.

* **Recurring** bookings and weekly availability are expanded across the visible window (up to 50 occurrences per booking).
* **Unavailable** blocks are intentionally hidden so the green strips only ever mean "free."
* Click a **booking block** to open that booking; click an **educator's code** to open their tutor profile.

> Empty state: *"No educators yet — add an educator and set their availability to see this view come alive."*

***

## Part 4 — Classrooms Tab

A card grid of your most recent classrooms (latest 24, newest start date first). Each card is a mini-dashboard for one cohort.

**On every card:**

* Classroom name, code, and course.
* A **status badge** — active (green), pending (amber), completed (blue), cancelled (red).
* **Enrolled count** — e.g. `12 / 20` against the max seats.
* **Next session** — the next upcoming session, computed from the classroom's (possibly recurring) bookings, or *"No upcoming sessions."*
* **Enroll student** — opens the enrollment popover (Part 5), if you can enroll.
* **Open** — jumps to the full classroom page.

A **View all classrooms** link sits below the grid.

***

## Part 5 — Enrolling Students from a Classroom Card

Clicking **Enroll student** on a classroom card opens a focused dialog that does the whole enroll-and-invoice step in one go.

### 5.1 The form

| Field                      | Notes                                                                 |
| -------------------------- | --------------------------------------------------------------------- |
| **Students**               | Pick **one or more** — the same fee/invoice setting applies to each   |
| **Agreed fee per student** | Defaults to the classroom fee; override per enrollment                |
| **Create invoices now**    | Generates one **draft invoice** (due in 14 days) per enrolled student |

### 5.2 What happens on submit

* Each student is enrolled via **smart-create**: if the classroom is **full**, that student is automatically routed to the **waitlist** instead of being enrolled. A capacity banner warns you up front when seats are short (e.g. *"You picked 3 but only 1 seat is left — 2 will go to the waitlist."*).
* New enrollments start as **pending / unpaid**.
* If invoicing is on and a fee is set, a draft invoice is created per enrollment. Invoices need the **course to have a currency** — if it doesn't, enrollments still succeed but invoices are skipped with a warning.

### 5.3 The success panel

A summary shows counts of **Enrolled / Waitlisted / Invoices**, and lists each new invoice with a **Pay** shortcut that opens the Record-payment sheet so you can take payment immediately.

***

## Part 6 — Enrollments Tab

A table of recent enrollments (latest 20 by enrollment date) for at-a-glance roster and money tracking.

**Columns:** Student · Classroom · Enrollment date · Status · Payment status · Actions.

* **Status** badges: pending, active, completed, withdrawn, suspended.
* **Payment status** badges: unpaid, partially paid, paid, refunded.
* **Record payment** appears in the Actions cell whenever an enrollment is *not fully paid* and *not withdrawn*. It logs a payment against the enrollment's invoice. If the enrollment has **no agreed fee yet**, it first prompts you to confirm the fee (prefilled from the classroom default), creates the invoice, then continues to payment.
* The **row actions** menu offers the usual per-enrollment operations.

> Tip: Multiple enrollments without payment? The platform also supports **bulk payment** — apply one channel and date across many enrollments at once, with auto-numbered references (`PREFIX-001`, `PREFIX-002`, …).

A **View all enrollments** link sits below the table.

***

## Part 7 — Courses & Lessons Tab

An expandable list of courses (up to 20, alphabetical). Each row shows the course name, code, **lesson count**, and **classroom count**.

* Click a row to **expand** it and see that course's lessons in syllabus order.
* Course names and lesson titles link straight to their detail pages.
* **View all courses** sits below the list.

Use this tab to confirm a course's syllabus is built out before you schedule a classroom from it.

***

## Part 8 — The "Schedule a Class" Wizard (in detail)

The flagship feature. Five steps create a classroom, its roster, draft invoices, and a recurring booking — atomically enough that one click sets up an entire cohort. Opened from the **Schedule a class** button, the Quick actions menu, or by clicking an empty calendar slot.

{% stepper %}
{% step %}

## Course

Pick the course. Selecting it **auto-fills** the next step to save typing:

* Classroom name → `"<Course> – <Month> <Year>"` (e.g. *"IELTS Prep – June 2026"*).
* Classroom code → a generated code like `IELTS-202606-417`.
* Booking title → the course name.
* Fee → the course's price, if it has one.
  {% endstep %}

{% step %}

## Classroom

| Field           | Required | Notes                                    |
| --------------- | -------- | ---------------------------------------- |
| Classroom name  | ✅        | Pre-filled from the course               |
| Code            | ✅        | Pre-filled; must be unique               |
| Start date      | ✅        |                                          |
| End date        | —        | Caps the recurring schedule (see Step 4) |
| Max students    | —        | Seat limit; drives capacity/waitlist     |
| Fee per student | —        | Drives invoice amounts                   |
| Mode            | ✅        | In person, online, etc.                  |
| Lead educator   | ✅        | The tutor assigned to the classroom      |

The classroom is created with status **scheduled**.
{% endstep %}

{% step %}

## Students (roster)

Optional. Search and add one or more students. You can always add more later — this just seeds the initial roster.
{% endstep %}

{% step %}

## Schedule

Either **skip** the booking (toggle *"Skip — I'll schedule sessions manually later"*) or define the first session:

| Field              | Required | Notes                             |
| ------------------ | -------- | --------------------------------- |
| Booking title      | ✅        |                                   |
| First session date | ✅        |                                   |
| Start time         | ✅        |                                   |
| Duration (minutes) | —        | 15–480, defaults to 60            |
| Repeats            | —        | Recurrence pattern (weekly, etc.) |

If you set a recurrence, it's **clamped to the classroom's end date** so sessions are never generated past the cohort's term.
{% endstep %}

{% step %}

## Review & create

A summary of the classroom, roster, fee, and schedule. One toggle:

* **Also create draft invoices** — creates one draft invoice (due in 14 days) per enrolled student. Only available when there's at least one student **and** a fee greater than zero.

Click **Create everything**. The wizard then runs, in order:

```
1. Create classroom              (status: scheduled)
2. Enroll each student           (status: pending · unpaid)
3. Create draft invoices         (if enabled, needs course currency)
4. Create the recurring booking  (status: scheduled)
```

{% endstep %}
{% endstepper %}

### What if part of it fails?

The wizard is resilient: if (say) invoices can't be created because the course has no currency, the classroom, enrollments, and booking still succeed. The **Done** screen shows a green success or an amber "created with warnings" with a specific note for each problem (enrollment failed, invoice failed, booking failed). From there, **Open classroom** takes you straight to the new cohort.

***

## Part 9 — Requests Tab

The inbox for everything awaiting a decision, in three columns:

| Column                  | Shows                                              |
| ----------------------- | -------------------------------------------------- |
| **Reschedule requests** | Pending requests, with old time → proposed time    |
| **Leave requests**      | Pending requests, with the leave date range        |
| **Waitlist**            | Active waitlist entries, with classroom + position |

Each column shows a **pending count** and up to four items; click an item to open its detail page, or **Open** to jump to the full section list. When everything is handled you'll see *"Inbox zero — no pending requests."*

***

## Tips, Pitfalls & FAQ

<details>

<summary>"The Schedule a class button isn't there."</summary>

You need `classroom: create`. Without it, the wizard and the empty-slot shortcut are both hidden.

</details>

<details>

<summary>"My new students went to the waitlist instead of enrolling."</summary>

The classroom was at capacity. Smart-create routes overflow to the waitlist automatically — raise **Max students** on the classroom, or promote them from the waitlist later.

</details>

<details>

<summary>"Enrollments worked but no invoices were created."</summary>

The course has no **currency** set. Invoices need one. Set a currency on the course, then create invoices from the Enrollments tab or the classroom.

</details>

<details>

<summary>"A booking I expected isn't on the Educators timeline."</summary>

The timeline only shows **active** tutors and expands up to 50 occurrences per recurring booking within the visible window. Also, **unavailable** blocks are hidden by design — green always means free.

</details>

<details>

<summary>"Classroom statuses look stale."</summary>

Run **Quick actions → Run lifecycle scan now** to immediately activate/complete classrooms by date.

</details>

**Empty calendar slot = fastest new class.** Clicking a slot pre-fills the wizard's first session with that exact date and time.

***

## Quick Reference

| Task                         | Where in the hub                           |
| ---------------------------- | ------------------------------------------ |
| Set up a whole new class     | **Schedule a class** wizard                |
| Add students to a class      | Classrooms tab → card → **Enroll student** |
| Avoid double-booking a tutor | **Educators** tab (timeline)               |
| Take a payment               | Enrollments tab → **Record payment**       |
| See a course's lessons       | Courses & Lessons tab → expand             |
| Approve a reschedule / leave | **Requests** tab                           |
| Refresh classroom statuses   | Quick actions → **Run lifecycle scan now** |
| Jump to a supporting list    | Quick actions → **Go to**                  |


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://tutearnio.gitbook.io/tutearn-docs/user-manual-scheduling-hub.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
