namespace TMSDAL.Enums; // ── Domain ─────────────────────────────────────────────────────────────────── public enum TrainingDomain : byte { Production = 0, Quality = 1, Maintenance = 2, Safety = 3, HR = 4, Finance = 5, ITSystems = 6, Commercial = 7, Admin = 8, CrossFunctional = 9, ProductKnowledge = 10, RDEngineering = 11 } // ── Training Need ───────────────────────────────────────────────────────────── public enum NeedSourceType : byte { ManualHR = 0, SkillGap = 1, CompetencyGap = 2, AppraisalOutput = 3, OKRReview = 4, RCACAPAAction = 5, BusinessChange = 6, PeriodicSchedule = 7, ManagerNomination = 8, SelfNominated = 9, RegulatoryRequirement = 10, Retraining = 11 } public enum Priority : byte { Low = 0, Medium = 1, High = 2, Critical = 3 } public enum AudienceType : byte { Individual = 0, Role = 1, Department = 2, Grade = 3, WorkCenter = 4, Custom = 5 } public enum NeedStatus : byte { Draft = 0, Submitted = 1, UnderReview = 2, Approved = 3, Linked = 4, Closed = 5, Rejected = 6 } /// /// Generic approval decision for non-enrollment approval steps /// (e.g. Training Need, Programme approval). /// For enrollment-specific approval tiers, see . /// public enum ApprovalStatus : byte { Pending = 0, Approved = 1, Rejected = 2, Delegated = 3 } // ── Approval ────────────────────────────────────────────────────────────────── /// /// Identifies WHICH approval tier is acting on an enrollment. /// Used by ApprovalActionDTO (API layer) and ApprovalUpdateDTO (DAL layer) /// to route Manager vs HR approval logic without magic bytes or booleans. /// /// Starts at 1 — default byte value of 0 is intentionally not mapped, /// so an uninitialised DTO is caught early rather than silently misrouted. /// public enum ApprovalType : byte { Manager = 1, HR = 2 } // ── Programme ───────────────────────────────────────────────────────────────── public enum ProgrammeType : byte { Induction = 0, Technical = 1, Behavioural = 2, Safety = 3, Compliance = 4, Leadership = 5, CrossFunctional = 6, Dojo = 7, OJT = 8, SystemTraining = 9, ProcessTraining = 10, ProductKnowledge = 11, SoftSkills = 12, Refresher = 13, CertificationPrep = 14, Coaching = 15 } public enum DeliveryMode : byte { Classroom = 0, Online = 1, Blended = 2, Dojo = 3, OJT = 4, Virtual = 5, Hybrid = 6, SelfPaced = 7, Webinar = 8 } public enum ComplexityLevel : byte { Simple = 0, SessionLevel = 1, TopicLevel = 2 } public enum DifficultyLevel : byte { Awareness = 0, Foundation = 1, Practitioner = 2, Expert = 3 } public enum ProviderType : byte { Internal = 0, External = 1, LMS = 2, MOOC = 3 } // 0=Foundation,1=Intermediate,2=Advanced,3=Expert — audience/career level of the programme public enum ProgrammeLevel : byte { Foundation = 0, Intermediate = 1, Advanced = 2, Expert = 3 } // ── Session / Topic ─────────────────────────────────────────────────────────── public enum SessionType : byte { Lecture = 0, Workshop = 1, Practical = 2, Assessment = 3, Dojo = 4, OJT = 5, Review = 6, Simulation = 7, VideoConf = 8, SelfPaced = 9, Webinar = 10, Coaching = 11, FieldVisit = 12, CaseStudy = 13 } public enum TopicType : byte { Presentation = 0, Video = 1, Reading = 2, Exercise = 3, Quiz = 4, Demo = 5, Simulation = 6, HandsOn = 7 } // ── Venue / Trainer ─────────────────────────────────────────────────────────── public enum VenueType : byte { TrainingRoom = 0, ConferenceRoom = 1, ShopFloor = 2, DojoStation = 3, Virtual = 4, External = 5 } public enum TrainerType : byte { Internal = 0, External = 1 } public enum VendorType : byte { TrainingProvider = 0, Certifier = 1, Consultant = 2, LMSProvider = 3, MOOC = 4 } // ── Instance / Scheduling ───────────────────────────────────────────────────── public enum InstanceStatus : byte { Draft = 0, Open = 1, EnrolmentClosed = 2, InProgress = 3, Completed = 4, Cancelled = 5, Postponed = 6 } public enum SessionStatus : byte { Scheduled = 0, InProgress = 1, Completed = 2, Postponed = 3, Cancelled = 4 } // ── Enrolment ───────────────────────────────────────────────────────────────── public enum NominationSource : byte { Self = 0, Manager = 1, HR = 2, System = 3, SkillGap = 4, Appraisal = 5, Mandatory = 6 } /// /// Full lifecycle of a training enrollment from nomination through completion. /// /// Happy path: /// Nominated → ManagerApproved → HRApproved → Enrolled → Completed /// /// Rejection paths: /// Nominated → ManagerRejected (manager rejects) /// ManagerApproved → HRRejected (HR rejects after manager approved) /// /// Side paths: /// Any active status → Waitlisted (capacity full at nomination time) /// Any active status → Withdrawn (employee withdraws) /// Enrolled → NoShow (did not attend) /// /// DB note: /// Rejected(8) is kept as legacy. New code must use ManagerRejected(9) /// or HRRejected(10). The filtered unique index excludes 7, 8, 9, 10 /// so re-enrollment is allowed after any of those terminal states. /// public enum EnrollmentStatus : byte { Nominated = 0, // Initial state after nomination ManagerApproved = 1, // Manager approved; awaiting HR HRApproved = 2, // HR approved; ready to enroll Waitlisted = 3, // Capacity full; in waitlist queue Enrolled = 4, // Seat confirmed Completed = 5, // Training completed NoShow = 6, // Did not attend Withdrawn = 7, // Employee withdrew Rejected = 8, // ⚠ Legacy — use ManagerRejected / HRRejected below ManagerRejected = 9, // Manager explicitly rejected the nomination HRRejected = 10 // HR rejected after manager approval } public enum AttendanceStatus : byte { Present = 0, Absent = 1, PartialAttendance = 2, Excused = 3 } public enum CompletionStatus : byte { Completed = 0, PartialComplete = 1, Failed = 2, NoShow = 3, Withdrawn = 4 } // ── Certificate ─────────────────────────────────────────────────────────────── public enum CertStatus : byte { Active = 0, Expired = 1, Revoked = 2, RenewalInProgress = 3 } public enum AlertType : byte { RenewalReminder = 0, ExpiryWarning = 1, ExpiredNotice = 2 } public enum RecipientType : byte { Employee = 0, Supervisor = 1, HR = 2, All = 3 } public enum AlertChannel : byte { Email = 0, InApp = 1, SMS = 2, All = 3 } public enum AlertStatus : byte { Scheduled = 0, Sent = 1, Failed = 2, Cancelled = 3 } // ── Assessment ──────────────────────────────────────────────────────────────── public enum AssessmentType : byte { Quiz = 0, PracticalTest = 1, Assignment = 2, Observation = 3, Simulation = 4, Portfolio = 5 } public enum AssessmentMode : byte { Simple = 0, Structured = 1 } public enum QuestionType : byte { MCQ = 0, TrueFalse = 1, ShortAnswer = 2, MultiSelect = 3, Matching = 4, Ordering = 5 } public enum QBankDifficulty : byte { Easy = 0, Medium = 1, Hard = 2 } public enum PaperSelection : byte { Fixed = 0, Random = 1, WeightedRandom = 2 } // Lifecycle of an assessment ASSIGNMENT (was it planned, then completed/skipped/missed) — // distinct from AttemptIsPassed on TASSESSMENTATTEMPT, which is score-outcome, not lifecycle-outcome. public enum AssignmentStatus : byte { Assigned = 0, InProgress = 1, Completed = 2, Skipped = 3, Missed = 4 } // ── Evaluation (Kirkpatrick) ────────────────────────────────────────────────── public enum Kirkpatrick : byte { L1Reaction = 0, L2Learning = 1, L3Behaviour = 2, L4Results = 3 } public enum RespondentType : byte { Participant = 0, Supervisor = 1, HR = 2, Manager = 3, BusinessHead = 4 } public enum EvalTrigger : byte { OnCompletion = 0, ScheduledDate = 1, ManualTrigger = 2 } public enum EvalStatus : byte { Pending = 0, Sent = 1, Completed = 2, Overdue = 3, Cancelled = 4 } // ── Skill Gap / Upgrade ─────────────────────────────────────────────────────── public enum GapSeverity : byte { Low = 0, Medium = 1, High = 2, Critical = 3 } public enum GapStatus : byte { Open = 0, NeedRaised = 1, TrainingScheduled = 2, Closed = 3 } public enum UpgradeStatus : byte { Proposed = 0, UnderReview = 1, Approved = 2, Rejected = 3, Expired = 4 } // ── LMS Bridge ──────────────────────────────────────────────────────────────── public enum SyncDirection : byte { TMStoLMS = 0, LMStoTMS = 1, Bidirectional = 2 } public enum SyncStatus : byte { Pending = 0, Synced = 1, Failed = 2, Manual = 3 }