Appendix

Appendix

Roles & Permissions matrix

Action / ViewSchool AdminPrincipalClass TeacherSubject TeacherParentStudent
School Configuration (Ch. 1)Full
Approve staff requests (Ch. 2)Yes
Take Attendance for a classAny classAny classOnly their assigned class/section (Ch. 7.1) — no assignment means no access to any classOnly class/sections they’re mapped to teach (Ch. 6.2); in Period-wise mode, only the exact period they’re scheduled for
Correct already-submitted attendanceYes, with a reason
View Attendance ReportYesYes
View a class/section’s full Timetable gridAny classAny classOnly their assigned class/sectionOnly class/sections they’re mapped to teach
"My Timetable" (own periods only)YesYesYesYes
View own child’s Fees / Timetable / AttendanceOwn children only
Submit a leave requestOwn children only
Compose / Publish / Unpublish the Diary (Ch. 11)Any classCorrection-only, not routine composingOnly their assigned class/sectionOnly class/sections they’re mapped to teach
Read the Diary / mark homework done / ClassIQ (Ch. 11)Own children only, on their behalfOwn record only
Upload syllabus material / ClassIQ Preview Mode (Ch. 11)YesYesYes
Diary Analytics + delegate teacher access (Ch. 11)YesYesOnly if granted, for their own class/sectionOnly if granted, for their own class/section
ClassIQ query log / cost view
ClassIQ activity is Super Admin-only, by design

Unlike every other row in this table, no in-school role — not even Principal — can see the ClassIQ query log or its cost-reference view. That visibility exists only in Stavion's own Super Admin console, a deliberate security decision made when this module was built.

Deny-by-default

As of 2026-07-05, a Class Teacher or Subject Teacher with no assignment/mapping configured has no access to any class — there is deliberately no permissive fallback. Assigning a Class Teacher (Ch. 7.1) and creating Teacher-Subject Mappings (Ch. 6.2) are required setup steps, not optional ones, before those roles can use Attendance or view a class Timetable. See Chapter 7.6 for the full access-decision logic.

Known Issues / Release Notes

Building this guide end-to-end through the real CampusOS UI (rather than seeded test data) surfaced four real product gaps, all fixed as part of this exercise:

1. Student creation rejected for any school without multiple branches configured. The student form sent an empty branch_id by default, which the backend’s UUID validation rejected outright — breaking student admission entirely for the ~95% of schools with a single branch. Fixed by omitting the field when no branch is selected.
2. Timetable dropdowns silently empty for classes/staff with no branch assignment. Several timetable queries matched branch_id exactly, excluding every teacher/class with a NULL branch (the default for a single-branch school created through the UI, as opposed to a seed script). Fixed to treat NULL as "no branch restriction" alongside an exact match.
3. Take Attendance always defaulted to Daily mode, regardless of the school’s real setting. The configuration endpoint that supplies the school’s attendance mode was blanket-restricted to School Admin/Principal, silently failing for teachers. Fixed by opening the read-only configuration endpoints to any authenticated role (the data they return was already redacted of secrets) while keeping the actual write endpoints admin-only.
4. Attendance and Timetable access was not scoped to a teacher’s actual assignment. Before this fix, any Class Teacher or Subject Teacher could take attendance for, or view the timetable of, any class in the school — not just their own. Fixed with the deny-by-default scoping described in Chapter 7.6 and the matrix above.
5. Composer's uploaded Attachment stopped displaying after an Unpublish/re-publish cycle — fixed 2026-07-15. The file itself was never lost — it stayed correctly stored and downloadable from the Student and Parent Reader throughout — but the Composer's own Attachment block forgot it had a file and showed "No file chosen" again after the page was unpublished and reloaded. Root cause: the Composer never fetched a block's existing attachment on load, only ever reflecting one just uploaded in that same browser session. Fixed by giving the Composer the same attachment lookup the Reader already had.
6. ClassIQ's natural-language search could return zero results for a query a plain filename search would have matched — fixed 2026-07-15. For a short, generic query (e.g. a single word), the AI parser that turns free text into search filters could invent a date range or file-type filter that was never actually part of the question, incorrectly excluding a real match. Fixed by cross-checking each inferred filter against the actual query text and dropping anything with no real textual basis, rather than trusting the AI's own instruction to "only include what's mentioned" unconditionally.

Glossary

