Files
encoach_frontend_new_v1/docs/ENCOACH_UNIFIED_SRS.md
Talal Sharabi 19d7e01be1 feat: add OpenEduCat institutional LMS features + Odoo 19 Backend SRS
- Update ENCOACH_UNIFIED_SRS.md with 6 new feature sections:
  Academic Year/Term, Departments, Admission/Enrollment,
  Subject Registration, Institutional Exams, Assignment Submissions
- Add TypeScript types: academic.ts, admission.ts, institutional-exam.ts
- Add API services: academic, admission, institutional-exam
- Add TanStack Query hooks: useAcademic, useAdmissions, useInstitutionalExams
- Add 9 new pages: AcademicYearManager, DepartmentManager, AdmissionList,
  AdmissionDetail, AdmissionRegisterPage, AdmissionApplication,
  SubjectRegistrationPage, InstitutionalExamSessions, MarksheetManager
- Update App.tsx routes, AdminLmsLayout sidebar (Institutional group),
  StudentLayout sidebar (Subject Registration)
- Generate ENCOACH_ODOO19_BACKEND_SRS.md: complete Odoo 19 backend spec
  covering 200+ REST API endpoints, 31 modules, all OpenEduCat models

Made-with: Cursor
2026-03-26 23:42:06 +04:00

85 KiB

EnCoach Unified Platform -- Software Requirements Specification

Document Version: 1.0 Date: March 24, 2026 Status: Draft -- Architect Review Supersedes: ielts-ui/SRS-EnCoach.md (v2.0), MATH_IT_ADAPTIVE_LEARNING_SRS.md (v1.0) Author: EnCoach Engineering Team


Table of Contents

Part I -- Platform Foundation

  1. Introduction
  2. System Architecture
  3. User Roles and Multi-Tenancy
  4. Authentication and Authorization
  5. Global UI Shell

Part II -- Universal Subject Engine 6. Subject Taxonomy 7. Diagnostic Assessment 8. Proficiency Profile 9. Learning Plan Generation 10. Hybrid Content Delivery 11. Progress Tracking and Mastery

Part III -- LMS Module 12. Course Management 13. Batch and Enrollment 14. Timetable and Attendance 15. Gradebook and Reports

Part IV -- Exam Engine 16. Exam Management 17. AI Content Generation 18. Exam Delivery 19. AI Grading

Part V -- AI Services 20. AI Services Catalog 21. AI Integration in Frontend

Part VI -- Administration 22. User Management 23. Entity Management 24. Classroom Management 25. Assignment Management 26. Permission Management

Part VII -- Support and Commercial 27. Ticketing System 28. Subscriptions and Payments 29. Training Content

Part VIII -- Institutional LMS (OpenEduCat) 30. Academic Year and Term Management 31. Department Management 32. Admission and Enrollment 33. Subject Registration 34. Institutional Exam Sessions 35. Assignment File Submissions

Part IX -- Technical Specifications 36. Data Models 37. REST API Specification 38. Frontend Page Inventory 39. Non-Functional Requirements


Part I -- Platform Foundation

1. Introduction

1.1 Purpose

This document is the definitive SRS for the EnCoach platform rebuild. It specifies all functional and non-functional requirements for a unified AI-powered education platform that serves:

  • UTAS students (institutional, SIS-synced, curriculum-aligned learning paths)
  • Freelance students (self-registered, AI-generated learning plans, subscription-based)

The platform supports multiple subjects (IELTS/English, Mathematics, Information Technology, and future subjects) through a universal adaptive learning engine.

1.2 Scope

In scope:

  • All production features from the existing EnCoach platform (behavioural parity)
  • Universal adaptive learning engine (diagnostic, proficiency, learning plans, mastery)
  • Multi-subject support (IELTS, Math, IT -- extensible to any subject)
  • LMS module (OpenEduCat-backed courses, batches, timetable, attendance)
  • Multi-tenant operation (UTAS institutional + freelance self-service)
  • AI services integration (GPT-4o, Whisper, Polly, ELAI, GPTZero, FAISS)
  • New React frontend with real AI integration (replacing simulated components)
  • Odoo 19 backend with REST API

Out of scope:

  • Mobile native applications (iOS/Android)
  • Pixel-perfect recreation of old UI (new UI/UX takes precedence)
  • Database internals beyond Odoo model specifications
  • Hosting SLAs and legal/commercial terms

1.3 Definitions

Term Definition
Subject Top-level academic discipline (IELTS/English, Mathematics, IT). Subjects are the root of the taxonomy.
Domain Major area within a subject (e.g., Algebra, Networking, Writing).
Topic Specific teachable unit within a domain (e.g., Linear Equations, TCP/IP).
Learning Objective Measurable skill a student should gain from a topic.
Entity Tenant/organization with licenses, roles, and scoped permissions. UTAS is an entity.
Classroom User group with an admin and participants, scoped to an entity.
Assignment Scheduled set of exams for assignees; deep link /exam?assignment={id}.
Skill Module Legacy term for IELTS skill areas (reading, listening, writing, speaking, level). In the new system, skill modules are topics within the English subject.
Mastery Level Numeric score (0-100) indicating proficiency on a topic.
Learning Plan AI-generated, sequenced list of topics for a student to study.
Resource Human-uploaded learning material (PDF, video, link) tagged to topics.
UTAS Student Student enrolled through UTAS SIS sync, following institutional curriculum.
Freelance Student Self-registered student with AI-generated learning plans, individual subscription.

1.4 Key Architectural Decisions

# Decision Rationale
AD-1 Universal Subject Engine replaces hardcoded IELTS The exam module's MODULE_SELECTION becomes dynamic, driven by subject taxonomy. "Reading, Listening, Writing, Speaking" become skill types within the English subject, not hardcoded platform concepts. This allows Math, IT, and future subjects to use the same engine.
AD-2 Two student modes UTAS students follow curriculum + adaptive learning with SIS sync. Freelance students get fully AI-generated learning plans with no curriculum dependency. Both share the same platform.
AD-3 AI components become real Each of the 15 simulated AI components in the new frontend maps to specific backend AI services. No simulation in production.
AD-4 OpenEduCat as LMS backbone Course, batch, timetable, and attendance models come from OpenEduCat Odoo modules. A REST API bridge exposes them to the React frontend.
AD-5 Permission model extended for multi-subject Current hardcoded permissions (generate_reading, view_writing, etc.) are replaced with subject-parameterized permissions (generate_exam:{subject}, view_exam:{subject}).

2. System Architecture

2.1 Architecture Overview

graph TB
    subgraph clients ["Client Layer"]
        Browser["React 18 SPA<br/>Vite + TypeScript + shadcn/ui<br/>50+ pages"]
    end

    subgraph gateway ["API Gateway"]
        Nginx["Nginx<br/>SSL Termination<br/>Route Proxy"]
    end

    subgraph backend ["Backend -- Odoo 19"]
        API["REST API Controllers"]
        Core["Core Modules<br/>Users, Entities, Roles"]
        Adaptive["Adaptive Engine<br/>Taxonomy, Diagnostic,<br/>Proficiency, Learning Plans"]
        Exam["Exam Engine<br/>Universal multi-subject"]
        LMS["OpenEduCat LMS<br/>Courses, Batches,<br/>Timetable, Attendance"]
        AImod["AI Modules<br/>Generation, Grading,<br/>Media, Coaching"]
        Biz["Business Modules<br/>Subscriptions, Tickets,<br/>Registration, Assignments"]
    end

    subgraph ai ["AI Services"]
        GPT["OpenAI GPT-4o"]
        Whisper["Whisper STT<br/>(local)"]
        Polly["AWS Polly TTS"]
        ELAI_svc["ELAI Avatars"]
        GPTZero_svc["GPTZero"]
        FAISS_svc["FAISS + SentenceTransformers"]
    end

    subgraph data ["Data"]
        PG["PostgreSQL 16"]
    end

    subgraph external ["External"]
        SIS["UTAS SIS"]
        Stripe_svc["Stripe"]
        PayPal_svc["PayPal"]
        Paymob_svc["Paymob"]
    end

    Browser -->|HTTPS| Nginx
    Nginx -->|"/app/*"| Browser
    Nginx -->|"/api/*"| API
    API --> Core
    API --> Adaptive
    API --> Exam
    API --> LMS
    API --> AImod
    API --> Biz
    AImod --> GPT
    AImod --> Whisper
    AImod --> Polly
    AImod --> ELAI_svc
    AImod --> GPTZero_svc
    AImod --> FAISS_svc
    Core --> PG
    Adaptive --> PG
    Exam --> PG
    LMS --> PG
    Biz --> PG
    API <-->|"REST sync"| SIS
    Biz --> Stripe_svc
    Biz --> PayPal_svc
    Biz --> Paymob_svc

2.2 Technology Stack

Layer Technology
Frontend React 18, TypeScript, Vite 5, React Router v6, TanStack Query
UI shadcn/ui (Radix primitives), Tailwind CSS 3, Recharts, Lucide icons
Forms react-hook-form + Zod validation
Backend Odoo 19, Python 3.11
Database PostgreSQL 16
LMS OpenEduCat (Odoo-native modules)
AI OpenAI GPT-4o/3.5-turbo, Whisper (local base model), AWS Polly Neural, ELAI, GPTZero, FAISS + all-MiniLM-L6-v2
Deployment Docker Compose, Nginx reverse proxy
Version Control Gitea

