Junior School

Junior School is a custom Frappe application that extends the core Frappe Education. It provides comprehensive tools for scheduling, attendance tracking, assessment management, and automated student lifecycle processes, specifically designed for multi-school environments.

Install Junior School

bench get-app https://github.com/navariltd/Junior-School

Add the Frappe Gems badge to your README

Maintain Junior School? Paste this into your README:

[![Listed on Frappe Gems](https://frappegems.com/api/method/frappe_gems.seo.badge?app=navariltd%2FJunior-School)](https://frappegems.com/gems/apps/navariltd/Junior-School)

About Junior School

📚 Frappe Education Extension

Junior School is a custom Frappe application that extends the core Frappe Education. It provides comprehensive tools for scheduling, attendance tracking, assessment management, and automated student lifecycle processes, specifically designed for multi-school environments.


Table of Contents


🚀 Project Overview

This extension was built to address the unique needs of junior school management, providing sophisticated tools for educational institutions that require multi-campus support, flexible scheduling, and automated administrative processes. The system maintains compatibility with standard Frappe Education while adding specialized functionality for enhanced school operations.


🔄 System Workflows

Core Process Flows

graph TD
    A[Student Registration] --> B[Auto ID/Email Creation]
    B --> C[Class Enrollment]
    C --> D[Attendance Tracking]
    D --> E[Assessments]
    E --> F[Report Generation]
    F --> G[Year-End Promotion]
    G --> H[Auto-Deactivation if Leaving]

    I[Timetable Setup] --> J[Define Subjects/Rules]
    J --> K[Assign Teachers/Rooms]
    K --> L[Generate Timetable]
    L --> M[Calendar View/Edits]

    N[Academic Year] --> O[Auto-Create Year]
    O --> P[Update Terms]
    P --> Q[Close Assessments]

Key Features

1. 🗓️ School Timetable Page

A new School Timetable View has been implemented using a calendar interface. Type Timetable in search bar and click on first suggestion Open Timetable.

Screenshot 2025-04-14 at 16 59 16

The key features include:

  • Calendar Display: Weekly timetable view (Sun–Sat) showing subjects, teachers, and streams.

  • Filtering Options:

    • Levels: e.g., Pre-primary, Primary

    • Teachers: Filter to view specific teacher schedules

      Screenshot 2025-04-14 at 17 03 03

    • Streams: Allows filtering based on class streams
  • Print Functionality: Filter as required and print the timetable (e.g., per teacher or per stream).

  • Assumption: The timetable repeats weekly, so only a one-week view is necessary.

Interactive Editing:

  • Users can click any scheduled session to view details in a modal pop-up.

  • The modal allows editing and submitting updates, which reflect on the backend immediately.

Screenshot 2025-04-15 at 17 28 08

  • The user can also click in a space and schedule a class.

2. ⚙️ Auto-Generation of Timetable

To streamline scheduling, an automated timetable generator has been introduced using a Single Doctype: Timetable Generator.

Screenshot 2025-04-14 at 17 05 50

Structure:

  • Main Fields:

    • Academic Year
    • Academic Term
    • Default Time Slots
    • Lesson Starts
    • Lesson Ends

Child Tables:

a) Subject Rules
Defines subject-level constraints:

  • Subject

  • Max Time per Session

  • Frequency Per Week

  • Allow Double Lessons?

  • Max Double Lessons Per Week

b) Slot & Breaks Tab

  • Time Slots Table: Define periods (e.g., period 1, 2...) with start/end times and durations.

  • Breaks Table: Define breaks like breakfast, lunch, etc.. The user must have created this in the Breaks doctypes, because it auto-populates the start and end time from the chosen break.

Screenshot 2025-05-28 at 21 25 14

c) Teachers Tab
Contains a child table Teacher Preference with:

  • Teacher Name

  • Assigned Subjects and Streams

  • Max Periods per Day/Week

This helps define teaching limits and areas of specialization.

d) Teaching Rooms
In the Teaching Rooms child table:

  • Assign specific rooms to each subject-stream combination.

  • Junior school rooms default to classes, with extras like labs or libraries.

Generation Flow:

  1. User fills in all the above data and save.

  2. Clicks Generate Timetable.

  3. The process is queued for backend scheduling due to time complexity.

  4. The system manages duplicate and failed schedules with internal retry/rescheduling mechanisms.

🛠️ Status:

  • Work in progress.

  • Some logic misbehaviors.

  • Double lessons are yet to be fully implemented.