Fee Component — a single named charge (e.g. Tuition Fee).
Fee Structure — a class’s set of installments, each grouping components under one due date.
Concession — a discount rule (percentage or fixed) applied to an individual student’s fees, optionally requiring a supporting document.
Challan — the computed, per-student fee bill for an installment, after concessions are applied.
Maker-checker — a workflow where the person who submits a request can never also approve it.
Feature toggle — a per-school on/off switch controlling whether a module or capability is visible/usable for that specific tenant (Ch. 1.3).
Core module — one of the four modules (Student Management, Attendance, Fee Management, Exam Results) that can never be switched off.
Period-wise attendance — one attendance mark per student per timetable period, instead of one per day.
Class Teacher Assignment — the record naming which teacher owns a given class/section for Attendance and Timetable purposes.
Teacher-Subject Mapping — the record naming which teacher teaches which subject in which class/section.
Diary page — one class/section's homework diary for one date, made of individual blocks (Homework, Classwork, Reminder, Individual Note, Checklist, Attachment) composed by the class teacher.
Publish / Unpublish — a diary page is invisible to students/parents until published; editing a published page requires explicitly unpublishing it first, so nothing changes silently after a family has read it.
ClassIQ — an AI study assistant that answers a student's or parent's question strictly from the specific syllabus PDF their teacher uploaded for that subject and class, with a source citation on every answer — never the underlying AI model's own general knowledge for a subject that has real uploaded material.
ClassIQ Preview Mode — a teacher trying the same question-and-answer experience against their own uploaded material before students do; nothing asked here counts toward real usage logs.

Revision history

VersionDateChange
v1.02026-07-05Initial guide — School Configuration through Attendance, Class Promotion, and the Parent Portal, built end-to-end for Golden Jubilee CBSE.
v1.12026-07-05Rebranded to CampusOS by Stavion Technologies; split into a multi-page guide with a landing page, per-chapter navigation, and prev/next; added Key Concepts, process-flow, and access-decision diagrams throughout (most extensively in 1.3 Feature Toggles and 7.6 Attendance RBAC).
v1.22026-07-07Added Chapter 10 — Transport: routes/stops, vehicles and all three GPS tracking sources, driver consent and device pairing, assignments and the capacity waitlist, trip logs and live tracking (including the GPS breadcrumb "blue line" trip route history), incidents and substitute vehicles, parent change requests and not-travelling notices, the Compliance Dashboard and Route Cost Report, and the Parent Portal's own Transport view — built end-to-end against Golden Jubilee's real seeded fleet.
v1.32026-07-15Added Chapter 11 — Student Diary & ClassIQ: composing and publishing a diary page (Homework, Classwork, Reminder, Individual Note, Checklist, Attachment), the Unpublish/re-publish cycle, Diary Analytics and teacher access delegation, uploading syllabus material and asking ClassIQ (with source citations) as a teacher, student, and parent — driven by a real new admission (Kabir Nair, Class 1-A) rather than seeded diary content. Added two new Known Issues found while building it (Attachment display after Unpublish, ClassIQ natural-language search over-narrowing).
v1.42026-07-15Added Chapter 12 — Notifications: the in-app notification bell (unread badge, feed, mark-as-read, deep links) and the admin's Notification Log oversight screen, covering the Store & Inventory overdue-return reminder as its first real notification type.
v1.52026-07-16Added Chapter 13 — Store & Inventory: Catalog (Categories, Items, Size-Matrix Generator, Asset Unit Manager), Purchasing & Transfers, Issue & Return (single and bulk, including a Damaged return with a recovery charge), Billing (Class-wise Pricing, Student Item Selection, Fulfillment Queue), all seven reports, and delegated Store Access — built end-to-end against a new Sports Equipment Category and real serialized/billable demo items, not seed data.
v1.62026-07-15Both Known Issues from v1.3 fixed the same day: the Composer's Attachment block now correctly shows an existing upload after Unpublish/re-publish (it fetches existing attachments the same way the Reader already did, instead of only ever knowing about one just uploaded in the same browser session), and ClassIQ's natural-language search no longer lets a fabricated date-range or file-type filter silently exclude a real match for a short, generic query.
v1.72026-08-01Added Chapter 14 — Exams & Results: Marks Structure (board-suggested, fully custom), creating an exam and adding subjects, mark entry & submission, Principal review (approve, reject & publish), Results & report cards, and Exam seating arrangement.