2.3 Multi-Tenant Model

graph TB
    subgraph tenants ["Tenant Types"]
        UTAS["UTAS Entity<br/>Institutional license<br/>SIS-synced students<br/>Curriculum-bound"]
        Freelance["Freelance<br/>No entity / self-entity<br/>Self-registered<br/>AI-generated plans<br/>Individual subscription"]
        Corp["Corporate Entities<br/>Bulk licenses<br/>Managed enrollment"]
    end

    subgraph shared ["Shared Platform"]
        SubjectEngine["Universal Subject Engine"]
        ExamEngine["Exam Engine"]
        AIServices["AI Services"]
        LMSmod["LMS Module"]
    end

    UTAS --> SubjectEngine
    Freelance --> SubjectEngine
    Corp --> SubjectEngine
    SubjectEngine --> ExamEngine
    SubjectEngine --> AIServices
    SubjectEngine --> LMSmod
Mode Registration Learning Plan Content Billing
UTAS Student SIS sync or admin batch import AI-generated, curriculum-aligned (topics from UTAS syllabus) Manual resources from UTAS staff + AI supplementary Institutional license
Freelance Student Self-registration Fully AI-generated (topic selection from global taxonomy) AI-generated primary + curated community resources Individual subscription (Stripe/PayPal/Paymob)
Corporate Student Admin batch import or code-based Teacher/admin assigned + adaptive Entity-managed resources + AI supplementary Corporate license

3. User Roles and Multi-Tenancy

3.1 User Types

Type Access Key Capabilities
student Student portal Take exams, follow learning plans, view grades, attend classes, receive AI coaching
teacher Teacher portal Create courses, manage assignments, grade students, upload resources, view class analytics
admin Full admin portal Manage users/entities/classrooms, configure platform, generate exams, manage workflows
corporate Corporate dashboard Manage entity members, view entity statistics, bulk operations
mastercorporate Multi-entity corporate Cross-entity management and reporting
agent Sales agent Visible on landing page, sales operations
developer Developer tools System diagnostics, advanced configuration

3.2 Entity-Scoped Permissions

All data access is scoped by entity membership. A user may belong to multiple entities with different roles in each. Permission checks combine global user type + entity role permissions.


4. Authentication and Authorization

4.1 Authentication

Method Detail
Primary Odoo JWT (HS256). Login returns access token; all API calls include Authorization: Bearer <token>.
Session Token stored in httpOnly cookie or localStorage (frontend decision).
Registration Self-registration (freelance), batch import (institutional), code-based (corporate).
Password Reset Email-based verification flow via /api/reset and /api/reset/sendVerification.

4.2 Authorization -- Entity Role Permissions

77 entity-scoped permissions organized by category:

Category Permissions
User Management view_students, edit_students, delete_students, view_teachers, edit_teachers, delete_teachers, view_corporates, edit_corporates, delete_corporates, view_mastercorporates, edit_mastercorporates, delete_mastercorporates, create_user, create_user_batch
Exam Management generate_{module}, view_{module}, delete_{module} for each subject skill. Legacy: reading/listening/writing/speaking/level. New: parameterized by subject and skill via subject taxonomy.
Classroom view_classrooms, create_classroom, rename_classrooms, add_to_classroom, remove_from_classroom, delete_classroom, upload_classroom
Entity view_entities, rename_entity, add_to_entity, remove_from_entity, delete_entity, view_entity_roles, create_entity_role, rename_entity_role, edit_role_permissions, assign_to_role, delete_entity_role, view_entity_statistics
Assignment view_assignments, create_assignment, edit_assignment, delete_assignment, start_assignment, archive_assignment
Content create_code, create_code_batch, view_code_list, delete_code, edit_grading_system
Reporting view_statistics, download_statistics_report, view_student_performance, view_student_record, download_student_record, download_user_list
Financial pay_entity, view_payment_record
Workflow view_workflows, configure_workflows, edit_workflow, delete_workflow, view_approval_workflows, update_exam_privacy, view_confidential_exams, create_confidential_exams, create_public_exams

4.3 Global Permissions

Global permissions control page-level access independent of entity:

Topic Permissions
Manage Corporate viewCorporate, editCorporate, deleteCorporate, createCodeCorporate
Manage Admin viewAdmin, editAdmin, deleteAdmin, createCodeAdmin
Manage Student viewStudent, editStudent, deleteStudent, createCodeStudent
Manage Teacher viewTeacher, editTeacher, deleteTeacher, createCodeTeacher
Manage Exams createReadingExam, createListeningExam, createWritingExam, createSpeakingExam, createLevelExam -- extended per subject
View Pages viewExams, viewExercises, viewRecords, viewStats, viewTickets, viewPaymentRecords
Manage Groups viewGroup, editGroup, deleteGroup, createGroup
Manage Codes viewCodes, deleteCodes, createCodes
Super all

4.4 Permission Extension for Multi-Subject (AD-5)

The current permission model is IELTS-hardcoded (generate_reading, createWritingExam, etc.). For multi-subject support:

Strategy: Add subject-parameterized permissions while maintaining backward compatibility.

Current (IELTS-only) New (Universal) Mapping
generate_reading generate_exam:english:reading Existing English exams auto-map
generate_writing generate_exam:english:writing Same
(new) generate_exam:math:algebra New subject permissions
(new) generate_exam:it:networking New subject permissions
(new) manage_taxonomy:{subject} Taxonomy administration per subject
(new) manage_resources:{subject} Resource upload per subject
(new) view_adaptive:{subject} View adaptive learning data per subject

5. Global UI Shell

5.1 Navbar

ID Requirement Source
FR-GNAV-01 Brand/logo links to role-appropriate dashboard Production
FR-GNAV-02 Student: subject progress indicators (mastery % per enrolled subject) New (replaces IELTS-only skill indicators)
FR-GNAV-03 Help button opens ticket submission with page context Production
FR-GNAV-04 Subscription/expiry indicator; link to payment when applicable Production
FR-GNAV-05 Profile link to /profile Production
FR-GNAV-06 Mobile-responsive menu Production
FR-GNAV-07 AI Search Bar (global) -- keyword search with AI-powered suggestions, route to relevant pages New frontend
FR-GNAV-08 AI Assistant Drawer -- chat-style AI help accessible from any page New frontend

5.2 Sidebar Navigation

ID Requirement
FR-SIDE-01 Entries appear only when permitted (user type + entity permissions)
FR-SIDE-02 Sidebar minimize preference persisted locally
FR-SIDE-03 Logout ends session and clears state
FR-SIDE-04 Ticket badge shows assigned count

Student sidebar: Dashboard, Subjects, Courses, Subject Registration, Assignments, Grades, Attendance, Timetable, Profile

Teacher sidebar: Dashboard, Courses, Assignments, Attendance, Students, Timetable, Profile

Admin sidebar (grouped):

Group Items
LMS Dashboard, Courses, Students, Teachers, Batches, Timetable, Reports, Settings
Platform Platform Dashboard
Institutional Academic Years, Departments, Admissions, Exam Sessions, Marksheets
Academic Assignments, Exams List, Exam Structures, Rubrics, Generation, Approval Workflows
Management Users, Entities, Classrooms, Taxonomy Manager, Resource Manager
Reports Student Performance, Stats Corporate, Record
Training Vocabulary, Grammar
Support Payment Record, Tickets, Settings

5.3 Breadcrumbs

Inner pages show: Home > Section > Nested segments (e.g., Assignments > Creator, Training > Vocabulary).


Part II -- Universal Subject Engine

6. Subject Taxonomy

6.1 Hierarchy

Subject (e.g., Mathematics)
└── Domain (e.g., Algebra)
    └── Topic (e.g., Linear Equations)
        └── Learning Objective (e.g., "Solve 2-variable systems")

Topics form a directed acyclic graph via prerequisite relationships. A student cannot begin a topic until all prerequisites reach Proficient (mastery >= 60%).

6.2 IELTS / English Taxonomy

The existing IELTS skills map into the universal taxonomy:

English / IELTS
├── Reading
│   ├── Skimming and Scanning (prerequisites: none)
│   ├── Detail Comprehension (prerequisites: Skimming)
│   ├── Inference and Deduction (prerequisites: Detail Comprehension)
│   └── Academic Reading (prerequisites: Inference)
├── Listening
│   ├── Section 1-2: Social/Everyday (prerequisites: none)
│   ├── Section 3-4: Academic (prerequisites: Section 1-2)
│   └── Note/Summary Completion (prerequisites: Section 1-2)
├── Writing
│   ├── Task 1 General: Letter (prerequisites: none)
│   ├── Task 1 Academic: Data Description (prerequisites: none)
│   └── Task 2: Essay (prerequisites: Task 1 General or Task 1 Academic)
├── Speaking
│   ├── Part 1: Introduction (prerequisites: none)
│   ├── Part 2: Long Turn (prerequisites: Part 1)
│   └── Part 3: Discussion (prerequisites: Part 2)
└── General English
    ├── Grammar Foundations (prerequisites: none)
    ├── Vocabulary Building (prerequisites: none)
    └── Pronunciation (prerequisites: none)

