System Description

AMTOS

Aviation Maintenance Training & Operations System

A product by Aggregator Solutions

ASP.NET MVC · DevExpress · Entity Framework · SQL Server · Cloud Hosted

Presentation Overview

What We'll Cover

Short Stop — Slides 1–16
01TitleAMTOS System Description
03System Architecture3-tier: Browser→IIS→SQL
04Role-Based AccessConcentric permission model
05Personnel & Access MgmtStep 01
06Training TracksStep 02 · tree diagram
07Course CatalogueStep 03 · grading parts
07bSecure Doc DRMTrack auth · watermark · read log
08Student RegistrationStep 04 · profile anatomy
09EnrolmentStep 05 · funnel flow
10Class SchedulingStep 06 · Gantt + AI Planner
11Exams & Question BankStep 07 · lifecycle flow
10bSupervised Exam SuiteBiometric · focus-loss · 90-day lockout
12Attendance RecordingStep 08 · pivot heatmap
13Results PublishingStep 09 · review workflow
14Practical AssessmentStep 10 · P1–P9 matrix
15Dashboards & BIStep 11 · KPI gauges
16Reports & EASA Form 148Step 12 · CoR wireframe
Short stop here✋ Slide 16
Full Stop — Slides 17–27
17Exam Deep DiveMCQ vs Essay, randomisation
183-Level Q TaxonomyModule→Sub→Sub-sub
19Item AnalysisDiscrimination index, distractors
20Data Security & AccessASP.NET Identity, OWIN
21Import / ExportExcel, ICS, CSV, PDF
22Report Designer stored procs
23Theming & Dark ModeUser-level preferences
24Full Tech StackAll 11 badges detailed
25Deployment & HostingIIS, SQL Server, cloud
28SSO & LTI IntegrationAzure AD · LTI 1.3 · AGS
29Quality Management (QMS)Audits · NCR · CAPA
31Contact / Next Steps✋ Full stop

System Architecture

Three-Tier Web Application

ASP.NET MVC 5 server-side rendering via Razor · DevExpress v25.1 UI suite · Entity Framework 6 Code-First ORM · SQL Server persistence · Hosted on Windows IIS.

Chrome · Edge · Safari
▼ HTTP/HTTPS
Windows IIS · ASP.NET MVC 5
▼ EF / ADO.NET
SQL Server
Presentation Layer
Razor view engine. Controller → View data flow. DevExpress GridView, Scheduler, BI Dashboard and Report Designer components. No client-side framework.
Application Layer
ASP.NET MVC 5 controllers. ASP.NET Identity + OWIN authentication pipeline. Role-based [Authorize] attributes on every action. Business logic encapsulated in service classes.
Data Layer
Entity Framework 6 Code-First. Global Query Filters enforce SchoolId tenant isolation on every query. Code-First Migrations manage schema evolution — no manual SQL scripts.
CI / CD — GitHub Actions
39 MSTest unit tests run on every push to master. Tests cover the Simulated Annealing scheduling engine, eligibility gate logic, and attendance threshold calculations. A failing test blocks merge.
Multi-Tenant Architecture
SchoolId foreign key on every tenant table. EF Global Query Filters automatically scope all queries. Per-tenant CSS theming. Cross-tenant sign-in blocked at middleware before any DB hit.
Key Libraries
DevExpress v25.1 · ExcelDataReader · System.Drawing (DRM watermark) · iCal.NET · LtiLibrary (LTI 1.3) · Microsoft.Owin.Security.OpenIdConnect · MSTest v2
ASP.NET MVC 5DevExpress v25.1EF 6 Code-FirstSQL ServerOWIN / OAuth2MSTest · 39 tests

Foundation — Access Control

Role-Based Access Model

Four roles sharing one database. Each role holds a concentric subset of the previous role's permissions — no parallel data stores, no duplication, no conflicting records.

🛡️
Admin
Full system access. Personnel, tracks, scheduling, BI, reports, settings.
📋
Staff
Operational access. Student records, enrolment, attendance, exam oversight, certificates.
📚
Instructor
Class-scoped. Own classes, attendance, exam review, practical assessment.
🤝
Student
Personal portal. Own calendar, exams, results, certificate download.
AMTOS Core DB Admin Staff Instructor Student Each outer role ⊂ inner role permissions
1

Step 01 — Foundation

Personnel & Access Management

Single Personnel record per individual — staff, instructor or student. Each record optionally links to a system login. Role assignment controls every menu, grid and action visible to that user.

