Chapter 19 — School Management
Module code: SCHOOL
Features: school_dashboard, school_config, school_students,
school_admissions, school_attendance, school_calendar, school_timetable,
school_academics, school_diary, school_fees, school_promotion,
school_reports, school_welfare
Home: /school/
The school module is large. Use this table to go straight to your area.
| Area | Section |
|---|---|
| Setting the school up | 19.3 |
| Students and admissions | 19.4–19.6 |
| Attendance | 19.7 |
| Timetable and teacher workspace | 19.8–19.10 |
| Exams, marks and report cards | 19.11 |
| Fees | 19.12 |
| Promotion to the next year | 19.13 |
| Parent access | 19.14 |
| Welfare and sponsorship | 19.15 |
| Reports | 19.16 |
19.1 What the module is for
The school module runs an education institution: enrolling students, taking the register, building the timetable, recording marks, issuing report cards and collecting fees. Fees post to the same accounting ledger as everything else, so the school's finances are not a separate system that has to be reconciled by hand.
19.2 Concepts
| Concept | Meaning |
|---|---|
| Institution | The school. A group can run several. |
| Campus | A physical site of an institution |
| Academic year | The session — 2026-27 |
| Grade | A class level — Grade 5 |
| Section | A class group within a grade — Grade 5-B. Attendance and timetables are per section. |
| Subject | A taught subject |
| Class–subject assignment | Which teacher teaches which subject to which section. Required before assessments or diary entries can exist. |
| Period | A slot in the school day |
| Timetable slot | A period on a day, filled by a class–subject assignment |
| Exam term | A reporting period — First Term, Mid Year |
| Assessment | One assessed piece — a test, an assignment, an exam |
| Fee voucher | One student's fees for one period |
| Guardian | A parent or carer. One guardian record can cover several siblings. |
19.3 Setting the school up
Do this in order. Each step needs the one above.
/school/config/schools/ institutions
/school/config/campuses/ campuses
/school/config/years/ academic years
/school/config/grades/ grades
/school/config/sections/ sections
/school/config/subjects/ subjects
/school/config/periods/ periods in the school day
/school/config/calendar/ the academic calendar
/school/config/exam-terms/ exam terms
/school/config/grading-weights/ how assessment kinds are weighted
/school/config/letter-grades/ the letter grade scale
1. Institution and campuses
Create the institution with its name, address and contact details. Add a campus for each site. Everything else belongs to an institution.
2. Academic year
Create the year with its start and end dates, and mark the current one active.
3. Grades and sections
Create each grade, then the sections within it. Set each section's capacity and its class teacher.
4. Subjects
Create the subjects taught, with their codes.
5. Class–subject assignments
Screen: /school/config/class-assignments/
Record which teacher teaches which subject to which section. This is the step most often missed, and almost everything downstream depends on it — the timetable is built from assignments, assessments belong to one, and the teacher's own screens are scoped by them.
6. Periods
Screen: /school/config/periods/
Define the school day: period 1 from 08:00 to 08:40, and so on, including breaks.
7. The academic calendar
Screen: /school/config/calendar/
Term dates, holidays and events. Attendance and fees both read it.
8. Document requirements
Define which documents a student must supply at admission — birth certificate, previous school record, photographs — so an incomplete file is visible rather than discovered later.
19.4 Admissions
/school/admissions/ application list
/school/admissions/<id>/admit/ admit an applicant
- An application is recorded with the student's details, the grade applied for and the guardian's details.
- Review the application and the documents supplied.
- Select Admit. The applicant becomes a student and is enrolled into a section.
19.5 Students
/school/students/ list
/school/students/new/ add a student
/school/students/<id>/ detail
/school/students/<id>/edit/ edit
/school/students/<id>/documents/upload/ upload a document
/school/students/<id>/photo/upload/ upload a photograph
/school/students/<id>/id-card/ print an identity card
Adding a student
- Select New student.
- Personal — name, date of birth, gender, place of birth, nationality, and the identity number where one is used.
- Guardian — the parent or carer, their relationship, phone, email and address. Where siblings share a guardian, use the same guardian record; that is what lets one parent login cover all their children.
- Enrolment — the academic year, grade and section, the admission date, and the admission number.
- Medical and other — allergies, conditions, emergency contact.
- Save.
- Upload the photograph and the required documents.
Print the identity card from /school/students/<id>/id-card/.
19.6 Enrolment
A student is enrolled into a section for an academic year. Moving a student between sections mid-year is an enrolment change, not an edit of history — the register for past dates stays with the section they were actually in.
19.7 Attendance
/school/attendance/ attendance list
/school/attendance/mark/<section-id>/ take the register for a section
/school/attendance/report/ attendance report
Taking the register
- Open
/school/attendance/and choose your section, or go straight to the marking screen. - The roster is shown with a status control against each student.
- Mark each student present, absent, late or on leave.
- Save.
Attendance is taken once a day per section, not per period.
Absence notifications
When a student is newly marked absent, a notification is queued to the guardian. Every
notification is recorded at /school/notifications/, with its status, so you can see
what was sent and what was not.
Check what your installation actually sends. In a default installation the WhatsApp provider is a stub: the message is recorded but not delivered. A live provider has to be configured before parents genuinely receive anything. The notification log shows the difference.
Reports
/school/attendance/report/ gives attendance by student, section, grade or date range,
with percentages. Use it to find chronic absence early, which is the point of taking a
register at all.
19.8 Timetable
/school/timetable/ the grid
/school/timetable/teacher/<id>/ one teacher's week
/school/timetable/workload/ teaching load per teacher
/school/timetable/substitutions/ cover arrangements
/school/timetable/substitutions/new/ arrange cover
Building it
- Confirm periods and class–subject assignments exist.
- Open
/school/timetable/and choose a section. - Fill each period on each day with a class–subject assignment.
- Save.
Clashes are checked as you go. A teacher cannot be in two places at once, and a room cannot hold two classes. The system refuses the clash rather than accepting it and letting you find out on Monday.
Workload
/school/timetable/workload/ shows periods per week per teacher. Use it to balance
allocation before the term starts.
Substitutions
Screen: /school/timetable/substitutions/new/
When a teacher is away:
- Choose the date and the slots to cover.
- Choose the covering teacher. The system offers teachers who are free in that period — and it excludes anyone on approved leave in the HR module, so you are not offered somebody who is not in the building.
- Save.
The covering teacher's own screens then include the covered class for that day: they can take its register and write its diary. The arrangement is day-scoped, so it does not linger.
19.9 The teacher workspace
Screen: /school/my-classes/
A teacher's own home page.
| Panel | Shows |
|---|---|
| Today | Today's periods, in order, with quick links to take the register and write the diary |
| Needs attention | Registers not taken, assessments with marks missing, assessments coming up |
| My classes | Every class–subject assignment held |
| Covering today | Any classes being covered today |
If a teacher's account is not linked to an employee record, the page says so plainly rather than showing them somebody else's classes. Fix it by linking the account (Chapter 4).
19.10 Lesson diary and homework
/school/diary/ diary list
/school/diary/new/ new entry
/school/diary/<id>/ edit
A diary entry records what was taught and what was set as homework for one class on one day.
- From the teacher workspace, select Add diary on a period — the class, subject and date are filled in.
- Enter what was covered and the homework.
- Attach worksheets or reference material.
- Save as draft, or publish.
Teachers may edit their own entries, and entries for classes they are covering today. Staff with school-wide rights may edit any.
Draft against published is a real distinction: a draft is a plan, a published entry is the record parents may see.
19.11 Exams, marks and report cards
Home: /school/academics/
Setting up grading
1. Exam terms — /school/config/exam-terms/ — First Term, Mid Year, Final, with
their dates.
2. Assessment weights — /school/config/grading-weights/ — how much each kind of
assessment counts towards the term grade, per grade and year. A common split is 70%
exam, 20% test, 10% assignment.
3. Weight templates — reusable weighting patterns that can be applied to a grade and term in one action instead of being retyped for each. Seeded defaults are provided.
4. Letter grade bands — /school/config/letter-grades/ — the percentage ranges for
A, B, C and so on. The scale belongs to the institution, so a school with its own scale
sets it here rather than living with a default.
Creating an assessment
- Open
/school/academics/and choose the section and term. - Select New assessment.
- Enter the subject, the kind (test, assignment, exam), the name, the date and the maximum mark.
- Save.
An assessment belongs to a class–subject assignment, which is why those must exist first.
Entering marks
- From the academics hub, open the assessment and choose Mark entry.
- The class roster is shown as a grid.
- Enter each student's mark. Marks above the maximum are refused.
- Save.
Report cards
- From the academics hub, open Report card for a student.
- The card shows each subject's assessments, the weighted term result, and the letter grade from the institution's bands.
- Print it from the printable version.
Gradebook export
Export marks to CSV or Excel — either a whole section and term, or a single assessment. Available from the academics hub and from the mark entry screen.
Notifying results
Notify results on the mark entry screen or the report card queues a message to guardians. Like absence notifications, delivery depends on a live provider being configured; the notification log records what was queued either way, and can be filtered to results messages.
19.12 Fees
Home: /school/fees/
/school/fees/ outstanding fees hub
/school/fees/types/ fee types
/school/fees/structures/ fee structures
/school/fees/generate/ generate vouchers
/school/fees/vouchers/<id>/ voucher detail
/school/fees/vouchers/<id>/post/ post it to the ledger
/school/fees/vouchers/<id>/pay/ register a payment
/school/fees/vouchers/<id>/refresh-waiver/ refresh a campaign waiver
/school/fees/vouchers/<id>/apply-contributions/ apply sponsor contributions
/school/fees/import-payments/ import payments from a file
/school/fees/payment-claims/<id>/confirm/ confirm a parent's payment claim
/school/fees/payment-claims/<id>/reject/ reject one
Before you start
Fees post to the accounting ledger, so Chapter 12 must be set up: a chart of accounts, a sales journal, and a receivable account.
1. Fee types
/school/fees/types/ — tuition, transport, examination, laboratory, uniform. One type
per genuinely separate charge, because the type is how income is reported.
2. Fee structures
/school/fees/structures/
A structure states what a grade pays in a year.
- Select New structure.
- Choose the institution, grade and academic year.
- Add a line for each fee type with its amount.
- Add instalments if fees are paid in parts — monthly, termly. The generator then produces one voucher per instalment per student.
- Save.
3. Generating vouchers
/school/fees/generate/
- Choose a section, or a grade and year to cover everyone.
- Choose the period.
- Generate.
A voucher is created for each student: the gross amount from the structure, any waiver, and the net payable. Vouchers are created as drafts.
Where a fundraising campaign covers a student's costs (Chapter 20), the waiver is pre-filled from it. Refresh it later with Refresh waiver if the campaign has raised more since.
4. Waivers
On a draft voucher, enter a manual waiver — a scholarship, a sibling discount, a hardship reduction. The net payable reduces accordingly.
Waivers can only be changed while the voucher is a draft. That is the control: once posted, a change means a credit note, which leaves a trail.
5. Posting
Post turns the voucher into a customer invoice in the ledger. The family owes the money from that moment, and the fee appears in the accounting reports.
6. Taking payment
| Route | Screen |
|---|---|
| At the office | /school/fees/vouchers/<id>/pay/ — record the amount, method and reference |
| Bulk from a bank file | /school/fees/import-payments/ — upload the file; matched payments are registered and unmatched ones reported for follow-up |
| Parent claims a payment online | The parent submits a reference through the portal; staff confirm it at /school/fees/payment-claims/<id>/confirm/ |
| Sponsor contributions | Apply contributions on a draft voucher, drawing on posted contributions for that student |
Payment claims
A parent paying by bank transfer submits the reference through the portal. It arrives in the pending queue on the fees hub.
Confirming a claim registers a real payment. Check it against the bank before confirming — the claim is the parent's assertion, not proof.
The fees hub
/school/fees/ shows outstanding fees and the pending claims queue. It is the daily
work list for the fees office.
19.13 Promotion to the next year
/school/promotion/ choose a section
/school/promotion/<section-id>/ preview and apply
At the end of the year:
- Open
/school/promotion/and choose a section. - Preview. Each student is listed with the section they would move into. Adjust anyone being held back or moved elsewhere.
- Check the whole list.
- Apply.
Preview properly. Promotion moves a whole section of children in one action, and unpicking it is slow. Read the list before applying, not after.
19.14 Guardian access
/school/guardian-access/ list of guardians and their access
/school/guardian-access/<id>/grant/ create a login
/school/guardian-access/<id>/revoke/ withdraw it
/school/guardian-access/<id>/reset/ reset the password
- Find the guardian in the list.
- Select Grant. A login is created and the credentials are shown once — copy them before leaving the page.
- Give the credentials to the parent.
One login covers every child on that guardian record, which is what makes siblings work properly.
Parents use the mobile app at /m/ — see Chapter 22 — where they
can see attendance, the diary, results and fees for each of their children.
Parents see only their own children. A parent who reaches another student's record by changing a number in the address receives "not found", not a permission error — telling them the record exists would leak the roll.
Granting, revoking and resetting all require edit rights, not just view. A read-only school account cannot create parent logins.
19.15 Welfare and sponsorship
/school/welfare/ welfare dashboard
/school/welfare/students/ welfare student list
Flags students who are orphans, eligible for zakat, or fee-sponsored, so the welfare office has a working list.
Donors and fundraising live in the Partners module, not here — see Chapter 20. A donor is a partner like any other, and a contribution posts to the ledger. This screen links across to campaigns.
19.16 Reports
/school/reports/teacher-activity/ what teachers have recorded
/school/reports/compliance/ what has not been done
/school/notifications/ notification log
Teacher activity
Per teacher: registers taken and how promptly, marks entered, assessments created, diary entries drafted and published, and the proportion of timetabled slots with a diary entry.
It is derived entirely from work already recorded, so nobody has to fill in a form about filling in forms.
Read it as a workload and support tool. A teacher with low diary coverage may be struggling with the system rather than with teaching.
Compliance
The gaps, today:
- Registers not taken today.
- Assessments past their date with marks missing.
- Timetabled slots in the review window with no diary entry.
Teachers with report rights see their own row and their own classes' gaps. School-wide staff see everything.
19.17 Routine
Daily
[ ] Every section's register taken by mid-morning — check the compliance report
[ ] Diary entries published for today's lessons
[ ] Arrange cover for absent teachers
[ ] Process fee payments received; confirm parent payment claims against the bank
Weekly
[ ] Review the compliance report and follow up the gaps
[ ] Review attendance for chronic absence
[ ] Review outstanding fees on the fees hub
Per term
[ ] Create assessments for the term
[ ] Enter marks by the deadline
[ ] Generate and check report cards
[ ] Generate the next period's fee vouchers
Per year
[ ] Create the new academic year, grades and sections
[ ] Run promotion, previewing every section
[ ] Create fee structures for the new year
[ ] Rebuild the timetable
19.18 Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| A teacher's screens are empty | No class–subject assignments, or the account is not linked to an employee | Create the assignments; link the account |
| An assessment cannot be created | No class–subject assignment for that section and subject | Create it |
| The timetable refuses a slot | The teacher or room is already booked in that period | The clash message names the conflict |
| No teachers offered for cover | They are all teaching, or on approved leave in HR | The list deliberately excludes both |
| A register cannot be taken | The section has no enrolled students, or the date is outside the calendar | Check the enrolment and the calendar |
| Marks will not save | A mark exceeds the assessment maximum | Correct it |
| A report card shows no grade | No assessment weights for that grade and term, or no letter grade bands | Configure both |
| Vouchers are not generated | No fee structure for that grade and year | Create the structure |
| A voucher cannot be posted | Accounting is not set up, or the period is locked | See Chapter 12 |
| A waiver cannot be changed | The voucher is posted | Issue a credit note instead |
| A parent cannot sign in | No guardian access granted, or the password was never given | Grant or reset it |
| A parent sees only one child | The children are on different guardian records | Put siblings on one guardian record |
| Granting access is refused | View-only school rights | Edit rights are required |
| Notifications are recorded but never arrive | The provider is a stub in a default installation | Configure a live provider |
| A student appears in the wrong class | The enrolment was not changed | Change the enrolment, not the history |