---
title: Attendance
slug: attendance
docTags: 
createdAt: 2026-03-06T19:27:16.844Z
---

REMMU lets you track which students attend each class session. Attendance records are visible to both admins and members.

## 🔧 Marking Attendance

### QR Code (Recommended)

Each class and location has a unique **QR code**. Students scan the QR code on their phone to check in automatically. No manual entry needed.

- **Class QR code:** Locations → \[Location] → Classes → \[Class] → QR Code
- **Location QR code:** Locations → \[Location] → QR Code

### Manual Entry (Roster)

Admins and team members can mark attendance manually from the **Attendance** page. Go to **Attendance**, find the class session, and click **Take Attendance** to open the roster.

The roster header shows the session date, day of the week, and start/end time so you always know exactly which session you're marking.

The roster shows three groups of students:

| Group                    | Who                                                                    |
| ------------------------ | ---------------------------------------------------------------------- |
| **Enrolled**             | Regular class members                                                  |
| **Package Students**     | One-time attendees using a package                                     |
| **Replacement Students** | Attending via a replacement request — shown with a "Replacement" badge |

Click each student's row to toggle their status (Present / Late / Absent). You can also **Mark All Present** in one click. Use the search bar at the top of the roster to quickly find a student by name. Add optional session notes, then click **Complete Session** — unmarked students are automatically set to absent.

### Printing a Session Roster

From any open roster dialog, click the **printer icon** in the header to print the attendance sheet for that session. The printout includes the class name, date, time, location, a summary, and a numbered student list with each status and check-in time.

### QR Scanner (Admin)

From the roster dialog, click **Scan** to open the built-in QR scanner. Point the camera at a student's ID card QR code to instantly mark them present — no manual searching needed. The scanner shows clear real-time feedback for each scan (marked present, already marked, not in this roster, or a scan error).

:::hint{type="success"}
The QR scanner is especially useful for large classes. Pair it with printed Student ID Cards (Students → ID Cards) for fast check-in at the door.
:::

### Package credit indicators

For students on package billing, the roster shows their current credit status — remaining sessions, exhausted, expired, or no package assigned.

### Per-session students — Generate Invoice

Students on **Per Session** billing show a **receipt icon** on their roster row when they don't have an invoice for this session yet. Admins and team members can click it to generate the session invoice on the spot — even before marking attendance — so the student can pay at the door.

- Once generated, the row shows the invoice number and whether it's Paid or Unpaid
- Marking the student Present later reuses the same invoice (no duplicates)
- Marking the student Absent does not touch the invoice — it stays pending or paid as-is
- The button only appears for today's or past sessions

:::hint{type="info"}
By default, marking a per-session student Present also creates the invoice automatically. To make the Generate Invoice button the *only* way invoices are raised, turn off **Auto-invoice on attendance** in **Settings → Billing**.
:::

### Session Notes

The roster has a collapsible **Session Notes** section where instructors and staff can record what was taught, observations about a student, or anything worth remembering for the next session. Multiple staff can contribute their own notes, each shown with the author and timestamp; authors can edit or delete their own, and admins can edit any note.

Enable or disable the session notes feature for your academy under **Attendance Settings → Session notes**.

***

### Move Student to a Different Session

Need to shift a student from the session they're booked into to a different one — for example, they came to a different time slot than usual? Use **Move Student** from the roster's actions menu to reassign them without re-marking attendance manually.

1. Open the session roster
2. On the student's row, open the actions menu and tap **Move**
3. Pick the target date and an available session from the list, shown with class name, time, location, and remaining capacity
4. Confirm — the student is removed from the original session and added to the target session's roster

The move is recorded as a replacement so it's auditable. Available to admins and team members only.

:::hint{type="info"}
Use **Move Student** for one-off session shifts. To change a student's regular class enrolment, edit their enrolment from the student profile instead.
:::

***

### Adding a Substitute Instructor

If the regular instructor is unavailable, assign a substitute for that session from the roster's **Add Substitute Instructor** button without changing the class permanently.

### Removing an Instructor from One Session

If an instructor assigned to the class isn't teaching a particular session (e.g. they only cover some weeks), remove them from just that session: in the roster, click the remove icon next to their name and confirm. They're taken off this session only — their assignment to the class isn't affected. This works on web and mobile, including sessions that haven't been opened yet.

A removed instructor:

- Doesn't count towards the session's instructor total (e.g. "1/2 instructors")
- Doesn't need to check themselves in before the session can be completed
- Doesn't show a "Not recorded" entry for that session in the instructor attendance report, and isn't paid for it

***

### Editing attendance after completion

Once a session is completed, admins and team members can still edit it from **Attendance → History → Edit Attendance**.

### Resetting attendance

Admins can reset a session's attendance from the roster dialog's **Reset** button. If package students were marked present, their session credits are automatically refunded.

:::hint{type="warning"}
Resetting attendance removes all check-in records for the session. This cannot be undone.
:::

### Who Can Mark Attendance

Configure which roles can mark attendance under **Attendance Settings** — admin only, admin + team, or all staff (admins, team, and instructors).

***

## 📅 Session Management

### Session statuses

Each session on the Attendance page shows a status badge — Not Started, In Progress, Completed, Cancelled, or Rescheduled — so you can tell at a glance where it stands.

### Ad-hoc sessions

Admins and team members can create a standalone session outside the regular class schedule — useful for makeup classes, workshops, or private/package lessons. Click **Add Session** and choose **Replacement Class** (an extra session for an existing class, pulling in enrolled students automatically) or **Extra Session** (a one-off session at a location, with an optional class attached).

Fill in location, class, date, and start/end time, then save.

:::hint{type="info"}
Attaching a class to an Extra Session is what makes it count toward payroll and show correctly in the attendance report — without a class, the session has no instructor or rate source.
:::

### Retimes and extra sessions: add a reason

The **Retime** tab and the **Add Session** dialog (Replacement Class or Extra Session) also have optional **Reason** and **Note** fields. When one is saved, a **View Reason** popover appears on the *Retimed* or *Replacement / Extra Session* badge in **Attendance → Today**, the same as for cancelled and rescheduled sessions.

### Cancelling a Session

When a class can't run, cancel the session from the **⋯** menu → **Cancel Session**, choose a cancellation reason, optionally add a note, and choose whether to notify students and instructors by email.

### Rescheduling a Session

Instead of cancelling outright, use **⋯** → **Reschedule** to move the session to a different date and, optionally, time — with the same choice to notify. The new date can be earlier or later than the original.

:::hint{type="info"}
You can only reschedule a session that hasn't had attendance marked yet. If a session already ran, leave it as the historical record and add a new session on the new date instead.
:::

### Reinstating a Cancelled Session

If a session was cancelled by mistake, or the class is back on, use **⋯** → **Reinstate Session** to return it to its scheduled status — no notification is sent automatically, but you can re-send one afterward.

:::hint{type="warning"}
**Reinstate** is only available for plain cancelled sessions. Rescheduled sessions cannot be reinstated — manage the replacement session directly instead.
:::

### Where the reason shows

The cancellation or reschedule reason (and any note) is shown next to the class name for that day in **Attendance → Today**, on the student profile's attendance timeline, and in the **Attendance Report** (By Student, By Class, and the CSV export) — so anyone looking back can see why the session didn't run as planned.

### Re-sending notifications

After cancelling, rescheduling, or reinstating a session, use **⋯** → **Re-send Notification** if students didn't receive the first one.

***

## 🔄 Session Change Requests (Instructor)