Profile & Photo
Full name, nationality, DOB, contact details and profile photo stored per person.
Document Vault
Passport, national ID, medical and custom document types — uploaded and version-tracked.
User Account Creation
Generate a login directly from the personnel record, or link to an existing account.
Role Assignment
Admin / Staff / Instructor / Student roles — control every menu, grid and action.
Account Lock / Unlock
Instantly suspend or re-enable any user's access without deleting their record.
Excel Import
Bulk-import student records from a spreadsheet with optional automatic track assignment.
2

Step 02 — Structure

Training Tracks

A Track is the top-level certification pathway — Cat A, Cat B1.1, Cat B2. Each track bundles courses, carries a total credit value, and when a student is assigned they automatically inherit the full curriculum.

Track Definition
Named pathway with description and credit hours. Full CRUD with audit trail.
Course Assignment
Batch checkbox interface. One course can belong to multiple tracks.
Drill-down View
Popup panel shows every course in a track with module numbers and credit info.
Export
Full tracks list to PDF or Excel WYSIWYG A4 landscape with one click.
Cat B1.1 Track Module 1 Module 2 Module 7 Classes → Classes → Classes →
3

Step 03 — Curriculum

Course Catalogue

Courses are the atomic curriculum unit. Each maps to a Part-66 module number (M01–M17), carries its own document library, and configures grading components independently.

DB Entity — Course
CourseId (PK)
SchoolId (FK, tenant)
ModuleNumber (e.g. M07)
Title / Description
CreditHours (decimal)
CourseType (enum)
IsActive (bool)
Track Membership (M:N)
TrackCourse join table with TrackId + CourseId composite PK. One course can belong to many tracks. Checkbox panel assignment — changes reflected system-wide immediately via EF cascade.
Part-66 Module Mapping
Module number tag (M01–M17) links the course to the EASA Part-66 syllabus. Used by the question bank taxonomy, exam blueprint assembly, attendance records, and certificate printed fields.
Grading Components
Configurable weighted components per course — e.g. Theory Exam 70% · Practical 30%. Stored in CourseGradingPart with PartName, WeightPct. Final grade computed automatically from component scores.
Document Vault
Syllabus, manuals and references stored in CourseDocument table with Version, UploadedAt, and FilePath. DRM enforcement delegates to the Secure DRM module — track enrolment checked before byte 1 is served.
Prerequisites & Instructor Assignment
Flag prerequisite courses — system warns staff during enrolment if the student hasn't completed them. Instructor assignment drives scheduler dropdown population and class-scoped instructor views.
DRM

Step 03b — Course Materials

Secure Document DRM

Track-scoped authorisation gates every document request. PDF content is rendered through a watermarked in-browser viewer — no raw file URL is ever exposed. Student read history is stored per document version.

Track-Scoped Access
Server validates active enrolment in the owning track before serving a single byte. No direct download URL exists.
Watermarked Viewer
System.Drawing renders name + timestamp as semi-transparent overlay on every page. Content-Disposition: inline forces browser viewing.
Read-Version Tracking
DB records which document revision each student last opened and at what timestamp — defensible audit trail for regulatory inspection.
Instructor Upload Pipeline
Upload creates a new version record, preserving previous revisions. Enrolees with open access receive access to the new version automatically.
DB Schema — Document Tables
CourseDocument
 ├─ DocumentId (PK)
 ├─ CourseId (FK)
 ├─ Version (int)
 ├─ FilePath (server-side)
 └─ UploadedAt

StudentDocumentRead
 ├─ ReadId (PK)
 ├─ StudentId (FK)
 ├─ DocumentId (FK)
 └─ ReadAt (datetime)
HTTP Response Pattern
// Controller action
[Authorize] public ActionResult ViewDoc(int id) {
 if (!IsEnrolled(id)) return new HttpStatusCodeResult(403);
 Response.Headers["Content-Disposition"] = "inline";
 Response.ContentType = "application/pdf";
 // System.Drawing watermark applied in-memory
 return File(WatermarkPdf(id), "application/pdf");
}
Watermark — System.Drawing API
using (var g = Graphics.FromImage(page)) {
 var brush = new SolidBrush(
  Color.FromArgb(28, 0, 0, 0));
 g.DrawString(
  $"{student.Name} · {DateTime.UtcNow:u}",
  font, brush, center, format);
}
Student Doc Request Track Auth Check Enrolment validated server-side 403 Forbidden Watermark Applied Inline PDF Viewer No download URL Read-Version Saved StudentDocVersion table
4