6.3 Mathematics Taxonomy

Mathematics
├── Arithmetic
│   ├── Number Operations (prerequisites: none)
│   ├── Fractions and Decimals (prerequisites: Number Operations)
│   └── Ratios and Proportions (prerequisites: Fractions)
├── Algebra
│   ├── Algebraic Expressions (prerequisites: Number Operations)
│   ├── Linear Equations (prerequisites: Algebraic Expressions)
│   ├── Quadratic Equations (prerequisites: Linear Equations)
│   └── Polynomials (prerequisites: Quadratic Equations)
├── Geometry
│   ├── Basic Shapes (prerequisites: Number Operations)
│   ├── Angles and Triangles (prerequisites: Basic Shapes)
│   ├── Coordinate Geometry (prerequisites: Linear Equations, Basic Shapes)
│   └── Trigonometry (prerequisites: Angles, Coordinate Geometry)
├── Statistics and Probability
│   ├── Data Representation (prerequisites: Number Operations)
│   ├── Central Tendency (prerequisites: Data Representation)
│   └── Basic Probability (prerequisites: Fractions)
└── Calculus
    ├── Limits (prerequisites: Polynomials, Coordinate Geometry)
    ├── Derivatives (prerequisites: Limits)
    └── Integrals (prerequisites: Derivatives)

6.4 Information Technology Taxonomy

Information Technology
├── Computer Fundamentals
│   ├── Hardware Components (prerequisites: none)
│   ├── Operating Systems (prerequisites: Hardware)
│   └── Number Systems (prerequisites: none)
├── Networking
│   ├── Network Basics (prerequisites: Hardware)
│   ├── TCP/IP Model (prerequisites: Network Basics)
│   ├── IP Addressing (prerequisites: TCP/IP, Number Systems)
│   └── Network Security (prerequisites: IP Addressing)
├── Databases
│   ├── Database Concepts (prerequisites: Operating Systems)
│   ├── SQL Fundamentals (prerequisites: Database Concepts)
│   ├── Database Design (prerequisites: SQL Fundamentals)
│   └── Advanced SQL (prerequisites: Database Design)
├── Programming
│   ├── Programming Logic (prerequisites: none)
│   ├── Python Basics (prerequisites: Programming Logic)
│   ├── Data Structures (prerequisites: Python Basics)
│   └── Object-Oriented Programming (prerequisites: Data Structures)
└── Cybersecurity
    ├── Security Fundamentals (prerequisites: Network Security)
    └── Cryptography Basics (prerequisites: Security Fundamentals, Number Systems)

6.5 Taxonomy Management

Action Actor API
Create/edit subjects Admin POST/PATCH /api/subjects
Create/edit domains Admin / Staff POST/PATCH /api/domains
Create/edit topics with prerequisites Staff POST/PATCH /api/topics
Create/edit learning objectives Staff Nested in topic API
Bulk import taxonomy (JSON/CSV) Admin POST /api/subjects/{id}/taxonomy/import
AI-suggest sub-topics for a domain Staff POST /api/domains/{id}/ai-suggest

7. Diagnostic Assessment

7.1 Purpose

When a student begins a new subject, a diagnostic assessment determines their per-topic proficiency. This is the input for learning plan generation. For English, this replaces/extends the existing Level Test.

7.2 Adaptive Algorithm

The diagnostic uses Computer Adaptive Testing: starts at medium difficulty, adjusts up on correct answers, down on incorrect. Cycles through domains round-robin.

Parameter Default Configurable
questions_per_domain 4 Yes (per subject)
total_question_cap 25 Yes
time_limit_minutes 45 Yes
starting_difficulty medium Yes
mastery_per_correct +25 Yes
mastery_per_incorrect -10 Yes

7.3 Question Types per Subject

Subject Question Types
English Multiple choice, fill blanks, short answer, essay (writing), oral (speaking)
Math Multiple choice, numerical (tolerance-graded), short answer, fill blanks, worked problem (multi-step)
IT Multiple choice, true/false, short answer, code completion, scenario-based

7.4 Integration with Existing Exam Model

Diagnostics reuse encoach.exam with is_diagnostic = True and a new subject_id field. MODULE_SELECTION extended with math_diagnostic, it_diagnostic. The existing level module maps to english_diagnostic.


8. Proficiency Profile

8.1 Mastery Levels

Level Score Range Color
Not Started 0-19% Grey
Beginner 20-39% Red
Developing 40-59% Orange
Proficient 60-79% Yellow
Mastered 80-100% Green

8.2 Profile Updates

Trigger Update Logic
Diagnostic Initial scores set per topic
Practice exercises +5 correct, -2 incorrect
Mastery quiz Pass (>= threshold): topic mastered. Fail: weighted average recalculation.
Time decay -5% per week of inactivity after 30 days, floor at last quiz score minus 20%

9. Learning Plan Generation

9.1 Two Modes

Mode UTAS Student Freelance Student
Scope Topics from UTAS curriculum for enrolled courses All topics in selected subject
Constraints Semester dates, course schedule Self-set target date or open-ended
Content UTAS-uploaded resources + AI supplementary AI-generated primary + community resources
Prerequisite enforcement Yes, with teacher override Yes, no override
Plan visibility Student + assigned teacher + admin Student only

9.2 Algorithm

  1. Topological sort -- order topics respecting prerequisites
  2. Filter mastered -- exclude topics with mastery >= threshold
  3. Prioritize -- lowest mastery first, balanced across domains
  4. Estimate duration -- based on topic complexity and current mastery
  5. AI refinement -- GPT-4o generates motivational summary and specific advice

9.3 Plan Adjustments

Trigger Action
Faster mastery than estimated Unlock next topic early
3+ failed mastery quizzes Additional resources, AI coaching intensified
Teacher override (UTAS) Reorder, add/remove topics
7+ days inactive Notification; 14+ days pauses plan

10. Hybrid Content Delivery

10.1 Content Resolution Order

  1. Human-uploaded resources tagged to the topic (PDFs, videos, links)
  2. AI-generated content if no human resources exist (explanations, worked examples, summaries)
  3. Content gap flag if neither is available -- notifies admin

10.2 Resource Types

Type Format Upload
PDF .pdf File upload
Video URL (YouTube, Vimeo) or file upload URL or multipart
External Link Any URL URL field
Document .docx, .pptx File upload
Interactive Embedded HTML URL field

10.3 AI Coaching

Action Backend Service Trigger
Answer explanation GPT-4o After each practice question
Hint GPT-4o Student requests during practice
Study suggestion GPT-4o After completing a topic section
Weakness analysis GPT-4o After failing mastery quiz
Formula reference (Math) Static + GPT-4o On demand
Motivational nudge GPT-4o 3+ days inactive

11. Progress Tracking and Mastery

11.1 Mastery Quiz

Parameter Value
Questions 5-10 (configurable per subject)
Time limit 15 minutes (configurable)
Pass threshold 80% (configurable per subject)
Attempts Unlimited, new questions each time
Cooldown 1 hour between attempts
On pass Topic completed, next unlocked
On fail Mastery recalculated, AI coaching triggered

11.2 Spaced Repetition

Days Since Mastery Review
7 3 quick-recall questions
30 5 questions at original difficulty
90 Full mastery quiz equivalent

11.3 Analytics

Student: Overall mastery %, domain radar chart, plan progress, study streak, upcoming reviews.

Teacher: Class mastery heatmap, at-risk students, content gap report, time per topic vs estimate.

Admin: Subject-level stats (enrollments, completion rates, avg mastery), AI usage metrics, resource utilization.


Part III -- LMS Module

12. Course Management

12.1 Overview

Courses are managed through OpenEduCat models exposed via REST API. The frontend provides student, teacher, and admin course views.

12.2 Functional Requirements

ID Requirement Route Role
FR-CRS-01 List enrolled courses with progress /student/courses Student
FR-CRS-02 View course detail with modules and lessons /student/courses/:id Student
FR-CRS-03 List managed courses /teacher/courses Teacher
FR-CRS-04 Create new course with modules and lessons /teacher/courses/new Teacher
FR-CRS-05 Edit existing course /teacher/courses/:id/edit Teacher
FR-CRS-06 Admin course management (all courses, all entities) /admin/courses Admin

12.3 Course Data Model

Field Type Description
title String Course title
code String Course code (e.g., "MATH101")
subject_id Reference Link to subject taxonomy
instructor_id Reference Assigned teacher
description Text Course description
level Selection Beginner, Intermediate, Advanced
modules One2many Course modules (units)
max_capacity Integer Enrollment limit
start_date / end_date Date Course period
status Selection draft, active, archived

13. Batch and Enrollment

ID Requirement Route
FR-BATCH-01 List batches with student counts /admin/batches
FR-BATCH-02 View batch detail with enrolled students /admin/batches/:id
FR-BATCH-03 Create batch, assign students and courses Admin
FR-BATCH-04 Enrollment: student self-enrollment (freelance) or admin assignment (UTAS) API

14. Timetable and Attendance

ID Requirement Route Role
FR-TT-01 View personal timetable /student/timetable Student
FR-TT-02 View teaching timetable /teacher/timetable Teacher
FR-TT-03 Manage timetable (create, edit sessions) /admin/timetable Admin
FR-ATT-01 View personal attendance /student/attendance Student
FR-ATT-02 Record attendance for class /teacher/attendance Teacher

