Hage Plus Docs
v1.0

Introduction

Hage Plus is a cloud School ERP for K-12 schools. This guide walks you through setting up a school from scratch and running it day to day — in the order the system expects.

The setup order matters

Each step depends on the one before it. You can't add students before classes exist, and you can't bill before fees exist. Follow the Set up your school section top to bottom:

Create school → Academic year → Settings → Classes → Subjects → Staff → Fees → Payment methods

Then move to Run your school to admit students, build timetables, run exams, collect fees and open the portals.

Prefer to explore first?
Run the Demo Seeder to instantly create a fully-populated demo school (classes, subjects, staff, students, timetable, exams, invoices). Every password is 123456. Use it only on a training/staging site.

Where to click

Everything is reached from the left sidebar of the admin app. Throughout this guide a path like Academic › Classes means: open Academic in the sidebar, then Classes. You can also go straight to a screen by URL, e.g. …/academic/classes.

Note
Exact menu labels depend on your role and permissions. If you can't see a menu, you may not have permission — ask a super-admin.

How the app works

Three ideas explain almost everything you'll see: roles, the school, and the academic year.

Roles

There are five roles. Each sees a different app:

RoleWhat they do
Super AdminManages all schools; creates schools; switches the "working school".
AdminRuns one school — the day-to-day operator.
TeacherAttendance, marks, timetable (admin app + teacher portal).
GuardianParent portal — their children's fees, attendance, results.
StudentStudent portal — own marks, schedule, finance.

One school = one tenant

Every record (student, invoice, class…) belongs to a school. A super-admin sees all schools and picks a working school from the profile menu; everyone else only ever sees their own school.

The academic year

The school's running academic year scopes enrolments, results and invoices. When you start a new year you create it and set it as running — old data stays intact under the previous year.

If data looks "missing"
You're almost always on the wrong working school or academic year. Reset both from the profile menu (top-right).

Step 1 · Create a school

A school is the container for everything else. Only a Super Admin can create one.

Steps

  1. Open the schools screen. In the sidebar go to Manage School › Schools (URL …/administrator/school), then click Add.
  2. Enter the basics. School name, short code/branch name, address, phone and email.
  3. Upload the logo. It appears on the dashboard, printed timetables, receipts and report cards. Use a square PNG/SVG.
  4. Save. The school is created but not yet usable — continue to the academic year.
  5. Activate the licence (if your deployment uses licensing). On local/dev hosts licensing is bypassed automatically.
Multi-branch
Each physical campus is its own school record. Create one per branch — a super-admin switches between them with the working-school selector.
Result
The new school appears in the school list and in the super-admin's working-school selector.

Step 2 · Create the academic year

The academic year (or "session") is the calendar everything hangs off. A school needs a running year before you can enrol students or run exams.