3. 🧑🏽‍🎓 Enhanced Student Attendance

To support multi-shift attendance (e.g., morning & evening), the following has been introduced:

  • New Doctype: Enhanced Student Attendance Tool

    • Based on Student Attendance Tool with additional fields:

      • Shift (Linked to HR shift types)

      • Start Time, End Time

image

  • Student Attendance Doctype Changes:

    • New field: Shift

    • Override on the default duplicate attendance validation logic:

      • Allows multiple attendance entries per day based on shift.

      • Ensures no overlapping shifts.

image (14)

4. 🗂️ Subject Scheduling Tool

Creating course schedules with consistent time across days was limiting. To address this:

  • Created a new Doctype: Subject Scheduling Tool

    • Replicates the Course Scheduling Tool with improvements.

    • Child Table: Subject Time

      • Allows scheduling different times for different days.

      • Example:

        • Monday: 8:00–9:00 AM

        • Wednesday: 10:00–11:00 AM

      • Checkbox Reschedule for when you are rescheduling an already scheduled subject.

This tool improves flexibility and real-world scheduling accuracy.

Screenshot 2025-04-14 at 17 24 10


5. 🧾 Student Report Generation Tool

A new feature has been added to the Student Report Generation Tool to support customizable report card printing.

  • Field Added: Custom Print Report Card (Checkbox)

    • When checked, the system prints a report card using a custom template, designed to align with the institution's branding and reporting preferences.

    • This template reflects the layout and styling shown in the sample below:

    Screenshot 2025-04-15 at 17 24 06

  • Group Filter Removed:
    To enhance flexibility during events like half-term breaks, the group filter was removed. This enables users to:

    • Generate report cards for any assessment group.

    • Allow students to take their report cards home during half-term or early departures without restriction.


6. 👨🏽‍💻 Student ID-Based Email and User Auto-Creation

🛠️ Key Features:

  • Custom Student ID Format:

    • Student ID is auto-generated based on the selected School.

    • The ID format follows a prefix derived from the school abbreviation, followed by a numeric sequence.

    • Example: For a school with abbreviation JNS, the Student ID might be JNS-0001.

    • ⚠️ This logic is customizable depending on the use case or naming convention required.

image (12)

  • Auto-Generated Student Email:

    • Since younger students may not have emails, the system synthesizes one using the format:

      @gmail.com

      Example: JNS0001@gmail.com

  • Username = Cleaned Student ID:

    • The username is set to the Student ID with all non-alphanumeric characters removed (e.g., no slashes or symbols).

      safe_username = re.sub(r"\W+", "", self.custom_student_id)

  • Password = Student ID:

    • The password for the student account is set as their Student ID (including special characters, if any).
  • Login Behavior:

    • Students log in using their username, which is their cleaned-up Student ID.

    • They use their Student ID (original) as the password.

    • This approach is enabled by adjusting System Settings to allow username-based login.

Backend Override

The default Frappe logic for user creation has been overridden via a custom controller, ModifiedStudent, where the user account is generated upon saving a new Student document.

7. 🏫 School as Company

To support multi-school or multi-campus setups within one ERPNext instance, we introduced a structural change: each School is now treated as a Company. This lets users leverage native ERPNext features like permissions, chart of accounts, assets, and HR, scoped to a school.

✅ Key Benefits

  • Enables multi-school management under a single ERPNext instance.

  • Uses ERPNext's built-in Company logic to segment data per school.

  • Allows clear scoping for:

    • Financials

    • Student data

    • Assessments

    • Attendance

    • Reporting

    • Instructor and program tracking

  • Filters are applied across key doctypes (e.g., Course Schedule) to restrict selection to records relevant to the selected school:

image (13)

  • You can only select streams, student groups, or instructors that belong to the specified school.

  • Ensures clean data separation and avoids cross-school data mixing.

Once this is implemented:

  • You can apply User Permissions for Company to restrict access to specific school data.

  • Customize dashboards, reports, and **quer

Related Education apps for Frappe & ERPNext

  • Lms — Easy to Use, 100% Open Source Learning Management System
  • Education — Open source education / school management system
  • Mon School — Frappe App for Mon School based on Frappe LMS
  • Ifitwala Ed — A School Managment System
  • School Automations
  • Academy — Website for academy.erpnext.com
  • Psa — Sana'a University Postgraduate Studies Administration (PSA)
  • Lms