Manage Tag List
| Tag Name ↕ | Tag Group ↕ | Courses Used ↕ | Specializations Used ↕ | Last Updated ↕ | Actions |
|---|---|---|---|---|---|
| Programming Basics | Technology | 3 | 1 | 2026-05-20 | |
| Web Development | Technology | 5 | 2 | 2026-05-18 | |
| Project Management | Business | 2 | 0 | 2026-05-15 | |
| Financial Analysis | Business | 0 | 0 | 2026-05-10 | |
| Cybersecurity | Technology | 0 | 0 | 2026-05-22 |
Screen Flow (from flow.puml):
📝 Spec notes — UC-LMS.03 / SCR-LMS.14 (fields, actions, requirements)
- Screen: SCR-LMS.14 — Manage Tag List (entry screen)
- Use case: UC-LMS.03 — Manage Tag
- Primary actor: ACT-11 — Tag Admin
- Secondary actor: ACT-04 — Super Administrator
Tag management screen for Tag Admin. Displays all tags in a table — tag name, Tag Group, courses used, specializations used, last updated. A "+ Add Tag" button above the table opens a pop-up (SCR-LMS.59) to create a new tag. Each row has an Edit button that opens the same pop-up pre-populated for editing, and a Delete button that opens SCR-LMS.15 before proceeding. Supports search by tag name and filter by Tag Group.
filter_group_id"Filter by Tag Group" — dropdown · TagGroup.id · optional · null = all · Page headersearch_query"Search tag" — text · optional · max 200 · Page headertag_name"Tag name" — text · Tag.name · read-only · Tag tabletag_group_name"Tag Group" — text · Tag.tag_group_id · read-only · Tag tablecourse_count"Courses used" — number · computed from CourseTag count · fallback 0 · read-onlyspecialization_count"Specializations used" — number · computed from SpecializationTag count · fallback 0 · read-onlyupdated_at"Last updated" — date · Tag.updated_at · read-only
add_tag"+ Add Tag" — enabled when at least one active Tag Group exists · opens SCR-LMS.59 in create mode · triggers UC-LMS.03-M-2search"Search" — always enabled · inline filteredit_tag"Edit" (per row) — always enabled · opens SCR-LMS.59 pre-populated · triggers UC-LMS.03-A-2A-1delete_tag"Delete" (per row) — always enabled · opens SCR-LMS.15 · triggers UC-LMS.03-A-2B-1
- Default sort: primary by Tag Group (alphabetical), secondary by tag name (alphabetical). Column sorting — click any column header to switch between ascending and descending sort.
- Empty state — (a) no tags in the system: show a message guiding the user to add the first tag; (b) search/filter returns no results: show "No tags match the criteria" with a clear filter button.
- If no active Tag Group exists — the "+ Add Tag" button is always disabled and a warning message "Please create a Tag Group first" is shown with a link to Manage Tag Group (UC-LMS.12). [refs: UC-LMS.12]
↳ Embedded dialog: SCR-LMS.59 — Tag Form (Add / Edit)
Pop-up form used in 2 modes: (1) Create — opens an empty form when the User clicks the "+ Add Tag" button. (2) Edit — loads the existing tag's data when the User clicks "Edit" on any tag row. The system checks for duplicate tag names before saving.
tag_name"Tag Name" — text · required · max 100 · Tag.nametag_group_id"Tag Group" — dropdown · required · Active TagGroups only · Tag.tag_group_id
save"Save" — enabled when tag_name.length > 0 && tag_group_id != null · triggers UC-LMS.03-M-5 / UC-LMS.03-A-2A-4cancel"Cancel" — always enabled · dismisses modal
- Pop-up title changes by mode — "Add Tag" (Create) / "Edit Tag" (Edit).
- Edit mode — the system loads the existing tag's values into every form field before display: tag_name → Tag.name, tag_group_id → Tag.tag_group_id.
- Tag name must be unique (case-insensitive) on both create and edit — if duplicate, show an inline error below the Tag Name field without closing the pop-up.
↳ Embedded dialog: SCR-LMS.15 — Tag Delete Confirmation Dialog
Confirmation dialog for deleting a tag. Shows the count of courses and Specializations currently using the tag. If total > 0 — disables confirmation and shows a cannot-delete message with a suggestion to remove the tag from courses/Specializations first. If count = 0 — enables the confirm button for soft delete.
tag_name_label"Tag name" — text · Tag.name · read-only · Tag summary regioncourse_count"Courses used" — number · computed from CourseTag count · fallback 0 · read-only · Tag summary regionspecialization_count"Specializations used" — number · computed from SpecializationTag count · fallback 0 · read-only · Tag summary regionblock_message"Reason deletion is blocked" — text · computed · read-only · visible when course_count > 0 || specialization_count > 0 · Dialog actions region
confirm_delete"Confirm Delete" — enabled when course_count == 0 && specialization_count == 0 · triggers UC-LMS.03-A-2B-3cancel"Cancel" — always enabled · closes dialog, returns to SCR-LMS.14
- course_count + specialization_count > 0 → Confirm disabled + block_message "Cannot delete — this tag is used by N course(s) and M Specialization(s). Please remove the tag from all courses and Specializations first."
- Delete is soft delete — tag marked with deleted_at; no longer appears in tag picker or catalog filter.
- Tag merging / renaming for semantically duplicate tags — out of scope v1?
- Tag color / icon (cosmetic) — add field after catalog UI design is finalized?