# frappe/education architecture

> Architecture diagram of the GitHub repository frappe/education, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-10-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/frappe/education
- Repository: https://github.com/frappe/education

## Overview

Frappe Education is an ERPNext-based education management system. Its administrative workflow takes applicants through admission and course enrollment, then supports academic delivery, attendance, assessment, and fee collection; students can also use a portal for schedules, attendance, grades, and fee payment. The graph preserves those documented capabilities and the sampled enrollment dependencies. Many domain DocTypes and portal pages are represented by their exact source directories or files; unsampled connections are omitted rather than inferred.

Main entry points: [`education/education/doctype/course_enrollment/course_enrollment.py`](https://github.com/frappe/education/blob/develop/education/education/doctype/course_enrollment/course_enrollment.py) (Course enrollment), [`frontend/src/router.js`](https://github.com/frappe/education/blob/develop/frontend/src/router.js) (Portal routing), [`education/education/doctype/admission_register/admission_register.py`](https://github.com/frappe/education/blob/develop/education/education/doctype/admission_register/admission_register.py) (Admission register), [`education/education/doctype/fee_schedule`](https://github.com/frappe/education/tree/develop/education/education/doctype/fee_schedule) (Fee schedules and invoices)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_admissions["Admissions"]
  node_students["Student records"]
  node_applicants["Applicant intake"]
  node_admission["Admission register"]
  node_enrollment["Course enrollment"]
end

subgraph group_academics["Academic Delivery"]
  node_programs["Programs and courses"]
  node_registration["Subject registration"]
  node_scheduling["Course scheduling"]
  node_attendance["Attendance"]
  node_assessment["Assessment and grades"]
end

subgraph group_billing["Fees and Billing"]
  node_feeplan["Fee plans<br/>[fee_plan.py]"]
  node_fees["Fee schedules and invoices"]
  node_payment["Payment records"]
end

subgraph group_campus["Campus Operations"]
  node_campus["Campus and facilities<br/>[campus.py]"]
  node_hostel["Hostel allocation"]
end

subgraph group_portal["Student Portal"]
  node_portal["Portal routing<br/>[router.js]"]
  node_schedulepage["Schedule view<br/>[Calendar.vue]"]
  node_attendancepage["Attendance view<br/>[Attendance.vue]"]
  node_gradespage["Grades view<br/>[Grades.vue]"]
  node_feespage["Fees view<br/>[Fees.vue]"]
end

node_institution(("Institution staff"))
node_portaluser(("Student"))

node_institution -->|"manages intake"| node_applicants
node_applicants -->|"supports admissions"| node_admission
node_admission -.->|"enrolls students"| node_enrollment
node_institution -->|"manages profiles"| node_students
node_students -.->|"enrolls in courses"| node_enrollment
node_enrollment -->|"creates fee plan"| node_feeplan
node_enrollment -->|"creates registration"| node_registration
node_enrollment -->|"reads register courses"| node_admission
node_enrollment -->|"applies campus"| node_campus
node_institution -->|"schedules courses"| node_scheduling
node_institution -->|"records attendance"| node_attendance
node_institution -->|"plans assessments"| node_assessment
node_institution -->|"manages fees"| node_fees
node_feeplan -.->|"generates invoices"| node_fees
node_fees -.->|"records payments"| node_payment
node_institution -.->|"manages stays"| node_hostel
node_portaluser -->|"opens portal"| node_portal
node_portal -->|"routes to schedule"| node_schedulepage
node_portal -->|"routes to attendance"| node_attendancepage
node_portal -->|"routes to grades"| node_gradespage
node_portal -->|"routes to fees"| node_feespage
node_portaluser -->|"views timetable"| node_schedulepage
node_portaluser -->|"checks attendance"| node_attendancepage
node_portaluser -->|"views grades"| node_gradespage
node_portaluser -->|"pays fees"| node_feespage

click node_students "https://github.com/frappe/education/tree/develop/education/education/doctype/student"
click node_applicants "https://github.com/frappe/education/tree/develop/education/education/doctype/student_applicant"
click node_admission "https://github.com/frappe/education/blob/develop/education/education/doctype/admission_register/admission_register.py"
click node_enrollment "https://github.com/frappe/education/blob/develop/education/education/doctype/course_enrollment/course_enrollment.py"
click node_programs "https://github.com/frappe/education/tree/develop/education/education/doctype/program"
click node_registration "https://github.com/frappe/education/blob/develop/education/education/doctype/subject_registration/subject_registration.py"
click node_scheduling "https://github.com/frappe/education/tree/develop/education/education/doctype/subject_scheduling_tool"
click node_attendance "https://github.com/frappe/education/tree/develop/education/education/doctype/student_attendance"
click node_assessment "https://github.com/frappe/education/tree/develop/education/education/doctype/grade_book"
click node_feeplan "https://github.com/frappe/education/blob/develop/education/education/doctype/fee_plan/fee_plan.py"
click node_fees "https://github.com/frappe/education/tree/develop/education/education/doctype/fee_schedule"
click node_payment "https://github.com/frappe/education/tree/develop/education/education/doctype/payment_record"
click node_campus "https://github.com/frappe/education/blob/develop/education/education/doctype/campus/campus.py"
click node_hostel "https://github.com/frappe/education/blob/develop/education/education/doctype/hostel_allocation/hostel_allocation.py"
click node_portal "https://github.com/frappe/education/blob/develop/frontend/src/router.js"
click node_schedulepage "https://github.com/frappe/education/blob/develop/frontend/src/components/Calendar.vue"
click node_attendancepage "https://github.com/frappe/education/blob/develop/frontend/src/pages/Attendance.vue"
click node_gradespage "https://github.com/frappe/education/blob/develop/frontend/src/pages/Grades.vue"
click node_feespage "https://github.com/frappe/education/blob/develop/frontend/src/pages/Fees.vue"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_students,node_applicants,node_admission,node_enrollment toneBlue
class node_programs,node_registration,node_scheduling,node_attendance,node_assessment toneAmber
class node_feeplan,node_fees,node_payment toneMint
class node_campus,node_hostel toneRose
class node_portal,node_schedulepage,node_attendancepage,node_gradespage,node_feespage,node_institution,node_portaluser toneIndigo
```

## Components

### Admissions

- [Student records](https://github.com/frappe/education/tree/develop/education/education/doctype/student): `education/education/doctype/student`
- [Applicant intake](https://github.com/frappe/education/tree/develop/education/education/doctype/student_applicant): `education/education/doctype/student_applicant`
- [Admission register](https://github.com/frappe/education/blob/develop/education/education/doctype/admission_register/admission_register.py): `education/education/doctype/admission_register/admission_register.py`
- [Course enrollment](https://github.com/frappe/education/blob/develop/education/education/doctype/course_enrollment/course_enrollment.py): `education/education/doctype/course_enrollment/course_enrollment.py`

### Academic Delivery

- [Programs and courses](https://github.com/frappe/education/tree/develop/education/education/doctype/program): `education/education/doctype/program`
- [Subject registration](https://github.com/frappe/education/blob/develop/education/education/doctype/subject_registration/subject_registration.py): `education/education/doctype/subject_registration/subject_registration.py`
- [Course scheduling](https://github.com/frappe/education/tree/develop/education/education/doctype/subject_scheduling_tool): `education/education/doctype/subject_scheduling_tool`
- [Attendance](https://github.com/frappe/education/tree/develop/education/education/doctype/student_attendance): `education/education/doctype/student_attendance`
- [Assessment and grades](https://github.com/frappe/education/tree/develop/education/education/doctype/grade_book): `education/education/doctype/grade_book`

### Fees and Billing

- [Fee plans](https://github.com/frappe/education/blob/develop/education/education/doctype/fee_plan/fee_plan.py): `education/education/doctype/fee_plan/fee_plan.py`
- [Fee schedules and invoices](https://github.com/frappe/education/tree/develop/education/education/doctype/fee_schedule): `education/education/doctype/fee_schedule`
- [Payment records](https://github.com/frappe/education/tree/develop/education/education/doctype/payment_record): `education/education/doctype/payment_record`

### Campus Operations

- [Campus and facilities](https://github.com/frappe/education/blob/develop/education/education/doctype/campus/campus.py): `education/education/doctype/campus/campus.py`
- [Hostel allocation](https://github.com/frappe/education/blob/develop/education/education/doctype/hostel_allocation/hostel_allocation.py): `education/education/doctype/hostel_allocation/hostel_allocation.py`

### Student Portal

- [Portal routing](https://github.com/frappe/education/blob/develop/frontend/src/router.js): `frontend/src/router.js`
- [Schedule view](https://github.com/frappe/education/blob/develop/frontend/src/components/Calendar.vue): `frontend/src/components/Calendar.vue`
- [Attendance view](https://github.com/frappe/education/blob/develop/frontend/src/pages/Attendance.vue): `frontend/src/pages/Attendance.vue`
- [Grades view](https://github.com/frappe/education/blob/develop/frontend/src/pages/Grades.vue): `frontend/src/pages/Grades.vue`
- [Fees view](https://github.com/frappe/education/blob/develop/frontend/src/pages/Fees.vue): `frontend/src/pages/Fees.vue`

### Other components

- **Institution staff**
- **Student**

## Connections

- Institution staff → Applicant intake: manages intake (evidence: `README.md`)
- Applicant intake → Admission register: supports admissions (evidence: `README.md`)
- Admission register → Course enrollment: enrolls students (evidence: `education/education/doctype/course_enrollment/course_enrollment.py`)
- Institution staff → Student records: manages profiles (evidence: `README.md`)
- Student records → Course enrollment: enrolls in courses
- Course enrollment → Fee plans: creates fee plan (evidence: `education/education/doctype/course_enrollment/course_enrollment.py`)
- Course enrollment → Subject registration: creates registration (evidence: `education/education/doctype/course_enrollment/course_enrollment.py`)
- Course enrollment → Admission register: reads register courses (evidence: `education/education/doctype/course_enrollment/course_enrollment.py`)
- Course enrollment → Campus and facilities: applies campus (evidence: `education/education/doctype/course_enrollment/course_enrollment.py`)
- Institution staff → Course scheduling: schedules courses (evidence: `README.md`)
- Institution staff → Attendance: records attendance (evidence: `README.md`)
- Institution staff → Assessment and grades: plans assessments (evidence: `README.md`)
- Institution staff → Fee schedules and invoices: manages fees (evidence: `README.md`)
- Fee plans → Fee schedules and invoices: generates invoices
- Fee schedules and invoices → Payment records: records payments
- Institution staff → Hostel allocation: manages stays
- Student → Portal routing: opens portal (evidence: `README.md`)
- Portal routing → Schedule view: routes to schedule (evidence: `frontend/src/router.js`)
- Portal routing → Attendance view: routes to attendance (evidence: `frontend/src/router.js`)
- Portal routing → Grades view: routes to grades (evidence: `frontend/src/router.js`)
- Portal routing → Fees view: routes to fees (evidence: `frontend/src/router.js`)
- Student → Schedule view: views timetable (evidence: `README.md`)
- Student → Attendance view: checks attendance (evidence: `README.md`)
- Student → Grades view: views grades (evidence: `README.md`)
- Student → Fees view: pays fees (evidence: `README.md`)
