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 }