Step 04 — Learners

Student Registration

Students are a specialised type of Personnel record with nationality, regulatory ID data, photo and a personal document vault. Large cohorts load in minutes via Excel bulk import with automatic track assignment.

Rich Profile
Name, DOB, nationality, contact info, status, photo and join date.
ID Documents
Passport, national ID or custom types — tracked with number and expiry.
Excel Bulk Import
Download template, populate, re-upload. Optional track override assigns all students instantly.
Track Assignment
Assign to one or more tracks; mass-enrol into all active track classes in one action.
🤝 NATIONALITY STATUS DOCUMENTS TRACKS ENROLLED Portal Access →
5

Step 05 — Registration

Enrolment

Enrolment bridges students and scheduled classes. The Enrolment entity is the pivot record that gates attendance, exam eligibility, and CoR generation.

DB Entity — Enrolment
EnrolmentId (PK)
StudentId (FK → Personnel)
ClassId (FK → Class)
EnrolledAt (datetime)
Status (enum Active/Withdrawn)
WithdrawnAt (nullable)
WithdrawnBy (FK Personnel)
Track & Bulk Enrolment
Assigning a student to a Track triggers mass-enrolment into all currently active classes in that track in a single transaction. Bulk select (checkbox list) enrols multiple students into one class simultaneously.
Roster Lock
Class.IsLocked flag set ahead of the exam window. While locked: enrolment and withdrawal are blocked at the controller layer. Invigilators can still record attendance. Lock is reversible by Admin.
Withdrawal Cascade
Setting status to Withdrawn: (1) stops attendance recording for the student, (2) blocks exam access via eligibility gate, (3) excludes student from CoR generation. Record is preserved — full history retained.
All-Enrolments View
Cross-class DevExpress grid filterable by course, instructor, and date range. Exportable to Excel or PDF. Shows status, enrolment date, and withdrawal date where applicable.
DRM Access Grant
Enrolment in a class also grants DRM access to the parent course's document vault. Withdrawal revokes access — the next document request returns HTTP 403 regardless of URL knowledge.
6

Step 06 — Timetabling

Class Scheduling & AI Cohort Planner

Visual drag-and-drop scheduler for planning the entire training calendar. Classes carry start/end dates, facility, instructor and enrolled roster. Country-specific holiday calendars prevent accidental scheduling on rest days.

Visual Scheduler
Drag-and-drop. Day, week and month views. Filter by instructor or class group.
Holiday Calendars & Overrides
Country-specific public holiday lists. Individual classes can override default holiday rules for make-up sessions.
Facility Booking & Capacity Check
Assign classes to rooms and facilities; manage name, type and capacity. System warns when enrolled student count exceeds the facility limit at planning time.
🤖 AI Cohort Planner — Simulated Annealing
Generates an optimised schedule across all track courses from scratch. Simulated Annealing cost function penalises: instructor double-booking · facility over-capacity · holiday collisions · module-sequence violations · session-hour shortfall. Neighbour moves: random session swap or instructor reassignment. Cooling: geometric T → αT (α ≈ 0.995). Accepts worse solution with probability e-ΔC/T to escape local minima. Guarded by 39 MSTest unit tests on every CI push.
⚡ Auto-Schedule Wizard
3-step wizard: (1) select track, (2) set start date + daily session time, (3) review calculated end date. Back-calculates from contact hours, skipping holidays and checking facility capacity.
Exam Scheduler
Dedicated exam scheduling view separate from regular class timetable.
ICS Import
Import external calendar events (ICS) from Outlook or Google Calendar.
CLASS SCHEDULE Module 1 Module 2 Module 7B P-Workshop Holiday Today Jan Feb Mar Apr May Classes visualised on timeline with holiday and today markers
🤖 AI Cohort Planner — Simulated Annealing Engine
Programme Types
🏫 Block Release (Apprenticeship) — students alternate school and OJT. 🎓 Full Semester — all theory before work starts. Set per curriculum block in Administration → Curriculum Setup.
MCB1–MCB6 Blocks
Curriculum delivery blocks renamed to Main Course Blocks (MCB1–MCB6) — internationally recognised terminology replacing the previous HF naming.
SA Engine
C# in-process Simulated Annealing: 150 temperature steps, 0.95 cooling rate, 100 iterations/step. Move & Swap operators. Boltzmann acceptance criterion to escape local optima. Seeded random = reproducible.
Hard & Soft Constraints
Hard (×1,000 penalty): no instructor or room double-booking, no cohort overlap. Soft: EASA curriculum sequence (×50), compact blocks (×20), minimal daily slot gaps (×15).
Semester Planning Panel
For Full-Semester programmes: each module row gets a Semester dropdown. Live capacity bars show hours per semester updating in real time — prevents overloading before optimisation runs.
Optimize → Gantt → Publish
Animated glassmorphism SA overlay (particle simulation, 100→0°C readout). Gantt preview: colour-coded modules × week columns. Publish Timetable writes all sessions to Class and Schedules tables.
7