Instructors can request to retime or reschedule their own sessions from their **Today / Upcoming** list, without needing an admin to make the change directly. (Cancelling a session is admin/team only — instructors can't cancel directly.)

Requests go into an approval queue rather than taking effect immediately — a **Pending review** badge shows the requested new time, and the current time stays in effect until an admin reviews it.

### Admin approval

Admins see pending requests under **Attendance → Time Changes**, with the instructor, class, current time, proposed time, and reason. **Approve** moves the session and emails the instructor; **Decline** keeps it as-is and emails the instructor with the admin's note.

***

## 📆 Bookings (Instructor Slot Approvals)

If your academy uses [Instructor Availability](docId\:dSOA74QWE7dVnGQQSE79x) with slot classes that require approval, a **Bookings** tab appears on the Attendance page.

Members book directly into an instructor's open availability slots. When your academy requires approval before a booking is confirmed, requests land here for review — admins, team members, and (if instructor approval is required) the assigned instructor can see and act on pending bookings, approving or declining with a reason.

:::hint{type="info"}
If neither approval setting is enabled, bookings are confirmed automatically and this tab is hidden.
:::

***

## 🔄 Replacement Requests

Members can request to attend a different class session when they miss their regular one.

### Member flow

Members submit requests from the mobile app or web portal, choosing how to pick their replacement time — browsing existing scheduled sessions, booking from the instructor's declared availability (if enabled), or proposing a custom time (if enabled). Depending on your settings, they may also need to select a reason and upload supporting documentation (e.g. a medical certificate).

### Admin approval

Replacement requests are managed from **Attendance → Replacement Requests**, with **Pending** and **All** tabs. Each request card shows the student, missed class and date, and the replacement session selected, along with the reason and any attachment.

**Approve** automatically adds the student to the replacement session's roster (deducting a package credit on attendance); **Decline** notifies the student. Both support an optional admin note. Members are notified by email at submission, approval, and decline.

### Instructor counter-offer

When a member proposes a custom time or books from an instructor's availability, the instructor reviews the request first (shown as **Awaiting Instructor**). Besides agreeing or declining, the instructor can click **Propose time** to suggest one alternative date and time, with an optional note, then **Send Proposed Time**.

The request then shows **Time Proposed**, and the member sees "The instructor proposed: …" in **My Attendance** with **Accept** and **Decline** buttons:

- **Accept** — the replacement is scheduled at the proposed time
- **Decline** — the request is closed, the same as if the instructor had declined

There's only one round — the member can't counter back. Both sides get a push/in-app notification and email at each step.

### Configuring Replacements

Go to **Attendance → Settings** to control whether replacements are enabled, how far ahead members can book, minimum advance notice, monthly limits, which classes are eligible, whether members can propose a custom time, and whether a reason (with optional required attachment) must be selected.

### Quick Notes (approval & rejection templates)

Pre-write templates for approving and declining requests under **Attendance Settings**, so you're not typing the same response repeatedly — insert them with one tap when reviewing a request.

***

## ⚙️ Attendance Settings

**Attendance → Settings** is where you configure attendance-related behaviour for both members (self check-in, replacement requests) and staff (who can mark attendance, notifications, session notes).

### 📍 Geofenced Check-in

Restrict self check-in to within a radius of the location, to help prevent members checking in from somewhere else. Turn it on tenant-wide under **Attendance Settings**, then configure the radius and coordinates per location under **Locations → \[Location] → Edit**.

:::hint{type="warning"}
QR code and Student ID Card scans are staff-operated front-desk check-ins, so geofencing doesn't apply to them.
:::

### 🔔 Notify when attendance is marked

Optionally send a push notification to a member (and their guardian) the moment they're marked present or late — useful for parents who want real-time confirmation. Off by default. Only fires on a fresh mark, not when correcting a mistake, and doesn't fire for absent or for self check-ins (which already show an on-screen confirmation).

### 🌅 Notify instructors of today's classes

Optionally send instructors a daily push notification listing the classes they're teaching that day. Off by default, and separate from the member "you have class today" reminder. Classes paused by a holiday are skipped.

### ⏰ Remind instructors before class

Optionally remind the assigned instructor shortly before each class starts, so they don't forget to take attendance. Off by default. Covers regular, moved, and one-off sessions, and skips cancelled/completed/holiday-paused classes. Requires the instructor to be logged into the mobile app with notifications allowed.

***

## 📊 Viewing Attendance

### For Admins

- **Attendance → Today** — today's classes at a glance, grouped by location, with attendance stats per session. Classes affected by a holiday or other blocking calendar event are flagged, with an option to reveal them anyway.
- **Attendance → Insights** — attendance rate, trends, and per-class performance over a chosen period, plus two side-by-side panels (switchable between students and instructors):
  - **Needs Attention** — anyone below 70% attendance, for early intervention
  - **Top Attendance** — the best-attending students or instructors (minimum 2 sessions), great for recognising and rewarding good attendance
- **Class page → Attendance tab** — full history for a specific class
- **Student profile → Attendance tab** — all sessions a student has attended

### For Members

Members can view their own attendance history in the REMMU mobile app or on the web at **My Attendance**.

***

## 📦 Attendance and Packages

For students on a **Package** billing type, each attendance automatically deducts one session from their package balance. When the package runs low, they'll be prompted to purchase another.

→ See [Packages & Sessions](docId\:stOe96zvZyKzjijjhRXc5)
