# Reusable Question Banks

## User goal

Question banks help instructors reuse conceptual checks across lessons. This is useful when multiple tutorials should assess the same core ideas without rewriting each MCQ by hand.

## Minimal bank

    questions:
      - id: visualization-aesthetic
        question: "Which aesthetic maps a variable to the vertical axis?"
        answers:
          - text: "y"
            correct: true
          - text: "x"
            correct: false
        tags: [visualization]
        difficulty: introductory
        language: en

## Load and validate

    library(tutorizeR)

    qb <- load_question_bank("question-bank")
    report <- validate_question_bank(qb, strict = FALSE)

    print(report)

## Reference bank questions in a lesson

The YAML content inside a `tutorizeR-mcq-ref` block can reference existing bank items:

    ids: [visualization-aesthetic]
    strategy: ordered
    shuffle_answers: false

## Realistic installed example

    library(tutorizeR)

    example_dir <- system.file("examples", "example_course_module", package = "tutorizeR")
    qb <- load_question_bank(file.path(example_dir, "question-bank"))

    work_dir <- file.path(tempdir(), "tutorizeR-qb-example")
    dir.create(work_dir, recursive = TRUE, showWarnings = FALSE)
    file.copy(file.path(example_dir, "lesson-source.qmd"), work_dir, overwrite = TRUE)
    file.copy(file.path(example_dir, "student_activity.csv"), work_dir, overwrite = TRUE)

    report <- tutorize(
      input = file.path(work_dir, "lesson-source.qmd"),
      output_dir = work_dir,
      assessment = "both",
      question_bank = qb,
      mcq_source = "mixed",
      overwrite = TRUE,
      verbose = FALSE
    )

    print(report)

## Limits

Question banks improve reuse, but they do not guarantee good assessment design. Instructors should check that each MCQ is aligned with the learning objective, has plausible distractors, and uses language appropriate for the course.

## Reproducibility checklist

    library(tutorizeR)

    example_dir <- system.file("examples", "example_course_module", package = "tutorizeR")
    qb <- load_question_bank(file.path(example_dir, "question-bank"))
    validate_question_bank(qb, strict = TRUE)