439 lines
20 KiB
Markdown
439 lines
20 KiB
Markdown
# 📚 Complete Technical Documentation of Custom Education Odoo Addons
|
|
|
|
This document contains a comprehensive, field-level technical summary of all **7 custom education modules** built for the Odoo Education & Student Portal ecosystem.
|
|
|
|
---
|
|
|
|
## 1. 🏛️ `education_base` (Base Academic Setup & Hierarchy)
|
|
|
|
### **Module Overview**
|
|
The `education_base` module establishes the core structural hierarchy of the educational institution. It defines campuses, departments, degree programs, academic levels, and academic calendar timelines (years and terms).
|
|
|
|
---
|
|
|
|
### **Models & Detailed Field Definitions**
|
|
|
|
#### **1.1 `education.campus` (Campus Master)**
|
|
- **Functionality**: Represents physical or virtual university campuses.
|
|
- **Fields**:
|
|
- `name` *(Char, Required)*: The official name of the campus.
|
|
- `code` *(Char, Required)*: Unique abbreviation code.
|
|
- `street` / `street2` / `city` / `zip` / `state_id` / `country_id` *(Location fields)*: Physical address details.
|
|
- `phone` / `email` *(Char)*: Contact details for campus administration.
|
|
- `company_id` *(Many2one)*: Associated Odoo `res.company`.
|
|
- `active` *(Boolean)*: Soft-delete toggle (default: `True`).
|
|
|
|
#### **1.2 `education.department` (Department Master)**
|
|
- **Functionality**: Academic departments within a campus (e.g., Computer Science, Mechanical).
|
|
- **Fields**:
|
|
- `name` *(Char, Required)*: Department name.
|
|
- `code` *(Char, Required)*: Short code.
|
|
- `campus_id` *(Many2one, Required)*: Relates to `education.campus`.
|
|
- `head_teacher_id` *(Many2one)*: Relates to `res.partner` (Department Chair / Dean).
|
|
- `program_ids` *(One2many)*: List of programs offered under this department.
|
|
- `company_id` *(Many2one)*: Multi-company reference.
|
|
|
|
#### **1.3 `education.program` (Academic Program)**
|
|
- **Functionality**: Degree or diploma courses (e.g., MCA, B.Tech, MBA).
|
|
- **Fields**:
|
|
- `name` *(Char, Required)*: Program name.
|
|
- `code` *(Char, Required)*: Program short code.
|
|
- `department_id` *(Many2one, Required)*: Relates to `education.department`.
|
|
- `level_id` *(Many2one)*: Academic level (`Undergraduate`, `Postgraduate`).
|
|
- `duration` *(Integer)*: Number of duration units (e.g., `2`).
|
|
- `duration_unit` *(Selection)*: `year`, `month`, or `semester`.
|
|
- `description` *(Text)*: Overview of course curriculum.
|
|
|
|
#### **1.4 `education.academic.year` (Academic Session)**
|
|
- **Functionality**: Defines full academic years and tracks current active session.
|
|
- **Fields**:
|
|
- `name` *(Char, Required)*: Name of the academic year (e.g., `"2026 - 2027"`).
|
|
- `code` *(Char, Required)*: Unique code.
|
|
- `start_date` *(Date, Required)*: Start date of session.
|
|
- `end_date` *(Date, Required)*: End date of session.
|
|
- `current_year` *(Boolean)*: Indicates if this is the active operational year.
|
|
- `state` *(Selection)*: `draft`, `active`, `closed`.
|
|
- `term_ids` *(One2many)*: Semesters/Terms within this year.
|
|
|
|
#### **1.5 `education.academic.term` (Academic Semester / Term)**
|
|
- **Functionality**: Sub-divisions of an academic year (e.g., Semester 1, Semester 2).
|
|
- **Fields**:
|
|
- `name` *(Char, Required)*: Term name.
|
|
- `code` *(Char, Required)*: Term code (e.g., `"SEM1"`).
|
|
- `academic_year_id` *(Many2one, Required)*: Parent `education.academic.year`.
|
|
- `sequence` *(Integer)*: Term ordering (1, 2, 3...).
|
|
- `start_date` / `end_date` *(Date)*: Start and end dates of term.
|
|
- `state` *(Selection)*: `draft`, `active`, `completed`.
|
|
|
|
#### **1.6 `education.configuration` (Education Configuration)**
|
|
- **Functionality**: Global institution-level settings and defaults.
|
|
- **Fields**:
|
|
- `school_name` / `school_code` *(Char, Required)*: Institution name and code.
|
|
- `default_campus_id` / `default_academic_year_id` / `default_term_id` *(Many2one)*: Default hierarchical selections for the institution.
|
|
- `logo` *(Binary)*: Institution logo.
|
|
- `contact_email` / `contact_phone` *(Char)*: Global contact information.
|
|
|
|
#### **1.7 `education.academic.level` (Academic Level)**
|
|
- **Functionality**: Classification of education levels (e.g., Undergraduate, Postgraduate).
|
|
- **Fields**:
|
|
- `name` *(Char, Required)*: Level name.
|
|
- `code` *(Char, Required)*: Level code.
|
|
- `sequence` *(Integer)*: Ordering priority.
|
|
- `description` *(Text)*: Additional details about the level.
|
|
|
|
---
|
|
|
|
### **Record Examples (`student_db`)**
|
|
```yaml
|
|
Campus Record:
|
|
ID: 1 | Name: "Main Campus" | Code: "MC" | City: "Thanjavur"
|
|
|
|
Department Record:
|
|
ID: 1 | Name: "School of Computing" | Code: "SCS" | Campus: "Main Campus"
|
|
|
|
Program Record:
|
|
ID: 1 | Name: "Master of Computer Applications - Lateral Entry" | Code: "MCA-L" | Duration: 2 Years
|
|
|
|
Academic Year Record:
|
|
ID: 1 | Name: "2026 - 2027" | Code: "053" | Start: 2026-07-03 | End: 2027-07-03 | Current: True
|
|
|
|
Academic Term Record:
|
|
ID: 1 | Name: "Semester 1" | Code: "SEM1" | Sequence: 1 | Year: "2026 - 2027"
|
|
```
|
|
|
|
---
|
|
|
|
## 2. 👨🎓 `education_student` (Student Lifecycle & Profile Management)
|
|
|
|
### **Module Overview**
|
|
Central student registry handling personal profiles, academic placement, guardian information, document attachments, portal user links, and automated financial/attendance computations.
|
|
|
|
---
|
|
|
|
### **Models & Detailed Field Definitions**
|
|
|
|
#### **2.1 `education.student` (Student Profile)**
|
|
- **Personal Details**:
|
|
- `first_name` / `middle_name` / `last_name` *(Char)*: Individual name components.
|
|
- `full_name` *(Char, Computed)*: Concatenated name (`"Aadhav S"`).
|
|
- `gender` *(Selection)*: `male`, `female`, `other`.
|
|
- `date_of_birth` *(Date)*: Date of birth.
|
|
- `age` *(Integer, Computed)*: Calculated age in years.
|
|
- `email` / `phone` / `mobile` *(Char)*: Contact info.
|
|
- `image_1920` *(Image)*: Student profile photo.
|
|
- **Academic Identification & Placement**:
|
|
- `admission_number` *(Char)*: Auto-generated admission ID (`"ADM/2026/001"`).
|
|
- `roll_number` *(Char)*: Roll number (`"ROLL/0003"`).
|
|
- `registration_number` *(Char)*: University registration number.
|
|
- `campus_id` / `department_id` / `program_id` / `academic_year_id` / `academic_term_id` *(Many2one)*: Relates student to institutional hierarchy.
|
|
- `status` *(Selection)*: `draft`, `applied`, `admitted`, `enrolled`, `graduated`, `withdrawn`.
|
|
- **Parents & Guardian Information**:
|
|
- `father_name` / `father_phone` / `father_occupation` *(Char)*: Father's details.
|
|
- `mother_name` / `mother_phone` / `mother_occupation` *(Char)*: Mother's details.
|
|
- `guardian_name` / `guardian_phone` / `guardian_email` / `guardian_address` *(Char/Text)*: Guardian details.
|
|
- **Document Storage**:
|
|
- `doc_passport`, `doc_aadhaar`, `doc_birth_cert`, `doc_transfer_cert`, `doc_community_cert`, `doc_mark_sheets` *(Binary & Char)*: Stores uploaded compliance documents and filenames.
|
|
- **Computed Financial Summary**:
|
|
- `total_fees` *(Monetary, Computed)*: Total assigned fees (₹34,000.00).
|
|
- `total_paid` *(Monetary, Computed)*: Sum of all posted payments (₹34,000.00).
|
|
- `outstanding_amount` *(Monetary, Computed)*: Total due balance (₹0.00).
|
|
- `payment_status` *(Selection, Computed)*: `no_fees`, `unpaid`, `partial`, `fully_paid`.
|
|
- `ledger_line_ids` *(One2many)*: Inverse relation to `education.student.ledger`.
|
|
- **Computed Attendance Summary**:
|
|
- `attendance_pct` *(Float, Computed)*: Overall attendance percentage (e.g., `92.5`).
|
|
- `present_count` / `absent_count` / `late_count` / `medical_leave_count` *(Integer, Computed)*: Session counts.
|
|
- **Portal User Linkage**:
|
|
- `portal_user_id` *(Many2one)*: Relates to Odoo `res.users` (Portal Account).
|
|
- `portal_status` *(Selection)*: `draft`, `active`, `deactivated`.
|
|
|
|
#### **2.2 `education.batch` (Academic Batch)**
|
|
- **Functionality**: Represents a specific student batch/cohort.
|
|
- **Fields**:
|
|
- `name` *(Char, Required)*: Batch name.
|
|
- `code` *(Char, Required)*: Unique batch code.
|
|
|
|
#### **2.3 `education.semester` (Academic Semester)**
|
|
- **Functionality**: Specific academic semesters decoupled from global terms.
|
|
- **Fields**:
|
|
- `name` *(Char, Required)*: Semester name.
|
|
- `code` *(Char, Required)*: Unique semester code.
|
|
|
|
#### **2.4 `education.section` (Academic Section)**
|
|
- **Functionality**: Classroom sections or groups for students.
|
|
- **Fields**:
|
|
- `name` *(Char, Required)*: Section name.
|
|
- `code` *(Char, Required)*: Unique section code.
|
|
|
|
---
|
|
|
|
### **Record Examples (`student_db`)**
|
|
```yaml
|
|
Student Record #284:
|
|
Admission No: "ADM/2026/001" | Roll No: "ROLL/0003"
|
|
Name: "Aadhav S" | Email: "aadhav@gmail.com" | Phone: "9876543210"
|
|
Program: "Master of Computer Applications - Lateral Entry"
|
|
Total Fees: ₹34,000.00 | Total Paid: ₹34,000.00 | Outstanding: ₹0.00
|
|
Payment Status: fully_paid
|
|
Attendance %: 92.5% (Present: 37, Absent: 3)
|
|
Portal User: aadhav@gmail.com (Status: Active)
|
|
```
|
|
|
|
---
|
|
|
|
## 3. 📅 `education_attendance` (Attendance & Absence Tracking)
|
|
|
|
### **Module Overview**
|
|
Provides session-level attendance recording for students, automated calculation of attendance percentages, and historical session logs.
|
|
|
|
---
|
|
|
|
### **Models & Detailed Field Definitions**
|
|
|
|
#### **3.1 `education.attendance` (Student Attendance Record)**
|
|
- **Fields**:
|
|
- `student_id` *(Many2one, Required)*: Relates to `education.student`.
|
|
- `date` *(Date, Required)*: Attendance session date.
|
|
- `state` *(Selection, Required)*: `present`, `absent`, `late`, `medical_leave`.
|
|
- `remarks` *(Text)*: Optional notes or justification for leave.
|
|
- `academic_year_id` / `academic_term_id` *(Many2one)*: Timeline reference.
|
|
- `company_id` *(Many2one)*: Multi-company lock.
|
|
|
|
#### **3.2 `education.attendance.session` (Attendance Session)**
|
|
- **Functionality**: Organizes attendance taking by combining date, location, and hierarchy.
|
|
- **Fields**:
|
|
- `name` *(Char, Required)*: Session title.
|
|
- `campus_id` / `department_id` / `program_id` / `academic_year_id` *(Many2one, Required)*: Targeting fields.
|
|
|
|
#### **3.3 `education.attendance.line` (Attendance Line Detail)**
|
|
- **Functionality**: Individual student attendance state for a session.
|
|
- **Fields**:
|
|
- `session_id` *(Many2one, Required)*: Parent session.
|
|
- `student_id` *(Many2one, Required)*: Target student.
|
|
- `status` *(Selection)*: `present`, `absent`, `late`.
|
|
|
|
---
|
|
|
|
### **Record Examples (`student_db`)**
|
|
```yaml
|
|
Attendance Entry #101:
|
|
Student: "Aadhav S"
|
|
Date: 2026-08-10
|
|
State: Present
|
|
Academic Term: Semester 1
|
|
|
|
Attendance Entry #102:
|
|
Student: "Hareish S"
|
|
Date: 2026-08-10
|
|
State: Absent
|
|
Remarks: "Sick leave - Doctor note submitted"
|
|
```
|
|
|
|
---
|
|
|
|
## 4. 💳 `education_finance` (Fees, Payments & Double-Entry Ledger)
|
|
|
|
### **Module Overview**
|
|
Complete financial accounting engine for student fee assessment, payment posting, fee structures, discounts, scholarships, refunds, and real-time double-entry student financial ledgers.
|
|
|
|
---
|
|
|
|
### **Models & Detailed Field Definitions**
|
|
|
|
#### **4.1 `education.fee.category` (Fee Head)**
|
|
- **Fields**:
|
|
- `name` *(Char, Required)*: Name of fee type (`"Tuition"`, `"Hostel"`, `"Library"`).
|
|
- `code` *(Char, Required)*: Code (`TUI`, `HOS`, `LIB`, `EXM`, `TRN`).
|
|
|
|
#### **4.2 `education.fee.structure` & `education.fee.structure.line` (Fee Template)**
|
|
- **Fields (`education.fee.structure`)**:
|
|
- `name` *(Char, Required)*: Name of structure (e.g., `"MCA Semester 1 2026 Regular"`).
|
|
- `program_id` / `academic_year_id` / `academic_term_id` *(Many2one)*: Applicable target.
|
|
- `line_ids` *(One2many)*: List of `education.fee.structure.line` items.
|
|
- **Fields (`education.fee.structure.line`)**:
|
|
- `category_id` *(Many2one, Required)*: Relates to `education.fee.category`.
|
|
- `amount` *(Monetary, Required)*: Line fee amount.
|
|
|
|
#### **4.3 `education.fee.assignment` (Student Fee Assessment)**
|
|
- **Fields**:
|
|
- `name` *(Char)*: Sequence (`"ASSIGN/2026/00001"`).
|
|
- `student_id` *(Many2one, Required)*: Target student.
|
|
- `fee_structure_id` *(Many2one)*: Fee structure applied.
|
|
- `total_amount` *(Monetary)*: Gross fee amount (₹34,000.00).
|
|
- `discount_amount` *(Monetary)*: Discount concession applied.
|
|
- `net_amount` *(Monetary)*: Net due after discounts.
|
|
- `amount_paid` *(Monetary, Computed)*: Total payments posted against this assignment.
|
|
- `state` *(Selection)*: `draft`, `assigned`, `paid`, `cancelled`.
|
|
|
|
#### **4.4 `education.student.payment` (Payment Receipt)**
|
|
- **Fields**:
|
|
- `name` *(Char)*: Sequence number (`"PAY/2026/00012"`).
|
|
- `student_id` *(Many2one, Required)*: Paying student.
|
|
- `fee_assignment_id` *(Many2one)*: Associated fee assignment.
|
|
- `amount` *(Monetary, Required)*: Amount paid (₹34,000.00).
|
|
- `payment_date` *(Date, Required)*: Date of transaction.
|
|
- `payment_method` *(Selection)*: `cash`, `bank`, `online`.
|
|
- `transaction_id` *(Char)*: Payment gateway transaction ref (`"pay_Px92kL10z"`).
|
|
- `state` *(Selection)*: `draft`, `posted`, `cancelled`.
|
|
|
|
#### **4.5 `education.student.ledger` (Double-Entry Financial Ledger)**
|
|
- **Fields**:
|
|
- `student_id` *(Many2one, Required)*: Target student.
|
|
- `date` *(Date, Required)*: Transaction date.
|
|
- `description` *(Char, Required)*: Details (e.g., `"Fee Assessment: MCA Sem 1"`).
|
|
- `reference` *(Char)*: Document source (`ASSIGN/0001` or `PAY/0012`).
|
|
- `debit` *(Monetary)*: Increase in student financial liability.
|
|
- `credit` *(Monetary)*: Decrease in student financial liability (Payment).
|
|
- `balance` *(Monetary, Computed)*: Cumulative balance due after this entry.
|
|
|
|
#### **4.6 `education.student.discount` & `education.student.scholarship` & `education.student.refund`**
|
|
- Models for concession processing, merit scholarship credits, and fee refund disbursements.
|
|
|
|
#### **4.7 `education.fee.type` (Fee Type)**
|
|
- **Functionality**: Granular categorization of fee categories.
|
|
- **Fields**:
|
|
- `name` *(Char, Required)*: Fee type name.
|
|
- `category_id` *(Many2one, Required)*: Parent category.
|
|
- `currency_id` *(Many2one, Required)*: Currency for fee.
|
|
|
|
---
|
|
|
|
### **Record Examples (`student_db`)**
|
|
```yaml
|
|
Fee Categories:
|
|
- Tuition (Code: TUI)
|
|
- Examination (Code: EXM)
|
|
- Library (Code: LIB)
|
|
|
|
Fee Structure: "MCA Semester 1 2026 Regular"
|
|
- Line 1: Tuition Fee = ₹30,000.00
|
|
- Line 2: Examination & Library Fee = ₹4,000.00
|
|
Total: ₹34,000.00
|
|
|
|
Fee Assignment: ASSIGN/2026/00001
|
|
Student: "Aadhav S" | Net Amount: ₹34,000.00 | Amount Paid: ₹34,000.00 | State: Paid
|
|
|
|
Payment Record: PAY/2026/00012
|
|
Student: "Aadhav S" | Amount: ₹34,000.00 | Method: Online Razorpay | State: Posted
|
|
|
|
Ledger Statement for Aadhav S:
|
|
1. 2026-07-05 | Fee Assessment: MCA Sem 1 | Debit: ₹34,000.00 | Credit: ₹0.00 | Balance: ₹34,000.00
|
|
2. 2026-07-10 | Payment Received: PAY/0012 | Debit: ₹0.00 | Credit: ₹34,000.00 | Balance: ₹0.00
|
|
```
|
|
|
|
---
|
|
|
|
## 5. 📊 `education_dashboard` (Analytics & Management KPIs)
|
|
|
|
### **Module Overview**
|
|
Aggregates metrics across the institution to present real-time key performance indicators (KPIs) for administration.
|
|
|
|
---
|
|
|
|
### **Models & Detailed Field Definitions**
|
|
|
|
#### **5.1 `education.dashboard` (Dashboard Helper Model)**
|
|
- **Fields**:
|
|
- `total_students` *(Integer, Computed)*: Total active enrolled students.
|
|
- `total_fees_collected` *(Monetary, Computed)*: Cumulative fee revenue.
|
|
- `total_outstanding_dues` *(Monetary, Computed)*: Aggregate unpaid student balance.
|
|
- `average_attendance` *(Float, Computed)*: Average student attendance across institution.
|
|
|
|
---
|
|
|
|
### **Record Examples (`student_db`)**
|
|
```yaml
|
|
Dashboard KPI Snapshot:
|
|
Total Students: 3
|
|
Total Fees Collected: ₹102,000.00
|
|
Total Dues Pending: ₹0.00
|
|
Average Campus Attendance: 94.2%
|
|
```
|
|
|
|
---
|
|
|
|
## 6. 🖥️ `education_portal` (Student Self-Service Portal & Login)
|
|
|
|
### **Module Overview**
|
|
Delivers the student-facing online portal (`/my/education`), online Razorpay payment integration, announcement notices, profile updates, and the customized 50/50 split-screen login page (`/web/login`).
|
|
|
|
---
|
|
|
|
### **Models & Detailed Overrides**
|
|
|
|
#### **6.1 Custom 50/50 Split-Screen Login Page (`web.login` & `web.login_layout`)**
|
|
- **Left Panel (Branding & Features)**:
|
|
- Glassmorphism tint over campus background image.
|
|
- Dynamic company logo (`/web/image?model=res.company&id=1&field=logo`).
|
|
- Generalized Welcome Headers & Institutional Description text.
|
|
- 2x2 Feature Highlights Grid:
|
|
- 🔐 **Secure Authentication**
|
|
- ⚡ **Fast & Reliable Access**
|
|
- 📊 **Real-Time Information**
|
|
- ☁️ **Cloud-Based Platform**
|
|
- **Right Panel (Form & Authentication)**:
|
|
- Welcome Card with database selector.
|
|
- Input field with icon (`Enter your Email`).
|
|
- Password input with interactive eye icon toggle.
|
|
- Remember Me & Forgot Password links.
|
|
- Google & Microsoft SSO buttons.
|
|
- Form action URL preserving parameters (`t-attf-action="/web/login?#{keep_query('*')}"`) and hidden `db` field to ensure CSRF validation never expires.
|
|
|
|
#### **6.2 `education.announcement` (Notice Board)**
|
|
- **Fields**:
|
|
- `title` *(Char, Required)*: Notice title.
|
|
- `content` *(Html, Required)*: Formatted announcement content.
|
|
- `category` *(Selection)*: `academic`, `finance`, `event`, `general`.
|
|
- `target_audience` *(Selection)*: `all`, `students`, `staff`.
|
|
- `date_published` *(Datetime)*: Timestamp of publication.
|
|
|
|
#### **6.3 `education.payment.transaction` (Payment Transaction)**
|
|
- **Functionality**: Tracks specific payment transactions triggered from the portal.
|
|
- **Fields**:
|
|
- `name` *(Char, Required)*: Transaction Reference.
|
|
|
|
---
|
|
|
|
### **Record Examples (`student_db`)**
|
|
```yaml
|
|
Announcement Record #1:
|
|
Title: "Semester 1 Examinations Schedule"
|
|
Category: Academic
|
|
Target Audience: Students
|
|
Published Date: 2026-08-20
|
|
Content: "The end-semester examinations for Semester 1 will commence from December 5th, 2026."
|
|
```
|
|
|
|
---
|
|
|
|
## 7. 📄 `education_reports` (QWeb PDF & Excel Analytics)
|
|
|
|
### **Module Overview**
|
|
Generates formal printable PDF documents and analytical export files for identity cards, payment receipts, attendance rosters, and ledgers.
|
|
|
|
---
|
|
|
|
### **Reports & Wizards**
|
|
|
|
#### **7.1 Student Fee Receipt (`report_student_fee_receipt`)**
|
|
- Printable PDF generated when a payment is posted. Includes transaction reference, student roll number, breakdown of fee items, amount paid, and signature line.
|
|
|
|
#### **7.2 Student Identity Card (`report_student_id_card`)**
|
|
- Printable student badge with student photo, barcode/QR code, roll number, department, blood group, and emergency contact details.
|
|
|
|
#### **7.3 `education.report.wizard` (Custom Report Exporter)**
|
|
- Filter wizard allowing administrators to select date ranges, programs, and fee categories to generate custom PDF/Excel reports.
|
|
|
|
---
|
|
|
|
## 📋 Comprehensive Summary Matrix of Custom Addons
|
|
|
|
| Module | Core Purpose | Models Defined | Key Output / UI View |
|
|
| :--- | :--- | :--- | :--- |
|
|
| **`education_base`** | Institutional Hierarchy | `education.campus`, `education.department`, `education.program`, `education.academic.year`, `education.academic.term`, `education.configuration`, `education.academic.level` | Academic Setup Form & Tree Views |
|
|
| **`education_student`** | Student Registry & Profiles | `education.student`, `education.batch`, `education.semester`, `education.section` | Student Master Form, Kanban & Portal User Action |
|
|
| **`education_attendance`** | Attendance Log & Metrics | `education.attendance`, `education.attendance.session`, `education.attendance.line` | Daily Attendance Grid & % Computation |
|
|
| **`education_finance`** | Financials, Fees & Ledgers | `education.fee.category`, `education.fee.type`, `education.fee.structure`, `education.fee.assignment`, `education.student.payment`, `education.student.ledger`, `education.student.discount`, `education.student.scholarship`, `education.student.refund` | Student Ledger Statement, Fee Structure Form, Payment Receipts |
|
|
| **`education_dashboard`** | Admin KPIs & Analytics | `education.dashboard` | Management KPI Cards & Metrics Summary |
|
|
| **`education_portal`** | Self-Service Web & Login | `education.announcement`, `education.payment.transaction` | Student Portal `/my/education`, Razorpay Payment & Split-Screen Login Page |
|
|
| **`education_reports`** | PDF & Excel Exports | `education.report.wizard` | PDF Student ID Cards, Fee Receipts & Ledger Exports |
|