Attendance Management
Two attendance systems run side by side today: a class-section-based daily attendance system (DailyAttendance) that powers leave requests, chronic-absence detection, locking, and the admin school-wide overview, and an older course-level attendance system (Attendance) still used by the teacher's per-course marking screens and student self-check-in. Both feed parent notifications and downstream analytics.
Basic Tier Features
BasicClass-Section Daily Attendance
- DailyAttendance model: school → class → section → student → date, with 8 status values (present, absent, late, half_day, medical_leave, approved_leave, holiday, excused)
- Bulk mark a whole class-section for a date in one request; unique compound index prevents duplicate records
- Admin school-wide overview: per-class/section totals and percentage, aggregated in a single pipeline
- Parent notification created automatically for absent/late/half-day marks
- Web: /dashboard/admin/attendance (overview) · /dashboard/parent/attendance, /dashboard/student/attendance
Legacy Course-Level Attendance
- Original Attendance model: one record per student per course per date (present/absent/late/excused)
- Teacher bulk-marks a course roster via a single MongoDB bulkWrite upsert — used by the course-scoped teacher UI
- Course-level attendance analytics: per-student present/absent counts and percentage via aggregation
- Student self-check-in (studentMarkToday / studentToday) when a school enables self-marking
- Web: /dashboard/teacher/attendance/[courseId]/today, /[date], /calendar
Leave Requests
- Parent submits a leave request for a child: type (medical/personal/emergency/sports/school_activity/other), date range, reason, supporting documents
- Teacher or admin reviews and approves/rejects with remarks
- On approval, attendance records for every day in the range are bulk-written as medical_leave or approved_leave and linked back to the leave request
- Web: /dashboard/parent/leave-requests (submit) · /dashboard/admin/attendance (review queue)
Chronic Absence Detection
- Aggregation over a rolling window (default 30 days) flags students at or above an absence-count threshold (default 3)
- Threshold and window are query-parameter configurable per request
- Surfaces on the admin "At-Risk Students" tab with student name, admission number, and absence count
Attendance Corrections & Locking
- Every DailyAttendance record carries a lockExpiry (default 48 hours after marking) and an isLocked flag
- Marking is blocked outright if any targeted record is already locked
- Correcting a locked record requires the super_admin role; the previous status, reason, and approver are stored on the record
- Every correction is written to AuditLog with actor, old value, new value, and IP
Teacher & Staff Attendance
- TeacherAttendance model: present/absent/late/half_day/on_leave, with check-in/check-out time strings
- Teacher self-marks their own daily attendance; admin views school-wide teacher attendance for any date
- Monthly self-summary with present/absent counts and percentage
- This dataset is shared with the Chapter 19 HR & Payroll module for staff attendance reporting
Attendance Analytics
- Monthly per-student analytics for a class-section: total, present, absent, late, leave counts and percentage
- Results sorted ascending by percentage so the lowest-attendance students surface first
- Attendance percentage is consumed downstream by Chapter 12 report cards (attendance summary block) and promotion eligibility checks
Planned — Not Yet Implemented
Not Yet Implemented
- Biometric and RFID attendance check-in — marking is manual only today
- Excel/CSV/PDF export of attendance reports (daily, monthly, student history)
- Morning/afternoon sub-tracking within a Half-Day record — currently a single half_day status, not a split object
- Bulk correction of multiple records in one request, and bulk leave approval
- Attendance-driven exam hall-ticket blocking (attendance % currently feeds report cards and promotion checks, but does not yet gate exam registration directly)
API Reference — Chapter 10
Class Daily Attendance
/api/class-attendance/markBulk-mark a class-section for a date (teacher, admin, super_admin)
/api/class-attendanceFetch records filtered by classId, sectionId, date
/api/class-attendance/school-overviewAdmin: school-wide daily summary grouped by class-section
/api/class-attendance/analyticsMonthly per-student analytics for a class-section
/api/class-attendance/chronic-absenteesList students flagged for chronic absence
/api/class-attendance/student/:studentId/summaryStudent/parent-facing attendance summary + records
/api/class-attendance/:id/correctCorrect a record (audited); super_admin required if locked
/api/class-attendance/lockLock all records for a class-section-date
Leave Requests
/api/class-attendance/leave-requestsParent (or admin) submits a leave request for a student
/api/class-attendance/leave-requestsList leave requests, filterable by studentId/status
/api/class-attendance/leave-requests/:id/reviewTeacher/admin approves or rejects; approval bulk-updates attendance
Teacher Attendance
/api/class-attendance/teacher/markTeacher self-marks attendance with check-in/check-out
/api/class-attendance/teacher/myTeacher's own monthly attendance + summary
/api/class-attendance/teacher/schoolAdmin: school-wide teacher attendance for a date
Legacy Course Attendance
/api/attendance/markBulk-mark attendance for a course and date (teacher, admin)
/api/attendance/course/:courseIdList attendance for a course, optional ?date=
/api/attendance/student/:studentIdList a student's attendance records
/api/attendance/:attendanceIdUpdate a single attendance record
/api/attendance/analytics/:courseIdPer-student present/absent counts and percentage for a course
/api/attendance/student/markStudent self-marks today's attendance
/api/attendance/student/todayStudent views today's own attendance record
Frontend Pages
| Path | Role | Description | Tier |
|---|---|---|---|
| /dashboard/admin/attendance | Admin | School overview, teacher attendance, leave review, chronic-absence tab | Basic |
| /dashboard/admin/analytics/attendance | Admin | Attendance analytics dashboard | Basic |
| /dashboard/teacher/attendance | Teacher | Course list for attendance marking | Basic |
| /dashboard/teacher/attendance/[courseId]/today | Teacher | Mark today's attendance for a course | Basic |
| /dashboard/teacher/attendance/[courseId]/[date] | Teacher | Mark/edit attendance for a specific date | Basic |
| /dashboard/teacher/attendance/[courseId]/calendar | Teacher | Calendar view of a course's marked dates | Basic |
| /dashboard/student/attendance | Student | Own attendance record view | Basic |
| /dashboard/parent/attendance | Parent | Child's daily attendance summary (class-section based) | Basic |
| /dashboard/parent/leave-requests | Parent | Submit and track leave requests for a child | Basic |
Mobile Screens
(student)/attendance.tsx(parent)/attendance.tsx(teacher)/attendance.tsx(admin)/attendance.tsx