Coach ↔ SimpliTrain feature mapping
Every Coach screen mapped to the existing SimpliTrain (Enlight) entity, controller and UI it is built on. Source: Enlight.Domain/* and Enlight/Controllers/* on branch main. No schema breaks: "Extend" = add columns/rows to an existing table; "New" = a new thin table or job on top of existing ones.
As-isexisting feature, re-skinned only
Configexisting feature, new defaults / labels / hidden fields
Extendexisting entity + a few new columns or a new trigger/enum value
Newno equivalent today — new table/job, built over existing data
1 · Public tenant site
| Coach feature (mockup) | SimpliTrain entity / table | Controller · existing UI | Type | Gap / note |
|---|---|---|---|---|
Tenant subdomain rahulmehta.simplitrain.com | Site (Name, BaseUrl, SiteLogoPath, CustomCSS, ThemeBase, ContactHTML, FooterHTML, GeneralSiteEmail, SiteHelpDeskPhone, DefaultUserOrganization) | SiteController · Views/Site | As-is | One Site + one Organization per coach. Multi-tenancy already keyed on Site. |
| Landing page landing.html | WebPage (Html, VanityUrl, EnableAnonymousAccess, UserRoles) + Site branding + Organization.EnableCourseCatalog / EnableAnonymousAccessToCourseCatalog | WebPageController, HomeController.Index, Course catalog (Views/Course catalog) | Extend | Page body is a generated WebPage.Html from a template. Store section toggles + hero copy as JSON on Site (1 new column CoachLandingJson). |
| Programs catalog on landing | Course (ShowOnCourseCatalog, AllowAnonymousAccessToCourseDetails, Price, AvailableSelfPaced, AvailableInstructorLed) | CourseController catalog + details | As-is | Coach "Program" = Course. Existing Program entity is the enterprise curriculum group; one hidden default Program per tenant. |
| Direct registration register.html | User via anonymous registration (Organization.AllowAnonymousRegistration, UseBasicAnonymousRegistration) + Course.AllowSelfEnrollment / AllowSelfAssignment → CourseAssignment | UserController.Register (GET/POST), Views/User/Register | Config | Intake questions (insurer, premium, "why") = CustomField on User (CustomFieldController). Program radio = self-enrol into chosen Course/Class after register. |
| Approval-based registration + pending.html | ClassEnrollment.EnrollmentStatus = Request(0) → Approve(30) / Deny(40); notification events ClassEnrollmentRequested / Approved / Denied | ClassEnrollmentController (request/approve/deny), Views/ClassEnrollment; NotificationPlan | As-is | User account is created immediately (existing behaviour); "Pending approval" = enrollment in Request status. Week-0 access = CourseActivity.AvailabilityType open section. |
| Login login.html | User.Membership, SiteAuthenticationProvider | UserController login, AuthenticationProviderController | As-is | WhatsApp OTP link = New (new INotificationSender channel + one-time token, reuse Token). |
2 · Coach Console (admin)
| Coach feature (mockup) | SimpliTrain entity / table | Controller · existing UI | Type | Gap / note |
|---|---|---|---|---|
| Coach Console shell (15-item sidebar) | UserRole + UserRoleGeneralPermission; BuiltInRole.SuperUser (coach) / Manager (co-coach) | AdminController.Index, _Layout.cshtml (super-admin mockups) | Config | New "Coach" theme = Organization.Theme / Site.ThemeBase value that swaps _Layout nav to the 15-item list. Enterprise nav stays behind the "Advanced" switch. |
| Dashboard dashboard.html | Reports module — tiles are report-dashboard widgets: cohort-health-dashboard (new), user-activity-dashboard, assessment-performance-dashboard, platform-pulse-dashboard; attention list from LearnerStatus | AdminController.Index home-page sections + React <ReportChart> (ApexCharts) from super-admin/report-dashboard.html | Config | No bespoke queries: each tile calls GET /api/reports/{id}?cohortId=. One new report definition (cohort-health). |
| Applicants applicants.html | ClassEnrollment where EnrollmentStatus = Request; User custom fields | ClassEnrollmentController.Search (filter Request) · approve / deny actions | As-is | "Assign chapter" on approve = set User.OrganizationId (chapter org) in the same POST. SLA/overdue badge = computed from Created. |
| Learners learners.html | User + ClassEnrollment/CourseAssignment progress; learner status Active / At-risk / Non-fit / Dropped | UserController.Search, Views/User/Search | New | Status: new table LearnerStatus (ClassEnrollmentId, StatusId, RuleId, Reason, Changed, ChangedById). Dropped also sets ClassEnrollment.EnrollmentStatus = Cancel; Non-fit after fail may set CompletionStatus = Failed. Everything else in the grid exists. |
| Learner detail & override learner-detail.html | User details tabs; ClassEnrollmentHistory, UserHistory, User.Notes (UserNote), ScormAttempt, AssessmentResponse, ClassMeetingAttendance | UserController.Details (enrollments / assignments / notes tabs), ClassEnrollmentHistoryController | Extend | Status log tab = learner-status-history report filtered to the user; assessments/attendance tabs = assessment-responses, class-attendance list-view filtered to the user. override = insert row + UserNote. "Pause rules 14 days" = LearnerStatus.SuppressUntil column. |
| Chapters chapters.html | Organization child of tenant org (ParentId, City, Address, Latitude/Longitude, ContactName, EnablePublicSchedule); co-coach = UserRoleAssignment of Manager role scoped to that org | OrganizationController, UserRoleController | Config | Chapter = child Organization (gives venue, map, and org-scoped co-coach permissions for free). Thematic chapters with no geography could alternatively be UserGroup; recommend Organization for one model. |
| Cohorts cohorts.html | Class (CourseId, OrganizationId = chapter, StartTime/EndTime, MinStudents/MaxStudents, DeliveryTypeId Physical/Virtual/Mixed, AllowSelfEnrollment, PrimaryInstructorId, ConfirmationStatus) | ClassController.Search / Edit, Views/Class | Config | Cohort = Class. 3-step wizard = ClassController.Edit with ~80 fields hidden (labs, vouchers, materials, billing, recordings…). "Defaults applied" = Organization.DefaultSessionPattern / DefaultSessionTime* already exist. |
| Cohort detail · Learners tab cohort-detail.html | ClassEnrollment roster | ClassController profile → roster / enrollments (Views/Class/Roster, class-roster.html mockup) | As-is | Adds LearnerStatus column. |
| Cohort detail · Schedule tab | ClassMeeting (StartTime, EndTime, VirtualMeetingId, PrimaryInstructorId) + Classroom venue + Organization.DefaultSessionPattern | ClassMeetingController, class calendar | As-is | "Regenerate sessions" = existing session-pattern generator on Class edit. |
| Cohort detail · Program content tab | Course → CourseActivity tree (per-class completion from ScormAttempt / AssessmentResponse / ExternalLinkLaunch) | Course activity list; class-enrollment activity view | Extend | Per-cohort unlock date ("Unlocks 20 Sep") = new ClassActivityAvailability (ClassId, CourseActivityId, AvailableFrom); falls back to CourseActivity.AvailabilityType. |
| Cohort detail · Assessments tab | CourseActivity where ActivityType = Assessment(50) + AssessmentResponse per enrollment | AssessmentController, AssessmentResponseController | Extend | "Required" + "Pass mark" = 2 new columns on CourseActivity (IsRequired exists as Required; add PassPercent, MaxRetakes). |
| Cohort detail · Filtering tab | see Filtering rules | — | New | Per-class rule enable/disable = FilterRuleClass (RuleId, ClassId, Enabled). |
| Programs programs.html | Course (Name, Description, Price, Duration, AvailableSelfPaced/InstructorLed, ShowOnCourseCatalog, AllowSelfEnrollment, Archived, Version) | CourseController.Search / Edit, Views/Course | Config | Remediation Track = an ordinary Course (or a Track if it must chain courses). Course versioning already exists (Version). |
| Program builder program-builder.html | CourseActivity (ActivityTypeId: Section 80, Video 60, Document 70, ScormModule 2, AiccModule 3, Assessment 50, ExternalLink 40, LTIResourceLink 90; SortOrder, EnforceSequence, Required, ParentId, ExpectedDurationSeconds) | Course edit → Activities editor; ScormModuleController upload; ExternalVideoProviderController; DocumentController | Extend | "Week" = Section activity. Video/Doc/SCORM/Quiz exist. Live class and Classroom rows are not activities — they are ClassMeetings; builder shows them as placeholders that the cohort schedule fills. Assignment type = new ActivityType (see Assessments). |
| Sessions sessions.html | ClassMeeting + VirtualMeeting / VirtualMeetingHost (product ZoomConnect=4) + Classroom; reminders = NotificationPlan.ClassTimeTriggerHours (event ClassTimeTrigger 1017) | ClassMeetingController, VirtualMeetingController, ClassroomController; calendar (instructor-calendar mockups) | As-is | Google Meet host = new VirtualMeetingHostProduct value (Extend). |
| Attendance (auto from Zoom, QR check-in, excused) | ClassMeetingAttendance (UserId, ClassMeetingId, CheckInTime); SignInSheet; ClassEnrollment.CompletionStatus NoShow(40) | AttendanceController, SignInSheetController, class-attendance.html mockup | Extend | Add Source (Zoom/QR/Manual), Excused, DurationMinutes to ClassMeetingAttendance. Zoom join-log import = new job using existing Zoom host credentials (ZoomMeetingRecording already polls Zoom API). |
| Assessments · quizzes & exams assessments.html | Assessment (Questions, AssessmentTypeId Default / SimpliAssess) + AssessmentResponse.Score + CourseActivity.AllowRetake / AllowReview | AssessmentController, AssessmentResponseController, Views/Assessment | As-is | Results tab = assessment-performance-dashboard + assessment-responses from the Reports catalog, embedded. |
| Assessments · assignments & rubric grading | — | — | New | No assignment/submission entity exists. New: Assignment (CourseActivityId, RubricJson, PassPercent, DueOffsetDays), AssignmentSubmission (ClassEnrollmentId, Files, Score, Feedback, GradedById). Files reuse ExternalStorageAccount upload path. New ActivityType value Assignment = 100. |
| Filtering rules filtering-rules.html | Pattern copied from Achievement.ConditionsJson / AchievementCondition (Count, MinMinutesSpent, StartAfter…, evaluated by scheduled job). Inputs all exist: User.LastLoginDate, ScormAttempt.LastActivity, AssessmentResponse.Score, ClassMeetingAttendance. Actions reuse: LearnerStatus, NotificationPlan, CourseAssignment (remediation), ClassEnrollment.EnrollmentStatus=Cancel | AchievementController is the closest existing UI (condition builder) | New | New tables FilterRule (ConditionsJson, ActionsJson, Enabled), FilterRuleLog; new nightly job next to the achievement evaluator. No change to existing tables. |
| Email reports · learner nudges email-reports.html | NotificationPlan (Subject, Body, From, Cc, Recipients, TriggerEvents, ClassTimeTriggerHours, CourseAssignmentExpiresTriggerDays) → QueuedNotification → SentNotification; send log tab = sent-notifications report | NotificationPlanController, NotificationController, Views/NotificationPlan; NotificationQueueProcessor | Extend | Existing events cover welcome (UserCreated 3000), enrol/approve/deny, class reminders (1017), SCORM complete (2000). Add trigger enum values: LearnerInactive, LearnerStatusChanged, AssignmentOverdue, AssessmentGraded, LeaderboardRankChanged. WhatsApp = new INotificationSender implementation. |
| Email reports · coach digests | Reports module Analyze/Explore endpoints (cohort-health-dashboard, user-activity-dashboard, assessment-performance-dashboard, learner-status-history) rendered to HTML; log in SentNotification | Reports "Schedule as digest" action; NotificationQueueProcessor | Extend | New ReportSchedule (ReportId, Cron, Recipients, Filters) on the reports module — generic scheduled-report email, reusable by enterprise. No separate digest engine. |
| Community community.html | DiscussionBoard (OrganizationId, Courses) → DiscussionTopic → DiscussionPost; Announcement (Courses, UserGroups, Organizations, Programs, AutoShow, PriorityType, EnableNotifications) | DiscussionBoardController, AnnouncementController; default-user/discussion.html | Extend | Channel = one DiscussionBoard per Class (cohort) and per chapter Organization. Add to DiscussionPost: ParentPostId (threads), IsPinned, IsAccepted, AttachmentUrl; new DiscussionPostReaction. Coach announcement = Announcement targeted to the class's UserGroup/Course. |
| Leaderboard · points & badges leaderboard.html | Achievement (Points, Frequency, FrequencyType, ConditionsJson; subjects Course / CourseTag / Lab / UserAchievement) + UserAchievement (AchievedTime); User.ParticipateInAchievements; CredlyBadge | AchievementController, Views/Achievement (Choose/Edit/Search) | Extend | Points = SUM(Achievement.Points) over UserAchievement — exists. Ranking = new query/view per Class and per Organization. Add condition subjects ClassMeetingAttendance, AssessmentScore, DiscussionAccepted; negative Points for penalties (int already). |
| Leaderboard · incentives | — | — | New | Small Incentive (ClassId, RankFrom, RankTo, Reward, NotificationPlanId) table; voucher reward can reuse ClassVoucher / CouponPool. |
| Landing page builder landing-page.html | Site (SiteLogoPath, CustomCSS, ThemeBase, ContactHTML) + WebPage.Html | SiteController.Edit, WebPageController.Edit (HTML editor) | Extend | Builder writes Site.CoachLandingJson and regenerates the WebPage HTML from a template; theme colour → CustomCSS variable. |
| Settings · Organisation settings.html | Site, Organization (TimeZoneId, Culture, Email, Phone, Theme, AllowAnonymousRegistration) | SiteController, OrganizationController, ApplicationSettingsController | Config | ~200 Organization fields hidden; "Advanced" switch reveals the full enterprise forms. |
| Settings · Team & roles | UserRole (BuiltInRole SuperUser=coach, Manager=co-coach) + UserRoleAssignment scoped to chapter Organization; UserRoleGeneralPermission | UserRoleController, GeneralPermissionController | Config | Two pre-built roles seeded per tenant; role editor hidden. |
| Settings · Integrations | VirtualMeetingHost (Zoom), ExternalVideoProvider, ContentProvider (SCORM/Rise), AuthenticationProvider, ExternalStorageAccount, calendar integration (NotificationPlan.CalendarIntegrationType) | VirtualMeetingHostController, ExternalVideoProviderController, ContentProviderController | As-is | SimpliAssess sync = Assessment.AssessmentTypeId = SimpliAssessAssessment(2) + ExternalAssessmentUrl already exist; add a sync job/webhook to refresh URLs (Extend). Razorpay / WhatsApp Business = New providers. |
| Settings · Plan & billing | Enlight.Domain/Licensing (new License module already on this branch), Invoice | LicenseController, _LicenseAlert.cshtml | As-is | Learner/storage caps read from the licence. |
3 · Learner app
| Coach feature (mockup) | SimpliTrain entity / table | Controller · existing UI | Type | Gap / note |
|---|---|---|---|---|
| Learner shell (top nav → bottom tab bar) | BuiltInRole.DefaultUser; Site.ThemeBase | _Layout.cshtml default-user (simpliTrain-v2 mockups) | Config | Coach theme = 6-item nav; catalog, cart, learning plans, transcript, certifications hidden. |
| Home home.html | ClassEnrollment + CourseAssignment (current), ClassMeeting (upcoming), Announcement, UserAchievement | HomeController.Index / default-user home.html, my-courses.html | Extend | "This week" list = CourseActivity Section for current week. Standing card reads LearnerStatus + leaderboard rank. |
| Home · at-risk banner home-at-risk.html | LearnerStatus + rule recovery conditions | — | New | Recovery checklist generated from the "Recovery → Active" rule's conditions. |
| My program program.html | CourseActivity tree + completion (ScormAttempt.Status, AssessmentResponse, CourseActivityExternalLinkLaunch, ClassMeetingAttendance) + ClassEnrollment.Grade / HoursSpent | course-enrollment.html / course-enrollment-detail.html (activities list) | As-is | Locked weeks use ClassActivityAvailability (see cohort content tab). |
| Lesson player lesson.html | Activity launch: ScormModule player, Video (ExternalVideoProvider), Document; Q&A = DiscussionBoard.Courses | ScormModuleController launch, CourseFile/Document download, DiscussionBoardController | As-is | "Mark complete" for video/doc = existing activity completion (ExternalLinkLaunch / document view tracking). |
| Sessions sessions.html | ClassMeeting + VirtualMeeting join URL + Classroom address; CalendarItemSearchResult; recordings = ZoomMeetingRecording / RecordingAccessType | Calendar (default-user calendar.html), class-enrollment details | As-is | RSVP + "mark excused" + 6-digit check-in code = Extend on ClassMeetingAttendance (code stored on ClassMeeting). |
| Assessments assessments.html · Quiz quiz.html | Assessment / AssessmentResponse (attempt, score, review) | AssessmentController take/review, AssessmentResponseController | As-is | Assignment upload card = new AssignmentSubmission (see admin). |
| Community community.html | DiscussionBoard / Topic / Post, Announcement | default-user discussion.html, AnnouncementController | Extend | Same extensions as admin community (threads, reactions, accepted answer, attachments). |
| Leaderboard & badges leaderboard.html | UserAchievement / Achievement.Points; User.ParticipateInAchievements | Achievement learner views (Choose/Details), certification-profile badges | Extend | Ranking view is new; badge tiles are existing achievements. |
| Profile profile.html | User (contact, TimeZoneId, ProfileImageUrl, EnableGeneralNotifications, EnableNormalAnnouncements), custom fields | UserController profile / settings (default-user profile.html, settings.html) | As-is | Per-topic notification switches map to NotificationPlan opt-outs (Extend: UserNotificationOptOut). |
4 · Reports module (133-card catalog → 36 coach cards)
| Coach analytic (where it appears) | Catalog report ID · view type | Existing UI | Type | Note |
|---|---|---|---|---|
| Reports page reports.html | Catalog filtered by a "coach" tag; 4 view types kept (Explore / Analyze / Monitor / Records); 5 coach categories on the domain rail | Same design as super-admin/reports.html (domain rail → sub-nav → cards), copied into coach as admin/reports.html, report-dashboard.html, report-detail.html, list-view.html, report-drilldown.html (cohort), report-learner.html (learner) — drill-downs stay inside Reports (same as SimpliTrain course-drilldown / user-drilldown); React + ApexCharts per docs/REPORTS_CHART_DESIGN_REACT.md | Config | Same shell, same KPI strip, Chart ↔ Data toggle, Excel export. Catalog gets a Tags column; coach theme shows coach-tagged cards only. |
| Dashboard · Cohort health table | cohort-health-dashboard · Explore | — | New | Per-Class progress, attendance %, LearnerStatus mix, retention. New report definition, existing contract. |
| Dashboard · Weekly engagement; Filtering inactivity input | user-activity-dashboard · Explore; login-history · Records | User category | As-is | |
| Learners grid · progress / avg score / last active | user-enrollments-dashboard · Explore; users, users-by-training · Records | User category | As-is | Add LearnerStatus column to the list-view. |
| Learner detail · Status log tab | learner-status-history · Analyze | closest: audit-log · Analyze | New | Reads LearnerStatus + FilterRuleLog. |
| Cohort detail · stats strip; Cohorts list · progress/attendance | class-enrollment-dashboard, class-attendance-dashboard · Explore; class-fill-rate · Analyze; enrollments, classes · Records | Training category | As-is | Cohort = Class, so all class reports apply unchanged. |
| Sessions · attendance table & export | class-attendance, class-sessions · Records | Training category | Extend | Add Source / Excused / Duration columns after the ClassMeetingAttendance extension. |
| Assessments · Results tab (distribution, hardest questions) | assessment-performance-dashboard · Explore; assessment-responses · Analyze + Records | Learning category | As-is | |
| Assessments · Grading queue stats | assignment-grading · Analyze | — | New | Depends on new AssignmentSubmission table. |
| Programs · completion, per-module stats | course-completion-dashboard, course-drilldown · Explore; scorm-attempts · Analyze; courses, scorm-modules · Records | Learning / Hybrid Learning categories | As-is | Program = Course. |
| Filtering · tuning thresholds | dropoff-funnel · Analyze | Learning category | As-is | Shows the week learners abandon → set inactivity/attendance thresholds. |
| Filtering · action log & re-engagement rate | filtering-rule-actions · Analyze | closest: audit-log, sent-notifications | New | Joins FilterRuleLog with SentNotification + LastLoginDate. |
| Email reports · Send log tab; nudge open rates | sent-notifications · Analyze + Records; notification-plans · Records | Engagement & Comms category | As-is | Open/click columns exist only if tracking pixels are enabled. |
| Email reports · Coach digests | Any Explore/Analyze report + new ReportSchedule | Reports "Schedule" action | Extend | Generic scheduled report email; replaces the separate digest engine proposed earlier. |
| Community · pulse tile, unanswered count | platform-pulse-dashboard, current-activity-summary · Monitor; discussion-boards, announcements · Records | Engagement & Comms category | Extend | Add unanswered / accepted-answer metrics once DiscussionPost is extended. |
| Leaderboard · standings export, points by source | leaderboard-standings · Analyze | — | New | Over UserAchievement × Achievement.Points, grouped by Class / chapter Organization. |
| Applicants · landing→apply conversion | course-enrollments-dashboard · Explore (enrollment status funnel) | Learning category | As-is | Landing-page visits need a page-view counter on WebPage (Extend). |
| Hidden from coach catalog | ~103 cards: Certifications, Learning Paths, Mandatory training, Instructor utilization/feedback/schedule, Classroom utilization, Labs/AICC/LTI/MS Learn, Materials, Surveys, Skills radar, Accounts (revenue, orders, coupons, clubs, Arvato), Integrations records, Feature sets, Sites/Companies/Centers | — | Config | Untagged; visible via Advanced → Full catalog. |
4b · Create / edit forms
| Coach form | SimpliTrain form it replaces | Entity written | Type |
|---|---|---|---|
| Cohort | Class edit (class-form.html, ~110 fields) | Class + generated ClassMeetings | Config |
| Program properties · Module | Course edit + activity editor (course-form, ScormModule / Document upload) | Course, CourseActivity | Config |
| Chapter | Organization edit (center-form.html) + Classroom form + role assignment | child Organization, Classroom, UserRoleAssignment | Config |
| Session | ClassMeeting + VirtualMeeting forms | ClassMeeting, VirtualMeeting | As-is |
| Quiz / exam builder | assessment-form.html + question editor | Assessment, Question, CourseActivity | Extend (PassPercent, MaxRetakes) |
| Assignment + rubric | — | Assignment (new) | New |
| Filtering rule | closest: achievement-form.html condition builder | FilterRule (new) | New |
| Nudge sequence | NotificationPlan form (one per step) | NotificationPlan ×N | Extend (trigger events, WhatsApp) |
| Announcement | announcement-form.html | Announcement | As-is |
| Learner | User edit + ClassEnrollment form | User, ClassEnrollment, LearnerStatus | Config |
| Badge | achievement-form.html | Achievement | Extend (condition subjects) |
| Incentive | — | Incentive (new) + ClassVoucher | New |
| Team member | User + UserRole assignment | UserRoleAssignment | Config |
5 · Existing SimpliTrain features hidden in the Coach theme
All remain in the database and are reachable via the "Advanced enterprise settings" switch; nothing is deleted.
Commerce
Store, Product, Invoice, InvoiceHistory, Billing, Square, CouponPool*, CreditPool, Token/TokenPack, TrainingKey/Pool, ClassVoucher, ArvatoMarketplace/ALHOrder/SyncLog, Courseware, Material/Vendor/MaterialsList
Store, Product, Invoice, InvoiceHistory, Billing, Square, CouponPool*, CreditPool, Token/TokenPack, TrainingKey/Pool, ClassVoucher, ArvatoMarketplace/ALHOrder/SyncLog, Courseware, Material/Vendor/MaterialsList
Enterprise learning structure
Program (hierarchy), Track/TrackAssignment, LearningPath, Club/ClubMembership/ClubPath, CertificationProfile/UserCertification, CourseGroup/Tag/TagGroup, Interest/InterestGroup, Specialty, JobPlacement, UserTransfer, Company
Program (hierarchy), Track/TrackAssignment, LearningPath, Club/ClubMembership/ClubPath, CertificationProfile/UserCertification, CourseGroup/Tag/TagGroup, Interest/InterestGroup, Specialty, JobPlacement, UserTransfer, Company
Delivery & ops
Lab/LabInstance/LabProvider/LabSeries, MentoredSession, Instructor availability/blockout/feedback, Elluminate, VirtualMeetingTemplate/HostStatistics, LTIProvider/ResourceLink, ContentProvider admin, Survey/SurveyResponse, CustomReport (SSRS legacy), SavedSearch, Api/ApiDocumentation/PortalApi, AuthenticationProvider (SSO), UserRole editor, GeneralPermission, CustomField editor, OrganizationVisibilityList, Cache/Script/Install
Lab/LabInstance/LabProvider/LabSeries, MentoredSession, Instructor availability/blockout/feedback, Elluminate, VirtualMeetingTemplate/HostStatistics, LTIProvider/ResourceLink, ContentProvider admin, Survey/SurveyResponse, CustomReport (SSRS legacy), SavedSearch, Api/ApiDocumentation/PortalApi, AuthenticationProvider (SSO), UserRole editor, GeneralPermission, CustomField editor, OrganizationVisibilityList, Cache/Script/Install
6 · Net new schema (summary)
LearnerStatus— per-enrollment status (Active / At-risk / Non-fit / Dropped), reason, rule, suppress-until, history.FilterRule,FilterRuleClass,FilterRuleLog— rule definitions (JSON, same shape as Achievement conditions), per-cohort toggles, action log. One nightly job.Assignment,AssignmentSubmission— file/video submissions with rubric grading; newActivityType.Assignment.ClassActivityAvailability— per-cohort unlock dates for weeks/sections.ReportSchedule— scheduled report emails on the Reports module (coach digests);Incentive— leaderboard rewards.- 6 new report definitions on the existing report contract:
cohort-health-dashboard,learner-status-history,assignment-grading,leaderboard-standings,filtering-rule-actions,landing-conversion;Tagscolumn on the report catalog. - Column adds:
Site.CoachLandingJson;CourseActivity.PassPercent, MaxRetakes;ClassMeetingAttendance.Source, Excused, DurationMinutes;ClassMeeting.CheckInCode;DiscussionPost.ParentPostId, IsPinned, IsAccepted, AttachmentUrl+DiscussionPostReaction; newNotificationTriggerEventTypevalues; newVirtualMeetingHostProduct.GoogleMeet.