Sub-flow › Build Quiz › Quiz Builder
๐ŸŽฌ Simulate: Recoverable ยท AF-8A Reset SUC-CCM-11 harness ยท 14 scenarios

Quiz Builder

SCR-CCM.06 ยท Course: Introduction to Python Programming โ€” Lesson: Module 2 โ€บ Lesson 5
Quiz Information
Quiz title is required
Leave blank = no limit
Passing score exceeds total points
Calculated from all sections
Optional โ€” randomly picks N from the full assembled list; must not exceed the total assembled question count
Shuffle Options
Assessment Type
Time limit, attempts, and passing score are quiz-level defaults set above; assessment type (Practice/Summative), time limit, attempts, and passing score can be overridden per placement on the content item in the lesson editor.
โ ฟ Section 1: Core Concepts 0 items
No questions or draw rules yet โ€” use "Add to section" below to get started.
โ ฟ Section 2: Applied Problems 2 fixed ยท 1 draw rule
Question stem Type Points Course
โ ฟ Write a Python function that returns the factorial of a number. Short Answer 20 โ€”
โ ฟ Match each Python built-in function to its purpose Matching 10 โ€”
Draw rule Tag: loops ยท Draw 1 question ยท From: Institute (courses I created or collaborate on)
๐Ÿ“ Spec notes โ€” SUC-CCM-11 / SCR-CCM.06 Quiz Builder
Identity
  • Screen: SCR-CCM.06 โ€” Quiz Builder
  • Sub-use case: SUC-CCM-11 โ€” Build Quiz (demoted from UC-CCM.02 on 2026-06-23 โ€” no standalone actor goal, always invoked from a caller UC)
  • Type: page ยท Primary actor: instructor role (see caller UC's primary_actors)
ReturnUrl context

Current returnUrl: /author-course/
Fallback: / when returnUrl is empty.
Propagation: all in-SUC links carry returnUrl. AF 4B "New blank" links carry nested returnUrl: /build-quiz/?returnUrl=<encoded outer ru> so the question-author SUC returns here, not to the outer caller.
Finish: redirects to /author-course/. Cancel sub-flow: redirects to /author-course/?sub_cancelled=1.

Sub-flow context

SUC-CCM-11 โ€” Build Quiz
Invoked by (Backoffice Portal โ€” mockup-plan.md): UC-CCM.01 (Author Course Content โ€” "Quiz โ†’ Create New" / "Edit Quiz" in the Add Content dialog / lesson content list) ยท UC-CCM.10 (Manage Course Assets โ€” Asset Library tab "Build Quiz").
AF 4B "New blank": navigates out to the matching question-author SUC (MC/TF โ†’ SUC-CCM-07, Short Answer โ†’ SUC-CCM-08, Matching โ†’ SUC-CCM-09, Numerical โ†’ SUC-CCM-10) with returnUrl pointing back here. On save, the newly authored question is added to the current course's question bank and linked as a fixed question in the active section; on cancel, control returns here unchanged.

Quiz-level fields
  • title โ€” text ยท required ยท max 255
  • instructions โ€” textarea ยท optional ยท max 2000
  • time_limit_minutes โ€” number ยท optional ยท min 1 max 999
  • max_attempts โ€” number ยท optional ยท default 1
  • passing_score โ€” number ยท required ยท min 0
  • total_points โ€” number ยท read-only ยท computed from all sections
  • quiz_draw_count โ€” number ยท optional ยท must not exceed total assembled question count
  • shuffle_questions โ€” boolean ยท default false ยท seed stored per attempt
  • shuffle_options โ€” boolean ยท default false
  • is_summative โ€” enum [Practice/Summative] ยท required ยท default false (Practice)

Delivery settings โ€” assessment type, time limit, maximum attempts, and passing score can also be configured per placement on the content item in the lesson editor (UC-CCM.01 AF 7A); the same quiz can be summative in one lesson and practice in another.

Per-section fields
  • section_name โ€” text ยท required ยท max 100 ยท default "Section N" (auto-incremented)
  • section_description โ€” textarea ยท optional ยท max 500
Per-draw-rule fields (Random draw inline form โ€” AF 4A add, AF 6C edit/remove)
  • draw_tag โ€” enum ยท required
  • draw_count โ€” number ยท required ยท min 1
  • draw_scope โ€” enum [course_draft / institute / both] ยท required ยท default course_draft
Inline picker fields (Pick from bank โ€” default step-4 action)
  • picker_search โ€” text ยท optional ยท max 255 ยท only active questions shown
  • picker_type_filter โ€” enum [all / mc_tf / short_answer / matching / numerical] ยท default all
  • Cross-course: source course name shown alongside question stem when the question comes from a different course
Save validation (SCR-CCM.06 AR#2)
  1. Every section must have at least 1 fixed question or draw rule
  2. total_points must be >= passing_score
  3. If quiz_draw_count is set, it must not exceed total assembled question count
AF numbering (SUC-CCM-11)
  • AF 3B/3C/3D/3E/3F โ€” section management: add / rename-edit / remove / reorder / split (resume at step 4 or 6)
  • AF 4A โ€” add questions via random draw by tag (resume at 5)
  • AF 4B โ€” author a new question inline (resume at 5) โ†’ SCR-CCM.07
  • AF 6A/6B/6C โ€” item management within a section: reorder / remove fixed question / edit-remove draw rule
  • AF 8A โ€” quiz fails validation at save (resume at 7)
  • AF 1A โ€” cancel before saving (end_failure)
  • AF 1B โ€” delete the entire quiz (end_failure)
Additional requirements
  1. Working-draft save only โ€” permanent version created on course review submission (UC-CCM.05) [SUC-CCM-11 AR#5]
  2. Shuffle seed stored per attempt โ€” returning learner sees same order as when they started [SS-CCM.08]
  3. "Remove section" disabled when only one section remains [SUC-CCM-11 AR#2 / SCR AR#9]
  4. "Split section" (AF 3F) available only when the section has at least 2 items [SUC-CCM-11 AF 3F / SCR AR#9]
  5. Draw rule pool warning if question bank has fewer active questions than draw_count โ€” inline warning, does not block save [SUC-CCM-11 AR#11, SS-CCM.10]
  6. Random draw and fixed-question picks resolve only against active (non-retired) questions [SUC-CCM-11 AR#7, SS-CCM.34]
  7. WCAG AA compliance โ€” drag handles keyboard-accessible [NFR-09]
  8. Atomic save โ€” all section/question/draw-rule changes saved together; partial save not permitted [SUC-CCM-11 AR#8, SS-CCM.07]
  9. Questions authored inline (AF 4B) are added to the current course's question bank and available to other quizzes/sections in the same course