Steps

  1. Open the academic year screen. Go to Setting › Academic Year (also called Session; URL …/setting/session). Click Add.
  2. Name the year. Use a clear label such as January 2026 – December 2026.
  3. Set the start and end dates for the year.
  4. Save.
  5. Make it the running year. Mark the new year as current / running for the school (this sets the school's academic year). New enrolments and invoices will use it.
Important
If a school has no running academic year, the Add-Student and exam screens will refuse to save. Always set the year before enrolling.
Result
The topbar / profile menu shows the current year, and it appears in the academic-year switcher.

Step 3 · School settings

Set the basics that shape money, dates and language before you add data.

What to set

  1. Currency & symbol. Used across fees, invoices and the portal (e.g. $).
  2. Date format. How dates display everywhere.
  3. Language & RTL. Choose the interface language; enable right-to-left if using Arabic.
  4. Unpaid-invoice limit. How many unpaid invoices flag a student as "reached the limit" (used in debt reports).

These live under Setting › General / School Setting. Save when done.

Tip
Set the currency before creating fees so every amount reads correctly from the start.

Step 4 · Classes & sections

A class is a grade (e.g. Grade 1). A section is a group inside it (e.g. A – Morning). Students are enrolled into a class + section.

Create classes

  1. Open classes. Academic › Classes (URL …/academic/classes) → Add.
  2. Name the class (e.g. Grade 1, Form One).
  3. Pick the level — Primary, Middle or Secondary. Levels let you generate timetables and group subjects across grades.
  4. Save, and repeat for every grade.

Create sections

  1. Open sections. Academic › SectionsAdd.
  2. Choose the class the section belongs to.
  3. Name the section (e.g. A, B).
  4. Set the shift — Morning, Afternoon, Full-day or Night. Shifts drive timetable generation.
  5. Save, and repeat for each section.
Result
The class + section dropdowns are now populated for admissions, timetables and exams.

Step 5 · Subjects & teachers

Subjects are defined once school-wide, then attached to each class and assigned to teachers.

a. Subject Master (school-wide list)

  1. Open Subject Master. Academic › Subject MasterAdd.
  2. Add every subject the school teaches (Mathematics, Af-Soomaali, اللغة العربية, Science…). Optionally set a display order so subjects always sort the same way.

b. Class Subjects (which subjects each class takes)

  1. Open Class Subjects. Academic › Class Subjects.
  2. Pick a class (or level) and tick the subjects it studies. Levels share the same subjects, so you can set a whole level at once.
  3. Save.

c. Teacher Assignments (who teaches what)

  1. Open Teacher Assignments. Academic › Teacher Assignments.
  2. Choose a teacher, then tick the classes/subjects they teach for the current year.
  3. Save.
Do subjects before timetables & exams
The timetable generator and exam scheduling both read from the subjects assigned here.

Step 6 · Staff & logins

Add the people who run the school: a school admin, teachers, and other employees. Each gets a login.

School admin

Create an Admin user for the school so the principal/office can operate it without a super-admin. (A super-admin creates this.)

Teachers

  1. Open Manage Teacher. Teacher › Manage Teacher (URL …/teacher) → Add.
  2. Fill name, phone, department/designation, and a username for login.
  3. Save. The teacher can now be assigned subjects and classes.

Employees (HR)

  1. Open Employees. HRM › EmployeeAdd. Create departments & designations first if needed.
  2. Choose the role (accountant, librarian, receptionist…) — this controls what they can access.
Passwords & credentials
Open any teacher/employee's detail view → Account tab to see the username, reveal/copy the password, or change it.

Step 7 · Fees & discounts

Define what you charge (fee types) and any reductions (discounts/scholarships) before you admit students, so billing works from day one.

a. Fee types (income heads)

  1. Open income heads. Accounting › Income HeadAdd a fee type (Tuition, Transport, Hostel…).
  2. Set the amounts per class under Accounting › Fees so each grade bills the right figure.

b. Discounts & scholarships

  1. Open discounts. Accounting › DiscountAdd.
  2. Set the percentage (e.g. 100 = full scholarship, 50 = half).
  3. Scope it (optional). Tick specific fee types the discount applies to, or leave blank for all.
  4. Save. Discounts are picked in the Add-Student billing step.
Good to know
A line or invoice that nets to zero is auto-marked Paid / Fully Waived — that's expected, not a bug.

Step 8 · Payment methods (Bill Config)

Tell parents how to pay. What you configure here is exactly what shows in the parent portal's "How to pay" panel.

Steps

  1. Open Bill Config. Setting › QR Code Bill Config (URL …/setting/billconfig).
  2. Pick the school (super-admin) and click Add a method.
  3. Choose the channel — USSD (mobile money like EVC Plus / Zaad / Sahal), Bank, or QR.
  4. Enter the details — the dial code / number / QR data, and a label parents will recognise.
  5. Save.
Why parents see no "How to pay"
The panel appears only when (a) a payment method is configured here and (b) the student actually owes money. No config or a zero balance → nothing shows.

Admit a student

With setup done, enrol students through the Add-Student wizard — it also creates the guardian and the first invoice.

  1. Open Add Student. Manage Student › Add Student (URL …/student/add).
  2. Student details — name, gender, date of birth, class & section, photo.
  3. Guardian — link an existing guardian or create a new one (their phone becomes their portal login).
  4. Billing step — review the fee preview, pick a discount/scholarship if any, and confirm. Fully-waived lines show as Free.
  5. Review & submit. The student, guardian, enrolment and first invoice are created together.
Later changes
From Manage Student › Student List you can edit, view, change status (drop/passed/graduated), or transfer a student to another class or school.

Generate a timetable

Build a conflict-free routine automatically, then print it with your school's branding.

  1. Open the generator. Academic › Timetable Generator (URL …/academic/timetable_generator).
  2. Choose the scope — a single class, a whole level, or the entire school.
  3. Pick the shift (morning / afternoon) and any subject rules (e.g. back-to-back "double" periods).
  4. Generate. The system schedules subjects & teachers without clashes.
  5. Review & print. Use Color Print / Standard Print for a branded, colour-coded timetable.
View existing routines
Academic › Routine shows the timetable by Whole School, Class, Teacher or Subject.

Take attendance

Record daily student attendance; teachers can also do this from the teacher portal.

  1. Open attendance. Attendance › Student Attendance.
  2. Choose class, section and date.
  3. Mark each student Present / Absent / Late (default is Present).
  4. Save. Parents see the summary in the portal.
Exam attendance is different
Absence in exams comes from Room Attendance (see the exam guide), not from daily attendance.

Run an exam (full flow)

One guided cycle from creating the exam to publishing results to the portal.

  1. Create the exam. Exam › ExamAdd (name it, e.g. Mid Term 2026; set pass mark, and whether to show rank / pass-fail).
  2. Schedule it. Exam › Schedule — set date, time and room per class + subject. The system blocks clashes and out-of-range dates.
  3. Seat students & take Room Attendance. Assign students to rooms, then in Exam › Room Attendance untick anyone absent (seated students are present by default). This is the single source of truth for absence.
  4. Enter marks. Exam › Marks — enter Total/Obtained per subject; the grade auto-computes by percentage, and Absent is read from Room Attendance.
  5. Publish. Exam › Publish — this builds each student's result, class rank & pass/fail, locks the marks, and reveals results in the portal.

Outputs to print

After publishing: Result Card (per student), Mark Sheet (class matrix), Merit List, and Final Result (year aggregate) — each with the school logo, grade key and signature block.

Common mix-up
If a report card shows the wrong "Absent", fix it in Room Attendance and re-publish — editing marks won't change it.

Invoicing & payments

Bill students, record payments, and track who owes what.

  1. Open the invoice manager. Accounting › Invoice (URL …/accounting/invoice).
  2. Create an invoice for a student (fee types, discount, month). Admissions also create the first invoice automatically.
  3. Record a payment. Open the invoice → Pay Now, enter the amount and method. Status updates to Paid / Partial.
  4. Read the fee-status report to see paid / partial / overdue, and the "reached unpaid limit" list to chase debt.
Also here
Print receipts, issue refunds, and set payment promises for parents who commit to pay by a date.

SMS & notices

Reach parents instantly and post school-wide announcements.

Set up an SMS gateway

  1. Open SMS settings. Setting › SMS. Pick a gateway (Hormuud, Twilio, Plivo…) and enter its credentials.
  2. Send a test to your own number before going live.

Notices, events & news

Post announcements from the relevant module; they surface to parents in the portal and on the school website.

If SMS won't send
Check the gateway credentials, account balance/credit, and the sender/number format.

Enable the portals

Get parents, students and teachers into the self-service portal at /portal/.

Three things every portal user needs

  1. The right login ID — student = admission no., guardian = phone, teacher = username.
  2. A password — set or reset it from the person's detail view → Account tab (Change Password).
  3. Mobile login turned on — the user's mobile_login_enabled must be 1, or login is refused with "Mobile login is disabled".

What they can do

ParentStudentTeacher
Fees & statement, attendance, results, timetable, notices, how-to-pay Own marks & transcript, timetable, finance, profile Today's classes, mark entry, attendance, timetable
Hand-out
Give each family their login ID + password and the portal URL. They log in and immediately see fees, attendance and results.

Roles & logins

Who logs in with what, and where.

RoleLogs in withWhere
Super AdminUsernameAdmin app (all schools)
AdminUsernameAdmin app (one school)
TeacherUsernameAdmin app + Teacher portal
GuardianPhoneParent portal
StudentAdmission no.Student portal
Reset a password
Open the student / guardian / teacher detail → Account tab → reveal/copy the current password, or set a new one. Portal login also needs mobile_login_enabled = 1.

Troubleshooting

The most common issues and how to fix them. you fix · check a setting · escalate

SymptomCause & fix
"Invalid login or password"Wrong ID or password. Parent = phone, student = admission no, teacher = username; demo pwd 123456. Reset via the Account tab.you fix
"Mobile login is disabled"The user's mobile_login_enabled is not 1 — enable it.check
Parent login shows the student's dataThe ID matched a shared contact field. Log in with the exact username (guardian = phone).check
No "How to pay" for a parentNo Bill Config, or the balance is 0. Add a method; confirm they owe.check
Results/rank missing in portalExam not published, or rank/pass-fail disabled. Publish; enable the options.you fix
"Absent" wrong on a report cardAbsence comes from Room Attendance — fix there & re-publish.you fix
Empty dropdown when adding a student/invoiceA setup step is missing — walk back up the setup order (class, subject, fee, year).you fix
Data "disappeared"Wrong working school or academic year — reset both in the profile menu.you fix
System very slow / licence errorCache not writable, or licence/clock issue. Escalate to engineering with the details.escalate
Never on a live school
No direct database edits, no Demo Seeder on real tenants, and no licence/token changes without engineering.

Glossary

The terms used throughout this guide.

School / tenantOne school's isolated data. Super-admin sees all; others see one.
Academic yearThe running year that scopes enrolments, results & invoices.
Class / sectionGrade and the group within it (with a shift) that students enrol into.
Subject MasterThe school-wide subject list; class subjects are created from it.
Income headA fee type (Tuition, Transport…).
Bill ConfigThe payment methods shown to parents in the portal.
Room AttendanceThe source of truth for exam absence.
Publish (exam)Builds results, rank & pass/fail, locks marks, reveals to portal.
mobile_login_enabledPer-user switch required for portal login.
Working schoolThe school a super-admin is currently operating within.