Cohort Dashboard › Manage Student
🎬 Simulate: UC-LMS.14 harness · 7 scenarios
Manage Student — Batch 1/2025
Modern Digital Marketing · Approval required
Pending Approval Requests 3
Learner Requested
Nithiphat Somboon
nithiphat.s@gmail.com
01 Jun 2025
Wararat Charoenwong
wararat.c@gmail.com
02 Jun 2025
Peerawat Tanaka
peerawat.t@gmail.com
03 Jun 2025
Current Members 5
Learner Joined Progress Status
SP
Soulivane Phongsavanh
souk.v@gmail.com
01 Jan
68%
Active
DI
Daravanh Inthavong
daravanh.i@gmail.com
01 Jan
92%
Active
KS
Khamla Sisouphan
khamla.s@gmail.com
05 Jan
8%
Active
VS
Vilai Souksavanh
vilai.s@gmail.com
05 Jan
44%
Active
BP
Bounmy Phommachanh
bounmy.p@gmail.com
08 Jan
100%
Revoked
📝 Spec notes — UC-LMS.14 / SCR-LMS.50 Manage Student tab (fields, actions, requirements)
Identity
  • Use case: UC-LMS.14 — Manage Student
  • Primary screen: SCR-LMS.50 — Cohort Dashboard (Manage Student tab)
  • Embedded dialog: SCR-LMS.45 — Student Action Confirmation Dialog (reject / revoke modes)
Fields (Pending Approval Requests table)
  • pending_learner_name "Learner Name (Request)" — text · computed, cross-module join CohortMember → Enrollment → LearnerProfile (IDP) · read-only
  • pending_learner_email "Email (Request)" — text · computed, cross-module (IDP) · read-only
  • pending_requested_at "Request Date" — datetime · computed · sorted ascending (oldest first) · read-only
Fields (Current Members table)
  • member_learner_name "Member Name" — text · cross-module (IDP LearnerProfile) · read-only
  • member_learner_email "Member Email" — text · cross-module (IDP LearnerProfile) · read-only
  • member_joined_at "Joined At" — datetime · CohortMember.joined_at · read-only
  • member_status "Status" — enum [active, revoked] · CohortMember.status · read-only; row shows badge Active (green) or Revoked (grey); revoked rows keep no Revoke button
Actions
  • approve_request "Approve" — enabled when !cohort_full (max_members not reached) · triggers UC-LMS.14-A-2A-1
  • reject_request "Reject" — enabled when the cohort requires approval · opens SCR-LMS.45 (reject mode) · triggers UC-LMS.14-A-2B-1
  • revoke_member "Revoke" — enabled when member_status == active (hidden when revoked) · opens SCR-LMS.45 (revoke mode) · triggers UC-LMS.14-A-2D-1
↳ Embedded dialog: SCR-LMS.45 — Student Action Confirmation Dialog
Brief

Shared confirmation dialog for 2 cases via dialog_mode provided by the calling action: revoke — heading "Confirm Learner Revocation", no reason field; reject — heading "Confirm Rejection of Join Request", with an optional reason field. Default mode = revoke if not provided.

Fields
  • dialog_heading "Dialog Heading" — text · rule-derived from dialog_mode · read-only
  • student_name "Learner Name" — text · param.selected_student_name · read-only
  • student_email "Learner Email" — text · param.selected_student_email · read-only
  • reject_reason "Reason (optional)" — textarea · max length 500 · visible when dialog_mode == reject only
Actions
  • confirm "Confirm" — always enabled · triggers UC-LMS.14-A-2B-3 (reject) / UC-LMS.14-A-2D-3 (revoke)
  • cancel "Cancel" — always enabled · triggers UC-LMS.14-A-2B.2A-1 (reject) / UC-LMS.14-A-2D.2A-1 (revoke) · closes dialog without change
Additional requirements
  1. Learner name and email always shown in both modes so the User can confirm identity before clicking Confirm.
  2. dialog_mode controls heading text and reject_reason visibility; default = revoke.
  3. Confirm is always enabled — not blocked waiting for reject_reason (optional field).
Additional requirements
  1. Learners in the pending list must have a valid Enrollment for this course — requests without a valid Enrollment are not shown.
  2. Only instructors listed in CohortInstructor for this cohort can access this screen; CourseInstructors who are not CohortInstructor are denied.
  3. When the cohort has reached its maximum member limit, pending join requests cannot be approved until a member is removed or the limit is raised — Approve is disabled on every pending row with a "cohort at maximum capacity" banner shown.
  4. A rejected learner may submit a new join request again — the system does not automatically block re-submission (applies only to cohorts that require approval).
  5. When the cohort does not require approval, the pending-approval section and Approve/Reject buttons are hidden entirely; enrolled learners appear as members automatically. Revoke remains available as usual.
  6. Pending Approval Requests are sorted by request date ascending (oldest first); both sections show an empty state when there are no matching rows.
  7. On approve / reject / revoke, the system sends a notification to the affected learner via the channels defined in FEAT-NOT.01.
⚠ Open issues (from UC / screen YAML notes)
  • Cohort.require_approval is not yet reflected in entities.puml.
  • CohortMember is missing fields used by this screen: requested_at, approved_at, rejected_at, reject_reason (entities.puml currently only has joined_at / left_at / a generic reason) — needs alignment in the next /analyze-entities LMS pass.
  • Cross-module fields (learner name/email in both tables) join CohortMember → Enrollment → LearnerProfile (IDP module) — not yet validated at /analyze-entities.