Sub-flow › Author Short Answer Question
Question New Question Short Answer
Question text is required.
Add one or more keywords. The learner's response is matched against all keywords β€” the highest matching fraction determines the score. Multiple keywords accept spelling variants or synonyms.
Keyword Fraction (0–1) Feedback when matched (optional)
At least one keyword is required, and each keyword must be non-empty.
Applies to all keywords β€” when off, the learner's answer must match a keyword's exact casing.
Shown to all learners after submission.
Total marks this question contributes.

Prototype β€” simulate state:

Spec notes

Identity

SUC-CCM-08 Β· Screen: SCR-CCM.07 (Question Editor β€” Short Answer)

ReturnUrl context

Current returnUrl: /manage-question-bank/
Fallback: / when returnUrl is empty.
Propagation: Save β†’ returnUrl. Cancel β†’ returnUrl + &sub_cancelled=1.

Sub-flow context

SUC-CCM-08 Β· Invoked by (Backoffice Portal): SUC-CCM-11 (Build Quiz) and UC-CCM.12 (Manage Question Bank).
Question type is locked to short_answer and cannot be changed after first save.
The learner's response is matched against all keywords β€” the highest matching fraction determines the score (partial credit supported).
New question: Question + QuestionVersion v1 + QuestionAnswer rows, status Active.
Edit mode: a new QuestionVersion is saved; the previous version is preserved for quiz sections already referencing it.
Cancel (AF 5A): no data saved, question bank unchanged.
Validation error (AF 6A): shows an error on each field that failed the requirement; resumes at step 5.

Screen spec: SCR-CCM.07 (short_answer type)

  • Regions: Question Header Β· Question Text Β· Type-Specific Content Β· Feedback & Explanation Β· Scoring Β· Form Actions
  • question_type (Field 2): read-only Β· locked to param.type = short_answer Β· data_ref: Question.type
  • question_text (Field 3): required Β· 1–5000 chars Β· data_ref: QuestionVersion.text
  • sa_keywords (Field 8): dynamic table β€” keyword (QuestionAnswer.content), fraction (QuestionAnswer.fraction, 0..1), feedback (QuestionAnswer.feedback, optional); at least 1 keyword required, each non-empty
  • sa_case_insensitive (Field 9): question-level toggle, default on (case-insensitive) Β· data_ref: QuestionVersion.config.case_insensitive
  • explanation (Field 5): optional Β· max 5000 Β· data_ref: QuestionVersion.config.explanation
  • points (Field 4): required Β· 0.01–1000 Β· default 1 Β· data_ref: QuestionVersion.points
  • AR#1: at least 1 keyword, each non-empty (SS-CCM.09). AR#2: atomic save β€” no partial data on failure (SS-CCM.07).