15. Gradebook and Reports

ID Requirement Route Role
FR-GRD-01 View personal grades across courses /student/grades Student
FR-GRD-02 Grade student submissions /teacher/assignments/:id Teacher
FR-RPT-01 Academic reports with charts /admin/reports Admin
FR-RPT-02 AI-generated report narratives /admin/reports (AiReportNarrative) Admin

Part IV -- Exam Engine

16. Exam Management

16.1 Exam CRUD (Production Parity)

ID Requirement Source
FR-EX-01 Filter exams by module (extended: by subject and skill) Production
FR-EX-02 Load exam by Exam ID Production
FR-EX-03 Text search Production
FR-EX-04 Pagination and page size Production
FR-EX-05 Columns: title, creator, module, rubrics, difficulty, exercises, timer, access, created at Production
FR-EX-06 Row actions: set public/private, edit, load, delete Production
FR-EX-07 NEW: Subject filter (English, Math, IT) alongside module filter New

16.2 Rubrics (Production Parity)

ID Requirement
FR-RUB-01-05 Search, pagination, create rubric, filter dropdown, metadata and edit
FR-RG-01-05 Rubric groups: search, pagination, create, filter, edit/delete

16.3 Exam Structures (Production Parity)

ID Requirement
FR-ES-01 Entity selector
FR-ES-02 Text search
FR-ES-03 Create structure (extended: per subject)
FR-ES-04 Delete structure(s)
FR-ES-05 Pagination

17. AI Content Generation

17.1 Generation per Subject

Subject AI Generates Prompt Model
English Reading passages, listening scripts, writing tasks, speaking questions, level test exercises GPT-4o (temp 0.7 for generation)
Math Questions per topic (MCQ, numerical, word problems, worked problems) GPT-4o with LaTeX output
IT Questions per topic (MCQ, true/false, code completion, scenarios) GPT-4o with code block output

17.2 Generation Workflow

ID Requirement Source
FR-GEN-01 Select title, label, entity, subject, and skill/module Production (extended)
FR-GEN-02 AI generates exam content via GPT-4o Production
FR-GEN-03 NEW: AI Creation Assistant -- modal flow for "Create with AI" for courses, exams, rubrics, assignments New frontend (AiCreationAssistant)
FR-GEN-04 NEW: AI Generator Modal -- configurable generation parameters New frontend (AiGeneratorModal)

18. Exam Delivery

18.1 Delivery Modes

Mode Route Chrome
Practice /exam Full UI with navigation
Assignment /exam?assignment={id} Reduced chrome
Official /official-exam Minimal chrome, strict timer
Diagnostic /student/diagnostic/:subjectId Adaptive, one question at a time
Mastery Quiz /student/mastery-quiz/:topicId Standard quiz, fresh questions

18.2 Media Integration

Media Service Usage
Listening audio AWS Polly TTS English listening sections (11 neural voices)
Speaking video ELAI avatars English speaking prompts (7 avatars)
Speaking transcription Whisper STT Student audio transcription for grading

19. AI Grading

19.1 Grading per Subject

Subject Grading Type Method
English Writing Rubric-based (IELTS band scoring) GPT-4o (temp 0.1) evaluates Task Achievement, Coherence, Lexical Resource, Grammar
English Speaking Rubric-based (IELTS band scoring) Whisper transcription + GPT-4o grading
English Short Answer Passage-based GPT-4o evaluates against correct answers
Math MCQ Exact match Direct comparison
Math Numerical Tolerance-based abs(student - correct) <= tolerance
Math Worked Problem Step evaluation GPT-4o evaluates methodology and answer
IT MCQ / True-False Exact match Direct comparison
IT Code Completion AI evaluation GPT-4o evaluates correctness, approach, quality
IT Scenario AI evaluation GPT-4o evaluates against rubric
All Writing AI detection GPTZero per-sentence analysis

19.2 Approval Workflows (Production Parity)

ID Requirement
FR-AWF-01 List/filter workflows
FR-AWF-02 Create templates / add workflow
FR-AWF-03 NEW: AI Grading Assistant on workflow page

Part V -- AI Services

20. AI Services Catalog

Service Model Config Usage
OpenAI GPT-4o gpt-4o (primary), gpt-3.5-turbo (secondary) Temp: 0.1 grading, 0.7 generation, 0.2 summaries. Max tokens: 4,097. JSON format. Exam generation, grading, evaluation, training tips, learning plans, coaching, content generation
Whisper base (local, ~1GB) 4 instances, round-robin, 16kHz mono, 30s chunks Speaking transcription, audio-to-text
AWS Polly Neural engine 11 voices, MP3, 3,000 char chunks Listening exam audio
ELAI 7 avatars ElevenLabs + Azure voices, fade_in animation Speaking exam video, virtual tutoring
GPTZero v2/predict/text Per-sentence analysis, confidence scoring Writing AI detection
FAISS IndexFlatL2 + all-MiniLM-L6-v2 Top-5, per-subject indices Training tips, content recommendations

21. AI Integration in Frontend

Each simulated AI component in the new frontend maps to a real backend service:

Frontend Component Mock Behavior Real Backend Integration
AiAssistantDrawer Canned responses via mockResponses map GPT-4o conversational API. Context: current page, student profile, recent activity. Endpoint: POST /api/coach/chat
AiSearchBar Keyword-to-route mapping GPT-4o semantic search + FAISS. Returns relevant content, pages, and actions. Endpoint: POST /api/ai/search
AiCreationAssistant Simulated creation flows GPT-4o generates course outlines, exam content, rubrics, assignments based on type parameter. Endpoints: existing /api/exam/*/generate + new /api/courses/ai-generate
AiGeneratorModal Simulated with setTimeout Real generation call to GPT-4o with progress streaming. Endpoint: existing generation endpoints
AiGradingAssistant Fixed suggested marks Real grading via POST /api/evaluate/writing or /api/evaluate/speaking or /api/grading/multiple. Returns scores + feedback
AiWritingHelper useAiSimulation delay GPT-4o writing assistance. Endpoint: POST /api/coach/writing-help
AiGradeExplainer Static explanation GPT-4o explains grade breakdown. Endpoint: POST /api/coach/explain
AiStudyCoach Rotating static tips Real adaptive engine: proficiency profile + FAISS tips + GPT-4o recommendations. Endpoint: POST /api/coach/suggest
AiInsightsPanel Static insight cards GPT-4o analysis of student/class data. Endpoint: POST /api/ai/insights
AiTipBanner Static tips Context-aware tips from FAISS + GPT-4o. Endpoint: GET /api/coach/tip?context={page}
AiAlertBanner Static alerts Rule-based alerts (attendance, grades) + GPT-4o severity assessment. Endpoint: GET /api/ai/alerts
AiReportNarrative Static narrative GPT-4o generates report narrative from analytics data. Endpoint: POST /api/ai/report-narrative
AiRiskBadge Heuristic from mock data Risk calculation from attendance + grades + engagement. Endpoint: included in student profile API
AiBatchOptimizer Static suggestions GPT-4o analyzes batch composition and suggests optimizations. Endpoint: POST /api/ai/batch-optimize
useAiSimulation setTimeout + canned response Replaced by real TanStack Query mutations to backend APIs

Part VI -- Administration

22. User Management (Production Parity)

ID Requirement Route
FR-USR-01 Filter by entity /users?type=student|teacher|corporate|mastercorporate
FR-USR-02 Text search (name/email) Same
FR-USR-03 Download/export Same
FR-USR-04 Pagination and page size Same
FR-USR-05 Type-specific columns (name, email, type, entities, classrooms, student ID, verified) Same
FR-USR-06 NEW: Subject enrollment status per student New

23. Entity Management (Production Parity)

ID Requirement
FR-ENT-01 Search and pagination
FR-ENT-02 Create entity (label, licenses/capacity, member selection)
FR-ENT-03 Cards: usage/capacity, role counts
FR-ENT-04 Role and permission management per entity

24. Classroom Management (Production Parity)

ID Requirement
FR-CL-01 Entity filter and search
FR-CL-02 Cards: name, admin, entity, participant count
FR-CL-03 Create classroom
FR-CL-04 Transfer students across classrooms
FR-CL-05 Delete / bulk delete

25. Assignment Management (Production Parity)

ID Requirement
FR-ASG-01 Tabs: Active, Planned, Past, Start Expired, Archived with counts
FR-ASG-02 Create assignment (entity, dates, classrooms, assignees, exams)
FR-ASG-03 Search and pagination (state, page, size)
FR-ASG-04 Breadcrumb navigation
FR-ASG-05 Assignment execution via /exam?assignment={id}
FR-ASG-06 NEW: Subject-scoped assignments (assign Math exams, IT exams, not just IELTS)

26. Permission Management (Production Parity + Extension)

ID Requirement
FR-PERM-01 Navigate permission types at /permissions
FR-PERM-02 View/edit permission details at /permissions/:id
FR-PERM-03 NEW: Subject-parameterized permissions in UI (select subject, then skill permissions)

Part VII -- Support and Commercial

27. Ticketing System (Production Parity)

ID Requirement
FR-TCK-01 Filters: Status, Type, Assignee, Source (All/Webpage/Platform)
FR-TCK-02 Sort by date
FR-TCK-03 Columns: ID, Type, Reporter, Source, Date, Subject, Status, Assignee, Corporate
FR-TCK-04 Pagination

28. Subscriptions and Payments

28.1 Billing Models

Model Description Payment
Institutional License UTAS or corporate entity purchases bulk licenses Invoice-based or Stripe/PayPal
Individual Subscription Freelance student purchases access per subject or platform-wide Stripe, PayPal, or Paymob
Package Predefined bundles (e.g., "IELTS Complete", "Math + IT Bundle") Per-package pricing

28.2 Functional Requirements (Production Parity)

ID Requirement Route
FR-PAY-01 Payment page with entity context /payment
FR-PAY-02 Payment record / ledger /payment-record
FR-PAY-03 Package listing /api/packages
FR-PAY-04 Stripe checkout flow /api/stripe
FR-PAY-05 PayPal checkout flow /api/paypal
FR-PAY-06 Paymob checkout flow /api/paymob
FR-PAY-07 Webhook handling (Stripe, PayPal, Paymob) /api/*/webhook