Step 07 — Assessment

Exams & Question Bank

Full question-bank authoring with two-stage approval workflow. MCQ exams delivered online and auto-graded instantly. Essay exams accept PDF upload within a defined submission window. Questions support images on both the question and individual answer options.

Question Bank
Author MCQ with up to four illustrated answers. Module-tagged for accurate exam assignment.
Approval Workflow
Draft → Approved two-stage workflow. Only approved questions appear in live exams.
Random or Fixed Sets
Same questions for all students, or random selection per student to prevent sharing.
Essay Exams
Configurable open/close windows. Students upload PDF; admin reviews and grades.
3-Level Taxonomy
Module → Submodule → Sub-submodule, mirroring the EASA Part-66 syllabus.
Pass Threshold
≥ 75% pass. Results held until instructor explicitly releases to students.
Practice Mode
Unlimited ungraded attempts with immediate answer reveal. No attempt is recorded against the student's academic record.
Exam Blueprints
Pre-configured module/weight distributions ensure each generated exam meets EASA Part-66 syllabus coverage requirements automatically.
Q Bank Draft Q Approved ✓ Exam Created Student Takes Exam Auto-Graded ≥ 75% Verified Instructor Review Results Released
7a

Step 07a — Exam Integrity

Supervised Exam Suite

Multi-stage gate enforces identity, invigilator presence, and continuous focus monitoring. Every state transition is timestamped and logged for regulatory audit.

Biometric Check-In
Webcam capture compared against stored profile image. Confidence score threshold configurable per exam. Low-confidence attempts are flagged for invigilator review.
Invigilator Gate
Invigilator must explicitly approve each student before the exam session begins. Approval is logged with invigilator ID and timestamp.
Focus-Loss Detection
Browser visibility API fires on tab-switch or window-minimize. Configurable violation threshold (e.g. 3 × >5 s) before automatic session termination and flag.
90-Day Re-sit Lockout
An integrity violation triggers a DB-level lockout flag. Any re-sit attempt within 90 days is blocked at the server before the exam session is created.
📷 Biometric Check-In 🛡️ Invigilator Approval ▶ Exam Session Active 👁️ Focus-Loss Monitor Visibility API · configurable threshold ⚠ Violation 90-Day Lockout ✓ Submitted Auto-graded All transitions logged with invigilator ID + timestamp
8

Step 08 — Presence

Attendance Recording

Attendance recorded at class-session level for every enrolled student. Presented as a pivot table — students on one axis, dates on the other — so absence patterns are immediately visible. Data feeds directly into CoR certificate hours.

Session-Level Recording
Mark present or absent per session. One click toggles; saves instantly.
Pivot Heatmap
Green/red colour-coded grid — scan the whole class at a glance.
Instructor View
Scoped to own classes only. Toggle attendance inline without admin involvement.
CoR Hours Feed
Attendance data feeds directly into the Certificate of Recognition hours section.
Period Filtering
Filter by week, month or custom date range. Switch class via dropdown.
KPI Gauge
Attendance rate % surfaces as a live KPI gauge on the admin homepage.

Attendance Pivot — Students × Sessions

Present Absent
9

Step 09 — Verification

Exam Review & Results Publishing

Before results reach students, an instructor or administrator reviews each attempt question by question. Individual questions can be excluded/awarded for one student or system-wide. A release-summary screen confirms pass/fail counts before results are published.

Attempt Review
Full walkthrough: each question with student's answer versus correct answer.
Question Exclusion/Awarding
Exclude/Award for one student or all students adjusting overall scores.
Pass / Fail Summary
Pre-release summary shows pass count, fail count and overall class performance.
Results Release
One-click release makes results visible in student portal. Can be reverted if needed.
Essay Grading
Open submitted PDFs, score them and release marks — same workflow as MCQ.
Item Analysis
Per-question stats: correct-answer rate, most-selected distractor, discrimination index.
Admin & Staff Results Viewer
Dedicated cross-class exam results viewer for Admin and Staff roles — browse any student's attempt, cancel questions, and monitor pass/fail outcomes across all classes, unrestricted by instructor scope.
Flagged Exam Questions
Automatically flags underperforming questions (< 50% correct) for Admin review. Instructors cannot publish results until all pending flags are resolved via the Admin Dashboard.
9b

