My Institute › People › Institution Roster
🎬 Simulate:

Institution Roster

Working Institute: Savannakhet Technical and Vocational College ↑ Import Roster
Roster entries — Savannakhet Technical and Vocational College 43 entries
Student ID First Name Last Name Faculty Major Actions
ST-2024-0801 Khampheng Sonethip Technology & Engineering Electrical Technology
ST-2024-0802 Thiphavanh Keovongsa Technology & Engineering Civil Construction Matched
ST-2024-0804 Manisone Phommavong Business & Management Accounting
… 40 more entries

Screen Flow (from flow.puml):

↗ [entry] Admin via My Institute nav (Working Institute pre-filtered) → [exit] Save / Confirm Delete / Cancel → Roster
📝 Spec notes — UC-IDP.24 / SCR-IDP.55 (fields, actions, requirements)
Identity
  • Screen: SCR-IDP.55 — Institution Roster
  • Use case: UC-IDP.24 — Manage Institution Roster
Brief description

Page listing students in the institution's Roster — used for matching against TVET student data registered in the system. Each row displays: student ID, first name, last name, faculty, major, and action buttons. Admin can search and filter by student ID, email, mobile, and major. Both PA and SA access via the Working Institute context (SS-IDP.31) — the Roster is pre-filtered to the current Working Institute; no institution dropdown is shown on this page. To manage a different institution's Roster, Admin switches the Working Institute. Unmatched entries can be edited (SCR-IDP.52) or deleted (SCR-IDP.53) per row. Adding new entries is exclusively through "Import Roster" (UC-IDP.06).

Fields
  • Search & Filter: student_id_filter "Student ID" · text · no data_ref, email_filter "Email" · text · no data_ref, mobile_filter "Mobile" · text · no data_ref, major_filter "Major" · enum · options from Major master filtered to Working Institute
  • Roster List (display columns, all read-only): student_id (InstitutionRoster.student_id), firstname (InstitutionRoster.firstname), lastname (InstitutionRoster.lastname), faculty (Faculty.name — resolved via InstitutionRoster.major_id → Major.faculty_id → Faculty.name), major (Major.name — resolved via InstitutionRoster.major_id)
Actions
  • import_roster "Import Roster" — always enabled · cross-UC to UC-IDP.06 (Bulk Import Learners)
  • search "Search" — always enabled · triggers UC-IDP.24-M-2
  • clear_filter "Clear Filter" — always enabled · resets all filter fields and re-renders list
  • edit_entry "Edit" — per row · unmatched entries only · opens SCR-IDP.52 dialog · triggers UC-IDP.24-M-4
  • delete_entry "Delete" — per row · unmatched entries only · opens SCR-IDP.53 dialog · triggers UC-IDP.24-A-4A-1
Additional requirements
  1. Role-based scoping via Working Institute context (SS-IDP.31) — both PA and SA access the Roster pre-filtered to their current Working Institute; no institution dropdown on this page; requests for data outside the allowed scope are rejected at the backend.
  2. Per-row Edit and Delete buttons shown only for unmatched entries (InstitutionRoster.match_status). Entries linked to a registered learner display no action buttons.
  3. Display empty state with "Import Roster" button when no entries in scope (AF 1A).
↳ Embedded dialog: SCR-IDP.52 — Edit Roster Entry

Type: dialog · Opened by: Edit button on SCR-IDP.55 · Returns to: SCR-IDP.55 on Save (success) or Cancel · Scenario AF-5A: auto-opens dialog with institution changed, Student ID cleared, Faculty & Major unchanged · Scenario AF-6A: auto-opens dialog with inline conflict error on Student ID

Dialog for Admin to edit one student entry in the Roster. Opens as overlay on SCR-IDP.55; current data pre-filled in all fields. Institution: SA gets editable dropdown of all active institutions; PA sees read-only text locked to Working Institute. AF-5A (SA changes institution): Student ID is cleared (institution-specific identifier must be re-entered); Faculty and Major are NOT reset — they are global vocabularies independent of institution. Faculty cascade: changing Faculty resets the Major dropdown to Active Majors of the new faculty (SS-IDP.33); Save is disabled until a Major is reselected.

Fields
  • institute_id "Institution" — enum · Institution.id · required · read-only when actor_role == program_administrator; SA gets editable dropdown of all active institutions; cascade on change (SA only): clears student_id; Faculty and Major unchanged
  • student_id "Student ID" — text · required · validation: not_blank, unique_per_institution · InstitutionRoster.student_id · cleared when institution changes (SA only — AF 5A)
  • faculty_id "Faculty" — enum · InstitutionRoster.faculty_id · required · global vocabulary (all faculties, sorted alphabetically) · cascade: when faculty changes, Major dropdown resets to Active Majors of the new faculty (AR.3)
  • major_id "Major" — enum · InstitutionRoster.major_id · required · Active Majors under selected faculty (SS-IDP.33) · resets when faculty changes
  • firstname "First Name" — text · required · max 100 chars · InstitutionRoster.firstname
  • lastname "Last Name" — text · required · max 100 chars · InstitutionRoster.lastname
  • email "Email" — text · required when mobile empty · email format · max 255 chars · unique_platform_wide [SS-IDP.03]
  • country_code "Country Code" — text · read-only · default literal "+856"
  • mobile "Mobile" — phone · required when email empty · unique_platform_wide [SS-IDP.03]
Actions
  • save "Save" — enabled when required_fields_valid; disabled while duplicate detected (AF 6A) or after institution change until Student ID re-entered (AF 5A) · triggers UC-IDP.24-M-6
  • cancel "Cancel" — always enabled · dismisses dialog, no data change · no UC step
Additional requirements
  1. Inline error below the field that fails uniqueness (student_id within institution / email or mobile platform-wide); Save disabled until corrected (AF 6A). [SS-IDP.03]
  2. Admin must provide at least one of email or mobile; when both empty, error shown below mobile: "Please provide at least one of email or mobile".
  3. When Faculty changes, Major dropdown resets (clears + re-populates with Active Majors of new faculty per SS-IDP.33); Save disabled until Major reselected. When SA changes Institution, Student ID is cleared; Faculty and Major are NOT reset (AF 5A). [SS-IDP.33]
↳ Embedded dialog: SCR-IDP.53 — Delete Roster Entry Confirmation

Type: dialog (data-bs-backdrop="static" data-bs-keyboard="false") · Opened by: Delete button on SCR-IDP.55 (unmatched entries only) · Returns to: SCR-IDP.55 on Confirm Delete or Cancel · Scenario AF-4A: auto-opens this dialog on page load

Deletion confirmation dialog — all fields read-only. Opens only for unmatched entries. Entries already matched (linked to a learner) have no action buttons on the row (SCR-IDP.55 AR.2 — blocked before dialog opens).

Fields (all read-only)
  • student_id "Student ID" — InstitutionRoster.student_id
  • fullname "Full Name" — computed: InstitutionRoster.firstname + " " + InstitutionRoster.lastname (not persisted separately)
  • institute_name "Institution" — lookup: Institute.name via InstitutionRoster.institute_id → Institute.id
Actions
  • confirm_delete "Confirm Delete" — always enabled · danger styling (red) · triggers UC-IDP.24-A-4A-3 · navigates back to SCR-IDP.55
  • cancel "Cancel" — always enabled · dismisses dialog, no data change · no UC step
Additional requirements
  1. "Confirm Delete" must use danger styling (red) to communicate the destructive action risk.
  2. Keyboard focus defaults to "Cancel" button when dialog opens — prevents accidental deletion via Enter/Space. [NFR-09]