29. Training Content

29.1 Existing (Production Parity)

ID Requirement Route
FR-TRN-01 Training hub with entity/user/time filters /training
FR-TRN-02 Vocabulary training (progress, recommended, sections) /training/vocabulary
FR-TRN-03 Grammar training (parallel structure) /training/grammar
FR-TRN-04 Record view with entity/user/time/assignment filters /record

29.2 New (Subject-Specific Tips)

ID Requirement
FR-TRN-05 NEW: Math-specific training tips via FAISS (algebra, geometry, statistics indices)
FR-TRN-06 NEW: IT-specific training tips via FAISS (networking, databases, programming indices)
FR-TRN-07 NEW: Personalized post-exam tips using subject-specific FAISS + GPT-4o selection

Part VIII -- Institutional LMS (OpenEduCat)

All LMS features in this part are backed by OpenEduCat community modules (ported to Odoo 19). The encoach_lms_api module extends these models and exposes them via REST API to the React frontend.


30. Academic Year and Term Management

30.1 Overview

Academic years define the institutional calendar. Each year contains terms (semesters, quarters) that govern course scheduling, batch periods, and exam sessions.

30.2 Data Models (OpenEduCat)

op.academic.year

Field Type Description
name Char Academic year name (e.g., "2026-2027")
start_date Date Year start
end_date Date Year end
term_structure Selection two_sem, two_sem_qua, three_sem, four_Quarter, final_year, others
academic_term_ids One2many Terms within this year

op.academic.term

Field Type Description
name Char Term name (e.g., "Semester 1")
term_start_date Date Term start
term_end_date Date Term end
academic_year_id Many2one Parent academic year
parent_term Many2one Parent term (for quarters within semesters)

30.3 Functional Requirements

ID Requirement Route Role
FR-AY-01 List academic years with terms /admin/academic-years Admin
FR-AY-02 Create academic year with term structure selection /admin/academic-years Admin
FR-AY-03 Auto-generate terms based on selected structure /admin/academic-years Admin
FR-AY-04 Edit/delete academic years and terms /admin/academic-years Admin
FR-AY-05 Link batches and courses to academic terms Related pages Admin

30.4 API Endpoints

Method Path Description
GET /api/academic-years List academic years
POST /api/academic-years Create academic year
GET /api/academic-years/{id} Get year with terms
PATCH /api/academic-years/{id} Update year
DELETE /api/academic-years/{id} Delete year
POST /api/academic-years/{id}/generate-terms Auto-generate terms from structure
GET /api/academic-terms List terms (filter by year)
POST /api/academic-terms Create term
PATCH /api/academic-terms/{id} Update term
DELETE /api/academic-terms/{id} Delete term

31. Department Management

31.1 Overview

Departments organize faculty, courses, and subjects into academic units (e.g., "Department of Mathematics", "Department of IT").

31.2 Data Model (OpenEduCat)

op.department

Field Type Description
name Char Department name
code Char Department code
parent_id Many2one Parent department (for hierarchy)

31.3 Functional Requirements

ID Requirement Route Role
FR-DEPT-01 List departments /admin/departments Admin
FR-DEPT-02 Create/edit department /admin/departments Admin
FR-DEPT-03 Delete department /admin/departments Admin
FR-DEPT-04 Assign department to courses and faculty Related pages Admin

31.4 API Endpoints

Method Path Description
GET /api/departments List departments
POST /api/departments Create department
PATCH /api/departments/{id} Update department
DELETE /api/departments/{id} Delete department

32. Admission and Enrollment

32.1 Overview

The admission workflow manages student applications from submission through confirmation to enrollment. Admission registers define open enrollment windows.

32.2 Data Models (OpenEduCat)

op.admission.register

Field Type Description
name Char Register name (e.g., "Fall 2026 Admissions")
course_id Many2one Target course
start_date Date Application window start
end_date Date Application window end
min_count Integer Minimum applications to proceed
max_count Integer Maximum applications accepted
state Selection draft, confirm, cancel, done
product_id Many2one Fee product for admission

op.admission

Field Type Description
name Char Applicant name
application_number Char Auto-generated application number
register_id Many2one Admission register
course_id Many2one Applied course
batch_id Many2one Target batch
first_name Char First name
middle_name Char Middle name
last_name Char Last name
email Char Email
phone Char Phone
birth_date Date Date of birth
gender Selection m, f, o
nationality Many2one Country
state Selection draft, submit, confirm, admission, reject, cancel, done
fees Float Admission fee amount
image Binary Applicant photo
student_id Many2one Created student record (after admission)

32.3 Functional Requirements

ID Requirement Route Role
FR-ADM-01 List admission registers with status /admin/admission-register Admin
FR-ADM-02 Create/edit admission register (course, dates, capacity) /admin/admission-register Admin
FR-ADM-03 Open/close admission register /admin/admission-register Admin
FR-ADM-04 List admissions with filters (status, course, register) /admin/admissions Admin
FR-ADM-05 View admission detail /admin/admissions/:id Admin
FR-ADM-06 Transition admission status (submit, confirm, admit, reject) /admin/admissions/:id Admin
FR-ADM-07 On admit: auto-create op.student and op.student.course records Backend System
FR-ADM-08 Public admission application form /apply Public/Student
FR-ADM-09 Applicant status tracking /apply/status Public

32.4 API Endpoints

Method Path Description
GET /api/admission-registers List registers
POST /api/admission-registers Create register
PATCH /api/admission-registers/{id} Update register
POST /api/admission-registers/{id}/confirm Confirm register
POST /api/admission-registers/{id}/close Close register
GET /api/admissions List admissions
GET /api/admissions/{id} Get admission detail
POST /api/admissions Submit admission application
POST /api/admissions/{id}/submit Submit for review
POST /api/admissions/{id}/confirm Confirm admission
POST /api/admissions/{id}/admit Admit applicant (creates student)
POST /api/admissions/{id}/reject Reject admission

33. Subject Registration

33.1 Overview

Within enrolled courses, students register for specific subjects. This is required for timetable, attendance, and exam eligibility.

33.2 Data Model (OpenEduCat)

op.subject.registration

Field Type Description
student_id Many2one Student
course_id Many2one Course
batch_id Many2one Batch
subject_ids Many2many Selected subjects
min_unit_load Float Minimum units from course config
max_unit_load Float Maximum units from course config
state Selection draft, confirm, reject, done

33.3 Functional Requirements

ID Requirement Route Role
FR-SR-01 Students view available subjects for enrolled courses /student/subject-registration Student
FR-SR-02 Students select subjects within unit load limits /student/subject-registration Student
FR-SR-03 Submit registration for approval /student/subject-registration Student
FR-SR-04 Admin/teacher view and approve/reject registrations /admin/students Admin
FR-SR-05 Confirmed registration updates op.student.course.subject_ids Backend System

33.4 API Endpoints

Method Path Description
GET /api/subject-registrations List registrations (filter by student, course, status)
POST /api/subject-registrations Create registration
PATCH /api/subject-registrations/{id} Update subjects
POST /api/subject-registrations/{id}/confirm Confirm registration
POST /api/subject-registrations/{id}/reject Reject registration
GET /api/subject-registrations/available Get available subjects for current student

34. Institutional Exam Sessions

34.1 Overview

Institutional exam sessions group traditional exams (midterms, finals) for a course/batch. These are separate from EnCoach AI-powered exams. They use the OpenEduCat exam, marksheet, and grading system.

34.2 Data Models (OpenEduCat)

op.exam.session

Field Type Description
name Char Session name (e.g., "Fall 2026 Midterms")
course_id Many2one Course
batch_id Many2one Batch
exam_code Char Session code
start_date Date Session start
end_date Date Session end
exam_type Many2one Exam type (midterm, final, quiz)
evaluation_type Selection normal or grade
venue Many2one Venue partner
state Selection draft, schedule, held, cancel, done
exam_ids One2many Exams in this session

op.exam (institutional)

Field Type Description
name Char Exam name
session_id Many2one Parent session
subject_id Many2one Subject being examined
exam_code Char Exam code
start_time Datetime Exam start
end_time Datetime Exam end
total_marks Integer Maximum marks
min_marks Integer Passing marks
state Selection draft, schedule, held, result_updated, cancel, done
responsible_id Many2many Responsible faculty
attendees_line One2many Exam attendees with marks