Step 09b — Compliance Gate

Exam Eligibility Gate

Attendance-based access control for exams. Students whose absence exceeds the configured threshold are automatically blocked before the exam attempt is created. Enforced server-side — not just in the UI.

Auto-Block Logic
Theory & Practical: per-module absence ≥ threshold → block. Essay: cumulative absence across all enrolled modules ≥ threshold → block. Recalculated on every attendance change.
Configurable Threshold
SystemSettings keys: AbsenceThresholdPct (Theory/Practical, default 10%) and AbsenceThresholdEssayPct (Essay, default 10%). Editable from Admin UI — no deployment needed.
ExamEligibilityOverrides Table
EF Code-First migration adds ExamEligibilityOverrides: PersonnelID + ClassID unique index, IsBlocked flag, mandatory Reason, CreatedBy/Date audit columns. FK → Personnels and Class tables.
Admin Actions
Lift Block: clears the override, restores automatic eligibility. Force Block: creates a permanent override with a mandatory reason string. Clear: reverts to automatic. All changes timestamped.
Eligibility Dashboard
Schedule → Exam Eligibility grid: filterable by class and status. Columns: student name, lesson count, absence count, attendance bar, status badge (Auto-Blocked / Admin-Blocked / Lifted / Eligible), action buttons.
Server-Side Guard
Exam controller re-checks eligibility on attempt creation. Blocked students receive HTTP 403 regardless of UI state — no client-side bypass possible.
10

Step 10 — Hands-On

Practical Assessment

Workshop practical skills (P1–P9) assessed against defined criteria per module. Instructor creates a Practical Exam linked to a class, then opens individual student attempts and scores each criterion live. Held in draft until deliberately released.

Module Definitions
Configure P1–P9 — title, description, category (Cat A / Cat B).
Assessment Criteria
Detailed pass/fail or scored criteria per module; reusable across instances.
Live Scoring
Score each criterion per student in real-time with notes and observations.
Controlled Release
Results held privately until explicitly released. Same workflow as theory exams.

Assessment Matrix — Modules × Criteria

C1 C2 C3 C4 C5 P1 P2 P3 P4 P5 Pass Fail Pending
11

Step 11 — Insight

Dashboards & Business Intelligence

Every role has a personalised dashboard. The admin homepage surfaces live KPI gauges drawn from the database in real time. A full BI Dashboard Designer lets administrators build and publish rich interactive dashboards without code.

Live KPI Gauges
Total Students, Portal Access count, Enrolments, Attendance %, Pass Rate % — all live.
BI Dashboard Designer
Drag-and-drop: charts, pivots, cards, filters. Connect to any AMTOS data source.
Instructor Calendar
Upcoming classes, exam reviews and practical assessments in a personal calendar view.
Student Portal
Personal class timetable, upcoming and past exams, released practical results — scoped to own enrolments.
Theming & Dark Mode
User-level font, colour intensity, brightness, background and full dark mode.
Report Designer
Report Designer backed by stored procedures with dynamic columns.

Admin KPI Dashboard

87% ATTENDANCE 72% PASS RATE 248 STUDENTS
✋ Short version stop · slides 1–18
12

Step 12 — Certification

Reports, CoR Checklist & EASA Form 148

Two regulatory PDFs generated at any point. The CoR Checklist covers passport check, hours attended, theory M1–M17, workshop P1–P10, aircraft practical and signatures. The Certificate of Recognition (EASA Form 148) lists all passed module numbers, pass dates and track.

EASA Form 148
A4 portrait PDF — passed modules, pass dates, track, signatory block.
CoR Checklist
Full regulatory checklist — ID, hours, theory M1–M17, P1–P10, aircraft, signatures.
Live Data
Both query the live database — every pass and assessment reflected at print time.
Preview & Download
In-browser PDF preview viewer; one-click download.

CoR Checklist — Layout Wireframe

Instructor
Manager

Deep Dive — Assessment

Exam Delivery Modes in Detail

MCQ — Multiple Choice

