Attendance management
The Attendance module provides enterprise-grade attendance tracking across your entire school. It covers daily marking, real-time statistics, intervention management, policy enforcement, and pattern analysis to help improve student attendance rates.
Navigation path
Operations → Attendance (segment: operations/attendance)
| Sub-section | Path | Description |
|---|---|---|
| Dashboard | operations/attendance | Overview and quick actions |
| Class Register | operations/attendance/register | Mark daily attendance |
| History | operations/attendance/history | View attendance records |
| Interventions | operations/attendance/interventions | At-risk student management |
| Reports | operations/attendance/reports | Analytics and reports |
Attendance architecture
┌─────────────────────────────────────────────────────────────────────────┐
│ Attendance Management System │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ Class Register │ │
│ │ │ │
│ │ Teacher marks attendance → Drag & drop / Keyboard shortcuts │ │
│ │ Auto-save → Real-time sync → Parent notifications │ │
│ │ │ │
│ └────────────────────────────────┬──────────────────────────────────┘ │
│ │ │
│ ┌────────────────────┼────────────────────┐ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────────┐ │
│ │ Statistics │ │ Interventions │ │ Raw Events │ │
│ │ │ │ │ │ │ │
│ │ Daily/Weekly/ │ │ Chronic absence │ │ Biometric scans │ │
│ │ Monthly rates │ │ Pattern alerts │ │ RFID/QR check-ins │ │
│ │ Trends & flags │ │ Action tracking │ │ App sign-ins │ │
│ │ │ │ │ │ │ │
│ └────────┬─────────┘ └────────┬─────────┘ └──────────┬───────────┘ │
│ │ │ │ │
│ └─────────────────────┼───────────────────────┘ │
│ │ │
│ ▼ │
│ ┌────────────────────── ────────────────────────────────────────────┐ │
│ │ Policy Engine │ │
│ │ │ │
│ │ Thresholds → Auto-notifications → Intervention triggers │ │
│ │ Rating categories → Compliance tracking │ │
│ │ │ │
│ └──────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────────────────┐ │
│ │ Dashboard & Analytics │ │
│ │ │ │
│ │ School-wide rates • Grade breakdowns • Class comparisons │ │
│ │ At-risk alerts • Trend charts • Day-of-week patterns │ │
│ │ │ │
│ └──────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
Part 1: Attendance statuses
The system supports five core attendance statuses.
Status definitions
| Status | Code | Description | Affects rate | Hotkey |
|---|---|---|---|---|
| Present | present | Student attended | ✓ Positive | 1 |
| Absent | absent | Unexcused absence | ✓ Negative | 2 |
| Late | late | Arrived after start | ✓ Partial | 3 |
| Excused | excused | Documented absence | Neutral | 4 |
| Half Day | half_day | Partial attendance | ✓ Partial | 5 |
Status visual indicators
| Status | Color | Icon | Badge style |
|---|---|---|---|
| Present | Emerald/green | ✓ Check | bg-emerald-50 |
| Absent | Red | ✗ X | bg-red-50 |
| Late | Amber/yellow | Clock | bg-amber-50 |
| Excused | Blue | File check | bg-blue-50 |
| Half Day | Purple | Alert triangle | bg-purple-50 |
Part 2: Session types
Attendance can be tracked at different granularities.
| Session type | Description | Use case |
|---|---|---|
morning | AM session (before lunch) | Split-day tracking |
afternoon | PM session (after lunch) | Split-day tracking |
full_day | Entire school day | Standard daily attendance |
period | Individual class period | Per-subject attendance |
Part 3: Marking methods
The system supports multiple ways to capture attendance.
| Method | Description |
|---|---|
manual | Teacher marks via UI |
biometric | Fingerprint/face scan |
rfid | Card tap at reader |
qr | QR code scan |
app | Mobile app check-in |
import | Bulk CSV import |
Part 4: Dashboard
The attendance dashboard provides school-wide visibility.
Dashboard metrics
| Metric | Description |
|---|---|
| Today Present | Students marked present today |
| Today Absent | Students marked absent today |
| Today Late | Students arriving late today |
| Today Excused | Excused absences today |
| Weekly Rate | Attendance % for current week |
| Weekly Trend | Up/down/stable vs last week |
| Monthly Rate | Attendance % for current month |
| At-Risk Students | Students below threshold |
| Pending Interventions | Open intervention cases |
Attendance rate thresholds
| Rating | Minimum % | Color indicator |
|---|---|---|
| Excellent | 95%+ | Emerald |
| Good | 90-94% | Blue |
| Warning | 80-89% | Amber |
| Critical | Below 80% | Red |
Dashboard widgets
- Hero Stats — Today's attendance counts with trend indicators
- Rate Ring — Circular progress showing overall attendance rate
- Quick Actions — Take attendance, view reports, manage interventions
- Grade Level Breakdown — Attendance by grade with bar charts
- Class Comparison — Side-by-side class performance
- Day of Week Analysis — Pattern detection (e.g., "Mondays have 5% more absences")
- Recent Activity — Live feed of attendance marks and alerts
- At-Risk Students — Students requiring intervention
Quick actions
| Action | Description |
|---|---|
| Take Attendance | Open class register |
| View Reports | Go to analytics |
| View At-Risk | Filter students below threshold |
| Manage Interventions | Open intervention list |
Part 5: Class register
The class register is the primary interface for marking daily attendance.
Class register features
| Feature | Description |
|---|---|
| Drag and drop | Drag students to status zones |
| Keyboard shortcuts | Quick marking with 1-5 keys |
| Auto-save | Changes save every 30 seconds |
| Real-time sync | Multiple users see live updates |
| Bulk marking | Mark multiple students at once |
| Search | Filter students by name |
| Grid/List view | Toggle between card and table views |
| Fullscreen mode | Distraction-free marking |
Class register workflow
Select Class
│
▼
Select Date (default: today)
│
▼
Select Session Type
│
▼
Students appear in register
│
├─── Drag student to status zone
│ or
├─── Click student → Use hotkey (1-5)
│ or
└─── Bulk select → Mark all
│
▼
Changes auto-save
│
▼
Statistics update in real-time
Marking individual students
Method 1: Drag and drop
- Find student card
- Drag to status drop zone
- Release to mark
Method 2: Click and hotkey
- Click student card (selected)
- Press hotkey:
1= Present2= Absent3= Late4= Excused5= Half Day
Method 3: Status selector
- Click student card
- Click status button in expanded view
- Optional: Add arrival time for late students
- Optional: Add notes
Bulk marking
- Select multiple students:
- Click checkboxes, or
Ctrl + Ato select all, or- Click and drag to select range
- Click Bulk Mark button
- Choose target status
- Optional: Add notes
- Confirm marking
Keyboard shortcuts reference
| Shortcut | Action |
|---|---|
1 | Mark present |
2 | Mark absent |
3 | Mark late |
4 | Mark excused |
5 | Mark half day |
↑ / ↓ | Navigate students |
Space | Toggle selection |
Ctrl + A | Select all |
Escape | Clear selection |
Ctrl + S | Force save |
N | Open notes |
T | Set arrival time |
Status drop zones
The register displays drop zones for each status:
| Zone | Accepts | Visual |
|---|---|---|
| Present | Student cards | Green border, check icon |
| Absent | Student cards | Red border, X icon |
| Late | Student cards | Amber border, clock icon |
| Excused | Student cards | Blue border, file icon |
| Half Day | Student cards | Purple border, triangle icon |
Quick stats bar
While marking, a stats bar shows real-time counts:
| Stat | Description |
|---|---|
| Total | Students in class |
| Present | Marked present |
| Absent | Marked absent |
| Late | Marked late |
| Excused | Marked excused |
| Unmarked | Not yet marked |
| Rate | Current % present |
Part 6: Attendance records
Each attendance record contains comprehensive data.
Record properties
| Field | Type | Description |
|---|---|---|
id | string | Unique identifier |
tenantId | string | Tenant association |
schoolId | string | School association |
studentId | string | Student reference |
classId | string | Class reference |
academicYearId | string | Academic year |
termId | string | Term reference |
periodId | string | Period (if per-subject) |
attendanceDate | date | Date of attendance |
sessionType | enum | Morning/afternoon/full day/period |
attendanceStatus | enum | Present/absent/late/excused/half day |
markingMethod | enum | How recorded |
arrivalTime | time | Actual arrival (if late) |
departureTime | time | Early departure time |
isTardy | boolean | Late flag |
minutesLate | number | Minutes after start |
isExcused | boolean | Excused flag |
excuseReason | string | Reason for excuse |
excuseDocumentUrl | string | Supporting document |
notes | string | Additional notes |
verifiedBy | string | Staff who verified |
verifiedAt | datetime | Verification timestamp |
parentNotifiedAt | datetime | When parent notified |
notificationSentVia | string | SMS/email/app |
createdAt | datetime | Record creation |
updatedAt | datetime | Last update |
createdBy | string | Who created |
updatedBy | string | Who updated |
Viewing attendance history
- Navigate to Attendance → History
- Use filters:
- Date range
- Class
- Grade
- Student
- Status
- Session type
- View records in data table
- Click record for details
- Export to CSV
History table columns
| Column | Description |
|---|---|
| Date | Attendance date |
| Student | Student name |
| Class | Class name |
| Status | Status badge |
| Arrival | Time if late |
| Notes | Any notes |
| Actions | View/Edit/Delete |
Part 7: Attendance statistics
Statistics are calculated and stored for reporting.
Statistics properties
| Field | Type | Description |
|---|---|---|
id | string | Stats record ID |
studentId | string | Student reference |
academicYearId | string | Academic year |
termId | string | Term reference |
periodType | enum | Daily/weekly/monthly/term/year |
periodStart | date | Period start |
periodEnd | date | Period end |
totalDays | number | School days in period |
presentDays | number | Days present |
absentDays | number | Days absent |
lateDays | number | Days late |
excusedDays | number | Excused absences |
unexcusedAbsences | number | Unexcused count |
attendanceRate | number | % attendance |
tardyRate | number | % tardy |
trend | string | Improving/declining/stable |
requiresIntervention | boolean | Below threshold |
interventionReason | string | Why intervention needed |
currentPresentStreak | number | Consecutive present days |
longestPresentStreak | number | Best streak |
currentAbsentStreak | number | Consecutive absences |
absencePatternDetected | boolean | Pattern found |
patternDescription | string | Pattern details |
Period types
| Period | Description |
|---|---|
daily | Single day stats |
weekly | Week aggregation |
monthly | Month aggregation |
term | Term aggregation |
year | Annual aggregation |
Recalculating statistics
Statistics auto-recalculate, but can be manually triggered:
- Select student or class
- Click Recalculate Stats
- Choose period type
- System recomputes
Part 8: Interventions
Interventions track follow-up actions for attendance issues.
Intervention properties
| Field | Type | Description |
|---|---|---|
id | string | Intervention ID |
studentId | string | Student reference |
schoolId | string | School reference |
academicYearId | string | Academic year |
termId | string | Term reference |
reasonCode | enum | Why triggered |
severity | enum | Low/medium/high |
status | enum | Open/in progress/closed |
triggerMetric | string | What metric triggered |
triggerValue | number | Threshold crossed |
assignedTo | string | Staff assigned |
dueDate | date | Action deadline |
actionsPlanned | array | Planned actions |
actionsTaken | array | Completed actions |
outcome | string | Result of intervention |
closedAt | datetime | When closed |
closedBy | string | Who closed |
notes | string | Notes |
Intervention reason codes
| Code | Description |
|---|---|
chronic_absence | Extended pattern of absence |
chronic_tardy | Pattern of lateness |
sudden_drop | Sudden attendance decline |
pattern_detected | Day-of-week or time pattern |
manual | Manually created |
Intervention severities
| Severity | Description | Color |
|---|---|---|
low | Monitor situation | Blue |
medium | Active follow-up needed | Amber |
high | Urgent attention required | Red |
Intervention statuses
| Status | Description |
|---|---|
open | Newly created, awaiting action |
in_progress | Actions being taken |
closed | Resolved |
Intervention workflow
Trigger detected (auto or manual)
│
▼
┌─────────────────┐
│ Open │ ← Assigned to staff
└────────┬────────┘
│
Staff reviews student
│
▼
┌─────────────────┐
│ In Progress │ ← Actions planned
└────────┬────────┘
│
┌────┴────┐
│ │
Resolved Escalate
│ │
▼ ▼
Closed Higher severity
Creating an intervention
- Navigate to Attendance → Interventions
- Click New Intervention
- Search and select student
- Choose reason code
- Set severity
- Assign to staff member
- Set due date
- Plan actions:
- Phone call
- Letter
- Meeting
- Home visit
- Counseling
- Add notes
- Save intervention
Intervention actions
| Action type | Description | Icon |
|---|---|---|
phone_call | Call parent/guardian | Phone |
email | Send email | |
letter | Send letter home | File |
meeting | Schedule meeting | Users |
home_visit | Visit student's home | Home |
counseling | Counseling session | Message |
other | Other action | More |
Managing interventions
Update status:
- Open intervention
- Click Update Status
- Select new status
- Add notes about progress
Record action taken:
- Open intervention
- Click Add Action
- Select action type
- Add details and date
- Save
Close intervention:
- Open intervention
- Click Close
- Enter outcome
- Document final actions
- Confirm closure
Auto-intervention triggers
The policy engine can auto-create interventions when:
| Condition | Default threshold |
|---|---|
| Attendance rate below critical | 70% |
| Consecutive unexcused absences | 3+ days |
| Tardies in window period | 5+ in 2 weeks |
| Sudden drop in attendance | 15%+ decline |
Part 9: Policies
Attendance policies define thresholds and automation rules.
Policy properties
| Field | Type | Description |
|---|---|---|
id | string | Policy ID |
schoolId | string | School (or tenant-wide) |
academicYearId | string | Year-specific |
termId | string | Term-specific |
policyName | string | Policy name |
excellentMinPct | number | Excellent threshold (%) |
goodMinPct | number | Good threshold (%) |
concerningMinPct | number | Concerning threshold (%) |
criticalMaxPct | number | Critical threshold (%) |
windowDays | number | Evaluation window |
maxUnexcusedDays | number | Max unexcused before alert |
tardyThresholdMinutes | number | Minutes late = tardy |
tardyWindowDays | number | Window for tardy counting |
autoNotifyParents | boolean | Auto-send notifications |
autoCreateIntervention | boolean | Auto-create interventions |
isActive | boolean | Policy active |
Default thresholds
| Rating | Threshold |
|---|---|
| Excellent | ≥95% |
| Good | ≥90% |
| Concerning | ≥80% |
| Critical | <80% |
Policy evaluation
When policy evaluates a student:
{
studentId: "...",
schoolId: "...",
policyId: "...",
attendanceRate: 85.5,
rating: "concerning",
requiresIntervention: false,
reason: "Attendance below good threshold"
}
Creating a policy
- Navigate to Settings → Attendance Policies
- Click New Policy
- Set name
- Configure thresholds:
- Excellent minimum %
- Good minimum %
- Concerning minimum %
- Critical maximum %
- Set windows:
- Evaluation window (days)
- Tardy window (days)
- Configure automation:
- Auto-notify parents ✓/✗
- Auto-create interventions ✓/✗
- Set tardy threshold (minutes)
- Set max unexcused days
- Activate and save
Part 10: Raw events
Raw events capture attendance data from external sources.
Event properties
| Field | Type | Description |
|---|---|---|
id | string | Event ID |
studentId | string | Student (if applicable) |
staffId | string | Staff (if applicable) |
contextType | enum | Where recorded |
contextId | string | Class/transport/dorm ID |
eventDirection | enum | In/out/mark |
eventTime | datetime | Timestamp |
source | string | Device/system source |
deviceId | string | Device identifier |
location | string | Physical location |
rawPayload | object | Original data |
processed | boolean | Converted to record |
processedAt | datetime | When processed |
attendanceRecordId | string | Linked record |
Context types
| Context | Description |
|---|---|
class | Classroom attendance |
transport | School bus/van |
dorm | Dormitory/boarding |
meal | Meal attendance |
event | School event |
staff_work | Staff work hours |
Event directions
| Direction | Description |
|---|---|
in | Checked in |
out | Checked out |
mark | Status marked |
Processing raw events
Raw events from biometric/RFID systems are processed into attendance records:
- Events collected throughout day
- End-of-day processing runs
- Events matched to students
- Records created automatically
- Statistics updated
- Interventions triggered if needed
Part 11: Pattern analysis
The system analyzes attendance patterns to identify issues.
Pattern types detected
| Pattern | Description |
|---|---|
| Day-of-week | "Student absent every Monday" |
| Time-of-day | "Student late in morning sessions" |
| Frequency | "3+ absences per month" |
| Seasonal | "Absences increase in winter" |
| Subject-specific | "Absent for math classes" |
Pattern analysis output
{
studentId: "...",
patterns: [
{
type: "day_of_week",
description: "Absent on Mondays (80% of Monday absences)",
frequency: 4,
dayOfWeek: 1
}
],
recommendations: [
"Schedule parent meeting to discuss Monday absences",
"Consider counseling referral"
]
}
Part 12: Notifications
The system sends attendance notifications automatically.
Notification triggers
| Trigger | Notification |
|---|---|
| Absent marked | "Your child was marked absent today" |
| Late marked | "Your child arrived late at {time}" |
| Low attendance | "Attendance rate has fallen to {rate}%" |
| Intervention created | "An attendance intervention has been opened" |
| Pattern detected | "We've noticed an attendance pattern" |
Notification channels
| Channel | Description |
|---|---|
| SMS | Text message to parent |
| Email notification | |
| Push | Mobile app notification |
| In-app | Portal notification |
Notification settings
Per student or policy:
- Enable/disable auto-notifications
- Choose notification channels
- Set quiet hours
- Language preference
Part 13: Reports
Generate comprehensive attendance reports.
Report types
| Report | Description |
|---|---|
| Daily Summary | Today's attendance by class |
| Weekly Report | Week-over-week comparison |
| Monthly Report | Monthly trends and patterns |
| Student Report | Individual student history |
| Class Report | Class-level analysis |
| Grade Report | Grade-level comparison |
| Intervention Report | Open/closed interventions |
| Trend Analysis | Long-term trend visualization |
Report filters
| Filter | Options |
|---|---|
| Date range | Custom, week, month, term, year |
| Grade level | Single or multiple |
| Class | Single or multiple |
| Status | Filter by attendance status |
| Session type | Morning, afternoon, full day |
Export formats
| Format | Description |
|---|---|
| Formatted report document | |
| Excel | Spreadsheet with data |
| CSV | Raw data export |
Permissions required
| Action | Required permission |
|---|---|
| View dashboard | attendance.view |
| View records | attendance.records.view or attendance.view |
| Mark attendance | attendance.records.create or attendance.create |
| Edit attendance | attendance.records.update or attendance.update |
| Delete attendance | attendance.records.delete or attendance.delete |
| Bulk mark | attendance.records.create or attendance.create |
| View stats | attendance.stats.view or attendance.view |
| View interventions | attendance.interventions.view or attendance.view |
| Create intervention | attendance.interventions.create or attendance.create |
| Manage intervention | attendance.interventions.update or attendance.update |
| Close intervention | attendance.interventions.update or attendance.update |
| View policies | attendance.policies.view or attendance.view |
| Manage policies | attendance.policies.update or attendance.update |
| Export reports | attendance.reports.export or attendance.view |
Best practices
Daily marking
- Mark attendance at the same time each day
- Use the class register for efficiency
- Record arrival times for late students
- Add notes for unusual circumstances
- Verify substitutes mark attendance
Interventions
- Review at-risk list daily
- Assign interventions promptly
- Document all actions taken
- Follow up within due dates
- Close interventions with outcomes
Policies
- Set realistic thresholds
- Review policies each term
- Enable auto-notifications for absences
- Configure intervention triggers
- Communicate policies to parents
Data quality
- Review unprocessed raw events
- Correct errors same day
- Verify biometric/RFID syncs
- Audit records weekly
- Recalculate stats if discrepancies found
Troubleshooting
Attendance not saving
Causes:
- Network connectivity issue
- Session expired
- Conflicting updates
Fix:
- Check network connection
- Refresh page and retry
- Clear browser cache
- Force save with Ctrl+S
Statistics incorrect
Causes:
- Records modified after calculation
- Missing days in date range
- Duplicate records
Fix:
- Navigate to student stats
- Click Recalculate
- Verify source records
- Check for duplicates
Intervention not auto-created
Causes:
- Policy not active
- Auto-create disabled
- Student exempt
- Threshold not crossed
Fix:
- Verify policy settings
- Check auto-create enabled
- Review student exemptions
- Manually create if needed
Biometric events not processing
Causes:
- Device offline
- Student not enrolled
- Processing job failed
Fix:
- Check device connectivity
- Verify student biometric enrollment
- Manually trigger processing
- Contact IT if recurring
Related documentation
- Students — Student records
- Classes and academics — Class rosters
- Communications — Parent notifications
- Reports — Attendance reports
- Dashboard — School-wide metrics