op.exam.type

Field Type Description
name Char Type name (Midterm, Final, Quiz, Lab)

op.exam.room

Field Type Description
name Char Room name
classroom_id Many2one Linked classroom
capacity Integer Room capacity

op.exam.attendees

Field Type Description
exam_id Many2one Exam
student_id Many2one Student
room_id Many2one Assigned room
marks Integer Obtained marks
status Selection pass, fail (computed from marks vs min_marks)

op.marksheet.register

Field Type Description
name Char Register name
exam_session_id Many2one Exam session
marksheet_line One2many Marksheet lines per student
result_template_id Many2one Result template
state Selection draft, validated, cancelled
total_pass Integer Computed pass count
total_failed Integer Computed fail count

op.marksheet.line

Field Type Description
student_id Many2one Student
marksheet_reg_id Many2one Parent register
result_line One2many Per-exam results
total_marks Integer Computed total
percentage Float Computed percentage
grade Char Computed grade (if grade evaluation)
status Selection pass, fail (computed)

op.result.line

Field Type Description
marksheet_line_id Many2one Parent marksheet line
exam_id Many2one Exam
student_id Many2one Student
marks Integer Marks obtained
grade Char Computed grade
status Selection pass, fail (computed from marks vs min_marks)

op.result.template

Field Type Description
name Char Template name
exam_session_id Many2one Exam session
grade_ids Many2many Grade configuration rules
result_date Date Result publication date
state Selection draft, result_generated

op.grade.configuration

Field Type Description
min_per Integer Minimum percentage
max_per Integer Maximum percentage
result Char Grade display (e.g., "A", "B+", "Pass")

34.3 Functional Requirements

ID Requirement Route Role
FR-IEX-01 List exam sessions with status filters /admin/exam-sessions Admin
FR-IEX-02 Create exam session (course, batch, dates, type) /admin/exam-sessions Admin
FR-IEX-03 Add exams to session (subject, time, marks) /admin/exam-sessions Admin
FR-IEX-04 Schedule and manage session state transitions /admin/exam-sessions Admin
FR-IEX-05 Enter marks for exam attendees /admin/exam-sessions Admin/Teacher
FR-IEX-06 Configure grade scales /admin/marksheets Admin
FR-IEX-07 Create result templates and generate marksheets /admin/marksheets Admin
FR-IEX-08 View marksheet results (pass/fail, grades, percentages) /admin/marksheets Admin
FR-IEX-09 Students view institutional exam results /student/grades Student

34.4 API Endpoints

Method Path Description
GET /api/inst-exam-sessions List exam sessions
POST /api/inst-exam-sessions Create session
GET /api/inst-exam-sessions/{id} Get session with exams
PATCH /api/inst-exam-sessions/{id} Update session
DELETE /api/inst-exam-sessions/{id} Delete session
POST /api/inst-exam-sessions/{id}/schedule Schedule session
POST /api/inst-exam-sessions/{id}/done Mark session done
POST /api/inst-exams Add exam to session
PATCH /api/inst-exams/{id} Update exam
POST /api/inst-exams/{id}/attendees Add attendees
PATCH /api/inst-exams/{id}/marks Enter marks
GET /api/exam-types List exam types
POST /api/exam-types Create exam type
GET /api/grade-config List grade configurations
POST /api/grade-config Create grade config
GET /api/result-templates List result templates
POST /api/result-templates Create result template
POST /api/result-templates/{id}/generate Generate marksheets
GET /api/marksheets List marksheets
GET /api/marksheets/{id} Get marksheet with results
POST /api/marksheets/{id}/validate Validate marksheet

35. Assignment File Submissions

35.1 Overview

Traditional course assignments where students submit files and teachers grade them. Coexists with EnCoach exam-wrapper assignments (encoach.assignment).

35.2 Data Models (OpenEduCat)

grading.assignment.type

Field Type Description
name Char Type name (Homework, Project, Lab Report, Presentation)

grading.assignment

Field Type Description
name Char Assignment title
course_id Many2one Course
subject_id Many2one Subject
issued_date Datetime Issue date
assignment_type Many2one Assignment type
faculty_id Many2one Issuing faculty
point Float Maximum points

op.assignment (extends grading.assignment)

Field Type Description
batch_id Many2one Batch
marks Float Maximum marks
description Text Assignment description
state Selection draft, publish, finish, cancel
submission_date Datetime Submission deadline
allocation_ids Many2many Allocated students
assignment_sub_line One2many Student submissions
reviewer Many2one Reviewing faculty

op.assignment.sub.line

Field Type Description
assignment_id Many2one Parent assignment
student_id Many2one Submitting student
description Text Submission notes
submission_date Datetime Actual submission time
attachment_ids Many2many Uploaded files
marks Float Awarded marks
state Selection draft, submit, accept, reject, change_req
faculty_id Many2one Grading faculty
note Text Faculty feedback

35.3 Functional Requirements

ID Requirement Route Role
FR-SUB-01 Teacher creates course assignment with description, deadline, files /teacher/assignments Teacher
FR-SUB-02 Teacher publishes assignment (visible to allocated students) /teacher/assignments Teacher
FR-SUB-03 Student views assigned course assignments with deadlines /student/assignments Student
FR-SUB-04 Student uploads files as submission /student/assignments Student
FR-SUB-05 Teacher views submissions per assignment /teacher/assignments/:id Teacher
FR-SUB-06 Teacher grades submission (marks, feedback, accept/reject/change request) /teacher/assignments/:id Teacher
FR-SUB-07 Admin views all course assignments across batches /admin/assignments Admin

35.4 API Endpoints

Method Path Description
GET /api/course-assignments List course assignments
POST /api/course-assignments Create assignment
GET /api/course-assignments/{id} Get assignment with submissions
PATCH /api/course-assignments/{id} Update assignment
POST /api/course-assignments/{id}/publish Publish assignment
POST /api/course-assignments/{id}/finish Close assignment
GET /api/course-assignments/{id}/submissions List submissions
POST /api/course-assignments/{id}/submit Student submits (multipart file upload)
PATCH /api/submissions/{id} Grade submission (marks, feedback, status)
GET /api/assignment-types List assignment types
POST /api/assignment-types Create assignment type

Part IX -- Technical Specifications

36. Data Models

36.1 Existing Models (from ielts-be-v0)

Model Module Purpose
res.users (extended) encoach_core User accounts with EnCoach fields
encoach.entity encoach_core Tenant organizations
encoach.role encoach_core Entity roles
encoach.permission encoach_core Role permissions
encoach.code encoach_core Registration codes
encoach.invite encoach_core User invitations
encoach.exam encoach_exam Exam definitions (extended with subject_id, topic_ids)
encoach.approval.workflow encoach_exam Exam approval workflows
encoach.assignment encoach_assignment Exam assignments
encoach.group encoach_classroom Classroom groups
encoach.session encoach_stats Exam session state
encoach.stat encoach_stats Per-exercise statistics (extended with topic_id, subject_id)
encoach.evaluation encoach_evaluation Writing/speaking evaluation results
encoach.ai.job encoach_evaluation Background AI job tracking
encoach.training encoach_training Training content records
encoach.training.tip encoach_training Training tips with FAISS embeddings
encoach.walkthrough encoach_training Module walkthroughs
encoach.package encoach_subscription Subscription packages
encoach.subscription.payment encoach_subscription Payment records
encoach.discount encoach_subscription Discount codes
encoach.ticket encoach_ticket Support tickets
encoach.elai.avatar encoach_ai_media ELAI avatar profiles
encoach.registration encoach_registration Batch registration mixin

36.2 New Models (Adaptive Learning Engine)

Model Module Purpose Key Fields
encoach.subject encoach_taxonomy Top-level subjects name, code, is_active, diagnostic_config (JSON), mastery_threshold, grading_scale, grading_scale_config (JSON)
encoach.domain encoach_taxonomy Subject domains name, code, subject_id, sequence
encoach.topic encoach_taxonomy Topics with prerequisites name, code, domain_id, estimated_hours, difficulty_level, prerequisite_ids (M2M self-ref), question_type_weights (JSON)
encoach.learning.objective encoach_taxonomy Measurable objectives name, topic_id, bloom_level, sequence
encoach.resource encoach_resources Human-uploaded materials name, resource_type, file/url, topic_ids (M2M), author_id, is_published, review_status
encoach.proficiency encoach_adaptive Per-student per-topic mastery student_id, topic_id, mastery (float 0-100), mastery_level, last_assessed, time_spent_minutes
encoach.learning.plan encoach_adaptive Personalized study plan student_id, subject_id, status, ai_summary, overall_progress, target_completion
encoach.learning.plan.item encoach_adaptive Plan items plan_id, topic_id, sequence, status (locked/available/in_progress/completed), estimated_hours, actual_hours
encoach.resource.completion encoach_adaptive Resource viewing tracking student_id, resource_id, viewed, time_spent_minutes, rating
encoach.ai.content.cache encoach_adaptive Cached AI-generated content topic_id, content_type, difficulty_level, content, model_used, review_status

36.3 New Models (SIS Integration)