Question Sets
Fixed set (same for all) or randomised per student from the approved pool.
Illustrated Options
Both question stem and each answer option support image uploads — essential for diagram questions.
Instant Auto-Grade
Score calculated on submission. Pass at ≥ 75%. Held until instructor releases.
Question Exclusion/Awarding
Exclusion/Awarding per-student or system-wide — adjust score. Revert if needed.

Essay — PDF Submission

Submission Window
Configurable open/close datetime. Students cannot submit outside the window.
PDF Upload
Students upload their essay as a PDF from the student portal during the open window.
Manual Grading
Instructor opens the PDF, reviews and enters a score. Same release workflow as MCQ.
Results Portal
Released marks visible in student portal alongside MCQ results — unified view.

Deep Dive — Question Bank

3-Level Question Taxonomy & Blueprint Assembly

Questions are tagged to a three-level hierarchy mirroring EASA Part-66. Exam Blueprints use this taxonomy to define weighted draws — guaranteeing syllabus coverage without manual question selection.

Taxonomy Levels
Level 1 — Module
e.g. Module 7 — Maintenance Practices
Level 2 — Submodule
e.g. 7.1 Safety Precautions
Level 3 — Sub-submodule
e.g. 7.1.1 Fire Hazards
Blueprint Assembly Algorithm
ExamBlueprint {
 BlueprintId, ExamId
 ModuleId, SubmoduleId (nullable)
 QuestionCount, DifficultyWeights
}

// Assembly query (EF LINQ)
var pool = Questions
 .Where(q => q.SubmoduleId == rule.SubmoduleId
  && q.Status == Approved)
 .OrderBy(_ => Guid.NewGuid()) // random
 .Take(rule.QuestionCount);
Filter at Any Level
Exam creators filter the question pool at module, submodule, or sub-submodule level. Broader filters draw from the full subtree — narrower filters target specific competency areas.
Exam Blueprints
Pre-configured module/weight distributions stored per exam template. Blueprint rows define SubmoduleId + QuestionCount. Exam assembly runs the blueprint rules to draw questions — no manual selection needed.
Randomisation
OrderBy(_ => Guid.NewGuid()) produces a different draw for each student from the approved pool within the blueprint rule. Same blueprint → different question set per student — prevents answer sharing.

Deep Dive — Exam Quality

Item Analysis

Per-question statistics computed across all student attempts. Flags questions for review, revision, or retirement to maintain question-bank quality and exam fairness.

📊 Correct-Answer Rate (P)
Proportion of students who answered correctly. P = correct / total_attempts. P < 0.25 flags an ambiguous or poorly worded question. P > 0.95 may indicate a trivially easy item.
🎯 Most-Selected Distractor
Frequency count of each incorrect option selected. High distractor frequency reveals misleading or plausible-sounding wrong answers that may need rewording.
🗑️ Retire Workflow
Flag poor questions for retirement — status set to Retired. Excluded from future blueprint draws while remaining in history for audit. Reversible by question author.
📐 Discrimination Index — Point-Biserial rpb
rpb = ( Mp − Mq ) / St × √( p × q )
Mp = mean total score of students who answered correctly
Mq = mean total score of students who answered incorrectly
St = standard deviation of total scores
p = proportion correct  ·  q = 1 − p
Interpretation
r_pb < 0.10 → poor discriminator, review. r_pb < 0 → negative discrimination — high scorers got it wrong more often than low scorers. Automatic flag for examiner review before next exam cycle.

Deep Dive — Security

Security & Access Control

Defence-in-depth: role-based authorization at every controller action, anti-forgery tokens on every form, EF parameterised queries eliminating SQL injection, and server-side identity lockout.

🛡️ Role Authorization — Code Pattern
[HttpPost]
[ValidateAntiForgeryToken]
[Authorize(Roles = "AdminRole,StaffRole")]
public ActionResult EnrolStudent(EnrolmentVm vm)
{
 // Controller only reached if
 // authenticated + correct role
}

