Edit Specialization
Basic information
Member courses
Select courses to include in this Specialization โ drag to reorder. Learners must complete courses in the specified order.
โ ฟ
1
HTML & CSS Fundamentals
published
โ ฟ
2
JavaScript Essentials
published
โ ฟ
3
Introduction to Python Programming
unpublished
โ ฟ
4
React & Frontend Frameworks
published
Shows only published courses within Program Admin's scope
Tags
Tags from selected courses auto-pulled
Web Development
(paid)
Science
(paid)
Programming
Data Science
Additional tags free groups only
Only tags from free (non-paid) tag groups can be added at the Specialization level
Screen Flow (from flow.puml):
โ Save / Cancel / Publish success โ Manage Specialization List
โ Validation fail / Unpublished warning โ (stays on this page)
๐ Spec notes โ UC-LMS.02 / SCR-LMS.12 (fields, actions, requirements)
Identity
- Screen: SCR-LMS.12 โ Manage Specialization Editor
- Use case: UC-LMS.02 โ Manage Specialization
Brief description
Form page for Program Admin to create or edit a Specialization. All information on one page โ name, description, objectives, member course list (drag-and-drop reordering), and tags. When courses are selected the system auto-pulls their tags; tags from a Paid Tag Group are locked chips; tags from a Free Tag Group are removable. Additional tags from a Free Tag Group can be added at the Specialization level.
Fields
title"Specialization Name" โ text ยท required ยท max 200 chars ยท Specialization.titledescription"Description" โ textarea ยท optional ยท Specialization.descriptionobjectives"Objectives" โ textarea ยท optional ยท Specialization.objectivesmember_courses"Member Courses" โ multi-select enum ยท SpecializationCourse.course_id; sequence from drag-and-drop โ SpecializationCourse.sequenceunpublished_course_warning"Unpublished Course Warning" โ text ยท read-only ยท visible when any(member_courses) where Course.status != publishedcourse_tags"Tags from selected courses" โ auto-pulled from selected courses ยท Tag.id via SpecializationTag; Paid Tag Group โ locked chip (non-removable); Free Tag Group โ removable chipadditional_tags"Additional tags" โ picker restricted to tags from a Free Tag Group only ยท Tag.id via SpecializationTag
Actions
save"Save" โ enabled when title != '' && member_courses.length ≥ 1 && (course_tags.length + additional_tags.length) ≥ 1 ยท triggers UC-LMS.02-M-8cancel"Cancel" โ enabled alwayscontinue_with_unpublished"Continue" โ enabled when unpublished_course_warning != '' ยท governed by UC-LMS.02 additional_requirements #3 (keep unpublished course)remove_unpublished_course"Remove" โ enabled when unpublished_course_warning != '' ยท governed by UC-LMS.02 additional_requirements #3 (remove unpublished course)
Additional requirements
- Course picker filters to status=published within Program Admin's scope โ courses unpublished after assignment still appear in the member list with a status badge
- Drag-and-drop reorders courses in the member list โ order is stored as SpecializationCourse.sequence (1-based) on save
- Warning banner appears when any member course has been unpublished โ checked on opening edit page and on clicking Save; shows Continue and Remove buttons
- Save failure (Validation-Failed) โ system shows inline error identifying missing fields (name / at least 1 course / at least 1 tag) and scrolls to the section with errors
- When courses are selected the system auto-pulls their tags into
course_tags; tags from a Paid Tag Group โ locked chip; tags from a Free Tag Group โ removable chip - Additional tags via
additional_tagspicker are restricted to tags from a Free Tag Group only
Mode notes
- Create mode (scenario: main) โ empty form, page title "Create Specialization"; tags section empty until courses are selected
- Edit mode (scenario: AF-2A) โ pre-filled with current data, page title "Edit Specialization"; inherited tags and additional tags pre-populated
- Unpublished warning (scenario: Course-Unpublished) โ warning banner shown with Continue / Remove buttons
- Save validation error (scenario: Validation-Failed) โ error alert summary + inline error on affected fields