Model Module Purpose
encoach.sis.sync encoach_sis SIS sync job tracking
encoach.sis.mapping encoach_sis Field mapping between SIS and EnCoach

36.4 New Models (Branding)

Model Module Purpose
encoach.branding encoach_branding Tenant branding configuration (logo, colors, fonts)

37. REST API Specification

37.1 Existing Endpoints (81+)

All existing endpoints from the Odoo 19 backend remain. Key groups:

Group Endpoints Count
Auth /api/login, /api/logout, /api/reset, /api/reset/sendVerification 4
Users /api/user, /api/users/update, /api/users/list, /api/users/{id} 6
Entities & Roles /api/entities, /api/roles, /api/permissions 7
Exams /api/exam, /api/exam/{module}, /api/exam/{module}/{id}, /api/exam/avatars 7
AI Generation /api/exam/reading/*, /api/exam/listening/*, /api/exam/writing/*, /api/exam/speaking/*, /api/exam/level/* 12
Media /api/exam/listening/media, /api/exam/speaking/media, /api/transcribe 6
Evaluations /api/evaluate/writing, /api/evaluate/speaking, /api/grading/multiple 6
Classrooms /api/groups 3
Assignments /api/assignments 8
Sessions & Stats /api/sessions, /api/stats, /api/statistical 5
Training /api/training, /api/training/tips, /api/training/walkthrough 4
Subscriptions /api/packages, /api/stripe, /api/paypal, /api/paymob + webhooks 7
Registration /api/register, /api/code/{code}, /api/batch_users 4
Tickets /api/tickets 3
Storage /api/storage 2
Approvals /api/approval-workflows 3

37.2 New Endpoints (Adaptive Learning Engine, 40+)

Group Method Path Description
Taxonomy GET /api/subjects List subjects
GET /api/subjects/{id} Get subject detail
POST /api/subjects Create subject
PATCH /api/subjects/{id} Update subject
DELETE /api/subjects/{id} Delete subject
GET /api/subjects/{id}/taxonomy Full taxonomy tree
POST /api/subjects/{id}/taxonomy/import Bulk import
GET/POST/PATCH/DELETE /api/domains, /api/topics Domain and topic CRUD
Resources GET /api/resources List (filter by topic, type)
POST /api/resources Upload resource (multipart)
PATCH /api/resources/{id} Update metadata
DELETE /api/resources/{id} Delete
GET /api/resources/{id}/download Download file
POST /api/resources/{id}/complete Mark viewed
POST /api/resources/{id}/rate Rate (1-5)
Diagnostic POST /api/diagnostic/start Start adaptive diagnostic
POST /api/diagnostic/answer Submit answer, get next question
GET /api/diagnostic/{id}/result Get diagnostic results
Proficiency GET /api/proficiency Student's profile (by subject)
GET /api/proficiency/summary Cross-subject summary
GET /api/proficiency/class Class-level (teacher/admin)
Learning Plan GET /api/learning-plan Active plan (by subject)
POST /api/learning-plan/generate Generate/regenerate
PATCH /api/learning-plan/{id} Teacher override
POST /api/learning-plan/{id}/pause Pause plan
POST /api/learning-plan/{id}/resume Resume plan
Content GET /api/topics/{id}/content Get learning content (hybrid)
POST /api/topics/{id}/generate-content Force AI generation
POST /api/topics/{id}/practice Generate practice questions
POST /api/topics/{id}/practice/grade Grade practice answers
POST /api/topics/{id}/mastery-quiz Start mastery quiz
POST /api/topics/{id}/mastery-quiz/submit Submit mastery quiz
AI Coaching POST /api/coach/chat AI assistant conversation
POST /api/coach/hint Request hint
POST /api/coach/explain Request explanation
POST /api/coach/suggest Study suggestions
POST /api/coach/writing-help Writing assistance
GET /api/coach/tip Contextual tip
AI Utilities POST /api/ai/search Semantic search
POST /api/ai/insights Data insights
GET /api/ai/alerts Risk alerts
POST /api/ai/report-narrative Report narrative
POST /api/ai/batch-optimize Batch optimization
Analytics GET /api/analytics/student Student analytics
GET /api/analytics/class Class analytics
GET /api/analytics/subject Subject analytics
GET /api/analytics/content-gaps Content gap report

37.3 New Endpoints (LMS API Bridge)

Method Path Description
GET/POST /api/courses List/create courses
GET/PATCH/DELETE /api/courses/{id} Course CRUD
POST /api/courses/ai-generate AI-generate course outline
GET/POST /api/batches List/create batches
GET/PATCH/DELETE /api/batches/{id} Batch CRUD
GET/POST /api/timetable Timetable sessions
GET/POST /api/attendance Attendance records
GET /api/grades Gradebook

37.4 New Endpoints (SIS Integration)

Method Path Description
POST /api/sis/sync Trigger SIS sync
GET /api/sis/status Sync status
GET /api/sis/mappings Field mappings
PATCH /api/sis/mappings Update mappings

37.5 New Endpoints (OpenEduCat Institutional LMS, 60+)

Group Method Path Description
Academic Years GET/POST /api/academic-years List/create years
GET/PATCH/DELETE /api/academic-years/{id} Year CRUD
POST /api/academic-years/{id}/generate-terms Auto-generate terms
GET/POST /api/academic-terms List/create terms
PATCH/DELETE /api/academic-terms/{id} Term CRUD
Departments GET/POST /api/departments List/create
PATCH/DELETE /api/departments/{id} CRUD
Admissions GET/POST /api/admission-registers List/create registers
PATCH /api/admission-registers/{id} Update
POST /api/admission-registers/{id}/confirm Confirm register
POST /api/admission-registers/{id}/close Close register
GET/POST /api/admissions List/create admissions
GET /api/admissions/{id} Admission detail
POST /api/admissions/{id}/submit Submit for review
POST /api/admissions/{id}/confirm Confirm
POST /api/admissions/{id}/admit Admit (creates student)
POST /api/admissions/{id}/reject Reject
Subject Registration GET/POST /api/subject-registrations List/create
PATCH /api/subject-registrations/{id} Update subjects
POST /api/subject-registrations/{id}/confirm Confirm
POST /api/subject-registrations/{id}/reject Reject
GET /api/subject-registrations/available Available subjects
Inst. Exam Sessions GET/POST /api/inst-exam-sessions List/create
GET/PATCH/DELETE /api/inst-exam-sessions/{id} CRUD
POST /api/inst-exam-sessions/{id}/schedule Schedule
POST /api/inst-exam-sessions/{id}/done Mark done
POST /api/inst-exams Add exam
PATCH /api/inst-exams/{id} Update exam
POST /api/inst-exams/{id}/attendees Add attendees
PATCH /api/inst-exams/{id}/marks Enter marks
GET/POST /api/exam-types List/create types
GET/POST /api/grade-config Grade configuration
GET/POST /api/result-templates Result templates
POST /api/result-templates/{id}/generate Generate marksheets
GET /api/marksheets List marksheets
GET /api/marksheets/{id} Marksheet detail
POST /api/marksheets/{id}/validate Validate
Course Assignments GET/POST /api/course-assignments List/create
GET/PATCH /api/course-assignments/{id} CRUD
POST /api/course-assignments/{id}/publish Publish
POST /api/course-assignments/{id}/finish Close
GET /api/course-assignments/{id}/submissions List submissions
POST /api/course-assignments/{id}/submit Student submits
PATCH /api/submissions/{id} Grade submission
GET/POST /api/assignment-types Assignment types

38. Frontend Page Inventory

38.1 Auth Pages (3)

Route Page API Dependencies
/login Login POST /api/login
/register Register POST /api/register
/forgot-password Forgot Password POST /api/reset/sendVerification

38.2 Student Pages (12+)

Route Page Key APIs AI Components
/student/dashboard Student Dashboard /api/user, /api/proficiency/summary, /api/learning-plan AiStudyCoach, AiTipBanner
/student/subjects NEW: Subject Selection /api/subjects, /api/proficiency/summary --
/student/diagnostic/:subjectId NEW: Diagnostic Test /api/diagnostic/start, /api/diagnostic/answer --
/student/proficiency/:subjectId NEW: Proficiency Profile /api/proficiency?subjectId= --
/student/plan/:subjectId NEW: Learning Plan /api/learning-plan?subjectId= AiStudyCoach
/student/topic/:topicId NEW: Topic Learning /api/topics/{id}/content, /api/resources AiCoach (hints, explanations)
/student/courses Course List /api/courses AiTipBanner
/student/courses/:id Course Detail /api/courses/{id} --
/student/assignments Assignments /api/assignments --
/student/grades Grades /api/grades AiGradeExplainer
/student/attendance Attendance /api/attendance --
/student/timetable Timetable /api/timetable --
/student/profile Profile /api/user --
/student/subject-registration NEW: Subject Registration /api/subject-registrations/available, /api/subject-registrations --

38.3 Teacher Pages (10)

Route Page Key APIs AI Components
/teacher/dashboard Teacher Dashboard /api/user, /api/analytics/class AiInsightsPanel, AiAlertBanner
/teacher/courses Courses /api/courses --
/teacher/courses/new Course Builder /api/courses, /api/subjects/{id}/taxonomy AiCreationAssistant
/teacher/courses/:id/edit Edit Course /api/courses/{id} AiCreationAssistant
/teacher/assignments Assignments /api/assignments AiCreationAssistant
/teacher/assignments/:id Assignment Detail / Grading /api/assignments/{id}, /api/evaluate/* AiGradingAssistant
/teacher/attendance Attendance /api/attendance AiRiskBadge
/teacher/students Students /api/users/list?type=student AiRiskBadge
/teacher/timetable Timetable /api/timetable --
/teacher/profile Profile /api/user --

38.4 Public Pages (2)

Route Page Key APIs AI Components
/apply NEW: Admission Application /api/admissions, /api/admission-registers --
/apply/status NEW: Application Status /api/admissions/{id} --

38.5 Admin Pages (38+)

Route Page Key APIs AI Components
/admin/dashboard LMS Dashboard /api/analytics/subject, /api/courses AiInsightsPanel, AiAlertBanner
/admin/platform Platform Dashboard /api/users/list, entity counts AiInsightsPanel
/admin/courses Course Management /api/courses AiCreationAssistant
/admin/students Student Management /api/users/list?type=student AiRiskBadge
/admin/teachers Teacher Management /api/users/list?type=teacher --
/admin/batches Batch Management /api/batches AiBatchOptimizer
/admin/batches/:id Batch Detail /api/batches/{id} AiBatchOptimizer
/admin/timetable Timetable Admin /api/timetable --
/admin/reports Reports / Analytics /api/analytics/* AiReportNarrative
/admin/settings LMS Settings Configuration APIs --
/admin/assignments Assignments /api/assignments AiCreationAssistant
/admin/examsList Exams List + Rubrics /api/exam --
/admin/exam-structures Exam Structures /api/exam-structures --
/admin/rubrics Rubrics /api/rubrics AiCreationAssistant
/admin/generation Exam Generation /api/exam/*/generate AiGeneratorModal
/admin/approval-workflows Approval Workflows /api/approval-workflows AiGradingAssistant
/admin/users User Management /api/users/list --
/admin/entities Entity Management /api/entities --
/admin/classrooms Classroom Management /api/groups --
/admin/taxonomy NEW: Taxonomy Manager /api/subjects, /api/domains, /api/topics --
/admin/resources NEW: Resource Manager /api/resources, /api/analytics/content-gaps --
/admin/adaptive-analytics NEW: Adaptive Analytics /api/analytics/subject, /api/analytics/content-gaps AiInsightsPanel
/admin/student-performance Student Performance /api/proficiency/class AiStudyCoach, AiGradeExplainer
/admin/stats-corporate Corporate Stats /api/statistical --
/admin/record Record /api/stats --
/admin/training/vocabulary Vocabulary /api/training, FAISS tips --
/admin/training/grammar Grammar /api/training, FAISS tips --
/admin/payment-record Payment Record /api/packages, payment APIs --
/admin/tickets Tickets /api/tickets --
/admin/settings-platform Platform Settings Settings APIs --
/admin/exam Exam Runner /api/exam, /api/sessions --
/admin/profile Admin Profile /api/user --
/admin/academic-years NEW: Academic Year Manager /api/academic-years, /api/academic-terms --
/admin/departments NEW: Department Manager /api/departments --
/admin/admissions NEW: Admission List /api/admissions --
/admin/admissions/:id NEW: Admission Detail /api/admissions/{id} --
/admin/admission-register NEW: Admission Register /api/admission-registers --
/admin/exam-sessions NEW: Institutional Exam Sessions /api/inst-exam-sessions, /api/inst-exams --
/admin/marksheets NEW: Marksheet Manager /api/marksheets, /api/result-templates, /api/grade-config --