Unauthorised requests return HTTP 403 before action body runs.
🔐 CSRF Protection
Every state-changing form includes @Html.AntiForgeryToken(). All POST actions decorated with [ValidateAntiForgeryToken]. Token mismatch returns 400 before model binding.
🗄️ SQL Injection Prevention
All data access via EF LINQ — parameterised at the ORM layer. Stored procedures use sp_executesql with typed parameters. No raw string concatenation in any query path.
🔑 ASP.NET Identity
PBKDF2 password hashing (100,000 iterations). Configurable lockout policy — N failed attempts triggers time-based lockout. Account suspension (IsLocked) is an Admin-only action that persists independently of the lockout policy.
🌐 Multi-Tenant Isolation
EF Global Query Filter: modelBuilder.Entity<Student>().HasQueryFilter(s => s.SchoolId == _tenantId); applied to every tenant entity. Cross-tenant data leakage is architecturally impossible without disabling the filter.
🔒 OWIN / Cookie Session
Cookie-based session with configurable expiry (ExpireTimeSpan). Sliding expiry optional. HTTPS-only cookie flag. Session invalidated on Admin-forced password reset. SSO token lifetime governed by IdP configuration.

Deep Dive — Data Exchange

Import & Export Capabilities

AMTOS supports multiple data exchange formats for importing external data and exporting records in standard formats. No proprietary lock-in.

Import

Excel / CSV (Students)
ExcelDataReader library. Bulk student records from .xlsx template with optional track override.
ICS / iCalendar
Import external calendar events from Outlook or Google Calendar into the AMTOS event calendar.
TXT / CSV (Misc)
Additional flat-file import support for supplementary data sets where applicable.

Export

PDF — Certificates
EASA Form 148 and CoR Checklist via PDF engine. In-browser preview + download.
Excel / PDF — Grids
Any data grid (Tracks, Courses, Enrolments) to WYSIWYG A4 PDF or Excel with branded headers.
Custom Reports
Report Designer outputs to PDF, Excel or preview — backed by stored procedures.

Deep Dive — Reporting

Report Designer

Admin-accessible Report Designer for building custom printable reports. Reports are backed by stored procedures and support dynamic columns — no code deployment required to add a new report.

🎨
Visual Designer
Drag-and-drop bands, fields and controls. WYSIWYG preview in the browser.
💾
Stored Procedures
Reports connect to SQL Server stored procedures — full flexibility in data shaping without ORM constraints.
📊
Dynamic Columns
Pivot-style reports where columns are data-driven — no hard-coded field count.
🖨️
Output Formats
PDF, Excel, HTML preview. No server-side print queue — all rendered client-side via viewer.
🔐
Access Control
Report Designer access restricted to Admin role. Published reports visible to roles as configured.
♻️
Reusable Templates
Save report templates and reuse across different date ranges, classes or cohorts.

Deep Dive — User Experience

Theming & Dark Mode

AMTOS supports user-level visual preferences — each user can tune the interface independently without affecting others.

🔤
Font Family
User selects preferred font from supported options — applied system-wide for that account.
🎨
Colour Intensity
Adjust the intensity of UI accent colours — from subtle to vivid.
☀️
Brightness
Per-user brightness control for the interface — useful in varied lighting environments.
🖼️
Background Intensity
Tune the contrast between content areas and page background.
🌙
Full Dark Mode
Complete dark theme toggle — persistent per user account across sessions.
💾
Preference Persistence
All settings stored server-side — preferences follow the user across devices and sessions.

Technology Stack

Complete Technology Inventory

ASP.NET MVC 5
Server-side MVC framework. Razor view engine. Controller-based routing.
DevExpress v25.1
Grids, schedulers, BI Dashboard Designer, Report Designer, PDF document viewer.
Entity Framework 6
Code-First ORM. Migrations for schema evolution. LINQ-based query layer.
SQL Server
Relational database. Stored procedures for report queries. Hosted on cloud IIS server or local instance.
ASP.NET Identity + OWIN
User management, password hashing, role claims, cookie authentication middleware.
ExcelDataReader
Server-side Excel parsing for bulk student import from .xlsx files.
ICS / iCalendar
Standard calendar format import — Outlook and Google Calendar compatible.
PDF Generation
PDF engine for certificates, checklists and custom reports. No third-party queue.
Multi-Tenant Architecture Shared SQL Server DB · SchoolId FK partition on every tenant table · Per-tenant CSS theming · EF Global Query Filters enforce row-level isolation

Infrastructure

Deployment & Hosting

Standard ASP.NET MVC 5 deployment on Windows Server + IIS. Schema evolution via EF Code-First Migrations. GitHub Actions CI guards every push. Automated daily SQL backups.

