🎬 Simulate:
UC-LMS.14 harness · 7 scenarios
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-onlypending_learner_email"Email (Request)" — text · computed, cross-module (IDP) · read-onlypending_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-onlymember_learner_email"Member Email" — text · cross-module (IDP LearnerProfile) · read-onlymember_joined_at"Joined At" — datetime · CohortMember.joined_at · read-onlymember_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-1reject_request"Reject" — enabled when the cohort requires approval · opens SCR-LMS.45 (reject mode) · triggers UC-LMS.14-A-2B-1revoke_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-onlystudent_name"Learner Name" — text · param.selected_student_name · read-onlystudent_email"Learner Email" — text · param.selected_student_email · read-onlyreject_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
- Learner name and email always shown in both modes so the User can confirm identity before clicking Confirm.
- dialog_mode controls heading text and reject_reason visibility; default = revoke.
- Confirm is always enabled — not blocked waiting for reject_reason (optional field).
Additional requirements
- Learners in the pending list must have a valid Enrollment for this course — requests without a valid Enrollment are not shown.
- Only instructors listed in CohortInstructor for this cohort can access this screen; CourseInstructors who are not CohortInstructor are denied.
- 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.
- 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).
- 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.
- Pending Approval Requests are sorted by request date ascending (oldest first); both sections show an empty state when there are no matching rows.
- 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.