39. Non-Functional Requirements

ID Requirement
NFR-SEC-01 Authorize on server/API; do not rely on hiding UI alone
NFR-SEC-02 Students can only access their own proficiency and learning plan data
NFR-SEC-03 AI prompts never include student personal data
NFR-SEC-04 Resource uploads validated for file type (no executables)
NFR-PERF-01 Pagination and server-side filtering for all list views
NFR-PERF-02 Diagnostic question generation < 3 seconds
NFR-PERF-03 AI grading response < 10 seconds (writing/speaking < 60 seconds)
NFR-PERF-04 Learning plan generation < 10 seconds
NFR-PERF-05 AI content generation < 15 seconds
NFR-PERF-06 API response time < 2 seconds for standard CRUD
NFR-SCALE-01 200 concurrent students per subject
NFR-SCALE-02 500 topics per subject
NFR-SCALE-03 1,000 resources per subject
NFR-UX-01 Consistent search/filter/pagination patterns; empty states; loading feedback
NFR-UX-02 Math content rendered with KaTeX; IT code rendered with syntax highlighting
NFR-A11Y-01 Icon-only actions have accessible names
NFR-A11Y-02 All forms have proper labels and validation messages
NFR-DATA-01 Proficiency scores use weighted averages (never direct overwrite)
NFR-DATA-02 Learning plan changes are logged with user ID and timestamp
NFR-DATA-03 Resource deletions are soft-delete to preserve completion records

Appendix A: Odoo Module Inventory

# Module Status Description
1 encoach_core Existing Users, entities, roles, permissions, codes, invites
2 encoach_ai Existing OpenAI service, constants, blacklist, token counting
3 encoach_ai_media Existing TTS (Polly), STT (Whisper), ELAI avatars
4 encoach_ai_generation Existing Exam content generation (extend for Math/IT prompts)
5 encoach_ai_grading Existing Writing/speaking grading (extend for Math/IT rubrics)
6 encoach_exam Existing Exam model (extend with subject_id, topic_ids)
7 encoach_assignment Existing Assignment management
8 encoach_evaluation Existing Evaluation and AI job tracking
9 encoach_stats Existing Sessions and statistics (extend with topic_id, subject_id)
10 encoach_training Existing Training tips and walkthroughs (extend with subject_id)
11 encoach_classroom Existing Classroom groups
12 encoach_subscription Existing Packages, payments, discounts
13 encoach_registration Existing User registration and batch import
14 encoach_ticket Existing Support tickets
15 encoach_api Existing REST API controllers (extend with new endpoints)
16 encoach_taxonomy NEW Subject, domain, topic, learning objective models
17 encoach_resources NEW Learning resource library
18 encoach_adaptive NEW Proficiency, learning plans, progress tracking, content cache
19 encoach_adaptive_api NEW REST controllers for adaptive learning
20 encoach_adaptive_ai NEW AI services for diagnostics, plans, coaching, content
21 encoach_lms_api NEW REST API bridge for OpenEduCat models (extends op.course, op.batch, adds missing fields)
22 encoach_sis NEW UTAS SIS integration (sync, mapping)
23 encoach_branding NEW Whitelabeling configuration
24 openeducat_core OpenEduCat (port to v19) op.course, op.batch, op.student, op.faculty, op.subject, op.department, op.category, op.academic.year, op.academic.term, op.student.course, op.subject.registration
25 openeducat_timetable OpenEduCat (port to v19) op.session, op.timing
26 openeducat_attendance OpenEduCat (port to v19) op.attendance.register, op.attendance.sheet, op.attendance.line, op.attendance.type
27 openeducat_classroom OpenEduCat (port to v19) op.classroom (physical rooms)
28 openeducat_exam OpenEduCat (port to v19) op.exam.session, op.exam, op.exam.type, op.exam.attendees, op.exam.room, op.marksheet.register, op.marksheet.line, op.result.line, op.result.template, op.grade.configuration
29 openeducat_assignment OpenEduCat (port to v19) op.assignment, op.assignment.sub.line, grading.assignment, grading.assignment.type
30 openeducat_admission OpenEduCat (port to v19) op.admission, op.admission.register
31 openeducat_facility OpenEduCat (port to v19) op.facility, op.facility.line (dependency of classroom)

Total: 15 existing EnCoach + 8 new EnCoach + 8 OpenEduCat = 31 modules


Appendix B: Implementation Priority

Priority Components Rationale
P0 Auth, core user management, taxonomy models, resource model Platform foundation; blocks everything
P1 Diagnostic engine, proficiency profile, learning plan generation Core adaptive learning loop
P1 Exam engine with multi-subject support Exam generation and delivery
P2 OpenEduCat porting (v17→v19), LMS API bridge, course/batch/timetable/attendance LMS functionality
P2 Academic years/terms, departments, admission workflow Institutional operations
P2 Content delivery (hybrid), practice questions, mastery quizzes Learning content consumption
P2 AI components wiring (all 15 frontend components to real backend) AI integration
P3 AI coaching (hints, explanations, study suggestions) Learning enhancement
P3 Spaced repetition, analytics dashboards Progress optimization
P3 Institutional exam sessions, marksheets, subject registration Institutional assessment
P3 Course assignment submissions (file upload, grading) Homework workflow
P3 SIS integration, whitelabeling University integration
P4 Content gap detection, FAISS tips per subject, batch optimizer Operational efficiency
P4 Payment system, subscription management Commercial features

This is the definitive SRS for the new EnCoach platform. All previous SRS documents (SRS-EnCoach.md, MATH_IT_ADAPTIVE_LEARNING_SRS.md, ODOO_MIGRATION_SRS_v2.md) are superseded by this document for new development.