☁️ Hosting Stack
Cloud-hosted Windows Server. IIS application pool isolation. SQL Server dedicated instance. Both tiers behind HTTPS with Let's Encrypt or commercial certificate. No on-premise hardware required.
🔄 EF Code-First Migrations
Schema changes expressed as C# migration classes. Deployment command: Update-Database -TargetMigration <name>. Migrations are idempotent and reversible. No manual SQL scripts — schema history tracked in __MigrationHistory table.
🔁 CI / CD — GitHub Actions
On every push to master: (1) restore NuGet packages, (2) build solution, (3) run 39 MSTest unit tests. Failing tests block the merge. Successful build triggers IIS deployment via Web Deploy or FTP publish profile.
🗄️ Backup Strategy
Automated daily full SQL Server backups to cloud storage. Transaction log backups every 4 hours for point-in-time recovery. Retention: 30 days full · 7 days log. Backup integrity verified weekly by automated restore test to staging DB.
🌐 Browser Compatibility
Chrome, Edge, Safari. Responsive CSS layout for tablet use (Surface, iPad). DevExpress grids adapt to viewport. No client-side install — pure browser app. Offline mode not supported (by design — regulatory data must be server-authoritative).
🔒 HTTPS & Certificates
SSL/TLS termination at IIS. HSTS header enforced. All inter-service calls (grade passback to LMS, NRPS roster sync) use TLS 1.2+. Certificate auto-renewal via ACME / Certbot or cloud certificate manager.

Deep Dive — Identity & Interoperability

SSO & LTI Integration

AMTOS supports enterprise single sign-on via Azure AD / Google OAuth2 and deep LMS interoperability via LTI 1.3. Sprint 1 of both integrations is live in production.

🔑 Single Sign-On (SSO)
OWIN OAuth2 Middleware
Microsoft.Owin.Security.OpenIdConnect handles token negotiation. Azure AD and Google endpoints pre-configured. Claims mapped to AMTOS role enum at sign-in.
Claims → Role Mapping
Custom IClaimsTransformation maps IdP group claims to AdminRole / StaffRole / InstructorRole / StudentRole. Falls back to local account if IdP unavailable.
Multi-Tenant Isolation
Each school tenant can configure its own IdP tenant ID. Cross-tenant sign-in is blocked at the middleware layer before any DB query.
🔗 LTI 1.3 & LMS Interop
LTI 1.3 Deep Link Launch
LMS (Moodle, Canvas) launches AMTOS exam sessions via signed JWT. AMTOS validates iss, aud, and nonce. Platform public key retrieved from JWKS endpoint.
Grade Passback (AGS)
On result publication, AMTOS POSTs a score to the LMS via Assignment & Grade Services API. Idempotent — duplicate submissions are detected and ignored.
NRPS Roster Sync
Names & Roles Provisioning Service allows AMTOS to pull the course roster from the LMS, auto-creating student accounts and enrolments on first launch.
ALSO SUPPORTED: ICS / iCalendar calendar import · Excel .xlsx bulk import (ExcelDataReader) · PDF generation (all regulatory docs) · SQL Server SSMS / Azure Data Studio tooling

Deep Dive — Compliance Management

Quality Management System (QMS)

Structured audit, non-conformance, and corrective-action workflow built for EASA Part-147 organisations. Every finding has a traceable lifecycle from discovery to closure.

📋 Data Model
AuditChecklist
  ├─ ChecklistId (PK)
  ├─ SchoolId (FK, tenant)
  ├─ AuditDate
  └─ AuditorId (FK Personnel)

NonConformanceReport (NCR)
  ├─ NcrId (PK)
  ├─ ChecklistId (FK)
  ├─ Finding (text)
  └─ Severity (enum)

CorrectiveAction (CAPA)
  ├─ CapaId (PK)
  ├─ NcrId (FK)
  ├─ ActionOwner (FK Personnel)
  ├─ DueDate
  └─ ClosedAt (nullable)
🔄 Workflow
Audit Checklist
Auditor works through a structured checklist. Each item passes or raises a finding. Date, auditor, and area are recorded against the checklist.
Non-Conformance Report (NCR)
Failed checklist items generate an NCR automatically. Severity is classified (Minor / Major / Critical). NCR is assigned to an action owner.
CAPA — Corrective Action
Each NCR requires a documented corrective action with due date and owner. Closure requires an authorised sign-off and is timestamped.
Audit Trail Export
Full QMS history exportable to Excel or PDF for regulatory submission. All records are tenant-partitioned by SchoolId.
Full technical deck · 31 slides

Next Steps

Request Access or a Technical Demo

Arrange a technical walkthrough, request a sandbox environment, or discuss deployment requirements with the Aggregator Solutions team.

Riyadh, Saudi Arabia · aggregatorsolutions.com