Fees first, everything else later
Ask a school what they want from an ERP and you’ll get a long list: timetables, homework, parent apps, library, hostel, canteen. Ask the bursar what keeps her up at night and it’s always fees.
We’d start there. When fees are wrong, parents lose trust quickly, the office drowns in phone calls, and cash flow suffers in a sector where it’s often tight. Get invoicing, concessions, instalments and reminders working properly, and the rest of the project has goodwill to spend.
Frappe Education, Odoo and the gap between them
On ERPNext, the Frappe Education app gives you a genuine head start. Students, Program Enrollment, Student Groups, Course Schedules, Student Attendance, Assessment Plans and Fee Structures with Fee Schedules that generate invoices. It’s aimed more at colleges than primary schools in places, but the bones are sound.
On Odoo, there’s no official app, so you’re choosing between a third-party addon and a module generated for you. Odoo’s portal, website forms and email templates are good, which helps with admissions and parent communication.
Neither handles the fee rules most schools actually have. Sibling discounts that depend on who else is enrolled, concessions that stack in a particular order, report card holds and mid-term changes to transport all need custom logic. Most of the school management module work we’re asked for is exactly this.
Three children, three instalments, worked through
Take a family with three children, all enrolled for the autumn term. The term fee is $2,400 per child, payable in three equal instalments.
- First child pays the full $2,400.
- Second child gets 10% off, so $2,160.
- Third child gets 15% off, so $2,040.
That’s $6,600 for the term, so $2,200 per instalment. Instalment one is due 1 September, two on 1 October, three on 1 November.
Instalment two goes unpaid. On 31 October the module emails the parent with the balance and a payment link. Report cards are due out on 20 November, and those for all three children are marked “held” until it clears. The principal, Mr Okafor, can override that for a family he knows is going through a hard time, and the override is logged with his name.
Then the eldest child leaves at Christmas. Does the middle child become the “first child” and lose their discount from January? Schools answer this differently, and we’d rather you decide before the module is generated than discover it when a parent complains. We’ll ask. The rule goes into one Python function with a test, so the bursar’s next policy change is a small edit, not a rewrite.
Admissions season is its own project
Admissions has a different rhythm from the rest of the year. Enquiries, applications, assessments, sibling and staff priority, offers, deposits and waitlists all happen in a few intense months. It’s worth treating as a separate module with its own statuses, not a handful of extra fields on Student.
A good admissions flow ends by creating the Student, the Program Enrollment and the first fee invoice in one step, so the office doesn’t retype a family’s details in September.
Buses and registers come next
Once fees are stable, transport and attendance are usually the next two requests, and they’re linked more than people expect. A transport module holds routes, stops and the students assigned to each. When a family changes address, the office moves the child to a new stop with an effective date, and the transport charge on the next instalment changes to match. No more old-stop billing until someone complains.
Attendance is simpler than vendors make it look. Teachers mark a register on a tablet at the start of each period or day. Anyone absent without a note triggers a text to the parent by 10am. Patterns (say, five unexplained absences in a half term) go to the pastoral lead. Keep the register screen to one tap per student, or teachers will go back to paper within a month.
Please don’t rebuild the LMS inside your ERP
Homework, lesson plans and online quizzes are well served by tools teachers already know. Rebuilding those in ERPNext or Odoo is expensive, and teachers will resent it. Keep the ERP for students, fees, attendance, staff payroll and school bus fleet management, and sync class lists outward. For how the generated code is structured, see ERPNext custom module development or Odoo module development.